HN user

jcstk

329 karma

https://joeconway.io

Posts5
Comments39
View on HN

Religion is a subset of ideology, and both are a mechanism to recruit labor to fight and not the reason for conflict. Material isn't cheaper to buy, the "owner" of the material has all of the leverage - lock them in like a SaaS contract and them jump the price up, and the buyer can't do anything. Crops and slaves are no longer valuable as port worthy coast and natural resource deposits, but the fight is still over land and power.

Play Aardwolf MUD 7 months ago

Yes, it was crazy. $2/hour in 1997 dollars! Agreed… I think only Pubg has come close to replicating the intensity of emotion in PvP (which was my main interest in playing)

Play Aardwolf MUD 7 months ago

I got into programming through MUDs, have the fondest memories of those times and deeply appreciate their role in my life. I ran up a giant AOL bill playing Dragon's Gate that I had to work off by doing data entry that helped me understand the basics of computing, and then using that knowledge to create so many scripts and highlights in Rapscallion MUD client. After that, I realized I could make more things and never stopped. What a great time. I remember being online when the MUD I played reached their maximum number of concurrent players - 340 - and thinking that the world was so big. Crazy to think about online gaming today.

The free encyclopedia is an advertisement for a nonprofit that does a lot of things: https://wikimediafoundation.org/what-we-do/. They manage costs of producing the encyclopedia by using volunteer labor. They operate a similar model as nature documentaries that drive donations for conservation and climate groups. These are all good things - still an advertisement.

Any information that comes to you for free or is on a screen is an advertisement. All of it. That's the point. Do you think people spend millions and billions of dollars creating and maintaining a content delivery network because they just want you to know about things?

One thing I find interesting about reading is that it's done in the voice of the reader, not the writer. Shame and manipulative high-pressure sales tactics... interesting perspective. Personally, I write to inspire people to get curious and try things. If this pushes their path forward, perhaps we will meet again down the road and find ways to help each other?

FWIW, I enjoyed the hundreds of hours I spent with dart:mirrors to automate serialization, and the code-generation heavy approach always felt like kind of a bummer. But I feel like AI-assisted programming solves the majority of use cases this feature was meant for.

Goodbye, Slopify 1 year ago

I'm talking about my current experience, not the delta over time. I've been using Spotify since 2011.

Goodbye, Slopify 1 year ago

I'm reading these comments and I'm thinking "are we using the same Spotify?" I don't see any AI music, I don't get Podcasts pushed on me, the UI is fine, playlists are fine and I get new music I like suggested to me often.

I can appreciate this perspective because I used to have it. I even wrote a similar blog post 10 years ago - it was on the top of HN and the comment section was a beautiful shitshow. For me, this perspective was a good story to tell myself - it justified why I was only investing my time in “work”, and validated me for having “come so far”.

Over time, I have reflected and shifted this perspective. That reflection centered around the question the author hasn’t asked himself yet: who creates these expectations? It’s always some loose definition like “society” or “elite”, or some other handy wavy grouping of people.

But, to be clear, those expectations are coming from the author. That’s his perspective of what the world thinks, based on his interactions, based on what he chooses to read, listen to, etc. He's not describing anyone but himself.

I found that if I find myself projecting onto social norms, society, or some other loose definition of “they”, what I’m really doing is projecting a part of myself that I haven’t been honest about yet.

MkDocs 1.0 8 years ago

I’ve found that I’m at least more willing to make quick typo fixes and deploy them when I just have to make the change locally and do a single push. This is especially true (for me) when there is some additional web content that is not generated by mkdocs.

MkDocs 1.0 8 years ago

Awesome and congrats. We started using MkDocs for https://aqueduct.io/docs/, and have since used it for a ton of projects. Some things that we found really useful were that it indexes all of your content for full text search automatically, and it’s stupid simple to deploy it to gh-pages. With a minimal amount of scripting, we push to a mkdocs source branch and it builds and deploys nearly immediately. It has saved us a ton of time and delivered tremendous value.

Toward Go 2 9 years ago

Ditto on generic methods both changing the game for Dart and being necessary. I spend most of my time in Dart, Swift and ObjC, and I've built serious applications in Erlang and Java. All of which I like for different reasons.

My opinion is that Dart's type system is the optimal type system. It allows for statically typed API surface, but at the same time, I can still add some dynamic voodoo under the surface and enable productive meta-programming.

For a bit more detail:

The main isolate creates an Application instance that has N number of supervisors, one for each isolate. The isolates are launched and go thru their initialization steps, reporting back to their supervisor. The application completes its launch once all supervisors have reported back. It fails its launch if an isolate throws an error during initialization or does not hear back in a configurable timeout. Any inter-isolate messages sent during startup are queued until all isolates have completed startup.

Once the isolates are up and running, the main isolate doesn't do anything other than facilitate the inter-isolate message hub. Requests are delivered directly to the isolates running the web server.

When running automated tests, the default behavior is to run everything on the main isolate, since tests are run against a temporary database schema that only exists for the lifetime of the connection.

Hmmm, no, that's not accurate. You specify a folder serving static content and the HTTP path is resolved against that folder. e.g.

  router.route("/*").pipe(new HTTPFileController("web/");
  router.route("/files/*").pipe(new HTTPFileController("something_else/");
An HTTP request for /foo.html returns web/foo.html. An HTTP request for /foo/bar.html returns web/foo/bar.html.

An HTTP request for /files/xyz.jpg returns the something_else/xyz.jpg.

If the HTTP path is a directory, then index.html is automatically appended to it. This is a brief overview of the referenced documentation above.

Yup! Each isolate has its own event loop... and I'll do a terrible job explaining that as its late in the day, so I included a reference link [1].

The memory consumption of an isolate depends on the size of the application code. Each isolate actually has its own copy of the application code that gets tuned by the VM over time. Even stuff like static variables are per-isolate. I just pulled up an OK sized Aqueduct project, and it looks like about 30-40MB per isolate. Most of that is probably Aqueduct itself. A worker isolate is likely an order of magnitude smaller.

1: https://webdev.dartlang.org/articles/performance/event-loop

Sure thing. As a server-side language, love it. I also do all my command-line scripting with it, too.

Async/await is implemented really well (Google hired Erik Meijer to help them build it), their threading model is excellent, and there are built-in keywords in the language for stream handling that are seriously productive [1]. Anyone that knows Java/Swift/Kotlin/ObjC is going to be productive in Dart very, very quickly.

Performance has been great, but someone else may be better qualified to answer that question. Much of the lower level socket stuff is just C/C++. I don't want to speak on something I don't fully understand, so I included an article about the Dart VM below [2].

To me, Dart differentiated itself by being more similar to compiled, C-like languages. Obviously, Django, Laravel, Rails, etc. are much more mature. Aqueduct is tested well [3], but nothing beats years of regression tests.

1: https://www.dartlang.org/articles/language/beyond-async 2: https://www.dartlang.org/articles/dart-vm/why-not-bytecode 3: https://github.com/stablekernel/aqueduct

Good question - yeah, the VM is actively maintained. All of the tooling for the Dart ecosystem runs on the VM, Flutter is a Dart VM project, too.

The changelog [1] always has a few entries for the Dart VM with each version, but it's quite clear from using it daily that much more is happening. Some notable recent improvements have been asynchronous breakpoints that are integrated in IntelliJ's debugger and some optimizations for sending messages across isolates.

1: https://github.com/dart-lang/sdk/blob/master/CHANGELOG.md

Good questions, thank you. Aqueduct initially started as a proof of concept - as a mobile shop, Dart was just so familiar to the languages we often used and it ran on the server. We tried building a few things and everyone was able to pick it up so quickly, and it took off internally from there. The value to us as mobile developers is that there was less context switching than when jumping into Ruby or JS (and all the other reasons we aren't quite fans of JS.)

Yes, multi-threading is accomplished through isolates. The application is run as a replica on a number of isolates, configurable by a command line option.

Each isolate has its own database connection, etc., but operate exactly the same. This behavior doesn't require any additional effort by the developer. (edit: The initialization code sets up a reactive channel for requests, each isolate instantiates that channel, and Dart's VM manages delivering an HTTP request to the most appropriate isolate.)

So, it's not quite like Erlang/Elixir where each connection gets its own process, rather the default number of isolates is 3. Isolates have their own heap, so memory isn't shared across them, but there is a message hub that isolates can send values across. This is useful when say you have websockets connected to different isolates and you want to broadcast a message to all of them.

You can spawn additional isolates from a 'web server isolate' to move computation to another thread.

When running `wrk` to do performance testing and monitoring in Observatory [1] and with anything we have in production, I haven't seen an Isolate or the process ever die. This may be a question better suited for the Dart VM team, I'll see if I can't ping someone.

And yeah, as a native iOS developer for many years, I finally sat down and built something in Flutter this weekend and really liked it.

1: https://dart-lang.github.io/observatory/