[HN Gopher] Tetris in ClojureScript
___________________________________________________________________
Tetris in ClojureScript
Author : simongray
Score : 264 points
Date : 2021-06-14 06:38 UTC (16 hours ago)
(HTM) web link (shaunlebron.github.io)
(TXT) w3m dump (shaunlebron.github.io)
| KurtMueller wrote:
| Shaun also released the really neat Parinfer package as well:
|
| https://shaunlebron.github.io/parinfer/
| rejectedandsad wrote:
| I was surprised to see the repository was Archived. Is it not
| being maintained now?
| chrisoakman wrote:
| I maintain an updated fork:
| https://github.com/oakmac/parinfer
| klaudioz wrote:
| Which tool was used to create the presentation ?
| AtroxDev wrote:
| looks like it is custom built:
| https://github.com/shaunlebron/t3tr0s-slides
| jgrant27 wrote:
| I wrote Pong in Clojure back in 2009 in <200 lines.
| https://imagine27.com/pong_in_clojure
| maiya9 wrote:
| Cool, thanks for sharing.
| junyoon wrote:
| awesome dev demo! no wall kick though :P
| AQXt wrote:
| That's one of the coolest programming demos I've ever seen!
|
| Suggestion: make the completed rows fade asynchronously.
| beders wrote:
| It does. <! reads from a channel that closes in the specified
| timeout. It is non-blocking. (similar to the away/async JS
| magic - rewrites the go block to a state machine)
| tartoran wrote:
| Shaun Lebron has a bunch of interesting stuff on his github[0]
| involving closurescript.
|
| I haven't toyed with closurescript yet, if anyone has any
| experience with it, what are its strengths and weaknesses? I' ve
| been learning scheme/racket for the past year and for learning
| purposes Dr Racket is more than enough for now, but sometime in
| the future I'd like to branch out of that.
|
| [0]: https://shaunlebron.github.io/
| souenzzo wrote:
| - Low changes/grow. This demo was written in 2014 and it
| probably still look like as if it had been written in 2020. -
| Easy interop with any npm library. Just import and use it.
| sova wrote:
| ClojureScript is awesome.
|
| There are several tools available for live-coding (REPL-driven
| development) such as more recent shadowcljs or the older
| Figwheel.
|
| Rum is a powerful wrapper over React.js and you can live code
| and see instantaneous results in the browser (using shadowcljs
| or figwheel).
|
| ClojureScript's strengths largely stem from Clojure --
| collections as fundamental types, REPL, macros, immutable
| datastructures* and lovely syntax.
|
| As far as cons go, it takes some time to start up a REPL and
| making release builds is an extra step, but should work just
| fine unless you're a newbie like me and you leave strange
| unnecessary lines in your code. Javascript and js/CSS interop
| is there, but it's not super obvious and takes some getting
| used to what it looks like -- luckily there are enough online
| writeups to make that process easier.
|
| The addage "why clojurescript? Because clojure rocks and
| javascript reaches" sums up nicely the motivation.
|
| You can have largely isomorphic code on the front-end and back-
| end, which lends nicely to creating server-side rendered
| versions of SPAs for search engine indexing and fast load
| times. However, the server-side copy and the client rendered
| copy must match exactly for this to work, which can be a bit of
| a "thread the needle" kind of problem.
|
| * immutable datastructures are awesome, contrast with mutable
| datastructures and "location oriented programming" -- any time
| you "edit" a value you're actually creating a new datum. This
| is done with atoms (immutable data stores that need to be
| dereferenced to retrieve their value) and operations such as
| swap! and reset! that either apply a function to the current
| value of an atom, resulting in a fresh new atom with the new
| value, or overwrite the atom completely with some value,
| respectively.
|
| So yeah, if you like live-coding and appreciate the power of
| lisp, it's a really nice fit. Yes, the way to do stuff is
| "opinionated" but it's opinionated in what many years of
| trudging through the tar pit* would suggest is the right
| (only?) way to do things.
|
| * Out of the Tar Pit
| [http://curtclifton.net/papers/MoseleyMarks06a.pdf]
|
| I highly recommend Rich Hickey's talk "Are we there yet?" to
| give you an overview of the motivations behind Clojure and
| subsequently ClojureScript.
| [https://www.infoq.com/presentations/Are-We-There-Yet-Rich-
| Hi...]
| shivekkhurana wrote:
| I wrote about my journey covering Clojure's pros and cons:
| https://medium.com/swlh/what-i-learned-after-writing-clojure...
| CraigJPerry wrote:
| Your talk linked from
| https://shivekkhurana.medium.com/reaching-flow-state-with-
| cl... was absolutely brilliant.
| jjwiseman wrote:
| "It has a slow startup time. Clojure runs on the JVM and has
| a significantly slower startup time compared to Node. Again,
| this is only a problem from an outsider's perspective. We
| have REPL. You start the app only once, and it keeps running
| in the background. You can interactively include new changes,
| without having to startup every time."
|
| I've been using Clojure for about 8 years and this is one of
| the talking points I find most annoying. The slow startup
| time is a disadvantage, and it should be owned. It
| disqualifies clojure from a large class of applications and
| if you're not honest about it you lose credibility, and you
| retard potential attempts to solve it. It doesn't mean you
| can't write software with Clojure, but be honest about the
| fact that it makes lots of types of usage (not all) a poor
| match.
| fnordsensei wrote:
| Right. I find it annoying too, but for the opposite reason.
|
| Since GraalVM, Babashka, and before them Lumo and Planck,
| or just plain CLJS + NodeJS, Clojure (the language) has
| several answers to those use cases, and it's unclear to me
| at least why this is a point of contention regarding
| Clojure (the JVM implementation). Should we also bash CLJS
| for being single threaded?
| jjwiseman wrote:
| And now that it's honestly approached as a potential
| issue, you can talk about the tradeoffs involved here. I
| haven't followed those projects closely so correct me if
| I'm wrong, but Babashka is an interpreter that implements
| a "substantial subset" of Clojure, right? GraalVM seems
| amazing, but it also is not a guaranteed seamless
| experience, either (no eval, partial support for
| reflection).
| jjwiseman wrote:
| The faster startup time is one reason I've thought that
| clojurescript on Node (shadow-cljs makes this really easy)
| could become more popular than Clojure Classic.
| elwell wrote:
| That's really cool; thanks for sharing the code in an
| understandable way.
|
| Here's a little 'game' I'm working on with some simple physics in
| ClojureScript: https://github.com/celwell/wordsmith
| enlyth wrote:
| That is really cool and well done, thanks for sharing.
|
| One question I have though, is the square piece supposed to
| rotate like that, i.e. shift up and down while rotating? I think
| this might be a bug.
| nlitened wrote:
| I agree, the rotation function could see some ergonomics
| improvements with minimal code changes.
| cardanome wrote:
| This was the final push I needed to learn Clojurescript.
|
| Absolute awesome work.
|
| I always kept my distance from Clojure because of the reliance on
| the Java ecosystem but having a productive and stable language
| that is a pleasure to work in and that transpiles to JavaScript
| seems like a good deal. Plus a solid REPL-based workflow and
| rapid prototyping support, something I sometimes miss from more
| static languages.
| pgt wrote:
| http://clojurescriptkoans.com/ is a great way to get started
| with the essence of the language.
| knubie wrote:
| If you are getting into clojurescript, take a look at shadow-
| cljs for the build tool. It provides a better experience than
| the built-in tooling IMO.
| hatch_q wrote:
| Looks nice in demo... github shows also the ugly bits.
| calamityjam wrote:
| An (partial) implementation of Tetris Attack (Panel de Pon) in
| Clojurescript
| dgb23 wrote:
| Great work!
|
| I love the idea of making code and data alive, interactive and
| illustrative. Reminds me a bit of Bret Victor's talks, essays and
| prototypes illustrating how interactive, graphical thinking can
| enhance understanding and even creation.
|
| Imagine our editors doing this by default, what it would mean for
| documentation, code quality and enhancing our ability to
| understand and communicate these concepts with augmented code.
| lgrapenthin wrote:
| Check out some of the videos on Youtube of the Genera Symbolics
| Lisp Machine platform.
___________________________________________________________________
(page generated 2021-06-14 23:02 UTC)