HN user

vinodkd

187 karma

armchair architect, wannabe language designer

Posts0
Comments109
View on HN
No posts found.

not in number of subscribers - they know the channel already, but in quality of content and production values. I think that's what OP meant.

F9 could get 2M subscribers by just doing product reviews because they're an ecommerce website in Canada like Revzilla is in the US, and that Youtube channel (https://www.youtube.com/c/RevZilla) has 1.5m subscribers.

F9 has a few product reviews, but they have a ton of just top quality content that shines for not just the motorcycle content, but how its presented, the attention to filming and editing, etc.

Oh and if you're interested, they even have a video about cheese (it was an april fool's prank, but still informative about cheese).https://www.youtube.com/watch?v=a1T7NzCtWHo

Just read it like a novel. Ignore the exercises. What struck me that it took 8 or 9 chapters until they even presented a loop, and it was none the worse for doing that. Actually helped my imperative lizard brain evolve.

Yes, its a book that uses lisp, but its not a lisp book. Its about programming techniques, i felt.

Of all the books that are usually recommended to be read and nobody actually does, this is the one that i actually read and liked.

Funny, I arrived at this "all software is.." piece last week.

Hypothesis: All of software *is* about change management ----

It dawned on me that all the software design efforts - Design patterns, programming styles, management practices - are all geared towards one thing at its core - managing change. For example:

* Command pattern: Figure out all the things that can be called and instead of a giant if/switch, look them up by name and call them. That way when you need to *change* the list of things you want to call, nothing else is affected.

* Structured programming: Keep the common code in one place and call them from many places. That way when the common code *changes*, we can contain the change to one place

* Object Oriented Programming: Keep the data and behavior common to one actor in the system contained in an object/class so that when it *changes* we have to change only that thing.

* Functional programming: *Changing* data is bad. Instead create copies of data and change them.

* Scrum: It's hard to predict too far into the future because things *change*. So let's try to plan for just the next n weeks.

but maybe, they'll end up learning anyway? one thing i realized when i went back to studying online is that i was no longer the student who needed to prove something to someone else, and the typical test annoyed me. I get that this article is about a teacher trying to find out how much their students have learned a subject, but maybe that needs to change?

The second para of the article addresses this, as does the summary at the bottom. Maybe read the article and respond if your concerns about this particular article are still valid? Maybe it applies to the general "X is a code smell" article.

Smells don’t necessarily indicate actual issues, just patterns that are likely to be used incorrectly and thus warrants extra care.

From the article: > These rules may sound complicated, but really, they are about understanding the fundamentals of how a computer works.

... and from the post that the article links to: > Understanding String vs &str implies an understanding of the ownership system, which implies an understanding of the lifetime system. That probably means that you’ve been exposed to pointers, references and perhaps even aliasing. There’s usually a discussion about mutability intertwined here. Gaining an intuition of data types that represent text benefits from understanding encodings, which benefit from understanding how CPUs operate.

I’ve yet to find a way through this for complete beginners. Learners with that already know another systems programming language have a distinct advantage here.

This, IMO, is the key to understanding why Rust is hard to learn: it was written as a systems programming language, and we now expect it to be more than that. I nodded my head in agreement as I read the intro to Rust until I reached the explicit use of lifetimes. To me that was where the abstraction got leaky. If your core abstraction of borrowing needed to expose the fact that the compiler uses lifetimes and needs a hint from time to time, you're saying explicitly that your audience are system programmers and they get that no abstraction is clean.

Take that up a few levels of abstraction and application development with Rust is hard. Maybe the rust community should just say: "Yes, its hard in the beginning, but its worth it if you stick with it. Welcome"

PS: I personally found it hard to learn Rust when I was looking for a static single binary generating language for my side project, and went back to C (please don't judge, its just familiarity). But I see what Rust can do.

Not sure I agree. I didnt know about gitjournal until vHanda's post, but immediately saw how it could be a replacement for my use of Google Keep (which I use when I'm on the go vs at my laptop). And there was already an exporter for Google Keep. I'm guessing that exporter benefited from a spec being available.

Your point about "if you're the only one using it, just use it" does apply, but sometimes we do find ourselves being more successful than we originally expected and defining things via a spec is not a bad thing.

didnt mean it as a joke. I did not have another label for my pickiness as you call it. i'm still learning these terms via my child who has been diagnosed, but the thing that bothered me is that it was misaligned. i have similar issues with magazine stacks that are not aligned, for example. i thought that was what was called mild ocd, hence used the word. make what you will of that.

minor nit about your website: the top menu's css might need adjusting. On my laptop (dell xps) the last letter of each word shows up in the next line, like so:

    Abou  FAQ
    t     s
Triggered my (minor) OCD!

Edit: added minor due to comment below in an attempt to clarify. The wierd text placement does bother me, i'm not joking. but its not that bad that i cannot get past it and read the rest of the website. thought i'd let the OP know; dont mean to poke fun at people who have been diagnosed with OCD. i'm still learning these terms via a child who was diagnosed with ADHD.

I love new languages, and I love that you have all the basic elements of webapps as first class citizens.

....and then I saw that the page is still written using React and db access uses Prisma. They are not dependencies, you have to now about them, and their syntax and how they work.

What is the incentive for me as a developer to learn both them and wasp? Especially since there are multiple places where the wasp layer is a thin layer over the underlying capability supported by those dependencies.

Dont get me wrong. I say go bigger and make it a full-fledged DSL that generates react and prisma code without making them __visible at all__. That way nobody has to learn anything but wasp. Sure, you will be limited by whatever your underlying implementation layer is, but you can now switch from them easier, and its likely to last longer (there __was__ a time before React, and like will be one after too).

Can you be the +1 layer that people dont have to look under? More specifically:

1. Can you have inline .js files? Even better: Can you bring the page content _into_ wasp's syntax? It currently says a webapp has pages and routes, how about expanding to say a webapp has components, elements and text?

2. Same question for storage schemas and migrations. Would that help with NoSQL integrations (vs expecting Prisma to support them)?

3. Can you eliminate the "Note:" sections in https://wasp-lang.dev/docs/language/basic-elements? Those are the leaks in the abstraction called wasp. And if the answer is no, then should there be a better abstraction?

How to Be Clear 5 years ago

Advance apologies for coming across strong, but for an article advocating clarity, it is utterly devoid of an examples of how to actually achieve it. If your title starts with "How to..." you should SHOW, not TELL, and the article was a whole lot of telling. And the one example that was accidentally there - the image at the top - did not clarify if it was a good one or not (see discussion here, for example).

Others have found issue with the grammar and sentence structure of the article, I found it totally opaque.

Show me an example of a mental model (or the absence of one). Pull an excerpt from the Times or the economist and contrast it with another publication that is not clear. Wouldnt this help us "understand, know and" eventually "do"?

And given that the advice is to think about your audiences and communicate with purpose, please do ask yourself: What is the purpose of this article? If it's to tell us to strive for clarity, please show us how, don't just tell us to do so.

Thanks for responding. Actually, I dont think Pikchr needs to have more features. "Toil" should tell people that they should use a different tool, IMO, so that Pikchr is used for the intended purpose - small diagrams to go with Markdown documentation.

The parallel to Markdown is apt, since it too does not do everything HTML does, and that's good (tm). The use of "same" and "last" also forces a locality that would be lost if the diagram were large.

I gave an example of a box syntax that allowed defining a label aligned vertically, but I did so to illustrate that while such an extension could be done, the library author could not possibly imagine all such attributes that users might want.

The default answer to this is an extension mechanism, i.e, you allow users to create their own primitives, but that might be overkill for the pikchr use case, and would possibly require going past the "single pass through lemon produces a c file that can be integrated into any c project" model.

The other idea - stolen from Markdown - would be to "fall through" to SVG at will by allowing svg syntax as also being valid in pikchr, but I dont know that SVG is as forgiving as HTML to do that.

I agree, and you can see this even with "simple" diagrams. For example, the Pikchr examples page[1] has a SQLite architecture diagram, and if you click through to the source (like the idea of "click to see source" btw), you'll find lines like this:

    line invis from 0.25*$margin east of last.sw up last.ht \
       "Backend" italic aligned

...which is an invible line used to create a label for the box that's vertically aligned. This is the kind of "toil" that adds up to what you describe. Ideally, this should be a feature of the language itself, something like
    box "label" valigned nw
but you cannot anticipate every bit of adjustment users would need to produce a visually appealing image, since that's subjective.

PIC has macros[2] that somewhat make this easier, but as things get larger you'd still have the issues you mention, and you're trading one complexity (hand drawing visually appealing picture) for another (maintaining more complicated code for local visual appeal). I dont know if pikchr supports macros (which are more like functions since troff is a full fledged language, and less like svg symbols afaict)

1: https://pikchr.org/home/doc/trunk/doc/examples.md 2: http://floppsie.comp.glam.ac.uk/Glamorgan/gaius/web/pic-14.h...

No, this is different. Graphviz is primarily about laying graphs out, and secondarily (if that) about using them to draw diagrams. This is an "open canvas" diagram description language and tool.

The closest I can think of is ditaa (ditaa.sourceforge.net), but ditaa's front end is completely different - it requires you to actually "draw" the picture using text. pikchr (and PIC before it) requires you to describe the picture using words and it will draw it for you.

Plantuml and Websequencediagrams have frontends that are similar, but they are constrained in domain-specific ways. This is any 2D picture (well, within the primitives supported)

Plantuml, IIRC, uses Graphviz in the backend and is in impressive attempt at hiding that fact :). I have spent many a hour trying to get Graphviz to lay a diagram out they way I want it to before learning that the one true way is to let Graphviz be itself - a displayer of the network you described to it, not a displayer of the diagram you want to see.

Kudos on the elegant execution of an interface to explain architecture and system behavior with layers and sequences!

Suggestions for v2: How to show v2 of system has changed since v1, and handling requests from your users to version control their diagrams. Nice problems to have!