Skip to content

Commit

Permalink
Deploying to gh-pages from @ f1740e2 🚀
Browse files Browse the repository at this point in the history
  • Loading branch information
AaDalal committed Oct 30, 2023
1 parent 0c2d600 commit 761ab7a
Show file tree
Hide file tree
Showing 25 changed files with 34 additions and 23 deletions.
2 changes: 1 addition & 1 deletion 404.html
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css" integrity="sha384-Xi8rHCmBmhbuyyhbI88391ZKP2dmfnOl4rT9ZfRI7mLTdk1wblIUnrIq35nqwEvC" crossorigin="anonymous"/><link rel="icon" href="favicon.ico"/><link data-next-font="size-adjust" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/5c882c34218f54b4.css" as="style"/><link rel="stylesheet" href="/_next/static/css/5c882c34218f54b4.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/darkmode-load.js" defer="" data-nscript="beforeInteractive"></script><script src="/_next/static/chunks/webpack-b8f8d6679aaa5f42.js" defer=""></script><script src="/_next/static/chunks/framework-2c79e2a64abdb08b.js" defer=""></script><script src="/_next/static/chunks/main-83cebdb887f48834.js" defer=""></script><script src="/_next/static/chunks/pages/_app-2dfd096757008a0f.js" defer=""></script><script src="/_next/static/chunks/pages/_error-54de1933a164a1ff.js" defer=""></script><script src="/_next/static/nOPRxLI7Ag7g6KN_vyVyX/_buildManifest.js" defer=""></script><script src="/_next/static/nOPRxLI7Ag7g6KN_vyVyX/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block;text-align:left"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"nOPRxLI7Ag7g6KN_vyVyX","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css" integrity="sha384-Xi8rHCmBmhbuyyhbI88391ZKP2dmfnOl4rT9ZfRI7mLTdk1wblIUnrIq35nqwEvC" crossorigin="anonymous"/><link rel="icon" href="favicon.ico"/><link data-next-font="size-adjust" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/5c882c34218f54b4.css" as="style"/><link rel="stylesheet" href="/_next/static/css/5c882c34218f54b4.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/darkmode-load.js" defer="" data-nscript="beforeInteractive"></script><script src="/_next/static/chunks/webpack-b8f8d6679aaa5f42.js" defer=""></script><script src="/_next/static/chunks/framework-2c79e2a64abdb08b.js" defer=""></script><script src="/_next/static/chunks/main-83cebdb887f48834.js" defer=""></script><script src="/_next/static/chunks/pages/_app-2dfd096757008a0f.js" defer=""></script><script src="/_next/static/chunks/pages/_error-54de1933a164a1ff.js" defer=""></script><script src="/_next/static/0-nV1MzsWdmIJ2GMWdViW/_buildManifest.js" defer=""></script><script src="/_next/static/0-nV1MzsWdmIJ2GMWdViW/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block;text-align:left"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"0-nV1MzsWdmIJ2GMWdViW","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1 change: 1 addition & 0 deletions _next/data/0-nV1MzsWdmIJ2GMWdViW/index.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"pageProps":{"posts":[{"title":"Consistent Hashing","slug":"consistent-hashing","date":"2023-10-26","preview":"Recently I've been reading about the Chord distributed hash table network for a class. The goal of Chord is to map any key (e.g., a file nam..."},{"title":"Rendevous Hashing","slug":"rendevous-hashing","date":"2023-10-26","preview":"This is a follow up to my post on Consistent Hashing -- see that first\nConsistent hashing is a technique used for distributed hash tables th..."},{"title":"Python Coroutines!?!?","slug":"py-generator-couroutines","date":"2023-06-11","tags":"async,asyncio,python,coroutine,generator","preview":"Python supports generators which allow you to .send() and recieve (via next(...)) values. They are kind of like channels since they don't bl..."},{"title":"Lessons from Product Managing","slug":"PMing","date":"2023-06-01","preview":"When I started as a product manager at Roblox, I didn't really even know what a product manager does. After doing it, I can confidently say ..."},{"title":"Einsum","slug":"einsum","date":"2022-03-14","tags":"math","preview":"The basic idea for einstein notation is to drop the ∑\\sum∑ from summations in some cases (reducing notational complexity). For instance, you..."},{"title":"Entropy","slug":"entropy","date":"2021-12-28","tags":"Information Theory","preview":"Inspired by this video on compression, I wanted to understand what carrying information actually means, from a few interesting examples rela..."},{"title":"Try again with sudo: _sudo","slug":"_sudo","date":"2021-11-11","tags":"sudo, su, bash, sh, shell","preview":"Sometimes you want to run without sudo if you can... and run with sudo if you can't.\n_sudo.sh\n$@ || sudo $@\n..."},{"title":"Roku & Competition","slug":"competition-focus","date":"2021-11-11","tags":"Competition, Focus","preview":"Roku feels like a business being cannabalized by competitors with deeper pockets and tall vertical integration. For example, Amazon or Apple..."}]},"__N_SSG":true}
1 change: 1 addition & 0 deletions _next/data/0-nV1MzsWdmIJ2GMWdViW/p/PMing.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"pageProps":{"post":{"title":"Lessons from Product Managing","date":"2023-06-01","slug":"PMing","content":"<p>When I started as a product manager at Roblox, I didn't really even know what a product manager does. After doing it, I can confidently say that I still don't know. Every PM seems to do it differently.</p>\n<p>There are some general trends, though. All the good PMs seem to be constantly thinking about the following things:</p>\n<ol>\n<li><em>The Customer</em> - There's a trap of using the metrics you measure to replace the customer. Adoption and retention don't tell you how the customer gets value from the product. It happens so gradually, though, that you don't realize that you've stopped thinking about the customer. And this is the most obvious part of your job as a PM! So it's important not to forget about the customer.</li>\n<li><em>Getting Stuff Done</em> - A good PM is effective not when they issue product directives from on high, but when they work really closely with engineers, designers, and data scientists to fill in the gaps left by the experts. That might mean making the first version of the design to reduce the load on your designer, or filling out paperwork for your engineers. The basic function of the PM is to reduce the mental load to allow builders to build.</li>\n<li><em>Simplify</em> - There are two parts: <strong>strong opinions held loosely</strong> and <strong>clear communication</strong>. Strong opinions held loosely, with justification, allow your team to push back on you and converge sooner. Clear, simple communication uses bullet points to make it obvious who needs to work on what and where the open questions lie. Many PMs don't dive deep into technical details because it impedes this function.</li>\n<li><em>Push, but not too hard</em> - The PMs I've seen asks lots of <em>why</em> questions. But they never push too hard on any one thing or undermine the more technical members of their team -- instead, they try to find a way to deliver value to customers around technical constraints.</li>\n<li><em>Constantly Communicate</em> - This is the advice I think is most applicable to a start-up. Having founders who constantly communicate, even around seemingly tiny milestones keeps the entire team grounded in the product and generates forward progress.</li>\n<li><em>Seek Contradiction</em> - this is hard to stomach when you near a deadline, but an incredible way to discover your underlying assumptions. Talk to other PMs, engineers, marketing people, privacy and safety people even (especially!) if you don't like what they will have to say.</li>\n<li><em>Global Tradeoffs</em> - Another trap in PMing is optimizing for your own product's success at the expense of everything else. Great PMs \"take the long view\" and optimize for a great user experience. Sometimes this means forgoing the low-hanging fruit for a better customer experience.</li>\n</ol>"},"morePosts":[{"title":"Consistent Hashing","slug":"consistent-hashing","date":"2023-10-26"},{"title":"Rendevous Hashing","slug":"rendevous-hashing","date":"2023-10-26"},{"title":"Python Coroutines!?!?","slug":"py-generator-couroutines","date":"2023-06-11"},{"title":"Lessons from Product Managing","slug":"PMing","date":"2023-06-01"},{"title":"Einsum","slug":"einsum","date":"2022-03-14"},{"title":"Entropy","slug":"entropy","date":"2021-12-28"},{"title":"Try again with sudo: _sudo","slug":"_sudo","date":"2021-11-11"},{"title":"Roku & Competition","slug":"competition-focus","date":"2021-11-11"}]},"__N_SSG":true}
1 change: 1 addition & 0 deletions _next/data/0-nV1MzsWdmIJ2GMWdViW/p/_sudo.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"pageProps":{"post":{"title":"Try again with sudo: _sudo","date":"2021-11-11","slug":"_sudo","content":"<p>Sometimes you want to run without sudo if you can... and run with sudo if you can't.</p>\n<p><code>_sudo.sh</code></p>\n<pre><code>$@ || sudo $@\n</code></pre>"},"morePosts":[{"title":"Consistent Hashing","slug":"consistent-hashing","date":"2023-10-26"},{"title":"Rendevous Hashing","slug":"rendevous-hashing","date":"2023-10-26"},{"title":"Python Coroutines!?!?","slug":"py-generator-couroutines","date":"2023-06-11"},{"title":"Lessons from Product Managing","slug":"PMing","date":"2023-06-01"},{"title":"Einsum","slug":"einsum","date":"2022-03-14"},{"title":"Entropy","slug":"entropy","date":"2021-12-28"},{"title":"Try again with sudo: _sudo","slug":"_sudo","date":"2021-11-11"},{"title":"Roku & Competition","slug":"competition-focus","date":"2021-11-11"}]},"__N_SSG":true}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"pageProps":{"post":{"title":"Roku & Competition","date":"2021-11-11","slug":"competition-focus","content":"<p>Roku feels like a business being cannabalized by competitors with deeper pockets and tall vertical integration. For example, Amazon or Apple produce hardware and the software running on it and the media running on the software. While <a href=\"https://www.roku.com/whats-on/the-roku-channel/roku-originals\">Roku does produce it's originals</a>, it is not as keenly invested in pushing it to gain mindshare except to allow more space for their ads.</p>\n<p>But Roku also leverages the fact that it is not as vertically integrated to create values where its competitors can't in a couple of ways:</p>\n<ol>\n<li>allowing conflicting ads. Where Amazon would be reluctant to advertise the new Netflix show since that would cannabalize Prime Video, Roku has less qualms about this.</li>\n<li>self-incentivizing building a better TV experience across the board. Google or Apple may want to push their brand of TV, which is less the case with Roku.</li>\n</ol>\n<p>I found this interesting while listening to <em><a href=\"https://wondery.com/shows/how-i-built-this/episode/10386-roku-anthony-wood/\">How I Built This, Anthony Wood and Roku</a></em></p>"},"morePosts":[{"title":"Lessons from Product Managing","slug":"PMing","date":"2023-07-23"},{"title":"Python Coroutines!?!?","slug":"py-generator-couroutines","date":"2023-06-11"},{"title":"Einsum","slug":"einsum","date":"2022-03-14"},{"title":"Entropy","slug":"entropy","date":"2021-12-28"},{"title":"Try again with sudo: _sudo","slug":"_sudo","date":"2021-11-11"},{"title":"Roku & Competition","slug":"competition-focus","date":"2021-11-11"}]},"__N_SSG":true}
{"pageProps":{"post":{"title":"Roku & Competition","date":"2021-11-11","slug":"competition-focus","content":"<p>Roku feels like a business being cannabalized by competitors with deeper pockets and tall vertical integration. For example, Amazon or Apple produce hardware and the software running on it and the media running on the software. While <a href=\"https://www.roku.com/whats-on/the-roku-channel/roku-originals\">Roku does produce it's originals</a>, it is not as keenly invested in pushing it to gain mindshare except to allow more space for their ads.</p>\n<p>But Roku also leverages the fact that it is not as vertically integrated to create values where its competitors can't in a couple of ways:</p>\n<ol>\n<li>allowing conflicting ads. Where Amazon would be reluctant to advertise the new Netflix show since that would cannabalize Prime Video, Roku has less qualms about this.</li>\n<li>self-incentivizing building a better TV experience across the board. Google or Apple may want to push their brand of TV, which is less the case with Roku.</li>\n</ol>\n<p>I found this interesting while listening to <em><a href=\"https://wondery.com/shows/how-i-built-this/episode/10386-roku-anthony-wood/\">How I Built This, Anthony Wood and Roku</a></em></p>"},"morePosts":[{"title":"Consistent Hashing","slug":"consistent-hashing","date":"2023-10-26"},{"title":"Rendevous Hashing","slug":"rendevous-hashing","date":"2023-10-26"},{"title":"Python Coroutines!?!?","slug":"py-generator-couroutines","date":"2023-06-11"},{"title":"Lessons from Product Managing","slug":"PMing","date":"2023-06-01"},{"title":"Einsum","slug":"einsum","date":"2022-03-14"},{"title":"Entropy","slug":"entropy","date":"2021-12-28"},{"title":"Try again with sudo: _sudo","slug":"_sudo","date":"2021-11-11"},{"title":"Roku & Competition","slug":"competition-focus","date":"2021-11-11"}]},"__N_SSG":true}
1 change: 1 addition & 0 deletions _next/data/0-nV1MzsWdmIJ2GMWdViW/p/consistent-hashing.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"pageProps":{"post":{"title":"Consistent Hashing","date":"2023-10-26","slug":"consistent-hashing","content":"<p>Recently I've been reading about the Chord distributed hash table network for a class. The goal of Chord is to map any key (e.g., a file name) to the server that is responsible. This mapping has to be maintained without any centralization: you can ask any server in the network for which other server is responsible for a key, and get an answer, even as servers enter and leave the network as they please. At the core of Chord and most other DHTs is consistent hashing, a beautifully simple idea.</p>\n<p>In order for the system to be distributed in an appreciable way, the mapping from keys to servers needs to be somewhat even; in other words any arbitrary set of keys are likely to be evenly distributed among the servers. At the same time, this mapping needs to be consistent: <strong>all</strong> servers need to agree on which server is responsible for key, even as servers come and go and key responsibility is reassigned.</p>\n<p>These two requirements are the problem that consistent hashing solves. It provides a way of taking hash values, which are uniformly distributed, and mappping them to servers in a way that is consistent no matter which server is doing the mapping. This is in contrast to the way we do hashing in a hashtable, which requires us to <em>mod the hash by the size of the table</em> and thereby introduces a dependence on the number of servers which are in the network at any time. We have no guarantees about the size or composition of the network in the distributed situation, so consistent hashing solves the problem in a way that traditional hashtables can't.</p>\n<p>Conceptually, there is no big jump here. We merely compute the hash for each key and then find some consistent way of mapping that to a node. In the case of Chord, we create this assignment by hashing the server identifiers, and then mapping each key hash to the closest succeeding key hash. In this way, each node that knows the other nodes in the network can map a key to a node. No matter if a node leaves or enters, the node will continue to be able to map the key. And no matter how nodes enter and leave, the mapping will be close to uniform. These are powerful properties.</p>"},"morePosts":[{"title":"Consistent Hashing","slug":"consistent-hashing","date":"2023-10-26"},{"title":"Rendevous Hashing","slug":"rendevous-hashing","date":"2023-10-26"},{"title":"Python Coroutines!?!?","slug":"py-generator-couroutines","date":"2023-06-11"},{"title":"Lessons from Product Managing","slug":"PMing","date":"2023-06-01"},{"title":"Einsum","slug":"einsum","date":"2022-03-14"},{"title":"Entropy","slug":"entropy","date":"2021-12-28"},{"title":"Try again with sudo: _sudo","slug":"_sudo","date":"2021-11-11"},{"title":"Roku & Competition","slug":"competition-focus","date":"2021-11-11"}]},"__N_SSG":true}

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Loading

0 comments on commit 761ab7a

Please sign in to comment.