Robert van Engelen, PhD

527 posts

Robert van Engelen, PhD banner
Robert van Engelen, PhD

Robert van Engelen, PhD

@vEngelenRobert

Follow me on Bluesky where science, math, tech, art and retro communities thrive

Katılım Eylül 2013
1 Takip Edilen150 Takipçiler
Sabitlenmiş Tweet
Robert van Engelen, PhD
Robert van Engelen, PhD@vEngelenRobert·
Fixing old tech, while writing and benchmarking new SIMD methods for new software releases. Energy boosted by the fantastic New York City skyline. I❤️NY
Robert van Engelen, PhD tweet media
English
0
0
4
257
Robert van Engelen, PhD
Robert van Engelen, PhD@vEngelenRobert·
@tsoding Warning: isdigit is not valid for negative char, i.e. on non-ASCII when char is signed, which depends on the compiler. Also, isdigit is (or used to be?) locale-specific in the Microsoft world. Just use >=‘0’ <=‘9’.
English
0
0
1
113
Тsфdiиg
Тsфdiиg@tsoding·
Who needs regular expressions?
Тsфdiиg tweet media
English
50
58
1.5K
91.2K
Robert van Engelen, PhD retweetledi
Quanta Magazine
Quanta Magazine@QuantaMagazine·
For decades, computer scientists have been attempting to meld the airtight security of the zero-knowledge proof with the time-saving probabilistically checkable proof. They always failed to reach the perfect solution – until now. quantamagazine.org/computer-scien…
Quanta Magazine tweet media
English
1
32
114
39.2K
Robert van Engelen, PhD
Robert van Engelen, PhD@vEngelenRobert·
@ChShersh @carlo_dellacqua No. Code synthesis at any level must never break when dependencies are updated. If that’s the case, replace with your own logic to get rid of this mess. For 20+ years I’ve kept my source code generation tools stable.
English
0
0
2
104
Dmitrii Kovanikov
Dmitrii Kovanikov@ChShersh·
@carlo_dellacqua Codegen tool version is not enough. One of the dependencies may change version without changing a single line of code in the tool and you may get a completely different result.
English
15
0
57
5.8K
Dmitrii Kovanikov
Dmitrii Kovanikov@ChShersh·
My hottest tech take: generated source code should be committed. It happened to me so many times when the code generation logic was changed, a bug was introduced and there were no git diff to even compare with the old versions.
English
139
42
1.2K
235.8K
Robert van Engelen, PhD retweetledi
Raven Kwok
Raven Kwok@RavenKwok·
Weighted, color-inverted, then finetuned the dragon curve tiles piece created earlier this year. It will be exhibited at Foundry, Dubai this coming September.
English
110
717
8.9K
501.3K
Robert van Engelen, PhD
Robert van Engelen, PhD@vEngelenRobert·
@lefticus If C/C++ programmers don’t know operator precedence, then they should get a refresher video, not some scolding. Physicists, mathematicians and engineers don’t have a problem with their (terse) notation either. It is what it is, although implicit multiplication sure is evil 😱
English
10
0
5
41K
Jason Turner
Jason Turner@lefticus·
If your code forces me to think about the order of operator precedence in the language, you should add some ().
English
18
8
335
13.4K
Robert van Engelen, PhD retweetledi
Didier 'Dirac's ghost' Gaulin
Didier 'Dirac's ghost' Gaulin@DiracGhost·
A follower of mine suggested to me, not long ago, this wonderful book called Musimathics by Gareth Loy. It's an amazing exposition of the mathematical foundation of music, in two volumes. The chapter on the ''geometric basis of sound' is worth the price of entry alone.
Didier 'Dirac's ghost' Gaulin tweet media
English
14
127
1.1K
59.8K
Robert van Engelen, PhD
Robert van Engelen, PhD@vEngelenRobert·
@HeyBirt When I replaced caps in my M100, I was surprised how many had leaked. None of that was visible on the PCB before cap replacement. Leakage damage was minimal, fortunately, but would have gotten worse over time. Some vias were clogged with oxidized solder & had to use a pin vise.
English
0
0
1
32
Hey Birt!, The 'Assumulator'
NOTE: If you have a Model 100 & the electrolytic caps have not already been replaced, they ARE leaking. The PCB is being damaged. This machine has only moderate damage, some of them are much, much worse.
Hey Birt!, The 'Assumulator' tweet mediaHey Birt!, The 'Assumulator' tweet mediaHey Birt!, The 'Assumulator' tweet mediaHey Birt!, The 'Assumulator' tweet media
English
2
1
10
184
Robert van Engelen, PhD retweetledi
Vipul Vaibhaw
Vipul Vaibhaw@vaibhaw_vipul·
Let me say this, Don't fake it. If you think you don't know something, learn it. Take time - watch lectures, build prototypes etc. In this world of pretence, Be honest, at least to yourself! Lastly, with countless ways to live, choose the one that brings you true happiness.
English
5
25
238
7.5K
Robert van Engelen, PhD retweetledi
vx-underground
vx-underground@vxunderground·
Logging into Xitter and seeing thousands upon thousands of people, who have never written a single line of code their entire life and can barely use a computer, giving their expert input into kernel-mode programming
vx-underground tweet media
English
128
564
6.6K
283.9K
Robert van Engelen, PhD
Robert van Engelen, PhD@vEngelenRobert·
@abhi9u Immunity to vulnerabilities would be nice, but even the Rust devs screw up so don’t tell average devs they can’t make mistakes with Rust. It’s what happens to all maturing PL, so give it time for more stories to come out cvedetails.com/vulnerability-…
English
0
0
1
5
Robert van Engelen, PhD
Robert van Engelen, PhD@vEngelenRobert·
@abhi9u A false sense of a lack of risk is worse, which the industry is sometimes trying to sell. Basically, critical complex systems must be reviewed and extensively tested before deployment. Regardless of the programming language used. Rust won’t save any time or cost there.
English
2
0
2
18
Robert van Engelen, PhD
Robert van Engelen, PhD@vEngelenRobert·
Working on generally improving the accuracy of the Bitap method aka shift-or (multi-)string search. Aim to further accelerate ugrep’s regex search by reducing false positives. Rejecting these with predict-match Bloom filter is necessary but less frequently. Experiments will tell!
English
0
0
1
67
Robert van Engelen, PhD
Robert van Engelen, PhD@vEngelenRobert·
Keep moving forward. Don't look back! Surprised to see my research at my old CS department is well read. I left the dept 6 years ago as tenured full professor to work in my own R&D shop. Did I tell you I really enjoy working on interesting & challenging things? @ResearchGate
Robert van Engelen, PhD tweet media
English
0
0
4
89
Robert van Engelen, PhD
Robert van Engelen, PhD@vEngelenRobert·
@moyix Can’t blame you, it’s great. 36 years of vi and vim for me. Still my daily driver to edit code, documentation, LaTeX etc.
English
0
0
1
28
Brendan Dolan-Gavitt
I’m now of an age where I can say things like “I’ve been using vim for a quarter century” and honestly that’s messed up
English
17
1
99
9.9K
Kiefer Sutherland
Kiefer Sutherland@RealKiefer·
With a heavy heart, I tell you that my father, Donald Sutherland, has passed away. I personally think one of the most important actors in the history of film. Never daunted by a role, good, bad or ugly. He loved what he did and did what he loved, and one can never ask for more than that. A life well lived.
Kiefer Sutherland tweet media
English
71.2K
104K
946.3K
43.1M
Robert van Engelen, PhD retweetledi
Abhinav Upadhyay
Abhinav Upadhyay@abhi9u·
Today I published a comprehensive 5000 word article on the design & implementation of the GC in CPython. Took me many weeks to get this out. Here's a summary: CPython primarily uses reference counting for GC. Every object maintains reference count in its header and the runtime manipulates it to track how many references the object has. When the object's reference reaches 0, it immediately gets deallocated. However, if the objects have a cycle of references in between them, then the vanilla reference counting implementation doesn't work. To handle this situation, there is a GC as well which detects cyclic references and if they are not reachable, then it breaks their cycle to get them deallocated by reference counting. CPython uses a generational garbage collector, which has 4 generation: 1 young gen, 2 old gens and 1 permanent gen. The GC generation is represented via this struct. It contains a doubly linked list to which objects are appended. Whenever the GC cycle triggers, this list needs to be traversed to scan the objects. Not all the objects are tracked for GC in CPython. Primitive types, such as ints, floats, strings etc. don't need to be tracked by the GC because they cannot contain other objects and cannot participate in cycles. Only container type objects are tracked, such as lists, dicts, tuples, user defined classes etc. To allow container type objects to be linked to the GC's linked list, these objects have an additional GC header where the linked list pointers are maintained. When a container type object is initially allocated, it gets added to the young gen, and the count of objects in young gen is incremented. If that count has crossed the threshold then a GC cycle is scheduled. The cycle is scheduled by setting a flag in the eval_breaker field in the thread state object. The thread state object maintains state information about the activities on the interpreter in the context of the current thread, such as current frame pointer, GC state, and eval_breaker. The eval_breaker is a collection of flags to inform the interpreter about various async events that it needs to handle, such as signals, async exceptions, and GC. The interpreter checks the eval_breaker at the beginning or the end of certain bytecode instructions. When the interpreter checks eval_breaker and notices that the GC cycle flag is set, it goes and invokes the GC code. The current GC implementation in CPython scans the young generation and a fraction of one of the oldest generations (this is called incremental GC). The GC algorithm starts scanning the linked list of objects to detect cycle. The algorithm is quite involved and I can't describe here, so check it out in the article. At the end, the GC might have a list of objects that had cyclic references between them but could not be reached from anywhere else. For these objects, the GC invokes their tp_clear function. tp_clear is a function pointer defined in the object header (inside PyTypeObject) which needs to be implemented by all the container type objects. tp_clear basically has to traverse to all the contained objects within the object and decrement their reference counts. Once, that happens, the cyclic of references will break and the reference counting mechanism will ensure that these objects get deallocated. For the NOGIL implementation, the overall reference counting and GC continue to work as I've described above. But there are many internal changes to make them thread-safe, which I've described in the article (check it out, see replies).
Abhinav Upadhyay tweet mediaAbhinav Upadhyay tweet mediaAbhinav Upadhyay tweet mediaAbhinav Upadhyay tweet media
English
7
49
297
25.8K