Wikipedia:Reference desk/Archives/Computing/2011 February 19

From Wikipedia, the free encyclopedia
Jump to: navigation, search
Computing desk
< February 18 << Jan | February | Mar >> February 20 >
Welcome to the Wikipedia Computing Reference Desk Archives
The page you are currently viewing is an archive page. While you can leave answers for any questions shown below, please ask new questions on one of the current reference desk pages.

February 19[edit]

What do you do?[edit]

OK, computer experts. I am looking at my Windows 7 box right now as it displays a dialog box telling me my computer is low on memory and I should "Close programs to prevent information loss". The mouse cursor has disappeared, the keyboard does nothing, ctrl-alt-del doesn't display the Task Manager, and the computer appears unresponsive and inert ... except that the hard disk light on the tower flashes several times per second. The light is off, I'd estimate, 90% of the time in any given second, and the other 10% of a representative second, it's on (distributed throughout that second in a number of flashes, if I'm making sense.)

I've seen this phenomenon many times before on XP boxes, a few times on Vista boxes, and this is the first time on a Windows 7 box.

The question I put to you all is: What do you do when your machine locks up except that the hard disk light keeps flashing? Do you express faith in protected memory and the OS by waiting for an hour? Two hours? Begging for your mouse cursor to return? After all, maybe it's hitting the page file a lot and it's all fragmented, or something, and the computer will come to its senses any second now. Or do you swear explosively after sixty seconds of inactivity and cold boot the machine? Comet Tuttle (talk) 00:20, 19 February 2011 (UTC)

When I have a computer that misbehaves in any way, I usually format its boot partition and re-install a fresh copy of an operating system I trust on it. (This can include Windows XP, for some computers). Installing Windows XP usually takes around 15 minutes - faster than diagnosing and debugging any type of system corruption. (Customization and program-installation can take longer, but not "much"). For this strategy to be effective, you need to design your computing infrastructure such that catastrophic-loss-of-operating-system has minimal or zero impact on the integrity of your important data. You can accomplish this by robustly backing up important data, and/or placing data on separate disk partitions and separate physical media. Also note that this doesn't fix "broken" (or obsolete) hardware. Nimur (talk) 00:28, 19 February 2011 (UTC)
To answer the question directly, I cold-boot the machine, and then I contemplate the fact that I have been asking the machine to do more than it is capable of (because of its limited memory), and I think about whether it would be better to (a) reduce my demands, possibly by removing cruft that is running in the background (b) add more memory, or(c)get a new computer. Looie496 (talk) 06:17, 19 February 2011 (UTC)
Technically, protected memory isn't relevant here; it's having a journaling filesystem, which ensures that the disk can always be easily restored to a consistent state. Of course, you have to hope that the OS hasn't just put things into a consistent-from-the-file-system's-point-of-view state, but broken-from-the-user's-point-of-view, but I think that rarely happens. Paul (Stansifer) 16:34, 19 February 2011 (UTC)

How can my organization's editor, or I, do minor updates and corrections on your posted biography of me (Amory B. Lovins)?[edit]

This question isn't related to computing, moving to Wikipedia:Help desk. JIP | Talk 20:21, 19 February 2011 (UTC)

The new links are:
--Teratornis (talk) 03:43, 20 February 2011 (UTC)

Glasses less 34[edit]

How does glasses less 3d works? I can't find an article. --Tyw7  (☎ Contact me! • Contributions)   Changing the world one edit at a time! 08:01, 19 February 2011 (UTC)

There's autostereoscopy. (talk) 08:26, 19 February 2011 (UTC)

The history of branch prediction[edit]


Wikipedia's article on branch predictors says that the IBM 7030 (of late 1950s vintage) did static prediction. I did some research, searching the web, books, and papers for any computer predating the 7030 that did any form of branch prediction. I could not find any. So my questions are: Was the 7030 the first computer to predict the outcome of branches? If the 7030 was the first computer to predict branches, then did the idea of predicting branches predate the 7030? Thanks in advance. Rilak (talk) 08:15, 19 February 2011 (UTC)

STRETCH was a stupendously aggressive design with many "firsts", not all of which worked. If you look at the references to the 7030 article, in particular the online book "Planning a Computer System - Project Stretch", you might be able to find more info about the branch predictor. (talk) 10:50, 19 February 2011 (UTC)
I can't find anything earlier than 7030 that claimed to use branch prediction. Note that earlier computer systems, like IBM 7090, were not pipelined CPUs (and as far as I can tell, did not have a memory cache, either). So there would be zero benefit to speculative execution in those computers. IBM 7030 may have the point for first branch prediction, but System 360 definitely gets a lot of extra points for effective implementation of register renaming, register-forward-passing of preliminary results through the pipeline, successful dynamic branch prediction / speculative execution, and a lot of other features of "modern" CPU pipelines. (Tomasulo algorithm is named for one of the chief architects of System-360). Now, if you want to "extend" the definition of branch-prediction to try and apply it to some very primitive systems, you might be able to - but to meet today's definition, you'll need to find a CPU with a staged pipeline deep enough for speculative-execution to have mattered. Nimur (talk) 15:52, 19 February 2011 (UTC)
I suggested looking at that particular book because I think it might contain info about the design process of the 7030 pipeline and branch predictor, and might mention whatever antecedents (if any) that were known at the time. I looked briefly at the book a long time ago and thought it was interesting, though I'm afraid I don't remember enough about its contents. It just seems like a reasonable first place to try. (talk) 21:41, 19 February 2011 (UTC)
Thanks for your replies. I had a look at the book that you suggested, and it does describe how the 7030 performed branch prediction and how its architects arrived at the scheme implemented. Unfortunately, didn't offer any hints in the section(s) I read as to whether the idea of branch prediction was developed by IBM for the 7030 or whether it was already a known concept in the literature. Rilak (talk) 05:32, 22 February 2011 (UTC)

where to find someone who is interested in making something new easily[edit]


I'm not an active programmer, but I know how a common protocol works, and by inserting two lines into the protocol, you could get a different, really interesting protocol. I'd like someone to do this for me, they can publish the results too, under their name. (They can keep maintaining the project, too, if they want,, which would add to their portfolio and might help them get jobs, etc). I just want use of the resulting protocol. (I've already checked with others, and my changes do work). How would I go about finding such a person? Anyone who knows C++ and can recompile an existing project with a few lines of changes in a few minutes, could do this whole thing in 20 minutes, and it's interesting and cool. Thanks. (talk) 10:24, 19 February 2011 (UTC)

If it's that simple, why not describe it here. (talk) 10:39, 19 February 2011 (UTC)
Because that won't get anyone to make it? You'll just say the same thing others said: "yeah, that would work and it's pretty cool." Maybe I should make a programming contest, where everyone has 20 minutes to do it, and whoever's I judge best gets a prize of $50 and the right to say they won the contest. Ironically, the same people who in this way would end up working for free (i.e. all but the winner), probbaly wouldn't do it for $50 outright - especially the most talented one, the one who wins. So, I can't use $50 to get a copy of my working protocol outright, but I can use it to get a BUNCH of different solutions, all working, and all but one of them made for me for free... Boggles the mind. (talk) 10:51, 19 February 2011 (UTC)
$50 for 20 minutes is probably pretty attractive to student programmers or the like. You could post an ad on craigslist, or to some programming forum as you suggest. But, I agree that most programmers with any experience wouldn't participate in such a contest for an uncertain shot at the prize money. They'd only do it if they were guaranteed payment on completion of the task. The reason I suggested posting the idea here is so that programmers here could then tell whether the idea made sense. It's often easy to overestimate the usefulness or underestimate the difficulty of some programming idea, especially for a non-programmer. (talk) 11:11, 19 February 2011 (UTC)
There's no question if it works. Why don't you email me at (made just now for just this purpose, don't worry about spam) and I'll respond with 2 lines, then you can come here and post that you agree it works. I've had enough confirmation that it works, now I'd just like to have it done. 20 minutes. for anyone who can recompile an existing project with a few lines of changes in a few minutes. That's not me. (talk) 11:17, 19 February 2011 (UTC)
Why are you being so secretive? Just post it here. Or anyway, say what protocol or project it is. (talk) 11:19, 19 February 2011 (UTC)
Because then no one will do it. But fine, I'll post it here if anyone here makes a promsie on their mother's life that if they agree with me that it works and can be done in a few minutes, they will do it and host the resulting project somewhere. We're talking a couple of minutes here, for someone who meets the criteria that they can "recompile an existing project with a few lines of changes in a few minutes". Tell me that you meet the criteria and make the promise, and I'll do it. (talk) 12:01, 19 February 2011 (UTC)

just a reminder, that my question is "where to find someone" who is interested in that. IRC? Some special site? Where. (talk) 12:14, 19 February 2011 (UTC)

Why on earth would anyone make such a promise? They don't even know what project it is. If it's something like Firefox, it takes hours to build from source. The reason I suggested that you post the idea here is so people can decide for themselves if it's interesting enough to spend any time on. Right now there's no evidence that it's even interesting. And it's not even clear what you're asking--someone is supposed to patch some C++ program, recompile it, and send you a compiled binary? Don't you know better than to run binaries from strangers over the internet? You don't even say what OS you're using, so any particular reader might have a tool chain for their OS but not for yours. Or wait, you're asking them to fork some existing codebase and maintain a fork for the rest of their lives? Why not just get the upstream devs to take the patch? Anyway, these guessing games are not very interesting. If you want to hire a programmer, I already suggested (talk) 12:25, 19 February 2011 (UTC)

You could always learn a programming language and do it yourself, which would probably be the best option if you want to keep whatever it is you're doing up to date and just how you want it. (talk) 12:34, 19 February 2011 (UTC)

If you're as secretive and spend as much time trying to convince people it's a good idea and very easy but they need to make obscure promises before you even tell them what it is, I don't know if there is anywhere you can find someone willing to do it for $50. In fact considering the reason you say you don't want to tell people is because they won't do it if you do tell (not say because you're scared they'll steal the results and not give you credit which you don't even seem to care about), the only logical conclusion most people are going to make is there's either something dodgy which is why you're being so secretive or you're just wasting their time. On the other hand, if you actually tell people what they want to do when they ask without asking for obscure promises, and it really is as simple as you say, I'm sure you'll find someone somewhere like craiglist that's already mentioned who'll be willing to do it. It may not be everyone who reads your request but I don't see that matters. Nil Einne (talk) 13:29, 19 February 2011 (UTC)

Fine, I'll tell you[edit]

ugh. Fine, I'll tell you. Target: latest version of Debian, against which I've never programmed. Just make a private and public key using pgp etc. Then download source code to any bittorrent client and modify it thusly. In the part that checksums bad data you got from other peers, before you throw it out if it failed checksum, do one more thing: write it out to a file, and check to see if it was signed by keypair you made. (you only use the public key for this). if it was signed, then it means it's a new .torrent2 file (name of our protocol) and you start that in another copy of your client, as well as telling peers connected to you that you have it, giving it to them when they want it, etc. Even though it failed the checksum, you treat it as if it had passed it.

That's it. There are a couple of implementation details that will take the rest of the 20 minutes. (or, if you're not an 31337 hacker, the rest of your couple of hours.)

What does this do? This replaces an RSS server for a series of torrents. If you know you want to get the next episode, which doesn't exist at the time of the torrent creation (so you can't possibly include any reference to it in a normal .torrent file, since you can't checksum it, it's from the future) - normally what would happen then is that users have to wait until that file actually exists, and then download another torrent for the new file in a totally non-p2p way (RSS, direct http, etc). A torrent2 just lets you put that into the final chunks of the file. The implementation details I mentioned include checksuming just the first part of the file, not the extra payload (treated as 0's when checksuming the original files). Also torrent creation, which means creating a file with extra chunks at the end that later will deliver the next torrent file, and for the checksuming, treating those chunks as zeros.

The idea is that all these users are already in a p2p network, why should they have to do a direct file download for the next part of the series (which doesn't exist at time of torrent creation) - why not just use the same network they're in?

The protocol piggybacks on the bittorrent protocol. Thus, there are two layers: bittorrent layer, bittorrent2 layer.

At the bittorrent layer, this is what happens. Nobody is a seed, because nobody has the last chunk. Nevertheless, the users get to 99%, and, lacking any seeds, just stay in a network waiting for the last chunk.

At the bittorrent2 level, when they reach 99% they already decide to write out the original file, and they use the file's checksum (assuming 0's for the last chunk). They are done with the original file download and just waiting for the next torrent.

This way there doesn't need to be an RSS server or direct downloads. With trackerless torrents, the original server can be long gone. When the next episode exists, the 'server' can just join the same network as a client, but with the difference that it has the private key and can create, distribute and initiate the next torrent2 for the whole network waiting for it. (If you feel uncomfortable about automatically starting the torrent2 of the file from the future, as a security measure, the next torrent2 doesn't have to actually start, it can just be written out and the user could be prompted to see if he wants to start it. Either way, you save having to do a direct, centralized download of the next torrent2 file.)

All this, I swear to you, can be done in 20 minutes by an 31337 Unix hacker in a contest setting. Yes, it might take you a couple of hours, but this is super easy.

Now queue all you people saying "yeah that'll probably work" and is obviously super-simple, and no one doing anything about it. I'll pay $100 to the first person who tells me they will do this by midnight UTC (about ten hours from when I post this) at my e-mail address listed above, and will update the status here to show that the prize has been taken. If they don't deliver I'll repost tomorrow. They can also use it on their portfolio. Seriously, aren't there any 31337 hackers here who want $100? This is not a contest: this is just you. It's obvious you can do the above in a few hours, if not 20 minutes. Write me. (talk) 14:12, 19 February 2011 (UTC)

It's like, I'm handing someone a portfolio and a job worth about $80k/yr (that they will get by having this on their portfolio.) Yet I expect no one will take me up on in it. (talk) —Preceding undated comment added 15:12, 19 February 2011 (UTC).
Another word of advice (I was thinking this before but didn't think you'd respond so didn't bother). It's good you dropped the secrecy surrounding the idea but if you want to get people to drop everything do work for you which has to be completed in 10 hours, when you haven't come to any sort of prior agreement for them to be available at your beck and call, you may find they'll need more evidence they'll get paid, and a random IP and throw-away email isn't that. Definitely if someone handed me an alleged portfolio and job worth $80k/year but they didn't tell me who they are I wouldn't be particularly interested. Nil Einne (talk) 15:23, 19 February 2011 (UTC)
um, in case it wasn't clear the job isn't from me. I'm saying, if you're a member of my target audience (basically, anyone who is a good coder, understands what I wrote, and is used to compiling on Linux), and you're not working for $80k yet, having a project like this (creation of an a successor to the torrent protocol that obsoletes the need for an rss server pounded by all the people listening to it), you will get an $80k job pretty easily. I am not offering that job. I'm offering 100 bucks. If you read my offer, I didn't say anything about payment up front. I said "first person who tells me they will do this by midnight UTC". Obviously I can pay you before receiving your ocde, if you say you've done it. There is no "alleged portfolio". Your portfolio is whatever you create for me. It's your own work. I don't know what you think a portfolio means, but that's what the word means. This is an investment in your future, plus 100 bucks from me, if you will agree to do this. I can make payment before you deliver any of the code to me. Anyway, it's certainly more interesting than whatever else you could do for the next twenty minutes (if you're a 1337 Unix hacker) to ten hours (if you're just a good programmer). No one has mailed me yet. By the way, the mail is to protect me from spam from crawling bots, I can give you my real email address if you mail me. (talk) 15:53, 19 February 2011 (UTC)
Also, the reason the deadline is today is because the right person can do it in 20 minutes, and the almost right person can do it in a couple of hours, but the wrong person can string me along for weeks. It's as though I needed a 12-word sentence translated from French to English. First I would ask the reference desk, and if it required 20 minutes of work and no one would do it, I would pay someone. But I would not give them weeks and weeks to get back to me on that. Come on. In weeks and weeks, I can learn French myself, using online dictioaries, etc etc. Forget it. (talk) 16:02, 19 February 2011 (UTC)
1. Go to any of the freelancer sites on the web.

2. Describe the project and make clear that payment is upon completion You'll get better offers than $50/20 minutes. —Preceding unsigned comment added by (talk) 15:37, 19 February 2011 (UTC)

I've used those sites, and I guarantee you nobody even understands what I'm asking, and even if they do they would try to deliver it in Visual Basic. Unlike here, where everyone understands what I'm saying, agrees it's super-fast, everyone is a competent coder, but won't do it anyway, depriving themselves of having it on their portfolio to show prospective future employers. (talk) 15:53, 19 February 2011 (UTC)
Many of us volunteer at the reference desk because we are here to help people find references about computers. If we were seeking commercial opportunities, our time could be spent more fruitfully elsewhere. In any case, let me make a few comments about your idea:
  • This project will take much longer than 20 minutes. Even somebody with specific experience in a particular bittorrent source code would not be able to correctly make the modifications you suggest in 20 minutes.
  • You are suggesting a modification to an existing standardized network-application protocol. How will that work? Who will connect to your (now-incompatible) bittorrent client? Your software is not standalone - to succeed, it will require aggressive marketing to acquire network effect critical mass; otherwise, you simply have created an incompatible bittorrent client.
  • Are you sure you thoroughly understand the way bittorrent protocol works?
  • Are you sure you understand the risks of accepting binary data from a peer-to-peer network that explicitly failed an identity-verification checksum?
  • Do you realize that many Bittorrent sourcecode is free and open-source, and that you could make these experimental modifications yourself? In fact, there is no barrier for anyone to perform these modifications - except that they aren't very useful.
Hopefully your project will find success, and best of luck implementing it. Nimur (talk) 16:04, 19 February 2011 (UTC)
(EC) I think you're missing my point. What I'm saying is that whether it's an $80k job or a $100, no one is going to take up an offer without some evidence the person behind it is serious. People will be more concerned when it comes to an $80k job offer but in both cases they'll expect some evidence. Also from what I've seen no one has agreed your job is super fast. And I suspect many don't agree that doing the work you propose is guaranteed to lead to an $80k job offer. I would note no one ever suggested the RD as a good place to look for someone to do this for you, in fact most people suggested other sites. What we have suggested is 1) We may be able to tell you whether your idea is really as easy as you suggest (personally I don't think it is but I don't code so...) 2) Given the way you've approached things here, it's not surprising if you're having problems getting help elsewhere. As a final suggestion (i.e. I won't respond further), I would suggest you look for a freelancer site which allows you to specify what language you want and also that you avoid telling people they'll be guaranteed a $80k job from doing your work (since most people are likely to laugh at the idea then ignore your proposal). If you don't get any offers, perhaps it's because what you want isn't as easy as you suggest so your money isn't really worth it? Nil Einne (talk) 16:14, 19 February 2011 (UTC)

Thanks for your feedback. My original question is where to find someone who is interested in making this, freely and open-source, for everybody, just because it is interesting. I would just be one of their users. This is in no way a commercial enterprise or relationship. This is not some get-rich-quick scheme or something. It's get-not-bored-for-a-very-short-period-of-time scheme. Like, get not bored for 20 minutes type deal. Let me give you my thoughts: - "This project will take much longer than 20 minutes. Even somebody with specific experience in a particular bittorrent source code would not be able to correctly make the modifications you suggest in 20 minutes."
The modifications I suggest by definition are not "correct", they are a hack. That's because the bittorrent protocol can have extensions, and I'm not suggesting we use one, just butcher the protocol so that it isn't bittorrent anymore. Further, almost all of the action is out of the executable, it is just a couple of lines of script you execute, the scripts just call gpg or something, which is totally stand-alone. Look, check out the old CLI (command line interface) code for Transmission: I can find the places to change code myself in a couple of minutes. Really, this is not that much work.
- "You are suggesting a modification to an existing standardized network-application protocol. How will that work? Who will connect to your (now-incompatible) bittorrent client? Your software is not standalone - to succeed, it will require aggressive marketing to acquire network effect critical mass; otherwise, you simply have created an incompatible bittorrent client." Sorry, you misunderstand. I'm not trying to "succeed". bittorrent2 has nothing to do with bittorrent - it's totally incompatible. Any bittorrent user would NEVER be able to finish downloading from bittorrent2, since it will never accept the garbage data that bittorrent2 users pass around for the final chunk. (they accept it because it is signed properly). So, it has really nothing to do with bittorrent. You're mistakenly thinking that this thing requires some kind of adoption or something. It doesn't. It's a one-off project that can be done in 20 minutes. For example, you don't even have to change the public and private key (for example, include either in the original .torrent2 file, etc). It's a one-off hack that's interetsing but takes 20 minutes.
- "Are you sure you thoroughly understand the way bittorrent protocol works"
- "Are you sure you understand the risks of accepting binary data from a peer-to-peer network that explicitly failed an identity-verification checksum"
It's not executable data, as you're implying. It's like this: the person who signed it is the person who made the .torrent2 The only difference is that instead of including the data and checksuming it on the spot, you include data from the future and instead of checksuming it, use signing to verify it later. If I don't trust the torrent file that is going to get signed by the creator of the torrent2 later, why would I trust it if it were in a traditional torrent, checksummed then? It doesn't make sense. Besides, there's no trust involved. It's not an executable file.
- "Do you realize that many Bittorrent sourcecode is free and open-source, and that you could make these experimental modifications yourself?"
Absolutely, but it sure as shit wouldn't take me 20 minutes, unlike a Unix hacker, an 31337 one. The reason I'm asking you guys to do is cuz' you can do it super-fast, and I can't. No, the modifications are in no way user except to me and others. All of whom would install the bittorrent2 client you fork from a bittorrent client, since it's the only one right now that supports the bittorrent2 protocol. Even if nobody else ever downloads it, it's still there on your portfolio. You can even publish a specification for it, if you really wanted. At the moment this is a 20-minute hack that I'm saying is worth it in terms of your portfolio. If you judge that sinking an additional 10 hours into a spec and more options (like creating torrents that include a new public key somewhere, so that it's not "hard coded" into the implementation) you can always do it. If not, you can always drop it. Really, we're talking about twenty minutes of YOUR time, and we've been arguing about it for hours. That makes sense for me, since I couldn't have done it in that time, but it doesn't make sense for you, since you could have. (talk) 16:23, 19 February 2011 (UTC)

I guess people here don't like my attitude or suggestion. I personally thought that the offer of laying out exactly what you need to do as a programmer to have this interesting project done and on your portfolio was pretty cool, a very fair offer. If I were a programmer, I would jump on this chance, just as I have jumped on similar chances in my own field. But, I understand that you all disagree with me, and think that I'm trying to take advantage of you through my approach and attitude. So we'll just have to disagree. (talk) 16:27, 19 February 2011 (UTC)
Please understand, some of us are "unix hackers" and are able to evaluate the technical merits of your suggestion. If you are not a programmer, as you readily admit, you aren't qualified to evaluate the merits of this programming project. Different opinions will surely exist, but it is my solid opinion (founded on years of Unix programming experience with open-source and commercial software) that your suggestions are (1) much more technically difficult than you realize; (2) modifying or "forking" the bittorrent protocol is unlikely to work as a "tracker replacement" technology, as you intend; and (3) your monetary incentives are both small, unguaranteed, and irrelevant to the task of extending BitTorrent. If you are sure your idea will work, here are some suggestions: create a reference draft specification; contact people who are alread developers of open-source bittorrent software (in this era of "social networking", this is trivial); establish yourself and your idea.
With due respect, good programmers are few and far between. Non-programmer "idea-guys" are all too common; they regularly solicit good programmers with "awesome new things," and often tout their ideas as though they've already struck upon the next big gold-mine. Unfortunately, these usually are not fantastic and lucrative ideas - and it's not entirely the fault of the idea-guy. As a non-programmer, you are not qualified to evaluate the technical merits and the challenges of the "brilliant idea" you are suggesting. In lieu of technical advice or BitTorrent protocol details, I suggest you read this book: Crossing the Chasm - Marketing and Selling High-Tech Products to Mainstream Customers - it might be right up your alley, and should help you to appreciate some of the complexities of trying to be an "idea guy" for technology that you aren't really the expert in. Nimur (talk) 16:44, 19 February 2011 (UTC)
Thank you for your detailed critique of my approach. I have taken much away from it, and have marked this subject resolved. There is one misunderstanding all around: I was suggesting a really small hack, not a real specification with real-world acceptance. Truth be told, I can program, and I have programmed. I guess I just need to start coding (I have a Debian machine running in a VM, but have never compiled anything on it.)
But I'm bitter. My lesson is "It takes a lot longer to convince a Unix hacker to become reasonable, than it takes for a reasonable man to become a Unix hacker." (talk) 17:13, 19 February 2011 (UTC) (talk) 17:07, 19 February 2011 (UTC)

After you become a unix hacker, your ideas will only seem reasonable to other unix hackers : ) Nimur (talk) 17:22, 19 February 2011 (UTC)
  • My comments: 1) The idea is actually kind of interesting, though if it's worth pursuing at all, I'd give some thought to "doing it right" in the form of some kind of subscription extension to BT trackers rather than this kludge of leaving unfinished downloads for days at a time. Or, using an out-of-band mechanism like a RSS feed may simply make more sense. 2) The 20 minute development estimate is ludicrous; it's possible that someone already familiar with a specific BT implementation and who already had a working build environment for it (this basically means a developer of that specific client) could add and test a patch in a few hours, but a random good programmer who had to download all the code, get it to build at all, and figure out enough about BT to debug the patch, would take a lot longer. 3) I'm no BT expert (I do use it sometimes, e.g. for Linux distros) but my understanding is that BT propagates file blocks between clients in an opportunistic way, i.e. the clients can receive the blocks in any order at all, and they rearrange the blocks into the original order only after all the blocks are received. So when a client receives that "launch bt2" block, it doesn't necessarily have all the other blocks, which means the whole scheme can fail. Even if I saw the patched client successfully download a test file and start the new protocol, I wouldn't be convinced that the patch was reliable until I saw it succeed multiple times on multi-GB files in pieces propagated through dozens of clients that connected and disconnected from the tracker at random. That sort of testing would be quite time-consuming in its own right, separately from development. (Alternatively, maybe I could be convinced through a well-grounded and detailed understanding of BT and the client implementation, but that too would take much longer than 20 minutes to acquire).

    So, overall, I'm not convinced the idea is workable, and even if it is, I'm not convinced it's a sane technical approach, and even if it is, there are various deployment and usability obstacles that others have already mentioned further up (plus others, like how are you going to distribute the public keys?). The OP also seriously underestimates the amount of work it would take to make such a thing. I'd suggest going to some BT developer forum or IRC channel and discussing the subscription idea in more high-level terms, with a considerably different attitude than the one shown here. I can tell you as a programmer sometimes involved in hiring other programmers, that if I saw a hack like that in someone's "portfolio", it would make me less likely rather than more likely to want to hire them. I'd be more impressed by a well-designed and documented extension that made actual sense. (talk) 22:02, 19 February 2011 (UTC)

why would you need the other blocks? These are like, episodes, the idea is that you're interested in starting to download the next episode as well, when it becomes created. It doesn't matter if you haven't finished downloading the last one.... I think if you understand my distinction between the bittorrent and bittorrent2 layers, you'll see that the only way for this scheme to fail is if bittorrent itself fails. it just piggybacks on the scheme, there's nothing special in it. there's no distribution of public or private keys, because this is a one-time hack. What is the salary range of the programmers you sometimes hire, where you would be impressed by a well-designed and documented extension that made actual sense? p.s. the insanity charge is uncontested. —Preceding unsigned comment added by (talk) 00:03, 20 February 2011 (UTC)
I see, yeah, I guess you can have multiple active downloads. But my understanding is you can't actually use the file until BT has decided that the download is finished so it can reshuffle the blocks, so you still have that to deal with. Tell you what, you might enjoy trying to implement the patch yourself. For prototyping / proof of concept, you might try modifying the original headless BT client written in Python, instead of some graphical C++ one that is sure to be a lot more complicated. Also, if it's just for youself and some trusted friends, I don't see much need to mess with GPG. Just include an HMAC authentication tag in the last block with the BT2 info, with a shared secret key that you give to your friends. Python includes an hmac module so it's easy to generate the tag. (talk) 10:06, 20 February 2011 (UTC)
That's a really easy problem to solve if I'm scalpelling the code. Simply, if I have all but the last piece, I jump to the function to put it all together and write the file out (treating the payload chunks as zeros), even though it's not yet time to exit (perhaps making the appropriate change to that function). This is a very easy problem to solve. How much do the programmers who you mention you sometimes hire make? (range). I mean, is it <$30k, $30-$35, $36-40, 41-45, 46-50, 51-55, 56-60, 61-65, 66-70, 71-75, 76-80, 81-85, 86-90, 91-95, 96-100, 101-110, 111-120, 121-130, 131-140, 141-150, 150+? (talk) —Preceding undated comment added 11:22, 20 February 2011 (UTC).
If the problem is so easy to solve I don't see why you are trying to get someone else to solve it for you. I'm not going to discuss programmer salary numbers but you usually negotiate a combination of salary and stock options, trading one against the other depending on your requirements and expectations and the type of company. Also I'm in a geographic region with quite a lot of inflation in both salaries and expenses, so 80k is pretty low for any serious developer in the for-profit sector here, but the rent on a crappy studio apartment with no off-street parking would get you a fairly nice house with a garage in other parts of the country. Nonprofits usually pay less, but can give intangible forms of satisfaction that you might prefer if you don't need the extra money. (talk) 12:32, 20 February 2011 (UTC)
In your geographical area, what is a programmer's salary that is more like "average" (instead of "pretty low") in the for-profit sector in your geographic area? You don't have to tell me what you guys pay, just more like an average in that geographic area... (talk) 17:21, 20 February 2011 (UTC)
Typing "salary survey programmer" into google will find you a lot of sites with that sort of data, probably better info than I could give you. I'm not entirely sure that this is an appropriate subject to discuss on RDC at all, but maybe it is, so if you want to ask such things maybe you should start a separate thread (it's completely off-topic from the BT thing). I will say that when I think of "average programmer" I imagine someone with a lowish-level role in a big group (see code monkey) while "serious developer" would probably be classified as a senior programmer or lead programmer in that kind of organization. (talk) 02:05, 21 February 2011 (UTC)
I skipped a fair amount of the above, so forgive me if I missed something. It sounds like you want to add a possibly-useful but relatively minor feature to a BitTorrent client? Is this such a killer feature that it justifies a fork of the project? Would such a fork be successful? The answer seems obvious. Why not just file your idea as an enhancement request at the client of your choice? --Sean 15:24, 22 February 2011 (UTC)

The use of Eq in Haskell[edit]

What is the purpose/function of Eq in Haskell (i.e. what restrictions does it place)? For example, what arguments could be passed to a function of type f :: [a] -> a but not to a function of type f :: Eq a => [a] -> a ? Widener (talk) 10:32, 19 February 2011 (UTC)

The restriction goes in the other direction: Eq is a type class, which means it's a subset of the class of all available types. If you're familiar with Java, Haskell type classes are like Java interfaces. Types that belong to the Eq type class support an equality comparison operation. There is a good Wikibook about Haskell (b:Haskell) that explains all this. (talk) 10:39, 19 February 2011 (UTC)
Oh, sorry, I mis-read your request for an example last night (too sleepy). The most obvious examples of types that don't support Eq are function types. Numeric types support Eq: you can test at runtime that 2+2==3+1. But functions don't support Eq: the compiler and runtime can't in general tell (e.g.) that (\x->(sin x)**2+(cos x)**2) and (\x->1.0) are the same function. So you could not pass the list [sin, cos, sqrt] to a function with your Eq constraint in its signature. Besides the wikibook I mentioned, you might also like . (talk) 22:16, 19 February 2011 (UTC)
Ah, I see. Thanks. Widener (talk) 03:18, 20 February 2011 (UTC)
Would this mean that f :: [a] -> a is a polymorphic function whereas f :: Eq a => [a] -> a is not? (Although I guess f :: Eq a => [a] -> a would still be an overloaded function) Widener (talk) 03:29, 20 February 2011 (UTC)
The case without Eq is called parametric polymorphism, which means that the function is not allowed to change its behavior based on the actual type of a, and the case with Eq is called ad-hoc polymorphism. By the way, you can make any type an instance of Eq by declaring your own instance for it. Instances are supposed to obey the mathematical axioms of equality, but you could write instance Eq (a -> b) where x == y = True; that obeys all of the axioms.
I do not think that instance Eq (a -> b) where x == y = True obeys the axioms for equality. By referential transparency, x==y is supposed to mean that f x == f y for any f. If you let g f = f 1, then sin==sqrt should mean g sin == g sqrt, which is wrong since sin 1 != sqrt 1. Eq is supposed to mean actual equality and not just an arbitrary equivalence relation, as far as I know. To Widener: once your Haskell knowledge has advanced a bit more, the Typeclassopedia (find on google) is an excellent guide/reference to Haskell type classes. But it's a bit too hairy for beginners. (talk) 02:49, 21 February 2011 (UTC)
I would be very careful with the statement that "Haskell type classes are like Java interfaces". The most important difference is that the choice of which implementation to use for an interface is always up to the creator of the instance in Java, but the choice of which implementation of a typeclass to use is always up the the caller in Haskell. For example, integer literals have the type Num a => a; this means that they will produce on demand a value of any type that belongs to the Num type class. It does not mean that they represent a value of some particular type belonging to that type class. The closest analogue of Haskell type classes that I know of is C++ concepts. Unfortunately, concepts were dropped from the standard, so they aren't very useful as an example. -- BenRG (talk) 04:50, 20 February 2011 (UTC)

C++ concepts were certainly inspired by Haskell type classes, so might not be so useful as examples. I agree the analogy with Java interfaces isn't perfect. The main point is that interfaces and type classes both give you a way to have the same operation supported on multiple types with separate implementations per type. I'm not sure what you mean about the choice of implementation being up to the caller. It's true that Haskell typeclasses are "open", which means you can declare a type to be an instance of a class anywhere in the program, if it isn't already one. But I'm pretty sure if you try to do it in more than one place, the compiler will complain. (talk) 07:05, 20 February 2011 (UTC)

What I mean is that generic functions with typeclass constraints are always specialized by the caller. For example, genericLength :: Integral a => [b] -> a can be specialized to the type [Char] -> Integer and called, in which case it must return an Integer, whereas an OOP function with a return type of Integral could return a type of its choice, as long as it implemented Integral. -- BenRG (talk) 08:31, 21 February 2011 (UTC)
Oh ok, yes, that is a noteworthy difference. The comparison between type classes and interfaces is just an analogy, not saying they are the same thing. (talk) 17:29, 21 February 2011 (UTC)

Restrict access to one port[edit]


I have an area of my site which I only want to be accessed via a certain port that is rotated every week, for additional security. Is there any way that I can do this using a file on my server, say htaccess or something of that sort?-- (talk) 11:25, 19 February 2011 (UTC)

Which operating system and program are you seeking to rotate? If the O/S is a *NIX, and the program is server in its own right (not cgi-bin), then you could write a cron job that updates the program's config file with the new port, and then uses /etc/init.d/<servername> restart. If its cgi-bin (.htaccess controls the Apache web server, then do the same, but for Apache.
BTW I'm not sure what this gives you, as programs like nmap will probe the server's machine to find all active servers on it, although this is detectable. Programs like pcap/wireshark can also detect when then server is being used, although with modern wired networks the TCP packets aren't sent to the pcap machine. CS Miller (talk) 11:53, 19 February 2011 (UTC)
Nevermind, I figured out that there would have been a problem anyway because of my server's firewall. Thanks anyway.-- (talk) 12:01, 19 February 2011 (UTC)

I want to run old PC games under Windows 7[edit]

Hi, I am posting this on here and the Entertainment helpdesk as it seems to span both - forgive me if that breaks any rules.

I have some old PC games that I used to play under Win95 and Win XP but Win 7 doesn't seem to recognise them - I am now running a 64 bit set-up which probably doesn't help.

My question is, can anyone tell me if I can still buy some of the old games (Monkey Island series; Disc World series; Kyrandia; Gabriel Knight; etc.) but written to run on a modern PC under Win 7? If so, where can I get them?

Hoping you can help. Gurumaister (talk) 11:37, 19 February 2011 (UTC)

You shouldn't really cross-post; I've asked for all replies to come here. If you've still got a Win95/WinXP install disk around, you either make you PC a dual-boot machine, or install a virtual PC on your Win7 install, and run WinXP/Win95 inside it. The latter might be preferable, as the virtual PC tends to emulate older hardware, if Win95 doesn't support your new hardware. CS Miller (talk) 11:57, 19 February 2011 (UTC)
Sure, but before you do anything so drastic, try running the game in emulation mode to see if it works (some do, some do with hiccups, some don't), try out emulators of old systems (like DOSbox) and do a search on Source Forge - SF is basically for people to post their opensource games, but there are many older games there with a cult following and an expired copyright license that people rewrite in opensource code to make them run on newer OSs. TomorrowTime (talk) 12:20, 19 February 2011 (UTC)
Quite a number of those games will work with ScummVM. Specifically the 2D MI, Kyrandia and DiscWorld games. The 2D GK will work but not very well [1]. Note that the 2D Monkey Island games are also available as a remake special edition with high res artwork, see the respective articles. Nil Einne (talk) 12:54, 19 February 2011 (UTC)
I second the idea of using ScummVM for those that are supported by it, and for using, say, VirtualBox with Windows XP on it for the others. --Mr.98 (talk) 13:46, 19 February 2011 (UTC)
Good Old Games might be worth a look too - they take old games, make them compatible with new OS's and sell them as DRM free downloads. Exxolon (talk) 17:14, 19 February 2011 (UTC)
Some old games, like the first X-COM, are sold over the Steam network, and someone took the time to make them work on modern machines. Not sure whether it's the original publisher or a volunteer or someone at Valve. Comet Tuttle (talk) 23:57, 20 February 2011 (UTC)
I don't know about X-COM, but all the old DOS games that I've bought off Steam (Commander Keen, Doom, Hexen, Wolfenstein 3D, etc.) aren't conversions and they're merely bundled with DOSBox as mentioned above. When you run the game from the Steam library it transparently launches DOSBox and then the game.  ZX81  talk 01:10, 21 February 2011 (UTC)
First, you should try to run 'em in compatibility mode. You can do that by right clicking the executable file, select properties, go to Compatibility tab and select one. If it does not work, then you must have a virtual machine to run them. Do not use Windows Virtual PC -- its performance, especialy graphics performance, is terribly slow. I cannot even emulate NES on Windows XP Mode (30 → 40 frames on a i3 530). Use VMware Player instead, because it support graphics hardware accelerator, which is vital to your games. IIRC, you must install VMware Tools after install a virtual machine on VMware Player/Workstation to enable graphics hardware accelerator. -- Livy the pixie (talk) 04:42, 23 February 2011 (UTC)

Trying to save with Firefox[edit]

I get this message:

"name_of_the_file/ga.js could not be saved, because the source file could not be read.

Try again later, or contact the server administrator." (talk) 14:26, 19 February 2011 (UTC)

I've removed my earlier reply because the answer below is so much better! Dbfirs 22:37, 20 February 2011 (UTC)
You are using adblock and it is blocking google analytics. This is a good thing, so don't worry. (talk) 10:47, 20 February 2011 (UTC)

Lock File in folder[edit]

can i lock a file in a folder in sd card with a software which can run directly with that software without unlocking? I want to do this silently with cmd command. —Preceding unsigned comment added by (talk) 14:29, 19 February 2011 (UTC)

What do you mean by "lock"? Do you intend to encrypt the file, or to set it as a read-only file? Nimur (talk) 16:14, 19 February 2011 (UTC)



If two usb storage devices are connected to a computer via a usb hub and you transfer a file from one device to the other, does the data travel via 1st device -> hub -> computer -> hub -> 2nd device, or 1st device -> hub -> second device? (talk) 16:42, 19 February 2011 (UTC)

The information has to go through the computer. All of the atomic read and write operations are carried out by the computer's operating system. Looie496 (talk) 19:39, 19 February 2011 (UTC)
The reason for this is that USB is set up as an asymmetric host/device (somewhat analogous to client–server) system, rather than a peer-to-peer system. On any single bus, there's only one "host" device that controls all the communication (unless you have some sort of bridge device connecting two buses). -- (talk) 19:54, 19 February 2011 (UTC)

Thanks (talk) 20:25, 19 February 2011 (UTC)

Overheating graphics card?[edit]

A friend of mine has problems running some games (Left 4 Dead 2 specifically) so I asked him to download Speccy to get a quick list of all of his specifications, so we could find out what the problem was. This revealed that his graphics card was running at 95 degrees C. Neither of us know a lot about computers, so:

  1. I assume this is too I right?
  2. Could this be the cause of the lag? The games run but he's lucky to get 10 frames per second.
  3. Is there an easy way to cool this down?

The only thing that's been done to the computer is installing a case fan. The card is an nVidia GeForce 9100. Vimescarrot (talk) 21:31, 19 February 2011 (UTC)

This is not necessarily "too hot." Nvidia cards are notorious for running very hot. 95 celsius is what I consider very hot - but many users regularly report breaking upwards of 100 celsius without problems; the "safe shutdown threshold" on a mobile Nvidia GPU can be 130 celsius in some cases. You can check your graphics driver configuration to see what the default "safety shutdown" temperature was set to. Laptop systems can't provide the same airflow and ambient case cooling that a desktop system can. Finally, the low-frame-rate might not be an "error" - it may just be the maximum performance your system can deliver. The 9100 is not a very powerful GPU - it's at the lowest-end of the mobile editions of the three-year-old GeForce 9 Series (in fact, it used a "stepper GPU" from the 8 series). In general, cooling a modern GPU core reduces bit error-rate; the result is fewer graphical-glitches and fewer required re-transmissions of data from video RAM, resulting in higher performance. Research on GPU soft error rates have shown a correlation to environmental and temperature effects: the G80, used in your Nvidia 9100M, was known to suffer from high soft-error rate. In "video game mode", the errors are usually tolerable or recoverable, but can certainly affect performance and stability. I am not sure if the 9100 system or its software drivers were able to detect and recover from soft-errors. Nimur (talk) 22:11, 19 February 2011 (UTC)
When the temperature rises high (that's pretty high, but shouldn't be fatally so) the first thing that happens is the driver notices and increases the fan speed (a bug in nVidia's driver last year set this wrong, causing GPUs to overheat when the fans didn't step up as they should). If the fan is at max and the GPU is still too hot, the driver should then throttle down the GPU's operating frequency (this temperature is reported to be between 95 and 105 - it seems to vary by GPU, and I don't think nVidia officially advertise what it is). Being in the first condition should make the fan noticeably louder; in the second condition performance will indeed suffer. If this underclocking were occurring, you'd expect to see the frame rate okay for a few minutes of starting the game (from a period of idling at the desktop) and then suffer as the GPU gets too hot and is underclocked. I'd suggest:
  • make sure the nvidia driver is the latest, as it controls this kind of stuff
  • run the game at the lowest settings (resolution, detail, AA, etc.) you can
  • make sure the GPU fan is clean and unobstructed (by dirt, cables rubbing against it) and make sure the air path into and out of your computer is clear.
-- Finlay McWalterTalk 22:29, 19 February 2011 (UTC)
Thank you both for the help. I think we've got a fair idea of where to go from here, cheers. (No doubt I'll be back in a few weeks when the next problem crops up ;) ) Vimescarrot (talk) 19:17, 20 February 2011 (UTC)