Recent changes to this wiki:

Inline [[All_Pages]] into [[Meta]]
diff --git a/Meta.wiki b/Meta.wiki
index 73ffb0d..0e918a3 100644
--- a/Meta.wiki
+++ b/Meta.wiki
@@ -33,3 +33,4 @@ this same content on IPFS, only the wesl-ee.eth name is far easier to remember.
I have this .eth domain name reserved until 2032 so you should have plenty of
time to browse through the wiki (⌒▽⌒)☆

diff --git a/Meta/All_Pages.wiki b/Meta/All_Pages.wiki
index 94d07bb..94e4483 100644
--- a/Meta/All_Pages.wiki
+++ b/Meta/All_Pages.wiki
@@ -1,3 +1,8 @@
+Here's a breakdown of all pages on this wiki. This is definitely the least-cool
+way to browse the site; I find it more fun to just keep clicking on the blue
+links and wander around but this is provided to give less-accessible pages some
+visibility too.
+
[[!map  pages="*
and !(ikiwiki or ikiwiki/*)
and !*.*
diff --git a/index.wiki b/index.wiki
index 0d0d05b..7f0dac5 100644
--- a/index.wiki
+++ b/index.wiki
@@ -26,4 +26,7 @@ start exploring my personal wiki some the best way is to read a little about

+can also easily browse [[all the pages|Meta/All_Pages]] but that's definitely
+the lamest way to browse a wiki; just click on the blue links and wander around


diff --git a/Distributed_Hash_Table.wiki b/Distributed_Hash_Table.wiki
index 84da7a4..32f2c7f 100644
--- a/Distributed_Hash_Table.wiki
+++ b/Distributed_Hash_Table.wiki
@@ -52,6 +52,13 @@ it is hashed.
The distance between two nodes in a vanilla Kademlia network is defined as the
XOR of the node IDs. XOR is chosen partly because it is a transitive operation
so that the distance from A to B is the same as the distance from B to A.
+This distance determines the k-bucket (below) into which any known peers are
+stored. Peers which are further away from a given node are also further away in
+the network's binary tree.
+
+[[!teximg code="""
+\text{dist}(A,B)=\text{hash}(A)\oplus\text{hash}(B)
+"""]]

### Storing Data in a Kademlia DHT


All_Pages
diff --git a/Distributed_Hash_Table.wiki b/Distributed_Hash_Table.wiki
index 4ee6653..84da7a4 100644
--- a/Distributed_Hash_Table.wiki
+++ b/Distributed_Hash_Table.wiki
@@ -76,10 +76,10 @@ Take this image of the protagonist of
[[!img img/mahoro.jpeg]]

I know its unique MD5 hash is f00370836e8f32c8f930af4b59163c04 and its IPFS
-content identifier (CID) is f00370836e8f32c8f930af4b59163c04. The CID
-is encoded with base58 (the same encoding as Bitcoin addresses) and points to a
-Merkle DAG built from the small chunks of the file. Because this file is quite
-small (137 KiB) it fits all into one block.
+content identifier (CID) is QmX8CSdgWFdgACxY71GVJwgVB19Bn3An5zNnzH1Mj82ut2.
+The CID is encoded with base58 (the same encoding as Bitcoin addresses) and
+points to a Merkle DAG built from the small chunks of the file. Because this
+file is quite small (137 KiB) it fits all into one block.

[[!syntax text="""
ipfs@gyw:~$md5sum mahoro.jpeg diff --git a/Meta/All_Pages.wiki b/Meta/All_Pages.wiki new file mode 100644 index 0000000..94d07bb --- /dev/null +++ b/Meta/All_Pages.wiki @@ -0,0 +1,12 @@ +[[!map pages="* + and !(ikiwiki or ikiwiki/*) + and !*.* + and !img + and !recentchanges + and !smileys + and !wikiicons + and !shortcuts + and !index" +]] + +  Clean up Me linkmap diff --git a/Cooking.wiki b/Cooking.wiki deleted file mode 100644 index e69de29..0000000 diff --git a/Me.wiki b/Me.wiki index d3ae641..f64c24f 100644 --- a/Me.wiki +++ b/Me.wiki @@ -8,11 +8,9 @@ Engineering and another B.S. in Electrical Engineering. I also accidentally took enough courses during my college tenure to collect my minor in mathematics on the way out the door. -I work with [[Digital_Money]] and I believe that all currency will eventually be -stored on a blockchain. I began my career as a Software Engineer in NVIDIA's -[Networking Business Unit](https://www.nvidia.com/en-us/networking/) (NBU) but -quickly found a home developing financial tools for the [[Digital_Money/Terra]] -blockchain. +I began my career as a Software Engineer in NVIDIA's [Networking Business +Unit](https://www.nvidia.com/en-us/networking/) (NBU) but quickly found a home +developing financial tools for the [[Digital_Money/Terra]] blockchain. Learning -------- @@ -63,4 +61,4 @@ me: - Playing games in [[Virtual_Reality]] - Drinking and making [[Coffee]] -- [[Cooking]], both for myself and with my fiancé +- Cooking, both for myself and with my fiancé  Distributed hash tables diff --git a/Distributed_Hash_Table.wiki b/Distributed_Hash_Table.wiki new file mode 100644 index 0000000..4ee6653 --- /dev/null +++ b/Distributed_Hash_Table.wiki @@ -0,0 +1,131 @@ +A DHT is a key-value structure that is spread across a wide-area network like +the Internet. You feed a key into the DHT and it will return a value. It is used +in distributed + peer-to-peer systems as a rudimentary data-store. + +Before DHT existed many "distributed" networks actually used centralized servers +(or a set of central servers) that acted as authorities on the network. This is +how Napster operated for its brief life and this centralized architecture likely +led to its ass getting clapped by the RIAA in 1999. Interestingly +[Soulseek](https://www.slsknet.org/) still operates with a set of centralized +servers and I'm honestly not sure how it has avoided a similar fate. I do know +that Soulseek [censors](http://www.soulseekqt.net/news/node/2056) certain +queries on these central servers like "Bob Dylan" or "Beatles"; whether that is +self-censorship or not is left to the imagination. + +Many of the later distributed file-sharing networks used DHT to socialize new +clients with other peers already on the network and to allow the discovery of +files by network peers without a central server. The earliest example I can +think of is Freenet (2000) and though technically Freenet did not use a proper +DHT until later on in its development Freenet's earliest iterations used a +lookup very similar to a DHT. + + +The better choice for creating a censorship-resistant network is to distribute +the storage of look-up data from a central server outward to the peers on the +network; not incurring a single point of failure is the biggest reason why DHTs +are popular in decentralized systems. Instead of "phoning home" to the big +server in the NSA server closet peers on the network use the DHT to socialize +with new clients joining the network and to discover of files hosted by other +network peers. + +One way we could network with other peers is to simply flood the network with +requests when any peer is looking for a certain file. This is how Gnutella +operates and it is how Soulseek peers discover files too (after routing through +the central server to relay its request to peers). Flooding like this creates an +inscalable network however, as each new client added to the network graph causes +the number of messages each peer has to send in order to flood the network +completely to increase exponentially. + +Kademlia DHTs +------------- + +DHT fixes the issues created by flooding. Kademlia in particular is the flavor +of DHT I know the best and so I will explain concepts using the Kademlia DHT, +though the ideas are generally the same for any DHT structure. + +Nodes in a Kademlia network are organized into a binary tree according to each +node's unique node ID. Often this is a hash of some information that is unique +to the node like its IP address + listening port. So you don't get +rainbow-tabled out of existence normally a salt is added to this content before +it is hashed. + +The distance between two nodes in a vanilla Kademlia network is defined as the +XOR of the node IDs. XOR is chosen partly because it is a transitive operation +so that the distance from A to B is the same as the distance from B to A. + +### Storing Data in a Kademlia DHT + +Any data that needs to be stored into the DHT is hashed using the same algorithm +that is used to create node IDs. The data is stored at the nodes that have the +smallest XOR-distance (are "closest") to the hash of the data. When any node +needs to lookup that data in the DHT it queries its neighbor that is "closest" +to the hash. If that neighbor doesn't have access to the data itself it will ask +*its own* neighbors the same thing; queries propagate the binary tree this way +until the data is found. + +The data stored in the DHT here is arbitrary; it could be a file itself but +often it is information on where to acquire the file; either a "IP:port" +combination or another key to the DHT. Since you can hash any arbitrary data you +can store anything in this tree, and you can even mix and match the types of +data you are storing by appending a namespace to the key, e.g. +image:065474e2fe971c80aac049d6f7b978a0 + +Take this image of the protagonist of +[Mahoromatic](https://anidb.net/anime/109), one of my favorite manga / anime. + +[[!img img/mahoro.jpeg]] + +I know its unique MD5 hash is f00370836e8f32c8f930af4b59163c04 and its IPFS +content identifier (CID) is f00370836e8f32c8f930af4b59163c04. The CID +is encoded with base58 (the same encoding as Bitcoin addresses) and points to a +Merkle DAG built from the small chunks of the file. Because this file is quite +small (137 KiB) it fits all into one block. + +[[!syntax text=""" +ipfs@gyw:~$ md5sum mahoro.jpeg
+f00370836e8f32c8f930af4b59163c04  mahoro.jpeg
+ipfs@gyw:~$ipfs add -Q --only-hash mahoro.jpeg +QmX8CSdgWFdgACxY71GVJwgVB19Bn3An5zNnzH1Mj82ut2 +"""]] + +If I were to use the hash as the key into a DHT I could store the entire picture +at this hash. For larger files this poor design however because I'd be storing +large files on an arbitrary peer that probably doesn't want to host my file. +What if I chose to hash an illegal file? Then *your* node would probably get +raided by the fed while I was safe at home. For these reasons networks like +Freenet chunk files before storing them in the DHT and may choose to encrypt +chunks too, such that only peers with the decrypting key can read the chunks. + +When files are chunked like this the hash of the whole file normally points to a +Merkle DAG which can be walked to read the whole file. This is essentially how +IPFS stores files; directories can be a little more complex. However because the +file is so small it is stored entirely in the block which describes the DAG. + +Interestingly this file was already existant on [[IPFS]] before I added it. + +[[!syntax text=""" +ipfs@gyw:~$ ipfs dag stat QmX8CSdgWFdgACxY71GVJwgVB19Bn3An5zNnzH1Mj82ut2
+Size: 140270, NumBlocks: 1
+"""]]
+
+By "adding" it to the network again I only cached the block temporarily on my
+client. When I upload this image to my VPS and consequently pin it on IPFS it
+will be available at least as long as my server keeps it pinned. Though the fact
+it was already available on IPFS means someone is likely pinning a (sub)set of
+
+### K-buckets
+
+Nodes organize their neighbors into "k-buckets"; these represent a branch of the
+whole binary tree and each node needs to know at least one node in each
+k-bucket to be able to route a query to any node in the tree. K-bucket knowledge
+is normally acquired by a node when it joins the network but the contents of its
+k-buckets will change over time as nodes churn into and out of the network,
+since nodes will ping their neighbors to ensure they are still connected and
+responding.
+
+Ideally a node in a DHT is geographically close to its neighboring nodes. When
+we define distance as an XOR however nodes may be close in XOR-distance but far
+away geographically. This is not something I think is addressed in Kademlia but
+in a more flexible DHT like Chord it may be possible to form
+neighbor-relationships instead that are close geographically.


IPFS
diff --git a/IPFS.wiki b/IPFS.wiki
new file mode 100644
index 0000000..e6c9885
--- /dev/null
+++ b/IPFS.wiki
@@ -0,0 +1,168 @@
+IPFS is the Inter-planetary filesystem. I'm not sure exactly why it's called
+that but it's a really cool technology. The main idea of IPFS is that at its
+core it stores files across a distributed network, and that complexity can be
+abstracted away to make IPFS just feel like you're reading from a pretty slow
+hard-drive. But the reality is, of course, that each non-cached read is fetching
+blocks of files from computers scattered across the world.
+
+Distributed Hash Tables
+-----------------------
+
+One of the essential technologies that powers IPFS storage is the [[distributed
+hash table|Distributed_Hash_Table]], or DHT. A DHT is a key-value structure that
+is spread across a wide-area network like the Internet. In simplest terms, you
+feed a key into the DHT and it will return a value just as a regular hash table
+would.
+
+Nowadays many libraries (IPFS being one such library) use variations on the
+original idea of a DHT to socialize new peers into the network and to facilitate
+the discovery of files across a wide-area network like the Internet. The magnet
+files you sometimes get for torrents that are a mile long and look like
+magnet:?xt=urn:btih:d4997b8e18d5c1ef8067753cc3eecc3e612fa9af&dn=%5BTOMA%5D%20Golden%20Boy%20%28Dual%20Audio%20EN%2BJP%29%20%5B720x480%5D&tr=http%3A%2F%2Fnyaa.tracker.wf%3A7777%2Fannounce&tr=udp%3A%2F%2Fopen.stealth.si%3A80%2Fannounce&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2Fexodus.desync.com%3A6969%2Fannounce&tr=udp%3A%2F%2Ftracker.torrent.eu.org%3A451%2Fannounce
+</a>
+specify a unique file on P2P network which is a variant of a Kademlia DHT called
+Mainline DHT. The xt specifies what file you're talking about; you can use
+this link to connect to the torrent network without ever touching a tracker.
+That's why they're called trackerless torrents after all ∩( ・ω・)∩ everything
+after the xt parameter is just extra information and may include information
+about a tracker (tr) but this is optional information that only serves to make
+
+Anyway before peer-to-peer networks began using DHT technology there were
+primarily two ways peers shared information and routed queries:
+
+1. Via centralized servers, or
+2. Network flooding
+
+You may contest that a network that routes queries using central servers (1) is
+not truly a decentralized network; you'd be right.
+
+Centralized servers are vulnerable to being censored, either voluntarily or
+"voluntarily"; Soulseek, the P2P file-sharing platform used mostly to share and
+distribute music, [is a good example of this](
+(http://www.soulseekqt.net/news/node/2056); there are some queries for
+well-known artists like "Bob Dylan" or "The Beatles" which Soulseek's servers
+refuse to answer despite the files being shared by the network's peers.
+
+Gnutella (a variant of which was Limewire) is a good example of a protocol that
+uses network flooding (2) to socialize nodes on the network. A peer on Gnutella
+is constantly receiving queries from its neighboring peers and it will relay
+these queries to its own peers until the time-to-live (TTL) on a query is
+exhausted. I may be simplifying the details of it a bit but I know that Gnutella
+is not scalable because of this decision in its design. You can't really fault
+the original team though because this was the year 2000 and DHT was only really
+popularized a few years later.
+
+Chunking Files
+--------------
+
+When staging files to be uploaded to IPFS the file's contents are first chunked
+into fixed-size blocks of data, then each block is uploaded independently of the
+other blocks to the network. Each unique block of data has a unique hash which
+will be used as the key in the network's DHT; IPFS calls this hash a "Content
+Identifier" (CID). The chunks are then organized into a [Merkle
+DAG](https://docs.ipfs.io/concepts/merkle-dag/) (directed acyclic graph); the
+root node of this tree identifies the file itself so in order to fetch the
+uploaded file one only needs to know the CID of its root node. As users interact
+with and view this file it is replicated across the network and made available
+even if the original uploader goes offline.
+
+Merkle DAGs are used outside IPFS too; the most interesting (to me) application
+of DAGs is their use in Ethereum's hashing algorithm
+[Ethhash](https://eth.wiki/concepts/ethash/dag). More generally, Merkle trees
+and Merkle roots are [[used in Bitcoin's|Digital_Money/Bitcoin/Merkle_Roots]]
+and Ethereum's block headers for validating the set of transactions within
+block.
+
+Installing + Using IPFS
+-----------------------
+
+Make sure you have an IPFS client installed before accessing the network. I like
+the official [go-ipfs](https://github.com/ipfs/go-ipfs) client which is bundled
+for release on many OS. Either compile from source or follow the instructions
+at that repository for installing the client on your OS.
+
+With the client installed you can retrieve files from the network once you
+initialize its environment.
+
+[[!syntax text="""
+ipfs@gyw:~$ipfs init +ipfs@gyw:~$ ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme
+
+Hello and Welcome to IPFS!
+
+██╗██████╗ ███████╗███████╗
+██║██╔══██╗██╔════╝██╔════╝
+██║██████╔╝█████╗  ███████╗
+██║██╔═══╝ ██╔══╝  ╚════██║
+██║██║     ██║     ███████║
+╚═╝╚═╝     ╚═╝     ╚══════╝
+
+If you're seeing this, you have successfully installed
+IPFS and are now interfacing with the ipfs merkledag!
+
+ -------------------------------------------------------
+| Warning:                                              |
+|   This is alpha software. Use at your own discretion! |
+|   Much is missing or lacking polish. There are bugs.  |
+|   Not yet secure. Read the security notes for more.   |
+ -------------------------------------------------------
+
+Check out some of the other files in this directory:
+
+  ./help
+  ./quick-start     <-- usage examples
+  ./security-notes
+"""]]
+
+wiki (rendered HTML + the raw text files) to IPFS and pin the latest copy on my
+server's own IPFS node. You can always access the latest version of this site
+using its IPNS identifier [[!ipns
+k2k4r8mboahxabdczxp817ktff8blpdo6z32kjw5qjuvlc9c56tjbr9m]]; alternatively my
+Ethereum domain name also resolves to this URL which makes it a lot easier to
+remember: [[!ens wesl-ee]].
+
+Note that I am not liable for injuries if you choose to
+
+[[!syntax text="""
+ipfs@gyw:~$ipfs ls /ipns/k2k4r8mboahxabdczxp817ktff8blpdo6z32kjw5qjuvlc9c56tjbr9m/txt +QmWXgxdipcrrw4jGpHCXrs4ASxazFKoCHSWPBCQHcxbtZe 4353 BMW_318ti.txt +QmZK2Je1BvCPC2Npq1pSAju6dXe8jV8fk9K98iPWu28oTg 7599 Coffee.txt +QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH 0 Cooking.txt +QmfF8fuPSbCtcYo17cCThrQ2cshmy1g5RAbpe4YY4rJY2t - Digital_Money/ +QmS1s5zHX4V7ZjtqiJzYP7pV9PXeu8kS35GsmYkKbiEPv7 - Firefox/ +QmeAP1pcWpUbiRCRuJmGMCqp4km3zcKVdwJ2dvtBuZPW9t - HTML/ +QmS4u9ExT7qK4t6d8WdZMjt2UX27YXxZp2FUkKycFYoFAH 5257 IPFS.txt +QmZkPHZibpDQCT83RNpjXAaeEFM9tRSazUc9mvyW3fH4HN 4751 Japanese.txt +QmNYzE4R2jBgX3Z1KrJqp8Gqdgf428AEDGLfogFp7nd6uh 3455 Me.txt +QmS1TxR6gUnw1hqj4uhjuaGNZouTXT3avfC3VLuU4hM3W8 1941 Meta.txt +QmeLnoTok4rsjtbFBzG1Bc57dB8piwRsaEbB1Atis6vzNi - Routing/ +QmVaiN5Qc5hRGNee2v2rqX4jxgwXBzbvjD5Dwg22hEANfB - School/ +QmUAVZroXkoTpduKwTgh5bpkSwAt5kAz12hg4yoBhzHZmK 26 Tokyo.txt +QmTkB6p946Yst2EKkReWrffdMQqJfJBsZzccDkfQRk84yP 3950 Virtual_Reality.txt +QmRr7RVjqxBb1Y84qVEE5Qynm5G3nYXy4mDJDnrBHhoQy2 4022 favicon.ico +QmY51n9DCBdeYHrpBkcTQsAmtvnLfDcTWTPeiggr87XfhY - img/ +QmQEYZG2usRLKK4vj2XkVEiDeQ2ik8opLLkP6UuAx5oVaV 1414 index.txt +ipfs@gyw:~$ ipfs cat /ipns/k2k4r8mboahxabdczxp817ktff8blpdo6z32kjw5qjuvlc9c56tjbr9m/txt/IPFS.txt
+IPFS is the Inter-planetary filesystem. I'm not sure exactly why it's called
+that but it's a really cool technology. The main idea of IPFS is that at its
+core it stores files across a distributed network, and that complexity can be
+abstracted away to make IPFS just feel like you're reading from a pretty slow
+hard-drive. But the reality is, of course, that each non-cached read is fetching
+blocks of files from computers scattered across the world.
+
+Installing + Using IPFS
+-----------------------
+[...]
+"""]]
+
+companion](https://docs.ipfs.io/install/ipfs-companion/) makes browsing IPFS
+network!


Meta
diff --git a/Meta.wiki b/Meta.wiki
index b523d38..73ffb0d 100644
--- a/Meta.wiki
+++ b/Meta.wiki
@@ -19,18 +19,17 @@ it was uploaded to the VPS the site ran on a self-hosted server which I operated
on my home connection.

As a decentralized alternative to accessing the site from my VPS an exact copy
-of the site is also uploaded to IPFS whenever I make any changes. It is
-available at
-[[!ipns k2k4r8mboahxabdczxp817ktff8blpdo6z32kjw5qjuvlc9c56tjbr9m]]
-Make sure you use an add-on like [IPFS
-companion](https://docs.ipfs.io/install/ipfs-companion/) if you want to view the
-IPFS site in your browser. I have a few servers that ensure the wiki is pinned and always
-available, though it should theoretically be available as long as people are
-accessing it.
+of the site is also uploaded to [[IPFS]] whenever I make any changes. It is
+available at [[!ipns k2k4r8mboahxabdczxp817ktff8blpdo6z32kjw5qjuvlc9c56tjbr9m]].
+companion](https://docs.ipfs.io/install/ipfs-companion/) may make browsing IPFS
+sites like mine easier. I have a few servers that ensure the wiki is pinned and
+always available, though it should theoretically be available as long as people
+are accessing it.

Finally if you're not keen on remembering that long IPNS URL I've reserved the
-[wesl-ee.eth](http://wesl-ee.eth.link) name on the Ethereum Name Service; that
-name points to this same content on IPFS, only the wesl-ee.eth name is far
-easier to remember. I have this .eth domain name reserved until 2032 so you
-should have plenty of time to browse through the wiki (⌒▽⌒)☆
+[[!ens wesl-ee]] name on the Ethereum Name Service; that name points to
+this same content on IPFS, only the wesl-ee.eth name is far easier to remember.
+I have this .eth domain name reserved until 2032 so you should have plenty of
+time to browse through the wiki (⌒▽⌒)☆


Use [[!ipns]] directive
diff --git a/Meta.wiki b/Meta.wiki
index 5068851..b523d38 100644
--- a/Meta.wiki
+++ b/Meta.wiki
@@ -21,7 +21,7 @@ on my home connection.
As a decentralized alternative to accessing the site from my VPS an exact copy
of the site is also uploaded to IPFS whenever I make any changes. It is
available at
-[/ipns/k2k4r8mboahxabdczxp817ktff8blpdo6z32kjw5qjuvlc9c56tjbr9m](/ipns/k2k4r8mboahxabdczxp817ktff8blpdo6z32kjw5qjuvlc9c56tjbr9m).
+[[!ipns k2k4r8mboahxabdczxp817ktff8blpdo6z32kjw5qjuvlc9c56tjbr9m]]
Make sure you use an add-on like [IPFS
companion](https://docs.ipfs.io/install/ipfs-companion/) if you want to view the
IPFS site in your browser. I have a few servers that ensure the wiki is pinned and always
@@ -33,3 +33,4 @@ Finally if you're not keen on remembering that long IPNS URL I've reserved the
name points to this same content on IPFS, only the wesl-ee.eth name is far
easier to remember. I have this .eth domain name reserved until 2032 so you
should have plenty of time to browse through the wiki (⌒▽⌒)☆
+


Site meta
diff --git a/Meta.wiki b/Meta.wiki
new file mode 100644
index 0000000..5068851
--- /dev/null
+++ b/Meta.wiki
@@ -0,0 +1,35 @@
+[[wesl.ee|index]] is my personal wiki; it is similar to a blog but there is no
+focus on the chronology of the things I write; instead the site is organized by
+the connections and links between different ideas. The site is generated from
+plaintext files using [[!iki ikiwiki]] as a static-site generator. The text
+files are [available](https://github.com/wesl-ee/personal-wiki) and are
+versioned as a git repository though it's more pleasant to read the rendered
+HTML than the plaintext files themselves. I promise that you're not missing
+anything.
+
+In addition to being the title of this site [[wesl-ee|Me]] is also a name I use
+as a handle on the Internet. I'm not anon but I like the handle better.
+
+Site Hosting / Decentralization
+-------------------------------
+
+I host the canonical version of this site, [https://wesl.ee](https://wesl.ee),
+on a rented VPS that I originally only hosted a Garry's Mod server on. Before
+it was uploaded to the VPS the site ran on a self-hosted server which I operated
+on my home connection.
+
+As a decentralized alternative to accessing the site from my VPS an exact copy
+of the site is also uploaded to IPFS whenever I make any changes. It is
+available at
+[/ipns/k2k4r8mboahxabdczxp817ktff8blpdo6z32kjw5qjuvlc9c56tjbr9m](/ipns/k2k4r8mboahxabdczxp817ktff8blpdo6z32kjw5qjuvlc9c56tjbr9m).
+Make sure you use an add-on like [IPFS
+companion](https://docs.ipfs.io/install/ipfs-companion/) if you want to view the
+IPFS site in your browser. I have a few servers that ensure the wiki is pinned and always
+available, though it should theoretically be available as long as people are
+accessing it.
+
+Finally if you're not keen on remembering that long IPNS URL I've reserved the
+[wesl-ee.eth](http://wesl-ee.eth.link) name on the Ethereum Name Service; that
+name points to this same content on IPFS, only the wesl-ee.eth name is far
+easier to remember. I have this .eth domain name reserved until 2032 so you
+should have plenty of time to browse through the wiki (⌒▽⌒)☆
diff --git a/Meta/SiteMeta.wiki b/Meta/SiteMeta.wiki
deleted file mode 100644
index e69de29..0000000
diff --git a/index.wiki b/index.wiki
index 0556748..0d0d05b 100644
--- a/index.wiki
+++ b/index.wiki
@@ -24,4 +24,6 @@ I still haven't filled out many of the pages on this site but if you'd like to
start exploring my personal wiki some the best way is to read a little about
[[Me]] because that's who's writing this!

+


tripcode → wesl-ee
diff --git a/Me.wiki b/Me.wiki
index 529ac69..d3ae641 100644
--- a/Me.wiki
+++ b/Me.wiki
@@ -1,5 +1,5 @@
Hi, my name is Wesley Coakley (🇯🇵  コークリー・ウェズリー) ☆ﾐ(o\*･ω･)ﾉ
-On the Internet and in the crypto-space I use the handle **w!HAXU9fXGtc** because it
+On the Internet and in the crypto-space I use the handle **wesl-ee** because it
sounds cooler.

I am a core developer on [Levana Protocol](https://levana.finance) and a
@@ -11,7 +11,7 @@ on the way out the door.
I work with [[Digital_Money]] and I believe that all currency will eventually be
stored on a blockchain. I began my career as a Software Engineer in NVIDIA's
-quickly found a home developing financial tools for the [Digital_Money/Terra]]
+quickly found a home developing financial tools for the [[Digital_Money/Terra]]
blockchain.

Learning
diff --git a/index.wiki b/index.wiki
index ff6c2d5..0556748 100644
--- a/index.wiki
+++ b/index.wiki
@@ -1,5 +1,5 @@
This site belongs to [Wesley Coakley](https://wesleycoakley.com), also known on
-the Internet as [w!HAXU9fXGtc](https://twitter.com/wesl_ee) and locally known
+the Internet as [wesl-ee](https://twitter.com/wesl_ee) and locally known
simply as [[Me]] （⌒▽⌒） I'm developing next-gen financial tools for the
[[Digital_Money/Terra]] blockchain at [Levana
Protocol](https://levana.finance).
@@ -9,7 +9,6 @@ Protocol](https://levana.finance).
<figcaption><ul class=net-presence>
<li class=github><a href="https://github.com/wesl-ee">GitHub</a></li>
</ul></figcaption>
</figure>


Digital_Money/Decentralized_Finance
diff --git a/Digital_Money/Decentralized_Finance.wiki b/Digital_Money/Decentralized_Finance.wiki
index 3b67460..86edb68 100644
--- a/Digital_Money/Decentralized_Finance.wiki
+++ b/Digital_Money/Decentralized_Finance.wiki
@@ -1 +1,59 @@
-[[Digital_Money]]
+DeFi (decentralized finance) puts [[Digital_Money]] to work. DeFi developers are
+implementing both old and new financial tools that use [[Digital_Money]] instead
+of traditional fiat. A number of things make DeFi products superior to the same
+products that exist in traditional finance:
+
+1. Composability + iteroperability of DeFi products
+2. Ability to self-custody your own financial instruments
+3. No middle-men
+4. Low fees
+5. High throughput
+
+I work on DeFi products in the [[Terra]] ecosystem.
+
+Lending + Borrowing
+-------------------
+
+Suppose I have $10,000 USD sitting in my bank account. There I earn 0.15% +interest on that princial which is$15 per year. With DeFi I could instead lend
+this money out while taking on minimal risk and receive something like 20% APY
+on that principal which comes out to $2000 per year. As a lender it's clear +which option I would prefer. + +On the other side if I would like to borrow against my assets DeFi makes this +extremely easy too. One could put down 1 Bitcoin as collateral and borrow up to +60% of its value in US dollars. So if 1 Bitcoin is worth$100,000 then one could
+borrow up to $60,000 on that collateral. If the value of my underwriting +collateral (here, Bitcoin) drops such that my loan-to-value is over 60% then my +Bitcoin will be liquidated and the proceeds from the sale used to cover my debt, +thereby keeping the lender-borrower system solvent. + +[[!img img/terra-anchor-ltv.jpeg]] + +Borrowing against assets like this is similar to taking a home equity +line-of-credit (HELOC) in TradFi except here I borrow only against digital +assets on a blockchain and, because the system builds on programmable money, it +is entirely automated by a smart-contract and is a far more efficient use of +capital + time. + +Composability +------------- + +In addition to being efficient DeFi products are also composable. All products +in an ecosystem have access to the same underlying blockchain so one product may +make use of the financial tools created by another product. The possibilities of +any DeFi product are really only bound by the imaginations of its developers. + +For example the 20% APY I'm earning on my$10,000 could be used to secure a
+payments on another loan (self-repaying loans), or I could build further on that
+20% APY to automatically invest on my behalf into another asset. There are many
+such products building on [[Terra|Terra's]] Anchor
+
+Finally with exciting technologies like Cosmos' Inter-blockchain Communication
+(IBC) even DeFi products running on different blockchains can use assets from
+the other connected chains. I believe the cross-blockchain composability of DeFi
+will be an important area to watch in the coming years. Even now we are
+beginning to see things like [ThorChain](https://thorchain.org/], a
+decentralized cross-chain liquidity network providing swaps between native
+assets without the need for wrapping, which I can easily see becoming one of if
+not *the* building-block for the cross-chain DeFi products of the future.


prefer jpeg files
diff --git a/Digital_Money/Terra.wiki b/Digital_Money/Terra.wiki
index 4244664..1930311 100644
--- a/Digital_Money/Terra.wiki
+++ b/Digital_Money/Terra.wiki
@@ -76,13 +76,13 @@ This wallet gives you a Cosmos hub address beginning with cosmos... to which
you can send the ATOM you bought on the centralized exchange. Withdraw the ATOM
from your exchange account to your Keplr wallet cosmos... address.

With the ATOM in your Keplr wallet, navigate to [the Omosis
DEX](https://app.osmosis.zone) and connect your Keplr wallet. Click "Assets"
then "Deposit" next to ATOM in the Osmosis UI.

-[[!img img/terra-ibc-to-osmosis.png]]
+[[!img img/terra-ibc-to-osmosis.jpeg]]

Click "MAX" to transfer all the ATOM from your wallet on Cosmos Hub to your
wallet on Osmosis. Don't worry — you don't need to set up a separate Osmosis
@@ -103,7 +103,7 @@ by clicking the banner above the swap dialog.
transaction fee to move from the Keplr Terra wallet to your own Terra wallet,
normally only 12 cents worth of LUNA or so.

-[[!img img/terra-osmosis-swap.png]]
+[[!img img/terra-osmosis-swap.jpeg]]

Now you've traded ATOM for UST. The last step is to withdraw UST from Osmosis to
a Terra wallet. Keplr handles Terra wallets, so using the Osmosis UI again by
@@ -123,7 +123,7 @@ Terra-specific. You cannot use Keplr to interact with dApps on Terra.
Copy the Terra address you have on Terra Station and use Keplr to send UST from

-[[!img img/terra-keplr-to-station.png]]
+[[!img img/terra-keplr-to-station.jpeg]]

Finally you've got UST on Terra Station! From here the possibilities are
endless. I recommend trying out [Anchor](https://app.anchorprotocol.com/) for an


Digital_Money/Terra
diff --git a/Digital_Money/Terra.wiki b/Digital_Money/Terra.wiki
index e297644..4244664 100644
--- a/Digital_Money/Terra.wiki
+++ b/Digital_Money/Terra.wiki
@@ -1 +1,136 @@
-[[Decentralized_Finance]]
+Terra is a blockchain which focuses on [[Decentralized_Finance]] and which
+features a number of algorithmic stablecoins, each pegged to a national /
+international currency; these stablecoins facilitate transactions on the network
+and, along with Terra's native token LUNA, maintain the stablecoin peg by
+allowing users to [arbitrage](https://youtu.be/KqpGMoYZMhY) across currencies.
+
+The Terra chain was developed and deployed by Terraform Labs and still many
+current projects on Terra's blockchain are incubated by capital from TFL. Some
+of the most notable DeFi projects on Terra are:
+
++ [Anchor](https://anchorprotocol.com/), a decentralized money-market offering
+  20% APY on stablecoin deposits
++ [Mirror](https://mirror.finance/), which mirrors real-world stocks
++ [Pylon](https://pylon.money/), enabling project launches through crowd-funding
++ [Orion](https://orion.money/), which exports Anchor's 20% yield to other chains
+
+... as of the time of writing these are some of the most anticipated protocols
+launching on Terra.
+
++ [Astroport](https://astroport.fi/), Terra's next-gen AMM
++ [Mars protocol](https://marsprotocol.io/), trustless lending protocol
++ [Levana](https://levana.finance), enabling leveraged tokens and perpetuals
+
+... I'm [[lucky to be working with Levana|Levana]] to create the first perpetual
+swap protocol on Terra |･ω･｀) while it is not the first perpetual swap on
+Cosmos ([Injective Protocol](https://injectiveprotocol.com/) has that title) I
+believe we have a distinct advantage starting off in an ecosystem with native
+stablecoins in which to quote prices and settle transactions.
+
+Terra is built on the Cosmos SDK & the Tendermint Consensus algorithm; its smart
+contracts are typically written in Rust which are then compiled down to
+[CosmWasm / Web Assembly](https://github.com/CosmWasm). Recently Terra enabled
+[Inter-Blockchain
+Communication](https://agora.terra.money/t/proposal-enable-ibc-for-terra/2146)
+to allow communication with other IBC-enabled projects like Cosmos Hub and
+Osmosis.
+
+Moving Funds onto Terra
+------------------------
+
+When I first discovered [Anchor](https://anchorprotocol.com) I was fascinated
+with its 20% APY on stablecoin deposits. For reference my bank account earns
+(at most) 0.15% APY, so 20% APY was mind-melting and I had to get in. To
+on-board onto Terra from my bank account I had to bridge through Ethereum using
+wrapped UST which was very expensive.
+
+Now with IBC enabled I can move funds into and out of Terra very easily using
+the Cosmos Hub and Osmosis.
+
+
+### Obtaining ATOM
+
+centralized exchange. ATOM is the native token of the Cosmos Hub and has wide
+availability across exchanges.
+
+I use Coinbase because here in the US funds clear quickly relative to a wire
+transfer. You can even trade with that money *while* your funds clear which is
+cool. Normally it takes 4 business days for the transfer to clear, at which
+point you can continue with the next step.
+
+### Transferring ATOM to Keplr
+
+You should set up a
+wallet to accept the ATOM you just bought. Remember to write down your seed
+phrase and keep it somewhere safe, because this seed phrase allows you to access
+your funds if you uninstall the wallet or lose your hard-drive or whatever. I
+prefer to use a scheme to [split my seed phrase into 3
+pieces](https://bitcoin.stackexchange.com/questions/60540/practical-way-to-split-a-bip39-seed-into-a-2-out-of-3-factor-auth)
+such that I only need two of the three pieces of paper to access the seed, and
+it removes the single-point-of-failure that comes with only having one sheet
+with all the words on it.
+
+This wallet gives you a Cosmos hub address beginning with cosmos... to which
+you can send the ATOM you bought on the centralized exchange. Withdraw the ATOM
+from your exchange account to your Keplr wallet cosmos... address.
+
+
+With the ATOM in your Keplr wallet, navigate to [the Omosis
+DEX](https://app.osmosis.zone) and connect your Keplr wallet. Click "Assets"
+then "Deposit" next to ATOM in the Osmosis UI.
+
+[[!img img/terra-ibc-to-osmosis.png]]
+
+Click "MAX" to transfer all the ATOM from your wallet on Cosmos Hub to your
+wallet on Osmosis. Don't worry — you don't need to set up a separate Osmosis
+wallet! Keplr uses the same seed phrase for all chains it supports so you
+automatically have an address starting with osmosis... and do not need to fill
+it in manually if you use the Osmosis UI.
+
+### Swapping ATOM for UST on Osmosis
+
+Once you've signed this transaction in the Keplr prompt that pops up you should
+see the ATOM show up in the "Osmosis" section of Keplr — congratulations! You
+just performed your first IBC transfer by moving ATOM from the Cosmos Hub chain
+to the Osmosis chain. From here you can use the Osmosis DEX to trade ATOM to
+UST. If Terra is still in "experimental" mode on Osmosis you may need to add it
+by clicking the banner above the swap dialog.
+
+*NOTE* that you'll want to exchange a small amount of ATOM for LUNA to cover the
+transaction fee to move from the Keplr Terra wallet to your own Terra wallet,
+normally only 12 cents worth of LUNA or so.
+
+[[!img img/terra-osmosis-swap.png]]
+
+Now you've traded ATOM for UST. The last step is to withdraw UST from Osmosis to
+a Terra wallet. Keplr handles Terra wallets, so using the Osmosis UI again by
+clicking on "Assets" and then "Withdraw" under UST should work like a charm. If
+you traded for a bit of LUNA as well then transfer that now too using Osmosis'
+UI.
+
+### Moving UST to your Terra Wallet
+
+For interacting with the Terra ecosystem you'll want to set up the [Terra
+Station
+Write down this seed phrase in a similar fashion to how you recorded your Keplr
+seed phrase. The difference between Keplr and Terra Station is that Station is
+Terra-specific. You cannot use Keplr to interact with dApps on Terra.
+
+Copy the Terra address you have on Terra Station and use Keplr to send UST from
+
+[[!img img/terra-keplr-to-station.png]]
+
+Finally you've got UST on Terra Station! From here the possibilities are
+endless. I recommend trying out [Anchor](https://app.anchorprotocol.com/) for an
+easy 20% APY on the UST you moved over under the "Earn" tab. Anchor even gives a
+nice summary of how much you can expect to earn at that APY. Obviously there is
+much, much more to do on Terra though!
+
+I hope to write a bit here about my favorite protocols in the future so you can
+discover the same things that have fascinated me since I've been a part of the
+ecosystem.


Digital_Money
diff --git a/Digital_Money/Decentralized_Finance.wiki b/Digital_Money/Decentralized_Finance.wiki
new file mode 100644
index 0000000..3b67460
--- /dev/null
+++ b/Digital_Money/Decentralized_Finance.wiki
@@ -0,0 +1 @@
+[[Digital_Money]]
diff --git a/Digital_Money/Terra.wiki b/Digital_Money/Terra.wiki
new file mode 100644
index 0000000..e297644
--- /dev/null
+++ b/Digital_Money/Terra.wiki
@@ -0,0 +1 @@
+[[Decentralized_Finance]]
diff --git a/Me.wiki b/Me.wiki
index 275e9d7..529ac69 100644
--- a/Me.wiki
+++ b/Me.wiki
@@ -2,13 +2,17 @@ Hi, my name is Wesley Coakley (🇯🇵  コークリー・ウェズリー) ☆
On the Internet and in the crypto-space I use the handle **w!HAXU9fXGtc** because it
sounds cooler.

-I am a Software Engineer in [NVIDIA's Networking Business
-Unit](https://www.nvidia.com/en-us/networking/) (NBU) and a graduate of
-[[School/North_Carolina_State_University]] with a B.S. in Computer Engineering and another B.S.
-in Electrical Engineering. I also accidentally took enough courses
-during my college tenure to collect my minor in mathematics on the way out the
-door. My professional expertise is in *OSI Layer 3 Routing*, specifically
-writing software in the control-plane for switches and Linux routers.
+I am a core developer on [Levana Protocol](https://levana.finance) and a
+graduate of [[School/North_Carolina_State_University]] with a B.S. in Computer
+Engineering and another B.S. in Electrical Engineering. I also accidentally
+took enough courses during my college tenure to collect my minor in mathematics
+on the way out the door.
+
+I work with [[Digital_Money]] and I believe that all currency will eventually be
+stored on a blockchain. I began my career as a Software Engineer in NVIDIA's
+quickly found a home developing financial tools for the [Digital_Money/Terra]]
+blockchain.

Learning
--------
diff --git a/index.wiki b/index.wiki
index 5e0fff6..ff6c2d5 100644
--- a/index.wiki
+++ b/index.wiki
@@ -1,7 +1,8 @@
This site belongs to [Wesley Coakley](https://wesleycoakley.com), also known on
the Internet as [w!HAXU9fXGtc](https://twitter.com/wesl_ee) and locally known
-simply as [[Me]] （⌒▽⌒） I'm a software engineer at [NVIDIA](https://nvidia.com)
-working in Research Triangle Park in North Carolina.
+simply as [[Me]] （⌒▽⌒） I'm developing next-gen financial tools for the
+[[Digital_Money/Terra]] blockchain at [Levana
+Protocol](https://levana.finance).

<figure class=profile>
<img src="https://cdn.wesleycoakley.com/me/me-brs.jpg">


I I I
diff --git a/BMW_318ti.wiki b/BMW_318ti.wiki
index 1d5c56e..b8585e7 100644
--- a/BMW_318ti.wiki
+++ b/BMW_318ti.wiki
@@ -8,12 +8,12 @@ driving and caring for this car.
Rally Dreams
------------

-I bought this car right out of college. I worked at a coffee shop during school
-for a brief period of time but only saved up $1400 before I quit that job to -focus on school. I fantisized about buying my dream car, at the time a -Volkswagen Golf GTI, after I saved up the money. I think this love for small -hatchbacks was imparted on me by the hours I sank into Need for Speed: Most -Wanted 2 (PS2) in middle- and high-school. +I bought this car right out of college, and though I worked at a coffee shop +during school for a brief period of time I only saved up$1400 before quitting
+that job to focus on school. Throughout the day I fantisized about buying my
+dream car, at the time a Volkswagen Golf GTI. This love for small hatchbacks was
+imparted on me, probably, by the hours I sank into Need for Speed: Most Wanted 2
+(PS2) in middle- and high-school.

The spring of my last semester in [[college|School/North_Carolina_State_University]]
I was extremely fortunate to line up a job starting exactly the Monday after my
diff --git a/School/North_Carolina_State_University.wiki b/School/North_Carolina_State_University.wiki
--- a/School/North_Carolina_State_University.wiki
+++ b/School/North_Carolina_State_University.wiki
@@ -99,7 +99,7 @@ Year | Term   | Course  | Description
2019 | Fall   | ECE434  | Fundamentals of Power Electronics
2019 | Fall   | ECE451  | Power System Analysis
2019 | Fall   | ECE464  | ASIC and FPGA Design
-2019 | Fall   | ECE485  | [Senior Design Project II](https://wesleycoakley.com/Projects/my-senior-design-project-ncsu-ece484-ece485.html)
+2019 | Fall   | ECE485  | [[Senior Design Project II|Senior_Design_ECE484_ECE485]]
2019 | Fall   | PHI331  | Philosophy of Language
2020 | Spring | ECE407  | Introduction to Computer Networking
2020 | Spring | ECE453  | Electric Motor Drives


'97 BMW 318ti
diff --git a/BMW_318ti.wiki b/BMW_318ti.wiki
new file mode 100644
index 0000000..1d5c56e
--- /dev/null
+++ b/BMW_318ti.wiki
@@ -0,0 +1,77 @@
+My '97 BMW 318ti is the first car I've really owned and maintained by myself. It
+taught me how to think like a mechanic, act like a mechanic, and fix things like
+a mechanic. It has no shortage of things to fix and I've loved every second of
+driving and caring for this car.
+
+[[!img img/318ti-coliseum.jpeg size="750x"]]
+
+Rally Dreams
+------------
+
+I bought this car right out of college. I worked at a coffee shop during school
+for a brief period of time but only saved up $1400 before I quit that job to +focus on school. I fantisized about buying my dream car, at the time a +Volkswagen Golf GTI, after I saved up the money. I think this love for small +hatchbacks was imparted on me by the hours I sank into Need for Speed: Most +Wanted 2 (PS2) in middle- and high-school. + +The spring of my last semester in [[college|School/North_Carolina_State_University]] +I was extremely fortunate to line up a job starting exactly the Monday after my +last final exam, ECE453 — Electric Motors, on a Tuesday. As soon as I collected +my first two paychecks from my new job as a software engineer / routing person +which trumped anything I ever made working at the coffee shop I went +car-shopping. I looked everywhere for a clean GTI but didn't find one within a +good distance. But soon after I started looking I found this BMW 318ti, almost +completely stock, for a mere$4000. After I test-drove it for 10 minutes I knew
+I had to have it. I immediately had my boyfriend drive me to the bank to swap
+cash for title with the owner. With no rust and in running condition this, I
+decided, was going to be the car to get me into cars.
+
+I heard a lot of things like "BMWs are hard to maintain" and "the parts are too
+expensive" and while those things may be true of newer BMWs they could be no
+further from the truth when it comes to older BMWs. The E36, which is the
+chassis code of my particular 318ti, is an extremely simple machine with a small
+1.9L inline 4-cylinder M44 engine. Fuel-injection is controlled electronically
+and, being a later-model E36, it's equipped with OBD-II instead of OBD-I which
+makes diagnostics far easier. The engine can be a little sluggish, especially
+considering that some E36 have 6-cylinder engines, but it's still a snappy
+little car in turns so I can forgive it for its lack of punchy acceleration.
+It can still go quite fast too, I've taken it up to 105 MPH on the highway and
+it shows no hesitation at even higher speeds. The power is hidden in the higher
+RPMs so you can let it wind-up to 5000 RPM to really see all the little engine
+is capable of.
+
+The only part I can tell which is not stock is the aftermarket JVC stereo, which
+I've since hooked up to a subwoofer in the trunk for the true *hatchback
+experience*.
+
+[[!img img/318ti-nightcore.jpeg size="750x"]]
+
+Maintaining the Dream
+---------------------
+
+I've taken care of the regular maintainance on my E36; its one of the things I'm
+very proud I can do. I've torn down the entire intake, carbon-cleaned all
+nooks of the intake manifold and put it all back together just using my growing
+set of automotive tools and my copy of the BMW E36 Bentley service manual, a
+1000+ page book detailing every inch of the E36 and how it all fits together.
+With BMW's unconventional variable-length intake manifold, things can get pretty
+complex in there, but the experience made me far more comfortable working on
+cars than I thought I would ever be.
+
+And with an old Thinkpad X61 tablet I bought at [N.C. State's electronics
+surplus
+sale](https://procurement.ofa.ncsu.edu/our-services/surplus/surplus-sales/) for
+a mere $10 I'm able to read OBD-II datapoints from the car and plot them either +while idling or while driving. It's an incredibly valuable tool for diagnosing +problems because you can check read data as simple as intake air volume all the +way down to minutia like the contribution of each cylinder to the total engine +output power. + +[[!img img/318ti-diagnostics.jpeg size="750x"]] + +Overall, making the jump from not having worked on cars to being very +comfortable with many aspects of regular and specialty maintainance had a very +positive impact on my life; the experience reminds me that with enough effort +and confidence I can tackle many things which may seem daunting at first. This +outlook is reflected in a lot of the things I do and in the chances I take today. diff --git a/Me.wiki b/Me.wiki index 44aeab5..275e9d7 100644 --- a/Me.wiki +++ b/Me.wiki @@ -44,6 +44,13 @@ occassionally produces schematics for something I become obsessively and absolutely in love with. At that point I'll pour in all the time I can afford into the project. +I also enjoy performing the regular and specialty maintainance on both of my +cars: my [['97 BMW 318ti|BMW_318ti]] and my [[2003 Honda Accord||Honda_Accord]]. +I learned exclusively from car enthusiast forums / mailing lists on the oldest corners of the +Internet. The posted advice is mostly not useful but the 1000+ page manuals +hosted on these car forums were invaluable to me, especially when I only had a +limited understanding of how cars operated under the hood originally. + Favorite Things ---------------  me diff --git a/index.wiki b/index.wiki index d89434e..5e0fff6 100644 --- a/index.wiki +++ b/index.wiki @@ -3,6 +3,15 @@ the Internet as [w!HAXU9fXGtc](https://twitter.com/wesl_ee) and locally known simply as [[Me]] （⌒▽⌒） I'm a software engineer at [NVIDIA](https://nvidia.com) working in Research Triangle Park in North Carolina. +<figure class=profile> +<img src="https://cdn.wesleycoakley.com/me/me-brs.jpg"> +<figcaption><ul class=net-presence> +<li class=twitter><a href="https://twitter.com/wesl_ee">Twitter</a></li> +<li class=github><a href="https://github.com/wesl-ee">GitHub</a></li> +<li class=linkedin><a href="https://linkedin.com/in/wesleycoakley">LinkedIn</a></li> +</ul></figcaption> +</figure> + You're reading my homepage & personal wiki; nothing is off-topic here! I'm the only one with write-access so all opinions are my own and all information here can only be as correct as I am; this site is generated with love and [[!iki  Migrate articles to personal wiki diff --git a/Digital_Money/Bitcoin/Merkle_Roots.wiki b/Digital_Money/Bitcoin/Merkle_Roots.wiki new file mode 100644 index 0000000..4bfca66 --- /dev/null +++ b/Digital_Money/Bitcoin/Merkle_Roots.wiki @@ -0,0 +1,404 @@ +> *tl;dr C++ code for this is on +> [GitHub](https://github.com/wesl-ee/btc-merkle-tree)* (｀・ω・´)” + +When exploring on-chain transactions for Bitcoin, you may discover that each BTC +block header has a field called *Merkle root*. What exactly this value means and +how it is derived will be explored in this article. I am going to explain +step-by-step exactly how the Merkle tree of any Bitcoin block is constructed; +sample C++ code is provided to make these concepts more concrete. + +Let's dive in! + +Merkle Roots & Merkle Trees in General +---------------------------------------- + +A Merkle tree is constructed from an ordered set of leaves. The parent nodes of +these leaves are constructed from some hash of their children. For this reason +Merkle trees are also sometimes referred to as *hash trees* outside the +context of blockchain / cryptocurrency. + +The top-most node (root) of this tree is called the *Merkle root*. Because the +data of any node in the tree is derived only from its children, it can be shown +that a Merkle tree constructed using a [perfect +hash](https://en.wikipedia.org/wiki/Perfect_hash_function) is unique to the +ordered set of leaves which seed the tree. + +The Merkle Roots and Trees of Bitcoin +------------------------------------- + +In Bitcoin the Merkle tree is seeded by an ordered list of transaction hashes in +a block. A miner creating a Bitcoin block is free to arrange these transactions +in any desired order to derive the Merkle root, with the exception that any +transaction spending a [UTXO](https://en.bitcoin.it/wiki/UTXO) generated by +another transaction in the same block must come after the generative +transaction. This ensures that if traversing the set of transactions in order +UTXOs are not consumed before they are produced. + +During construction of the Merkle tree, the hashes of each transaction are +ordered as above and grouped together in pairs of two. The hash of the second +transaction of a pair is then concatenated to the end of the first transaction +hash and the resultant data is hashed again to create the data stored in their +parent node. This process is repeated for each pair to create the nodes in the +next *depth* of the Merkle tree until there is only one pair to hash. Their +parent is the Merkle root and is the ancestor of all nodes in the tree. + +<figure> +<img src="https://wesleycoakley.com/img/merkle-tree.svg"> +<figcaption>Color-mixing example of a binary Merkle tree<br/> +Notice the content of each parent node is a function of its children</figcaption> +</figure> + +For many things in Bitcoin, Merkle tree computations included, Satoshi decided +to use two rounds of SHA-256. This mostly [mitigates length-extension attacks +](https://bitcointalk.org/index.php?topic=45456.0) which could be leveraged to +exploit aspects of the blockchain where messages are concatenated and hashed +together such as during construction of the Merkle tree. + +### Bitcoin's Simple Payment Verification + +The main reason for including a Merkle root in the block header is outlined in +Chapter 8 ("Simplified Payment Verification") of the [Bitcoin +whitepaper](https://bitcoin.org/bitcoin.pdf). Satoshi describes how this +approach allows *light-clients* to verify that a given transaction occurred in a +block by challenging a full-node to provide a Merkle proof of that transaction +within the block. If the proof provided by the full-node results in a Merkle +root matching the root stored by the light-client then the light-client can be +sure the transaction occurred in that block. + +The important bit is: the light-client *does not need to know* the transactions +in a block, it only needs to know the Merkle root; this enables the client to +only store a chain of block headers, not the blocks themselves. The Merkle proof +likewise does not need to have all transactions as leaves, it may include some +of the intermediate values (i.e. ancestor nodes derived from the leaves) and the +proof would still be viable to use as validation on this transaction. + +For blocks with many transactions this saves considerable space on a +light-client while still maintaining the integrity of transaction validation on +the blockchain. + +An Simple Bitcoin Merkle Tree in C++ +------------------------------------ + +Now that we've explored Merkle trees in both the general case and the Bitcoin +case let's look at some C++ code snippets which put this all together. + +This code is written by me and is [hosted on +GitHub](https://github.com/wesl-ee/btc-merkle-tree). Feel free to use any part +of it you'd like for your own projects or learning experience. + +Below is a class representing the entire Merkle tree: + +[[!syntax type="cpp" text=""" +/* + * https://github.com/wesl-ee/btc-merkle-tree/blob/master/include/MerkleTree.h + */ +#include <iostream> +#include <string> +#include <vector> +#include "MerkleNode.h" + +/** + * Collection of nodes at a given depth in a Merkle tree + */ +typedef std::vector<MerkleNode> MerkleTreeLevel; + +/** + * A full Merkle tree calculated from transactions in one BTC block + */ +class MerkleTree { +public: + + /** + * Construct a Merkle tree given some set of network-order (big endian) hex + * strings. BTC transactions are conveniently network-order already. + * Changing the order of transactions will change the Merkle root! + */ + void FromNetworkOrderHexSeeds(const std::vector<std::string> leaves); + + /** + * Recursively walk a (sub)tree to calculate the Merkle root of the current + * node + */ + void CalculateSubtree(MerkleNode*); + + /** + * Summarize the entire tree + */ + void Print(); + + /* + * Summarize a subtree whose root is the first argument + */ + void PrintSubtree(MerkleNode* root, unsigned int depth); + +private: + + /* + * Organize nodes by their depth + */ + std::vector<MerkleTreeLevel> treeLevels; + + /** + * The Merkle root is the top-most node of the Merkle tree + */ + MerkleNode *merkleRoot; + + /** + * Leaves from which the Merkle tree will be constructed + */ + std::vector<MerkleNode> leafNodes; + + /** + * Build the rest of the tree once leaves are loaded in + */ + void construct(); +}; +"""]] + +Notice the attention to network-order (big endian) data. The canonical +representations of BTC transaction hashes are network-order hex strings so +special care must be taken within the hashing function to reverse the byte +order, otherwise it would be inconsistent with BTC implementation. + +I will not break out every method but the most interesting here are +CalculateSubtree and construct: + +[[!syntax type="cpp" text=""" +/* + * https://github.com/wesl-ee/btc-merkle-tree/blob/master/src/MerkleTree.cc + */ +void MerkleTree::CalculateSubtree(MerkleNode *node) { + if (node->Left() == nullptr) + return; + + CalculateSubtree(node->Left()); + CalculateSubtree(node->Right()); + + node->CalculateFromChildren(); +} +"""]] + +Here we can see a clearly recursive pattern which calculates the content of the +current node from the content of its children, just as I've explained in the +algorithm for construction of the Merkle tree above. First the left +child-subtree is calculated, then the right child-subtree. With the contents of +the child nodes now known we can calculate the contents of their parent. + +This recursive walk is kicked off by CalculateSubtree(merkleRoot) after the +tree has been seeded with the leaves in the below method: + +[[!syntax type="cpp" text=""" +/* + * https://github.com/wesl-ee/btc-merkle-tree/blob/master/src/MerkleTree.cc + */ +void MerkleTree::construct() { (Diff truncated)  Coffee diff --git a/Coffee.wiki b/Coffee.wiki index e69de29..8a1b4a7 100644 --- a/Coffee.wiki +++ b/Coffee.wiki @@ -0,0 +1,128 @@ +I've enjoyed coffee since I was 15 or so. When I'd visit my Godmother she had +this neat single-serve Keurig machine where you'd pop a plastic cup of coffee +grounds in, fill the reservoir with water and in less than a minute you'd have a +mug full of hot coffee. The taste was not the best but it was extremely +convenient. + +A few years later during a trip across the US with my family, a 16oz americano +became my regular order anytime we stopped at a coffee house. It's not always a +spectacular taste as it's simply an espresso cut with water. The only +interesting variation in this drink is in how much water is used to pull the +espresso shot. With a *lungo* the shot is pulled with about twice as much water +as a typical espresso shot. This extracts a wider band of flavors from the +grounds as it takes more time to pull a *lungo* than a standard espresso. The +counterpart of a *lungo* is a *ristretto* which uses about half the water, +producing a more "concentrated" flavor profile. + +Coffee Houses on the West Coast +------------------------------- + +A lot of my family lives in the Pacific Northwest, in and around Washington so +from time-to-time I find myself visiting the area. It's really beautiful, +especially Oregon with its large forests and perpetual fog near the coast. I've +always found it interesting that there are so many drive-thru coffee houses +there, it's not something I see on the East coast often. These shops are +drive-thru only and seem to bring in a fair number of people as they're always +quite busy. The buildings are very tiny and maybe two or three people work there +at a time. I think that I'd start up a company like this on the East coast if I +really found the urge to start a business venture. + +On-campus +--------- + +In my time on-campus during university (and especially near the due-dates for +term papers or projects) I'd camp near one of the many Port City Java coffee +bars and slug my americano while churning out code or proofs. As expected of a +coffee shop on a college campus every one was perpetually busy but the crowd +did fluctuate some when nearby lectures ended. These shops stayed open quite +late too, so if I ever needed a bit of energy in the later afternoon I knew +where to go. Not just on weekdays but weekends too they were open. + +As part of the on-campus dining plan students were allocated a number of "meal +swipes" for the week which, given that they were lumped in with tuition costs +and therefore covered by grants or loans, were essentially free and you were +just missing out if you did not maximize the week's meal swipes. In my first and +second year when I lived on-campus and enjoyed this perk I'd always fill out my +weekly allocation with a visit to the coffee shop, often grabbing a muffin or +coffee cake too since the swipe was good for up to$7.50.
+
+---------------
+
+I drank a good deal of coffee abroad in Japan as well. Though there were not
+many "regular" coffee shops on the [[School/Sophia_University]] campus there
+were plenty of vending machines selling all kinds of coffee. From hot
+(あったか～い) to chilled (つめた～い) coffee, these machines had at least 5
+different brands of coffee to choose from. Often for a mere 110円 you could have
+a hot can of the world's finest BOSS coffee, so hot that is actually scalding
+your hand. I found it necessary many times to stick the can in my hoodie pocket
+right after buying it from the machine because the can felt like it was giving
+me third-degree burns just by holding it.
+
+Not just black coffee, but coffee au lait you could also buy from these
+machines, equally hot or chilled. Steel cans are truly amazing and it's a shame
+we cannot have the same in the US, or really anywhere else in the world. The
+coffee either comes as a pop-tab can or twist-top steel bottles.
+
+You can also buy many of these brands of canned coffee at a convenience store,
+which there is equally no shortage of in Tōkyō.
+
+In addition to vending machines and convenience stores, I also found a number of
+shops dedicated to coffee. I often visited the Starbucks just north of my
+neighborhood in Sensō-ji, which is a very popular tourist destination for
+Japanese and internationals alike. This made for a very entertaining coffee shop
+experience, as often I'd find myself in line with other Americans who (I guess)
+found the Starbucks to be the closest thing to a slice-of-home so many miles
+away. This place was always packed, but I sometimes was able to find a seat
+inside and knock out some homework while I sipped my americano.
+
+In 2018 smoking was still permitted in restaurants in Tōkyō, albeit in a
+closed-off separate "smoking" section redolent of when I was much younger and
+restaurants would ask my parents if they'd "like a smoking or non-smoking seat".
+This made the atmospheres in many restaurants, especially coffee shops, hazy and
+foreign to me. Even the Mos Burger, a burger shop which puts a focus on their
+coffee too, had a smoking section at the time. This has since changed, I
+believe, and was codified in one of the many laws introduced ahead of the Tōkyō
+Olympics.
+
+At Home
+-------
+
+Boredom one Summer led me to accepting a job in a local coffee house in August
+2019. While it was fun going to school and working at the same time, I often
+felt that working in this capacity was a distraction from what I could be doing
+instead. Work began piling up for my senior design project and frequently I was
+getting less and less sleep since I needed to be at work often at 6AM. This
+became too much to handle and in November that year I threw in the towel to
+
+My time working there was pleasant, though. The atmosphere, busy at times, was
+refreshing and brand-new to me. The shop was one of the only two coffee shops
+carrying the name. Neither of these stores could accommodate a drive-through so
+all our business was done with foot traffic. This meant that on rainy days,
+especially days where the seasonal hurricanes made landfall somewhere on the
+Eastern seaboard, almost no-one came in. These days were the best and the
+laziest. Sometimes I'd clean the same counter 10 times in an afternoon without
+ever seeing anyone use it. Being bored, as one of my (Idaho-native) professors
+at [[School/Sophia_University]] put it, is something we've forgotten how to do.
+
+Boredom, it seemed, was the background noise for children of an earlier age,
+before there was any internet or broadcast TV as we know it now. Boredom, it
+seemed, was integral to that time, when one could sit outside and watch the
+trees bend with the blowing of the hot summer wind, or watch cars scuttle by on
+their way to something far removed from this lazy existence. This is the boredom
+I felt wiping down these counters and tables and chairs.
+
+One other thing: the shop has no way to track orders save for a pad of sticky
+notes. For this reason there is a lexicon of short-hand you must learn for
+writing down orders quickly and concisely. This helps especially in the mornings
+when people rush in and out of the doors so quickly. It could be stressful
+sometimes but at the end of the day I felt satisfied.
+
+The pay was awful though and I made more doing less as a government employee
+than I ever made at that coffee shop.
+
+It was around this time I began brewing drip coffee at home instead of using my
+percolator. The taste is much fuller because of the control one can exert over
+the different variables of brewing: water temperature, saturation, drip
+intensity, aeration, etc. Today it is the only kind of coffee I will make.


Start on 上智大学 / Jōchi Daigaku
diff --git a/School/Sophia_University.wiki b/School/Sophia_University.wiki
index 6995dcc..6880bc4 100644
--- a/School/Sophia_University.wiki
+++ b/School/Sophia_University.wiki
@@ -1,5 +1,130 @@
[[!meta title="Jōchi Daigaku"]]

-[[North_Carolina_State_University]]
+Sophia University (known in Japanese as 上智大学 "Jōchi Daigaku") is a
+university in the Chiyoda ward of Tōkyō, Japan. I studied here in the Spring and
+Summer of 2018 as part of a study-abroad program with
+[[North_Carolina_State_University]], returning eventually that Fall to continue
+my engineering studies at my home university.

-[[Japanese]] [[North_Carolina_State_University]]
+Although my purpose overseas was ostensibly to study, the courses I took while
+abroad gave zero credit towards the completion of my electrical engineering or
+computer engineering degrees. After convincing my advisors that this was
+actually my plan and not some mistake or oversight, I signed up to take these
+classes at Sophia University:
+
+Course Name                        | Course Number
+-----------------------------------|--------------
+Intermediate Japanese 2            | JPN112
+Human Resource Management in Japan | IBE445
+Survey of Japanese Literature 1    | LIT231
+Introduction to Art History        | ART250
+
+Though it looked great on paper, in reality this course load was only settled
+when I finally arrived at the school and had a small orientation with other
+exchange students. There is not perfect communication between universities on
+the other side of the world so exactly what was in the course catalog was not
+known until we actually landed.
+
+This [[Japanese]] course was the first time I ever took a formal langauge class;
+before this I only studied on my own. The self-study curriculum I followed began
+in Japan to continue my language study and improve my speaking, reading, and
+writing skills in an immersive and enriching context.  This, of course, was a
+smart move, because despite delaying my graduation by a semester I am extremely
+anything else.
+
+I knew almost no-one from my university who would be abroad at Sophia with me
+Eventually I met three others from N.C. State also studying alongside me there,
+two who were there only for the semester like myself and one more who had been
+there for a year. We all lived in different wards and in vastly different living
+arrangements, some living with a host family and some just in student dorms. I
+rented an apartment for internationals (mostly students) in Taitō ward, but when
+I initially landed I stayed at a very large hotel in Chiyoda for a few nights.
+
+Though I was scheduled to begin school in mid-April, I smartly set aside two
+weeks for settling in and exploring the city. When I touched down in late-March
+the sakura trees were in full bloom. The sky was a canvas of pink and light blue
+for almost all hours of the day. These two weeks where I soaked in the beauty
+and strangeness afforded by my almost-whimsical decision to live and study in
+such a far-away place are some of the most special days of my life so far, and I
+have trouble putting in to words how moved I was by simply existing in that
+space and time. I interacted with very few people, as I knew absolutely no-one
+who decided to fly out early and my Japanese was not great, so those days were
+very quiet, peaceful, relaxing and extremely meditative days which chased the
+previous weeks which had bustled and rumbled and brimmed with anxienty but had
+now passed and were now so far removed.
+
+A month or so before leaving the US, I worked in a small office in the fittingly
+small town of Asheboro, North Carolina doing power substation contracting work
+as an electrical engineer; to be suddenly spirited away into this strange and
+comforting bliss was more than I could handle some days, and many times I cried
+watching the flow of the Sumida-gawa river on a lazy afternoon or staring at the
+flowers of a cherry blossom viewing or simply drinking hot [[Coffee]] from a
+scalding steel can
+
+I bought the same coffee from the vending machine in Akihabara for a week until
+it ran out, then I went to the one across the street.  BOSS, the boss of them
+all.
+
+After these days I relocated in early-April to the apartment where I would spend
+the rest of the semester. I lived with a smattering of internationals, mostly
+graduate students studying at Tōkyō University or other nearby schools. The
+apartment-mates I saw and talked with were so nice and all left Japan around the
+same time I came back to the states. They were helpful in navigating the
+paperwork surrounding national healthcare and residency, though I still went to
+the office alone and handled it with my budding Japanese.
+
+When compared to the irregularity of every day I spent sorting through residency
+forms and navigating the Tōkyō subway system, the rigidity afforded by a
+consistent class schedule was a light relief. When my classes settled down and
+I'd settled into my routine of homework, home-cooking and sight-seeing I really
+felt like I was an irremovable and definite piece of the city.
+
+Practicing Japanese
+-------------------
+
+Each morning at 11AM I had a Japanese lesson. The course-content each day was
+structured upon the key-points noted the day before, and the homework passed
+forward each morning also reinforced these points and prepared us for the
+grammar and vocabulary we'd cover that day. I studied very hard each night and
+did very well in this class, completing many of the optional exercises in the
+textbooks we used.
+
+Often I would use the new grammar structures we learned in the classroom while
+chatting up shop-owners in the little touristy shops near my apartment or with
+the friends I made at the university. When I went out by myself it was always a
+principle to never speak English unless someone spoke it to me first, so many
+times I surprised the people around me who were used to an American making
+demands in very, very slow English (as if slowing down helps someone understand
+better). Living in a tourist area (near Sensō-ji) I often heard many different
+languages being spoken around me. In particular it was extremely jarring to hear
+English spoken on the street, often coming from a group walking the other
+direction, past me, resulting in some weird Anglo-doppler effect especially after
+long periods of primarily Japanese input. Even more jarring when the language
+came at my ears with such a familiar accent.
+
+It's Raining Again
+------------------
+
+One thing to note is that in the early Summer it rains nearly every day. It's
+absolutely miserable and getting anywhere via public transit is a pain.
+Sometimes even the trains stop moving along certain lines because there is so
+much rain falling onto the tracks. On days like this we were still expected to
+make our way to class before the bell so often I needed to budget extra minutes
+just to accomodate the late trains. And every morning that it rained, late-train
+or not, it was downright miserable to be packed very tightly together with
+people who are soaking wet.
+
+Many times, if it looked to be raining all day and in to the evening, I would
+laze around on campus until my very late HRM course, whip out my laptop and
+write a little in my diary. I wrote quite a bit those days because there was
+naturally a ton to write about. I would watch people come and go from their 3rd
+and 4th period classes, maybe grab something to keep me awake from the 7-11
+downstairs, and lay quietly on the large steps and click-clack my thoughts into
+my diary. Some days the sun slanted through the gap between this floor and the
+next (giving a fantastic view over all the campus) and I would retreat inside to
+some bench or corner. The library was also a pleasant place to work, write and
+study, though I mostly worked outside on benches or at tables.
+
+[... more to come here ]


diff --git a/Virtual_Reality.wiki b/Virtual_Reality.wiki
index e69de29..b448b30 100644
--- a/Virtual_Reality.wiki
+++ b/Virtual_Reality.wiki
@@ -0,0 +1,60 @@
+VR is a hobby I only got into recently. A coworker let me borrow an Oculus Quest
+(1) in Summer, 2020 for a few weeks and I was completely enamored. Though I did
+not play a lot of games before VR (the most I ever invested into a series was
+Pokémon Snap for the Nintendo 64) those first few weeks I was playing all sorts
+of different games and genres. A few months later once Quest 2 was announced I
+bought the headset outright and have never looked back.
+
+On my Quest, you can bootleg games into the HMD itself (the Quest is meant to be
+a standalone platform anyhow) and people have modded classic games like Doom and
+Half-Life 1 to be playable on the Quest. In particular, I played [Dr. Beef's
+Lambda 1 VR](https://www.lambda1vr.com/) mod for Half-Life 1 all the way
+through. This was the first game I'd ever played on a headset and, to say the
+least, it set me up to deal with sim sickness extremely well. The game is
+jarring to play in VR, especially if you've played in on desktop before like I
+had, because you're immediately transported into and immersed in all these
+familiar rooms, surrounded by scientists and security officers and fast-moving
+HECU enemies... around every corner it seems is some zombie ready to scare the
+hell out of you; because the game was meant to spook desktop players being in
+a close-quarters encounter with these hideous enemies and aliens is absolutely
+terrifying.
+
+The physics of HL:1 are probably the most likely to induce motion-sickness of
+any game I've ever played in VR. From the falling and jumping to the puzzles and
+weapon physics, this game is not very friendly to beginners in VR but somehow I
+was able to make it all the way through the story. I remember in vivid detail
+being launched up into the air by a fan and falling over on my side in my living
+room in real life. I have not yet played Half Life: Blue Shift or Opposing Force
+but they are also supposedly playable in this mod as well and I look forward to
+that opportunity to play with this game some more.
+
+Another game I gravitated towards immediately was BallisticNG, a futuristic
+zero-g racing sim in the style of WipEout, another title from my childhood which
+I played on my N64. Though you *can* play BNG purely on desktop, being immersed
+in the cockpit of the vehicle and watching every turn fly by and the enemy ships
+slipping through the air around you is a mesmerizing sensation. Not to mention
+that everything is coming at you at several hundred kilometers per hour. It's an
+insanely fun, extremely fast game that feels, especially in VR, like a more
+immersive WipEout HD. I'm not nearly as good at BNG as I am at WipEout (maybe
+the bar in HD is lower) but this game is so so much fun at any skill level.
+
+One last game I'll call out is Garry's Mod, a game over 15 years old and not
+designed with VR in mind at all. Recently (around 2019 I think) a mod for
+Garry's Mod was developed by Catse called
+[VRMod](https://steamcommunity.com/sharedfiles/filedetails/?id=1678408548) and
+it's the most perfect thing we will get until Garry's Mod in Source 2.
+Essentially it adds VR capability into GMod, allowing a sandbox player to wear a
+headset and manipulate the world around them using typical Garry's Mod weapons
+and tools. This is one of the most impressive mods for Garry's Mod and it is a
+mod I often cite when arguing that games with a healthy modding ecosystem and
+receptive development teams often produce the most novel and amazing
+experiences, far beyond what the game ever intended to achieve in the first
+place. Hell, you can even play Half Life: 2 in Garry's Mod, and with VRMod you
+can even play all that in VR!
+
+I anticipate that a VR-only game which offers extensibility and modding tools
+like those offered in GMod will produce really amazing things; there is
+almost no limit to what you can do in Garry's Mod and VRMod really showcases
+that freedom to extend and build on the original game.
+
+[... more stuff to come here]


NCSU and Japanese stuff
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1377554
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+*.swp
diff --git a/Coffee.wiki b/Coffee.wiki
new file mode 100644
index 0000000..e69de29
diff --git a/Cooking.wiki b/Cooking.wiki
new file mode 100644
index 0000000..e69de29
diff --git a/Japanese.wiki b/Japanese.wiki
new file mode 100644
index 0000000..f702825
--- /dev/null
+++ b/Japanese.wiki
@@ -0,0 +1,79 @@
+Japanese is a beautiful language. I'm not a linguist so I can't explain the
+concepts very well, but there is an art to its ambiguity and its freedom of
+expression. It's also a classified as a Category IV language ("super-hard
+languages") by the US State department, meaning it is "exceptionally difficult
+for native English speakers" so it's not just something you pick up over a
+weekend.
+
+I started learning this language independently during my first year of college.
+At that time, I was really frustrated about one thing in particular; that one
+*someone else* to assure me that these translations were accurate, which is not
+something you can always guarantee with the rag-tag nature of fansubbing groups.
+Sure, things are better than they were in the 90s, but fansubbing has always
+been a dying profession because nobody is going to pay for your work and it can
+be taxing / unfulfilling to do it on the side.
+
+From this frustration grew my resolve to learn Japanese (spoken and written) by
+the time I exited college, so I started grinding out hiragana / katakana and
+picked up an [Anki](https://apps.ankiweb.net/) deck and never looked back.
+Eventually I started reading raw manga and even translated a few things myself,
+siphoning new words I learned from the books I was reading into my Anki deck and
+practicing them over and over and over.
+
+This year I hope to take the JLPT for N1 fluency. Japanese fluency (not just
+"conversational" fluency, but a healthy technical / vocational vocabulary too)
+has been a long-term goal of mine, and having a certification to cement this
+achievement is not just important to me but also in giving meaning to my
+credibility as a Japanese speaker to my employer. Eventually I would like to use
+this skill in the workplace, but I have not yet seen many opportunities to do
+so.
+
+Although I *had* started learning the language before I studied in Japan, I
+really only started *learning* at a decent pace when I took a semester at
+[[School/Sophia_University]] in Tōkyō. There I took my first actual Japanese
+language course (I'd avoided the ones at my home university) and just by virtue
+of living there I reinforced those concepts throughout the day. I much prefer
+being immersed in that environment, it is so much easier to learn when you're
+thinking, speaking and dreaming Japanese every single day.
+
+If my major in college were more aligned with language learning or fluency I
+would have dropped out instantly and enrolled in a school abroad. Even now, I
+sometimes regret not having pushed this further or extending my study-abroad to
+a full year, but I know I would have slipped farther behind in my degree studies
+than I was already, as my semester in Tōkyō did not add any engineering credits
+to my transcript. My hope now is to work my way into a role which lets me
+both satisfy the advancement of my career as a software engineer in the
+datacenter and permits me time to practice and nurture my Japanese skill,
+hopefully in the same context.
+
+The Method
+----------
+
+It can be really intimidating to pick up a new language but with enough
+resolve and the right amount of determination, time is the only thing that can
+stand in your way! I'm going to tell you how I started learning and how I'm
+continuing to learn Japanese but this is in no way meant to be prescriptive.
+
+Even before I began learning the language I was inspired to look more into it by
+watching a ton of [Nama Sensei's Fucking Japanese
+Lessons](https://www.youtube.com/watch?v=oZEA54VJEdE). Namasensei is one of the
+whitest people I've ever seen speak Japanese but the really cool thing to me was
+that he made it all the way to Japan and was teaching English there at the time.
+That was very motivational for me, because even if the lessons were not very
+rich in content or even if his handwriting was atrocious his enthusiasm has
+stuck with me ever since and I sometimes still go back and watch a few lessons
+from time to time.
+
+When I decided to approach this language, though, the first thing I did was to
+learn hiragana and then katakana. Notably, I used
+[RealKana](https://realkana.com/) for this task and consequently memorized both
+alphabets in a few weeks. I practiced writing them by memory as I was learning
+them, I felt this helped my retention and production. Learning the alphabet is a
+non-neogitable first step, though, as knowing how to write even basic things is
+requisite to advancing in any language. In many languages which anglophones may
+be familiar with this is mostly taken for granted, however a theme of learning
+*this* language is that easy things are hard and hard things take some time to
+get used to.
+
+[... more to come here]
diff --git a/Me.wiki b/Me.wiki
index efd14cf..0b2e183 100644
--- a/Me.wiki
+++ b/Me.wiki
@@ -1,9 +1,9 @@
Hi, my name is Wesley Coakley (🇯🇵  コークリー・ウェズリー) ☆ﾐ(o\*･ω･)ﾉ

I am a Software Engineer in [NVIDIA's Networking Business
-Unit](https://www.nvidia.com/en-us/networking/) (NBU) and a graduate of [N.C.
-State University](https://ncsu.edu) with a B.S. in Computer Engineering and
-another B.S. in Electrical Engineering. I also accidentally took enough courses
+Unit](https://www.nvidia.com/en-us/networking/) (NBU) and a graduate of
+[[School/North_Carolina_State_University]] with a B.S. in Computer Engineering and another B.S.
+in Electrical Engineering. I also accidentally took enough courses
during my college tenure to collect my minor in mathematics on the way out the
door. My professional expertise is in *OSI Layer 3 Routing*, specifically
writing software in the control-plane for switches and Linux routers.
@@ -13,15 +13,41 @@ Learning

I am intermediately fluent in [[Japanese]] (I can speak / read / write well but
many technical things are still are over my head) and have studied at
-[[Japan/Sophia_University]] in Tokyo, Japan; I study some every day and hope to
+[[School/Sophia_University]] in Tōkyō, Japan; I study some every day and hope to
pass JLPT-N1 as soon as I am allowed to take the exam. I really, really enjoy
learning and this is one of several outlets for me to express this passion.

-I like to read a ton too. Technical literature excites me, as does 19th century
-philosophy and [post]modernist literature. There is a very wide breadth of
-things which interest me and often I will enter into new topics by researching,
-reading and marking up books that touch on these ideas. I prefer physical books
-to digital ones because (1) I have trouble focusing on a screen for long periods
-of time and (2) it is much easier to write in a book than to take notes in a
-PDF.
+I like to read a ton too. I love reading technical literature because it expands
+my depth of knowledge and can improve my problem-solving ability. I also like
+reading 19th century philosophy and [post]modernist literature. There is a very
+wide breadth of things which interest me and often I will enter into new topics
+by researching, reading and marking up books that touch on these ideas. I prefer
+physical books to digital ones because (1) I have trouble focusing on a screen
+for long periods of time and (2) it is much easier to write in a book than to
+take notes in a PDF.

+Interests
+---------
+
+I love to design and organize systems. I've found that throughout the software
+(and hardware) spheres, I enjoy working on anything with a sizable problem
+statement. Though I *can* bear down and churn out the minute details of a
+particular element in a certain project, switching between these two worlds of
+"design" and "detailed implementation" is difficult and counterproductive, and
+since I am most comfortable being a systems architect in that sense, I have come
+to appreciate and enjoy the long and sweeping tasks demanded by design on a
+large scale. Sometimes I will design things I have no intention of implementing
+or even time to consider implementing, and that's okay, because this process
+occassionally produces schematics for something I become obsessively and
+absolutely in love with. At that point I'll pour in all the time I can afford
+into the project.
+
+Favorite Things
+---------------
+
+These are more minor things than the above but they are still very important to
+me:
+
+- Playing games in [[Virtual_Reality]]
+- Drinking and making [[Coffee]]
+- [[Cooking]], both for myself and with my boyfriend
diff --git a/School/North_Carolina_State_University.wiki b/School/North_Carolina_State_University.wiki
index e69de29..830df09 100644
--- a/School/North_Carolina_State_University.wiki
+++ b/School/North_Carolina_State_University.wiki
@@ -0,0 +1,140 @@
+N.C. State Unviersity is in Raleigh, North Carolina and is chiefly an
+engineering and agriculture school, though there are many different and diverse
+colleges within the university.
+
+I graduated from here in May 2020 with a B.S. in Computer Engineering as well as
+a B.S. in Electrical Engineering. I also picked up a minor in Mathematics along
+the way, as I took math classes every semester or so to break up my engineering
+workload and keep from burning out completely. I went here for a little under 5
+years, starting in August 2015 and graduating in May 2020.
+
+Along the way I made a lot of friends, meeting through various clubs like the
+Philosophy Club and the Linux User Group, and through my classes and by way of
+existing friends. I also created / cultivated several communities around the
+university myself, uniting people who otherwise likely would've never met and
+enjoyed that different perspective. It's amazing how siloed you can become once
+engineering.
+
+Old College Try
+---------------
+
+Before I matriculated into university in Raleigh, I lived in rural North
+Carolina with my parents, attending a high-school which was adjacent to no less
+than 3 different farms in an equally rural part of the county. I didn't really
+do much because classes were so easy I didn't really need to try. I started
+learning C and x86 outside of school around the age of 15, and about one
+semester before I left my high-school behind I developed a healthy reading
+habit, inhaling War and Peace along with all the old, dusty books I could get my
+hands on. It was around this time that I also started keeping a diary because
+that seemed like the only way to vent any emotion for a boy who feels

(Diff truncated)

diff --git a/Me.wiki b/Me.wiki
index e69de29..efd14cf 100644
--- a/Me.wiki
+++ b/Me.wiki
@@ -0,0 +1,27 @@
+Hi, my name is Wesley Coakley (🇯🇵  コークリー・ウェズリー) ☆ﾐ(o\*･ω･)ﾉ
+
+I am a Software Engineer in [NVIDIA's Networking Business
+Unit](https://www.nvidia.com/en-us/networking/) (NBU) and a graduate of [N.C.
+State University](https://ncsu.edu) with a B.S. in Computer Engineering and
+another B.S. in Electrical Engineering. I also accidentally took enough courses
+during my college tenure to collect my minor in mathematics on the way out the
+door. My professional expertise is in *OSI Layer 3 Routing*, specifically
+writing software in the control-plane for switches and Linux routers.
+
+Learning
+--------
+
+I am intermediately fluent in [[Japanese]] (I can speak / read / write well but
+many technical things are still are over my head) and have studied at
+[[Japan/Sophia_University]] in Tokyo, Japan; I study some every day and hope to
+pass JLPT-N1 as soon as I am allowed to take the exam. I really, really enjoy
+learning and this is one of several outlets for me to express this passion.
+
+I like to read a ton too. Technical literature excites me, as does 19th century
+philosophy and [post]modernist literature. There is a very wide breadth of
+things which interest me and often I will enter into new topics by researching,
+reading and marking up books that touch on these ideas. I prefer physical books
+to digital ones because (1) I have trouble focusing on a screen for long periods
+of time and (2) it is much easier to write in a book than to take notes in a
+PDF.
+
diff --git a/School/North_Carolina_State_University.wiki b/School/North_Carolina_State_University.wiki
new file mode 100644
index 0000000..e69de29
diff --git a/School/Sophia_University.wiki b/School/Sophia_University.wiki
new file mode 100644
index 0000000..d5f7e3d
--- /dev/null
+++ b/School/Sophia_University.wiki
@@ -0,0 +1 @@
+[[!meta title="上智大学" sortas="Jouchi Daigaku"]]
diff --git a/favicon.ico b/favicon.ico
new file mode 100644
index 0000000..e7635fc
Binary files /dev/null and b/favicon.ico differ
diff --git a/index.wiki b/index.wiki
index 8c097d1..3c2cdab 100644
--- a/index.wiki
+++ b/index.wiki
@@ -25,4 +25,4 @@ I still haven't filled out many of the pages on this site but if you'd like to
start exploring my personal wiki some the best way is to read a little about
[[Me]] because that's who's writing this!


diff --git a/Me.wiki b/Me.wiki
new file mode 100644
index 0000000..e69de29
diff --git a/Meta/SiteMeta.wiki b/Meta/SiteMeta.wiki
new file mode 100644
index 0000000..e69de29
diff --git a/index.wiki b/index.wiki
index 2360737..8c097d1 100644
--- a/index.wiki
+++ b/index.wiki
@@ -1,10 +1,28 @@
-This personal wiki belongs to [WesleyCoakley](https://wesleycoakley.com) (that
-is, me （⌒▽⌒）).
+This personal wiki belongs to [Wesley Coakley](https://wesleycoakley.com), also
+known as [[Me]] （⌒▽⌒）

-This is a space for organizing my thoughts and knowledge,
-gathered serially throughout my day, into parallel and correlating articles
-which are then neatly formatted and presented here on the Web. All opinions are
-my own and all information here can only be as correct as I am.
+This is a personal space for organizing my thoughts and knowledge, gathered
+serially throughout my day, into parallel and correlating articles which are
+then neatly formatted and presented here on the Web. I'm the only one with
+write access here so all opinions are my own and all information here can only
+be as correct as I am. This site is generated with with love and [[!iki
+considered too [[Meta/SiteMeta]] and will be avoided at all costs.

-on the front page.
+I run a [similar personal site](https://wesleycoakley.com) which hosts my
+polished articles and HOWTO guides. If you're looking to read something more
+monolithic maybe then you should check out that site instead |･ω･｀) I'm writing
+more all the time, and actually most of the content and inspiration for those
+pages comes from my notes on this personal wiki. I'd recommend checking out one
+of these few articles hosted over there which typify my style:
+
+- [My Senior Design
+  Project](https://wesleycoakley.com/Projects/my-senior-design-project-ncsu-ece484-ece485.html)
+- [Approach, Design, and Implementation of my ECE306 Embedded Systems
+  Project](https://wesleycoakley.com/Projects/my-embedded-ncsu-ece306-project.html)
+
+I still haven't filled out many of the pages on this site but if you'd like to
+start exploring my personal wiki some the best way is to read a little about
+[[Me]] because that's who's writing this!
+


index: initial
diff --git a/index.wiki b/index.wiki
new file mode 100644
index 0000000..2360737
--- /dev/null
+++ b/index.wiki
@@ -0,0 +1,10 @@
+This personal wiki belongs to [WesleyCoakley](https://wesleycoakley.com) (that
+is, me （⌒▽⌒）).
+
+This is a space for organizing my thoughts and knowledge,
+gathered serially throughout my day, into parallel and correlating articles
+which are then neatly formatted and presented here on the Web. All opinions are
+my own and all information here can only be as correct as I am.
+