Hacker Newsnew | past | comments | ask | show | jobs | submit | capitainenemo's commentslogin

And performs very well on the latest 100 puzzles too, so isn't just learning the data set (unless I guess they routinely index this repo).

I wonder how well AIs would do at bracket city. I tried gemini on it and was underwhelmed. It made a lot of terrible connections and often bled data from one level into the next.


> unless I guess they routinely index this repo

This sounds like exactly the kind of thing any tech company would do when confronted with a competitive benchmark.


I mean, the repo has <200 stars, it's not like it's so mainstream that you'd expect LLM makers to be watching it actively. If they wanted to game it, they could more easily do that in RL with synthetic data anyway.


Belated update on this. Gemini reasoning did much better than quick on bracket city today (an easy puzzle but still). It only failed to solve one clue outright, got another wrong but due to ambiguity in the expression referenced and in a way that still fit the next level down making the final answer fairly cleanly solved. Still clearly has a harder time with it than the connections puzzle.

WarCraft was a huge part of our LAN parties, but mechanics wise, Total Annihilation was a much bigger leap forward in terms of use of 3D terrain and ballistics and commands, so we played that a lot more.

Warcraft had more differentiable units and a better story though.


And now Beyond All Reason keeps it alive and free software


Huh. I'm familiar with the Spring RTS FOSS project (https://springrts.com) which started as a reimplementation of TA, and of course Planetary Annihilation, but not "Beyond All Reason" - do you have an authoritative link?


The official website is https://www.beyondallreason.info/

It's an open-source project that started as a fork of SpringRTS. To my eye it looks nearly like a clone of Supreme Commander.

I watched a few ranked 1v1 games on uThermal's YouTube channel (he's a former Starcraft 2 pro who mostly makes YouTube videos about Starcraft 2). Here's the playlist.

https://www.youtube.com/playlist?list=PL_USFDBbymGUwLPiopP2q...


Well, when I saw the first Supreme Commander video it looked a lot like Sprint RTS running Balanced Annihilation to me. Right down to how the terrain deformation worked and the command queuing.

Was there any particular reason for the fork? There's a lot of Spring RTS projects but they all use the same codebase. http://springrts.com/wiki/Games


The Spring RTS FOSS engine is an engine, but does not provide the game assets or game-specific code.

Recoil is a fork of the Spring engine (background: Spring made backward incompatible changes; Recoil forked to retain backward compatibility). Beyond All Reason uses the Recoil engine and supplies its own game code, shaders, and assets.

https://recoilengine.org/articles/choose-recoil/

https://recoilengine.org/ (list of games powered by Recoil)

https://github.com/beyond-all-reason

Source: been in the BAR Discord for about a year, have contributed tiny bits of server code to the project, and read a few pull request comments.


BAR is a great RTS


BAR is a really great RTS game. By far the best one today. It is very balanced and has a lot of depth. Highly recommended for any RTS enthusiast.


And Supreme Commander too, although it's a bit dated now / has some technical issues - although at the time, it was one of the first games that could use a multicore CPU. Not SupCom 2 though, that felt off in comparison.


unfamiliar with the Arkenfox user.js but are any of these things that are beyond what firefox enables out of the box if you turn on privacy.resistFingerprinting ? Because what you describe seems to be all stuff it does just by flipping flag.


Arkenfox does far more than that, just look at the user.js. Among others, it spoofs the time zone, number of cores, window size and many other attributes that assist fingerprinting. It basically mimics the settings of the Tor browser.


privacy.resistFingerprinting = true is basically activating most of the Tor browser features in baseline Firefox. That's why it is turned off by default. It does all the things you listed above only at a lower level than a user script. It's been in Firefox for over a decade.

https://www.ghacks.net/2018/03/01/a-history-of-fingerprintin...

The flag was in fact designed to control the activation of the Tor browser uplift features, and reduce maintenance issues. That way the Tor browser could pretty much just be Firefox with certain flags turned on.


Firefox does pretty damn well though, especially with privacy.resistFingerprinting set to true


Every time I manually touched the "fingerprinting" about:config settings, my entropy went up. I used the EFF site to test: https://coveryourtracks.eff.org/

AFAIK some of these options are there to be used by the Tor browser, which comes with strict configuration assumptions, and it doesn't translate well to normal Firefox usage. Especially if you change the window size on a non-standardized device. Mind you, the goal is not to block fingerprinting, but to not stand out. Safari on a macbook is probably harder to fingerprint than Firefox on your soldering iron.

However, judging by the fact that every data hungry website seemingly has a huge problem with VPN usage, I'd presume they are pretty effective and fingerprinting is not.


I've had good success with tracking tool tests and resistFingerprinting. Granted, I usually use it with uMatrix/NoScript most of the time which cuts down on the available data a lot and maybe makes it an unfair test. One issue, I expect, is simply not enough people using resist fingerprinting to add variation to the mix. Since it's off by default, and only a small % of users use Firefox and an even tinier percentage use resistFingerprinting, unlike your example of Tor where probably most people on the tor network use the tor browser, it's likely that simply blocking things is a fingerprint all on its own. The solution there would be to get more people using it :)

I will say one downside to using it is far more bot detection websites freaking out over generic information being returned to them, causing some sites to break (some of their settings breaking webgl games too due to low values). Using a different profile avoids this, or explicitly whitelisting certain sites in privacy.resistFingerprinting.exemptedDomains - obviously if a site is using a generic tracking service for bot detection, that kills a fair amount of the benefit of the flag, so a separate profile might be best. I wish firefox had a container option for this.

... and. not too sure what you mean by changing window size on a non-standardised device. They do try to ensure the window sizes are at standard intervals, as if they were fullscreened at typical widths to reduce fingerprinting, but surely that applies to using Tor too? I mean, people don't use Tor on dedicated monitors at standard sizes.


Oh, and a bit of followup. I tried the EFF cover your tracks on a Firefox profile with resist fingerprinting, and almost all the bits of identifying information came from the window size (which EFF considers "brittle") and the UA (I was testing in Firefox Nightly).

Apparently you need to add the hidden pref: firefox.resistFingerprinting.letterboxing

Enabling letterboxing knocked off 5 bits of identifying information. Apparently my 1800px wide letterbox was still pretty identifiable, but, an improvement.

Setting a chrome user agent string using a user agent string manager dropped that one from 12ish bits to <4 bits. 'course, that has disadvantage of reducing firefox visibility online further, and probably being more recognisable with the other values (like mozilla in the webgl info). Using firefox stable for windows was <5bits, so probably best to use that if on linux. Although, it might conflict with the font list unless a windows font list was pulled in.


privacy.resistFingerprinting has potentially-unwanted side-effects, like wiping out most of your browser history (instead of the more sensible approach of just disabling purple links). I also recall something about it getting removed or nerfed, though I'm not sure whether that was a mere proposal.


It does not wipe your browser history. I can definitely attest to that since my generic JS active + resistFingerprinting profile has a history going back years. It does set your timezone to UTC in JS on websites. I've mostly encountered that when playing Wordle ;)


It also does (or at least used to) mess with dates, due to it attempting to hide what time zone you're in.


The browser should reasonably know what time zone you're in and what time zone you're reporting to the website and translate between them automatically.


Yeah, "should". Too bad it's unfeasible. As soon as you e.g. print the current date as part of a paragraph somewhere, the browser loses track of it, and the website can just read the element's content and parse it back.


https://www.nature.com/articles/s41598-021-94342-x

They might have some benefit to the host, but they also cost them energy in drag.


https://news.ycombinator.com/item?id=45736461 duplicate from 9 days ago, 41 comments


While it's true people are upset at AI companies profiting off of artist creations with no compensation, I know a lot of people are also reacting to how the recent AI companies have been scraping the web. The reason folks are using Anubis and other methods is because unlike Google which did have archiving of sites for a long time (which was actually a great service), these new companies do not respect robots.txt, do not crawl at a reasonable rate (for us, thousands of hits a minute from their botnets - usually baidu/tencent, but also plenty of US IPs), hit the same resource repeatedly, ignoring headers intended to give cache hints, stupidly hitting thousands of variations of a page when crawling search results with no detection that they are getting basically the same thing... And when you ban them, they then switch to residential ranges. It really is malicious.


> AI companies profiting

Are they?


If you boil it down to the AI companies are making money (subscriptions, etc.) based on content they did not pay to produce, then they are profiting from someone else's hard work.


If you boil it down anyone on this planet can access ChatGPT (and other for profit LLMs) for free to answer any question they might have.

Knowledge is shared among humanity at a rapid speed. Everyone benefits.

It’s mind boggling how anyone could be opposed to that.


Do you use google search for work? Then you are profiting from someone else's hard work!


The difference is that when you search on Google - at least before AI overviews - you end up at the source site.

Also Google respects robots.txt. Every site that Google surfaces chose to be in the index.


Thats not entirely true. Google might or might not hide your pages from index. They'll definitely going to scrape it anyway. They also display summarized info from your page (famous "what is scrapping" joke showing wikipedias summary). Finally, you might just get your answer without visiting - just by skimming result description.


Revenue is not profit.


I didn't say it was. I understand that profit = revenue - cost.

I said they're profiting from other people's hard work, a separate concept.


'stealing is fine if you lose money when reselling'


I don't believe I wrote anything of the sort.


profiting != profit


Well, don't we have enough Acme Corporations in the world that were unprofitable and existed purely on VC life support before they killed off all the competition by dumping the prices, and then made them skyrocket to recoup investments and become profitable after becoming monopolists?


People at these companies are receiving a salary to do these things that the person you're responding to is opposed to.

While not all the companies in question may or may not be profiting from these things some of them are, and most if not all of their employees certainly are as well.


Article claims python 3 uses UTF-8.

https://stackoverflow.com/questions/1838170/ "In Python 3.3 and above, the internal representation of the string will depend on the string, and can be any of latin-1, UCS-2 or UCS-4, as described in PEP 393."

Article also says PHP has immutable strings. They are mutable, although often copied.

Article also claims majority of popular languages have immutable strings. As well as the ones listed there is also PHP and Rust (and C, but they did say C++ - and obviously Ruby since that's the subject of the article).

I'm also a bit surprised by the last sentence. "However, if you do measure a negative performance impact, there is no doubt you are measuring incorrectly." There must surely be programs doing a lot of string building or in-place modification that would benefit from non-frozen.


> There must surely be programs doing a lot of string building or in-place modification that would benefit from non-frozen.

The point is that the magic comment (or the --enable-frozen-string-literal) only applies to literals. If you have some code using mutable strings to iteratively append to it, flipping that switch doesn't change that. It just means you'll have to explicitly create a mutable string. So it doesn't change the performance profile.


> can be any of latin-1, UCS-2 or UCS-4, as described in PEP 393

My bad, I haven't seriously used Python for over 15 years now, so I stand corrected (and will clarify the post).

My main point stands though, Python strings have an internal representation, but it's not exposed to the user like Ruby strings.

> Article also says PHP has immutable strings. They are mutable, although often copied.

Same. Thank you for the correction, I'll update the post.


Cool, although I feel if on one side you have Java, JavaScript, Python, Go and on the other Perl, PHP, C/C++, Ruby, Rust it's hard to say overwhelming majority in either direction.

Also someone below claims python byte arrays can be considered mutable strings, although I have no idea of the stringy ergonomics of that and whether it would be convenient to do - I try to avoid python too.


... and honestly, since java has both stringbuffer and string I feel it's really in the "has mutable" camp too


Python strings aren’t even proper Unicode strings. They’re sequences of code points rather than scalar values, meaning they can contain surrogates. This is incompatible with basically everything: UTF-* as used by sensible things, and unvalidated UTF-16 as used in the likes of JavaScript, Windows wide strings and Qt.


But isn't 'surrogateescape' supposed to address this? (no expert)

https://vstinner.github.io/pep-383.html


surrogateescape is something else altogether. It’s a hack to allow non-Unicode file names/environment variables/command line arguments in an otherwise-Unicode environment, by smuggling them through a part of the surrogate range (0x80 to 0xFF → U+DC80 to U+DCFF) which otherwise can’t occur (since it’s invalid Unicode). It’s a cunning hack that makes a lot of sense: they used a design error in one place (Python string representation) to cancel out a design error in another place (POSIX being late to the game on Unicode)!


It's not taking advantage of the weird way python strings work. You can put that hack on top of any string format that converts back and forth with unicode.


No you can’t: it only works if your string type is something other than a sequence of Unicode scalar values. In Rust, for example, strings must be valid UTF-8, so this hack is not possible.


Python strings are normally Unicode, but they are augmented with this mechanism to to smuggle other data as invalid surrogates.

Rust strings are normally Unicode, but Windows OSStrings are augmented with a similar mechanism to smuggle other data as invalid surrogates. (Rust smuggles 16 bit values as WTF-8 but it could do 8 bit smuggling instead with barely any change.)

Rust chooses not to make that the main string type, but it could. Any system based on Unicode can implement a hack like this to become a superset of Unicode.

Why do you think it can't? Rust would have to admit that the type is no longer exactly Unicode, just like python did. That's the opposite of a disqualifier, it's a pattern to follow.

Maybe you're unaware that [generalized] UTF-8 has a way to encode lone surrogates? They encode into 3 bytes just fine, either ED A_ __ or ED B_ __


With regards to what rust team is admitting or not... https://wtf-8.codeberg.page/#the-wtf-8-encoding "It is identical to generalized UTF-8, with the additional well-formedness constraint that a surrogate pair byte sequence is ill-formed. It is a strict subset of generalized UTF-8 and a strict superset of UTF-8."

https://wtf-8.codeberg.page/#intended-audience "WTF-8 is a hack intended to be used internally in self-contained systems with components that need to support potentially ill-formed UTF-16 for legacy reasons.

Any WTF-8 data must be converted to a Unicode encoding at the system’s boundary before being emitted. UTF-8 is recommended. WTF-8 must not be used to represent text in a file format or for transmission over the Internet."

They seem very transparent, and certainly are not proposing it as a general type.


> With regards to what rust team is admitting or not...

That wasn't an accusation. They admit things just fine. It was a hypothetical about using it as the main string type.

> and certainly are not proposing it as a general type.

1. Python's hack isn't used in file formats or transmissions either, as far as I know. It's also internal-only.

2. What they propose it for has zero relevance to my argument. It's merely proof that a hack like this can be added to ordinary Unicode representations. Python's goofy string representation is not enabling its surrogate hack.


In C, C++, and Rust, the question of "are strings in this language mutable or immutable?" isn't applicable, because those languages have transitive mutability qualifiers. So they only need a single string type, and whether you can mutate it or not depends on context. (C++ and Rust have multiple string types, but the differences among them aren't about mutability.) In languages without this feature, a given value is either always mutable or never mutable, and so it's necessary to pick one or the other for string literals.


Sure, that doesn't change the point that mutable strings are a thing in those languages. And I don't think C's const is really a "mutability qualifier" - certainly not a very effective one at any rate.


For the records, mutable strings, eh, bytearray objects, are also a thing in Python: https://docs.python.org/3/library/stdtypes.html#bytearray-ob...


Well. Although this rouille thing is obviously a joke, it's also just a preprocessor macro layer, so it'd be pretty easy to switch to any view of the code. Could write it in "french" then transform it to english, then to russian.. Could also imagine doing that in an IDE without even impacting copy and paste just as a visual layer. Not sure what one would do for that spanish por omisión, but maybe just put an underscore. por_omisión


For another example of this, there was BritCSS someone made that lets you use British spellings in CSS:

https://github.com/DeclanChidlow/BritCSS


Wouldn't that be LISMOI.md ? [edit] nope - apparently LISEZMOI.md


Possibly. My French isn’t that good.


Going to go with "yes" based on this 2nd hit in a DDG search :) https://gitlab.com/bztsrc/easyboot/-/blob/main/LISMOI.md?ref...

[edit] n/m based on correction below and followup search, there are far more LISEZMOI.md files than LISMOI.md files.


It would be LISEZMOI.md


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

Search: