finder83

Joined 15 years ago

Karma
471
Submissions
171
Member since
Oct 13
[ my public key: https://keybase.io/finder; my proof: https://keybase.io/finder/sigs/fSPF_LrUf1_rF9MuAwNM6rQvSfSMmOwuCh7UAGv5pQw ]
View on Hacker News

Recent submissions

Comment · 11 months ago
Interesting, I'll have to look for those.
Comment · 11 months ago
Every time I read things like this, it makes me think that AI was trained off of me. Using semicolons, utilizing classic writing patterns, and common use of compare and contrast are all examples of how they teach to write essays in high school and college. They're also all examples of how I think and have learned to communicate.

I'm not sure what to make of that either.

Comment · 1 year ago
I believe that's still true of Erlang, but Elixir has UTF-8 encoded strings. In practice the only time you need to use Erlang strings from Elixir is if you're using an Erlang API.
Comment · 1 year ago
Thanks, apparently didn't click through enough
Comment · 1 year ago
This looks amazing! I keep loving Phoenix more the more I use it.

I was curious what the pricing for this is? Is it normal fly pricing for an instance, and is there any AI cost or environment cost?

And can it do multiple projects on different domains?

Comment · 1 year ago
It's very possible they don't replace them, but many libraries also have legitimate sells to clear books from inventory to make room. Usually over like a week or three day weekend once or twice a year, the last day having bags of books for $5. All of them have stamps/card holders/stickers designating the library. So those don't necessarily mean they were borrowed and never returned.
Comment · 1 year ago
https://github.com/github/copilot.vim works pretty well for inline autocompletion

https://github.com/CopilotC-Nvim/CopilotChat.nvim is the best I've found for the chat-type interaction. It lets you choose models/etc.

It's still not quite as nice as cursor, but decent enough that I enjoy using them

Comment · 2 years ago
Infinite, yes, but I would say it's not quite as core to the language as it is in Haskell where everything's lazy. Infinite streams are quite simple though:

  Stream.iterate(1, fn(x) -> x end) 
  |> Enum.take(5)
  [1, 1, 1, 1, 1]
Comment · 2 years ago
The functions don't return a mutable version of a variable or anything. You still get an immutable copy (it may not be an actual copy, I don't know the internals) of the state, and the state he's referencing in a Genserver is the current state of a running process that runs in a loop handling messages. For example in liveview, each connection (to an end-user) is a process that keeps state as part of the socket. And the editing is handled through events and lifecycle functions, not through directly mutating the state, so things tend to be more predictable in my experience. It's kind of like mutation by contract. In reality, it's more like for each mailbox message, you have another loop iteration, and that loop iteration can return the same value or a new value. The new values are always immutable. So it's like going from generations of variables, abandoning the old references, and using the new one for each iteration of the loop. In practice though, it's just message handling and internal state, which is what he means by "from the perspective of our program".

You typically wouldn't just write a Genserver to hold state just to make it mutable (though I've seen them used that way), unless it's shared state across multiple processes. They're not used as pervasively as say classes in OOP. Genservers usually have a purpose, like tracking users in a waiting room, chat messages, etc. Each message handler is also serial in that you handle one mailbox message at a time (which can spawn a new process, but then that new process state is also immutable), so the internal state of a Genserver is largely predictable and trackable. So the only way to mutate state is to send a message, and the only way to get the new state is to ask for it.

There's a lot of benefits of that model, like knowing that two pieces of code will never hit a race condition to edit the same area of memory at the same time because memory is never shared. Along with the preemptive scheduler, micro-threads, and process supervisors, it makes for a really nice scalable (if well-designed) asynchronous solution.

I'm not sure I 100% agree that watching mutating state requires a function to observe it. After all, a genserver can send a message to other processes to let them know that the state's changed along with the new state. Like in a pub-sub system. But maybe he's presenting an over-simplification trying to explain the means of mutability in Elixir.

Comment · 2 years ago
Telescope feels so game-changing, and I've not found anything like it outside of Neovim and Emacs. Being able to fuzzy search a buffer or my project instantly makes navigation insanely fast.

People talk about not needing to type fast when coding, but I do need to navigate quickly, especially to not lose context while thinking. Ivy/Helm/Telescope with one of the various jump libraries (and LSP of course) makes code navigation feel second nature.

Comment · 3 years ago
I'm on composer 2.5.8
Comment · 3 years ago
Maybe I'm missing something, but I disagree with the tooling comment. Composer is horrendously slow, taking on the order of multiple minutes just to do a update often times. This is just my experience, but I'd much rather take mix, cargo, or yarn any day.

xdebug, while it works, also feels antiquated. Trying to get it working in a new system or project can take quite a while. Again, compared to python or node's debugging experience or profiling experience, and it feels like something stuck out of the 90s.

Even just getting output from php is difficult for me. Maybe it's because of the webserver I'm using? But python, elixir, node, go, etc, all output logs to stdout while running a local service. Maybe that'd work with the built in webserver, but fpm or modphp, etc, it seems like you have to hunt down logs.

Not to mention that the dev servers almost always require a full apache or nginx setup just to function. Opposed to a node, elixir, python, or go server which all run directly from the directory you're in. (Including things like hot/auto reloading in node and elixir)

I'm not a full time php dev, but my time in php always feels like a grind, and just getting tooling working is not an easy thing. If I'm missing some state of the art alternatives, I'd love to hear them though.

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton