Spyke

Replies

Comment on

Real examples here?

Reply in thread

And Fabrice Bellard, the original author of ffmpeg, went on to create qemu which pretty much made open-source virtualization possible. Also TCC (even if I don't think that one is widely used), he established a world record for computing decimals of Pi using a single machine that had ~2000× less FLOPS than the previous record, and so much more...

Comment on

CGNAT version 2

Reply in thread

As @[email protected] says, you can use the same public port for many different destination address, vendors may call it something like "port overloading".

More importantly, you can install a large pool of public address on your CGNAT. For instance if you install a /20 pool, work with a 100 users / public address multiplexing, you can have 400,000 users on that CGNAT. 100 users / address is a comfortable ratio that will not affect most users. 1000 users / address would be pushing it, but I'm sure some ISP will try it.

If you search for "CGNAT datasheet" for products you can deploy today, the first couple of results:

Comment on

Superior ping

Reply in thread

This is the behaviour of inet_aton, which ping uses to translate ASCII representations of IPv4 addresses to a 32 bit number. Its manpage: https://man7.org/linux/man-pages/man3/inet_aton.3.html

It recognizes the usual quad decimal notation of course, but also addresses of the form a.b.c or a.b, or in this instance, a, with is taken to be a 32bit number.

Each part can also be written in hex or octal, with the right prefix, such that 10.012.0x800a is as valid form for 10.10.128.10.

Not all software use inet _aton to translate ASCII addresses. inet_pton for instance (which understands both v4 and v6) doesn't

Comment on

TSMC Arizona struggles to overcome vast differences between Taiwanese and US work culture

Reply in thread

Justification I've heard is that if one part of the couple is managing the other, or is promoted after the relationship started, then:

  • there is a power imbalance in the couple, possibly one is coercing the other (« I can't leave him/her, they'll make my worklife hell / get me fired »);
  • there is a risk the manager will promote their partner even if their job performance doesn't warrant it

Companies will want to both avoid this sort of things, and avoid being seen to enable this sort of things. They might want to move one of the parties to a different department so that the higher up one doesn't make promotion decisions for the other.

I've once worked at a company that wanted to know about relationships between their employees and suppliers/customers' employees, again because that might enable situations where a supplier / customer is treater favourably because of personal relationships

Comment on

[Solved] Python question: How to convert list to sort with multiple keys?

Inside the lambda expression you can have a comprehension to unpack the keys list to get the same sort of uplet as your "manual" example, like this:

>>> items = [{"core_name": "a", "label": "b"},{"core_name": "c", "label": "d"}, ]
>>> keys = ["core_name", "label"]

>>> tuple(items[0][k] for k in keys)
('a', 'b')

>>> sorted(items, key=lambda d: tuple(d[k] for k in keys))
[{'core_name': 'a', 'label': 'b'}, {'core_name': 'c', 'label': 'd'}]
webdev

Comment on

How Did REST Come To Mean The Opposite of REST? | htmx

Maybe I'm wildly misunderstanding something, not helped by the fact that I work very little with Web technologies, but...

So, in a RESTful system, you should be able to enter the system through a single URL and, from that point on, all navigation and actions taken within the system should be entirely provided through self-describing hypermedia: through links and forms in HTML, for example. Beyond the entry point, in a proper RESTful system, the API client shouldn’t need any additional information about your API.

This is the source of the incredible flexibility of RESTful systems: since all responses are self describing and encode all the currently available actions available there is no need to worry about, for example, versioning your API! In fact, you don’t even need to document it!

If things change, the hypermedia responses change, and that’s it.

It’s an incredibly flexible and innovative concept for building distributed systems.

Does that mean only humans can interact with a REST system? But then it doesn't really deserve the qualifier of "application programming interface".

Comment on

CGNAT version 2

Reply in thread

Well the "one address" bit sure :) but given the scale supported by CGNAT systems today, I don't think being able to support an entire country behind a single cluster is that far off. At which point the difficulty becomes "is the 100.64.0.0/10 block big enough"? Or maybe they're using DS-lite for the hauling from private network to the NAT.

linux

Comment on

What is syslog-ng and how do I get experience with it?

Reply in thread

Besides Journal not being available on non-Linux, there are a could of reasons for using syslog: it can log to a remote server for instance. Journal does have a remote logging capability, but at best you have to run two log sinks in parallel, at worse it's a non starter because everything that's not a Linux box (network routers, VMware hosts, IDS appliances) can't speak to it

Another is fine filing and retention. With syslog you can say things like "log NOTICE and above from daemon XYZ to XYZ.log and keep 30 days worth; log everything including DEBUG to XYZ-debug.log, keep no more than 10MB". With Journal you rotate the entire log or nothing, at least last I looked I couldnt find anything finer. There are namespaces, but that doesn't compowe, the application needs to know which log goes into which namespace

python

Comment on

Python's pathlib module

Reply in thread

Scapy is another library where they redefined / to layer packets, such that you can write:

IP(dst="172.23.34.45") / UDP() / DNS(…)

Then Scapy has magic so that on serialisation, the UDP layer knows defaults to dport=53 if the upper layer is DNS, and it can access the lower layer to compute its checksum.

And don't forget that strings have a custom % (as in modulo) operator for formatting:

"Hello %s" %(username)

Of course in modern Python, f-strings will almost always be more convenient

Comment on

Linus Torvalds on how and when to maintain a clean git history (2009)

Reply in thread

While exploring solutions, I use f or ffto mean “follow-up/to-squash” and a to mean logically separate. Sometimes other (additional) short abbreviations to know where to move, squash, and edit the changes to.

I recently discovered git commit --fixup=abcd1234: it will make a new commit with a message of fixup! <message from abcd1234>. (It's the only special thing that flag does: a specially formatted commit message, which you can craft yourself if you remember the spelling of the fixup! marker.)

When you later rebase, git rebase --interactive --autosquash will automatically mark that commit to be a fixup of abcd1234.

magit for emacs has shortcut for creating a fixup commit selecting the previous commit, I'm sure other interfaces do too.

I guess my commit descriptions get better with project lifetime

I've found that too, which I think is because as the project matures, you're more likely to make fixes or contained features, as opposed to regular "change everything" as you explore the design in a young project.