56,966 blogs Β· [ { "id": "01a087d9-b45c-72c9-a7ac-900acc59d85b", "title": "StretchText", "url": "https://ryankubik.com/blog/stretch-text", "published_at": "2025-09-13T08:00:00+00:00" }, { "id": "01a087d9-b45c-72c9-a7ac-900accb1781b", "title": "Code by Charles Petzold", "url": "https://ryankubik.com/blog/code-book", "published_at": "2025-07-13T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a27ef5c86", "title": "\"Offset\" constants are confusing", "url": "https://ryankubik.com/blog/offset-constants-are-confusing", "published_at": "2025-07-05T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a286ffac1", "title": "Cognitive overload in Drop Duchy and trade offs in design decisions", "url": "https://ryankubik.com/blog/cognitive-overload-drop-duchy", "published_at": "2025-05-24T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a2934875e", "title": "What I Read in 2024", "url": "https://ryankubik.com/blog/2024-what-i-read", "published_at": "2025-05-13T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a29d42245", "title": "What I Played in 2024", "url": "https://ryankubik.com/blog/2024-what-i-played", "published_at": "2025-01-15T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a2aab2848", "title": "UFO 50", "url": "https://ryankubik.com/blog/ufo-50", "published_at": "2024-10-14T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a2b7542c0", "title": "My Portland Recommendations", "url": "https://ryankubik.com/blog/pdx-recs", "published_at": "2024-09-07T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a2b8771a2", "title": "What I Played in 2023", "url": "https://ryankubik.com/blog/2023-what-i-played", "published_at": "2024-03-10T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a2bbdd92b", "title": "What I Read in 2023", "url": "https://ryankubik.com/blog/2023-what-i-read", "published_at": "2024-03-10T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a2c80ea55", "title": "Hide YouTube Shorts Userscript", "url": "https://ryankubik.com/blog/hide-youtube-shorts", "published_at": "2023-09-03T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a2ce3a09f", "title": "2023 Mid Year Fav Games Check-in", "url": "https://ryankubik.com/blog/2023-h1-games", "published_at": "2023-07-06T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a2d1589f7", "title": "Reduce Entries: Array Utility Function", "url": "https://ryankubik.com/blog/reduce-entries", "published_at": "2023-06-05T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a2de34f98", "title": "Hide Elements Over Games on Itch.io with Tampermonkey", "url": "https://ryankubik.com/blog/itch-tamper-monkey", "published_at": "2023-05-18T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a2df6cee5", "title": "Add a Spoiler Tag with Alpine.js", "url": "https://ryankubik.com/blog/apline-js-spoiler", "published_at": "2023-05-04T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a2ebfa6ff", "title": "What I Read in 2022", "url": "https://ryankubik.com/blog/2022-what-i-read", "published_at": "2023-01-22T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a2f4ac2cd", "title": "What I played in 2021", "url": "https://ryankubik.com/blog/what-i-played-2021", "published_at": "2022-01-23T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a3031f53e", "title": "10 Games That Influenced My Tastes", "url": "https://ryankubik.com/blog/most-influential-games", "published_at": "2021-12-25T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a308b14dd", "title": "Remove Duplicates: Array Utility Function", "url": "https://ryankubik.com/blog/remove-duplicates", "published_at": "2021-11-02T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a3099f865", "title": "JS13k 2021: Rocket Jockey Postmortem", "url": "https://ryankubik.com/blog/js13k-2021-rocket-jockey", "published_at": "2021-09-21T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a30aca73d", "title": "useKeyPress: Respond to user key presses in React", "url": "https://ryankubik.com/blog/use-key-press", "published_at": "2021-09-04T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a30e9efcd", "title": "Force date to a given time zone", "url": "https://ryankubik.com/blog/force-date-time-zone", "published_at": "2021-08-14T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a31827121", "title": "Slipways Ranked Run: Week #6", "url": "https://ryankubik.com/blog/slipways-week-6", "published_at": "2021-07-09T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a31db6733", "title": "What branch was I working on last?", "url": "https://ryankubik.com/blog/git-branch-most-recent", "published_at": "2021-07-06T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a322867b8", "title": "What I played in 2020", "url": "https://ryankubik.com/blog/what-i-played-2020", "published_at": "2021-01-07T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a32e6db66", "title": "Bose QC35 II: Fix Static Issue, Reinstall Firmware, and a Short Review", "url": "https://ryankubik.com/blog/bose-qc35ii-issue-and-review", "published_at": "2020-09-17T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a3381c1fa", "title": "Don't Mix React Synthetic Events with Native DOM Events", "url": "https://ryankubik.com/blog/dont-mix-react-synthetic-and-native-events", "published_at": "2020-06-06T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a33eaeb06", "title": "Using Design Pillars to Keep Wildfire Swap's Development on Track", "url": "https://ryankubik.com/blog/wildfire-swap-design-pillars", "published_at": "2020-05-27T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a34d06a42", "title": "Clean up your Twitter Experience with TamperMonkey", "url": "https://ryankubik.com/blog/remove-twitter-distractions", "published_at": "2020-04-29T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a34e802e7", "title": "Wildfire Swap March 2020 Newsletter", "url": "https://ryankubik.com/blog/march-2020-newsletter", "published_at": "2020-04-02T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a3535d349", "title": "Scale and Center Pixel Art on the Command Line", "url": "https://ryankubik.com/blog/scale-center-pixel-art", "published_at": "2020-03-27T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a361dcaf1", "title": "Wildfire Swap February 2020 Newsletter", "url": "https://ryankubik.com/blog/february-2020-newsletter", "published_at": "2020-03-03T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a36cfc508", "title": "Wildfire Swap January 2020 Newsletter", "url": "https://ryankubik.com/blog/january-2020-newsletter", "published_at": "2020-02-05T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a37ac10a8", "title": "A review of 2019 and a plan for 2020", "url": "https://ryankubik.com/blog/personal-retrospective-2019", "published_at": "2020-01-30T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a384f6bf4", "title": "Wildfire Swap: A puzzle game inspired by fires in the Pacific Northwest", "url": "https://ryankubik.com/blog/wildfire-swap-inspiration", "published_at": "2019-11-27T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a38730f40", "title": "Testing for a Race Condition in Async/Await Code", "url": "https://ryankubik.com/blog/race-condition-async-test", "published_at": "2019-10-31T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a391bffcb", "title": "Showcase Season Retrospective: Wildfire Swap at SIX & XOXO 2019", "url": "https://ryankubik.com/blog/showcases-season-retrospective", "published_at": "2019-09-30T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a39b4972e", "title": "🎣 useRefState Hook - Access state outside of a component", "url": "https://ryankubik.com/blog/use-ref-state", "published_at": "2019-09-03T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a3a9ac74e", "title": "All the Indie Puzzle Games at PAX West 2019", "url": "https://ryankubik.com/blog/indie-puzzles-pax-west-2019", "published_at": "2019-08-29T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a3af930b7", "title": "Accessibility for Games - A Jumping Off Point", "url": "https://ryankubik.com/blog/accessibility-resources", "published_at": "2019-07-04T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a3bd1d6ce", "title": "Using the Regex Global Flag with Test", "url": "https://ryankubik.com/blog/regex-test-global-flag", "published_at": "2019-06-26T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a3cc20eca", "title": "When was this file added to version control?", "url": "https://ryankubik.com/blog/when-file-added-git", "published_at": "2019-05-11T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a3d6025e9", "title": "Host a simple local web server using http-server", "url": "https://ryankubik.com/blog/local-simple-web-server", "published_at": "2019-04-04T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a3debf0fa", "title": "Create a Custom ESLint Rule: Automatically Share Your Team's Institutional Knowledge", "url": "https://ryankubik.com/blog/eslint-internal-state", "published_at": "2019-03-08T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a3dfdfd1c", "title": "How to Resize Pixel Art on the Command Line", "url": "https://ryankubik.com/blog/resize-pixel-art-command-line", "published_at": "2019-02-18T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a3eb63d3a", "title": "Deliberate Game Jamming: A Global Game Jam 2019 Retrospective", "url": "https://ryankubik.com/blog/deliberate-game-jamming", "published_at": "2019-02-04T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a3fa80548", "title": "A Personal Retrospective for 2018 and a Goal for 2019", "url": "https://ryankubik.com/blog/personal-retrospective-2018", "published_at": "2019-01-09T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a3feb5ccb", "title": "Using Jest with Parcel Bundler", "url": "https://ryankubik.com/blog/parcel-and-jest", "published_at": "2018-12-31T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a40d0e107", "title": "Cascadia.js Day Two Notes", "url": "https://ryankubik.com/blog/cascadia-day-two", "published_at": "2018-12-24T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a4144622a", "title": "Cascadia.js Day One Notes", "url": "https://ryankubik.com/blog/cascadia-day-one", "published_at": "2018-12-20T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a4240365a", "title": "Modifying the Return Value of a Constructor", "url": "https://ryankubik.com/blog/return-constructor-singleton", "published_at": "2018-11-30T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a428e7305", "title": "Remove Local Branches Merged into Remote", "url": "https://ryankubik.com/blog/git-prune-local-branches", "published_at": "2018-11-05T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a42e42b8c", "title": "GPU Floating Point Sampling Error (Pixel Bleeding) & Tileset Extrusion", "url": "https://ryankubik.com/blog/pixel-bleeding-tileset-extrusion", "published_at": "2018-10-07T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a42f45d42", "title": "Generate Array of Increasing Indices", "url": "https://ryankubik.com/blog/genereate-increasing-array-javascript", "published_at": "2018-10-02T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a437175b2", "title": "Parse JSON with JQ", "url": "https://ryankubik.com/blog/parse-json-with-jq", "published_at": "2018-09-26T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a4443461c", "title": "Conditional Breakpoints in Chrome Dev Tools", "url": "https://ryankubik.com/blog/chrome-conditional-breakpoints", "published_at": "2018-08-28T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a44e459ea", "title": "Choose a Random Number Between Two Values", "url": "https://ryankubik.com/blog/rand-int-between", "published_at": "2018-08-15T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a4557523b", "title": "You don’t need standup", "url": "https://ryankubik.com/blog/you-dont-need-standup", "published_at": "2018-08-15T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a461dd8a7", "title": "Pick Randomly From Array", "url": "https://ryankubik.com/blog/pick-randomly-from-array", "published_at": "2018-08-04T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a46460ef2", "title": "Npm List Installed Packages", "url": "https://ryankubik.com/blog/npm-list-depth", "published_at": "2018-07-18T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a46651c2f", "title": "Shadowhand postmortem – Top ten takeaways", "url": "https://ryankubik.com/blog/shadowhand-postmortem-takeaways", "published_at": "2018-07-16T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a466ada8b", "title": "The Atan2 Function", "url": "https://ryankubik.com/blog/atan2", "published_at": "2018-06-16T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a4689e314", "title": "Encode and Decode URIs", "url": "https://ryankubik.com/blog/encode-decode-uri", "published_at": "2018-05-20T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a46a736e6", "title": "JavaScript's Array Sort Function", "url": "https://ryankubik.com/blog/javascript-array-sort", "published_at": "2018-04-19T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a47672719", "title": "Basic JavaScript Finite State Machine", "url": "https://ryankubik.com/blog/finite-state-machine", "published_at": "2018-04-13T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a4812bafb", "title": "Where the Water Tastes Like Wine", "url": "https://ryankubik.com/blog/water-like-wine-postmortem", "published_at": "2018-04-04T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a48f86f2f", "title": "How to Make Consistently Profitable Indie Games", "url": "https://ryankubik.com/blog/consistently-profitable-indie-games", "published_at": "2018-04-03T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a49aa30a2", "title": "You are spending too long making your game", "url": "https://ryankubik.com/blog/too-long-making-your-game", "published_at": "2018-04-03T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a49aea96e", "title": "Json File Manipulation with Node", "url": "https://ryankubik.com/blog/node-json-manipulation", "published_at": "2018-03-11T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a4a972aa2", "title": "Box-Sizing Property in CSS", "url": "https://ryankubik.com/blog/box-sizing-css", "published_at": "2018-03-01T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a4a978ba8", "title": "JavaScript Void Keyword", "url": "https://ryankubik.com/blog/javascript-void-keyword", "published_at": "2018-02-14T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a4b45b8d1", "title": "Git Pull vs Fetch", "url": "https://ryankubik.com/blog/fetch-vs-pull", "published_at": "2018-02-08T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a4b889cee", "title": "Use NPM's .bin directory instead of globally installing dependencies", "url": "https://ryankubik.com/blog/npm-bin", "published_at": "2018-02-05T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a4c168ff1", "title": "JavaScript Bitwise Operators", "url": "https://ryankubik.com/blog/tilde-operator", "published_at": "2018-02-05T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a4c810922", "title": "Mocking a property using getters and setters", "url": "https://ryankubik.com/blog/mock-prop-on-object", "published_at": "2018-01-19T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a4cf850f7", "title": "~ vs. $HOME in bash", "url": "https://ryankubik.com/blog/tilde-vs-home", "published_at": "2018-01-19T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a4dbcc7da", "title": "Slice with a Negative Index", "url": "https://ryankubik.com/blog/negative-index-slice", "published_at": "2018-01-16T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a4dc0a47e", "title": "Ludum Dare 40 Postmortem: Infinite Desktop Icons", "url": "https://ryankubik.com/blog/ldjam-40-postmortem", "published_at": "2017-12-04T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a4ec024d1", "title": "Core Mechanics & Game Design in Unstable", "url": "https://ryankubik.com/blog/core-mechanics-unstable", "published_at": "2017-07-16T08:00:00+00:00" }, { "id": "01a087d9-b45d-72c1-9832-5e8a4efc25db", "title": "Ludum Dare 38 Postmortem: A Social Network", "url": "https://ryankubik.com/blog/ldjam-38-postmortem", "published_at": "2017-04-29T08:00:00+00:00" } ] posts Claim your blog
Back to ryankubik.com
Blog Β· corpus.blog/blogs/ryankubik.com/posts

ryankubik.com

ryankubik.com

2025

2024

2023

2022

2021

2020

2019

2018

2017