HN user

gw

2,042 karma
Posts28
Comments233
View on HN
github.com 5y ago

Show HN: Ansiwave, an ANSI art and MIDI music mashup

gw
103pts14
github.com 5y ago

Show HN: O'Doyle Rules – a new rules engine for Clojure

gw
100pts18
github.com 5y ago

Show HN: Paramidi – make MIDI music with Nim

gw
2pts0
github.com 6y ago

Show HN: Vim³ – Vim rendered on a cube for no reason

gw
22pts4
github.com 6y ago

Show HN: Paravim, an editor for Nim that can run inside a game

gw
1pts0
sekao.net 6y ago

Show HN: Paravim, a Parasitic Editor for Clojure

gw
4pts0
midibin.com 8y ago

Show HN: Midibin – Turn Clojure code into MIDI music

gw
48pts13
gist.github.com 8y ago

How Clojure's documentation can leapfrog other languages

gw
4pts0
github.com 8y ago

Show HN: Dynadoc, dynamic docs for Clojure(Script)

gw
3pts0
sekao.net 8y ago

Show HN: Lightmod, an all-in-one tool for full stack Clojure

gw
7pts2
gitorials.com 9y ago

Show HN: Gitorials – Tutorials as Git Repos

gw
147pts25
sekao.net 9y ago

ClojureScript is the most-used functional language that compiles to JavaScript

gw
216pts80
sekao.net 9y ago

Learn ClojureScript in a Cloud IDE

gw
101pts25
nightcoders.net 9y ago

Show HN: Nightcoders.net, a cloud IDE for ClojureScript

gw
7pts1
github.com 9y ago

Show HN: Nightlight, an editor that runs inside Clojure projects

gw
195pts63
gist.github.com 10y ago

Clojure is for type B personalities

gw
3pts0
medium.com 11y ago

We have renamed Gittip to Gratipay

gw
24pts2
github.com 12y ago

Show HN: Nightmod – Make live-moddable games in Clojure

gw
15pts2
nightmod.net 12y ago

Show HN: A tool for making live-moddable games in Clojure

gw
6pts1
nightweb.net 12y ago

Clojure on the Mac App Store

gw
135pts34
github.com 12y ago

Show HN: A Clojure game library

gw
93pts31
nightcode.info 12y ago

Show HN: Nightcode, the Clojure IDE, just hit 0.1.0

gw
68pts41
nightweb.net 13y ago

Why your next project should be public domain

gw
34pts65
nightweb.net 13y ago

Show HN: Nightweb, the anonymous P2P social network, now runs on the desktop

gw
192pts63
nightweb.net 13y ago

The Why and How of Clojure on Android

gw
3pts0
nightweb.net 13y ago

Show HN: An anonymous P2P social network for Android, written in Clojure

gw
257pts133
oakes.github.com 14y ago

Secret messages on the web: How to do steganography in JavaScript

gw
38pts15
oakes.github.com 14y ago

ShowHN: PixelJihad, a pure HTML5 steganography tool for covert messaging.

gw
1pts0

Not the commenter but which one of these is the defer generating?

    // option 1
    try {
      fp = os.open(x)
      fp.read()
    }
    finally {
      fp.close()
    }

    // option 2
    fp = os.open(x)
    try {
      fp.read()
    }
    finally {
      fp.close()
    }
Should we close if open fails? Maybe, maybe not, but with try/finally it is obvious which one it is doing.

Nim's defer just wraps the current scope in a try/finally, with the deferred code running in the finally. It is probably better just to use try/finally directly because it's more explicit about what is in the try block. It's not worth it to obscure that just to avoid a new level of indentation...

You can still hold on to references to textures and meshes you uploaded to the GPU without using a full-blown scene graph. Some state is necessary no doubt, but this seems more like unnecessary state that could be replaced by something more direct. But i don't know, i'm not familiar with three.js; the click handlers seem useful.

That makes sense, but it seems like a case of building an abstraction to solve a problem caused by another abstraction. If a scene graph creates a new chore for me that necessitates yet another dependency, i think it'd be simpler to not fuss with these layers at all. That's a choice i don't have with the DOM.

Crawford says nobody truly followed in his footsteps but I think Jason Rohrer qualifies. The two even shot a documentary together, and the scene where Crawford showed off his Storytron project to Jason was pretty revealing. Jason called it baroque and Crawford responded that he'd consider his life a failure if the project fails:

https://www.youtube.com/watch?v=zA_0_dSD3-Q&t=27m35s

Crawford definitely is not doing enough introspection. I hope the man resets and makes an inspiring project without the self-romanticizing or self-pitying.

Fossil 6 years ago

Yeah it's a bit bifurcated. Internally there's a lot of coupling -- HTML embedded directly in the C code and whatnot. This could be resolved if tools could be built on top of fossil, but the CLI code uses `exit` everywhere which makes it impossible to use as a library. I think they made an incomplete attempt at a JSON API, but what you really need is a proper linkable library like libgit2.

The quote was a guideline, not a requirement. Cognitect (who makes the clojure CLI tool) doesn't even control clojars, the main clojure maven repo, so they wouldn't be able to enforce that even if they wanted to.

I didn't choose the shorter names because i "care[d] about having shorter names", i did so defensively, because i figured if i chose `net.sekao/iglu`, someone else would choose `iglu/iglu` which would imply that theirs was the original or official version.

Another point i didn't mention is that maven was designed from the start to be decentralized; many companies run their own private maven repos, but also pull artifacts from maven central. Having group names reduces the chances of collisions between their private servers and a public maven server.

You really should look to other ecosystems and see what lessons they've learned. In java, packages are normally "namespaced" by the author's reverse domain name, like `org.lwjgl/lwjgl`.

Since clojure uses maven as well, the same applies, but clojure tools like leiningen decided to create a shortcut: if the group and artifact name are the same, like `iglu/iglu`, they can be collapsed into one name: `iglu`

Well, that just encouraged everyone to choose collapsible names. In retrospect, this didn't buy us much. Who cares about saving a few characters of typing? Most now seem to agree it wasn't a good idea.

When the "collapsed" name falls out of maintenance, the forks will all seem somehow less "official", even if they are much higher quality. Forks are inevitable; why would you want to discourage them?

I finally decided to start using the reverse of my personal domain for my future libraries. The java folks were right all along.

I think the instrumenting and generator stuff gets disproportionate attention. For me by far the biggest win from spec has been with parsing. This completely changes how you'd write a library that takes a data structure and parses it into something meaningful (for example, what hiccup does for html or what honeysql does for sql).

In the past, this required a lot of very ugly parsing code and manual error-checking. With spec, you write specs and call s/conform. If it failed, you get a nice error, especially if you pair it with expound. If it succeeded, you get a destructured value that is really easy to pull data out of. I've done this in a half dozen different libraries and i'm pretty sure i wouldn't have even written them without spec.

It's things like this that make me not worry about sticking with opengl. It's supported everywhere, fast enough for my uses, and is exactly the level of abstraction i want to be at. I completed the vulkan triangle tutorial and i cannot imagine needing all those knobs for the games and other things i make. I'm pretty confident that by the time opengl is no longer natively supported, software layers like this will be stable and fast enough.

I do love how zig's comptime naturally led to generics without extra syntax. But after using nim i'm convinced that macros make even more sense for systems programming. They can even affect performance -- nim's macros can generate types that would be difficult to write by hand.

I also take issue with your statement that zig is "more minimal" since that only applies to the user's perspective -- from the compiler's perspective, macros make a language far more minimal. But i vaguely recall already discussing this distinction with you so i don't want to rehash it.

At any rate i will definitely be paying attention to andrew's progress, he has a really clear vision.

Yeah it really is a hidden gem. You can use it as a bash replacement, and with the new compiler API you can embed the entire interpreter in your program. My only complaint is that the interpreter aborts the process when the nimscript code has an error, so you can't really use it for hot code reloading right now. I hope they fix that eventually.

I've seen that but Bryan said this just a few days ago:

This was a smaller consideration - but more fundamentally, the model Neovim uses for input - queuing it on an event loop and handling it asynchronously - is at odds with what we required - to be able to process the input -> handle updates synchronously.

https://news.ycombinator.com/item?id=23628381

as a side note, i think more and more people are starting to realize that the async paradigm is not a panacea.

This is why libvim (from the oni2 project) is based on vim rather than neovim. Even aside from performance, it is a huge simplification if you can interact with an editor engine in the same process, synchronously. At some point we replaced simple function calls with baroque APIs accessed over localhost...