bremac
Remote: Yes
Willing to relocate: Yes
Technologies: Java, C, C++, SQL, Python, Kubernetes, Linux, perf, PostgreSQL, OCaml
Résumé/CV: http://macdonell.net/resume.pdf
Email: [email protected]
Staff engineer with over a decade of experience leading products to successful delivery and beyond. Recently focused on high-performance streaming analytics at Sight Machine (I led the design and implementation of their stream processing engine, and before that, their data acquisition product), I can also work as a generalist backend developer or team lead.
Shoot me an email if you want to chat!
Location: San Francisco, CA
Remote: Yes
Willing to relocate: Yes
Technologies: Java, C, C++, SQL, Python, Kubernetes, Linux, perf, PostgreSQL, OCaml
Résumé/CV: http://macdonell.net/resume.pdf
Email: [email protected]
Staff engineer with over a decade of experience leading products to successful delivery and beyond. Recently focused on high-performance streaming analytics at Sight Machine (I led the design and implementation of their stream processing product, and before that, their data acquisition product), I can also work as a generalist backend developer or team lead.Shoot me an email if you want to chat.
No management positions, please!
[1] https://mail.openjdk.org/pipermail/panama-dev/2023-July/0193...
[2] https://mail.openjdk.org/pipermail/panama-dev/2023-July/0194...
If the preallocation is done using fallocate or just writing zeros, then by default it's backed by blocks on disk, and readahead must hit the disk since there is data there. On the other hand, preallocating with fallocate using FALLOC_FL_ZERO_RANGE or (often) with ftruncate() will just update the logical file length, and even if readahead is triggered it won't actually hit the disk.
1. Kernel support to be enabled in order to make x32 system calls. Checking /proc/config.gz on Arch Linux, my kernel does not appear to have it enabled.
2. An x32 toolchain to build against. For gcc and glibc, that would mean re-compiling as described here: https://sourceware.org/glibc/wiki/x32
3. All of the libraries you link with to be recompiled for the x32 ABI.
x86 is definitely easier to build against since there's still legacy software using it, whereas almost nobody seems to use x32. However, over the long term I expect x86 compatibility will bit-rot too.
This part is totally doable, and in fact it's one of the pointer compression modes built into the JVM: https://shipilev.net/jvm/anatomy-quarks/23-compressed-refere...
For C++, it's a really interesting thought experiment, but in practice there are a few rough edges:
1. Your debugging tools will probably struggle to interpret compressed pointers.
2. You'll need to roll your own containers too. Otherwise, vectors, strings, maps, smart pointers, etc. will still use 64-bit pointers. In my experience, containers account for most pointers in a modern C++ code base.
3. _Technically_, the representation of null pointers is implementation-defined, so truncating to 32 bits and then zero-extending is not portable: it could convert a null pointer to a non-null pointer. In practice it doesn't matter though, since every modern target uses a zero bit pattern for null pointers.
> The -m32 option sets int, long, and pointer types to 32 bits, and generates code that runs on any i386 system.
That restricts you to the smaller register set, removes all amd64 instructions, and uses the x86 ABI (on Linux, parameters are passed on the stack instead of in registers.) I suspect that this is why your program became slower.
This LWN article has some additional information: https://lwn.net/Articles/691932/
In North America, many of these laws were passed in the early part of the 1900s [1]. I don't think that were very many mega producers at the time, though I'd love to be proven wrong.
Also in my experience it's really hard to avoid contamination. My family farm works hard to keep their cows healthy, happy, and clean, and still has occasional issues with high somatic cell counts in their milk. It doesn't help that cows will (rarely) decide to release their bowels while you're milking them...
[1] https://www.marlerblog.com/lawyer-oped/a-legal-history-of-ra...
Your bigger problem is the supply chain. After the apocalypse, I doubt you'll have an easy time sourcing cans, bulk product, spare parts, and sanitizer to run your factory. After all, each of those inputs to your process have their own complex supply chain too. And no, you're not really going to be able to scavenge these parts of manufacture them yourself, since they all have fairly fine tolerances.
In reality, I'd expect that an apocalypse will cause a reversion to a more subsistence-style lifestyle, where production and consumption are largely local and supply chains are very simple, if present at all. Computers will not help with this. I can't imagine keeping our current production processes running without all of the things required to support them.
Several MPs and MLAs have received suspicious packages: https://www.cbc.ca/news/canada/nova-scotia/mike-kelloway-sus...
"Protesters" tried to break into a federal MP's constituency office: https://www.cbc.ca/news/canada/nova-scotia/covid-19-protests...
And that's just Nova Scotia. This isn't as bad as the October Crisis, but it's still quite serious. It's not small potatoes.
[1] https://www.washingtonpost.com/politics/2021/08/05/scalises-...
Do you have a reference for this? That would break every ACID database that I'm aware of, including sqlite and postgresql. There has been a lot of work in the last few years to fix data durability issues with fsync (e.g. https://lwn.net/Articles/752063/), so I would be very surprised to hear that fsync is now a no-op.
The biggest problem caused by using multiple versions of the same library is that object representations are not stable across versions. Let's say you use a library "foo" that creates and manipulates Foo objects. You want to serialize them to JSON, so you use the third-party library "foo-json". If you have [email protected] and foo-json depends on [email protected] then foo-serializers will likely fail to serialize the Foo objects created by your application. This is why npm supports peer dependency constraints, though usually they're invisible to you as a user.
There are also performance and cost issues associated with using multiple versions of each library:
1. Starting the application requires loading many of those library versions, so you will have higher start-up latency than if you only had one copy of each library.
2. If the target platform uses method-based JIT compilation (e.g. Java), each of those libraries will be compiled independently when it is used. This can cause the application to feel sluggish between the time it initially starts up and the time that all of the copies of the libraries on the hot path have been compiled.
3. The program needs to be loaded into memory to execute it. You're not only paying for more hard disk space, but also more RAM. The additional memory required can start to add up if you're running enough replicas of the application in production.
For many small applications the performance and cost issues aren't major concerns, but they can become problematic as the application grows.
To add to the confusion we're still within the 45-day filing window for the end of the last quarter, so some investors may not have filed yet either.
Sight Machine (https://sightmachine.com/) is used by some of the world’s largest manufacturers to make better, faster decisions about their production operations.
Sight Machine's data pipeline ingests streaming data from the factory floor, quality lab, and other manufacturing systems; transforms it according to customer-defined rules; and outputs data that drives our advanced analytics.
We're looking for someone to help build the next generation of the data pipeline, with a focus on performance, robustness, and extensibility.
Qualifications:
* Experience building complex data pipelines -- think realtime reporting or fraud prevention, not counting words. * 5+ years of industry experience.
To apply, visit https://jobs.lever.co/sightmachine/42be7de3-3959-48f1-a22d-7... or email [email protected] with any questions.