{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Hakan Alpay — Blog",
  "home_page_url": "https://hakanalpay.com/blog/",
  "feed_url": "https://hakanalpay.com/blog/feed.json",
  "description": "Writing by Hakan Alpay on software, cities, economies, games, design, and language.",
  "authors": [
    {
      "name": "Hakan Alpay",
      "url": "https://hakanalpay.com"
    }
  ],
  "language": "en-US",
  "items": [
    {
      "id": "https://hakanalpay.com/blog/posts/ai-assisted-writing-worth-reading/",
      "url": "https://hakanalpay.com/blog/posts/ai-assisted-writing-worth-reading/",
      "title": "My AI writing workflow",
      "summary": "Give the model real context, generate less, and delete anything that explains what the reader can already see.",
      "content_text": "The sentence that made me want to rewrite the first version of this blog was: The site is intentionally quiet. The ideas do the moving. The page was already quiet. The sentence added nothing. Worse, it sounded exactly like an AI explaining a design choice that the reader had already understood by looking at the page. So I deleted it. That is now one of the main rules for this blog: do not narrate what the reader can already see or infer. Redundancy is a useful tell A 2026 ACL paper called UMPIRE studied human and LLM generated social posts paired with images. The authors found a useful semantic difference: human posts were more likely to add information beyond the image, while LLM posts were more likely to describe information already present. That paper is about multimodal social posts, not blog essays, so I would not turn it into a universal detector. But the idea of redundant versus complementary information maps well to the AI prose I dislike. Bad AI writing keeps telling you what just happened: a quiet design announces that it is quiet a section ends by summarizing itself a conclusion restates the introduction a paragraph explains why the previous paragraph matters every tradeoff gets a sentence saying that it is a tradeoff The fix is usually deletion, not a more human synonym. Another ACL 2026 study found that people could post edit LLM drafts to make them closer to their own style, but the edited text still stayed stylistically closer to LLM output than to their unassisted writing and showed less stylistic diversity. That makes me less interested in the workflow where an AI writes a polished 2,000 word article and I “humanize” it afterward. I would rather give the model better material and ask it to generate less. What I like about Sudowrite Sudowrite is built for fiction, but its workflow is more interesting to me than the usual blank chat box. Its Story Bible is a persistent source of truth for the project. Style, characters, worldbuilding, outline, POV, and other context stay available while the writer moves between documents. Its Write tool is basically contextual autocomplete. It can read up to 20,000 words before the cursor and also use Story Bible context. Rewrite is a separate tool with options such as Shorter . Feedback can run custom editorial checks across a draft while seeing the Story Bible. The part I want to copy is the separation of jobs. Planning, continuation, rewriting, expansion, and critique do not have to be one giant prompt. Also: Sudowrite has an Expand button. For a blog, I want the psychological opposite. Expansion should be opt in. Compression should be the default. My version for this blog Before drafting, the agent gets a small source of truth: what I actually think the concrete thing that triggered the post relevant code, data, screenshots, or prior writing facts that need current sources anything I am unsure about That plays the role of a Story Bible. The point is to keep the model anchored to material that came from somewhere other than its own next token instincts. Then I prefer drafting section by section. If I already wrote a paragraph I like, continue from it instead of replacing it with a fresh “professional” version. If a section is weak, rewrite that section. If it is bloated, make it shorter. If the argument has a hole, use a feedback pass instead of padding the hole with transitions. My older posts are useful style context because they contain details I would never put in a generic voice prompt: a hot apartment, the Turkish name for a Hong Kong orchid tree, the annoyance of memorizing CSS classes, half finished thoughts. I do not want the model to imitate old typos. I want it to preserve the habit of writing from an actual thing. What I cut now The updated editorial guide has a harsher compression rule. I cut sentences that: explain an obvious design choice tell the reader that a point is important instead of making the point defend a decision against objections nobody raised recap a section that was already clear turn a simple preference into a philosophy use a heading for two paragraphs that did not need a heading describe the writing process when the subject is something else Disclosures are one line. UI copy is a few words. A page called Blog can say Blog . The agent also gets a custom “redundancy” pass: for each paragraph, ask what new information it contributes. If the answer is “it restates the previous paragraph more smoothly,” delete it. Facts still get a separate verification pass. Names, dates, prices, releases, laws, statistics, and causal claims are checked against current sources. Style editing cannot rescue a false sentence. I still want to use AI heavily. I just do not want the model’s instinct to be helpful, comprehensive, and self explanatory to become the voice of the site. That is enough of a rule. Sources Yi et al., “UMPIRE: Unveiling LLM generated Posts via Redundant Expressions” Baumler et al., “Can You Make It Sound Like You? Post Editing LLM Generated Text for Personal Style” Sudowrite: Story Bible Sudowrite: Write Sudowrite: Rewrite Sudowrite: Feedback",
      "date_published": "2026-08-20T00:00:00.000Z",
      "date_modified": "2026-08-20T00:00:00.000Z",
      "tags": [
        "Writing",
        "AI",
        "Research",
        "Blogging"
      ]
    },
    {
      "id": "https://hakanalpay.com/blog/posts/building-an-agentic-blog/",
      "url": "https://hakanalpay.com/blog/posts/building-an-agentic-blog/",
      "title": "Rebuilding my blog",
      "summary": "Astro, Markdown, GitHub Pages, Cloudflare, and a publishing flow I can use from ChatGPT on my phone.",
      "content_text": "I wanted to be able to say “turn this into a post” in ChatGPT on my phone and have it land on my actual blog. My writing was already scattered across an old Jekyll blog, a newer blog repo, a few LeetCode write ups, and my portfolio. Updating any of them was enough of a chore that I mostly did not. So I rebuilt the blog around the place I already use for code: GitHub. The stack The canonical repo is Kimeiga/blog. Posts are Markdown. Astro turns them into static HTML. I normally prefer Svelte, but a blog is mostly documents. Astro gives me typed content collections, static output, and almost no browser JavaScript without making me build a publishing system from scratch. The public build lives at kimeiga.github.io/blog. hakanalpay.com/blog proxies that subtree through the Cloudflare deployment that already serves my portfolio, so the blog can stay its own repo without giving up the main domain. Search is local. RSS, JSON Feed, tags, archives, a sitemap, and social metadata are generated at build time. Comments use GitHub and load only when opened. Photo by Bernd Dittrich on Unsplash · Unsplash License Moving the old posts I found nine posts in blog old that were actually mine and three dated technical posts in the LeetCode repo. There were also theme demos and sample posts. Those stayed out. The migration script imports an explicit list of authored files, keeps the original dates, normalizes frontmatter, and copies the old images into the new site. That was safer than treating “Markdown in one of my repos” as equivalent to “something I wrote.” The design The default theme is dark, with a light option. The accent is the same golden yellow I use elsewhere, e3bd12 on dark backgrounds. The article column tops out at 45rem, and the body uses a system serif stack led by Iowan Old Style. I tried to delete more than I added. The homepage now says Blog , shows the latest post, tags, and recent writing. It does not need a paragraph explaining that it is minimal. Photographs are stored locally as WebP files with small credits under them. I would rather use a real licensed photograph than an AI image unless the image itself is the subject. Publishing from ChatGPT The repo has an AGENTS.md, an editorial guide, and a small blog skill. They tell an agent where posts live, how frontmatter works, how to handle sources and images, and what has to pass before publication. The writing workflow is deliberately less automatic than the deployment workflow: 1. start with the actual claim, notes, code, data, or conversation 2. research anything that can change or be wrong 3. write the post in Markdown 4. cut repetition and generic explanation 5. build the site 6. publish the reviewed branch The mechanical part can be agentic. The opinion should still be mine. What broke while setting it up The deployment was more educational than the architecture diagram. An Unsplash download URL started returning 401, so image acquisition became optional instead of blocking the whole build. One old Jekyll timestamp parsed into an invalid Astro date. The bootstrap accidentally preserved the old project’s package lock.json, which gave the new Astro app the wrong dependency graph. Vite expected lightningcss, so I made it explicit instead of relying on an optional transitive dependency. GitHub Actions successfully built the new site and then refused to push because the generated commit touched workflow files without workflow permission. I separated the site source commit from workflow changes. After those fixes the static build produced the archive, feeds, search, tag pages, and the new posts, and Kimeiga/blog became the source of truth. Now the useful part is boring: when I have something worth writing, I can start from the conversation instead of starting from repo archaeology. Links Blog source Astro content collections W3C text presentation guidance GitHub Pages",
      "date_published": "2026-08-20T00:00:00.000Z",
      "date_modified": "2026-08-20T00:00:00.000Z",
      "tags": [
        "Software",
        "Design",
        "Blogging",
        "AI"
      ]
    },
    {
      "id": "https://hakanalpay.com/blog/posts/leetcode-352-data-stream-as-disjoint-intervals/",
      "url": "https://hakanalpay.com/blog/posts/leetcode-352-data-stream-as-disjoint-intervals/",
      "title": "352. Data Stream as Disjoint Intervals",
      "summary": "352. Data Stream as Disjoint Intervals Solved Hard Topics Companies Given a data stream input of non negative integers a 1 , a 2 , ..., a n , summarize the numbers seen so far as a list of disjoint intervals. Implement…",
      "content_text": "352. Data Stream as Disjoint Intervals Solved Hard Topics Companies Given a data stream input of non negative integers a 1 , a 2 , ..., a n , summarize the numbers seen so far as a list of disjoint intervals. Implement the SummaryRanges class: SummaryRanges() Initializes the object with an empty stream. void addNum(int value) Adds the integer value to the stream. int[][] getIntervals() Returns a summary of the integers in the stream currently as a list of disjoint intervals [start i , end i ] . The answer should be sorted by start i . &nbsp; Example 1: Input [\"SummaryRanges\", \"addNum\", \"getIntervals\", \"addNum\", \"getIntervals\", \"addNum\", \"getIntervals\", \"addNum\", \"getIntervals\", \"addNum\", \"getIntervals\"] [[], [1], [], [3], [], [7], [], [2], [], [6], []] Output [null, null, [[1, 1]], null, [[1, 1], [3, 3]], null, [[1, 1], [3, 3], [7, 7]], null, [[1, 3], [7, 7]], null, [[1, 3], [6, 7]]] Explanation SummaryRanges summaryRanges = new SummaryRanges(); summaryRanges.addNum(1); // arr = [1] summaryRanges.getIntervals(); // return [[1, 1]] summaryRanges.addNum(3); // arr = [1, 3] summaryRanges.getIntervals(); // return [[1, 1], [3, 3]] summaryRanges.addNum(7); // arr = [1, 3, 7] summaryRanges.getIntervals(); // return [[1, 1], [3, 3], [7, 7]] summaryRanges.addNum(2); // arr = [1, 2, 3, 7] summaryRanges.getIntervals(); // return [[1, 3], [7, 7]] summaryRanges.addNum(6); // arr = [1, 2, 3, 6, 7] summaryRanges.getIntervals(); // return [[1, 3], [6, 7]] &nbsp; Constraints: 0 &lt;= value &lt;= 10 4 At most 3 10 4 calls will be made to addNum and getIntervals . At most 10 2 &nbsp;calls will be made to&nbsp; getIntervals . &nbsp; Follow up: What if there are lots of merges and the number of disjoint intervals is small compared to the size of the data stream? Accepted 101.6K Submissions 169.7K Acceptance Rate 59.8% Seen this question in a real interview before? 1/4 Yes No Discussion (55) Similar Questions Summary Ranges Easy Find Right Interval Medium Range Module Hard Count Integers in Intervals Hard Copyright ©️ 2023 LeetCode All rights reserved",
      "date_published": "2023-09-13T16:00:00.000Z",
      "date_modified": "2023-09-13T16:00:00.000Z",
      "tags": [
        "Software",
        "Algorithms",
        "Python"
      ]
    },
    {
      "id": "https://hakanalpay.com/blog/posts/leetcode-391-perfect-rectangle/",
      "url": "https://hakanalpay.com/blog/posts/leetcode-391-perfect-rectangle/",
      "title": "391. Perfect Rectangle",
      "summary": "Leetcode Link Problem Given an array rectangles where rectangles[i] = [x i , y i , a i , b i ] represents an axis aligned rectangle. The bottom left point of the rectangle is (x i , y i ) and the top right point of it…",
      "content_text": "Leetcode Link Problem Given an array rectangles where rectangles[i] = [x i , y i , a i , b i ] represents an axis aligned rectangle. The bottom left point of the rectangle is (x i , y i ) and the top right point of it is (a i , b i ) . Return true if all the rectangles together form an exact cover of a rectangular region . &nbsp; Example 1: Input: rectangles = [[1,1,3,3],[3,1,4,2],[3,2,4,4],[1,3,2,4],[2,3,3,4]] Output: true Explanation: All 5 rectangles together form an exact cover of a rectangular region. Example 2: Input: rectangles = [[1,1,2,3],[1,3,2,4],[3,1,4,2],[3,2,4,4]] Output: false Explanation: Because there is a gap between the two rectangular regions. Example 3: Input: rectangles = [[1,1,3,3],[3,1,4,2],[1,3,2,4],[2,2,4,4]] Output: false Explanation: Because two of the rectangles overlap with each other. &nbsp; Constraints: 1 &lt;= rectangles.length &lt;= 2 10 4 rectangles[i].length == 4 10 5 &lt;= x i , y i , a i , b i &lt;= 10 5 Solution Problem Insight: 1. The combined area of all small rectangles should equal the area of the large rectangle. 2. The corners of the large rectangle should appear only once, while all other points where rectangles meet should appear an even number of times. Solution Breakdown: 1. Initialization : x1, y1: Bottom left corner of the large rectangle. x2, y2: Top right corner of the large rectangle. corners: A set to store the corners of all rectangles. area: To store the total area covered by all small rectangles. 2. Iterate over each rectangle : For each rectangle, the code does the following: a. Updates the potential corners of the large rectangle : This updates the minimum values for the bottom left corner and the maximum values for the top right corner. b. Updates the total area : Adds the area of the current rectangle to the total area. c. Handles the corners of the current rectangle : The four corners of the current rectangle are created as tuples. The loop checks each corner: If the corner is already in the corners set, it is removed. If it's not, it's added to the set. This ensures that corners appearing twice are eliminated from the set. 3. Final Checks : a. Check the four corners of the large rectangle : This checks if the set contains only the four corners of the large rectangle. If there are other corners left in the set, or if any of these four corners are missing, it returns False. b. Check the area : Ensures that the combined area of all small rectangles equals the area of the large rectangle. Summary: In this Python solution, we utilize the properties of sets and the efficiency and clarity of tuples to determine if the given rectangles can form a large rectangle without overlaps or gaps. The logic is similar to the Java solution, but the use of tuples makes the code more concise and readable. Code Time Complexity: 1. Iterating over each rectangle : This loop iterates n times, where n is the number of rectangles. Within this loop: a. Updating the potential corners of the large rectangle and the total area : These operations are \\(O(1)\\) for each rectangle. b. Handling the corners of the current rectangle : This loop iterates 4 times (a constant time). Inside this loop, adding a point to a set or removing a point from a set are both \\(O(1)\\) operations. Thus, the operations inside the main loop are \\(O(1)\\), making the overall time complexity of the main loop \\(O(n)\\). 2. Final Checks : Checking the four corners of the large rectangle and checking the area are both \\(O(1)\\) operations. Combining the above, the overall time complexity is \\(O(n)\\). Space Complexity: 1. Storing the corners : In the worst case, if every rectangle is disjoint from the others, there would be 4 corners for each rectangle, so the space required would be \\(O(4n)\\) or \\(O(n)\\). 2. Other variables : x1, x2, y1, y2, and area all occupy constant space, \\(O(1)\\). Thus, the overall space complexity is \\(O(n)\\). In conclusion, both the time complexity and the space complexity of the Python solution are \\(O(n)\\). Acknowledgements Thanks to hu19 for his solution :)",
      "date_published": "2023-09-12T17:00:00.000Z",
      "date_modified": "2023-09-12T17:00:00.000Z",
      "tags": [
        "Software",
        "Algorithms",
        "Python"
      ]
    },
    {
      "id": "https://hakanalpay.com/blog/posts/leetcode-355-design-twitter/",
      "url": "https://hakanalpay.com/blog/posts/leetcode-355-design-twitter/",
      "title": "355. Design Twitter",
      "summary": "Leetcode Link Problem Design a simplified version of Twitter where users can post tweets, follow/unfollow another user, and is able to see the 10 most recent tweets in the user's news feed. Implement the Twitter class:…",
      "content_text": "Leetcode Link Problem Design a simplified version of Twitter where users can post tweets, follow/unfollow another user, and is able to see the 10 most recent tweets in the user's news feed. Implement the Twitter class: Twitter() Initializes your twitter object. void postTweet(int userId, int tweetId) Composes a new tweet with ID tweetId by the user userId . Each call to this function will be made with a unique tweetId . List&lt;Integer&gt; getNewsFeed(int userId) Retrieves the 10 most recent tweet IDs in the user's news feed. Each item in the news feed must be posted by users who the user followed or by the user themself. Tweets must be ordered from most recent to least recent . void follow(int followerId, int followeeId) The user with ID followerId started following the user with ID followeeId . void unfollow(int followerId, int followeeId) The user with ID followerId started unfollowing the user with ID followeeId . &nbsp; Example 1: Input [\"Twitter\", \"postTweet\", \"getNewsFeed\", \"follow\", \"postTweet\", \"getNewsFeed\", \"unfollow\", \"getNewsFeed\"] [[], [1, 5], [1], [1, 2], [2, 6], [1], [1, 2], [1]] Output [null, null, [5], null, null, [6, 5], null, [5]] Explanation Twitter twitter = new Twitter(); twitter.postTweet(1, 5); // User 1 posts a new tweet (id = 5). twitter.getNewsFeed(1); // User 1's news feed should return a list with 1 tweet id &gt; [5]. return [5] twitter.follow(1, 2); // User 1 follows user 2. twitter.postTweet(2, 6); // User 2 posts a new tweet (id = 6). twitter.getNewsFeed(1); // User 1's news feed should return a list with 2 tweet ids &gt; [6, 5]. Tweet id 6 should precede tweet id 5 because it is posted after tweet id 5. twitter.unfollow(1, 2); // User 1 unfollows user 2. twitter.getNewsFeed(1); // User 1's news feed should return a list with 1 tweet id &gt; [5], since user 1 is no longer following user 2. &nbsp; Constraints: 1 &lt;= userId, followerId, followeeId &lt;= 500 0 &lt;= tweetId &lt;= 10 4 All the tweets have unique IDs. At most 3 10 4 calls will be made to postTweet , getNewsFeed , follow , and unfollow . Solution Let's analyze the time and space complexity for each method: 1. init : Time Complexity: \\(O(1)\\) Space Complexity: \\(O(1)\\) (Although we're initializing a dictionary and a list, they start empty, so the initialization is constant time and space.) 2. postTweet : Time Complexity: \\(O(1)\\) (Appending to a list is a constant time operation on average.) Space Complexity: \\(O(1)\\) (We're only adding one item to the list.) 3. getNewsFeed : Time Complexity: \\(O(N)\\) (Where \\(N\\) is the number of posts. In the worst case, we'd iterate through all the posts, but this is bounded by the condition that at most 10 tweets are added to the feed.) Space Complexity: \\(O(1)\\) (We're only using a fixed amount of extra space for variables count, feed, and post. The space required for the feed list is bounded by 10.) 4. follow : Time Complexity: \\(O(1)\\) (Adding to a set is a constant time operation on average.) Space Complexity: \\(O(1)\\) 5. unfollow : Time Complexity: \\(O(1)\\) (Checking membership in a set and removing an element from it are both constant time operations on average.) Space Complexity: \\(O(1)\\) Considering the overall data structures: userId2Followees: The space complexity grows with the number of users and the number of followee relationships. In the worst case (each user follows every other user), it becomes \\(O(U^2)\\) where \\(U\\) is the number of users. posts: The space complexity grows with the number of tweets, \\(O(T)\\) where \\(T\\) is the number of tweets. So, the overall space complexity considering all data structures and methods can be thought of as \\(O(U^2 + T)\\), but for the specific methods listed above, the space complexities mentioned apply.",
      "date_published": "2023-09-12T16:00:00.000Z",
      "date_modified": "2023-09-12T16:00:00.000Z",
      "tags": [
        "Software",
        "Algorithms",
        "Python"
      ]
    },
    {
      "id": "https://hakanalpay.com/blog/posts/religion/",
      "url": "https://hakanalpay.com/blog/posts/religion/",
      "title": "On Religion",
      "summary": "hi uh It's been a rather long while since I wrote on this blog. Since then a lot has happened. One of the things that I want to talk about was something that I have been thinking about since I watched some review for…",
      "content_text": "hi uh It's been a rather long while since I wrote on this blog. Since then a lot has happened. One of the things that I want to talk about was something that I have been thinking about since I watched some review for the Talos Principle and it the theory that meaning begets purpose and its influence on religion. What religion am I? Kind of a personal question but it bears mentioning because I think I'm in a rather unique position with relation to most of the people I know. I was raised Muslim, and I guess I still am, but I have come to some realizations since then and I'm not sure how to categorize myself anymore. Have you watched Ex Machina? No? Yes? If you have you might remember this one scene where Nathan asks Caleb about a Jackson Pollock painting. Jackson Pollock is the painter who would splash paint across the canvas in seemingly meaningless ways until he covered the canvas in paint, and felt that the painting was finished. Nathan explains this and that Pollock would let the paint go wherever it would like . He then posits what if Pollock would only paint a brush stroke if he had full intention for what it would produce. Caleb replys: \"Then he wouldn't have painted a single stroke.\" This is a great allegory for whether purpose and meaning are connected, dependent, or independent. Throughout history human beings have been creating world views laced with \"purpose\": purpose for the creation of the Earth, the creation of humans, the survival of humans, and so on. Early models of the universe, in Western philosophy, depicted the Earth as the center of the universe with everything revolving around it. We know now that this is not true: planets of our solar system revolve around the sun. In Abrahamic religions, there is a deity called \"God\" who creates humans with a purpose and rewards us for fulfilling it or punishes us for leaving it unfulfilled. Whether these religions are true or factual in their understanding of the fabric of the universe is beyond my knowledge. But because they are in part created by us, humans, they have a lot to say about ourselves. In fact they have a lot to say about how we feel that there needs to be a purpose for humankind, the vessel we exist on, and the like. Purpose Back to the Jackson Pollock painting thought experiment: If Pollock did not paint each brush stroke with intention, is the painting \"meaningless\". Or, even further, is it not even a \"painting\". How can we define a painting in such a way that random splatters of paint on a board which were created unintentionally is \"not a painting\" while delicate brush strokes with the purpose of depicting some thing is? Or do we even need to? Are Pollocks paintings required to depict some thing or exist with some purpose for it to be a painting? For it to be anything at all? Why can't the purpose of its existence be existing itself? In other words, should it not be allowed to be for being's sake . In this vein I present the following argument that I have yet to refute. This has been the closest semblence of a religion for me for some time. What I believe Now for the logical conclusion. Are human beings required to have a purpose for being in order to hold meaning? Does meaning beget raison d'etre? My conclusion thus far is that I really don't know but with large probability the answer is no. And not just for humans, but for all things. Developing games has kind of created a perspective on this that I cannot unsee. When I am creating a game, placing AI controlled characters in the world, positioning a character that represents the player , I'm essentially creating a world with \"people\" in it with behaviors that I define (AI bots) and behaviors that I don't (players). Is there a reason for any of them to exist? I'm not even sure if the word \"reason\" even applies. Is there a meaning for any of their existences? Probably not, although I also don't even know if it applies. Think about this perspective: I'm essentially God in this scenario putting a bunch of creatures I created in a little world literally for my own fun. Beneath the fun there's no reason for anything, everything just IS . I think the real world is not far off from this example, although what was created in the very beginning remains to be seen because I suppose something had to create the matter in the Big Bang (assuming that theory is the correct model). Things in the real world, like people, like you and me, just exist and that's really all we know for certain. We can ask questions about why we exist and what does our existence mean , but I feel like it's just like looking into the void and asking \"where's the light?\". There could be one in the far off distance , but according to all we know so far, there is a significant likelihood that there is no light and it isn't even a relevant question. Either way, all we can be certain of, is that we don't know . In the similar vein to \"All I know is that I know nothing\", all I believe is that I belive nothing until proven otherwise. Because I just don't know. [ Photo by Greg Rakozy on Unsplash ]",
      "date_published": "2019-12-21T20:37:50.000Z",
      "date_modified": "2019-12-21T20:37:50.000Z",
      "tags": [
        "Personal",
        "Society"
      ]
    },
    {
      "id": "https://hakanalpay.com/blog/posts/bahunya-10kb-classless-css-framework/",
      "url": "https://hakanalpay.com/blog/posts/bahunya-10kb-classless-css-framework/",
      "title": "Bahunya - 10KB classless CSS framework",
      "summary": "I created a 10KB classless CSS framework Bahunya has responsive typography, navbar, syntax highlighting, and much more. https://kimeiga.github.io/bahunya/ Why I created Bahunya because I wanted a CSS framework that I…",
      "content_text": "I created a 10KB classless CSS framework Bahunya has responsive typography, navbar, syntax highlighting, and much more. https://kimeiga.github.io/bahunya/ Why I created Bahunya because I wanted a CSS framework that I could use to scaffold an attractive web application really quickly, but didn't like the file size or complexity of Bootstrap or Foundation. I didn't want to memorize CSS classes to apply to my HTML elements when I would already be using semantically correct HTML. Instead, it should just work. Tacit I started researching ultralight CSS frameworks and happened onto Tacit. Tacit is a classless CSS framework with a lot of features I like, but I wanted to have a little more. I wanted responsive typography with modular scale and vertical rhythm. I wanted a navbar with a hamburger menu or regular text links. I wanted code syntax highlighting for CSS and JavaScript. And I wanted it to just work as a minified file that you can drop into your via rawgit, just like Tacit! Fast forward two weeks, I've made my own framework, and managed to only add 4kb to Tacit's 6kb, making Bahunya 10kb. Customization Bahunya is also customizable! I wrote lots of sample CSS in the Customization tab that you can layer on top of the framework to change fonts, colors, etc. If you want to change more, just fork the repo and use the SCSS files in your own project, where you can modify them to your heart's delight. Origin Story Bahunya's logo is a derivative of the Hong Kong flag! I really like the shapes of the flag of Hong Kong, and wanted to create a logo out of it. So I made a similar flower with 6 pedals rather than 5. The flower of Hong Kong's flag is the illusive Hong Kong Orchid Tree, aka Bauhinia blakeana. In Turkish, we call the Bauhinia, Bahunya. I added Century Schoolbook \"Bahunya\" under the logo I made, and everything fit! A framework's identity was born. If you would like to contribute to Bahunya, especially to refactor code, please feel free to fork the repo and submit a pull request. I'm going to be working on this framework for a while, but now that university is starting, I'll be more busy. Ideally I'd like for this project to take a life in the community! So that's the story of Bahunya. Cheers!",
      "date_published": "2018-09-15T17:22:50.000Z",
      "date_modified": "2018-09-15T17:22:50.000Z",
      "tags": [
        "Software",
        "CSS",
        "Open Source"
      ]
    },
    {
      "id": "https://hakanalpay.com/blog/posts/broken-mechanics/",
      "url": "https://hakanalpay.com/blog/posts/broken-mechanics/",
      "title": "Broken Mechanics in the Game of Life",
      "summary": "Life is a Game Life has a series of innate game mechanics (like physics and human biology), and game mechanics created by its players (like international laws). It is a system of said mechanics with a large playerbase,…",
      "content_text": "Life is a Game Life has a series of innate game mechanics (like physics and human biology), and game mechanics created by its players (like international laws). It is a system of said mechanics with a large playerbase, yet unlike many games, lacks a solid goal. However, most of its players can agree on a set of worthwhile goals, such as achieving a high standard of living and supporting one's family and friends. as such, it has a meta Ever competitive game has a meta . A meta is a set of playstyles that use the game's mechanics in the most viable way possible to achieve the goal as quickly or efficiently as possible. In most competitive games, players will stick to playing the meta very often. For example, when Counter Strike: Global Offensive first released the CZ 75, it was an extremely powerful sidearm, and so everyone used it until Valve nerfed it (made it weaker). Life, being a game, has a meta too! However, you will find that a low percentage of people play Life's meta, much lower than in any competitive game. This is because humans have a lot to lose in real life . We have families, reputations, and personal belongings. In a game, we have anonymity and few real world consequences for our actions, so we are free exploit mechanics as we wish. In real life, people are much more risk averse , and will try to avoid doing things if not many other people are doing them, even if they are extremely viable. Such is the herding of real life. The following is my list of Life's broken mechanics that relatively few people exploit, but are literally there for the taking. A broken mechanic is one that is so viable that there's almost no reason not to use it (it is thus part of the meta ). 1. STEM Majors I'd like to start by saying I salute humanities majors. If you are so passionate about a subject in the humanities that you are willing to dedicate your collegiate life to studying it, good on you ! I salute you, and wish you luck. Humanities majors are difficult and fulfilling, but they are not broken . STEM majors are, particularly Computer Science. The computer science curriculum in college involves learning the internals of computer systems, learning the fundamentals of a programming, and other aspects of CS academia . It is difficult . But computer science industry is often about programming within some framework. Web development is often about programming a web app within a JavaScript framework like React or Angular. Native app development is about programming an app with Kotlin/Java for Android, Swift/Objective C for iOS, C for Windows Phone, etc. Back end development is about managing data in a database with database languages like SQL, or running analytics against them with Python. These are all difficult , but they are each considerably easier than CS academia, and they pay wayyyy out of proportion to the workload . Computer science has one of the highest ratios of salary to amount of work in the world. It's ridiculous. It's also because a lot of people see code, and don't want to do it. They would rather pay money to someone who can do it. You've probably heard about the hype of Silicon Valley. Venture Capitalists paying millions of dollars to people so they can make an app . An app . It's mind boggling. VC's will pay this much money because in their perspective, it's far worse to pay too little and have the project fail (and lose all that money), then to over invest and have the app be successful, and finally make all that money back. Computer science is also needed all around the world. Tech companies often have offices internationally, so you can often relocate, travel, work on vacation, etc. Tech companies also provide excellent working spaces with plenty of amenities. Honestly, there are so many crazy benefits of majoring in Computer Science, that it's difficult to enumerate. Computer Science, and really most of the STEM majors, are broken. 2. Extroversion People will often present \"Introverts v. Extroverts\" as if there's a relative equal number of each. There are not. The vast majority of people are introverts. Despite extroversion being completely BROKEN. Extroversion will help you with your presentation skills. If you learn to come up to people and make friends with them, that will largely eliminate your stage fright, because you're getting used to little versions of it every day. Extroversion will also force you to talk more to fill the void of conversations, and this will help you articulate your ideas faster and more coherently; super useful when presenting. Extroversion will help you find a group of friends you enjoy. If you're an introvert and end up hanging out with people in your proximity, and eventually befriend them, you're at the mercy of whoever is in your proximity haha. Because you didn't go out of your way to meet lots of new people and find who among those you really like, you're kinda stuck with who you've got. And even if you don't like them, you'll be too scared to venture outside of your friend group to find better friends because you're afraid of losing the friends you have. Bummer right? If you're extroverted, you don't need to hang out with half rate people. You have the courage to meet a lot of people. The more people you meet, the more likely you'll find high quality people who you enjoy hanging out with or collaborating with. A lot of those people will be introverts, and that's ok. Having good connections with high quality people you trust is also invaluable for job searching . If you are good friends with a high quality person who gets a respectable job at a good company, and a position opens up that you are qualified for, they may suggest you to their boss. Extroversion will help you find love . I'm serious. People, especially young people, like teenagers and college students, don't like to make the first move. Across the board. Gone are the days of America where guys \"like the chase\". These days, guys like convenience, and will often date a girl who shows she's into him if she's good enough. It's true. If you are extroverted, approaching a person you are attracted to will be infinitely easier. They are not gonna date you if you never talk to them! You have to get out there, talk to that hot girl who you admire, and see if you have compatible personalities. If you do, then you'll have to befriend her, spend time with her, and listen to her. These are all things that will become easier with extroversion. If she reciprocates, and you genuinely have fun being around each other, when you ask her out (also takes extroversion), she's much more likely to agree to become your girlfriend. You can't always expect the other person to make the first move, and if they don't, think that it was never meant to be. It might have worked if she knew who you were! Extroversion will help your popularity. This one is more helpful if you are like me and enjoy popularity. Here's an example: You get into a new school. You are tired of your high school and eager to make new college friends, so you don't wait until the school starts. You get on Facebook, join groups for your school, find people you think you'll like, friend them and talk to them. Maybe you make your own group for a certain aspect of your new school and invite people. Maybe you make a tool for people who are going to your new school to aid the transition. You weren't lonely last summer because you had people to talk to, and now when you arrive at your new school, you already know a fair amount of friends, and a lot of people know you. Makes finding even more friends, opportunities, textbooks , etc. much easier when you have a sort of mini celebrity status. Sound familiar? Yeah I did all these things before UCLA. The key is to not network for the sake of networking . Don't even think about it like networking . Think about it like finding people you genuinely enjoy being around, and helping them with stuff so that they help you in return. Trust me, you can have a lot of genuine friends if you want. It just takes the courage to listen to what they have to say, and help them with things in their life. And charisma, but that comes with extroversion. 3. Being Nice to your Superiors This is a biggie broken mechanic. When you're in school, make friends with your teachers and professors if you can. There are a lot of benefits. They will be nicer to you in a small class. They will answer your questions in office hours and tell you hints about the test that they won't tell the class. They are mature and will be a breath of fresh air to talk to compared to occasionally immature kids that surround you. They will present opportunities to you, especially if they are in the same major as you or are doing research! They will make coming to class every day much more fun if they enjoy your company and you do in return . Teachers dote on students that they like because very few students try to befriend them or present them with lots of respect. So few that this becomes a broken mechanic. Same with bosses in your job. Bosses know when an employee is trying to brownnose. Your job is not to brownnose, but to befriend. Treat your bosses respectfully, be prompt, and actively think out loud with them about how to solve a problem the company is facing. Bosses love when their employees are thinking about the bigger picture and trying to work with them on overarching strategies. That shows to them that you are ambitious about your job, and aren't just a work monkey. Knowing your bosses by their first name will make climbing the social ladder much easier, in addition to making literally every work day of your career much easier. 4. Side Projects People often ask me how I know how to do something. Their first assumption was that I was taught it by someone. The answer for 99% of my knowledge is that one day I randomly felt like making some random thing and then happened to learn a lot while making it. People largely don't do side projects . There's this idea that you're already working enough for work/school, why do more? It's time to relax. I'm here to tell you that working hard is how you live . Hard work begets human vitality. I'll say that again for the people in the back. Hard work begets human vitality. You're only going to major in one to three things in college (unless you're a masochist). Other aspects of life will be taught to you in General Education courses. Your high school experience was practically all General Education. The truth is that you're not going to be taught classes on all of the practical things in life. Your general education classes are often humanities, which are important to being a well rounded citizen, but won't teach you how to use a chop saw. The only way you're going to learn these things is by doing side projects. Want to learn how to make a music video. Don't take a course. Get a camera, some friends, write a script, and record and edit a music video . Want to learn how to repair a leaky pipe? Don't go to a trade school for plumbing. Watch some YouTube videos, read some articles, and go repair a leaky pipe . Want to learn work working? Come up with something you want to make with wood and make it . You're not going to learn everything in school (unfortunately). To fill in the gaps of your knowledge, you're going to have to learn by doing . Also if you're in Computer Science, you'll often be hired based on the quality of your side projects! So make those web apps because you're not going to learn how to make them in school (unless you take that elective). Also, again, few people do side projects. So if you do them, you'll stand out, people will find you interesting . Another great way to find good friends, girlfriends, means to ends, etc. That's all for now! Think about life as a game with mechanics. Then think about successful people. What are they doing/do they have that you can use in your own life? A lot of them are white men. Well you can't really change your skin color, and unless you want to become a man really badly, I wouldn't encourage doing it to become successful. What else do they have/do they do? They have charisma and extroversion. This helps them find people they trust and network. If they're in America, they have a loud voice. Americans love to elect people with loud, projecting voices, regardless of political experience. They worked their way up the social ladder. It may not always seem like it, but most of them had to be hardworking and nice to their bosses to do so. A lot of them who weren't born on wealth are STEM majors. They worked in a field with a lot of money and demand, and were compensated quite a bit. STEM majors aren't always famous and in the limelight, but they are often financially successful. It's just the Zeitgeist. They had side hustles. A lot of successful Americans had a business as a side hustle. America is a great environment for startups, and this makes side businesses viable. If it's not a business, maybe they freelanced, worked as a consultant, or built useful things on the side. Think about other things people you perceive as successful are doing that you are not. Think about the amount of effort they're putting in, and the amount of value they are getting out. If the value they are getting out is fantastically out of proportion to the work they are putting in, you have yourself a broken mechanic of the game of life. It's your job to find these and exploit them if you want to get ahead. I understand not everyone is super ambitious and wants to make six figures, but please consider the following. You personally may not believe you need much in life to be happy, but remember your parents. Your parents paid a large proportion of their life and wealth to birth you, support you, educate you, feed you, clothe you, and help you become successful. If your parents are putting you through college, they are paying a lot of money on top of that. Eventually your parents are going to retire from their jobs and collect retirement payments, but those aren't enough to live comfortably . You may not care much for money yourself, but you need to earn enough to support yourself, and your parents . Your parents basically made a massive investment by giving birth to you, and subsequently paying for your college education. It's now your responsibility to make good on their investment by returning value to them in the form of supporting them when they become too old to work. How is this related to broken mechanics and the meta of life? Playing the meta of life will greatly help you become successful and earn a large amount of money in a stable, respectable job. With that money, you can live comfortably yourself (with your life partner if you so choose), but more importantly, you can support your family so when they retire, they too can live comfortably. That's why even if you're not an ambitious person, you should still play the meta. If you won't do it for yourself, do it for your parents. That concludes my guidance! If you find any more broken mechanics of life, text me about them and I might make a Part 2! ;) About the Picture This was taken along the crazily busy route to Port Authority in New York. It's a wonder I wasn't hit by a truck on the way there. But it was fun nonetheless. :)",
      "date_published": "2018-09-11T17:22:50.000Z",
      "date_modified": "2018-09-11T17:22:50.000Z",
      "tags": [
        "Games",
        "Design"
      ]
    },
    {
      "id": "https://hakanalpay.com/blog/posts/perfectionism/",
      "url": "https://hakanalpay.com/blog/posts/perfectionism/",
      "title": "Rapid-Prototyping and Perfectionism",
      "summary": "Either finish something as quickly as possible, or as completely as possible. The closer you approach the center of these two extremes, the larger the percentage of your lifespan you’ll spend working on the project.…",
      "content_text": "Either finish something as quickly as possible, or as completely as possible. The closer you approach the center of these two extremes, the larger the percentage of your lifespan you’ll spend working on the project. Either employ rapid prototyping or perfectionism. That way you either finish something quickly, or rarely have to backtrack. With rapid prototyping, you know you have to go back and fix it later, so you prioritize getting something substantial as fast as possible. Fixing it will take time, but at least you’ve created the first version in entirety. With perfectionism, finishing something will take a long time, but you’ll have nearly perfected it. This way, you will rarely have to backtrack and correct your work or fix something. If you are somewhere in between with your workflow, you’ll spend a lot of time trying to balance getting it right and getting it on paper. As you create more things, you’ll feel the need to continuously tweak them until they’re correct, and you’ll take a lot longer to finish the whole product (if you even get there). This is because you don’t have a solid priority; you’re kind of “feeling it out”, and this will sap your motivation as you sink more hours into a project without it being either complete or perfect , just somewhere in between. I’ve been in this limbo with basically all my projects ever and it’s the biggest sap on my productivity since acne . I’m going to try to make a conscious decision to choose a workflow priority for my future projects, and we’ll see where things go. Thanks for reading! :) What do you think? Have I categorized this issue correctly? Do you have relevant anecdotes? Do you like lahmajun? I like lahmajun. About this picture On top of the Empire State Building like hey what's going on my yorkian friends.",
      "date_published": "2018-09-04T03:08:50.000Z",
      "date_modified": "2018-09-04T03:08:50.000Z",
      "tags": [
        "Personal",
        "Making"
      ]
    },
    {
      "id": "https://hakanalpay.com/blog/posts/time-to-learn-vim/",
      "url": "https://hakanalpay.com/blog/posts/time-to-learn-vim/",
      "title": "Time to Learn Vim",
      "summary": "I know this has been said a thousand times but if you happen to be in a situation where you only have a low end laptop and you want to make a Vue app or code anything really, do give Vim a try. I downloaded Visual…",
      "content_text": "I know this has been said a thousand times but if you happen to be in a situation where you only have a low end laptop and you want to make a Vue app or code anything really, do give Vim a try. I downloaded Visual Studio Code on this $180 Dell Inspiron (that was lying around at my grandmother's house) and even after removing all the bloatware, it still only chugged along with both Chrome and VScode running. I'm a GUI editor guy, and the only terminal text editor I really like (at the time) is Micro. But Git Bash couldn't pick up Micro even though it was in the path, and the only text editors it has are Vim and Nano (I think). I knew in order to code on this computer without it becoming totally unresponsive, I would have to use stock Vim as an IDE. Gulp. One hour later, it's actually not that bad! I am using Netrw (Vim's tree view) as a tree view sidebar to display all the files of the project. It is set up to look like NERDtree. And I learned most of the text editing commands I care about. There's quite a few, and they can get complicated but I realize that it's better for them to be there when I (or anyone) needs to use them, rather than not at all. And if you're not going to use them, that's ok too!. I'm actually making some progress now on this Vue tutorial with only Vim as an IDE. I'm using virtually no memory compared to an Electron app like VScode. And I decided to use Edge instead of Chrome to save even more memory. Now this computer is comparitively quite spritely! :) So if you were scared of Vim like me, remember that you don't have to know the commands that you won't end up using anyways. And if you get to know Vim really well, then you can make any computer a productive coding environment because so many machines have it installed. Whenever you SSH into a Linux machine at your school to do homework, you can always use Vim to edit the code on their end. If you end up with some else's computer and you don't like their coding editors or if they are too slow, you can hop into bash and open the project with Vim (provided that their Vim config is not too weird). If you still prefer something Notepad++ level intuitive, try Micro, but if you're only on Git Bash/MinTTY on your grandma's laptop which can't open Micro or too many other binary programs for some reason (I still haven't figured out), you're better off using Vim (I had also considered downloading WSL but it would take too much space for not enough benefit). And no I am not gonna use Emacs. If there's one thing CS35L taught me, it's that I don't have any idea what's going on in that application. And it uses more memory than Vim (Reader Comment: But it has games! My Reply: Granted, it does have games). About this picture Here's another view of UCLA at night from Rieber Hall 7th floor.",
      "date_published": "2018-08-23T15:37:32.000Z",
      "date_modified": "2018-08-23T15:37:32.000Z",
      "tags": [
        "Software",
        "Tools"
      ]
    },
    {
      "id": "https://hakanalpay.com/blog/posts/frankly-i-think-too-much/",
      "url": "https://hakanalpay.com/blog/posts/frankly-i-think-too-much/",
      "title": "Frankly, I think too much",
      "summary": "Thinking a bunch can be useful when you need to come up with ideas or be creative in a short time frame. Or when you need to produce a lot of content that can be fueled by thought in a short time frame, like this post,…",
      "content_text": "Thinking a bunch can be useful when you need to come up with ideas or be creative in a short time frame. Or when you need to produce a lot of content that can be fueled by thought in a short time frame, like this post, or a podcast. It's also often a curse. I have had a lot of trouble sleeping lately. Part of the reason is definitely that it's too hot in my house, something that I'm working on. But I also wonder if it is other things. Perhaps it's my sleeping positions: I tend to become uncomfortable in whatever position I'm in very quickly, and have to readjust, disturbing my ability to fall asleep. Or perhaps it's too noisy. Not really audibly noisy, but mentally so. I am always thinking about some experience I had in the day, some cool project I want to work on, or some future possibilty. I often consciously lucid dream up an interview between me and a TV host that I'll do when I get famous for some amazing thing I built. Or if there's some world issue I'm worried about, I'll lucid dream myself finding a crazily unlikely solution, and of course, becoming famous for it. It's fun to have a world inside your head but I always wonder if people who don't think as much are more at peace. I have been trying meditation for a bit. I tried guided meditation through Headspace, until I finished their trial. After Headspace, I realized that I much prefer self guided meditation, although I'm rarely as effective as the teacher. I'll focus on counting to 8 10 with each inhale, hold, exhale, and hold. It's a great way to relax one's body and gain some quick mindfulness, but I tend to slip back into busily thinking after I finish meditating. Perhaps I'm not doing it for long enough. What do you think? Do you think a lot? Do you struggle with this, or is it ok? Does it make you feel unique, or do you think everyone is like this? About the picture This was outside my captain Robin's house. Our Science Olympiad team went to her house for Oly Outing , where we all relax and bond before the seniors leave for college. It was a lot of fun, and her parents fed us really well, which I still appreciate.",
      "date_published": "2018-08-08T12:38:50.000Z",
      "date_modified": "2018-08-08T12:38:50.000Z",
      "tags": [
        "Personal",
        "Mind"
      ]
    },
    {
      "id": "https://hakanalpay.com/blog/posts/why-i-love-youre-welcome/",
      "url": "https://hakanalpay.com/blog/posts/why-i-love-youre-welcome/",
      "title": "Why I Love \\\"You're Welcome\\\"",
      "summary": "I'm usually pretty critical of English. I despise the lack of regularity, the constant exceptions, the strange spelling, the complicated tenses, the way loan words are incorporated without modifying their spelling, etc.…",
      "content_text": "I'm usually pretty critical of English. I despise the lack of regularity, the constant exceptions, the strange spelling, the complicated tenses, the way loan words are incorporated without modifying their spelling, etc. There is one sentence in English that I admire: \"You're Welcome.\" In many languages the response to \"Thank you\" is some variation of \"It was nothing\". Japanese: 問題ない (mondainai): It's not a problem Turkish: Bir şey değil (bir shei deyil): It's not a thing Spanish: De nada: It's nothing Chinese: 别客气 (biékèqi): No formalities please But sometimes you did something fairly difficult for someone, and they thank you. You don't want to undermine the difficulty or magnitude of what you just accomplished. But most languages have \"no problem\"/\"don't mention it\" as the standard \"you're welcome\". So you say it, but inside you feel like it really was a problem, or you wouldn't mind that they mention it again. How is \"You're Welcome\" different? I think \"you're welcome\" is different because instead of undermining the magnitude of what you just did, you're letting the other person know that they are welcome to receive your help. This just feels a lot better to me. You're forced to deny that you did something worth mentioning, and you make the other person feel good by telling them that they are worth your time. Of course you can say whatever you like. But I like that English gives me the choice here. Thanks English. Now let's please fix your spelling. About the picture I managed to catch a glympse of this girl walking through the trees in front of Rieber.",
      "date_published": "2018-08-01T23:49:51.000Z",
      "date_modified": "2018-08-01T23:49:51.000Z",
      "tags": [
        "Music",
        "Personal"
      ]
    },
    {
      "id": "https://hakanalpay.com/blog/posts/work-with-your-hands/",
      "url": "https://hakanalpay.com/blog/posts/work-with-your-hands/",
      "title": "The Beauty of Working with One's Hands",
      "summary": "I'm a computer science student I work on the computer every day, designing this Jekyll site or my portfolio, making an online fighting game or a multiplayer shooter, doing a hackathon project, etc. When I am not working…",
      "content_text": "I'm a computer science student I work on the computer every day, designing this Jekyll site or my portfolio, making an online fighting game or a multiplayer shooter, doing a hackathon project, etc. When I am not working on my personal projects, I'm doing school projects, which often involve coding something in a C++ or C project. It's mostly pretty fun! It's definitely a privilege not many people get to enjoy. But sometimes it gets tiring. I don't like using the computer just for the sake of using a computer, or one step further, I don't like doing everything digitally for the sake of doing things digitally. Rather, I enjoy the benefits that it brings. You can't version control your real life projects by virtue of you not being able to rewind time in quantized increments, or create your own 5th dimensional branches of time that you can easily switch between. I know that sounds crazy but that's really the real life equivalent of the magic of a version control system like Mercurial or Git. You also often don't have as fast a feedback loop with real world projects as with digital projects. When making a video game, when you want to test your code changes, you can just save and play the game (If you're using a compiled language, you will have to compile first (like \"C++\" for Unreal)). But if you were to make a real sport, the only way to test the efficacy of your rules would be to simulate what would happen in your head, or have an entire team of players play the game with the rule set. I also being able to create almost anything I want digitally. I can create amazing worlds in Unity or another game engine, with buildings from AutoCAD, and characters animated in Maya, and create a game from it, or record a video within it, or do almost anything I want, all without paying any money (usually). Your only temporal limit is how fast you can figure things out. If you were to create your own city in real life, you would have to find enough empty space, somehow get permission, spend millions of dollars designing, building, and painting buildings and infrastructure, populating that city, etc. That's probably not even how it works. But if I had the benefits of the digital world in the real world, would I use them? Absolutely! If I could somehow move my hands in the air and create something in mid air with tools similar to those on the computer, except the end result would exist in the real world, I definitely would. I've always valued creating things with your hands in the real world higher than creating things equally interesting while looking at a screen. When you're an imaginative individual without millions of dollars, the only place you can build your wild dreams is on the computer I still greatly enjoy what I do, but the physicality of creating something with one's hand and feeling it and its weight is more engaging to me than creating something of equal value by typing, moving my mouse, and staring at a computer. I know that sounds incredibly vague, but I think about this issue very fundamentally. How do you feel about working on your dreams in the physical world versus the digital world? About this picture I went to Google games with Ankith and Rohit and we went to the beach after totally creaming all 100 teams with our mad hacker skills. The beach was really nice and a dolphin got really close to land to the alarm of the woman next to us. Our Uber driver reminded us that weird things happen in Venice.",
      "date_published": "2018-08-01T23:29:51.000Z",
      "date_modified": "2018-08-01T23:29:51.000Z",
      "tags": [
        "Work",
        "Making"
      ]
    },
    {
      "id": "https://hakanalpay.com/blog/posts/my-huge-thank-yous/",
      "url": "https://hakanalpay.com/blog/posts/my-huge-thank-yous/",
      "title": "My Huge Thank Yous",
      "summary": "This page exists just to say thank you to all the people whose work I've used and people who have supported me in life. 🙇‍ Thanks to Alexey Kryukov for designing Old Standard TT, the charming serif font that I use for…",
      "content_text": "This page exists just to say thank you to all the people whose work I've used and people who have supported me in life. 🙇‍ Thanks to Alexey Kryukov for designing Old Standard TT, the charming serif font that I use for this blog's headings. Natanael Gama for designing Exo 2, the extremely legible sans serif font that I use for this blog's body. Wei Huang for designing Work Sans, the charming Grotesque font that is the Kimeiga brand's title font Rasmus Andersson for designing Inter UI, the clean, legible screen font that is the Kimeiga brand's body font Mathieu Mayer Mazzoli for developing the highly unique Hikari Jekyll theme that I expanded upon to create this site. and my parents, friends, and family for their infinite support. Sizi seviyorum 💛 About the picture If you leave your shutter open long enough at the 7 North stair room in Rieber Hall, you can really capture a lot of buildings.",
      "date_published": "2018-08-01T00:00:00.000Z",
      "date_modified": "2018-08-01T00:00:00.000Z",
      "tags": [
        "Personal",
        "Gratitude"
      ]
    }
  ]
}