It's worth pointing out that what you are fondly remembering from a consumer standpoint was an absolute nightmare from the publishers', and not just for pure greed, though that definitely plays a role.
Game consoles were (and still are to a some degree), by and large, toys. Toys that parents buy for their children with the expectation that they can be mostly left to their own devices with them. The ESRB/PEGI/etc. ratings system was put in place so that parents would be able to trust that they know what's in the toy without having to sit over the kids' shoulders every single minute they are playing. In a sense it's not unlike Mattel spending a lot of energy making sure their dolls and action figures don't pose any choking hazards.
Allowing modding breaks that system, and by extension the accompanying trust. This is a big deal for a toy manufacturer. It's also why Hot Coffee was such a mess despite the content not being normally accessible. Parents don't want to have to care about technicalities.
People like to think of this situation as a "think of the children"-type of hand-wringing, but it's actually more of a "think of the parents", who happen to be the ones with money.
Again, not discounting the greed and DRM aspects of this, and it definitely sucks pretty hard for adult users of the systems, but it's far from all there is to it.
> Spark doesn't even have geospatial data types and the open source packages that add support leave a lot to be desired.
Could you say more about this? I'm curious if you've compared Apache Sedona [0] and what specifically you found lacking? I currently work at Wherobots [1], founded by the creators of Apache Sedona and would love to hear any feedback.
3200 megapixels custom CCD array cooled to about -100 °C sounds amazing.
The 3.5 degree FoV is around 700 mm focal length equivalent on a full frame camera which makes this relatively wide field by telescope standards, allowing it to capture more of the sky per shot. But the array is 64 cm wide so the actual focal length is around 10 meters.
I was confused as hell for a long time when I first got into ML, until I figured out how to think about tensors in a visual way.
You're right: fundamentally ML is about vector and matrix operations (1D and 2D). So then why are most ML programs 3D, 4D, and in a transformer sometimes up to 6D (?!)
One reasonable guess is that the third dimension is time. Actually not. It turns out that time is pretty rare in ML, and it's only (relatively) recently that it's been introduced into e.g. video models.
Another guess is that it's to represent "time" as in, think of how transformers work: they generate a token, then another given the previous, then a third given the first two, etc. That's a certain way of describing "time". But it turns out that transformers don't do this as a 3D or 4D dimension. It only needs to be 2D, because tokens are 1D -- if you're representing tokens over time, you get a 2D output. So even with a cutting edge model like transformers, you still only need plain old 2D matrix operations. The attention layer creates a mask, which ends up being 2D.
So then why do models get to 3D and above? Usually batching. You get a certain efficiency boost when you pack a bunch of operations together. And if you pack a bunch of 2D operations together, that third dimension is the batch dimension.
For images, you typically end up with 4D, with the convension N,C,H,W, which stands for "Batch, Channel, Height, Width". It can also be N,H,W,C, which is the same thing but it's packed in memory as red green blue, red green blue, etc instead of all the red pixels first, then all the green pixels, then all the blue pixels. This matters in various subtle ways.
I have no idea why the batch dimension is called N, but it's probably "number of images".
"Vector" wouldn't quite cover all of this, and although "tensor" is confusing, it's fine. It's the ham sandwich of naming conventions: flexible, satisfying to some, and you can make them in a bunch of different varieties.
Under the hood, TPUs actually flatten 3D tensors down into 2D matrix multiplications. I was surprised by this, but it makes total sense. The native size for a TPU is 8x128 -- you can think of it a bit like the native width of a CPU, except it's 2D. So if you have a 3x4x256 tensor, it actually gets flattened out to 12x256, then the XLA black box magic figures out how to split that across a certain number of 8x128 vector registers. Note they're called "vector registers" rather than "tensor registers", which is interesting. See https://cloud.google.com/tpu/docs/performance-guide
When you are not experienced on the platform you are building on, all debugging is heroic.
It's really strange that they would invest all this time as if they are keen to understand the cause of why it happened, but then be satisfied when jiggling the handle solved it. The real cause ultimately is a process one (developer discipline) or a pipeline one (bad build/test/deployment processes). They got close to realizing it and then blamed the language instead of what appears to be bad practices happening on their dev team.
If you pull the llama.cpp repo and use their convert/quantize tools on the pytorch version of the models uploaded to huggingface, they will load just fine into ollama:
> The numerical notation of 4 is IV in Roman numerals.
Using "IIII" instead of "IV" isn't even necessarily wrong. Rome was a big empire with a widely-distributed populace that lasted for a thousand years. The usage of numerals changed over time and according to context:
"While subtractive notation for 4, 40 and 400 (IV, XL and CD) has been the usual form since Roman times, additive notation to represent these numbers (IIII, XXXX and CCCC)[9] continued to be used, including in compound numbers like 24 (XXIIII),[10] 74 (LXXIIII),[11] and 490 (CCCCLXXXX).[12] The additive forms for 9, 90, and 900 (VIIII,[9] LXXXX,[13] and DCCCC[14]) have also been used, although less often. The two conventions could be mixed in the same document or inscription, even in the same numeral. For example, on the numbered gates to the Colosseum, IIII is systematically used instead of IV, but subtractive notation is used for XL; consequently, gate 44 is labelled XLIIII."
As for clock faces, the explanation that I always heard was that it simplified the manufacturing process to use IIII rather than IV; something about making better use of materials to have one fewer V and one more I.
There seems to be a lot of confusion between malware and vulnerabilities. None of the vendors mentioned in this subthread detects malicious code, only vulnerabilities.
Good as they'll be in detecting vulnerabilities, you are still unprotected from malicious code planted in your code bases.
Mhm, but it kinda hurts to see, that AMD is able to push out APUs powering the likes of a Playstation 5 and everything on a single chip, while on desktop you need to buy the cpu and a chunky gpu seperately.
Off the top of my head, here are some reasons people still want a headphone jack:
* Invested in quality audio equipment that they'd like like to continue using without a crappy dongle
* Bluetooth dongles don't have the same level of integration that EarPods do, for instance (e.g., button presses don't work the same way)
* Lightning or USB-C headphone adapters are easy to lose track of
* Lightning or USB-C headphone adapters are awkward sticking out of your phone and risk breaking the port
* Dislike the environmental impact of trashing perfectly fine equipment
* Dislike like the environmental impact of moving to a model of disposable equipment with non-replaceable batteries
* Tired of the inconvenience of dropping wireless ear phones and not being able to find them (e.g., this happens frequently on flights¹)
* Weary of dealing with Bluetooth issues (e.g., my AirPod Pros randomly disconnect from my iPhone with regularity and I have to click multiple things to switch from my phone to my work laptop)
It's fine if these don't apply to you, but they're a little more substantive than the Luddite hand-wringing you suggest.. And for them the trade-off to get a slightly slimmer phone wasn't worth it. That's not to say there aren't advantages to wireless headphones, but supporting one doesn't mean having to preclude the other.
Thanks for that idea, I use Ollama as my main LLM driver, but I still use OpenAI, Anthropic, and Mistral commercial API plans. I access Ollama via a REST API and my own client code, but I will try their UI.
re: cancelling ChatGPT subscription: I am tempted to do this also except I suspect that when they release GPT-5 there may be a waiting list, and I don’t want any delays in trying it out.
I think it is even easier right now for companies to self host an inference server with basic rag support:
- get a Mac Mini or Mac Studio
- just run ollama serve,
- run ollama web-ui in docker
- add some coding assitant model from ollamahub with the web-ui
- upload your documents in the web-ui
No code needed, you have your self hosted LLM with basic RAG giving you answers with your documents in context.
For us the deepseek coder 33b model is fast enough on a Mac Studio with 64gb ram and can give pretty good suggestions based on our internal coding documentation.
The pace of progress here is pretty amazing. I loved how easy it is to get llamafile up and running, but I missed feature complete chat interfaces, so I built one based off it: https://recurse.chat/.
I still need GPT-4 for some tasks, but in daily usage it's replaced much of ChatGPT usage, especially since I can import all of my ChatGPT chat history. Also curious to learn about what people want to do with local AI.
Context: Furbys were the toy for a year or two, and were actively marketed as learning from speech, had an active mic, and did adjust their speech based on what they heard, "learning" to speak English from Furbish. [^1]
It's not so different from the fundamental fear of Alexa/Assistant/microphones that's fairly well diffused now.
Except the Furby actively claimed to learn how to speak based on your speech, and had a built-in feedback loop to make it appear as such.
In retrospect it looks like it more was "shift mix towards English based on how much you've heard" than "add words you heard to your speech patterns"
Most likely it has badly conditioned embedding vectors for those particular tokens, leading the network to edge into numerically unstable territory; once you get some sort of underflow or NaN, they tend to propagate and invalidate the entire output. If there are any batchnorm or other operations that mix values between different entries in a batch, you could even cause other peoples' sessions to return junk values!
If you want to go deeper with RFID and can spend a bit more (~$50), I am pretty happy with my knockoff Proxmark3 Easy [0] I got on ebay. (Do some research to find a good seller as I have heard some sellers ship bad units). It can do both 125khz and 13.25Mhz RFID/NFC and is easier to use then some of the Android apps for cracking Mifare keys.
For the price, it is great for more complex attacks and almost has all the features of a full Proxmark RDV4 (minus BLE and a battery).
Hah. I didn't think this was quite HN worthy at this point - the code is still a mess, and has plenty of bugs.
It is however the wm I actually use since I got frustrated with bspwm and did a very minimalist rewrite of TinyWM [1] in Ruby [2] and expanded it from there. It was painful the first few days until I'd had time to add multiple desktops and the start of a tiling mode. But at this point, it's "almost" pleasant for me.
The warnings are real, though, apart from the initial hyperbole - this is likely to break for you in all kinds of horrible ways still.
[EDIT2: As for a real example of the ways it can/will break: Right now, for some reason, after a restart without changing a single line, it's failing to grab super+buttons to move/resize windows; it doesn't really matter as I have keybindings for it and mostly use those, but, yeah, I'm doing something wrong somewhere and last time this happened the problem just went away by itself]
I use very few applications beyond (my own) terminal, (my own) polybar replacement, (my own) file manager, and a browser, and so once Chrome and my own apps mostly started working ok I've had very little incentive to make sure it behaves nicely with anything else and I know the distinction between different EWMH window types is incomplete and broken - just not in ways that usually affect my own use.
EDIT: Also a couple of quick notes on "design choices" to the extent this has been "designed" rather than accreted: As you can see in e.g. desktop.rb, quite a few places I've chosen to query and filter the top-level WindowManager class for a list of windows matching a given set of criteria. I did that on an experimental basis out of the idea that it was a waste of time to track precise state across multiple objects given that the total set of windows will always remain "small".
So the Window objects know the bare minimum state of the underlying X11 window that it needs to track, and the WindowManager class knows how to map an X11 window id to a Window object.
Other than that I avoid tracking state as much as possible, and even where I track state I try to avoid the need for full precision.
The one other place I must track state is the layout classes. Currently, only the basic tiling layout, which keeps a tree (that is currently a binary tree, but the array of nodes is there because I at one point thought I might allow more nodes) where the leaves keep track of which nodes have a defined place in the layout.
But even there, on updating the layout, I then crudely diff the currently known set of windows vs. the set of windows the layout believes are present and remove/add as needed.
I make a best effort to place new windows on map requests, but if anything breaks for any reason, the layout will "catch" up automatically and new windows will be placed. Given I use this daily while it is in flux and often broken because I've made a change and is testing it "live" on my desktop, this has turned out to be very helpful on occasion.
I can't make up my mind if this method (of constantly querying for attributes of every window) is a crude hack or quite elegant, but it works.
Many other things are not "designed". This is mostly very far from a good example of how to actually do things. E.g. "find_closest" used to pick a window to move to when you want to move directionally in a tiling layout is pretty much guaranteed to be possible to do much better with fewer lines of code once I actually get around to sitting down and thinking about it - the current version was cobbled together in a hurry because I was tired of not having the functionality and it "mostly works" as expected even though it's stupid.
The neutral element for + is 0 (x + 0 = x for any x).
The neutral element for * is 1 (x * 1 = x for any x).
Furthermore, you have arithmetic properties like x * 0 = 0 for any x (annulation) or (x + y) * z = (x * z) + (y * z) for any x, y, z (distributivity).
Similarly:
The neutral element for OR is false (x OR false = x for any x).
The neutral element for AND is true (x AND true = x for any x).
Furthermore, x AND false = false for any x, and (x OR y) AND z = (x AND z) OR (y AND z) for any x, y, z.
So OR works very much like + algebraically, and AND works very much like *.
When using 0 and 1 for false and true, AND is exactly the same as multiplication, and OR is like addition with saturation arithmetics (i.e. 1 + 1 = 1).
The common precedence rules stem from those parallels.
On the truly lightweight end, I find Apple's Shortcuts to be effective for ad-hoc personalized creations. I wanted a simple journaling app which allowed me to just talk, transcribed what I said, and stored it with a timestamp in a text file. Realized I could do all of that quite easily with Shortcuts: I trigger it, talk as long as I want, tap the screen, transcribes (I call an API for better quality), then appends the result to a note with a timestamp. Fast, easy, and it's been reliable. No in-app purchases or ads, either.
Great read! This reminds me of a macOS app I made for my wife a few years back. It keeps track of the opening hours of all her favorite shops, and she can click a menu bar icon to see how long until each one closes today. It also warns if it's currently peak/rush hour for the shop, since she prefers to go when it's less crowded.
It's a simple Qt app that uses a text file for data storage. I wrote it after noticing that she had trouble remembering which shops are open when. I asked her what to call it, and she said "Gladiolus, like the flower" so I named it Gladiolus.
I can say for sure I've never had a more appreciative client as a programmer than the one user of Gladiolus :^)
> "GM, for instance, at one time picked up the entire cost of funding health insurance premiums of its employees, their survivors and GM retirees, as the US did not have a universal health care system."
This is an article about automakers. The reason they picked up future healthcare costs is because they're future healthcare costs, which lets the bosses pay themselves bonuses from current profits and then the company can go bankrupt from unfunded future obligations after they've moved on to another company. The reason isn't that the US doesn't have a universal healthcare system, and even if it did, they could have provided supplemental insurance etc., and would still have wanted to because that too is a future cost instead of a present day one.
The reason that qualifier is there is as a dig against the US healthcare system, in a way that aligns with particular partisans. The opposing partisan might have inserted something like "as the US has high healthcare costs as a result of regulatory dysfunction" though of course neutrality would have been to say neither of them because it's an article about automakers rather than healthcare systems.
And yet it's there, and that kind of thing is all over the place.
Android was, I think, even better in the early days.
It had 4 hardware buttons: back, menu, home and search. They lost menu and search along the way. Sure, they weren't always needed, but they were common enough functions that could warrant dedicated buttons. Now, everything is different and you never know how to popup a menu (hamburger menu? where? or is it a swipe?), even though it is always the same functionally.
Not that, it's about how you navigate through screens in the same app and in multiple apps. Since the back gesture and back stack is universal and all apps are presenting activities added to the back stack, you can seamlessly move between apps using "intents" which are abstracted messages that multiple apps understand, and even tunnel through an arbitrary number of apps, and back up through each of their screens as if they were all in the same application.
An example of an intent is "can anyone open this PDF file" or "the user wants to pick a file, can any app do that and let me know what they picked?"-- those file pickers could also be from your network browser app, or Dropbox, etc.
And since activities are serializable (well, technically the intents that led to those activities being started), Android can do this without requiring the apps deep in the app stack to be running. It can freeze those apps to reserve resources and restart them at the specific activity when the user returns, if necessary.
iOS does have limited inter-app linking (it's the tiny little back arrow and the previous app name that you'll sometimes see at the very top of the screen), but since back gestures aren't universal, the only reliable way to activate that feature is to tap it, since the app may not even understand back gestures, let alone do the extra work of relinquishing control when their own local back stack is empty.
I watched some government sale and they posted a PDF vehicles for sale that were forfeited.
The VINs where there but parts of it where blacked out.
It was a PDF. I copy-pasted the text behind the black box and got the full VIN.