HNHacker News
TopNewBestAskShowJobs

phforms

643 karma · joined April 29, 2022

submissionscomments
phforms··on LOGO Manual (1974) [pdf]
There is a fairly recent (2020) article on the history of Logo, written by Cynthia Solomon (one of the original designers of Logo), Brian Harvey (UCBLogo, Snap!) and some other people: https://dl.acm.org/doi/10.1145/3386329 (click on the PDF button to read it)

It is quite long, well written and shares some personal anecdotes, so I really recommend it for anyone interested in the history of the language and its influence.

phforms··on Red Programming Language
Seems like the development is much more focussed since last year and a lot is happening with 1.0 (and 64-bit support) being on the way possibly by the end of this year. [1][2]

I am really looking forward to learn more about this language when 1.0 comes out, especially because of its ambitious feature list [3] (programming across the low/high-level spectrum, etc.), Lisp influences and the Logo-like syntax inherited from Rebol.

- [1] https://www.red-lang.org/2022/07/the-road-to-10.html - [2] https://www.red-lang.org/p/roadmap_2.html - [3] https://github.com/red/red

phforms··on Proof you can do hard things
It’s really interesting how we shy away from some “hard” things, even though there is literally nothing at stake that could prevent us from doing them. Nothing life-threatening, no (or minimal) risk of physical or psychological damage, no social exclusion, no irreversable decisions about the future to make. Why can’t we just try/do it – what are we so afraid of?

Many people (especially those in a lucky environment) can just try to draw realistically (which is actually not that hard, given a good teacher/instruction), study a “hard” topic in philosophy, get good at playing a “hard” song on an instrument or even learn how to prove mathematical statements or how to model and analyze complex systems. We can just try, there is nothing at stake except our time and energy.

When something is really interesting to me, I try not to stop myself from pursuing it just because it is considered “hard”. I have many mental issues (executive dysfunction, bad memory, etc.) but I am also stubborn and curious enough to try anything, again and again if I have to, which I never regretted. It doesn’t hurt and it can be so much fun with a humble and relaxed attitude and especially if I don’t try to compare myself to others, which might be one of the main things that is holding most of us back.

phforms··on I Hate the News (2006)
The post is from 2006. I wonder how he would have written it differently or not at all during the pandemic or if he was a refugee, for example. Of course, these are extreme cases, but they demonstrate that you have to be in a special position to be able to perceive the news as a “waste of time”.

I also have the habit of avoiding most news, but I believe it did not serve me well, since I have been ignorant about many current issues and often feel ashamed when I don’t know things that are very relevant to the lifes of people around me that I may talk to. Especially when there was a recent disaster or political event that made a huge impact and I just missed it and thereby fail to sympathize with someone who is directly affected by it.

But I also see how reading the news can really drag me down and feed into my depression, so a healthy balance always worked best for me, like catching up once or twice a week. I have yet to find a good aggregate source of quality, independent news though.

phforms··on How to Do Great Work
I don’t think that great work and financial success are necessarily related; in fact, in many historical cases they were not. For me personally, I always have special and long-term projects on the side (that may or may not lead to “great work”), while doing more boring work in my bread-and-butter job. I guess I need some sort of independence from financial or social pressure when I want to do what I am passionate about, even if it means that I am not able to go “all in”. Otherwise it would only stress me out and in the worst case, I would lose interest or drift away from my original intentions to satisfy a customer or whoever might give me money.

So many very valuable or important things are just not profitable, but that doesn’t mean they should not be pursued.

phforms··on Clojure is a product design tool (2015)
re-frame has a beautiful introduction that made the concepts crystal clear to me as someone who never used a state-management framework before: https://day8.github.io/re-frame/re-frame/ The API documentation lists the most commonly and rarely used parts before going into detail and there are many usage examples.

Reagent has a nice intro tutorial (classic todo-app): http://reagent-project.github.io and many other helpful tutorials and resources for beginners: https://cljdoc.org/d/reagent/reagent/1.2.0/doc/documentation...

However, since Reagent is still stuck with class-components for more complex behavior and relies on Hiccup, which is nice but has a performance cost compared to pure React, I am unsure about its future. Like some others in the Clojure community, I have moved to thin React wrappers like Helix and use Refx to integrate those with re-frame. It may be a bit confusing right now for beginners since there is no “golden path”.

Also, unfortunately, many smaller libraries are poorly documented and it seems like it is expected from the developer to dig into the source code to find out what’s going on.

What I found the most difficult as a beginner was how to setup a project in ClojureScript in the first place, like all the configuration in shadow-cljs, how it interacts with deps.edn, how it integrates with npm, the REPL, etc. But dev/build config has always been a weak spot for me, so it might be just that.

Overall, I still very much enjoy working with Clojure(Script), more than in any other language. Anyone who likes Lisps and functional programming should give it a try (and be sure to watch Rich Hickeys amazing talks!).

phforms··on Melange 1.0: Compile OCaml / ReasonML to JavaScript
I have only worked with ReScript for about a year before switching to ClojureScript (which was a better fit for my project), but I really enjoyed the experience and genuinely wish it would become a more popular alternative to TypeScript for devs who are coming from JS and are looking to dive into FP and static typing. The developer team did a great job with highly optimized and readable JS compilation, great integration and interop with React, JSX support, raw JS and even TypeScript (see GenType) and now it also supports async/await. The website is also really well made and provides good documentation and a nice forum to get help when needed.

However, Melange seems to head in a good direction too and I guess it would be amazing for people who are already familiar with OCaml and want to integrate with libraries and codebases there. So I think both projects are valuable in their own right for different use-cases.

phforms··on Code and Programming Projects
Funny, because I thought so too at first, but then I actually enjoyed clicking through almost all of the bubbles to explore what’s behind them. Not sure if a text list would have done the same to me. The categories gave me just enough information to make me curious without spoiling the fun of exploration.
phforms··on Notes apps are where ideas go to die (2022)
It really makes a night and day difference when you are taking notes for studying, research, designing or other kinds of focussed mental activity that require things like pulling information together, resurfacing past insights, (re)evaluating ideas, (re)contextualizing findings, seeing/drawing the overall picture, etc.

Modern note-taking tools help our brains with their limited capacity to manage greater complexity, discover obscure connections and, of course, safely forget to free working memory for other things.

However, if you just write down some ideas from time to time that are not really related to each other or stash resources like interesting weblinks without making an effort to organize and connect them in meaningful ways, fancy new apps and features won’t really provide much value beyond just using a plain old notebook.

Overthinking really seems to be an issue with users of networked notebook apps and it can waste a lot of time and money. We should stop building elaborate systems or focussing on complicated workflows unless we really have a strong motivation, such as deep, long-term research and study. Serving this motivation will then be the actual focus of our efforts, not the tools or workflows themselves. It can be fun to explore “tools for thought” on their own, but they will not magically change our lifes if they cannot solve a problem that is meaningful to us.

phforms··on Managing State with Signals
I actually found it surprisingly comfortable to read, but of course, everyone is different. You can always use the browser console to disable/change the `background-color` (in this case also `background-image`) CSS property of the body.
phforms··on The core problem with hamburger menus
> hamburger menus are the junk drawers of software

Love this metaphor. Hiding the main nav behind a generic button always gives me the impression that the designers don’t really see it as an important part of the website. Imagine you’d have to open up an unlabeled closet to find the navigation signs in a public building that actually show you what is where. Or if the table of contents in a book was hidden inside the folded cover.

I can see the problem with space and touch target size on mobile and don’t really have a better solution for that (maybe call the button “menu” instead and limit the number of top-level items like you would in a “proper” nav), but I hate to see hamburger icons on desktop screens.

phforms··on Replying to comments about our web page design
The only thing that really annoys me about this website is the fixed vibrant background images that interfere with the text. Otherwise, I find it quite refreshing to see something different. I have seen much worse typography on “professional looking” websites tbh.

However, it is not the most accessible of websites and I certainly wouldn’t want to have e.g. Wikipedia be designed like this (oof), but I don’t mind the occassional quirky rebellious web design adventure.

phforms··on Two types of software engineers
As much as I agree how important it is to design software with a type 2 mindset, I believe that there is also the trap of not taking any risks because you constantly fear it would not serve your users well enough, they would never use it, it would be too complicated for them, etc.

We have to know our target audience well and always question our assumptions about them, because sometimes it may be surprising to see what users are willing to learn if they feel it is worth the effort. And sometimes it may be worth losing a part of that audience while the ones that stay will be much more convinced about what the product can give them back.

phforms··on Grid World
What a beautiful(ly told/written) story/experience. Love how the visuals interact artistically with the writing. Can totally understand the fascination with grids, although it came to me much later in life (as I child, grids felt too constraining to me and school reinforced that impression unfortunately).

> “I think we project grids outwards onto the world from within ourselves, shining their structure from our minds. We radiate grids.”

I don’t know if the author is aware of this, but neuroscientists discovered what they call “grid cells”: “a type of neuron within the entorhinal cortex that fires at regular intervals as an animal navigates an open area, allowing it to understand its position in space by storing and integrating information about location, distance, and direction.” [1]

I believe grid cells, together with place cells [2] may explain a lot about not only how we make use of diagrammatic tools but also how we form and navigate our more abstract conceptual spaces. For anyone interested, I recommend this great article on Quanta: https://www.quantamagazine.org/the-brain-maps-out-ideas-and-...

[1] https://en.wikipedia.org/wiki/Grid_cell [2] https://en.wikipedia.org/wiki/Place_cell

phforms··on Programming isn’t coding (2020)
I believe there is great value in introducing learners to tools that are so simple and easy to use that they can just get started and focus on programming without having to wrestle with tools and incidental complexity.

This is a design challenge: crafting tools that are laser-focussed on their actual purpose and trying to make it as straightforward as possible for users to do what they intent to do. It takes empathy and clear, simple and pragmatic thinking, which can be surprisingly hard for many people and I believe it becomes harder the more we become entrenched in our profession and its way of doing things.

In my own experience, if I had not discovered Processing I am not sure if I would have actually gone down this path and become a developer. Before that, I had so many frustrating experiences with tools and especially the command line. Everything was just so opaque to me, since I had no one with programming experience to guide me through and when I tried looking something up, I felt like I was going down a neverending rabbit hole. Now I really enjoy digging into the most obscure tools and programming languages, use Vim and Emacs daily (yes, you can like both) and actually enjoy writing shell scripts.

I think if beginners actually get to experience what it is like to program something that is meaningful to them, that they care about or just enjoy, they will become motivated to learn all the hard and annoying things as well. But they should not be stopped by hundreds of landmines and roadblocks before they even get there.

phforms··on Ask HN: How do you track your work hours?
This. Been using it for more than 6 years for freelance work and never had any issues with it. Also never paid a penny since it has a generous free plan and I never had much use for any of the advanced features. It has a simple desktop app for tracking and I can quickly see my hours on the dashboard with statistics, summaries for specific time periods, filtering, etc.
phforms··on Typst, a new markup-based typesetting system, is now open source
I feel your struggle. Especially for these cases, I am always writing my own personal documentation (recently switched to .org files for that, which makes navigation pretty convenient in Emacs). It seems redundant since you can find all this knowledge on the web (or ask an AI), but my selection, the context and examples I add and how I organize it makes it especially useful for me when I come back later and need to remember what I have learned.
phforms··on So you've installed `fzf` – now what?
I am very new to shell scripting and as I wrote the script, I actually just realized that I can plug anything into fzf that is split into lines of text and that I can use the selected output for further processing, since it’s just text.

I just love how simple it is to stick anything together via the universal plain text interface in the shell and even pipe this text/dataflow through interactive tools like fzf, as you just mentioned.

phforms··on So you've installed `fzf` – now what?
I really like the suggested command `<my editor> $(fzf)` to quickly open files in <my editor> relative to the directory I am in. However, when I abort the fuzzy find with esc, it still opens <my editor> without a file input, which is not what I want, so I wrote a little script for my shell config to prevent this:

  fuzz() {
    file=$(fzf)
    if [ ${#file} -gt 0 ]; then
      nvim "$file"  # or any editor you prefer
    else
      :
    fi
  }
phforms··on Ken Thompson's 75 year project: A century of popular music in a jukebox [video]
In Ventura (13.2), you can turn off automatic updates in the “General” tab, then “Software Update” and click on the little “(i)” icon to the right of “Automatic updates”.

When I saw it the first time, it was unclear to me that I can even click on it, since it doesn’t look much like a button. They shouldn’t hide such important settings in a tiny icon or at least should have made it much more apparent that it is clickable.

Couldn’t find any settings related to the closed lid though.

phforms··on Vimium – A browser extension that provides Vim-style keyboard controls
I’ve been using Vimium for about a year now and really like it. I use it almost exclusively for fast keyboard-based scrolling, because I hate having to continuously rub my finger against a cold aluminium surface or spin a little plastic wheel to obliteration (maybe I’m weird). I know, arrow keys are a thing, but somehow I feel more at home with Vim keybindings.

Vimium has a lot of other great functions, but I don’t use them often enough to remember them, maybe I should.

However, I have to exclude it for a lot of webapps and websites where keybindings are used to trigger different events, which is sometimes annoying if you don’t know or forget about it.

phforms··on Symbolic Programming with Clojure [pdf]
There are some interesting notes and links related to the course on the instructors website: https://www.cs.utexas.edu/users/novak/cs378.html

Check out the course outline as well as the links on “Lectures with drawings”, “Vocabulary” and “Directory for Program Files”. There are also some links to Clojure resources in there that may be useful as well as some study guides and questions.

I might just try to work through the PDF, looks like a pretty interesting course.

phforms··on I still Lisp (2021)
Have you tried Calva for VS Code? Although I don’t use it myself (I use vim-iced with Neovim, which I like very much), I have heard lots of good things about it and it seems very easy to set up and use.
phforms··on Clojure Turns 15 panel discussion video
Same here, started using Clojure pretty much exclusively about a year ago and never looked back. It was rough to get to that comfortable state where I am now, having to find out how Clojure CLI tools work, what Java Classpaths are, how to properly set up my editor (Neovim), how to make sense of Clojure internals like “seq” and when to use which collection type (and when not to care), etc.

But it has also been a fun and liberating experience, after I went down the static type route for some years. I feel like Clojure just doesn’t get in my way and doesn’t force me to follow a certain style or paradigm; it provides many different choices (“providing more” instead of “taking away”) and treats you like an adult who can make responsible decisions on their own.

Although I missed the linguistic art of domain modelling through type definitions, spec gave me some of that back and even provides stuff like generative testing, which is pretty awesome. Of course, it is not meant as a replacement for static typing and has a different philosophy (see Rich Hickeys talks about it), but for me it is the best of both worlds.

The dynamic development style is something that I experienced before through learning Lisp/Scheme and it is also one of the thing that I enjoy most about Clojure. Coding “experimental”, building functions from individual pieces that I iteratively design using the REPL as my assistant (which actually means - as parent wrote - communicating with it from the editor itself, which we mostly do), feels so natural and I would miss it now that I am so used to it.

phforms··on Path to a free, self-taught education in Computer Science
I recommend taking a look at Processing: https://processing.org

When I was young, generating visual things was my gateway-drug to programming. With all the tooling, frameworks, workflows, concepts, etc. that you have to learn today in order to do even simple things, programming can become pretty overwhelming to someone who is just starting out. Processing is like a sandbox that is simple, but still keeps you close to the metal and provides a fun and liberating environment to grow your skills.

It may not be for everyone, which also depends on what your son is interested in building, but creative/artistic expression through code is something that I believe everyone should experience at some point.

There are many great learning resources for Processing that cover the whole spectrum from very easy stuff to more advanced projects that involve physics simulation, fractals, 3D graphics, etc. I especially recommend the video lectures by Daniel Shiffman, who teaches even advanced topics in a fun and engaging way: https://processing.org/tutorials

phforms··on Roam, Twenty Years Before Roam
There is a free version with a limited feature set available for personal use. Unfortunately, some essential features are missing (like tags and thought/link types), but at least you are not limited in the number of thoughts (= nodes) you can create, so it may be good enough for some people.

I’ve been using TheBrain (previously called “PersonalBrain”) for more than a decade now and got a lot more value out of its graph-based navigation and spatial linking concept than I would have with any of the text/outliner-based tools that have been popping up recently (although I use some of them too, for different reasons).

phforms··on Programming as Play
In my understanding, in order for an activity to count as “play”, the primary and _sufficient_ motivation has to be fun, even though there can be other motivators. I understand _fun_ as a motivation that is not goal-oriented and not forced.

So if you would also do it just for fun and fun is the main reason why you do it, I would say that “play” is an accurate description – which seems to be the case from what I read in your post.

However, my definition immediately rules out any activity enforced by a company that may be labeled as “play”, but actually feels more like work for the people involved for the reasons mentioned above. People may also feel forced to create play projects because they want to get hired by you – also not “play” in this sense.

phforms··on What I do when I feel like giving up (2015)
What I struggle with the most is not so much the struggle itself, but the repetition of the struggle. When I overcome the urge of giving up, it feels like a bitter-sweet victory because I know that with great certainty I will have to repeat this fight over and over again in the future and it will be just as painful.

Sometimes when I don’t see any progress, this thought is what really brings me down. It feels pointless and makes me want to do more enjoyable things.

One of the hardest things in life is to recognize when you really should give up, because you are holding on to something just because you want to persevere to reach some questionable goal in the future, but in the end it just makes your present more miserable. Of course, this is not to say that there are goals that are really worth the sweat and tears.

phforms··on Paredit 25 released, after 8 years
If you want to go nuts with structural editing you may also want to check out symex mode: https://github.com/drym-org/symex.el

It uses paredit (among others) for its low level functionality, but the vim-style modal interface allows you to manipulate the tree structure with single keystrokes in a precise and very expressive way. Keep in mind that you have to actively learn how to use it and it will feel awkward at first (similar to how vim feels for beginners), but I find the editing experience very pleasent and smooth after I got used to it.

Another thing I really like about it is that you can still switch to normal mode and it doesn’t get in your way like other plugins where I had to change my keybindings all the time because the amount of convenient shortcuts is still quite limited in the end. This modal switching to different editing contexts (or languages?) is something I feel should be explored much further.

phforms··on A few examples of Lisp code typography (2013)
Structural editing is one of the amazing things you get for free in Lisps, but I cannot imagine how it could be done without parentheses. I also don’t really find it more readable without them, but it might just come down to what you’re used to. Alas, this is a nice experiment nonetheless.
← PreviousPage 4 of 5Next →