3,882 karma · joined March 12, 2011
website: thomasboyt.com
- Originally, the game was rendered with SVG elements, so it was very important to use the shouldComponentUpdate hook to ensure elements weren't rendering unnecessarily (and using CSS transformations to position them where possible, as that's way faster than updating SVG coordinates!)
- I had something similar to the function.bind problem since some of my components had a map of hotkey handlers that I was (naively) returning from a `getHotKeyHandlers` function, meaning the handlers were redefined every render.
- I wasn't caching/memoizing calculations done to the Redux state as well as I should have (Reselect is very useful for this!)
I ended up deciding SVG wasn't fast enough for my use case and rewriting the core game loop rendering to use Canvas, which was so much faster that I could be a lot lazier about optimizing things. Everything around the canvas is still rendered through React components (i.e. in game UI and menu screens), and the state is still handled through Redux. It's a very fun way to write a game :)
And you're all right, of course, no one could ever compare. He was the best, period, in my mind, and while he may not be in your mind, but his accomplishments and career are undeniable.
But every rock and pop singer today has something from Bowie. Kanye and Gaga found ways to navigate both pop stardom and the art world; bands like Of Montreal incorporated theatricality blended with musicianship in their records and live shows. I could list, so, so many more, from Janelle Monae to St Vincent, but unfortunately I think a list of every rock or pop musician since 1970 would take up significantly more room than I have in this comment box. They created something new using his life and music as inspiration - and that's fine.
Because we like to act as if Bowie is this fount of perfect originality, ideas springing from the ether - and, don't get me wrong, he certainly was inventive - but to ignore his influences is to create a myth. We talk about him as the chameleon, but he never morphed into truly untread ground - he always found what was there, and improved, innovated, found new ways to incorporate it. Young Americans followed Philadelphia soul. "Blackout" followed "Nite Flights". The man operated a goddamn ISP in the late 90s, as another comment mentioned. Blackstar followed experimental jazz and had inspiration from everyone from Kendrick Lamar to James Murphy.
I wouldn't dare to try to distill his life into a single takeaway, as there's far, far too many angles to cover. But here's the lesson that springs to mind first, which, now that I write it, comes out slightly more inspirational-poster than I'd like, but maybe that's okay:
Creative work isn't made in a vacuum, and to try is futile. Embrace what's next, no matter how different, how weird. Keep your eyes forward and your ears and mind open.
This is an unnecessarily rude assumption. Even the most rudimentary glance at the author's Github page, linked at the bottom of their blog, would have shown you that the author has created and contributed to multiple popular applications and libraries.
Previously, in the same vein: http://www.bloomberg.com/graphics/year-ahead-2016/
I don't usually go all tinfoil about HN votes, but it's pretty easy to assume is flagging this one down.
Honestly, it's heartbreaking, as someone who uses many Facebook open source projects, to talk to engineers at Facebook and find out how many don't know this is even an issue. It's certainly kept me from responding to FB recruitment emails.
I particularly like that there's a "whitelist" of which running commands it will restore, so I can e.g. restore both VIM sessions and my Webpack watchers when I restore my session.
1. Get a list of all posts and compute their URLs
2. Run each URL against the React app's react-router table (https://github.com/thomasboyt/peridot/blob/master/src/pagesB...). This gets the static markup for each route.
3. Wrap this static markup in a <Page /> container (which has e.g. <script> and <link> tags for assets), and write the resulting output to an HTML file.
That HTML file is what you initially load. It then loads a Webpack bundle of the same React app, and once that's loaded, React on the front-end "re-renders" into the already-rendered React app container (though it doesn't actually re-render the DOM, as it's able to diff against the existing DOM nodes).
There's some more nuance to this - for example, the server-side rendering also passes in a Redux store with the state needed for rendering the page (e.g. the contents of a post), as well as embedding the JSON-serialized state in a <script /> tag so when the front-end code takes over, it can just load the embedded state.
Honestly, though, the isomorphic rendering only took a few hours to implement, and most of that was me figuring out how to use Redux (previously, I'd used other Flux implementations that had somewhat different concepts). The biggest takeaway I've gotten from this project is that React isomorphic rendering is way easier than I thought.
In a somewhat similar vein, I've been working on a static site generator (like Jekyll) that uses React/Redux instead of a templating system: https://github.com/thomasboyt/peridot
It actually is very similar to any other isomorphic React app, except instead of hosting an API, it simply renders each page out to a file, as well as a JSON version of each post that acts as the "API" used to retrieve further pages from the frontend app. There's an example site here: http://loudplaces.disco.zone/
I don't think anyone's out there trying to ban the word "retard" for its non-derogatory usages. Seems like a weird straw-man to worry about.
Am I supposed to be concerned by this, and if so, why?
Unfortunately, Ticketmaster has a habit of just buying/merging with competitors (including Live Nation, in a merger that should have never been allowed to go through).
Plus, Live Nation actually owns a lot of venues, so you'll never see them use another ticketing provider: https://en.wikipedia.org/wiki/Live_Nation_Entertainment#Venu...
The lack of an upgrade path from 0.8.x makes me feel pretty stupid for trying out that version. Then again, they don't have upgraded client libraries for Python either, so we wouldn't be ready to upgrade anyways...
Ironically, there were a couple of Windows 8 behaviors I had to unlearn (for example, there's no longer the super strange "hot corners" that were the only way to access the shutdown menu). Definitely didn't take as long as initially learning how to navigate Windows 8, though :)
It's a really exciting proposal. AFAIK, it'd make Python 3 the first mainstream imperative scripting language to have these async/await concepts built-in (there is a similar proposal for JavaScript/ES7 built on top of generators and promises[1]). While I've commented before about how asyncio is still a bit more nascent than I'd like, I'm really excited to see where the community takes it.
I have a 3-year old PR here to fix it. Feel free to +1 :) https://github.com/orderedlist/minimal/pull/2
There's also some great articles about unfinished content in WoW, like this one about a half-implemented zone with lots of lore around it, giving it a particular mystique: http://www.engadget.com/2011/04/05/wow-archivist-the-karazha...
I'm hoping that aiohttp, or a similar library, further matures and we start seeing apps built on it. Developing asynchronous HTTP code in Python 2.x is significantly harder than throwing together a Node app, where things are "asynchronous by default" (unlike, say, Flask or Django). Having a universal, built-in event loop removes a huge point of confusion and learning for async development in Python, and can hopefully bring interest from developers who would normally look to Node.