HNHacker News
TopNewBestAskShowJobs

atomwaffel

499 karma · joined March 31, 2015

submissionscomments
atomwaffel··on Site requests bank logins for online purchases
Oh right, thanks! It seems they're such a strong competitor that I've never even heard of them. And they still support nowhere near as many banks as Sofortüberweisung, although I appreciate that these things take time (and there are a lot of banks in Germany).
atomwaffel··on Site requests bank logins for online purchases
> I thought in Germany you used one-time disposable TAN numbers for this purpose?

We do, Sofortüberweisung just acts as a man in the middle and passes through all TAN requests from the banking website to the client. They can't transfer money out of your account without your consent, but they can do just about anything else that doesn't require a TAN.

atomwaffel··on Site requests bank logins for online purchases
Yes, the same system exists in Germany too (confusingly alongside Sofortüberweisung). It's called Giropay and it works the same in that you sign in on your online banking website and the wire transfer is guaranteed by your bank, not a third party.

It's nice and works well. All would be great if it weren't for the fact that it's only offered by some banks (mainly cooperatives I think) and only accepted by some shops. Why the German banks have tried to sue Sofortüberweisung out of existence instead of implementing their own universal system that undercuts Sofortüberweisung's merchant fees (0.9% + €0.25 per transaction) is beyond me.

atomwaffel··on Hacker fakes German minister's fingerprints using photos of her hands
The talk is also available with an English translation: https://youtu.be/VVxL9ymiyAU
atomwaffel··on Principles we use to write CSS for modern browsers
My approach is to slap myself in the face each time I need to use !important. That's enough to prevent me from slipping into bad habits but leaves me with an option if rewriting my CSS to work around somebody else's (or my own) hacks would be more painful than a slap in the face.

I do occasionally get strange looks from my colleagues.

atomwaffel··on Weaintfoundshit.js
> querySelectorAll returns an empty array if there are no matches, you don't need fancy string messages or errors for that.

An empty NodeList[1] to be precise, which is sort of kind of like an array in that it has a length property and you can access its elements with index notation (`nodeList[0]`), but it doesn't inherit from Array.prototype, so it doesn't support methods like `forEach` or `map`.

[1] https://developer.mozilla.org/en-US/docs/Web/API/NodeList

atomwaffel··on Show HN: Hacking airplane headphones
Your parentheses make a good point: we don't know why if the OP was flying from/to the US at all. Other countries have different regulations. I've been allowed to carry a Swiss Army Knife onto a European flight because neither of its two blades was longer than 6 cm. (I've also had a bread knife confiscated because its blade was longer.)
atomwaffel··on Malware in the browser: how you might get hacked by a Chrome extension
> Couldn't the alert instead be rendered as an overlay to the page itself, be modal to just that tab, and not disable the browser Chrome?

Firefox and Safari do exactly that.

> The existing policies (don't allow this page to create more dialogs -> page instantly redirects to itself to reset the flag) aren't doing a good enough job.

Does that work? I've never seen any pages that circumvent alert blocking like that, and I'd have imagined that any sensible implementation would disable alerts for the entire session (or at least a few minutes).

atomwaffel··on I tried to fly to London on a fake passport [video]
Hell, most of the times I've flown between European countries, nobody even looked at my ID. If somebody did, it was usually check-in staff, so there would have been nothing preventing me from checking in under my own name and then handing my ticket to somebody else.
atomwaffel··on Aldi's Barcode Strategy
> It all looks so cheap and barebones that I get depressed just being there.

Can I ask which part of Germany you've been to – or rather which Aldi (Nord or Süd)? There's a surprising amount of difference between the two and I've always found one of them far nicer than the other.

atomwaffel··on Aldi's Barcode Strategy
Interesting, is that a common connotation? I grew up with Aldi and Lidl in Germany and I've never made that association, but I suppose I can see why you might if you're used to branded products.
atomwaffel··on jQuery 3.0 Released
XML. For HTML jQuery is rarely worth the dependency any more for me, but trying to consistently parse and manipulate XML with vanilla JS across browsers feels like working with HTML did five years ago.

I know XML is not cool any more, but sometimes you don't have a choice.

atomwaffel··on French court fines Uber, execs for illegal taxi service
That's fair, I guess. It seems like a relatively minor point in the grand scheme of cultural differences you will have to deal with whenever you travel somewhere else and I find it hard to relate to the desire for standardisation and uniformity that I notice mostly from people in the tech community, but I'm not going to pretend that variations in taxi legislation are a charming cultural quirk worth preserving, so nothing makes my opinion more valid than yours.
atomwaffel··on French court fines Uber, execs for illegal taxi service
True, that's quite scummy, but surely it's an example of under-regulation, not over-regulation. This scam (not sure that's the right word since what they're doing is perfectly legal albeit morally reprehensible) literally cannot happen in places where taxi fares are fixed.
atomwaffel··on Async and Await
I'm not quite sure I understand you, but it sounds like a case for `Promise.resolve(value)`[1] – that's what I do whenever I don't know if something will be a Promise or an already-resolved value. `Promise.resolve(value)` returns a Promise that immediately resolves with `value` or whatever `value` resolves to if it's a Promise – no need to do any checks yourself, no need to nest Promises inside Promises inside Promises.

For example, imagine you have a charting library and you want to draw a chart, but you don't know if the data is available already or if it's being loaded asynchronously. You can just write:

    // `drawChart(data)` is a synchronous function
    // `data` may be the data itself or a promise that resolves to the data
    Promise.resolve(data).then(drawChart)
For me, this is actually the killer feature of Promises, avoiding callback hell is just a nice side-effect. Once you start thinking of Promises as placeholders for values that may or may not be known already (rather than just an abstraction of the `callback(err, value)` pattern), you can write some really elegant code.

[1] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...

atomwaffel··on What Does It Mean to Be Poor in Germany?
> In Berlin, capital, you see more people that are searching for food, empty bottles, and are in hartz and people look at them as dead animals.

Context for the bottle thing: Germany has a deposit on bottles that gets refunded in cash when you return a bottle to any supermarket. It's up to €0.25 for plastic bottles which is quite a bit, so some people collect bottles that others have thrown away. (This is also why it's nice to put your bottle next to the bin rather than in it if you're not returning it yourself – saves people the hassle of rummaging around in there.)

I can't personally confirm the "looking at people like they're dead animals" thing, although I do admit that you get a bit jaded when you've been asked for spare change for the third time in a row on the same S-Bahn train.

atomwaffel··on Google's Paris HQ raided in tax probe
I assume they are referring to the cease-and-desist letters sent to websites that don't publish an "Impressum"[1] (information about the person responsible for the website, including an address and phone number). It's a holdover from print publications, and there's a bit of legal uncertainty as to whether it applies to small private websites, but the threshold for it being required is really low.

Unsurprisingly, this has created an industry of scummy law firms that specialise in finding infringing websites and sending them cease-and-desist letters with a bill for their legal fees attached.

[1] https://en.wikipedia.org/wiki/Impressum

atomwaffel··on Jason: Scriptable iOS JSON Client
That's brilliant, thanks for the reply!

Good call on getting something out the door quickly and waiting for feedback. Not sure you need to support both YAML and Hjson, just one human-friendly format would be enough, especially as the conversion is easy enough to automate.

atomwaffel··on Jason: Scriptable iOS JSON Client
Looks really cool, thanks for this! If there is one thing holding me back, it's that JSON is a bit of a pain to write manually. Do you have any plans to support a more human-friendly format like YAML[1] or Hjson[2]? I guess I can always manually convert those to JSON, but it'd be neat to not have to.

[1] http://www.yaml.org

[2] http://hjson.org

atomwaffel··on Online tracking: A 1-million-site measurement and analysis
You're right that mobile devices are harder to fingerprint – too many people with the same screen size, operating system, browser version, timezone, and language/region settings.

However, mobile devices have a bunch of sensors, some of which can be accessed by JavaScript without permission, namely the ones you wouldn't expect to yield identifying information (e.g. accelerometer). The problem is that no two sensors are alike – they all introduce noise into the data which can be enough to fingerprint a device.

See here for a paper on the subject: https://crypto.stanford.edu/gyrophone/sensor_id.pdf

atomwaffel··on Context switch logging with the Windows Event Tracing API (2014)
> Some websites require JavaScript to display images nowadays. What's wrong with <img>?

Lazy loading. By default, browsers will load all images as soon as the page loads. If you have a long article with potentially megabytes of images, this behaviour will seriously slow down the initial load, and many readers who jump early will still download a bunch of images that they never see. That's why many sites only load images as they are about to appear, but to do that, you can't use regular <img> tags.

You're right in that JavaScript shouldn't be a requirement though. A good implementation will provide a regular <img> inside a <noscript> tag.

> Others require JavaScript to use the correct font. What's wrong with CSS?

Avoiding "flashes of invisible text"[1] when using web fonts. Unfortunately, different browsers have very different strategies for loading web fonts. Some of them will wait for the web font to load at any cost rather than showing a fallback font in the meantime. This means that you can be stuck for ages with everything in place except for the text, which is seriously irritating.

I've never implemented FOIT mitigation myself, but I assume that you could (and should) again provide a fallback in a <noscript> tag. Even without it, the text will at least still display without JavaScript, just in the second font in the font stack.

[1] https://css-tricks.com/fout-foit-foft/

atomwaffel··on A cool way to use natural language in JavaScript

  > nlp.text('i want to go to sydney.').places()[0].city
  'Sydney'

  > nlp.text('tony hawk did a kickflip.').people()[0].text
  'tony'
So in the first case, it clearly does recognise that Sydney is a city independent of capitalisation. In the second case, it does recognise the first name but not the last, instead tagging "hawk" as a noun. The same happens with "john smith", however "john thomas" is recognised as a full name.
atomwaffel··on A cool way to use natural language in JavaScript
Linotte would like to have a word with you. In French. https://en.wikipedia.org/wiki/Linotte
atomwaffel··on Identify Any Language Written in the Roman Alphabet at a Glance
Yes, if you spot ß, that's a dead giveaway for German. You can't really rely on it alone for identification however because it's not that frequent (or rather, it's very inconsistent – German can run for paragraphs without a single ß only to make up for it with five of them in a single sentence). It's also not used at all in Swiss German.

Another near-certain giveaway is that all nouns in German are capitalised. The only other language that does that and uses the Latin alphabet is Luxembourgish, and you're probably not looking at that.

atomwaffel··on Hashtags Instagram Won’t Let You Search
A wild guess, but #saltwater might be in there because it contains twat, a nice example of the Scunthorpe problem: https://en.wikipedia.org/wiki/Scunthorpe_problem
atomwaffel··on My name still causes SQL errors
Yes, government services was what I thought of when I wrote "most websites". Then again, I feel like those tend to be the worst user experience offenders (which is what this comes down to). It took me several attempts to mangle my home address into something the US visa application form would accept and I've seen ö turned into ö on my own country's official websites so many times that I can remember the mojibake.

I wonder why that is. I guess part of the reason is that government doesn't need to invest heavily in UX because there is no threat of people going elsewhere – when you need a passport, you need a passport, and you're not going to order one from Amazon. In fact, there's probably a disincentive for government to continuously improve their UX precisely because any changes to a system that's in place and working well enough only cost them money.

Are there any counterexamples of government websites that offer good user experience?

atomwaffel··on My name still causes SQL errors
Certainly, most websites have no obligation to serve me as a customer, but if they tell me that my name is "invalid", they shouldn't be surprised if I take my custom to a competitor who isn't quite so rude.

But you seem to be missing the fact that "Gijs in 't Veld" is perfectly valid Ascii, as would be names like "O'Leary" or "O'Reilly" that are perhaps more common in the English-speaking world.

atomwaffel··on If You Can’t Break Crypto, Break the Client: Recovery of Plaintext iMessage Data
Yes, that and how some of the whitespace between the messages gets selected as well.
atomwaffel··on If You Can’t Break Crypto, Break the Client: Recovery of Plaintext iMessage Data
Yes, surprisingly the OS X Messages app doesn't seem to share a lot of UI code with the iOS version. You can easily tell that it's a simple WebView from the way text selections behave.
atomwaffel··on “Me”: The one word journalists should add to Twitter searches
You have a point, but it's explicitly not what the author did. His screenshots show him replying to each of the tweets, asking to talk to their authors, and he goes on to tell their stories in the article. If anything, this shows how valuable a research tool Twitter can be when used properly.
← PreviousPage 4 of 5Next →