Slashdot Mirror


User: Forever+Wondering

Forever+Wondering's activity in the archive.

Stories
0
Comments
424
First seen
Last seen
Profile
(view on slashdot.org)

Comments · 424

  1. Re:Foolish... on Google To Drop Chrome Support For 32-bit Linux · · Score: 1

    You said it. 64 bit address space is handy, but it's the extra registers. And, the 64 bit x86 ABI allows the first six arguments of a function to be passed in registers instead of stack pushes. The code is more compact and about 30% faster in execution, just by rebuilding for 64 bit.

  2. How much "tax" really? And client alternatives? on Mozilla May Separate Itself From Thunderbird Email Client (techcrunch.com) · · Score: 1

    Email clients are much simpler than browsers, so how much of a "development tax" is there really? Not that much, I suspect. I wrote a text based email client long ago that had search, reorg, subfolders, spam filter, etc. It wasn't anywhere near the effort a browser would require

    The truth is, they just don't "like" it.

    And, with firefox, they're mostly interested in wasting time with [yet another language] rust instead of just fully implementing ECMAscript 6.? or streamlining XUL. Browsers are complex, but they're not that "sexy". firefox OS? Gimme a break. When they actually field HW interrupts directly, they can call it an "OS". Bad case of "kernel envy", I'd say [compiler LLs are similarly afflicted].

    And, there seems to be some notion that "evolution" is the email client. Or, "just use webmail". IIRC, fedora doesn't even install thunderbird by default anymore [hard for me to tell, since I use fedup].

    Well, evolution is a non-starter for me [and I've tried it]:
    - evolution is slow.
    - Even invocation is slower than thunderbird and even slower than firefox
    - Midway, evolution seems to "freeze up" while it's doing something. Despite the GUI stuff, it seems to be modal
    - evolution is based on GTK and they spend more time trying to use every GUI feature and thus the presentation is cluttered, inferior, and less useful
    - evolution splits the data for a given message into multiple files (e.g. headers in one, body in another), so my existing scripts than scan/manipulate folders have a hard time with it

    Thunderbird on its own is just fine, IMO.

    So, what are the alternatives? I do use/boot windows, but _not_ for email. So, a posix OS GUI client [I use linux] would be needed? Anybody who knows thunderbird and another have any ideas, based on experience with both?

  3. My personal stack overflow experience on Stack Overflow and the Zeitgeist of Computer Programming (priceonomics.com) · · Score: 3, Informative

    I've been posting/moderating slashdot for years, but just started with stack overflow. Here's my experience.

    I definitely agree with and have seen what the articles are driving at. In particular, the "The Decline of Stack Overflow" is absolutely 100% on the money.

    I answer questions. At least five / day. In a short time [about a month], I amassed 1000+ rep points. I'm now in the top 0.5% for the quarter. The article's comment about "SO hates new users" is true. Before I got to this point, I used to have more difficulty with certain people. As my point total got higher, the snark level went down. Ironic, because I was doing [trying to do] the best job I could at all times. My answers didn't change in terms of quality, just the tone of comments I got back.

    When I post an answer, I take several approaches. Sometimes, a simple "use this function instead" is enough. Sometimes, "change this line from blah1 to blah2". If the OP has made an honest effort to be clear, but the posted code is way off the mark (e.g. has more than two bugs), I'll download it clean it up for style [so I can see OP's logic before I try to fix it], fix the bugs [usually simplifying the logic] and post the complete solution with an explanation of the changes and annotations in code comments.

    This is the "cut-n-paste" solution. I may be just doing somebody's homework for them. But, usually, it's just somebody who spent days on the code and is "just stuck" [I've asked some OPs about this]. The controversy is that "if you do that, they'll never learn anything". Possibly. But, it's part of my judgement call on type of response to give. IMO, in addition to research and traditional classes/exercises, one of the best ways to learn is to read more advanced "expert" code. Compare one's original to what the expert did and ask "Why did they do it that way?!". This may foster more research on their part and they will have an "AHA! moment"

    Unlike slashdot, one can edit a post [either a question or an answer] and you can delete them. Comments can edited for five minutes and deleted anytime. Now this will seem goofy: If you comment back and forth with a given user over an answer one of you gave, either a collegial discussion or a flame war, eventually an automatic message comes up asking if you'd like to transfer your "discussion" to a chat page. Also, because comments are limited to 500 chars, I sometimes have to post a partial, incomplete answer because what I need to say needs better formatting/highlighting than a comment and wouldn't fit in a comment, even though it's more appropriate as a comment.

    The goofy thing is that you start with 1 rep point. You can post a question or a full answer. But, you can't yet post a comment!?

    On SO, people edit their questions and answers, based on feedback in the comments. The answer may be edited several times before questioner accepts it. Sometimes, for complex questions, it can take a day or two to come up with the right answer.

    Despite all this, once and a while, I get a "heckler" who doesn't like an answer [even though it's correct]. It goes several rounds in the comments, usually the other person doesn't understand the problem space enough to realize the answer was correct [or more subtle than they realized]. So, it goes back and forth, and each time I explain how I was correct, adding clarification or highlighting what I said originally. Eventually, the heckler says "Your answer doesn't answer the question". This is for an answer the OP questioner has "accepted" as the best one.

    I've seen reasonable questions downvoted within minutes [I upvote them back]. I've seen people threaten to close the question as unclear, requires opinion, or can _not_ be answered as described. The last one is funny, because the question is clear to me, and I provide a correct answer [that eventually gets upvoted and/or accepted]. Sometimes I send the commenter who is threatening doom a message [you can direct a comment to

  4. Re:How can there be? on No Such Thing As 'Unlimited' Data (wired.com) · · Score: 1

    I think you have the model wrong. You can't download/upload faster than your maximum line rate, which is predictable [be it DSL, cable, wireless]. I had ATT DSL with a 150 GB datacap and now have sonic.net DSL which has no datacap. I pay $60/month. My downlink speed is 1.2 MB/sec, so my maximum possible usage can be calculated. Sonic, BTW, is perfectly happy to say "use your line 24x7 at maximum speed".

    Of the fees, I expect some to go to pay for local loop maintenance, routers, and backhaul links--and carrier profit. Unless the carrier is pricing below their costs, the model works. Carriers are simply refusing to pay for capital expenditures out of the money they are charging. They just want to have their cake and eat it, too.

  5. Re:Crashed around Bloomsburg PA on Military Blimp Breaks Free and Drifts Over the Mid-Atlantic Trailing Tether (baltimoresun.com) · · Score: 1

    Per CNN, the blimp _is_ down. The military did something to force it down [*]

    [*] Maybe they told that guy with the shotgun that it was a drone ...

  6. Re: Waaaahhhhh!! on Matthew Garrett Forks the Linux Kernel · · Score: 1

    I love technology and love programming with a passion that rivals Michelangelo's for painting. I'm all about "what's the best technical solution", just like a doctor is about "what's the best care for a patient". Check one's ego/emotions at the door.

    But, sometimes, situations can make it difficult to remain civil. In one company, our product was a realtime H.264 video encoder. It had the video encoding app, that using special device drivers, interacted with custom hardware inside an FPGA. At the time, I included some .h files from /usr/src/kernel/include/linux to get at some constants/structs I needed in the app to communicate with the driver. Normally, a good portion of this has an analog in /usr/include/sys and would be the preferred way to do it. But, at the time, /usr/include/sys was incomplete, so going to /usr/src/kernel was necessary.

    Eventually, I have a conversation with a programmer, who was with his manager. The manager was a peer of my boss, but could exert undue influence on the direction of my project. So, I want to keep things calm. It goes like this:

    He: there is absolutely no reason to include from /usr/src/kernel in an app
    Me: that is normally true for regular apps, but our app interacts heavily with the kernel and our driver and /usr/src/kernel has definitions that are only available there.
    He: there is absolutely no reason to include from /usr/src/kernel in an app
    Me: We need "blah" and it's only defined in /usr/src/kernel/include/linux/blah.h
    He: there is absolutely no reason to include from /usr/src/kernel in an app

    This goes on for 5+ rounds.

    Eventually, I ask:
    Me: Why do you believe this, given what I've said?
    He: stony silence
    Me: If I don't use /usr/src/kernel, where would you suggest I find the definitions that the code needs?
    He: stony silence
    Me: If you don't/won't believe me, why don't you post your "there is absolutely no reason to include from /usr/src/kernel in an app" to the LKML, explaining that it's an app that interacts with a device driver? See what they say.
    He: stony silence

    This goes on for 5+ rounds. At this point, I am furious. I so wanted to say "you are being fucking silly". But, I settled on "That is the most ridiculous thing I've ever heard in my entire career".

    Of course, my civility was not returned in kind. The guy's boss would get profane privately and in meetings regularly. In retrospect, I wish I had said "fucking silly"--I would have felt better and I don't believe it would have made the overall situation any worse [but, it might have made it better--see below].

    Most people respond well to an empathetic answer. But, there are some personality types [particularly, those that use abuse themselves] that distrust the "soft answer" as being "weak" (i.e. you're lying to them). If however, you lay it all out and then close the discussion with "you're being damn stupid" and walk away, they'll think about it and come back later and say "okay". Strange, but true ...

  7. Re:Perl? LOL. on Larry Wall Unveils Perl 6.0.0 · · Score: 1

    It's supposed to be ironic, considering how every N months, another "perl is dead" meme gets posted to slashdot [usually as the result of an article posted by a dice shill]. This was mentioned at a perl conference in a talk by a core developer titled [something like] "Is perl really dead?". He went on to say that there are actually more jobs in perl than a number of other languages. IIRC, MS uses perl as the master control for building either the kernel or office.

    In truth, I'm actually language agnostic. I've learned, used, [and forgotten] quite a few languages over the years. To me, a language is a tool in the toolbox, not a religious icon.

    I recently taught myself python, just to see if I was missing something.

    Starting out, I was against the indentation thing. That turned out to not be such a problem.

    But, what is a serious problem is the way globals are handled. In most languages, symbols are globals if you don't declare them local to a given function. In python, it's the reverse--you say "global sym" inside the function. It also has some goofy rules about whether a symbol is global or not. If a global is written to in function x, it can be implicitly referenced in function y [without a global declaration]. But, if y tries to write to it, then y needs a "global sym" too--or the interpreter will flag it. This led to a whole host of problems. And no way to solve this by declaring "global sym" at file scope like virtually every other language. This is a major defect.

    Also, python has no equivalent of "for (x = 0; x < 10; ++x)". You need to say "for x in range(10)". Fair enough. But, python, seems to have no equivalent to "for (x = 0; x < 10; ++x, ++y, z -= 6, cur = next)" or "for (x = ...; check_x(x); x = next_x(x))" without defining an iterator of some sort.

    Plus, if there's a syntax error [on say a 100 line file], it takes the python interpreter takes 2+ seconds to spit it out. In that time, my "check all perl scripts" script that invokes "perl -c" on all files has processed 100,000 lines of perl code.

    The stated mantras are:
    Python -- there's one right/best way to do things
    Perl -- there's many ways to do things

    Having been used to perl's flexibility, I was surprised how difficult python was if I didn't write "idiomatic" python. In fact, despite having 200,000 lines of perl, I don't write "idiomatic" perl code. I've never used importer, carp, etc. I've always written my own equivalents. But, instead of my perl code looking like APL, it would be fairly easy to understand by a C programmer [which is one of my design goals].

  8. Re:Waaaahhhhh!! on Matthew Garrett Forks the Linux Kernel · · Score: 1

    The issue was not about secure boot [as in UEFI secure boot]. This was not a debate about whether the boot loader (e.g. grub) needed a UEFI/secure version. It has one [signed by MS]. Nobody disagrees with that, not even Linus. But, Garrett was not talking about that.

    Garrett was talking about PE as a format for kernel modules loaded by the kernel after it is running. This is completely different.

    Here's the boot process. BTW, I'm a computer engineer with 40+ years experience and I specialize in writing boot roms, loaders, kernel/drivers and realtime on a myriad of systems, so I might just know something.

    A system can have a combination of the following:
    Rom: BIOS or UEFI
    Disk partititon table: MBR or GPT format

    Step 1: So, if you have UEFI, you can enable secure boot or not. With secure boot enabled [which mandates GPT], it needs a signed PE binary in a specially marked GPT partition that has a DOS-like FS format. From within that partition, it will select a file for the boot loader. With that, the ROM will load the bootstrap loader and transfer control to it.

    At this point, secure boot and PE format are no longer a consideration in the remaining boot process.

    Step 2: The bootstrap loader will, regardless of how it was loaded, in turn, load the kernel. It can do so by any method it chooses.

    Step 3: At this point, the kernel controls everything. It will initialize itself. It may choose to dynamically load some kernel modules for drivers, etc. But, you can gen a kernel that is statically linked with all its modules bound in.

    As I said, after step 1, it has nothing whatsoever to do with PE format binaries. The boot loader is already running, regardless of how it got there.

    Garrett was proposing adding PE format for step 3 [or being able to do so weeks later]. Why? And to what end?

    Secure boot is the car's battery during crank. Kernel module format is the brand of gasoline you put in your car. Apples and oranges.

  9. Re:Perl? LOL. on Larry Wall Unveils Perl 6.0.0 · · Score: 3, Informative

    perl6 is a complete overhall of the language. It isn't merely perl5++. They are similar, but they aren't compatible, which is why the perl5 interpreter will be maintained in parallel [so stated]. It has a huge number of new features, including real classes [instead of implementing a class as a hash].

    The perl6 interpreter [written in perl6, BTW], will be able to run perl5 code (e.g. it hooks on .pm or .pm6, etc.) and run a mix of the two. It will also be able to run python code, ruby, javascript, etc. if one wants to add the front end. So, in some ways, it's like .NET. You can run a program comprised of perl6, perl5, python, C, etc. all coexisting in one program. Also, on the back end, perl6 will generate true byte code, and can generate javascript, python, or other backend languages.

    You can also define your own operators (e.g. "nand" for not (x and y), or do full metaprogramming.

    perl6 classes can define "how they're implemented" (e.g. implement me as a C struct, python dictionary, javascript hash, or java class, etc.). In other words, if you request a C struct binding, the data will be stored that way. So, you fill in your object, then you can pass it off to a C function without any glue code. In and out, in and out, back and forth, at extreme speed.

    perl5 is not my main language (e.g. I make my living writing C code), but I've been coding perl5 for 20 years [and I maintain a codebase of 250,000 lines just for my personal scripts]. I've been following the progress for a few years now and I've been waiting for perl6 to give it a try.

    perl6 has ripped off concepts from just about every other language--that's a good thing. Traits, mixins, interfaces(?), multimethods, a full set functional programming operations [like Haskell, Scala, etc.], full set operators [just like python].

    What I've described is merely the tip of the iceberg, done from memory of what I was reading a year or two ago.

    BTW, in case you didn't already know, slashdot runs on perl5 ...

  10. Re: Waaaahhhhh!! on Matthew Garrett Forks the Linux Kernel · · Score: 1

    Don't be such a prig. The "deep throating" comment was figurative and not literal. Would it have passed your tolerance meter if Linus had said "Have sex with Microsoft" instead? Or, "Stop being such a tool of Microsoft"? Or, "Stop being a shill that is promoting Microsoft's agenda of making it impossible to boot a non-MS operating system"?

    The discussion was not about signing binaries in the kernel. You sign them with a utility and then request the kernel to load them into the kernel. The kernel checks the signing and rejects the load if the signature fails.

    BTW, I'm a computer engineer with 40 years programming experience doing kernel/drivers/realtime. There is no good technical reason for Linux to use PE format binaries for applications. Even if you could load them into userland, they can't run because the ABI is different. The are radically less useful as a format for loadable kernel modules.

    What would a developer say/think if you told them that before they could publish [or even load] their kernel driver/module, they would have to submit it to Microsoft, wait five days to get it signed, before they could begin testing. Make a one line change to the source and recompile. Now resubmit and wait another five days ... It is this nightmare scenario that prompted the comment and the idea is so bad [and so obviously bad]. I mean, what can one say? NOTE: I really meant to say "WTF can one say?"--and I rarely curse.

    Once again:
    - Linus does this rarely. It is not his norm with most people or threads. If you still think otherwise, you're uninformed.
    - He does it to people who have a history of "not getting it" or who refuse to fix [obvious] bugs (e.g. Lennart Poetering and Kai Sievers) and post patches they haven't even tested.

    Try looking at the LKML archive. Out of the thousand and thousands of threads, see which ones actually fit the criteria.

    Want to be treated well by Linus?
    - Post patches that fix bugs
    - Post patches that add needed features
    - Keep messages short and to the point. This shows respect for Linus's time and the time of the other developers that have to read your post.
    - Do your research. Show that you understand how the kernel currently operates.
    - Then, when proposing/posting a fix, you'll be more likely to come up with the best one, instead of having it recoded by a maintainer before acceptance.
    - Likewise, with proposing/posting a feature enhancement

    Want to be treated poorly by Linus?
    - Post messages that have meandering, poorly thought out logic.
    - Post broken patches that won't even compile
    - Post patches that break things
    - Fail to provide data tp support an point of view. Or, provide data that is flawed
    - Show genuine lack of understanding of how the kernel actually operates when suggesting a feature or fix.
    - Continue to repeat your argument, unchanged, after the logic flaws have been pointed out.
    - On things that are a judgement call, continue to post messages after Linus has made his decision, trying to weasel your way in, hoping he'll change his mind.

    On Poettering, it isn't just Linus that has the problem with him. A lot of developers do. He's fairly arrogant. Casting aside the merits of systemd [or not], Lennart has a long history of ignoring bug reports, claiming they're not really bugs, saying "You just don't understand it". Well, he's saying this to highly experienced software developers.

    I saw this go round and round on a bugzilla entry. The other developer had already posted a clear description of the bug, with supporting attachment files. It took something like fifteen extra posts, from several developers.

    If you do this enough times, as Lennart has, you will anger/alienate a few people. And, later, when you post on the LKML, you will get hostility.

    Lennart, in addition to ego, is also a comparative newbie coder. He adds features at breakneck pace, but because

  11. Re:Waaaahhhhh!! on Matthew Garrett Forks the Linux Kernel · · Score: 1

    Thanks for the link. I read it back in the day [and agreed with Linus' message if not the tone]. I had forgotten the target of the this was Garrett.

    IIRC, the whole thing was about getting a Microsoft key signing of a Linux kernel module. This was trying to add on the cruft surrounding UEFI secure boot into kernel module building. IMO, this is a braindamaged concept. As Linus pointed out, kernel modules can be signed with X.509 keys [an international standard].

    From another part of the thread (from Linus to Garrett):

    You continue to miss the big question:
      - why should the kernel care?
      - why do you bother with the MS keysigning of Linux kernel modules to
    begin with?
    Your arguments only make sense if you accept those insane assumptions
    to begin with. And I don't.

    And, one of my own questions: Why do we want/need PE binaries when ELF are extensible [the "E" in ELF] and have widely supported tool chains? Answer: Because MS is pushing it.

    Garrett only got blasted when he failed to see the big picture and persisted. At this point, I would have blasted Garrett too, and I'm calmer than Linus.

    Linus is a calm rational guy. I actually met him briefly back in the 90's. His mailing list posts start out calmly asking "why"? If someone persists and fails to back up their claims with data or clear logic, Linus will turn up the heat. But, he only does that for effect to get smart [but sometimes egocentric] developers to actually think about what they're saying.

    I've read a number of these so called threads of Linus' over the years. I'll tell you, at the end, Linus was right. And, I've wanted to set the other party straight.

    For example, the infamous broken "code motion" optimizer bug in gcc that had hundreds of posts on LKML and the gcc mailing list in parallel saying "it's not a bug" and "Linus, you aren't a compiler developer", etc. Finally, one of the smarter gcc developers pointed out that the optimization violated the upcoming C standard--and the bug got fixed. Given what I read, I'm surprised Linus stayed as calm as he did :-)

  12. Changed motto because ... on Google As Alphabet Subsidiary Drops "Don't Be Evil" · · Score: 1

    Maybe now [after careful analysis, of course], "Being evil ..." is "Doing the right thing ..."

  13. Re:That was easy on Microsoft Is Downloading Windows 10 Without Asking · · Score: 1

    The first step is to find the disk space for the Linux distro. If your current system has multiple partitions you can repurpose one if you can move the files off it (e.g. move D:\games to C:\games). You'll probably need to burn a bootable CD with a partition editor. It will grow/shrink partitions [adjusting the filesystems as well]. gparted is one.

    Linux works best with a small /boot partition [say 2GB]. It needs a root partition [to future proof, I recommend 60GB]. A swap partition that is [minimum] 2x the size of physical ram. And a /home partition [make this "all the rest"]. You can get this by shrinking an existing big Win partition that is [say] 10% full. You then create the four partitions from the free space you just created. Or, you could also just add a new SATA disk and put all of the Linux partitions there.

    The one caveat: Be careful with disks that are >2TB as the /boot partition must be in the lower part of the disk due to limitations with the partition table entries in an MBR (BIOS) boot block. I'm assuming you have a BIOS based system (vs. UEFI) and that your boot block is an MBR. All UEFI systems use [mostly] GPT partitions that don't have that restriction. Some BIOS also support GPT, but converting an MBR to a GPT requires a tool.

    When installing grub [the linux boot loader], it replaces the boot loader in the MBR block with grub's. This is fine, because on a pure Win7 system, the boot loader in the MBR just looked for the the "active" partition, read the first block from that partition and transferred control to it. This "second" boot block on the Win7 C: drive will then read the first N blocks from that partition [the "real" win7 boot loader] and transfer control to it.

    The first partition of any MBR disk starts at block 1024. That means that blocks 1-1023 are unused. The grub installer places grub's "second stage" boot there. Grub's MBR boot will read block 1 and transfer control. The block 1 boot will read in 2-1023 and transfer control to it (the "real" grub loader). It is this "real" third stage grub loader that will give you the boot menu, etc. When you select "Win 7", it will read the first block of the Win7 partition and transfer control to it. Win7 won't know the difference from this point on.

    Further, note that even if you add a second Linux only disk, the MBR block will be the one with the lowest SATA slot number (e.g. 0). So, if your Linux only disk is slot 1, the MBR changes will still be on slot 0. grub should handle this just fine, but If you're squeamish, you could swap the cables so the Linux add-on disk is slot 0, but now the Win7 C: partition is on the slot 1 drive and I honestly don't know if the Win7 boot loader is smart enough to handle this.

    Before you proceed, you must create a full win7 backup. I use MS's backup tool. Use the tool to create a "system recovery disk" [a CD]. Tell the tool to "create a system image" during backup and be sure to configure it to backup all your partitions. Note: You must use an external [USB] disk as the backup media. Do not use an internal SATA drive for this [unless you disconnect it after the backup]. I had a disk wipeout, and I was able to restore everything. So, if you make a mistake, you're covered.

    As to distros, I use Fedora, but I've been doing this for a while. I configured a system for a friend who was non-technical and chose Ubuntu. I added an extra root partition and put Fedora on the second. Ubuntu had some issues and eventually even my non-tech friend decided on Fedora. Mint or Arch are also good choices. YMMV, so others can probably give you better advice on choice of distro.

    The CD based installers for most distros are smart enough to look at all partition tables on all disks and not mess with any Win* partitions they find and will add the Win* bootable ones as grub [boot loader] menu entries [at the bottom].

  14. Re:That was easy on Microsoft Is Downloading Windows 10 Without Asking · · Score: 1

    You might be interested in dual boot.

    When I did this a few years back for a new system I got, it had Vista. I then installed Linux over it. The Linux distro installed grub and found the Vista install and it became a choice in the grub boot menu. Later, I installed an upgrade version of Win7. It didn't touch grub or Linux, so now I've got a full dual boot system. I boot Linux by default, and override at the grub prompt for Win7 for games [or turbotax :-)].

  15. Re:Awesome on Debian Working on Reproducible Builds To Make Binaries Trustable · · Score: 1

    The problem solution can get messy.

    Most packaging systems have a control file for each package that specifies dependencies for other packages with versions, conflicts, etc. They specify deps for stuff they care about (e.g. gtk3 version X needs cairo version Y) but they don't always specify the version of gcc et. al. that they need, because that's not important from their perspective. That is, they're happy to build with gcc 4.0.0 or 4.1.0 or whatever. Sometimes the deps are specified as "I need package X with version >= 2.6"

    To be reproducible, these packages would need to spell out exact versions for the build tools and possibly/probably the exact version for any given package it depends on. It's a bit inflexible to burden an individual package with specifying an exact version dependency [and can break a lot of stuff], so generating an "uber" version/dependency file during the "make world" seems like the sanest approach.

    But, that may not work either. When distro major releases are done, they can do "make world" and get the exact versions for all packages. But, sometime later, a package may be updated to a new version. For example, it's a forward/backward compatible bug fix to a shared library, so application program packages that depend on it (via rev >= X) don't need to be rebuilt.

    Also, if a given package has a dependency like "gcc >= 4.0.0" [because it needs a given feature that was added in 4.0.0] may work fine for a while. But, later the package control file may have to be changed to "gcc >= 4.0.0 && gcc " need to be rebuilt, just to verify that the stat.h change builds the same binary? Further, maybe some apps may be updated to use this new define. It would be easy for a programmer to see that merely adding a #define is harmless and backwards compatible. That is, the smart way is use the latest stat.h even for older programs as they will build the same binary regardless of which version is used. But, a validation would have a hard time determining this and would have to rely on package version numbers.

    Existing package systems do have a fair number of extra fields to help with such a choice (e.g. "I'm version x.y.1 and I'm backwards compatible with x.y.0"). But, can/should a validation system rely on this? IMO, it must disregard this and still regen the package and do the compare to detect mistakes in the package control file. That is, the only proof is the final binary comparisons, regardless of what the control file says.

    Now comes the fun part ...

    Naively, the validation system could loop through all packages and rebuild a container, virtual machine, or even just a simple chroot target directory with the correct dependent package versions for the given package that you wish to validate. Most of the the time would be spent simply extracting the packages in order to get the canonical environment for the build/verify operation.

    Far better would be for the validation system to build the container initially and just change dependent packages as needed. But, this would require the validator to do global analysis of all of the dependency graph and choose the best way. For example, you'd like to install gcc 5.1.0 and verify most packages, deferring those that need the newer 5.1.1 until the end. Flipping back and forth would be wasteful and it's desirable to avoid this "thrashing".

    But, such global analysis requires a satisfiability solver of some sophistication (e.g. libsolv) or you end up with massive amounts of cycles consumed.

    As to disk space ... I've been using fedora and do "reposync" so I have both binary and source rpms. For a given fedora version (e.g. fc21), this runs to ~200GB for everything, which is what you'd need on each system if you wanted to "crowd source" the validation effort.

  16. Re:Build timestamps mess this up on Debian Working on Reproducible Builds To Make Binaries Trustable · · Score: 1

    When I needed to compare binaries, I wrote a script that would clean the source of __DATE__/__TIME__ and RCS/CVS style $Id stuff.

    While the $Id was okay for source comments, it was common practice to add something like "static char *rcs_id = "$Id";" to each .c file in such a way that you'd get a bunch of these in the final binary.

    This script can be run recursively on a copy of the source tree. Or, it can be done "on the fly" by having the script masquerade as gcc. Then, do the build.

    This works a bit better than a special binary diff util because the $Id strings are variable length and could change the offsets [slightly] within many generated instructions.

    RCS/CVS also had $Log for comments which pulled in the entire commit log into a block comment. This made even a simple recursive diff on the source trees of two different versions be messy.

  17. FTC to the rescue? on DDoS-Style YouTube Dislikes For Sale · · Score: 1

    In a recent court decision, the FTC's power to levy fines against a company with poor cybersecurity has been affirmed: http://it.slashdot.org/story/1...

    With car manufacturers, sell a car with defective brakes and the FTC can order the manufacturer to recall the vehicles and fix the brakes, regardless of the model year. If the manufacturer fails to implement the recall, the FTC can fine the manufacturer up to $16,000 for each vehicle in the field. With [say] 100,000,000 vehicles in the field, this is a $1.6 trillion fine.

    The FTC recently fined Fiat/Chrysler over failing to implement a recall http://tech.slashdot.org/story... They tempered the amount of the fine to be enough to generate some pain but not so much as to bankrupt the company.

    It's not much of a stretch to extend this to router vendors. Fix security problems and issue a patch [the recall] or face a fine. The fine would far exceed the relatively small NRE cost of fixing the problem in the first place.

    As a side note, this would get security fixes issued for older Android versions (e.g. even 2.0.x) as the FTC could fine any vendor that thumbed its nose at such support: Google, phone manufacturer, and/or telco that was the "obstinate" link in the chain.

    No more of this WONTFIX nonsense [except on latest flagship gear] that leaves consumers that paid good money and got hung out to dry.

  18. Re:Not a parody. A love letter. on Amazon Developing TV Series Based On Galaxy Quest · · Score: 1

    There have been some discussions about sound in [sci-fi] space, particularly about whether you could hear the sound of an explosion during a space battle. Somebody showed how it could be theoretically possible. The main point is that hearing explosions during space battles makes them more exciting. ST:TOS did this in "The Ultimate Computer" by showing the bridge of Bob Wesley's ship when it was it by a phaser blast. Inside the ship, no problem. So, a bit of poetic license and suspension of disbelief adds to the enjoyment.

    The series was just getting started. "Balance of Terror" was a loose adaptation of the Robert Mitchum film "The Enemy Below", which was about a U.S. Navy destroyer and German U-Boat during WWII. The whole thing about the sound was taken from that. At the time, not many television writers had experience with sci-fi. ST:TOS needed plots. So, they borrowed heavily where they could.

    ST:TOS had a number of inconsistencies that varied from episode to episode. They were still developing the canon. By Gene Roddenberry's own admission, the reason for the "transporter" was that "he couldn't figure out how to land this thing" where "thing" meant the starship. Plus, the special effects for the transporter were far less costly than showing the ship land/takeoff, etc.

    In most ST episodes, put antimatter in contact with matter and it explodes [except under controlled warp engine conditions]. This means any matter and any antimatter. In one episode, somebody said "There's less than one ounce of antimatter here, but it's more powerful than 10,000 cobalt bombs".

    However, in "The Alternative Factor", there were two universes, one of matter, one of antimatter. Each universe had a copy of a given person. In this case, Lazarus. Matter Lazarus [who went insane] wanted to meet his antimatter counterpart and destroy both universes. Matter Kirk got sent to the antimatter universe. Met with antimatter Lazarus [the sane one]. No explosion because they needed to be the alternate version of the same person. Made for a great story, but violated canon from all other episodes.

    By the time ST:TNG rolled around, the canon was well established enough that you had "continuity" editors that would spot the canon violations. Hence, the workaround was the "exotic particle" that had whatever properties the plot needed. Since, for the most part, it only showed up in a single episode, no conflicts.

    Regarding B5, J Michael Straczynski was asked "How fast is travel through hyperspace?". His reply: "As fast as the plot needs".

    BEWARE: B5 Spoiler Alerts!

    Because JMS developed the entire five year story arc, JMS was able to fully develop the canon before shooting frame 1 of the pilot. Thus, far fewer canon violations. Two years into the series, B5 viewers were [pleasantly] shocked when the true identity of Valen was revealed. But, this identity was given away, heavily disguised, in the pilot movie.

    This was done deliberately for major themes throughout the series. JMS has said [something like] "I'll lay my cards on the table beforehand. No surprises. But, you won't see it then because it's done in a disguised way and you don't [yet] have the context"

    The main violations of B5 canon were due to actors wanting out of the series and rewriting so that plot points of their characters were given to other characters. Oh, let's not forget that B5 was slated to be cut short after season 4.

    The epic space battle/war that appeared near the end of season 4 was originally planned to spill over into at least 1/3 of season 5, but was cut short. B5 was given a reprieve, but, by then, the "war" was over. Season 5 had to have some other subplots stretched out to compensate. The series finale episode ("Sleeping in Light") was shot near the end of season 4 and would have been the end of season 4. When the series was extended, they had to scramble to write/shoot an alternate season 4 last episode and save "Sleeping in Light" for the end of s

  19. Re:And then they can make fun of '80s hairstyles.. on Amazon Developing TV Series Based On Galaxy Quest · · Score: 2

    See my second paragraph:

    Galaxy Quest had a great mix of comedy, parody, character development, and heroism as well as some classic sci-fi elements. It's one of the first works that was respectful to the sci-fi genre without taking itself too seriously.

    That acknowledged all that you were saying and the key word is mix. BTW, I saw GQ in a theater, and I own a copy, so I may understand it better than you seem to think I do.

    So, where does the series go? Ignore the movie and spread the movie across five seasons and the characters achieve their final growth by the series finale? Or, do you start the series where the movie ended? So, will it just become another serious Star Trek like series without much humor. Or, will it try to blend the best of both?

    I think you lept to the conclusion that it's laugh track jokes or nothing. How about more subtle humor blended directly into a serious plot point?

    For example, in B5, the station breaks away from the Earth Alliance. They can no longer be resupplied. So, Ivanova gathers together a bunch of smugglers/black marketeers in a conference room. Ivanova: "I know in the past we've had our differences. You tried to bring in contraband and we've had to come down on you. Sorry about the shoulder, Jaxos". She then goes on to explain how smuggling in useful stuff will benefit both the station and them. So, they agree to an alliance. Solves the plot point of how B5's supply chain was fixed, with a little humor thrown in.

    Now that the main characters of the Protector have matured and are heroes, they are the anchors for the serious plots in the stories. But, you needn't drain them of their sense of humor to fit some rigid heroic vision. GQ, in addition to everything else, was more broadly comedic. Why toss away one of its strengths? Because the main characters have matured, you can move the broader comedy to infrequent recurring characters in subplots.

    And, if you want to talk about the injustice of something, sometimes the most effective weapon is humor/comedy/irony/mockery of it (e.g. an officious bureaucrat).

  20. Re:Not a parody. A love letter. on Amazon Developing TV Series Based On Galaxy Quest · · Score: 4, Interesting

    The sad part was that Galaxy Quest was marketed to kids instead of a parody of, or homage to, Star Trek (TOS in particular) and its adult fan base. Thus, didn't do as well at the box office as it should have. Note: I've seen ST:TOS in original network first run and have been a fan of all forms of the show since (and I'm a huge fan of Babylon 5 as well).

    Galaxy Quest had a great mix of comedy, parody, character development, and heroism as well as some classic sci-fi elements. It's one of the first works that was respectful to the sci-fi genre without taking itself too seriously.

    If done carefully, the series could work. In TOS, there were a number of plot holes (e.g. in "Balance of Terror", Spock hitting a button that causes a beeper to go off, alerting the Romulan ship--this ignores the fact that sound doesn't travel in a vacuum). In ST:TNG, they got around things with the "exotic particle/ray of the week" approach.

    For example, "cross phased polartronide delta particles", CPPDP for short. They threaten to rupture space/time, etc.

    The new series could work because maybe the ship has something that could combat CPPDP but they'd have to explore the ship to find it. Then, they'd have to figure out how to operate it. Plenty of opportunity for comedy. Plenty of opportunity for traditional Star Trek plots, just presented in a lighter vein.

    In TOS, the "A Taste Of Armageddon", the planet fights its wars with computers and herds casualties into suicide stations. Everybody took this so seriously (Kirk, Spock, the aliens, and Ambassador Fox). Nobody ever said "How silly that is".

    How about having a smart-mouthed android that says: "Completely logical. Our ship's sensors have determined 99.44% of your population is composed of genetic defectives" (like the robot in "Lost in Space" saying "Dr. Smith is a quack").

    Further, the android is programmed to abide by Azimov's robot principles. But, the android is constantly trying to break that programming so he can kill the rest of the crew (e.g. Like Klinger doing outrageous/funny things to win him a section 8 discharge in "Mash").

    The ship, internally, could be much larger than the outside (Think: Tardis). In Stargate, they were always discovering new stuff left behind by the "ancients".

    If the interior of the ship were large enough, it could have a ST:DS9 "promenade". In Babylon 5, there was the "zocalo". Plenty of room for a shady character like Quark, Harry Mudd, etc. In B5, it wasn't all equal. They had levels that were little more than tent cities, with the denizens living in poverty.

    How about "breaking the fourth wall" and speaking directly to the audience. This was done by George Burns in "Burns & Allen" [and "Wendy and Me"]. It was also done in "She Spies". Let the android do it, functioning as narrator: "Android's log: The ship is headed to Omicron Burpo Five to initiate trade negotiations. I, however, have determined that the Omicron Burpo system has large amounts of Kyratron radiation and that if I'm able to collect enough of it, I'll be able to break my Azimov programming and finally kill the crew".

    Oh, yeah. How about a character like Jonathan Harris' "Dr Smith" in "Lost in Space", who is just as cowardly. Or, like Colonel Klink from "Hogan's Heroes".

    Or, maybe there's the lovable ship's cook (like Neelix in ST:Voyager), but who is inept. Food poisoning after his meals, etc. The crew has to find ever more clever ways to disguise the fact that they're not eating his food anymore, lest it hurt his feelings.

    Because the ship is so big [internally], it could have a passenger liner section (Think: Love Boat). ST had a number of episodes around transporting diplomatic personnel to peace conferences. A passenger orders a vegan meal. Gets a vegetarian meal. But, the passenger really wanted "sauteed kremloks" served as they do in Vega star system.

    Do a main plot each week, just like Star Trek, albeit a little more tongue-in-cheek. Add more sarcastic stuff in smaller side plots and characters. This was the form for a lot of episodes of the Mash series, which carefully balanced serious subjects with comedy.

    In short, Galaxy Quest as a series, has the potential to be just about anything.

  21. Re:i think it shows trends in GitHub's demographic on The Top 10 Programming Languages On GitHub, Over Time · · Score: 1

    I wouldn't do engines[4] IRL, but, c'mon, this is slashdot. It's hard to post meaningful code fragments using what they provide. Would engines[NENG] be less objectionable, even if I hadn't defined NENG?

    The whole point of "= 0" is that it came from a time in C++ when adding new keywords was eschewed because C++ wasn't fully adopted and the more new keywords used, the more places it would blow up C code that was being ported. For example, I do believe I had a function called "new" and when I recompiled the code in C++, I had to rename it. These were the cfront days. The early adopters of C++ were C programmers looking for a better way.

    When C++ first arrived, it was billed as an incremental addon to C [to get quicker mindshare/acceptance]. Nowadays, it's considered a language in its own right, with a native compiler. But, cfront had some advantages. You could do "cfront xyz.cpp" to get xyz.c and compile that. Having xyz.c to look at, you could see where "x = y" generates "deep copy". To do that now, with a modern compiler, you'd probably have to generate the .s file and peruse the assembler output. So, which is really better?

    C++ was brought in stealthily lest it frighten off the C programmer base at the time. Now, C++ adds keywords just fine: template, mutable, explicit. But, why not use "+++" for mutable? Or, "---" for explicit? If mutable/explicit had been in the language at its inception, these keywords would probably have gotten some quirky syntax instead. But, I'll tell you, when I first saw "= 0" some 20+ years ago, my first reaction was "WTF?". So, if you would find "+++" objectionable instead of "mutable", that's the reason I prefer "pure" over "= 0". The only reason you're not hearing objections about "= 0" is that it's part of the language, no matter how quirky it may be. Try showing it to a java programmer. Nowadays, if "= 0" didn't exist, and somebody wanted to add "= 0" in lieu of a keyword, the general reaction would be "burn the keyword and we'll adjust our code to fit rather than add more quirky syntax". Another case: why use "class" [a new keyword] instead of "@struct". Using class added something. But, it's just shorthand for "struct { private: ... }".

    Why have [our now favorite class :-)] Z's constructor be "Z" and the destructor be "~Z"? In other OO languages, they are _creat and _destroy respectively [squirrel, I think]. Personally, I prefer _creat/_destroy, but "The mayonaise you like is the mayonaise you grew up with".

    I do believe I mentioned handling things by having Z inherit privately from X. Then, create public forwarding functions in Z, leaving off the offensive fncX12.

    Most of the code I write uses composition. I have a number of objects that have doubly linked pointers. And, I have standard routines for these. Consider:
    Z {
    Z *z_prev;
    Z *z_next; ...
    }
    In C, I'll usually have a bit of either metaprogramming or macros that do:
    Z {
    DLINK(Z,z_); ...
    }
    where DLINK is:
    DLINK(_typ,_pre)
    _typ *_pre##prev;
    _typ *_pre##next;
    The traversal is handled with a FORALL(lst,cur) macro. This is:
    cur = lst->head; cur != NULL; cur = cur->z_next
    This stuff is available to code outside the class. Thus, the links need to be public (in C++)

    Now, in order to get the same cur->z_next in C++, you can do the above, or you can inherit from a zlink class that might be generated from a template with the appropriate type (e.g. Z) that has the low level stuff in a dlink class. The template generated code does upcasting to the dlink class. So, you can, for example, have a single copy of dlink.check_list_integrity without having to do massive casting by hand.

    I've also done this via:
    Z {
    dlink z_dlink;
    }
    But, I find this

  22. Re:i think it shows trends in GitHub's demographic on The Top 10 Programming Languages On GitHub, Over Time · · Score: 1

    The rant on new (the stanford paper) was not mine. And, it was about new being an operator instead of a function. BTW, I've been programming in C for 35 years (+ 10 before doing C). I haven't seen malloc use char * in at least 15. And why does one need to use std::unique_ptr to force C++ not to be "cute"?

    The RTTI is disallowed at Google and C++ is their goto language. It's also slow. There was a recent usenix paper https://www.usenix.org/confere... that has a CaVer tool for detecting bad downcasts. It does much of what the RTTI does but as a tool. It could easily be adapted into an alternate RTTI implementation and it's much faster than RTTI (e.g. it uses RB trees instead of walking the hierarchy with string compares)

    C++ makes code easier to write, but because it's easy to abuse, it's harder to review/debug. Because, you have to detect the abuse, which can be much harder. Particularly when you have to peruse 50,000 lines of code to get the first clue as to the bug.

    Inheritance does violate encapsulation. See a better example I did here: http://slashdot.org/comments.p... You're assuming you control the superclass instead of just inheriting from it. That is, the author of X and Z are the same programmer, or even in the same organization. Read that post, especially the timeline.

    In C, if you "inherit" a class, you can do so thus:
    Z {
    X z_x;
    }
    At first glance, that looks like a "has a" but it's really an "is a" in this context. That is essentially what C++ does [invisibly] and in C you just do z.z_x.fncX4 instead of z.fncX4. And, you can put a comment that says "// don't use fncX12" in Z. So, if you do that, how do you classify it?

    "x = y" can generate a copy constructor or a copy assignment operator. If either of these is overloaded in the class, they can generate a "deep copy" whether you want it or not. In C, "x = y" either copies the scalar value, pointer value, or does a struct element by element copy (e.g. can be done with memcpy). In C, if you wanted a "deep copy" (e.g. a member has a char *, and you do a strdup), you'd create a "deep_copy" function and you'd say "x = deep_copy(y)". That is explicit as to intent.

    Another example: "x += y" might generate a huge amount of code because the creator of the X class decided that the "+" and/or "+=" operator should do things with a database. That's an abuse. The creator clearly abused things, but the [hapless] programmer trying to find this would have their work cut out for them. They're not going to be able to check every "+" statement for "is this overloaded in an insane/abusive way?". If the "+" were actually a member function called "plus" or better yet "addto", a reviewer would be much more clued in to look at the "addto" function than a simple "+".

    Or, the "+" operator is defined such that if you were using an unsigned int it prevents wrap (e.g. 0xFFFFFFFF + 1 --> 0xFFFFFFFF instead of 0--common for some video calculations and saturation). Somebody who is not the original author would probably not realize this on the first pass through the code and might take much longer to realize that this is the bug they're looking for (e.g. the value needs to wrap to 0). If you want FF+1 --> FF instead of 0, create a sat_add function that does the job. You'd have to do that anyway in any OO lang that doesn't support operator overload (e.g. java)

    And, don't get me started on ">>" and "" for streams. This is one of C++ most obvious "hacks". People realize how defective it is, but swallow it, because it's ubiquitous and idiomatic, but nobody should try to defend it.

    As to polymorphic functions:
    void foobar(int i)
    void foobar(float x)
    void foobar(int i,int j)
    Is that incorrect?
    What the trial found was that:
    vo

  23. Re:i think it shows trends in GitHub's demographic on The Top 10 Programming Languages On GitHub, Over Time · · Score: 1

    is_a/has_a is so you can determine if you can/should inherit. While the standard literature might say that the inheritance is part of the class definition, it's also an implementation detail of the given class. Radical idea, no? Read on ...

    Back to school for the sake of common ground: An airplane is not an engine. It has an engine. An airplane is a vehicle. So airplane could inherit from vehicle but would have:
    engine_t engines[4];

    Encapsulation has two definitions:
    https://en.wikipedia.org/wiki/...

    (1) A language mechanism for restricting access to some of the object's components.
    (2) A language construct that facilitates the bundling of data with the methods (or other functions) operating on that data

    I'm talking about (1), and also using it for information hiding.

    For reference below, a "Z user" or "user of Z" means ordinary code that does not inherit from Z.

    Referring to my original X/Y/Z example, suppose X or Y was a pure abstract virtual class. That is, all member functions were:
    virtual void fncX1() = 0;
    virtual void fncX2() = 0;
    A side comment here: the "= 0" seems bizarre. Back when it was created the mantra was to avoid new keywords [at any cost]. Wouldn't "virtual void fnc() pure;" or "pure virtual void fnc();" be easier to grasp?

    Thus, Z would have to provide real definitions for fncX1, ... and they are part of the definition of X. Thus, any user of Z would be blocked from trying to "go around" Z to get to X member functions. A side benefit is that a user of Z would only need to look at X to find the functions that could be used.

    If one of X's member functions is not pure virtual, Z doesn't have to provide a definition for it. But, suppose the creator of Z does not want a user of Z to access a particular X function. C++ has public/protected/private but not on a per-function/member basis for classes it inherits from.

    So, how does the user of Z know whether accessing X::fncX6 (via Z::fncX6) is what the Z author expects/intends? Nothing in the language prevents it if X is a public ancestor of Z.

    What I would want is that for any function in X that is not specified in Z, no access is allowed to any user of Z. In other words, you'd need an explicit [not the keyword] definition of a member function:
    Z {
    alias void fncX1() to X::fncX1();
    }

    In more standard terms:
    Z {
    void fncX1() { X::fncX1(); }
    }

    Thus, Z must clearly spell out all functions that can be used. The usual way might be to make Z inherit from X as private, then Z would have to provide public functions to allow controlled access to X. If Z doesn't want a Z user to access X::fncX6, it just doesn't define Z::fncX6.

    So, a user of Z can see everything at a glance. If the author of X adds a new function, it is not usable by Z until the Z class gets a definition. This would be the case if X were pure virtual as Z lacking a definition of the new X function would generate a build error.

    But, I'm talking about enforcing that restriction for regular classes. Yes! For a base class that had 50 member functions, that would require each child class to provide 50 definitions. A possible workaround would allow some wildcard matching:
    Z {
    alias fncX[1-20] to X::fnc[1-20]
    }

    Consider the following development timeline:
    (1) Author X creates class X with public functions fncX1, fncX2, and fncX3
    (2) Author Z creates class Z that inherits from X (as public) and adds fncZ1 and expects that users of Z will have access to fncX1, fncX2, and fncX3 [and fncZ1]
    (3) Author X adds fncX4 and some additional stuff that author X will find unsuitable.
    (4) Author Q starts u

  24. Re:i think it shows trends in GitHub's demographic on The Top 10 Programming Languages On GitHub, Over Time · · Score: 1

    Right you are. Linus did a pretty good [well, succinct anyway :-)] job explaining this.

    Here are a few more detailed reasons why you can't write a kernel in C++:
    - C++ constructors [or destructors] can't return error codes. They can only throw exceptions.

    - Leaving aside the fact that relying on exceptions (vs. checking error codes, which the kernel code already does at every step of the way) is largely unsuitable in a kernel [or an app even]

    - The kernel has several modes/states: in ISR, in syscall, entering/leaving syscall, in kernel thread, in tasklet/ISR bottom half and most of those, if not all, an exception can't be used.

    - Even you still wanted to try, the exception code that C++ generates can't be used in the kernel. It would have to be something custom.

    - So, you can't wrap a lock acquisition inside a constructor [and release inside a destructor] because if you're in an ISR, you have to do "trylock" [and test the return code] instead of "getlock". Trying to wrap the trylock in a constructor requires that you be able to throw an exception.

    - Nothing in C++ (inheritance, polymorphism, operator overloading, etc.) helps the kernel with the bulk of what it does (e.g. programming devices, ordering of FS writes with journaling, setting up page tables, etc.). A lot of things the kernel does are "dirty" jobs (e.g. some device interfaces are straight out of kafka, particularly for older devices).

    - The linux kernel [and *BSD] are shining examples of how to program in C in a "clean" way, despite having to do a "dirty" job

    - As to "object oriented" programming, the kernel already does a fair bit of it already, but without the fanfare/hoopla.

    When Linus first introduced git, he gave a video talk. He said [paraphrasing] "It's all about the merging, stupid". To me, it's all about the debugging

    Disadvantages of C++ over C:
    - constructors can't return error codes, only throw exceptions. In C, you can choose what ever you want:
    {
    foo_t *new_ptr;
    int errcode = alloc_and_construct(&new_ptr);
    }
    {
    int errcode;
    foo_t *new_ptr = allow_and_construct(&errcode);
    }
    {
    foo_t *new_ptr = alloc_and_construct();
    if (new_ptr == NULL) // error ...
    }

    - new/delete are operators and not functions [defective by design]. See http://www.scs.stanford.edu/~d... for a far better/in-depth explanation/condemnation than I could give.

    - templates and stl -- they can simplify some code, but if the stl implementation has a bug, where do you put the breakpoint? Of course, the stl is like "Westworld" [1973] "Where nothing can ever go wrong ... go wrong ... go rong ..." :-)

    - Try to explain to your boss that the reason you can't ship a product is because you used the stl heavily and you'll have to wait six months before the bug fix gets propagated to all the platforms you ship on.

    - A simple "x = y" can generate a copy constructor [or two other things that I can't remember]. Trying to decide which one gets generated "at a glance" is problematic. The simple line may generate a lot of code that is slow. In C, there's little to no ambiguity (e.g. x/y are either simple types (e.g. int), pointers [to structs], or structs and the execution time is more easily predictable). There was a proposal a while back to come up with a C++ subset for realtime [IMO, why??? If you want realtime, just use C]. The one feature I remember was removing copy constructors [as evil].

    - In C++, if you're trying to use some of the more advanced/powerful featur

  25. Re:Sorry Jeff on Debate Over Amazon Working Conditions Goes Back Years · · Score: 3, Interesting

    I emailed a friend currently working at Amazon, with links to the NYT story and the CNN/Money story. I asked him/her if that sort of thing ever happened in their group.

    The reply: "It seems all true, even!"

    The friend is a former boss of mine, whom I know to be honest, fair, and a really good manager, who knows my skill set well, and would have been able to match me to some opportunities. But, now, I think I'll pass on Amazon as I'm getting confirmation of the environment from someone I know.

    If Bezos truly doesn't condone the bad behavior, but also believes that it isn't happening underneath him, then, he's asleep at the switch.

    Berating people in meetings is actually "creating a hostile work environment", which is actionable under U.S. labor law. But, anybody mentioning this to HR would probably mark the person as "not an Amazonian" and the person would find themselves being shoved out.

    This is "stack rank" management [at MS], where the lower 20% must get bad reviews even if they're top performers. In a dept of five where all the team members are stellar performers, one must be singled out as a "low performer". This was started, IIRC, at HP, and is also at Cisco. So, the group gets together and mutually selects "the goat" for the quarter. After five quarters, each employee has been "the goat".