Hacker News new | past | comments | ask | show | jobs | submit | madethemcry's comments login

Hey, while being on that topic and somehow related. There seems to be kind of a default company that creates those catchy tech marketing videos, explainers etc: https://sandwich.co

Examples you may know:

  - https://sandwich.co/work/playdate/
  - https://sandwich.co/work/auth0-2/
  - https://sandwich.co/work/slack-wfh/


Small world. Only yesterday I read that great comment from user adameasterling about credential stuffing in another thread [1]

> Troy Hunt is such a treasure. And for us web application developers, there is no excuse for not having protection against credential stuffing! While the best defense is likely two-factor, checking against Hunt's hashed password database is also very good and requires no extra work for users!

That user even listed 23andMe [2] as an example but it's from 60 days ago. This incident is referenced on the techcrunch article.

[1] https://news.ycombinator.com/item?id=38521106

[2] https://news.ycombinator.com/item?id=37794379


Great little story. Thanks!

NV is kind of a sentinel value to signal "not visible" and to differentiate it from actual plates isn't it? Only that it comes from external (the officer) and the systems involved are not aware of its special meaning which causes all the trouble.

Or how would you name this special value?

https://en.m.wikipedia.org/wiki/Sentinel_value


I had to look it up: CPAP = continuous positive airway pressure; to treat sleep apnea disorder

I do have sleep apnea disorder but probably a mild one as I don't feel exhausted at all. Reading your comment sparked the idea that it might be a good idea to verify the severity. If there will be any CPAP machine involved I will for sure think of its privacy impact.


That's interesting. Every normal white feels pale and boring after seeing that white. I'm not writing this as a joke, everything that is supposed to be white looks like a greyish, washed out white right now.


Most colours are relative to their surroundings anyway; there's a few cool optical illusions that illustrate that like https://www.washingtonpost.com/news/wonk/wp/2015/02/27/12-fa...


Same thing happens watching something projected on a screen (in a room of non-zero brightness). Imagine a zebra or a checkerboard projected on a white screen. When you're looking at the projected image, you really see "black and white" but only when you consciously reconsider and look at the margins of the screen outside the image, you realize the zebra or checkerboard's "black" parts are actually full white (possibly even a touch brighter due to LCD) and the white parts are just ultra bright white. It always amazes me that we're naturally able to perceive any (reasonable) relative gradient of dark to bright as though it's true black-to-white.


But eventually your vision readjusts to the old levels and normal whites feel normal again.


but some part of you will always be chasing that high again, always needing that hit, that rush


Yes! I thought the Safari example above had just dimmed the rest of the screen as a trick, but then I closed the window and it was all still grey and dull. I have been spoiled now I have glimpsed 'true white'.


At first I thought the page was playing a trick by applying a tint to the page.


First standalone components to get rid of modules and now signals. There is quite some innovation happening in Angular while being a really mature framework.

I enjoy Angular as much as I love React, Vue or Svelte. It's always about picking the right tool. And when thinking of Angular it's that batteries-included framework that is godsend for big enterprises where any decision given by the outside is something you don't have to battle for.

Often I describe Angular as a hidden champion. It's loved and trusted by enterprises while they are not really talking about it. Plus they hide all the package downloads behind their own npm caching servers like Nexus or Artifcactory.

On the other side there are tons of individual engineers working with React or Vue (for good reasons) and writing blog post after blog post. Maybe that's one reason why folks think Angular is dying? I don't see any signs of that though.


Angular is as little innovative for web frameworks as Firefox-ESR is for browsers. It merely keeps copying features from other frameworks - just many years later. It is a chronically outdated framework that always struggles to keep up with its competitors. It would be ok if those were deliberate design decisions, but if the features get copied some day anyway, what is the point? Why not do it the right way from the start?

For example, this update brings us computed properties, an essential feature for any complex performant web application that was made popular by Vue.js 10 years ago [1]. And now in 2023 we get it in Angular, essentially a confirmation by its devs that its lack had always been a design error.

I also cannot understand the "mature" argument. For example, it took five years for documentation on the integral `<ng-content>` to arrive [2]. This is something I'd expect from the side project of a lone programmer, not an enterprise-level framework.

The only upsides of Angular are its "batteries included" approach and the (debatable) default of RXJS, while the downsides are plenty (see other comments).

[1] https://github.com/vuejs/vue/tree/218557cdec830a629252f4a9e2... [2] https://github.com/angular/angular/issues/17983


What's the point? If you copy after there is some proof that the features work in practice, you are less likely to implement something that's going to make everything worse instead of better.

Frameworks are experimenting with thousands of new features which might improve something, but this doesn't mean that they do in the end.

People rely on Angular, this makes it important that everything is thought through. I don't want to become proof of concept tester for new features


> The only upsides of Angular are its "batteries included" approach

This basically trumps everything else though. Angular is likely going to have by far the lowest TCO for any projects with a 10+ year lifespan.

Like, sure, you need to watch 20 hours of Udemy videos to understand how to build an app, but that two weeks of work upfront is going to save you millions of dollars and multiple years of stress eating coffee pastries every morning.


Knockout.js, released in 2010, introduced computed properties to the web (slightly before Vue I think)


Not quite, its webcomponent implementation is ahead of React's, which is still pretty poor. Its PWA integration has been among the simplest and most seamless I've seen. It's easy to cherry pick examples either way.


Computed properties has always been a possibility in Angular, you'd just create a getter[0] based on multiple different values, works like a charm. This new way is probably faster, but I've honestly never had any issues with the other approach.

[0] https://www.typescripttutorial.net/typescript-tutorial/types...


The problem I had with getters in a fairly complex application (WYSIWYG editor) was handling mouse events, in particular onMouseMove - change detection was triggered on every such event, and the application was very slow. EDIT: It was slow because there were many getters based on other getters etc and everything was recalculated on each event.


I don’t think a computed property would behave any better. It sounds like your event handling should have been decoupled from change detection and only applied changes when necessary. This would probably be a problem in any framework.


This is an issue with zone.js + getters, I changed the key components to OnPush change detection.


Will the getter result be cached? If not, it's not a computed property.


I’d expect that it’s not cached. But then I would go ahead and call that memoization.


The concept is actually slightly different. With memoization you store a map from inputs to outputs. A computed property doesn't necessarily do this, it just caches the result of the last computation.

The important part is that a computed property tracks its dependencies and is automatically re-calculated ONLY when necessary. If it behaves differently, it's not equivalent to the concept of a computed property in Vue.


According to what definition?


Isn't that just semantics? Whatever name you give the feature "lazily computed and cached values in the context of web frameworks", previously Angular didn't have them (built in) and now they do.


Angular did have it, it is called RxJS.


According to the "definition" on the Vue documentation page for computed properties: https://vuejs.org/guide/essentials/computed.html#computed-ca...


That describe what a computed properly is in the context of Vue.


Are you aware what comment tree you are in? This whole thing started because GP wrote this:

> For example, this update brings us computed properties, an essential feature for any complex performant web application that was made popular by Vue.js 10 years ago [1].

So obviously the relevant definition is "what the feature does in Vue". What is your issue here?


I just don't like Angular at all.

Every version essentially breaks the previous one.

90% of the information online is outdated or incorrect. By the time you start a project on Angular X, Angular X+2 is out which makes many things complicated, some deprecated.

It's true that it provides a robust set of defaults and libraries but those are generally an overkill for most projects.

On top of that there's a higher compilation complexity in Angular which I have seen every single Angular project struggle at some point.


> Every version essentially breaks the previous one.

This is simply not true. It might have been true in the early Angular v2 days, but since v6 or so, updates are relatively trivial.

https://update.angular.io has your back extremely well. The trick is to ensure whatever third party libs you're using have also been updated, otherwise you're application may break.


Exactly, not only updating the application is an issue, but third party libraries quickly lose support for previous versions.


The Angular team has this nifty little update tool[0] that helps us through running migrations and preparing the code base for upgrades.

[0] https://update.angular.io/


> I don't see any signs of that though.

Even if we take it for granted that package downloads are hidden, how should we account for the ~40% drop in new questions in the Angular tag on Stack Overflow since its peak in 2018?

https://insights.stackoverflow.com/trends?tags=angular%2Crea...

In the Stack Overflow developer survey last year, Angular was 52% loved versus 68% for React and 63% for Vue. Can we find a way to dismiss this as well?

https://survey.stackoverflow.co/2022/#section-most-loved-dre...

On the freelancing platform Codementor, based on rough sampling, there have been about 338 Angular requests in the past year versus 2098 for React (6x).

Sure, Angular won't die outright because the enterprises that have adopted it will need ongoing support, but this seems like a weak metric for growth. For enterprises selecting a tech stack now, choosing Angular chops the hiring pool by a significant factor. I don't see evidence of advantages Angular offers overcoming that.

On the other hand, React has gained new life through frameworks like Next.js and maintained relevance. React's popularity is not just individual engineers making a disproportionate amount of noise on blogs. React hooks are the most established unit of construction for making components at this point across web, mobile, desktop and command line. That won't last forever, but there are too many signs of Angular trending out and React trending upward to dismiss.


In my experience people that hate Angular don't understand why they hate Angular.

Like, if you like Svelte, that's great. You will probably like Angular too.


The entire library is so spread out, with so many half-assed features.

When I wrote Angular I spent 2 weeks on getting something similar to `props.children` working. <ng-content> didn't work if the elements were dynamic. Outlet system was way too verbose.

The 2 way databinding is anachronistic and belongs in 2010.

The i18n system they shipped with is awful. No way to have translations in code, only in template. This breaks down very fast when building generic components.

The DI relies on https://www.npmjs.com/package/reflect-metadata, which makes the builder an opaque black box unlike a webpack configuration.

Because of the opaque CLI I've spent 2 weeks figuring out why every third dev build resulted in a 150 line long tsc stacktrace, and it turned out to be angular's 1.x types package. Would have been so much easier with a webpack configuration.


The props.children/slots issue is one of my biggest problems with angular. It’s really hard to use composition like you always do in react.

Another thing is, that angular components always wrap their template into a block element (like a div) in the DOM. So if you do some refactoring and split up one big component, the result in the DOM is different and your CSS may not work anymore. If you are using flexbox or grid, it may even be impossible to split the component.


> <ng-content> didn't work if the elements were dynamic

Usually if you run into problems like that, you should use templates.

Honestly, I'm not sure why `<ng-content>` exists vs templates. I'm sure there's a reason (verbosity?), but templates have way fewer caveats.

> Would have been so much easier with a webpack configuration

I agree. It's not hard at all to do a Webpack configuration of Angular. Just add the Angular plugin. (That's what the CLI does under the hood.) I wish they document it though.


The angular plugin for webpack is still an opaque black box.


Their own website renders the Angular "template" as a string with no syntax highlighting.

The framework is extremely overengineered requiring multiple files for "hello world"

It introduces a lot of unnecessary complexity for projects of any size

It uses invalid HTML, with attribute syntax including brackets and parentheses

Sadly It's just not a good framework


Sadly, those statements are objectively false.

> requiring multiple files for "hello world"

False (unless you're counting angular.json conf file for Angular CLI??)

> It uses invalid HTML, with attribute syntax including brackets and parentheses

And what, JSX is valid HTML????

FWIW Angular templates is completely valid HTML. (The only non-standard thing is that the attributes are case-sensitive.)


JSX can be syntax highlighted and linted easier. What if a variable that is being referenced is missing at that time in the component's lifecycle?

JSX makes so much more sense, making code the parent of the template, instead of keeping code and template as siblings.


This has been a debate since long before React or Angular existed. Keeping code and templates together typically makes sense to programmers while keeping the template as html in a separate file means you can edit it in any html editor, no special tools needed. I've always been partial to keeping them together, but working with designers who prefer it the other way, I can at least respect where they are coming from.


I mildly agree.

I note that Vue and Svelte have the same issue, and yet I rarely hear this criticism of them.


> The framework is extremely overengineered requiring multiple files for "hello world"

Is that a valid criticism?

Angular is for writing medium to heavy complexity applications. Sure, if you want to write hello world programs in it, then it is going to be complex.

This is a generic comment thrown about for all large frameworks.

> It introduces a lot of unnecessary complexity for projects of any size

This I agree.

> It uses invalid HTML, with attribute syntax including brackets and parentheses

True, but so does React and other frameworks. To me, it seems like this is a limitation of HTML rather than a transgression of Angular.

> Sadly It's just not a good framework

It is a good choice for a large organization, with team members changing and all sorts of other goodness.


>Their own website renders the Angular "template" as a string with no syntax highlighting.

That's not even a criticism of the framework.


Lots of web developers love complexity, it makes the work you do seem more important.


> It uses invalid HTML, with attribute syntax including brackets and parentheses

Brackets and parens are valid in attribute names.

Section 13.1.2.3 of the HTML standard[0] states:

> Attribute names must consist of one or more characters other than controls, U+0020 SPACE, U+0022 ("), U+0027 ('), U+003E (>), U+002F (/), U+003D (=), and noncharacters.

[0] https://html.spec.whatwg.org/#attributes-2


I wrote this on Quora 8 years ago, and it's still true:

https://qr.ae/pypHJw

It's my answer to what I can tell you agree is the most important question in software engineering - "What programming language has the shortest 'Hello World' program?"


We're talking about a framework here, not a programming language. I don't think the above poster's assessment about the amount of files needed for hello world offers a charitable conclusion either, given frameworks are not languages. The same file usage would apply to many other popular 'heavy' opinionated frameworks.


My point is, nobody writes Hello World webapps for a living. The number of lines or files is irrelevant. There is precisely zero value in this metric.


There’s a grain of truth in that thought. First impressions matter, frameworks aren’t exempt from that basic psychological fact. If you treat ’complexity of hello world’ as a proxy for learning curve steepness (again, people do things like that subconsciously), you may end with a very wrong assessment very early. It’ll probably tell more about the assessor than the framework but it’s a real risk.


Indeed - if my goal is a minimal Hello, World, I don't even need javascript, I can put "Hello World" in a text file and name it index.html.

Problem is, this doesn't lead me to solve any harder problems.


Sorry, I misread your comment.


> In my experience people that hate Angular don't understand why they hate Angular.

One of my major annoyances is the templating language. Completely unnecessary and over complicated, compared to JSX. Just another weird syntax to learn with its own arbitrary limitations and quirks.

I think it’s a good indicator of the overengineering surrounding Angular overall.


I see it as the opposite. JSX is a convoluted mess, and does not make for easy reading due to being mixed in with everything else, while Angular promotes clean separation and promotes a template language like many others. It's usually React codebases that I've seen overengineered due to lack of features, while Angular codebases are very same-y - that's a good thing from maintenance perspective.


Obviously there's some matter of taste, but JSX is simpler in my mind, because it's just JS with a tiny bit of syntactic sugar to have nicer function calls for components. That's it. Anything you can write in JS, you can write in JSX and it works. You can debug and use all the tools you'd use for regular JS.

With Angular templates, there's an entire new language, with its own weird syntax ngIf/else, ngSwitchDefault, let-*, pipes and other components that get pulled in based on whether you forgot to set up correctly or not in modules far-far away somewhere in the codebase, brackets of different sorts having different functions and just a lot more stuff to remember. And if it doesn't work, you're gonna get a silent error most of the time with no easy way to set a breakpoint to investigate.

I also don't believe there's any real separation between the HTML templates and the Component class, just because they're written in separate files. They're just as tightly coupled as any regular React component, just harder to follow. I don't think I've ever seen an Angular component, where you could swap out the template, without making simultaneous changes to the Component to accommodate it, which should be possible if they were truly separate.


I personally find JSX terrible with its very-very strange arbitrary quirks.


And you say the same of Vue and Svelte, I assume?


I haven't had the chance to work with either much, but at the end of the day, a new new syntax just for doing fancy if/else/for seems unnecessary. I believe Angular's hand was forced since JS at the time didn't have as ergonomic syntax as it does now, with fat arrow functions, .map and other niceties.


Having mutability/2-way-databinding makes angular hardly benefit from using TypeScript. State is just so much pain and it is hard to make impossible states not representable in the types.

Angular requires a lot of extra steps to get the templates properly type-checked (and you even need an editor plugin for that). I can't even name which non-standard entries in the tsconfig are necessary to have all templates checked entirely.

Most people use the cli to generate new components. Where in other frameworks, you just create a new file, maybe use a snippet and call it a day, the cli yields a test, scss, html and the actual component code as separate files.

Having worked with angular and react for 5 years in parallel, I'm pretty certain that I'd never touch angular again. The DX is so complicated in comparison. Despite forcing you to use TypeScript, angular is the framework that benefits the least of it.


I like Angular, but approach of doing the same thing in 3 different ways (promises, rx and now signals) make codebase more complicated and adds additional brain load.


Compared to React with Contexts, hooks, redux, reducers, Relay, Recoil….


A 3MB JavaScript runtime blob right out of the gate? ("Only" 275KB needed just to first render, like that's laudable on its own.)

Other frameworks have already loaded dependent REST/GraphQL data before Angular has even initialized.

Take someone on a mobile device and put them at the edge of cell signal range either because they're out an about or stuck in the bowels of a building with thick walls. Suddenly 275KB-3MB matters a lot more and the user is staring at a blank screen for 10+ secs.

Then there's the boilerplate, all the metadata you need to add to each component that has nothing to do with your problem domain.

And then there's runtime speed compared to alternatives.

While I'm truly happy to see Angular incorporate signals, now devs need to learn when to use signals rather than rxjs. I know now that it's the difference between needing async or not, but if you go down one path, it's a PITA to tear it down and rewrite for the new path.

THAT's why I don't like Angular, though I'd happily choose Angular over React and Vue, both of which are a prone to reducing codebases to big balls of mud due to their "flexibility".


How about the extra 30 seconds to couple minutes for CI/CD to make a production build for static deployment? V16 added the ability to put esbuild/Vite into the mix, but it still builds WAAAAAAAAY too slow compared to modern alternatives, especially if you're on v15-.

ng serve for development is a pig too. Save-reload cycle is far from instant.


I can just note that our Angular code seems to be much harder to maintain than our React code.

The React ecosystem also improves faster (yes, sometimes a bit too fast).


> I can just note that our Angular code seems to be much harder to maintain than our React code.

A big part of maintainability comes from the quality of code and/or existing experience with the two frameworks, not the frameworks itself.

I work at an Angular only shop, if we would write some React it would be probably harder to maintain for us than the Angular ones.


Well, the simple explanation is probably that the author isn't aware of `lsof` and might even learn something from your comment.

lsof isn't something you automatically pickup if it's not your daily business (like so many other things). I for myself often forget about it but I have some usual ports to kill. So these days I simply search my shell history by port to find lsof again.


I keep finding uses for more of the ls family: knew lsusb and lspci for ages, lsof is handy, and most recently I learned lsblk which is always worth using before dd'ing an image onto a disk, etc.

Back in the DOS era, there were few enough files on the system that I could just explore around and learn what everything did. That's no longer practical, but what's the alternative? There doesn't seem to be a "top 100 commands to get familiar with", or whatever. The ss64.com pages are pretty great, but...


ls /usr/bin

Choose a random entry you don't recognise and open the man page for it. There's not that many on most systems - I mean, there's likely a couple hundred or more, but some are convenience symlinks and many you'll already know.

For things you may not have by default, there's a few "awesome" lists available, like https://github.com/agarrharr/awesome-cli-apps


Hmm, tried that but that directory seems to contain ~3000 files on my old Ubuntu.


1621 on Pop, which is still about 15x more than I can reasonably remember. Hence the whole problem, it's not digestable unless you make digesting it your whole hobby. Ah well. Thanks for confirming, I guess.


I've known about LSOF and about kill but I've never put them together like this. I find his tool compelling simply because now I don't have to remember all this stuff.

What we really need is a tool like this for Windows. Find the process that keeps this file open and kill it. It's so annoying when I can't delete a file because some process has it open but I can't tell which one.


`handle` from sysinternals gets you some of the way there. Maybe all of the way there? (I haven't used Windows in over a decade)

https://learn.microsoft.com/en-us/sysinternals/downloads/han...


Powertoys for Windows has added a "What is blocking this file?" feature recently.

https://learn.microsoft.com/en-us/windows/powertoys/file-loc...


Useful, but talk about too little too late! The fact that this is an external tool, not part of the operating system, and that you are expected to, in 2023, blindly guess which application is holding your flash drive or documents open is pretty pathetic.


> What we really need is a tool like this for Windows.

Nevermind Windows, I want an app like this for android.


True, but there's no shortage of Stack Overflow answers: https://www.google.com/search?hl=en&q=kill%20process%20on%20...


> lsof isn't something you automatically pickup if it's not your daily business

Its a good thing now we have chatGpt to help us :)


Important to note that it's "zero-alcohol beer" though.

I wonder how to put the alcohol in there. Crystals? Is that a thing? Or just ship the ethanol separately in a small bottle like a sauce?




How about just putting a shot of alcohol in it with the water?


I was wondering this. Thanks for the info!


Why put alcohol in there instead of being glad there's none in there and you don't need to filter it out?


If I'm drinking calories in the form of fermented grass juice -- or anything that isn't plain water -- it'd better be delivering some sort of effect having substance, be it caffeine or alcohol.


Why?


People like to drink alcohol.


My thoughts on video editing:

I'm a dad of two young kids and my photo hobby transitioned into recording random videos of our daily life together. Just for us. Maybe sharing with the close family. I use my Camcorder, Phone or sometimes my Canon R6. In that order.

First thing I solved quickly: Storage/Backup. Got a NAS and done. Second thing to solve was more complicated. What to make with all those videos I record? I'm a kid of the 80s. So VHS-sized videos are kind of my guiding star from the past. 30min-60min and clips are shown in order I recorded them. This means usually I throw videos into iMovie and create ~30min clips themed after the age of the kids or the seasons. Add some transitions and text. That felt good for the past 2-3 years.

I then enjoyed editing so much that I got Final Cut Pro (FCPX). I wanted to learn some advanced editing in my very spare time. Some tracking, some color grading, some faster cuts. But learning was slow as hell being busy with many other duties. The raw video material piled up in the past months as I didn't want to admit that I should go back to iMovie so I just forced myself through FCPX. Sometimes with joy, sometimes it feels like a duty and often loose myself because of the advanced tool FCPX is. I already recorded less because I sense the pressure of every new recording on my shoulders.

The thing that I recognized only a few days ago: The initial idea to create VHS-sized movies was ill-advised. That pattern put the pressure on me because it always involves most/all recordings. Selection is super difficult when I want to showcase what happened in an entire season without having a specific topic. I should see the raw videos as my VHS. I should make it accessible on my TV or somehow shareable. That's it. Skip that stupid editing of everything. Nobody cares for that anyway and you can watch the individual files anyhow.

What I should do instead: Pick a very specific topic. Like the first steps of my kids, a birthday party or highlights from our vacation. Something short enough while being really worth, so I spend my precious hobby time with joy.

Maybe that helps some other video recording mum or dad out there. I'm glad I came to that insight so I can enjoy reading articles like the one linked here again.


I'm a father of two young ones, and I faced a similar story as yours. I want to have nice, "cinematic" videos of my kids, instead of just random clips. The hardest part is putting those random clips together to tell a "story", especially if I'm the only one filming.

Like you, I've found that focusing on small topics, like a day out on the balance bike, or a birthday party. There are a few YouTubers that focus on making travel videos, and a lot of the tips that they present translate pretty well, such as making sure to have a lot of different angles.

I've also moved to Davinci Resolve, as it's free. Hoping to one day be doing enough editing to justify getting the studio version!


Have you tried iMovie's new Magic Movie mode?

https://www.tomsguide.com/news/imovie-30-features-magic-movi...


Me too!

I don't trust to open my network to the internet though. So I've created a VPN to connect with my ubiquity network from mobile. Sadly, I can't share photos with other folks or allow my family to participate easily.

I'm a layman in terms of networking. I always wonder how people can sleep if they open their home network. In this case either by using QuickConnect or forward ports and access the machine through a custom domain secured by TLS. I mean that would be perfect but I just can't convince me to take that burden of maintaining that open door into my network.

I've read about creating sub networks with the power of ubiquiti (or any other router), but I will never trust anything I configure there either because I can't confirm it's secure.

So I'm stuck with Google Photos additionally to Synology Photos because of the convenience of sharing.


My solution is to not open it. Use the cloud for browsing, use the home machine to copy the files down. You rarely need to browse on the home machine, it's really just there if the cloud provider ditches you.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: