suyjuris's comments

suyjuris | 4 years ago | on: More than 1M fewer students are in college, the lowest numbers in 50 years

Distributing children of age 10 into groups based on their predicted future academic achievement works about as well as you would expect (i.e. not very well), but the redeeming feature of the system is that it is reasonably fluid and you can change tracks. You could, for example, do Abitur after completing Realschule and then move on to university. It is also possible to change directly from Realschule to Gymnasium at basically any point, if you meet certain standards. (You can also take university classes while in Gymnasium without too much trouble.)

There is also the Gesamtschule, which combines the three tracks (Hauptschule, Realschule, Gymnasium) into a single school.

suyjuris | 4 years ago | on: Charge, Baby, Charge for Parking

> Given the mix-use urban buildings I've encountered recently [...] I don't see how removing off-street parking requirements would address anything.

It would allow the developer to choose the appropriate amount of parking spaces for their building, instead of being forced to follow the requirements resulting from central planning by the city administrators.

They cannot simply rely on on-street parking instead, since (per the second bullet point) the prices would for those parking spaces would increase dramatically, providing the developer with a competitive disadvantage.

I could see this working out perfectly fine for businesses who compete for customers, as those will likely be very sensitive to the cost of a parking space. However, for buildings where people do not have a choice of whether to travel there, this seems more problematic. Imagine e.g. a courthouse – missing parking spaces would just impose a negative externality on the unfortunate “customers”. I guess the question is in which category office buildings and residential areas fall into, arguments could be made either way.

suyjuris | 4 years ago | on: A common mistake involving wildcards and the find command (2020)

Why not

    puts {Hello!}
    # or even
    {puts} {Hello!}
? But I do not see an advantage either way. I think you attribute to quoting issues that are caused by type-punning. The quoting rules of Tcl are simple. I mostly encountered problems when people do things like

    # x is not actually a list, but may appear that way if a and b are nice
    set x "$a $b"
    # Proper way:
    set x [list $a $b]
But I fail to see how quoting could address or alleviate this.

suyjuris | 4 years ago | on: OpenAI Sold its Soul for $1B

As soon as you put the intelligence in AI this changes. It is easy to say that current AI systems are “dumb” (although note that the precise meaning of dumb has changed significantly over the last few decades). You can say that about any AI with sub-human intelligence. But if you reach human levels, you can likely reach super-human as well, so you need to start worrying much earlier.

suyjuris | 4 years ago | on: First batch of student’s washing machines shipped to Iraq

I do not think that your source supports your claim, although I might have missed something. To the contrary, it states:

> Although the physical labor of laundry was lessened somewhat by the machines, the actual time housewives allocated to their family laundry increased.

(This is claimed to be the result of housewives being responsible for the entirety of laundry, instead of employing help, however.)

suyjuris | 4 years ago | on: Striking new Beeping Busy Beaver champion

Busy Beaver-type functions (counting how long a program runs, provided that it terminates) might look like a mere curiosity, but they make interesting statements about the power of different systems of computation. For Turing machines it grows quicker than any computable function – and Turing machines are quite powerful!

If you consider a finite-state automaton, you might define a similar problem: What is the longest word that automaton accepts, provided that it accepts only finitely many words? This you can answer directly: it is n-1, where n is the number of states. And finite-state automata are not very powerful.

Here is another system: I give you a list of transactions, where each transaction consists of multiple instructions of the form “add/remove x units from account y”. You may only execute a transaction if no account goes negative. Here, a Busy Beaver-type question would be “What is the longest sequence of transactions that move one unit from the first account to the second, where all the others must start and end empty?” This is actually a somewhat powerful system, and here the answer grows at the rate of the Ackermann function – extremely fast (and, if you have never heard of it, probably faster than any computable function you can think of), but still computable. [1]

Recently we have shown a Busy Beaver-type result for a certain distributed computation model, where many (very limited) participants interact to compute things as a group. There the question was about counting how large the group is, but each participant can only count to n. So given a protocol that reliably recognises certain group sizes, what is the largest size it accepts? (Again, provided that it accepts only finitely many.) We proved that it is at most 2^(2^(2^n)) – so in some sense that model is very weak, but nevertheless much more powerful that finite state automata.

[1] I did not think to carefully about this, some details might be wrong.

suyjuris | 4 years ago | on: Our lawsuit against ChessBase

But crucially, in that case the infringer did not make money based on their infringement, and the actual infringement was minor. (Specifically, a university failed to provide a copy of the GPL license alongside a download of the software, which they offered free of charge.)

suyjuris | 4 years ago | on: Tencent deploys facial recognition to detect minors gaming at night

> Just an example of the absurd regulations in a different subject: Germany requires a license to stream to more than 500 people and they've actually enforced this on streamers. The license can cost €10k.

This information is outdated and misleading. Since 2020, licenses for public broadcast are only required for broadcasts which, averaged over six months, exceed 20000 viewers and have significant importance for the formation of public and private opinion [1].

Prior to this change, some streamers had indeed been forced to acquire such a license (although there were more conditions than just regularly having 500 viewers). Also, licenses for streamers actually cost around 1000-2500 €, instead of the 10000 € you claimed. In addition, there was an exception for cases where this would be an undue hardship [2]. The regulator basically agreed that this was pretty silly, but that it planned to enforce the law as written (as is its job), until it was changed (which it has been).

[1] (german) § 54 MStV, https://www.gesetze-bayern.de/Content/Document/MStV-54

[2] (german) https://t3n.de/news/livestreams-rundfunklizenz-1175321/

suyjuris | 4 years ago | on: Remove left turns for less dangerous city traffic

> I think map apps should be optimizing for something more complex, like least amount of directions within a five minute arrival window. Saving two minutes of driving time isn't worth having to make eight more turns.

One issue is, as you say, that shortest-path routing can overload individual roads. There is an interesting and related concept in theoretical CS: oblivious routing. Instead of solving “What is the shortest route to my target?” locally, you try to determine a selection of routes that, if followed by every participant, minimise congestion (the maximum amount of vehicles over any road, relative to its capacity). Surprisingly, it is always possible to determine such routes, even if they are not allowed to depend on traffic conditions (how many vehicles try to go from A to B, how many from C to D, etc) ― this is what the “oblivious” refers to.

Of course, that does not solve the problem of route complexity.

suyjuris | 5 years ago | on: Unsplash is being acquired by Getty Images

To add a bit more detail: as far as I understand it (and I am no lawyer) the concept of an Abmahnung is that you notify someone of their (supposed) legal transgression, and give them the option to stop their behaviour and reimburse your costs (lawyer's fees and damages) to avoid going to court. For copyright claims in particular, it may be difficult to claim large damages, but sometimes the right holders collude with their lawyers by demanding the reimbursement of non-existent fees instead, which they then split as profits. This is illegal, as you are only allowed to claim costs that you have actually paid.

A (somewhat dated) example at [1] (german).

[1] https://www.lawblog.de/archives/2009/11/17/abmahnanwalte-ver...

suyjuris | 5 years ago | on: UK 'Right to repair' law to come in this summer

Having the “the scripts used to control compilation and installation of the executable” does not help you any if the device refuses to load a modified kernel. If the GPLv2 were sufficient, then why would the FSF see a need to create version 3?

suyjuris | 5 years ago | on: UK 'Right to repair' law to come in this summer

You can get the code, but you might not be able to do anything with it, as there is no obligation for the manufacturer to enable you to run the code on the device itself. GPLv3 intends to cover this case, but the Linux kernel is (not without reason) licensed under GPLv2.

suyjuris | 5 years ago | on: Thoughts Around Naming Variables

Perhaps the main difference between the notation of mathematics and programming is not the former's lack of paper, but rather the inherent complexity of the problems they aim to solve.

(A brief aside on what I mean by inherent complexity: solving some partial differential equation or writing 'I must turn in my homework' one hundred times might both take the same amount of time, but the latter is less complex. Similarly, Dijkstra's algorithm to compute shortest paths might be easier to implement than a form to add a new employee to the database, but it is nevertheless more complex.)

When writing a program, one usually has to juggle lots of balls that move in simple ways. You can make a career out of writing programs that convert data between various mostly equivalent representations (table in database, packet on the network, Python object in RAM, pixels on the screen). I do not want to claim that this is easy: the details of what data ends up where, of how to deal with the not-quite-equivalent representations, of who is able to see what, etc., matter. But solving complex problems of which code to write does not mean that the code solves complex problems.

So it makes sense to use longer names. You have only little attention to spare on individual pieces and s.add(b) is more difficult to understand than submit_form.add(submit_button). Here, adding things to some container is a well-understood concept, you simply want to know which container and which things.

Conversely, when your problems have a high inherent complexity then you end up with a small number of balls that behave in a complicated manner. (If you have many complicated balls, the problem is too difficult to solve.) So you split up your explanation: first you describe the balls, then you assume that the reader knows what they are and give a succinct explanation of their interactions. (Flipping the order sometimes makes sense too.) It is clear that ax²+bx+c = (ax+b)x+c is easier to understand than equals(add(add(mul(parameter_quadratic, mul(variable, variable)), mul(parameter_linear, variable)), parameter_constant), add(mul(add(mul(parameter_quadratic, variable), parameter_linear), variable), parameter_constant)). The latter is simply too noisy, it does not allocate the symbols in an efficient manner to convey its meaning.

However, writing ax²+bx+c assumes that the reader is familiar with the meanings of a,b,c,x and with addition, multiplication and exponentiation. You probably are (else this would have made a poor example), but even if you were not, it would still make sense to explain these concepts first, to enable the succinct explanation.

suyjuris | 5 years ago | on: Functorio

This sounds interesting! I would love to read a post about this. (I am currently working on automatically generating belt balancer layouts, but that is an entirely different beast.)

suyjuris | 5 years ago | on: Functorio

I have found that playing with friends helps me to alleviate this problem, as scheduling constraints put an upper bound on playing time.
page 3