For the best experience on desktop, install the Chrome extension to track your reading on news.ycombinator.com
Hacker Newsnew | past | comments | ask | show | jobs | submit | history | more DagAgren's commentsregister

Both. If you have only one, you have a shit product nobody wants.


I'm not advocating for garbage looking products. All I'm saying is that lets be tolerant on looks because functionality matters the most


You can be as tolerant as you want, that's not how things go for iOS apps. It's certainly not how things go on macOS except when there are no available alternatives.

Windows, Android, and the web, constantly changing so that there's never really been any sense of stability, blind a lot of developers to the fact that good design is both functionality AND looks.

When people complain about designs of controls being out of date, they don't only refer to looks. They refer to how they feel, behave — or more succinctly, don't correspond to the expectations set up by the rest of the system.

To reduce the debate down to looks vs. functionality is reducing things down to the wrong level, missing the forest for the trees, and ignoring the user — a person who often isn't able to express what they need but knows what they want, not often realising that they're the same thing.


If you have those resources, there are far more effective ways to track people that do not require relying on the contact tracing system.


Fair point.

The objective is far less practicality or usefulness than of determining possible attacks on the anonymous contact tracing method. Also incidentally highlighting the power and threats of widely-distributed surveillance networks. Inference is powerful.


Yes, because they actually designed their system so that it can not be used for stalking. Go read up about it.


Well, they failed then, because it can definitely be used for stalking. Having covid and distributing your daily keys makes it much easier but not necessary.


If you have COVID you should not be distributing your daily keys, you should be staying the fuck inside.


COVID can be asymptotic for long periods. This is the whole point for such systems to exist in the first place.


Yes, and you reveal your keys for the past when you are diagnosed, and then you go inside, stay inside, and do not reveal any further keys.

This is not useful for stalking.


Sure it is, you just need imagination. Say that you are a stalker, you (or someone delegated by you) passed near your target and got h(daykey, time), your target happens to go to the hospital for covid a while after, so you have the daykey of your target for multiple days and all of their h(day, time). You detect that it was your target that went into the hospital because one of their h(daykey, time) matches with the one that you have stored, in addition you know if your target passed nearby you/one of your friends/one of the locations where you have put some cheap bluetooth phones and the exact day and time that this happened. Intentionally infecting the target will covid will help this whole thing but it is not necessary.


This is just in no way a realistic attack scenario. It gains you nearly nothing for a massive amount of work.


You said that it can't be used for stalking. I said that it can and that it is difficult rather than impossible.


Instead of wasting everyone's time arguing pointless semantics, have you considered actually engaging in constructive discussion?


You really should stop blaming others for your own failure to properly convey what you mean.


> Most people have an intuition about particles

That intuition is also most likely completely wrong.


And they are mainly used for breaking the law.


Debatable, but even if this is true, and?


That maybe "censorship resistance" isn't the universal good some people make it out as. Maybe the people who benefit the most from it, and who make up the majority of those who actually benefit, are criminals. Maybe it's not a great idea to make tools that make it easier for criminals to commit crimes.


> That maybe "censorship resistance" isn't the universal good some people make it out as

How is it not? Not having it means that certain organisations and governments will be able to remove your ability to see certain things.

> Maybe the people who benefit the most from it, and who make up the majority of those who actually benefit, are criminals

Again, debatable. See all kinds of videos that are removed from youtube because either youtube thinks that they violate their tos or because someone makes a copyright claim on them for example.

But even if the majority of these who did benefit from it were criminals, I will ask again, and?

> Maybe it's not a great idea to make tools that make it easier for criminals to commit crimes.

How so? I would assume that most of these who make such tools have some form of ideology similar to anarchism and who do not think that every action that the government designates as a crime is morally evil. In addition a lot of these people believe that certain elites and government officials are the ones committing the biggest crimes and use such tools to enforce transparency and benefit from censorship resistance and anonimity.


> How is it not?

Because it helps criminals commit crimes. Not crimes as in "oh the government doesn't like you doing this", crimes as in theft, fraud, blackmail and child rape.


> crimes as in theft

You can't steal physical objects via TCP due to censorship resistance.

> fraud

If anything censorship resistance helps prevent fraud - consider someone deleting comments that talk about how their service is a fraud.

> blackmail

I do not see how censorship resistance has anything to do with blackmail.

> and child rape

I do not see how censorship resistance can help a criminal rape children via TCP.

But even if all of these were true, you are forgetting about the positive parts of censorship resistance.


> You can't steal physical objects via TCP due to censorship resistance.

You can steal money, and passwords. And you can steal things in the physical world and sell them over the internet.

> If anything censorship resistance helps prevent fraud

The entire Bitcoin economy gives a massive counterexample of this.

> I do not see how censorship resistance has anything to do with blackmail.

Censorship-resistant digital currencies like Bitcoin are massively used for ransomware and other forms blackmail.

> I do not see how censorship resistance can help a criminal rape children via TCP.

You are not so stupid that you would think anyone was ever making that argument. Do not feign stupidity, that never makes you look clever or convince anyone of your argument. I am ignoring this one and giving you a second chance to give a good-faith answer.


> You can steal money and passwords

Censorship resistance somehow helps you steal money and passwords via TCP? How?

(Regardless, I am not buying this whole "stealing numbers" thing)

> And you can steal things in the physical world and sell them over the internet.

Sure, how is censorship resistance relevant to this?

> The entire Bitcoin economy gives a massive counterexample of this.

Do you know of a lot of people who put advertisements of their companies on the blockchain?

Regardless (and I am going on an off-topic tangent here), anyone dealing in bitcoin should be aware of the fraud issue. You are not going around asking people to ban stoves because you decided that it would be a good idea to put your hand on one despite being aware of the potential complications.

> Censorship-resistant digital currencies like Bitcoin are massively used for ransomware and other forms blackmail.

Censorship resistance has again nothing to do with this. There is nothing stopping someone from including some form of "chargeback" command in a censorship-resistant cryptocurrency. I can't say for sure why this has not been done but I presume that most cryptocurrency users would not like to give the ability to a centralised institution to take their money away from them (I know for sure that the freelancers that use paypal are not too happy with this).

In addition there are a lot of real life services that do not offer the ability to chargeback yet they do not offer censorship resistance - western union for example.

> You are not so stupid that you would think anyone was ever making that argument

Rather than insulting people because you think that they misunderstood your post why not try to elaborate instead?


"Giving out money for free" isn't really something that make me think something is LESS of a scam. Giving out free money is literally what every every cryptocurrency scam does at first.


Good point.

I'm not an expert on cryptocurrency scams, but if anything, I think they'd generally give away their magical internet tokens rather than US dollars. (Though I suppose magical internet tokens can be exchanged for US dollars so perhaps there isn't that much of a difference?)


Well, that is exactly what they are doing here too.


I am convinced that monads induce a very specific kind of brain damage that makes a person incapable of ever explaining monads.


Start with a container.

    M a
Then add a way to put things in the container.

    a -> M a
Then add a way to use the thing in the container.

    M a -> (a -> M b) -> M b


Well, you see, that's one of the problems... monad implementations don't have to be "containers", or at least not the way most people mean. This was one of the critical errors in many of the aforementioned "tutorials". IO, the quintessential monad, is not a container, for instance.

(A nearly-exact parallel can be seen in the Iterator interface. You can describe it as "a thing that walks through a container presenting the items in order"... and yeah, that's the majority use case and where the idea came from... but it's also wrong. What it really is is just "a thing that presents items in some order". It doesn't have to be from "a container". You can have an iterator that produces integers in order, or strings in lexigraphic order, or yields bytes from a socket as they come in, or other things that have no "container" anywhere to be found. If you have "from a container" in your mental model then those things are confusing; if you understand it simply as "presenting items in order" then having an iterator that just yields integers makes perfect sense. A lot of the Monad confusion comes from adding extra clauses to what it is. Though by no means all of it.)


I wouldn't over-think it and over-describe it.

The "aha" realization that the "container" can be an ephemeral concept and not resident at run time can come later.

FWIW, I think of IO as a container: it contains the risk of side-effects within. All the examples you gave are containers in their own way.


The problem is telling people it's a container is "over describing" it. We don't need to hypothesize about that. We have the space suits and burritos to prove it is not a good didactic approach. It is not removing from the definition to simplify, it is adding to the definition, exactly as I carefully showed in my description of "Iterator". An Iterator is "a thing that presents a series of items". It does not simplify the discussion of Iterator to say "It's a thing that presents a series of items out of a container, but also, it doesn't have to be a container". It's not the first definition that's "overdescribing", it's the second.


Containers make sense.

Abstract computer science doesn't.

Part of why Haskell appears like such an implacable curmudgeon is the predilection of its community to believe that users must grasp type and logic theory to use it.

They don't.

Just like they don't need to have a mental model of their computer to write software for it.


In my experience, not having a mental model of the computer you are going to run your software on will bite you on the ass sooner or later.


Countless mobile apps and web sites have been made with nigh-zero understanding of the VMs, rendering engines, or underlaying machine architecture.

It's not the 80s anymore.


I'll just point out that neither of you have managed to really take a single step towards actually explaining monads.


I'm not trying, so that's not a surprise.

This has inspired me to try to update my post on the idea in a side window, but it's been sitting on my hard drive for over a year now and probably still has a ways to go yet.


Yes, well, good example.



Pretty sure my point still stands.


I've had good luck with explaining it as a characteristic of a programming language. In a language consisting of sequences of statements with bindings and function calls, we expect that

f(x)

is the same as

a = x; f(a)

and the same as

g = f; g(x);

That's the monad laws. Whatever craziness you want to put in the semantics, those are properties you probably would like to preserve in your language.


I think I understand monads less now.


Do you really understand them less, or has it dislodged ideas that you thought were true? Moving towards zero is not always decreasing.


I'm no expert, although I think I remember that a Monad is basically just like allowing a sequence of statements to be executed. Like executing a code file ;)

Functional languages are really weird, for instance it's possible to switch line order of statements and the compiler will still figure out how to stitch that together. I think even JS in parts has or at least had that behaviour. (Actually that's useful when having mathematical formulas that are interdependent and you're too lazy to order them topologically by dependence)

On the other hand, just executing a sequence of commands in order to do I/O is only a normal thing to do since recently as far as I understand. The sweet spot for FP is IMHO something like React where state is strictly separated from the functions. (Imagine writing Hello World using Normal Maths)

(Please correct me if I'm wrong, which is probably quite likely ;))


In practice, meaning, let's let him kill a few of them before we jump to conclusions?


iOS still exists.


Yes, but iOS requires you to use Objective-C (or Swift) just like Android requires you to use Java.

I know the comment put Objective-C right next to C and C++, but it doesn't belong there. All platforms should have (at least) C interfaces, not requiring C++ or even Objective-C.


It doesn't. You can access all Objective-C features from C, it's just a bit of a pain. There is a C interface to the Objective-C runtime.


They're still Objective-C APIs. There's a C interface to the Java runtime as well.

The point is that it shouldn't be a pain to use these interfaces from C, concepts from ObjC/Java/C++ shouldn't leak into them.


That would mean either implementing your entire API twice, or adding layers of pointless indirection, for extremely little gain. It is just not reasonable.


You're assuming that people want to program applications in "platform languages" like Objective-C or Swift or Java or Kotlin. That's generally not true. They want to use their language of choice.

That's why C interfaces are the reasonable choice, you can interface with them conveniently from pretty much any language and if you want a more idiomatic "pointless layer of indirection", you can build it.


Making a performant list view is actually a very non-trivial task. All the weird complexity you see in the API is there to make it possible at all to have large list views that do not absolutely kill your phone.


That’s only necessary because a View in Android is ridiculously heavyweight and slow.

I ported a game from iOS to Android and just wrote simple C wrappers for all the views. I didn’t bother much with optimization, but lists with hundreds of complex items worked just fine, no lazy loading or recycling necessary.


Consider applying for YC's Summer 2026 batch! Applications are open till May 4

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

Search:

HN For You