The key layout on the calculator (DA or desk accessory) exactly matches the numeric keypad of the Lisa keyboard, but the big '=' key is labelled 'Enter' on the physical keypad. You could use the keypad to use the calculator, which I remember doing on a "Macintosh XL" (a Lisa running Mac OS) Having the big key be '=' was a nice usability feature since 'Enter' didn't make much sense in the calculator DA.
If you search for pictures of "Original Lisa Keyboard" you can see that the layout is the same. However, in the pictures I found the key that corresponds to the small '=' in the screenshot in the article is labelled '-' and there appear to be some other differences. I don't remember these differences or any rationale for them.
Update: They screenshot in the article exactly matches the Macintosh Plus keyboard -- which is a keyboard I actually owned. Although I used Mac XL before getting my Plus, it's probably this keyboard that I'm remembering:
It’s odd because the original Macintosh had a smaller keyboard without a numpad, however one was offered separately. It’s interesting because this “original” keypad has different placement or operator keys than the Plus keyboard.
Hmmm... Disappointing that the static methods are no longer imported as of JEP 512. I thought that was the whole point of the new IO class. If we can't write "println" we might as well just write "System.out.println".
3. Use Java 25 IO.println() to simplify console output
4. Instead of throwing a fatal exception on interruption, return "Interrupted" immediately.
5. Use future.join() so the main method waits for the future to complete and the "Data fetched" output is printed.
This program can be run directly from source with `java Example.java`. (If you're using Java 24 or a version of Java 25 prior to EA 22, you need to use `java --enable-preview Example.java`)
Here is a modified version of the example that interrupts the thread:
void main() {
ExecutorService executor = Executors.newSingleThreadExecutor();
CompletableFuture<String> future = CompletableFuture.supplyAsync(this::asyncMethod, executor);
future.thenAccept(result -> IO.println(result));
IO.println("Prints first"); // prints before the async result
executor.shutdownNow();
future.join(); // Wait for future to complete
}
String asyncMethod() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
return "Interrrupted";
}
return "Data Fetched";
}
The article is paywalled, but the headline word "fraud" doesn't match the first few paragraphs of the article.
"Regulation by enforcement" has been a real thing and a bad thing. You can't expect people to obey the law if you won't tell them what it is.
I would like to see the government prosecute actual fraud, so if the article goes on to say they will not prosecute that, then maybe the headline is accurate.
What is actual fraud? Is it what SBF did? Is it what what coinbase did? Both of those were actual fraud to me, and Coinbase was let go, and would be under this policy.
> You can't expect people to obey the law if you won't tell them what it is.
Good thing this wasn't happening with crypto fraud. Wire fraud is pretty much the same even with blockchain.
> You can't expect people to obey the law if you won't tell them what it is.
That's an excuse the crypto community dreamed up. The SEC's position, pre-Trump, was quite clear: crypto assets are securities. File an S-1, as you would for an IPO, with all the usual disclosures, under penalty of perjury. A very few crypto issues did that.
This new statement is mostly about crypto "exchanges". Pure exchanges aren't so bad. At no point in a trade does the NYSE own the asset. It's that crypto exchanges are usually not just exchanges, but brokers, dealers, custodians, and lenders. All of which can lose assets.
Actual memo: [1] It doesn't really change much. Frauds against investors can still be prosecuted.
I think a fork with a mission to aggressively rewrite the kernel into Rust would be a great experiment. Lessons learned could be applied to the more mainstream C/Rust kernel(s).
For those interested in the rationale for the simplified main methods (and the rationale for not simplifying further), the relevant JEP is a good read.
The parent article mentions and links JEP 477 -- the 3rd preview of the same feature-set. JEP 495 is the 4th preview and is included in JDK 24 which is in "stabilization" mode for release in March 2025.