HN user

i_don_t_know

882 karma

peter dot ilberg at gmail dot com

https://www.linkedin.com/in/peter-ilberg/

Posts33
Comments275
View on HN
www.heise.de 3mo ago

The Sinclair ZX Spectrum White Edition

i_don_t_know
2pts3
codeberg.org 4mo ago

Lean-TUI for the lean proof assistant

i_don_t_know
2pts0
blog.janestreet.com 6mo ago

Fun with Algebraic Effects – From Toy Examples to Hardcaml Simulations

i_don_t_know
4pts0
pinetreelabs.github.io 8mo ago

Archimedes – A Python toolkit for hardware engineering

i_don_t_know
126pts15
www.cl.cam.ac.uk 8mo ago

Why higher-order logic is a good formalisation for hardware

i_don_t_know
1pts1
algorithmsbook.com 11mo ago

Algorithms for Optimization (second edition preview) [pdf]

i_don_t_know
3pts1
www.quantamagazine.org 1y ago

The Quanta Podcast

i_don_t_know
1pts0
algorithmsbook.com 1y ago

Algorithms for Validation

i_don_t_know
3pts1
www-verimag.imag.fr 1y ago

Synchronous Programming of Reactive Systems [pdf]

i_don_t_know
2pts0
docs.racket-lang.org 1y ago

Reactor: A Synchronous Reactive Language

i_don_t_know
2pts0
www.ni.com 1y ago

NI LabVIEW Compiler: Under the Hood

i_don_t_know
1pts0
dl.acm.org 2y ago

LabVIEW [PDF]

i_don_t_know
3pts1
xpqz.github.io 2y ago

Learning APL

i_don_t_know
4pts0
www.jsoftware.com 2y ago

The description of finite sequential processes

i_don_t_know
1pts0
www.youtube.com 2y ago

Live Coding in APL [video]

i_don_t_know
3pts0
zelus.di.ens.fr 2y ago

Zélus – A Synchronous Language with Odes

i_don_t_know
2pts0
www.research-collection.ethz.ch 2y ago

Lola System Notes [pdf]

i_don_t_know
3pts1
www.or.uni-bonn.de 2y ago

Combinatorial Optimization in VLSI Design [pdf]

i_don_t_know
3pts1
news.ycombinator.com 3y ago

Ask HN: Electronic note-taking – Kindle or iPad or something else

i_don_t_know
6pts7
www.atlasobscura.com 3y ago

Kaffeost

i_don_t_know
56pts41
www.cs.toronto.edu 3y ago

Programming Cognitive Robots

i_don_t_know
80pts20
news.ycombinator.com 4y ago

Ask HN: Books on formal methods for software verification?

i_don_t_know
2pts0
news.ycombinator.com 5y ago

Ask HN: Getting Started with FPGAs on macOS

i_don_t_know
5pts4
www.minicp.org 5y ago

Mini-CP: A Lightweight Constraint Programming Solver

i_don_t_know
3pts0
news.ycombinator.com 5y ago

Ask HN: Books or courses on cyber-physical systems?

i_don_t_know
3pts0
www.4er.org 6y ago

Course Notes on Optimization Models and Methods (Robert Fourer)

i_don_t_know
2pts0
news.ycombinator.com 6y ago

Ask HN: Introduction to Scientific Computing?

i_don_t_know
1pts2
news.ycombinator.com 6y ago

Ask HN: Design and Implementation of Term Rewriting Systems

i_don_t_know
7pts4
alphacocoa.sourceforge.io 6y ago

Alpha Text Editor for macOS

i_don_t_know
1pts0
code.kx.com 7y ago

Kx Developer (k IDE free for personal/non-commercial use)

i_don_t_know
2pts0

Iirc, the interpreter recognizes common idioms (sequences of 2-4 operations) and has optimized fused implementations for those idioms that avoid intermediate results.

It can also avoid creating intermediate results for quite a few operations, because for example reverse, transpose, etc only change how the arrays are traversed (order in which elements are accessed). You can reuse the original data and change the indexing information. That’s known as beating and dragging.

Rust 1.0 is 11 years old and it's still trivial to compile Rust code from then. I doubt that will change in the next 9 years.

Maybe it's trivial to compile Rust code but it's not trivial to build a project with dependencies. I'm trying to get my feet wet with an official USB example project from Embassy on my RP2040. It doesn't work in the latest git repo for some unknown reason (might be my fault, probably is, but it's not obvious to me).

I'm assuming it worked at some point, maybe something changed and someone forgot to update something somewhere (there are lots of example projects). So I thought I'd "git bisect" until I find a working version and go from there. Well, I cannot get it to build against anything older than a year ago and that version also isn't working for me. It's dependency and Rust edition hell.

I used to work on LabWindows/CVI an integrated C development environment. It included an "Interactive Execution Window" where you could build programs piecemeal. You added pieces of code, ran them, then appended more code, ran the new pieces, etc. It was as text window so you had more freedom than in a simple REPL.

It integrated with "Function panels". Function panels were our attempt at documenting our library functions. See the second link below. But you could enter values, declare variables, etc and then run the function panel. Behind the scenes, the code is inserted to the interactive window and then run. Results are added back to the function panel.

These also worked while suspended on a breakpoint in your project so available while debugging.

My understanding was that these features were quite popular with customers. They also came it handy internally when we wrote examples and did manual testing.

https://www.ni.com/docs/de-DE/bundle/labwindows-cvi/page/cvi...

https://www.ni.com/docs/de-DE/bundle/labwindows-cvi/page/cvi...

https://irkr.fei.tuke.sk/PPpET/_materialy/CVI/Quick_manual.p...

I used to run long distance, no music, no headphones, no trackers, no watch. Let your mind drift, or focus on the rest of the course. Or go swimming and count laps. Or go bouldering (in doors), pick a route and focus on it.

An incoherent Rust 4 months ago

I’m not sure I fully understand but this seems to be the kind of problem that Ocaml functors solve. You program against an interface (signature) and you supply a concrete implementation (structure) when you want to run it. You can use different implementations in different parts of your application.

So maybe do something similar in Rust by expanding how you import and export modules?

I loved my Kosmos electronics kits. My mom threw out the kits eventually but I still have the manuals.

https://patric-sokoll.de/SonstigeSammlungen/Kosmos%20E200/Ha...

My first computer was their CP1. It was aimed at older children and teens. You programmed it in a custom assembly language. The manual included lots of projects and instructions on how to hook it up to their electronics kits.

http://www.8bit-homecomputermuseum.at/computer/kosmos_comput...

http://www.8bit-homecomputermuseum.at/computer/pictures/kosm...

Thanks! That was actually really good. His performance matches the emotions underlying the song.

Something all the covers of Behind Blue Eyes by The Who seem to miss is the slowly rising anger and frustration.

When I became interested in FPGAs recently, I read this book https://nostarch.com/gettingstartedwithfpgas

I bought a cheap FPGA board based on Lattice's ice40. There are free OSS tools to write, simulate, and install your Verilog/VHDL design onto the ice40.

It's probably a far cry from what a professional FPGA programmer does with Vivado etc but it might give you an inexpensive idea of the basics and if you want to pursue it.

mdx[1] is another variation on this, also in the Ocaml ecosystem. It’s Ocaml’s version of documentation tests as in Elixir and Rust.

But it’s not limited to that. You can write tests in markdown files independently from your documentation. Use “dune test” to run the tests and review failures with “git diff”. Accept the changes if they are correct (changed behavior) with “dune promote”. Very nice workflow.

[1] https://github.com/realworldocaml/mdx

Well I am talking about before a military conflict erupts. I’m talking about what is in the interest of the people, when they are looking at a potential military conflict.

When you’re looking at a potential military conflict, you’re looking at a hostile foreign government that’s openly threatening you. What reasons do you have to believe that they will be friendly and that life will go on as usual after you have surrendered?

The foreign government cares about your land, resources, industry, strategic location, etc. They do not care about you, the people. Otherwise they would encourage you to move to them.

In the case of Ukraine, being peacefully “relocated” to Russia seems much better than what is happening now.

Would it be better though? The Ukrainian government was/is far from perfect. But it’s the government they chose, it’s not an authoritarian one (it tried to be which led to the Maidan protests). They chose to be an independent country and in control of their own destiny. They don’t want to subject themselves to an authoritarian foreign government and they consider that to be in their best interest.

I’m not sure the people in Eastern Ukraine who have been “relocated” to Russia agree with your idea of “nothing changes except for the government”. I don’t think the people across Europe and Asia during World War II would agree either.

Your new government does not and cannot trust you. You pledged allegiance to your old country. Are you still secretly fighting for it? Or have you pledged allegiance to your new country? Does that mean anything when you betrayed your old country to whom you had pledged allegiance too? You’re a potential enemy and your new government will act accordingly.

I remember seeing a Mandelbrot program for the C64 where half the image was computed on the floppy drive because it's basically the same computer as the main C64. I think it had a 6502 instead of a 6510 and different memory.

I believe the Apple II floppy drive was "dumb", that is, controlled by the 6502 of the Apple II, so the machine couldn't do anything/much while loading/saving data. But the C64 + floppy drive was essentially a two-node distributed system.

I haven't used LLVM in ages. I think it injects references to functions in the CRT when you do certain operations in your code. _fltused is one of them, and I think _ftol? or something like that for floating point numbers is another one. There was also a "security cookie" at some point in the MSVC libs. Unfortunately, I don't remember the linker flags to get rid of that reference, IIRC it had to do with runtime stack checking.

These references do not appear in the .ll file. They are injected when the .ll file is compiled to object files.

I think something in your code triggers a reference to one of the other injected functions and that pulls in the CRT.

Try compiling your test file into an .o or .obj, that is, without linking. Then dump the symbols in the object file to see what symbols are referenced. I suspect you'll see other references to symbols in CRT and you will have to replace those as well with stubs.

Unfortunately, I don't remember the linker flags to replace/suppress the default CRT libs. Well, actually, you might compile to .o / .obj and then manually link on your system. If you're using MSVC check the options to its "link" executable (I don't remember the exact name of the MSVC linker).

I'm German, I don't speak Dutch. But I was able to follow a Dutch tour guide in Den Haag just fine when she was explaining things in Dutch. She kindly repeated everything in English for my benefit (I was the only foreigner) even though I told her I understood her just fine in Dutch.

You have to "adjust your ears" a bit but I think if you know German and English then you can understand Dutch just fine if it's not slang.

Does it make sense to change direction at this point? I envy PhDs working on self-driving cars and rockets and AI.

You don’t need a PhD to work on rockets. Well, you might depending on what you want to do.

There are a lot of software opportunities at rocket companies from test systems, real-time measurements, operator interfaces, flight simulation, and various other internal supporting software.

You might be interested in and have the right experience for, for example, operator interfaces and various internal dashboards and database applications. That might be your entry into the field and you can try to branch out from there into other areas.

(Original title shortened because it's too long.)

Why higher-order logic is a good formalisation for specifying and verifying hardware

Mike Gordon

September 1985, 28 pages

DOI https://doi.org/10.48456/tr-77

Abstract

Higher order logic was originally developed as a foundation for mathematics. In this paper we show how it can be used as: 1. a hardware description language, and 2. a formalism for proving that designs meet their specifications.

Examples are given which illustrate various specification and verification techniques. These include a CMOS inverter, a CMOS full adder, an n-bit ripple-carry adder, a sequential multiplier and an edge-triggered D-type register.

See also https://lawrencecpaulson.github.io/2023/01/04/Hardware_Verif... and "Interactive Formal Verification, Lecture 11: Hardware Verification" by Lawrence Paulson https://www.youtube.com/watch?v=KVdgoEpo4uI&list=PLVdBoNna-4...