Forgot your password?
typodupeerror

Comment Bell & Howell (Score 1) 523

Way back when, Apple hadn't yet established relationships with public schools. School administrators didn't know how to classify computer equipment, anyway. The Bell & Howell company came to the rescue: they were vendors of audiovisual equipment like film projectors. Bell & Howell agreed to let Apple use their connections with school districts in exchange for the computers being rebranded as Bell & Howell equipment, in Bell & Howell livery.

This is why the first computer I ever got time on was an all-black sleek Apple II+ that looked like it belonged on the Death Star.

The original Bell & Howell Apples are now almost completely forgotten about. But man, do I ever have fond memories of them.

See one for yourself here.

Comment Re:More cars, not less (Score 1, Flamebait) 396

What does matter is that people realize how stupid and dangerous it is to not believe that other countries have both dealt better with their COVID epidemics and have decent ridership of mass transit.

Taipei Metro's ridership on the last Friday in May 2019 was 2480272, last Friday in May 2020 was 2140398, a 15% drop but not a significant one. They have 457 cases and 7 deaths.

Taipei ridership: https://english.metro.taipei/c...
Cases: https://www.worldometers.info/...

Comment Re:How to automate C++ auditing? (Score 1) 341

And before you start spewing about vectors vs C-style arrays performance, I would suggest you revisit some simple profiling code; vectors are just as fast as c-style arrays these days.

Actually, no.

The C++ standard doesn't give any guarantees on how quickly the OS has to service your request for a dynamically allocated block on the heap. Most modern desktop CPUs and OSes do this very quickly, but there are embedded platforms where allocating memory off in the heap takes multiple milliseconds.

Likewise, modern CPUs tend to aggressively cache vectors in ways that are absolutely beautiful. But in embedded systems with simpler CPUs, they may very well be accessing each element of the vector via a pointer indirection.

The world's a much bigger place than server farms and laptops. In those areas, yeah, std::vector<T> is a lifesaver. But in the IoT world there's still a very real need for C-style stack arrays.

This is, incidentally, the entire motivation for std::array<T, std::size_t> in C++11. The embedded guys insisted on a container with an STL-compatible API which would be compiled down to straight-up C arrays. I've never found anything in the embedded space where a std::array<T, std::size_t> was an inappropriate choice, but I've been in lots of projects where a std::vector<T> was simply not in the cards.

Comment Lots of errors. (Score 1) 341

I've been programming in C++ since 1989 and have been getting paid to do it since 1993. I've seen the language grow up, and I don't think you're very near to right. You've got some serious misunderstandings of the language.

Because it does not have momentum, it will probably never develop momentum. Like Lisp, it may be a neat language, but it will almost certainly be consigned to the dustbin of history.

I'm also an old LISP hacker (since the early '80s). LISP is not "consigned to the dustbin of history". It was foundational in the development of modern languages and concepts it introduced to programming are still with us today. I personally side with Google's Peter Norvig: LISP is still around, we just call it Python.

If Rust is doomed to share LISP's fate, I think the Rustaceans would consider that a victory beyond their wildest imaginings.

It should also be noted that well written C++ can be just as good as Rust.

Meaningless. Well-written X can of course be as good as Y. Well-written C is just as good as Rust. The question that's relevant to software engineering is "how much effort is required to do the task well in X versus well in Y?"

As someone who's entering his fourth decade of C++ programming: yes, the modern dialect of C++ is wonderful. It still has an absurd number of gotchas and corner cases, though, to the point where unless you've already made that massive investment in learning corner cases ("can I use the universal initializer syntax to initialize my object, or will it turn it into std::initializer_list? And someone remind me again why vector<bool> is a bad idea and will screw me over if I try to use it?") I would genuinely recommend using another language for low-level power.

The first, and somewhat less important principle of C++ is template metaprogramming. This approach to software development is entirely geared towards reduction of redundancy in code writing.

No. That's generic code, period. Template metaprogramming is different: it involves exploiting the fact the C++ template instantiation facility is Turing-complete to perform at compile time things which in other languages would be deferred until run time.

This can be a really big deal. In C you might assert that the size of an integer is what you're expecting, but you won't know until you try to run the code. Your assert will give you a clue as to why your code failed in production at 3:00am, but you'll still get the call at 3:00am telling you everything blew up. In C++, a static_assert evaluates that same question at compile time, and if the architecture you're compiling for doesn't have the necessary word size you'll know it when the compilation halts.

And that's just scratching the surface! Template metaprogramming is also used in things such as the Blitz++ numerical libraries (I'm old, yes, I remember Blitz++) to optimize matrix operations to the point where it beats FORTRAN matrix multiplication. Nothing like unrolling loops at compile time, automatically, to give your code a performance boost. And of course, libraries like Boost are continually pushing out the frontiers of what we can do with template metaprogramming.

Templatized code is actually about abstract algebra (as no less than Stepanov has said), allowing us to separate algorithms from the types they operate on. But template metaprogramming is mostly about moving things normally done at runtime into the compile-time cycle. It's not about code reuse.

This is an extension of the idea of inheritance where you re-use base class code, and only modify what you need to adapt the base to your use case.

Not really. Inheritance is inevitably about types: you can't talk about inheritance without talking about the type of the parent and what behaviors get inherited. Generic programming is about separating type out from the discussion and instead talking about the algorithm in an abstract-algebra sense. (And then you have abominations like the Curiously Recurring Template Pattern which fuse them both.)

And then we get to...

Object oriented programming is a mechanism for creating a software structure that forces most types of bugs to be compile time bugs.

No. Just. No.

There is no universe in which this paragraph is anywhere near right. OOP in C++ was introduced in the 1970s in the very first iteration of the language, and let me tell you, as someone who has actually had to work with cfront that compiler did absolutely nothing to turn my run-time bugs into compile-time ones, nor did object-orientation magically provide this capability.

But by the early '00s, around GCC 3, when C++ compilers started to produce scarily optimized template code? About that time is when template metaprogramming took off, and that was when I began to replace my C-style casts with static_casts and began to get warnings about "uh, boss, that cast isn't valid, it'll blow up on you at runtime".

Your example is also weird: you say the non-OO way would involve a struct that contains data fields and a type ID, but, uh -- that's what an object is: it's a struct containing function pointers and data objects. The example you give can easily be written in C by anyone who understands function pointer syntax. Remember, C++ classes were explicitly designed to be translatable into C structs-and-function-pointers. (That's how the first major C++ compiler, cfront, worked. It parsed the language and spat out equivalent C, which was then compiled.)

OOP converts this type of flow control into virtual dispatch, which can be validated at compile time,

... except that virtual dispatch explicitly cannot be validated at compile time. Virtual dispatching is done at runtime. Only static dispatch can be done at compile-time. (Note: before you put together a toy example that uses the virtual keyword, be careful: if the compiler can statically determine the type, it's allowed to implicitly convert your virtual call into a static call.)

I'm afraid that I'm sounding like an angry old man standing on my porch talking about these kids today and looking around for my shawl. I apologize if that's the way I'm coming off. But you seem to have some really weird misapprehensions about the C++ language, and I really hope you'll correct them.

Comment Re: Is there any safe, minimal alternative to Ring (Score 1) 40

OK, so if I grab your spare key under your front door mat, did your Schlage deadbolt get "picked"? No, poor OpSec. If I drop my key fob to my car, and you use the remote open door feature to find it and steal my car. Did GM's laser cut key database get "hacked?" No. GM isn't at fault because I made a mistake. A hack is when someone gets a system to act in an unintended way. Ring is performing as expected: put in a valid username and password, then gain entry. They don't report to have biometrics or other means to authenticate it's you. Hell, a sophisticated threat would clone your phone anyway, making the 2-factor call your phone as well as his. This happens often for higher value targets, but rarely makes the news because the threat is much more sophisticated. That said, yes, you're right. Ring could add sophisticated measures but it's not my bank account we are securing. They're cameras. All of mine are outside so I really don't care if you hacked my 4 Ring cameras. You would see my neighbors doing their laundry and me leaving every morning and coming home 6 hours later. This is why my Echo Show has the camera disabled 99.999% of the time. Hack it and you see nothing.

Comment Re:Is there any safe, minimal alternative to Ring? (Score 1) 40

Right. Just because you CAN do something doesn't mean you SHOULD do it. This is what separates good engineers from geniuses. To me this is the classic Android versus Apple argument as well. Sure you can do everything on both, but the Apple is more polished. A 2nd grader and a 72 year old can figure an iPhone out without instructions. As you mention, you can spend hours on it, just to be hacked anyway. Or, just buy the Ring and turn on 2-step authentication like you probably should do anyway (RPi, or commercial).

Comment Re:Ring (Score 1) 112

That's akin to saying, "I have absolutely no sympathy for idiots who buy a house when someone breaks in and stabs them. This goes for garages too." The person who took over their account is breaking the law. Period. Not everyone understands security and often re-uses passwords. Do you realize Titan, Schalge and Defiant reuse keys for deadbolts and door locks? Is it ok if I use a set of keys to get into your house and steal everything? "We have no sympathy for idiots who don't understand tumblers and pins of the locks inside their home." How about your car? How about I hack the OBD2 system to make your transmission shift into reverse while you do 70mph down the highway? "I have no sympathy for idiots who don't understand their cars on-board diagnotic system." How about your grandmother who is in intensive care at the hospital? Hospital Wifi is known to be unsecure. Do you have zero sympathy when a hacker shuts down her life supporting systems? Grandma deserves it since she doesn't understand encryption and information security, right?

Turn on two factor authentication and don't reuse passwords. That's the simple lesson here. This 'Crap' you mention has saved a little girl who was kidnapped right in front of their house, led to arrest and prosecution of home invaders who nearly killed a homeowners dog, and cut down on crime in many areas.

Comment Re: The important difference (Score 1) 227

I think 9/11 is so far back and most Americans are so apathetic they either didn't know or have forgotten 9/11 wasn't the first attack. It wasn't the 2nd. It was in the teens.. Meaning we were in well over double digits. Khobar Towers sound familiar? USS Cole sound familiar? The Twin Towers in NYC had already been bombed once before. We ignored them. We "kept our troops at home." Problem is, the camps in Afghanistan kept pumping out skilled personnel who learned how to bomb and kill people.

Imagine you have a meth lab next door. Would you tell the cops, "Well, don't invade their home. Just arrest the street dealers. That will solve the problem. Leave the meth lab alone." That's exactly what you're saying when you say, "Don't invade Afghanistan." We had to invade Germany to stop Hitler. We had to nuke Japan to get them to stop suicide attacking throughout the Pacific, and we had to invade Afghanistan to stop the Osama Bin Laden sponsored and Taliban (the government back then) hosted terrorist camps. We also invaded Iraq to get them to stop shooting at F-16s and threatening neighbors, but that narrative has been hijacked by the whole "no WMDs found" false flag. Any one recall how many UN security resolutions were passed telling Saddam to knock his shit off?? Anyone? How many talked about WMDs? (hint: almost none)

The problem however, as we learn everywhere is, "Power abhors a vacuum." If you take out one evil power, you are an open host to what ever else can take its place.

Comment Re:The important difference (Score 1) 227

Correct. 350k was nothing compared to the rate we were losing soldiers as we island hopped and tried to defeat Japan. They also refused to surrender and would fight to the last person. They were also convincing local populations to commit suicide rather than wait to see what happened when the Allies liberated their lands, although some were also just murdered. Hard to say how much is fact and fiction in these stories. For anyone skeptical, take a look at how many Russians died kicking Germany out. 26 million... and that was mostly on defense. Going onto the offense makes attrition rates go up.

Beeftopia seems to be the only response I've seen that really understands PsyOps (Psychological Operations in warfare), and the differences.

Comment worked at HD for 5+ years (Score 1) 36

I worked at Home Depot for over 5 years, and have spent time inside the loss prevention office. They are not face scanning and tracking you through the store. If they are tracking you, it's a guy who's watching a dozen camera feeds and switching between them. If they catch you stealing, it takes awhile for them to take the video from the different cameras and make a CD for the arresting officer. The time depends on how long you spent in the store and how much you moved around.

Those cameras on the aisles are stand alone and not part of the system. They're really just to make you aware they're focusing on that high-theft part of the store (e.g. power tools in Hardware, and $90 circuit breakers in Electrical). Each store has a staff of Loss Prevention, and most employees will ignore you even if you're an obvious thief. They are instructed not to touch you and in some cases I was admonished for asking them "Can I help you?" I got pissed because your thieving takes away money from my bonus. My store probably easily lost over $1M a year to thieves. If you walk in, grab a torch from hardware, a bluetooth speaker, and a $90 Klein electricians backpack.... everyone in the store knows what's happening. And walkie talkies... I did the math. For every pair of walkie talkies sold, 2 were stolen. $200k sold in a year, and about $600k stolen.. just in walkie talkies from my store alone.

Yes, they track people by sales receipts and your Drivers License. This is how they catch people who fraudulently return very high numbers of products. Usually it's stolen but not always. Again, you're robbing the people who work there when you fraudulently return products. That "shrink" reduces revenue, which reduces the employee bonus.

Comment Re:I just don't buy the shit MIT... (Score 5, Insightful) 435

For a good computer scientist...

Ah, the No True Scotsman fallacy.

that basic world view is ingrained in their soul.

No. Definitively, no.

I was born in 1975. By 1979 I knew I was going to be a hacker. No kidding: I was sitting on Mrs. Walters' kitchen floor discovering recursion by drawing geometric shapes. I remember looking at this Easter egg I'd decorated in a recursive pattern and being in awe, and thinking I wanted to draw recursive patterns on eggs forever.

I was there for Flag Day in 1983 when ARPANET became the Internet. I was eight years old and the local college computer science department viewed me as their mascot, I guess. I'm grateful to them for the time I got to spend on LISP Machines.

Today I'm 44. I hold a Master's degree in computer science and am a thesis away from a Ph.D. I've worked for the United States government's official voting research group (the now-defunct ACCURATE) and private industry. I've spoken at Black Hat, DEF CON, CodeCon, OSCON, and more. I think that I meet your, or anyone's, definition of a good computer scientist with a long career.

And I am telling you, brother, you are wrong.

In the late '80s and early '90s there was a USENIX T-shirt given to attendees. "Networks Connect People, Not Computers." It was a neat shirt and I wore mine until it was shreds, not because I liked wearing a ratty T-shirt but because there are so many of us who need to learn this lesson.

Logic is the tool we use to serve humanity. But if you let logic blind you to the fact other people are human beings with human feelings who need to be treated like human beings, then you just stopped being a hacker and you started becoming a tool.

Hackers serve humanity. We don't rule it. And we're not excused from the rules of human behavior.

I really wish RMS had learned this. It's too late for him. It's not too late for you.

Comment Re:First gulf war ? (Score 2) 22

Great question!! As in 1991 I reported to 2 SOPS which performed C2 of a non-existent (according to this article) satellite system. We created navigation uploads based on fake Pseudo-Ranging from about 20 fake satellites received by fake monitoring stations. The Khalman filter took the fake PRs and created fake navigation uploads. I, as the Satellite Operator, started GPS (by name alone) satellite supports by slewing ground antennaes to a fake location (we used wiijii boards and random number generators for az and elev ) to then radiate into blank open space. Funny thing is watching Patrick AFB have fake launches!! They would load billion dollar Delta2 rockets on the pad, pretend they were fitting a GPS satellite onto the top, and then launch nothing into space. We would do pretend thruster firings to get it into a transfer orbit, and then de-spin the fake satellites.

So many fake things I did. OH! And we even stood up a Training Squadron, 534th TRS at Vandenberg to train fake satellite operators!! It's a shame only my last years teaching was to people flying real satellites. I guess we had good practice from years of faking it.

Comment Re: The liberals will not say much at all about he (Score 1) 722

Your net is too small. Middle Easterners have been murdering millions for thousands of years, not hundreds. Look up the origins of Wahhabism. It started shortly after the death of Christ. The "Crusades" is often cast as a response in 1095 to Christians being murdered by Muslims, while crossing the Mediterranean. So that's 925 years ago that people on a large scale started getting pissed off about it.

The book "5 Pillars of Islam" really explains it well. And it's depressing when you realize just how long people have been killing each other over their invisible friend, beliefs, etc.

Slashdot Top Deals

Modeling paged and segmented memories is tricky business. -- P.J. Denning

Working...