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

3.5" floppies were still common while I was in college. I have distinct memories of copying a project to a floppy in my dorm room, popping the disk out, walking next door (literally next door in the dorms, not even going outside up or down stairs or anything), popping the disk into a team member's PC and the project being gone. We laughed it off and chucked the disk in the trash and got another. Project wasn't lost-lost since I had a copy on my hard disk. This was also the era of the 100MB Zip Drives, which I also had in my PC and thankfully all of our lab PCs had, too. That's what I normally used for all of my day-to-day file transfers of any real import. I still have my zip disks, but I seem to have lost my zip drive, so no idea if the disks still have any data on them.

Yeah at the time. You would get the whole range of good/bad disks. Sometimes even between computers. May work just fine on one computer and not the next. It was not common but it wasnt totally rare either. Just sometimes would catch out out at silly times.

That they are still used in a critical infra item is a bit surprising. Getting new stock would be a major hassle.


I was on a school paper in high school and was taking photos on a "digital" camera that wrote to 3.5" floppies. Some of them are still with the (printed) copies of my articles I kept. I'll have to see if they survived.

This is probably my "I'm getting old" moment. Good lord.


Sony Mavica?

I think it was!

We used to copy files three times, better onto three separate floppies

Until quite recently, my Dad had a Zip drive plugged into an ancient Pentium box (back when "Pentium" meant "successor to 486"). I don't know when it was last actually used, but it's LED had been on since the 90s.

I said this in a parallel thread but 3.5" disks were much less reliable for me even in the 80s with the Amiga.

Wow, it's crazy how experiences differ! I've never encountered anything more unreliable than zip disks. Even burned CDs lost to the dreaded buffer couldn't compete with the failure rate of those things. Past me wishes I had your luck with them, they were super cool.

You had personal PCs but no network in a dorm?

I'm placing that comment between 1985 and 1993.

Nah. 83 is much too early for everyone having a pc in the dorm room, and well after 1993 for dorms often not having network.

I was at an engineering school 90-93 (WPI) and they didn't have network access in the freshman dorms. Maybe they had it in the newer ones.

Depends on the schools for networks. I attended a college that finished adding wired networks to their dorms in 2000 or so. It just wasn't a campus priority in the 90s, fewer students had computers back then. If it was a school with more money or an engineering school they got to it earlier, the rest added it when they added it.

Also depends on the environment. My dad used to repair the pre-PC computers: Amiga, Commodore, Atari, Spectrum, etc. I've had access to them before many others have even seen a computer. I've been given a really heavy, not-completely-broken and usable laptop before they became affordable for normal people.

People who grew up with or lived in the tech environment had access to lots of things.


I have a recent 60ish inch LG OLED that's not been connected to the internet AFAICT for over a year. It's not connected to a LAN and it's not configured for any WiFi network. I have never connected it to the internet at all. It's working like a champ. No crashes or other issues. I treat it as a dumb monitor. HDMI in, optical out for audio to my stereo.

In most (all?) US states, you need a license to be a _Professional_ Engineer. This is a legal distinction that carries weight _and_ legal liability. It doesn't mean that you cannot "engineer" without a license. There's legal distinctions on what work a licensed engineer can and cannot do, and what work must be done by or under the supervision of a licensed engineer. e.g. a junior's work has to be signed off by a supervising PE. To become a PE, a licensed Engineering Intern must have first passed a preliminary exam issued by the state and worked under a PE for a minimum amount of time with satisfactory performance (think apprenticeship).

It's the legal liability that SWEs don't want. e.g. You wouldn't be able to just slap "This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." on your software and walk away from it when lives are at stake. A so-called Profession Software Engineer would have to accept liability for their work product, and those of the juniors working under them.

I started down the road to becoming a Professional Engineer while I was in college as I studied Electrical Engineering and was more interested in hardware/power engineering. I took, and passed, the Engineering Intern Test in my state (which is the preliminary exam you take before you can start your journey to become a PE). Then life happened and job/career opportunities took me in a different direction/industry, and I've been doing software instead. So, I never became a licensed Professional Engineer. I'm still a licensed engineering intern, though. I'm still bound by the legal and ethical standards that it entails and could lose my license for violations.


> Python is harder to JIT because of the way __dict__ works.

Heh, how about how `__class__` works? Not that I recommend actually doing this, but you can literally change the type of an already instantiated object by reassigning `__class__`:

    >>> class Dog:
    ...     def hi(self):
    ...             print("woof")
    ...
    >>> class Cat:
    ...     def hi(self):
    ...             print("meow")
    ...
    >>> dog = Dog()
    >>> dog.hi()
    woof
    >>> dog.__class__ = Cat
    >>> dog.hi()
    meow
    >>> isinstance(dog, Dog)
    False
    >>> isinstance(dog, Cat)
    True
    >>>


Lua has the same property with metatables. LuaJIT, which is very fast, has a solution: if you change a metatable after assigning it, or reassign a metatable, Mike Pall turns his back on you. Your code dies slowly, in the outer darkness of the interpreter loop, never to be JIT’ted upon again.


I've been doing things in Python for over 20 years. Only recently I learn that I can do this.

    >>> Dog.__bases__ = (Cat,)
    >>> isinstance(dog, Dog)
    True
    >>> isinstance(dog, Cat)
    True
    >>>


Smalltalk, Self, Common Lisp, Ruby as well, no big deal in regards to JIT code.

This is wild. Is it part of Python's specification, or an implementation detail of CPython?


As far as I understand, CPython implementation is THE specification. Some billions dollar ERP system firmly rely on this behavior, btw.


Yeah, I was afraid you would say that.


Just check with pypy and Graalpy. Both support this as well.


Is the question whether multiple base classes are part of Python’s spec, or if the ability to assign to `__class__` is part of the spec?

That's also possible in JS with __proto__. The prototypes of the classes in the chain can be mutated at runtime too. How to handle these cases is well understood for JITs though and python could do the same.

See also the warning here:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...

And this related article:

https://mathiasbynens.be/notes/prototypes


The thing that actually makes it harder in Python is threading, because it breaks all ability to reason locally about what might happen and optimize. In Python you have to assume that another thread may do these things at any point mid-execution.


I see no issue here.

Modifying a variable that is read by another thread needs special care in all multithreaded languages I know. If you don't use a synchronization primitive to tell the other thread "hey, this thing here may have changed, read it again from memory"; the other thread is free to use its old value for as long as it whishes.


Smalltalk, Self and Lisp Machines enter the bar, with live image changes.


Does Steam, itself, disclose its use of AI in a prominent manner? It's built on top of Linux, which allows AI assisted contributions.


This isn't about a game launcher but said products on said game launcher. Try not to muddy the discourse because it upsets you that consumers have a right to know how their products are being developed.


I interned at a Fortune 500 starting in 2000.

Most of my work was on an intranet page used for tracking internal servers, apps and databases. One of cool (at the time) features I implemented was a server-rendered ping of the servers shown on the dashboard. We're talking usually a few hundred at a time. The site ran on IIS & NT 4, written in VBS & ASP. (I think my first server was actually a dual Alpha chip, wasn't even x86, sure as hell was way before x64).

To implement the ping functionality (yes, we're talking just a straight ICMP ping), I ended up doing a COM server, written in C++, called into it from the VBS side. Eventually, .Net came out, and once .Net Framework 1.1 was released, I was able to convince my boss to let me rewrite the whole site in ASP.Net. I ditched the C++ COM object and was able to do it in C# with raw sockets (and appropriate permissions, which was a bit of a pain to get right at the time, before google and stackoverflow were around to help). Getting the C++ COM object working was actually easier because at least the MSDN library (the entire stack of CDs & DVDs it was on) had extensive documentation. The .Net side was good initially, but it just did not have the same depth as the C++ side already had at that point.


> Track record is extremely relevant when the "argument" is mostly about judgement and subjective opinions.

Ironic given this article is from CNBC, employer of Cramer, host of "Mad Money", who has been so inconsistently wrong that his picks have literally sparked an ETF. Just search using your engine of choice "Inverse Cramer ETF".

I work in finance. Past performance is not a guarantee of future returns, but is a damn good indicator, which is why everyone always wants to see your past performance anyways.


SJIM lost 15% in a period when the S&P gained 25% (betting against Cramer). LJIM over its lifetime gained 3.7%.

Of course both had too short a lifetime to draw a conclusion due to lack of interest and this was pre-AI so maintaining the positions was difficult. But it’s important to remember that Jim Cramer fails to beat the market, not that he’s an inverse oracle.


> Past performance is not a guarantee of future returns, but is a damn good indicator,

Unless it's about stock picking, when the winners in one year of doing good stock picking are no better in the next than any other random stock picker.


> It's not engineering if you're just guessing as to what is degrading the performance and what might improve it.

Engineering is literally the art of making educated guesses and then testing/proving/disproving/improving upon them. Nothing is exact. Everything is approximate. Iterate until the result is good enough.


This is false. A bridge is not built with approximations, it is built with a deep understanding of structural physics. Yes there are some unknowns, no it's not "educated guesses".


What people refer to when they say "branchless code" is something very particular, and it refers to not triggering the CPU's branch prediction. That is, don't make the CPU have to guess which fork in the code you're going to take. This is usually accomplished in one of two ways: either bit twiddling hacks or specialized instructions that do not affect the CPU's branch prediction, such as the 'cmov' family in x86. If you search for `examples of branchless code using conditional moves` using your search engine of choice, you'll find numerous examples.

A trivial example is actually written with a branch in C/C++, but relies on compiler optimizations to kick in. If you compile a ternary operator in C/C++ (and probably rust, C# and other languages) such as in:

   int min_branchless(int a, int b) {
        return a < b ? a : b; // Often emits cmov with -O2
   }
With gcc/clang a -O2, one would expect the compiler to emit the following assembly:

    cmp edi, esi
    cmovle eax, edi   ; select a if a <= b
    ret
There's numerical tricks for other operations/comparisons, and compilers know a lot of them. But, I just suggest compiling your code and configuring your compiler to emit the generated assembly with references to the code it was generated from (you should be able to get it to emit source line references in the assembly). You'll likely be surprised at the optimizations applied at -02, and utterly confused by what you find at -03.

edit: Also, it doesn't mean to never branch, but to minimize branching, especially in tight loops. Branch outside loops, not inside, for instance.

e.g. don't do:

    for (...) {
        if (condition independent of loop variable) { 
          ...
        } else {
          ...
        }
    }
do:

    if (condition independent of loop variable) { 
        for (...) {
          ...
        }
    } else {
        for (...) {
          ...
        }
    }


Yes, and back when hand-writing vectorized kernels via intrinsics, one learned to do the equivalent of (pseudocode here - picture SSE, AltiVec, NEON, etc.):

    vector conditionmask = <some computation...>; // E.g., 11111111 00000000 00000000 11111111
    vector truebranch = <some computation...>;
    vector falsebranch = <some computation...>;
    vector result = (truebranch & conditionmask) | (falsebranch & ~conditionmask);
where each lane of the conditionmask has either all bits set or all bits clear, depending on the outcome of the conditional test for that lane.

The processor obviously does execute both branches here, so there's going to be wasted work. But since it's just a linear sequence of operations it can often schedule them independently and run them out-of-order and in parallel. And of course, if there's any shared computation between the two branches, the compiler can do common subexpression elimination.

That said, that sort of approach where you go ahead and do both and then blend them was definitely the kind of optimization where you'd want to profile rather than doing it blindly. But it was a pretty common thing to do when hand-vectorizing code. (Thankfully, auto-vectorizers are pretty good at doing this sort of optimization for you these days. It's been a very long time now since I've had to hand-write vector intrinsics.)


Rust is an expression language and so it doesn't have "the ternary operator"† you can use conditionals like if anywhere in your expression anyway.

If you want to tell the Rust compiler that you're certain a branch predictor can't help here [be very sure, most often humans are wrong which is why historically these "I know better than the branch predictor" features get ignored by optimisers] you can core::hint::select_unpredictable(condition, a, b) rather than using a dedicated operator.

† That's not its actual name, some languages have an operator with three operands which does something else, such as fused multiply-add so in a multi-lingual context better to say explicitly you mean the ternary conditional operator.


The latter example, sounds like something trivially done by the compiler. I mean I would sometimes, adhere to it, but only if the loops afterwards become substantially different. If I would just repeat most of the loop body, I would prefer the former.


> The latter example, sounds like something trivially done by the compiler.

Taken by itself? Absolutely. In the middle of 50-deep templatized call stack? Maybe not. Compilers have their limitations (memory, runtime, other cost budgeting algorithms), and the more complex the code, the hard the optimizer has to work. But, yeah. Most of the gains from branchless code is going to come from this like numerical tools, vectorization and loop unrolling, things of that nature. It was an admittedly contrived example.


> Absolutely. In the middle of 50-deep templatized call stack?

That is also not going to be done by a developer, so it's not a counter argument against deferring such work to the compiler.


I don't mean to be dismissive, but isn't this old news? Hasn't it been the case that _all_ "smart" TVs have been spying on users since they came out? I've personally operated as if they are: my TV is not connected to the internet. At least, not through my internet connection. It's not on my wifi, nor is it connected to my LAN.


We knew they were reporting back our watching habits of the built-in stuff. Then we learned they were doing video capture on HDMI ports to report back on what we watched on external sources (Xbox, Apple TV, etc). Then we learned that they did botnet-like stuff in the background even when they were switched off.

NOW we're learning that they're spying with their internal microphone when switched off.


A real problem is that you might not even need to give these internet access. If your neighbor gives their TV internet access and it can establish a mesh connection then it might be able to exfiltrate data that way. I don't know of any TVs that do this, but it's always been a possibility.

Another possibility is even if you don't give it access to your wifi, if you eventually give your TV away or sell it, the new user could connect it to wifi and if it has any persistent storage then it could upload all of its stored data about you at that point.

Companies that do this need to end their entire brand, because they're just helping the CCP.


> A real problem is that you might not even need to give these internet access. If your neighbor gives their TV internet access and it can establish a mesh connection then it might be able to exfiltrate data that way.

No TV has ever been shown to do this. Please stop spreading this rumor.


I didn't say a TV had been, if you read. I will absolutely not stop spreading the possibility, because it is in fact a possibility. This is more true now than it has ever been, because even if a manufacturer doesn't do this we're now in a world where AI could potentially exploit devices and make hops like this. The risk is higher in areas with higher population density though, like multi-story apartments.

We know that device connection sharing is a thing that has occurred and it's not unreasonable to see the risk of it coming to TVs.

Why, do you work for a TV company?


Partly it annoys me because the answer to the question "how do I protect myself?" is simply "don't connect it to wifi" and that's it. These rumors make it all complicated to answer when it's really not that deep. This isn't deep NSA spy craft, it's shitty software uploading logs and half-assed data collection to the Internet. That's it.

But if I'm honest, it's mostly because I'm disappointed that they don't do this. It'd be a fascinating story. Imagine the braindead balls it'd take to make a feature that insanely abusive, and how good the outrage out it would be to read. That'd be a killer story for someone to break, it'd be like the xz backdoor or the Snowden NSA leaks. Instead we get these dumb "Mew under a truck"-quality grade school rumors in comments sections and it's just so stupid and disappointing.

(And honestly-honestly a tiny part of it is trying to goad one of these commenters into actually doing the work to find someone who really is doing this, so I can read that story.)


The story is both a little overblown and a little underblown, just different parts of it. More people need to be thinking about the feature level of devices and understand that "off" doesn't really mean it most of the time. Does the TV need a camera? Does it really need a microphone? Does it need to be smart at all? The matter of whether it is abused is increasingly less important than whether it can be abused. There have been all kinds of clever abuses we've been lucky not to see over the past 3 decades, but I'm afraid that relative quiet may be over.

I still don't understand why there wasn't an absolute outrage about internet providers putting their own routers inside your network and blocking other routers by default unless you call them. Suddenly all these providers have managed hardware inside your network and if they wanted to, they could scoop up all of the LAN traffic.

On top of that, some of them even portion out wireless to people outside your network from the router you're paying for while increasing attack surface.

The big tech companies, the providers, the government and foreign adversaries are winning bigtime. It does feel like there's a little bit of hope that people are wising up about AI exploding privacy and security risks, so more people are thinking about the dumbest things which have become the norms.


The guy can't read, he only knows how to keep saying "there's no evidence TVs do this" over and over, even when you already said there wasn't evidence yet.


This is straight up dystopian level spying. Streaming microphone inputs all the time, knowing everything that is displayed on the screens via object recognition and stuff. Scraping your local network. If I’m not mistaken there is the possibility for the tv to connect to public/open networks to send this stuff without you knowing. Magically syncing with your phone. It’s truly terrible, and a class action is all but guaranteed to come. Gamers nexus has a great video on this.


> If I’m not mistaken there is the possibility for the tv to connect to public/open networks to send this stuff without you knowing.

No, there is no evidence that any TV has ever done this. Please stop spreading this rumor.


This is a known feature that is not hidden which is not automatically turned on by default.

You must set your TV to a different standby mode and enable LG voice control.

When you do this, it very plainly tells you that it can listen with the screen off so you can control the TV with voice.

Failure of User Awareness, not some nefarious spyware.


No, you're not up to date with the latest news. There's a separate feature that records you all the time, transcribes it to text and uses it to select ads for you


Do you have a source for this claim?


The gamer's nexus investigation


That is exactly what I am claiming is false. Later LG even came out with their own statement saying basically the same thing I did.

What is this separate feature you claim that is not the same as the one I refer to?


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

Search: