A slow development test cycle will kill your software.
New developers won't want to learn your project, because they would rather shoot themselves.
This means that build time, and the time to run tests, must be short.
5 seconds to rebuild is the maximum upper limit.
Of course, at some point software gets large enough that things won't fit anymore in 5 seconds. But then you must have either some kind of build caching, or options to do partial builds/tests that will bring things down to that 5 second mark.
You also have to spend some time profiling execution and build from scratch times.
A slow build from scratch will mean that your continuous integration costs a lot, money that could be invested in a new developer!
It also means that people won't bother to reproduce bugs on given commits, or bisect stuff.
One anecdote comes to mind. Ciro Santilli was trying to debug something, and more experience colleague came over.
To reproduce a problem, ciro was running one command, wait 5 seconds, run a second command, wait 5 seconds, run a third command:
cmd1
# wait 5 seconds
cmd2
# wait 5 seconds
cmd3
The first thing the colleague said: join those three commands into one:And so, Ciro was enlightened.
cmd1;cmd2;cmd3
Once upon a time in the 2010's, Ciro Santilli went to an artsy theatre venue in the suburbia of Paris, dragged by his wife then girlfriend of course.
In the venue, there was a politician, who was doing his best to show how much they supported the arts, and there were of course the artists, involved in the play.
The politician would see a political power score on top of every person's head, and would spend an amount of time talking to each person exactly proportional to that score. This meant basically one sentence to us. The words themselves didn't really matter of course, only the time spent, they just have to produce nice sounds.
One of the artists however, and he seemed quite important in the production, for some reason spent a huge amount of time speaking to us. The score the artist saw on our heads was of love, or how interested we were in the art.
Genius: Richard Feynman and Modern Physics by James Gleick (1994) Updated 2025-01-06 +Created 1970-01-01
This is a good book.
It has some overlap with Surely You're Joking, Mr. Feynman, which it likely takes as primary sources of some stories.
However, while Surely goes into a lot of detail of each event, this book paints a more cohesive and global picture of things.
In terms of hard physics/mathematics, this book takes the approach of spending a few paragraphs in some chapters describing in high level terms some of the key ideas, which is a good compromise. It does sometime fall into the sin of to talk about something without giving the real name to not scare off the audience, but it does give a lot of names, notably it talks a lot about Lagrangian mechanics. And it goes into more details than Surely in any case.
The trivial takes a few hours.
The easy takes a week.
And what seemed hard takes a few hours.
As "deadlines" approach, feature sets get cut down, then there are delays, and finally a feasible feature set is delivered some time after the deadline.
The only deadlines that can be met are those of tasks which have already been done but not announced.
This is of course Hofstadter's law.
On the other hand, as a colleague of Ciro once mentioned, it is also known that the time it takes for a task to be done expands without limits to match the deadline. And therefore, without deadlines, tasks will take forever and never get done.
And so, in a moment, perceiving this paradox, Ciro was enlightened.
Nvidia A10G GPU, 4 vCPUs.
Mentioned e.g. at: videocardz.com/newz/amd-begins-rdna3-gfx11-graphics-architecture-enablement-for-llvm-project as being part of RDNA 3.
One very good thing about this is that it makes it easy to create test cases directly in C++. You just supply inputs and clock the simulation directly in a C++ loop, then read outputs and assert them with
assert()
. And you can inspect variables by printing them or with GDB. This is infinitely more convenient than doing these IO-type tasks in Verilog itself.Some simulation examples under verilog.
First install Verilator. On Ubuntu:Tested on Verilator 4.038, Ubuntu 22.04.
sudo apt install verilator
Run all examples, which have assertions in them:
cd verilator
make run
File structure is for example:
- verilog/counter.v: Verilog file
- verilog/counter.cpp: C++ loop which clocks the design and runs tests with assertions on the outputs
- verilog/counter.params: gcc compilation flags for this example
- verilog/counter_tb.v: Verilog version of the C++ test. Not used by Verilator. Verilator can't actually run out
_tb
files, because they do in Verilog IO things that we do better from C++ in Verilator, so Verilator didn't bother implementing them. This is a good thing.
Example list:
- verilog/negator.v, verilog/negator.cpp: the simplest non-identity combinatorial circuit!
- verilog/counter.v, verilog/counter.cpp: sequential hello world. Synchronous active high reset with active high enable signal. Adapted from: www.asic-world.com/verilog/first1.html
- verilog/subleq.v, verilog/subleq.cpp: subleq one instruction set computer with separated instruction and data RAMs
There is only a very fine difference between a very good film, and the best films of all time. Perhaps it is something to do on how epic the subject matter is? It is often very hard to tell, and switches between the categories are also possible.
The Purpose of Harvard is Not to Educate People by Sean Carroll (2008) Updated 2025-01-06 +Created 1970-01-01
Maybe they did try once though: Harvard Project Physics.
Too restrictive. People should be able to make money from stuff.
The definition of "commercial" could also be taken in extremely broad senses, making serious reuse risky in many applications.
Notably, many university courses use it, notably MIT OpenCourseWare. Ciro wonders if it is because academics are wary of industry, or if they want to make money from it themselves. This reminds Ciro of a documentary he watched about the origins of one an early web browsers in some American university. And then that university wanted to retain copyright to make money from it. But the PhDs made a separate company nonetheless. And someone from the company rightly said something along the lines of:TODO source.
The goal of universities is to help create companies and to give back to society like that. Not to try and make money from inventions.
The GNU project does not like it either www.gnu.org/licenses/license-list.en.html#CC-BY-NC:
This license does not qualify as free, because there are restrictions on charging money for copies. Thus, we recommend you do not use this license for documentation.In addition, it has a drawback for any sort of work: when a modified version has many authors, in practice getting permission for commercial use from all of them would become infeasible.
en.wikipedia.org/wiki/Creative_Commons_NonCommercial_license#Defining_%22Noncommercial%22 also talks about the obvious confusion this generates: nobody can agree what counts as commercial or not!
In September 2009 Creative Commons published a report titled, "Defining 'Noncommercial'". The report featured survey data, analysis, and expert opinions on what "noncommercial" means, how it applied to contemporary media, and how people who share media interpret the term. The report found that in some aspects there was public agreement on the meaning of "noncommercial", but for other aspects, there is wide variation in expectation of what the term means.
Our minimal definition of "electronic money" is the following.
Instead of creating legal tender such as Dollars as banknotes or transactions in some complex obscure banking system, the government offers an official simple centralized API that represents it instead.
Each citizen or legal entity has an account there, and transfers between registered users are just simple API calls.
So for example you would e able to put all your money in the government account instead of using useless banks. And then you would invest it as you want with the investment company of your choice, without tying the "my money is here" with "this is the best investment" aspects of banks.
Good theory of Jesus.
List of similar feeling films: www.youtube.com/watch?v=zwYwFoanrNg 11 Underrated Hard Sci-fi Movies by Marvelous Videos (2021)
Ah, Ciro Santilli loved this one... games young Ciro Santilli played.
And as a result, adult Ciro really enjoys tool-assisted speedruns of the game.
Historian Alan B. Carr:
- www.youtube.com/@AlanBCarr. IMPORTANT NOTE: Although Alan B. Carr is a Los Alamos National Laboratory (LANL) employee, this page has absolutely no formal connection with LANL.
This is a simple hierarchical plaintext notation Ciro Santilli created to explain programs to himself.
It is usuall created by doing searches in an IDE, and then manually selecting the information of interest.
It attempts to capture intuitive information not only of the call graph itself, including callbacks, but of when things get called or not, by the addition of some context code.
For example, consider the following pseudocode:Supose that we are interested in determining what calls
f1() {
}
f2(i) {
if (i > 5) {
f1()
}
}
f3() {
f1()
f2_2()
}
f2_2() {
for (i = 0; i < 10; i++) {
f2(i)
}
}
main() {
f2_2()
f3()
}
f1
.Then a reasonable call hierarchy for
f1
would be:f2(i)
if (i > 5) {
f1()
f2_2()
for (i = 0; i < 10; i++) {
f2(i)
main
f3
f3()
main()
Some general principles:
- start with a regular call tree
- to include context:
- remove any blank lines from the snippet of interest
- add it indented below the function
- and then follow it up with a blank line
- and then finally add any callers at the same indentation level
Unlisted articles are being shown, click here to show only listed articles.