6,142 karma · joined October 23, 2018
Knowledgable & helpful person, available for hire :-)
I'm looking for more work, ideally on a consulting / freelance / part-time basis.
LinkedIn is better than email to make first contact if you'd like to talk, whether for work or just chat about something you liked here on HN! (I often miss interesting one-off mails among the deluge, and don't check it every day.)
I work 80% time at a funded stealth startup as hands-on tech lead, with zero-knowledge (ZK) cryptography, Bluetooth low energy (BLE), and peer-to-peer distributed systems, linking physical devices as well as the usual web stack. Can't say more, but it is intended to become open source. This a really fun and challenging project, with a great team! (It's not on my LinkedIn - stealth).
With my remaining 20% I am currently available and looking for software dev and/or tech leadership and/or business strategy consulting.
I'm versatile but develop mostly low-level or "system" software in C, C++, Go, Rust and Nim, with Linux as my main OS (but MacOS and Windows also). I have about 30 years professional dev experience over a wide range of systems, from embedded to supercomputers, Linux kernel, database engines, as well as GUIs, the web, and even games. Good at performance optimisation, debugging. Also good math & physics.
I've worked as an Ethereum core dev (EVM), so I know that environment well, especially improving EVM database speed, which is a critical factor! Currently my rabbit holes are ZK cryptography speed optimisation, and a novel fast database engine (neither B-tree nor LSM-tree, but with characteristics of both).
(ZK = zero-knowlege cryptography).
Clearly, real-time notifications are useful with many apps, notably real-time messaging, even if you don't think they have a place with bank apps.
For bank and credit card apps, I find their push notifications to be very useful. They are among the most useful notifications I get, because they tell me about things I find important, which I wouldn't notice otherwise.
They tell me things about transactions that have gone through, sometimes after a long delay, transactions that need confirmation right now or they will be blocked, balance being too low, or too high (credit cards), payments that are required today, refunds that came through after a product was returned, transfers that completed on the receiving said, payment received from a client, direct debits that are going out tomorrow so I will need to make sure there's enough in the account, customer service messages that require a response from me or they will eventually close the account, and so forth.
"Just open the app" doesn't work: All of those, except transaction confirmations, are things where I wouldn't know to open the app if I didn't get a message of some kind to tell me.
These days, in some juristictions it's also required to send real-time notification to confirm some purchases, because the phone's security is considered better than card details alone. Depending on how the purchase is made (e.g. in-person vs online, different payment terminals), you might not know the reason a transaction is blocked or held is because it's waiting for you to confirm in the app, so the notification is useful for this.
All these used to be done by SMS, and that was useful too. But SMSs are just push notificatons with a worse UI and worse visual cues.
When ELF was added to Linux, I think it used a bit less RAM than a.out.
ELF made it easier to build and deploy shared libraries, and the design was more consistent at keeping code sections read-only despite run-time linking (the PLT stuff), so more RAM pages ended up automatically shared between processes by the kernel, compared with a.out.
I don't agree with this dependency on being in good standing with Google either.
But there is a technical reason that isn't wanting to avoid using their push servers. It is about battery usage and radio bandwidth.
Keeping open an idle connection over WebSocket, long-poll HTTP or TCP/IP needs regular pings (typically 30 seconds are used), one ping per connection. Otherwise your app can't be sure to receive messages from the server in real time, as the connection can disappear into CGNAT or similar hole where it doesn't receive messages sent by the server. To an app not using pings to check, such a blackholed connection is indisinguishable from an idle connection with no pending messages.
Waking the radio every 30 seconds, times 2 (back and forth), times the number of registered applications, would be quite battery draining. It drains battery both for background CPU usage and radio processing. Those pings in aggregate can even amount to a significant amount of data usage for users on smaller plans.
So there is a battery and radio advantage in using a shared push service, which only need a single idle connection to be kept live with 30 second pings.
There's another level to this, not available to regular developers using TCP/IP, HTTP or WebSockets.
The mobile network itself has to maintain handset connection liveness to the nearest tower, at a lower level than IP pings, and this is obviously optimised for battery and radio performance, and always running.
With arrangements in place with the mobile networks (which Google and Apple have), the mobile OS can leverage that for more reliable, lower power push notifications, by either guaranteeing the network will send something technically similar to a low-level SMS when there's an outstanding message, or by guaranteeing their special push IP connection will stay live by itself (no CGNAT blackhole) or be notified if something happens to it.
This allows the mobile OS to offer a shared push service that's fairly reliable at real-time notifications, with zero continuous CPU and radio power overhead for the idle connection.
Unfortunately not.
I'm in the UK. Two of my personal banks, all four business banks that I need to use, and several credit cards, require authentication using their phone app to confirm login on their website.
None of those I've seen are using TOTP or SMS, for which I could use a general security service. All use their own phone or tablet app. One does something interesting where the website shows a unique QR code on each login, the phone app reads it with the phone camera, and then website login proceeds instantly without clicking anything.
Oh, and some of them also require phone app confirmation for card purchase transactions.
When my last phone's screen stopped working, I called one bank's "phone banking" line (using another phone of course) to make an urgent transaction, and they told me they can't do that, as only service they offer by phone is registering a new phone or tablet. They told me explicitly that it's not possible to login to their web-based banking service without using their app for authentication, and on a registered device.
It's the reason I have my current phone. I had to buy a cheap-ish Android in a hurry from a local shop, in order to proceed with my bank transaction.
Back to the main topic: I love the idea of a properly open source phone, I used to own not one but two Nokia N900s, and I once toyed with the idea of building my own Linux phone from scratch, big project though that is.
But the security ecosystem around logins has changed, and so have the services I depend on. These days I use many bank and other financial-service related apps, and I'm not, in practice, free to switch providers. So I couldn't use a Nokia N900 or modern equivalent any more as my only mobile device. I'd have to carry a second phone as well.
(Banking and other service authentications are also the only reason I have my current passport. I resented having to pay to renew my expired passport, given I had no plans to travel (small children) and the expired passport used to be accepted, but I found some banks, credit cards and even government services increasingly requiring to see a non-expired passport from time to time. When I asked one of them what do they do for the large number of people who don't have one, they simply told me they close those people's accounts and that's ok, they don't need to serve everyone. But that's another story.)
I've seen my phone camera's real-time viewfinder show text on a sign with one letter different from the real sign. If I wasn't looking at the sign at the same time, I might not have noticed the synthetic replacement.
I don't think the Tyranny of Structurelessness is arguing in favour of hierarchy, or against other forms of organization than hierarchy.
I don't think it's arguing against "flat" or "anarchy" style organizations either.
In essence, I think it's asking us to do whatever we're doing better, more honestly, more effectively, and less stressfully. By acknowledging, clarifying, communicating, and seeking to understand the real operating structures, what's really going on. And then to improve them, using that understanding.
An actually flat organization might be good, I don't know. I've never seen one. I've been in some that claimed to be flat, and became stressful places to work, for the same usual reasons hierarchies can be unpleasant, including incompetent bosses (not called bosses). But I've also had some pleasant experiences in flat organizations, and I prefer it that way, if it's designed and run well.
- Control-Left/Right takes about 1 second.
- Four-finger swipe left/right takes about 1 second.
- Alt-Tab to an app on another desktop takes about 0.25 seconds.
I'm using Sonoma 14.8.3, but from the comments it sounds like the timing distinction is similar on other versions.
Data was compressed in interior and exterior trees, where interior trees were the data structure inside blocks (similar to B-tree block contents), and exterior trees were the structure between blocks (similar to B-tree block pointers, but it didn't use a B-tree, it was something more exotic for performance).
Each node provided compression context for its children nodes, while also being compressed itself using its parent's context.
As you can imagine, the compression contexts had to be tiny because they were everywhere. But you can compress compression contexts very well :-)
Using compression in this way removed a few special cases that are typically required. For example there was no need for separate large BLOB storage, handling of long keys, or even fixed-size integers, because they fell out naturally from the compression schema instead.
The compression algorithms I explored had some interesting emergent properties, that weren't explicitly coded, although they were expected by design. Some values encoded into close to zero bits, so for example a million rows would take less than a kilobyte, if the pattern in the data allowed. Sequence processing behaved similar to loops over fast, run-length encodings, without that being actually coded, and without any lengths in the stored representation. Fields and metadata could be added to records and ranges everywhere without taking space when not used, not even a single bit for a flag, which meant adding any number of rarely-used fields and metadata was effectively free, and it could be done near instantly to a whole database.
Snapshots were also nearly free, with deltas emerging naturally from the compression context relationships, allowing fast history and branches. Finally, it was able to bulk-delete large time ranges and branches of historical data near instantly.
The design had a lot of things going for it, including IOPS performance for random and sequential access, fast writes as well as reads, and excellent compression.
I'd like to revive the idea when I have time. I'm thinking of adding a neural network this time to see how much it might improve compression efficient, or perhaps implementing a filesystem with it to see how it behaves under those conditions.
The reachability problem is, even with public addresses, sometimes you have to do the same thing to "configure port forwarding" with stateful IPv6 firewalls as with double or triple NAT IPv4.
https://news.ycombinator.com/item?id=46355765
"I still have a piece of glass in back of the palm of my right hand. Threw a rock at an old CRT and it exploded, after a couple of hours I noticed a little blood coming out of that part of hand. Many, many years later was doing xray for a broken finger and doctor asked what is that object doing there? I shrugged, doc said, well it looks like it's doing just fine, so might as well stay there. How lucky I am to have both eyes."
https://news.ycombinator.com/item?id=46354919
"2. Throwing a big big stone to an abandoned next to the trashcan CRT TV while I had it placed normally because it didn’t break when I threw it facing up and the next thing I remember after opening my eyes which I closed from the bang was my friends who were further down the road looking at me as it I were a ghost since big big chunks for the CRT glass flew just right next to me.
CRTs were dangerous in many aspects!"
https://news.ycombinator.com/item?id=46356432
"I'll never forget the feeling of the whoosh when I was working as a furniture mover in the early 2000s and felt the implosion when a cardboard box collapsed and dumped a large CRT TV face-down on the driveway, blowing our hair back. When the boss asked what happened to the TV, I said it fell, and our lead man (who had set it on the box) later thanked me for putting it so diplomatically."
"The company I work at gives all new developers a pair of 1080p displays that could have come right out of 2010."
I have the same problem. The monitors at the office where I currently work are all low-DPI.
Work is quite irrational when it comes to spending decisions. It's not just penny pinching. They waste a lot of time and money at the same time as they block and worry about much smaller expenses. Asking them to provide one or two good, modern monitors at non-trivial cost would likely be described something as a "luxury" or "treat", which is how they described my personal laptop when they found out how much it cost.
At least I'm able to use my own laptop at the current job. It's much more powerful than anything the company would provide.
From https://commonslibrary.parliament.uk/research-briefings/sn06...:
"Someone who was born British and has no other nationality cannot be deprived of their citizenship in any circumstances."
"Deprivation now affects people born in the UK, not just naturalised citizens"
"Until 2003, however, deprivation was only possible for naturalised citizens."
"The Nationality, Immigration and Asylum Act 2002 extended citizenship deprivation to British-born dual nationals for the first time."
Not true. If you have dual nationality at birth, typically because you have one British parent and are born in the UK, then you are British at birth but the Home Secretary has the power to strip you of British citizenship anyway.
So, paradoxically, a child born in the UK to a British mother can end up with stronger UK citizenship rights if the mother doesn't reveal who the father is.
That's not as bad as if you are a naturalized British citizen. In that case, the Home Secretary has the power to strip you of British citzenship and leave you entirely stateless (you have no citizenship anywhere), which you can imagine is a very difficult status to live with.
For example,
pi = the square root of the sum of 6/x^2 over x = (1, 2, 3...).
pi = the smallest positive value of ln(-1)/i.
pi = half the period of non-zero solutions to the differential equation f = -f''.
Computing pixel coverage accurately isn't enough for the best results. Using it as the alpha channel for blending forground over background colour is the same thing as sampling a box filter applied to the underlying continuous vector image.
But often a box filter isn't ideal.
Pixels on the physical screen have a shape and non-uniform intensity across their surface.
RGB sub-pixels (or other colour basis) are often at different positions, and the perceptual luminance differs between sub-pixels in addition to the non-uniform intensity.
If you don't want to tune rendering for a particular display, there are sometimes still improvements from using a non-box filter
An alternative is to compute the 2D integral of a filter kernel over the coverage area for each pixel. If the kernel has separate R, G, B components, to account for sub-pixel geometry, then you may require another function to optimise perceptual luminance while minimising colour fringing on detailed geometries.
Gamma correction helps, and fortunately that's easily combined with coverage. For example, slow rolling tile/credits will shimmer less at the edges if gamme is applied correctly.
However, these days with Retina/HiDPI-style displays, these issues are reduced.
For example, MacOS removed sub-pixel anti-aliasing from text rendering in recent years, because they expect you to use a Retina display, and they've decided regular whole-pixel coverage anti-aliasing is good enough on those.
That's how I talk, and admittedly some people find how I talk confusing when I think it's clear. Thanks for the amusing heads up on language interpretation!
In pseudo-code: (clear (not (eq (reason for doing it) (to get out of debts))))).
If the domain is registered with the client named as the formal owner, the client may well be the owner even if they haven't paid for it yet.
It's dissolved by "compulsory strike-off", which means the registrar did it as a penalty for late filing of accounts about 4 months after their due date, and failing to send an email saying "the company is still required" to the registrar, which is enough to prevent the dissolution.
It happened before in 2021 to this company. The company was restored a few months later, which is permitted when it's been dissolved by the registrar for filing accounts late.
Restoring a company also restores its liabilities (debts), so it's clear they were not doing it in 2021 to get out of debts.
My guess is it's an oversight by the owner, who is prone to filing things late and doesn't have an accountant. It's quite common in the UK for single-person companies to not have an accountant, and to not know all the rules.
Plenty of health conditions or life events can cause an oversight like this, especially for someone who is already prone to filing close to the deadlines.
After the company is dissolved this way, it's unlawful to continue trading, which includes paying suppliers from company funds. The owner immediately loses all company assets. Their bank accounts may be frozen or closed quickly, so they might suddenly find themselves without access to their funds. That can be a awkward if the owner wasn't expecting it, or if they don't even know it's dissolved. Business banks in the UK freeze account access for other inscrutable reasons sometimes, so it's not always obvious when the reason is dissolution.
This doesn't excuse not replying to the supplier to explain, unless they are really unlucky and lost access to their paid Google account or similar as a side effect as well. Or if they had the kind of sudden health condition or life event that causes a person to miss filing deadlines.
git uses "less -FRX" by default. This is how I learned about -F.
(To be pedentic, git uses "LESS=FRX less", which accomplishes the same thing.)
2^256 states are comfortably distinct in that many dimensions with amplitude ~1. Their distinctness is entirely direction.
The obvious parallels to vector embeddings and high-dimensional tensor properties have some groups working out how to combine them in "quantum AI", and because that doesn't require the same precision (like trained neurel nets still work usefully after heavy quantization and noise), quantum AI might arrive before regular quantum computation, and might be feasible even if the latter is not.
Not enough to move the needle. 25% would move the needle.
> with mentions that I could double it in one year
They didn't believe you, or didn't after a short time working there. So it didn't move the needle.
More so if they're experienced. Similar mentions of prospects are common in interviews, and rarely followed through. You eventually learn to be skeptical of them, while rolling with it, just in case.
Also, if you might be willing to pay double their requested salary, they start realising their value on the open market is much higher than they'd previously thought, or could be with a little presentation and experience.
On the other hand, if you'd put it in the contract that their salary will double after 1 year, subject to well-defined criteria and a history of actually doing it with existing employees, then they'd believe you, and that would move the needle a lot.
From your story I speculate you were right to fire them, but you never figured our how to get the best out of them. In recent years it's possible you were subject to employment fraud, as clarity of analysis can disappear if it's a different person doing the work than the person answering interview questions.
Progress that's entirely stalled or negative can happen for many other reasons than moonlighting, and many other reasons than not putting enough time.
Ah, but Chrome was obviously better than Firefox.
When Chrome was released, the advertising I recall focused on one killer feature that Firefox didn't get for many years after that: Speed.
Chrome's JIT JavaScript was so much faster than everyone else's interpreted JavaScript that you could run a materially different kind of software in the browser. It was like the difference between a slow interpreted language and a fast compiled one. Chrome's rendering was also fast.
There was even a cartoon explaining how the new JavaScript engine worked.
Chrome felt like the next generation of browser.
I say this as someone who remained a fan and user of Firefox throughout. I stuck with Firefox through its relatively slow years.
Firefox caught up, but it took years. It got its own JIT JavaScript, but there were a few years after that where Firefox's rendering was relatively slow by the new standards. However, Firefox has excellent performance all round by now.
I was disappointed when Chrome came out that JIT JavaScript could even be a marketable feature and wasn't already the default in the best open source browsers, because it seemed like such an obvious thing to do for many years prior, and not particularly difficult. I guess market forces resulted in nobody deciding to do it in Firefox, or any other open source browser, until competition made it a necessity. I was quite surprised, because Firefox seemed like the product of passionate technology nerds, and performance JITs are very fun and satisfying things to make, with visible results.
No, it does not. You forgot the interest. Let's call it 6%, close to the current US average.
The interest by itself comes to more than $1700 a month!
Paying $1700 per month, you'll never pay off $350k, even with a 1000 year mortgage.
To pay in 17 years, you'd need to pay $2741 (plus fees) per month. Most of that will be interest at first, but it tapers down. If you want to start out not paying mostly interest, you'll need to pay at least $3500 (plus fees) per month.
However, there commits start 33 years before Git was created. Merge commits were not even a concept back than.
Actually... you can free those 999 sbrk() pages using munmap() on Linux and Darwin (so most likely the BSDs too). You can also change the mappings within the sbrk()-allocated range, much like any other mmap.
This feature is not well known, nor particularly useful :-)
I'm not the one deciding.
I said some of the harms are severe. Not everything. It refers to things like people losing their online accounts, having their bank account drained, their credit rating ruined, private photos shared, passwords changed or published, losing files to ransomware, all as an indirect result of poorly handled data collection resulting in identity theft and similar.
I'm pretty sure most people affected by those things do consider them severe, and that many people upon learning about those things also consider them quite severe, even if they didn't care before they learned.
If most of those people consider those things severe, that's enough to call them severe.
You don't need my opinion for that.
Contrary to popular belief, those aren't in the POSIX standard.
The following are not in the POSIX standard, they are just widely implemented:
- "#!" line.
- /bin/sh as the location of a POSIX compliant shell, or any shell.
- /usr/bin/env as the location of an env program.
- The -S option to env.Sometimes the harm is severe. Vast oceans of poorly handled personal data collected in exquisite and unnecessary detail by dark patterns, copied around to everyone who might be interested with low regard for security, kept forever, analysed by the best algorithms and sold to whomever will buy it, raise the risks and consequences of identity theft and fraud for everyone.
Those are the sorts of things GDPR is designed to limit.
The GDPR isn't about cookies or websites. It applies to non-web-based businesses too. It's basically just insisting on security best practices in every part of a business that handles personally identifying or sensitive data.
Limiting its collection to what is necessary and consented to, deleting or anonymising it when it's no longer required, respecting wishes of the individuals the data, and giving people some confidence that security best practice is taken seriously.