Hacker Newsnew | past | comments | ask | show | jobs | submit | iTokio's commentslogin

The trillon dollars question is more, will the current GPUs still be relevant in 3 years? 5? 10?

Will incredibly efficient new GPUs appear? will custom ASIC, models burned in silicons, take off? Will unified memory systems become usable?

The datacenter bets are that things will mostly continue like now, and that these GPUs won’t depreciate too much.

For now theses bets are self-fulfilling, causing hardware to even appreciate.


Type confusion, leads to using an object in memory with the wrong type, that means accessing memory with a different layout, like an out of bounds buffer.

So I think memory safety does matter in that case.


Numbers

Algebra

Geometry

Probability

Analysis

Dynamics

I loved this talk, but these concepts are like an attempt at dimensional reduction of math research, science, the academics knowledge.

I would have loved to have his thoughts on the mathematical mind, the process, how to reason, infer vs deduct, abstract, prove..

I don’t really know, what are the primitives, essential concepts of math reasoning?


The essential concepts of mathematical reasoning, if there are such things, are the concern of mathematical logicians, or maybe even psychologists, not, in general, of working mathematicians. One of my professors once told me something to the effect of "if you think you are going to learn any of that here, you are in the wrong place."

If you are interested in Terence Tao's personal mathematical inner world, he touches on that during his interview with Lex Friedman, which I think you might find interesting. Interviews with Kevin Buzzard sometimes touch on these themes too.


"maybe even psychologists" -- unironically true, but maybe I am talking about something different from you. The basis of (higher-level) math seem to mostly be "am I psychologically (emotionally...?) comfortable with accepting annoying ideas?" At least from my experience.


Thank you, I will watch these interviews!


If you want to follow Terence Tao's new interviews, podcasts, blog posts, etc. and get an email delivered promptly to your inbox, you can do it here: https://recordal.app/people/terence-tao

Disclaimer: I built this tool a couple of weeks back.


Read Polya's "How to Solve It" :)


So… numbers, algebra, geometry, probability, analysis, dynamics are not the primitives or essentials ?


Imo it's not numbers at all but linked to our awareness of physical relationships

Making it about numbers is like making it about cans when it's more about grasping adding one can to a bag of cans, adding 100 cans (multiplication), or the inverse with subtraction and division

Which is why I never liked numbers before algebra which then chucks numbers in the bin more or less.

Numbers are just syntax meant to represent $anything; 1.5 can be half a pill and a whole pill or T or A; numbers are euphemism.

That they can be infinitely big and yadda yadda isn't that meaningful in and of itself and that little bigness is all due to additive qualities of physical space

Geometry is addition or subtraction of shape

It's all built on 4 operations we see in daily life all the time


> Numbers are just syntax

Numerals are syntax; numbers are mathematical objects. “5”, “V”, “101₂”, and “|||||” are different representations of the same number. A variable such as x is closer to what the statement means by something that can stand for arbitrary things.

> It’s all built on four operations

Elementary arithmetic emphasizes +,-,×,÷, but mathematics isn’t reducible to them. Mathematics studies operations and relations such as composition, exponentiation, differentiation, integration, limits, logical implication, set membership, mappings, probability, topology, symmetry, transformations, equivalence relations, and many others.


Related:

From a previous HN discussion of Terence Tao's Six Math essentials book (to be published) my comments pointing to a similar book by John Stillwell (covers Arithmetic, Computation, Algebra, Geometry, Calculus, Combinatorics, Probability, Logic) - https://news.ycombinator.com/item?id=47116399


Why do you feel this is a reduction? If anything, it is an attempt to summarize the various areas of math and how they relate to each other.


Isn't every summarization a reduction?


> Isn't every summarization a reduction?

Broadly yes, but summarization can simultaneously be compression of data and revelation of structure, hence increasing understanding.


It’s like principal component analysis, the main axis, I don’t mean reduction in a negative way.


these might not be 100% complete, but i think this does a reaaalllly good job at capturing the vast majority of mathematics.

i'm sure you could come up with another breakdown, but these also have the benefit of tracking roughly with history. numbers and geometry (euclid), then eventually algebra. probability was a fundamentally new way of looking at the world. analysis comes via newton/leibniz and then dynamics tries to tackle complex systems (kinda where newton left off, e.g., 3-body problem type stuff).

also: dimension reduction is not a bad thing. this is like a decomposition: we can decompose so much of what research mathematics is doing into 6 different basis elements. that's pretty darn neat.

(edit: liebnitz -> leibniz)


This video actually explains math reasoning on a high level. Have you actually watched it?


It’s fascinating to live through a the emergence of a new technology and to see people trying to make sense of it as they go.

I personally think that a lot of the words used around AI, harness, SKILLS, agents, RAG.. are make up words or close to it, words that do not have profound semantics, even though people are trying to, often after the fact, make sense of them.

It’s just popular words that are different enough that people like to use them to claim a new knowledge, or to market a product.

But we could use AI tooling instead of harness in the abstract, and it would be better to use more precise terms for more concrete use cases, agent loop, CLI, IDE..

It was a fun game at a time where papers were competing for attention, but now that it has become a proven technology, I hope we can find more precise and meaningful words.


Hear hear! We techies are bad at naming things. "NoSQL" is probably a top contender there.


I give you "serverless" which is on someone else's... server.


It's lies all the way down...or up?


Indeed!


I love to combine assertions with « restartability ».

If you’re program has entered an unknown, failed state, just restart it from a known state.

Even better if you can divide a complex system in sub modules that can recover independently without bringing down the entire system.

Something like Erlang supervision tree. Or at least a systemd Restart=always service.

if your program is mostly stateless, and « restartable », it becomes fault tolerant, and you can use assertions liberally and easily avoid unknown/bad states.

Invariants can be enforced, and correctness preserved. But an important question remains when an assertion is triggered, why invariants were violated?

We need to preserve context, and decide to handle or not this case. That is easy to forget in code that is assertions oriented.


> We need to preserve context, and decide to handle or not this case. That is easy to forget in code that is assertions oriented.

The old solution to that, which worked very well, was coredumps. The assertion fires and your program is taken down, but just before that we save out the entire memory area of your program. That way you can come in with a debugger later and poke around.

People would often leave some memory areas (typically circular buffers) with debug values that would be useful in debugging. They'd never be used anywhere in the program, unless the programmer had to poke around manually.

I've often wished this workflow was still considered high priority on modern runtimes.


You are very right. With linker maps, debug symbol files etc. we can get a good handle on what went wrong.

> People would often leave some memory areas (typically circular buffers) with debug values that would be useful in debugging. They'd never be used anywhere in the program, unless the programmer had to poke around manually.

In one Linux-based system i worked on, they had an area of memory between the heap and the stack where shared libraries are typically mapped in, sectioned off as a circular buffer via linker scripts for each module which was then used for all sorts of logging. A separate process would also map this memory area to provide a UI and also to write to disk. It was pretty neat and worked great.


That’s a hn filter to avoid clickbait titles I think


Which, more often than not, causes weird titles I’m more likely to click due to sounding curious and interesting, undoing the entire point of the feature.

I would not have clicked on “How My Images Are Dithered” but this truncated version made it sound more like an interesting bug story.


My Title Was Dithered


I went back to Ohio…


Lossy compression


Reminded me of how Safari removes the first word from tab titles


It’s also an old devops trick to put some GB files on the FS of critical systems (databases, ..) when there are no way to dynamically add more space/volumes and monitoring is not trusted.

Bit hard to explain though.


I think sacrificial ballast would be a good term, https://en.wikipedia.org/wiki/Ballast


sandbagging, nice trick. I know its used in project management, where you give conservative estimates to account for some necessary refactoring work (but never tell management you will be refactoring, cause they dont want to pay for that)


I almost never use inheritance beside using some kind of interfaces/traits to declare a contract.

However, the only time where I’m missing code/data reuse through inheritance is with GUI. Some mostly flat hierarchies of widgets are really powerful ways to declare and compose UI components with shared behaviors.

In rust, the DX for GUI components is always lacking compared to web, C#. With maybe the exception of Slint which is really not Rust anymore.

Is there a way to have good DX for GUI components in Rust?


If you want to get inspired by good component DX, try looking at Bevy, the game engine.

But essentially it comes down to traits, newtypes/enum variants, and macros.


I did have a look at bevy ECS approach and find it very verbose and really foreign, it’s in « not rust anymore» territory. Macros are a dangerous tool in terms of long term maintainability and are hurting compilation times.

But it’s still really fresh, they are conscious of the issues and I hope bevy maintainers came up with an elegant design


Right. Bevy has its own run time allocation and dependency system, and it's <<not rust anymore>>. It bypasses Rust's compile time ownership system using unsafe code. The encapsulation may be safe due to run time checking. It's bothersome that such things seem to be needed.


> It's bothersome that such things seem to be needed.

Yes. Rust is not a general purpose language. It's a systems language. Don't use it for GUIs and games and such until somebody has figured out how to do it properly.


All systems languages before Rust (granted, it's not a very long list) were successfully used for GUIs, games, embedded stuff and much more


You can't figure something out this complex without FAFO. Bevy is one flavor of FAFO. It seems to be working out alright so far.


Rust is great for acyclic data structures, but ... in a GUI you always have closures that point back to the widgets they were created for. That's one reason you should probably not use Rust for GUIs and similar problem areas.


Why would that be a problem in rust?


Imagine this fairly basic situation: you have a button object. When clicked, it triggers a closure (callback). And that closure needs to change the button's text to e.g. "Clicked!".

To do this in Rust, the closure needs a mutable reference to the button. However, the GUI event loop also needs a reference to the button to draw it on the screen. In Rust, you can have many immutable references, __or__ exactly one mutable reference, but never both at the same time. Since the GUI framework holds the button, it won't let your closure mutably borrow it at the same time.


Do you find anything "bad" about this code solving the problem?

    use std::rc::Rc;
    use std::cell::RefCell;
    
    struct Button {
        text: String,
        on_click: Option<Rc<dyn Fn()>>,
    }
    
    impl Button {
        fn new(text: &str) -> Self {
            Button { text: text.to_string(), on_click: None }
        }
        fn draw(&self) { println!("[Button: \"{}\"]", self.text); }
        fn fire_click(button: &Rc<RefCell<Button>>) {
            let cb = button.borrow().on_click.clone();
            if let Some(cb) = cb {
                cb();
            }
        }
    }
    
    fn main() {
        let button = Rc::new(RefCell::new(Button::new("Click me")));
        let cb_handle = Rc::clone(&button);
    
        button.borrow_mut().on_click = Some(Rc::new(move || {
            cb_handle.borrow_mut().text = "Clicked!".to_string();
        }));
    
        button.borrow().draw();
        Button::fire_click(&button);
        button.borrow().draw();
    }
Prints:

  [Button: "Click me"]
  [Button: "Clicked!"]


Why would they need them at the same time? The overall state will contain the button.

Many interactive programs can be GetInput(); ChangeState(); DrawState();

Why wouldn't their lifetimes be isolated?

Also the drawing doesn't need a mutable reference.


Isn't composition (react style) better for GUIs anyways?


That’s a good point.

Usually when people say to prefer composition over inheritance, that does not apply to the inheritance found in GUI, but as an alternative way to share behaviors as a property, « has a » instead of « is a », like has a role instead of being a user, admin..

That do not work well with GUI, where hundreds of of components are reusing common containers, widget behavior, it would be very verbose and painful to always declare common behaviors, data.

I think, React is cheating because it’s based on the web which already provide DOM node components and JavaScript, a GC language where most rust issues do not apply, there is already an underlying composition framework, the problem is that it is not easy to reproduce in rust.


It does on COM, but FOSS tends to disregard learnings from commercial platforms.

See VB 5 and 6 (when VBX got replaced by COM), and anything WinRT, UWP, WinUI.

The work Microsoft has been doing on windows-rs translates quite good into Rust, unfortunately the team doesn't like using designers.


No, IPO pops, and honey moon periods are common.

And there are plenty of ways to manipulate the price, such as issuing a low float to a hyper hyped stock..


Feature flags are often ridiculously over engineered.

Check a config, bdd value, env var to dynamically go one path or the other.

That’s all, you must either have a small feature or refactor the code to easily switch at a high level.

If you are not able to do so easily, then yes, complex feature flags implementations might help you, to coordinate feature activation between micro services.

Or if you have many features then a dashboard might be useful.

But I would argue that both are serious indicators that you should avoid feature flags, they are better for local and temporary changes, otherwise the complexity compounds and it become hard to manage and maintain.


There's an argument to be made for being able to turn on a feature for a certain segment (e.g low revenue users in Italy) so you can see what the business/performance impact is.

Ofcourse you don't want users to lose the feature once they exceeded your revenue threshold or cross the border so you'll need to implement some kind of tracking. Your analytics and error tracking also needs to communicate with the feature flag service.

Definitely not rocket science but more complex than a environment variable.


Enterprise software is full of this kind of stuff. Half our customers are on year old UI's because they don't want to re-up contracts yet.

That is, features are contractual and when you've only got 50 customers but they're all paying high 6 figures does anyone really care about feature flag complexity?


It is like over-engineered if you have that as feature flag instead of just in the customer configuration...

"The customer would like the main page blue and another one the red". Would it be feature flag for you?


There's an argument to be made for being able to turn on a feature for a certain segment

Not just an argument, it's the entire point of feature flags for ui experiments which is an essential practice. Dynamic adjustment of the cohorts (or even just an immediate kill switch if it's a disaster) is required.


The main thing about feature flags is discipline: create them purposefully, remove them as soon as they don't add value any more. KISS applies.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: