<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: tfm</title><link>https://news.ycombinator.com/user?id=tfm</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 20 Oct 2026 05:35:54 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=tfm" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[Decimal mark]]></title><description><![CDATA[
<p>Article URL: <a href="https://en.wikipedia.org/wiki/Decimal_mark">https://en.wikipedia.org/wiki/Decimal_mark</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=14263923">https://news.ycombinator.com/item?id=14263923</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 04 May 2017 10:56:50 +0000</pubDate><link>https://en.wikipedia.org/wiki/Decimal_mark</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=14263923</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=14263923</guid></item><item><title><![CDATA[New comment by tfm in "A Large Self-Annotated Corpus for Sarcasm"]]></title><description><![CDATA[
<p>Is that the actual URL? Seems to be missing /s<p>Marginally related: on cs.CL the other day was "Punny Captions: Witty Wordplay in Image Descriptions"[0]. A mashup of these two projects would bring us that much closer to the dream of Social Media In A Box.<p>[0] <a href="https://arxiv.org/abs/1704.08224" rel="nofollow">https://arxiv.org/abs/1704.08224</a></p>
]]></description><pubDate>Sat, 29 Apr 2017 12:48:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=14226332</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=14226332</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=14226332</guid></item><item><title><![CDATA[New comment by tfm in "Fast Python loops"]]></title><description><![CDATA[
<p>The idea is to reduce the amount of redundant copying of characters: you end up doing a few more concatenations in the outer loop, but the concatenations in the inner loop are of short strings.<p>Importantly, if you remove the restriction of the input list being "exactly 256 items", then the method is still quadratic.<p>A linear-time algorithm for this would copy each input character exactly once, which is effectively what the method based on array.tostring() does.<p>The chunk size of 16 is not as significant as the technique of constructing+concatenating chunks, although it is optimal for input length 256. In general I think you'd want a chunk size about the square-root of the expected input length, to minimise the number of copied characters.<p>EDIT: maths<p>Concatenating strings of length M and N is linear in O(M+N), because that's how many characters you're copying.<p>Number of characters copied if you construct a string of length N by concatenating one character at a time<p><pre><code>  = (0+1) + (1+1) + (2+1) + (3+1) + ... + ((N-1)+1) + (N+1)
  = (N +1)*N / 2
</code></pre>
Number of characters copied if you construct a string of length N by concatenating a chunk of length 16 each time<p><pre><code>  = (0+16) + (16+16) + (32+16) + ... + ((N-16)+16)
  = 16*(0+1) + 16*(1+1) + 16*(2+1) + ...
  = 16 * (N/16 +1)*(N/16) / 2
         ^^^^^^^^^^^^^^^
</code></pre>
This is where the "technique" comes in: although the algorithm is still quadratic you're effectively moving a constant factor out the front.<p>Note that you also have the cost of constructing the chunks each time, which becomes the dominant cost if you have too many chunks.<p>In general, if you have a length kM string which you construct from k chunks of length M, the number of characters copied<p><pre><code>  = M * (k+1)*k / 2  +  k * (M+1)*M / 2
</code></pre>
... which (rounding and integer constraints aside) is minimised for M = k, i.e. when the chunk size is the square root of the input length. Hence, for input length 256 we take chunk size 16.</p>
]]></description><pubDate>Sat, 08 Apr 2017 15:56:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=14067510</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=14067510</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=14067510</guid></item><item><title><![CDATA[New comment by tfm in "Python for Android"]]></title><description><![CDATA[
<p>Yes, but with the caveat that you'll be running interpreted .py using a cross-compiled Python executable, rather than Python compiled to Android bytecode. Kivy itself (the project that spawned p4a) is a full cross-platform library for UI development; for any heavy computational lifting you'd want to farm it out to a C API library and import it the usual way, modulo some p4a recipe incantations.</p>
]]></description><pubDate>Mon, 27 Mar 2017 14:51:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=13968174</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=13968174</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13968174</guid></item><item><title><![CDATA[New comment by tfm in "The new £1 Coin"]]></title><description><![CDATA[
<p>Fortunately the domain name is rather less ambiguous and primed me for the weak pun. I'm ... glad(?) that the wordplay survived the marketeering sessions and civil service vetting.<p>BTW: dodecahedron is the solid object, dodecagon is the 12-sided polygon. D&D style dice as currency would be pretty awesome but it might make it difficult to resolve dilemmas using pocket change.</p>
]]></description><pubDate>Mon, 27 Mar 2017 11:00:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=13966625</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=13966625</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13966625</guid></item><item><title><![CDATA[New comment by tfm in "Into the woods: how one man survived alone in the wilderness for 27 years"]]></title><description><![CDATA[
<p>The bit that really stood out for me:
"""
He was never once bored. He wasn’t sure, he said, that he even understood the concept of boredom.
"""<p>Almost seems (too? as a consequence?) that he was lacking a type of curiosity, whether as an existing character trait, or something that developed from having to periodically use all his wiles to obtain the means of survival when surveilling the cabins.</p>
]]></description><pubDate>Wed, 15 Mar 2017 10:36:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=13875143</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=13875143</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13875143</guid></item><item><title><![CDATA[Into the woods: how one man survived alone in the wilderness for 27 years]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.theguardian.com/news/2017/mar/15/stranger-in-the-woods-christopher-knight-hermit-maine">https://www.theguardian.com/news/2017/mar/15/stranger-in-the-woods-christopher-knight-hermit-maine</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=13874483">https://news.ycombinator.com/item?id=13874483</a></p>
<p>Points: 16</p>
<p># Comments: 3</p>
]]></description><pubDate>Wed, 15 Mar 2017 07:49:22 +0000</pubDate><link>https://www.theguardian.com/news/2017/mar/15/stranger-in-the-woods-christopher-knight-hermit-maine</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=13874483</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13874483</guid></item><item><title><![CDATA[New comment by tfm in "The science of Westworld"]]></title><description><![CDATA[
<p>> This is why I think the ability to ask good questions is a better indication of understanding and intelligence than the ability to generate answers.<p>Certainly! Synthesis rather than reformatting (or, more commonly, regurgitation). Analysis and abduction are more than just "put it in your own words". More useful too.<p>There is something of a rush on at the moment to generate chat-bots to replace FAQs. Every Slack/Fleep/Blern/Crank channel appears to have five or six memoisation bots. Seems to be largely a solved problem!<p>When we can start having bots that can be sensibly interrogated for a summary (or even a "hey, you've been away for several hours: here's the key points"), we can finally abandon the chatrooms and let the generative bots flood them with abductive content, and the precis bots can then ping you every couple of weeks when something important comes up.</p>
]]></description><pubDate>Sat, 07 Jan 2017 15:28:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=13344553</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=13344553</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13344553</guid></item><item><title><![CDATA[New comment by tfm in "The science of Westworld"]]></title><description><![CDATA[
<p>If we're limiting ourselves to deductive reasoning, then yes – the facts as stated do not give enough information to deduce that Greg must be white.<p>If instead we use abductive inference, we might seek the simplest and most likely explanation given our universe of observations. Sherlock Holmes was a big fan of abduction!<p>Much of real-world reasoning is abductive to a greater or lesser extent. There is a well-known joke about some motley band of engineers, logicians, mathematicians, statisticians, etc etc catching a train through the Highlands. They see a black sheep, the engineer says "look, all sheep in Scotland are black!", the statistician says "no, you can't say that – just that MOST sheep in Scotland are black", another says "no, we can only say that at least ONE sheep is black", another says "no, it's only black on at least one side", then the one you're stuck next to at the party says "you're all wrong, we can only say that at least one sheep in Scotland is black on at least one side at least some of the time". The last statement is fully deductive; the rest of them are abductive, and more-or-less useful.</p>
]]></description><pubDate>Sat, 07 Jan 2017 13:22:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=13344008</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=13344008</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13344008</guid></item><item><title><![CDATA[New comment by tfm in "Reasons Not to Use Google (2015)"]]></title><description><![CDATA[
<p>In this particular case it could be argued that Google's unofficial "don't be evil" motto explicitly framed this as a moral issue. Tongue-in-cheek, to be sure, but certainly an appeal to happy squishy emotions.<p>That said, RMS's stuff is showing up in a few posts today, and framing as a moral issue is certainly a large part of his standard toolkit. Considering any situation from an ethical viewpoint tends to make my eyes roll and skin crawl (ooh, the moral dimensions of public hygiene? yes please!), but appealing to hearts and minds is pretty basic old-school rhetorical technique.<p>If nothing else, coming from a technical background, it's occasionally useful to come at the problems from a different, squishier, direction.</p>
]]></description><pubDate>Sat, 07 Jan 2017 12:48:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=13343885</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=13343885</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13343885</guid></item><item><title><![CDATA[New comment by tfm in "Edward Snowden’s Escape from Hong Kong [audio]"]]></title><description><![CDATA[
<p>Lena handled it very gracefully. She gives a very quick synopsis of what her part of the talk would have been around the 41 minute mark.<p>The whole presentation was plagued by gremlins; the substance begins with Sönke Iversen's part of the talk around 13:45.</p>
]]></description><pubDate>Thu, 29 Dec 2016 07:56:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=13276202</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=13276202</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13276202</guid></item><item><title><![CDATA[New comment by tfm in "Bypassing CSP using polyglot JPEGs"]]></title><description><![CDATA[
<p>Inasmuch as there is blame to be apportioned in this case, it's due to JavaScript / ECMAScript having broad definitions of acceptable variable names, and (arguably[0]) the fact that browser JS implementations will generally accept arbitrary 8-bit data within multiline comments, rather than the strict Unicode code units specified by ECMAScript.<p>JPEG comments exist for the same reason that EXIF tags exist – it's handy to store metadata alongside the image data, it gets copied around when the file gets copied, the tags can be transferred if the image gets re-encoded. There are enough error recovery mechanisms built into browsers that one could likely make a polyglot by just abusing the data segment, maybe even while crafting a legitimate standards-compliant JPEG.<p>Ultimately, bytes are bytes! Interpreting them with a variety of content types can give a variety of results, so keep it in mind.<p>[0] Resynchronisation / recovery from bit errors is one of the explicit motivations behind the design of Unicode encodings, so the browsers get a pass from me on this one. It's almost certainly possible to craft a suitable JPEG using legitimate code points anyway.</p>
]]></description><pubDate>Thu, 01 Dec 2016 19:45:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=13082767</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=13082767</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13082767</guid></item><item><title><![CDATA[New comment by tfm in "The Fixing-JSON Conversation"]]></title><description><![CDATA[
<p>Alas, there's no guarantee that the order of key/value pairs within an object will be preserved (not even within JS anymore!). But that's okay, we can always reformat the ordered data as an array or write a custom parser ... oh.<p>I don't see any reason to include parsing directives in JSON either, but it's a wild world out there and people do all sorts of strange things. Seems that a few of those folks were working at Yahoo and made the mistake of letting Doug see their code when JSON was in prototype phase, so no JSON comments for anyone. Whoops!</p>
]]></description><pubDate>Fri, 26 Aug 2016 10:39:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=12365349</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=12365349</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12365349</guid></item><item><title><![CDATA[New comment by tfm in "Surprises of the Faraday Cage"]]></title><description><![CDATA[
<p>Perhaps it was determined by trial and error! Or maybe the earlier oven iterations happened to get lucky. We don't know that embedding a flyscreen on the door of the food chamber was necessarily the look that people would have gone for!<p>Now of course there are statutory "radiation leakage" limits in most markets. One might easily imagine that engineers would take a few goes at implementing the Ezy-Look-Into oven sketched by the folks over at industrial design, measure the emissions levels with thinner wire screens, and shrug it back with several binders full of readings. When experiment and theory are in disagreement, the product manager is unlikely to fund too much research into picking apart Maxwell's Other Equations. Given the known configurations for "good enough" microwave shielding, presumably the design team gets to sign off on a suitable colour instead of insisting on mechanically-etched glass impregnated with nanowires.</p>
]]></description><pubDate>Mon, 01 Aug 2016 16:56:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=12203972</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=12203972</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12203972</guid></item><item><title><![CDATA[New comment by tfm in "Australia's Entire GPS Navigation Is Off by 5 Feet"]]></title><description><![CDATA[
<p>Official local datum is GDA94, which is usually within about a metre of WGS84. /me pats pocket protector<p>I think the idea here though is that the underlying terrain has scooted around a bit in the last twenty years, so a new datum would save on the need to print new maps and update the databases containing trig points and such. New coordinates can be labelled as explicitly aligned to the new datum, get some versioning happening.<p>Unfortuately it seems impossible to confirm this, because the Geoscience Australia website does not appear to make any reference to this purported new effort that's been making the rounds of late. New website layout, maybe their CMS is broken.</p>
]]></description><pubDate>Mon, 01 Aug 2016 14:16:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=12202515</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=12202515</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12202515</guid></item><item><title><![CDATA[New comment by tfm in "Australia's Entire GPS Navigation Is Off by 5 Feet"]]></title><description><![CDATA[
<p>It's a bug that's lost its foot in the door.
Previous discussion: <a href="https://news.ycombinator.com/item?id=12188144" rel="nofollow">https://news.ycombinator.com/item?id=12188144</a></p>
]]></description><pubDate>Mon, 01 Aug 2016 14:02:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=12202419</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=12202419</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12202419</guid></item><item><title><![CDATA[New comment by tfm in "Pokemon Go API"]]></title><description><![CDATA[
<p>I'd certainly agree that someone who went to the effort of setting up a system for spoofing (even if it was just downloading an extra app) is, in some sense, more motivated than a very casual player.<p>I don't think though that Niantic have much of a moral hazard to consider here. Looking at what's purchasable in the Pokémon store, there's nothing that would be attractive to anyone who was able to virtually wander the world at all hours from the comfort of their couch, especially since anything that can be bought with cash money could be obtained using coins earned in-game. If a player's motivation in spoofing was to "catch 'em all" by whatever means necessary, it seems unlikely that they'd draw the line at restocking from Pokéstops along the way.<p>Comparing with the dark side of Ingress, there is a ludicrously well-organised black market economy offering purchases for every in-game commodity – all, of course, completely against the T&Cs, all completely abhorred by legitimate players, but all offered with consummate professionalism (think of the slick ransomware scammers offering a support number). Niantic don't see any of that cash. It is likely to have had a major impact on their design decisions for the PoGo store, and the game in general. If, for instance, there is no way to trade items between players, then it severely limits the options for a parallel economy.</p>
]]></description><pubDate>Sun, 24 Jul 2016 21:22:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=12154971</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=12154971</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12154971</guid></item><item><title><![CDATA[New comment by tfm in "Pokemon Go API"]]></title><description><![CDATA[
<p>Probably good to regard these first few weeks (months?) of Pokémadness as an "open beta" period, before the security measures get turned on. We can look at Niantic's previous project, Ingress, for a roadmap.<p>The two major categories of cheatifying in Ingress are falsifying one's location and multi-accounting. There's precious little that can be done about the latter, so Niantic focus on banning players that appear to be "spoofing" their location.<p>Given the wealth of different devices and playing scenarios, immediate detection of GPS spoofing is infeasible. Things like WiFi router locationing idiocy (or even just dodgy GPS antennae) play havoc with the utopian dream of perfect positioning every time. If a player performs actions seconds apart that are separated by thousands of miles then the game temporarily ignores them, but after some time in the naughty corner they can resume play.<p>Hardy spoofing detection instead depends on longer-term profiling. Ingress has a similar API to Pokémon Go – JSON chunks (rather than protobuf) over HTTPS, most fields out in the open – but each request from the app includes a monolithic "clientBlob" containing device characterisation. The format of this has been (presumably) reverse-engineered by a few hardy souls but it is certainly closely-protected Niantic knowledge. We could safely assume that it's a proprietary blend of signal strengths, gyroscope readings, touch events and timings, secret herbs and spices etc.<p>The clientBlobs lend themselves to offline processing. There are conceivably servers continuously trawling through a backlog looking for tell-tale patterns of bad behaviour, but it also provides an audit trail if a particular player is suspected of spoofing. Occasionally Niantic indulges in mass purges, which presumably follow from a new cheat detection heuristic being run on all the collected data for some period. These "ban waves" have a reputation for penalising unusual device configurations (the most recent major wave appeared to target, amongst other things, players with modified Android variants that might mask GPS falsifying code, including cheaper Chinese knock-offs, and Jolla phones running Sailboat).<p>Occasionally during major Ingress gaming events – so called "XM anomalies" – there is some level of human supervision to quickly identify and remedy clearly-fraudulent player behaviour, but for day-to-day operations it seems that account termination, so-called "hard bans" and shorter-lived "soft bans" are entirely automated, and based on offline player data analysis.<p>Getting back to the New Cruelty: the clientBlob was not part of Ingress's initial implementation; for a while after it was introduced was ignored, and then it became mandatory. A similar opaque chunk of data is included in the Pokémon Go requests, so we should look forward to its imminent deployment when Niantic scrape together enough Pokécoins to buy a few new servers for batch processing. At that time these convenient APIs won't have long to live.</p>
]]></description><pubDate>Sun, 24 Jul 2016 11:15:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=12153022</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=12153022</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12153022</guid></item><item><title><![CDATA[Generative Model Using Random Weights for Deep Image Representation]]></title><description><![CDATA[
<p>Article URL: <a href="https://arxiv.org/abs/1606.04801">https://arxiv.org/abs/1606.04801</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=11914606">https://news.ycombinator.com/item?id=11914606</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 16 Jun 2016 07:37:31 +0000</pubDate><link>https://arxiv.org/abs/1606.04801</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=11914606</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=11914606</guid></item><item><title><![CDATA[New comment by tfm in "Cellphone-Cancer Link Found in Government Study"]]></title><description><![CDATA[
<p>Cancer is a very broad church. There have been a lot of lifestyle changes over the last twenty years, very difficult to specify control groups ....</p>
]]></description><pubDate>Fri, 27 May 2016 12:25:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=11785516</link><dc:creator>tfm</dc:creator><comments>https://news.ycombinator.com/item?id=11785516</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=11785516</guid></item></channel></rss>