Take the 2-minute tour ×
Software Recommendations Stack Exchange is a question and answer site for people seeking specific software recommendations. It's 100% free, no registration required.

I work from both at home and at school with my friends. At school, all ports except port 80 and port 443 (HTTP/HTTPS) are blocked, so it's hard to set up a collaborative "workspace".

I'm looking for a program that will create a virtual folder on our desktop (like Groove) which we can put our project in, and when we write our file to the disk (with the text editor or IDE of our choice), the changes will automatically be disseminated across all of the computers.

It should be portable (no admin rights required), and it should preferably be free.

Has this type of program even been made yet?

Here's what I've tried so far:

  • Google Drive/Dropbox. The interface is too clumsy, and I am not allowed to install the client because admin permission is required. Plus, you have to announce to everyone else that you are uploading your copy of the project, and then everyone else has to stop what they are doing and download the project again. It's annoying and painful.
  • GitHub. While it's a pretty viable option, my friends know little on how to use Git, and I fear that they will get locked in a merge conflict (which they have before), or they will force push and lose all of the history.
  • Saros for Eclipse. Requires Jabber ports to be open for outgoing connections, which they're not. I've had to run Openfire (Jabber server) locally in order to use this, but I forgot to back up the configuration, so Openfire was lost forever when the IT management decided to upgrade from Windows XP to Windows 7.
  • NppNetNote for Notepad++. Perfect, but only supports one-to-one collaboration. :(
  • SharePoint Workspace. This looks pretty cool, but I'm not quite sure how to invite other members. In addition, this is only installed for the newer thin client computers.
  • Etherpad. You can't use your own IDE, meaning that you have to copy/paste your version of a file to the pad. Plus, it's only for collaborating in a single file.
  • Floobits. My friend tried to use this on Sublime Text, but it requires you to connect to a non-HTTP port (blocked).

Addendum: Ports aren't that much of a problem since I can simply host an SSH daemon on port 443 on my home server and tunnel anything I need through it.

share|improve this question
1  
Most coders would rather not have immediate merging of all changes. That exposes you to anyone's errors at any time. Better to sync about once a day. –  Jeff-Inventor ChromeOS Aug 10 at 19:14
    
@Jeff-InventorChromeOS If most development is focused around a single file, and we need that file in order to get everything else to work, then we would all develop on a single revision in different ways, causing a conflict. It would take longer to piece 3 different revisions together into one than to just collaborate live and know what each other is doing to the code as it happens. –  oldmud0 Aug 10 at 19:23
2  
@oldmud0 In that case, maybe you are approaching the development from the wrong angle. Is it possible to break the functionality contained in that one file into multiple distinct segments? Is the file large? Is it just a configuration file? What language/IDE are you using? –  Tyzoid Aug 10 at 19:34
1  
@oldmud0 Do each of the developers on the team have clear goals and responsibilities? I.e. is one responsible for rendering, one responsible for physics, one for the UI, etc. I think if you do that, you'll have less of everyone stepping on each other's toes. –  Tyzoid Aug 10 at 19:41
1  
What should happen when two users are simultaneously editing the same file? –  unor Aug 10 at 19:54

6 Answers 6

Codenvy is a pure webapp IDE which might fit your requirements for real-time collaboration. It looks like a fairly complete IDE that runs entirely in Chrome.

According to the publisher:

The environment is collaborative and workspaces can be screen shared like WebEx, collaborative like Google Docs, and forked like GitHub.

(It also integrates with BitBucket.)

share|improve this answer

Have you considered Bitbucket?

You mentioned in your question that you tried Github, but I wanted to bring to your attention another alternative.

Bitbucket, unlike Github, gives unlimited free private repositories, and has the ability to disable force pushes.

Bitbucket has support for multiple version control systems, but I highly recommend your friends take a second look at git. While it can be somewhat difficult at times, git really does a better job than anything else I've tried.

share|improve this answer
    
I'll take a second look at Git. It's just a matter of learning. Does Bitbucket have some "convenience" buttons that perform actions without needing to have a console ready? (GitHub has its own client, and it has buttons for making quick pull requests or making/deleting/editing a single file.) –  oldmud0 Aug 10 at 19:20
    
The software should be universal - since it relies on the protocol rather than the host. That said, there's plenty of open-source git clients available for all types of platforms. git-scm.com/downloads/guis has a nice (but not comprehensive) list. –  Tyzoid Aug 10 at 19:29
    
For both Github and Bitbucket (or any other provider), you can use Atlassian SourceTree to manage your gitting. I find it very easy to use, and has convenience buttons for almost every action. –  Kroltan Aug 11 at 0:45

I think you should reconsider the idea of several people live-editing a single code file. That may be great when teaching or pair-programming (ie, working on the same thing), but not for working on different things. You will step on each others' toes to a terrible degree and not be able to get any work done. At essence, you will have the same code conflicts as when doing a "merge" in a VCS, but you will be having them constantly. You will hardly be able to compile the program at any point in time, much less test your own work, because of other people's half-finished code. You'll also find it more difficult to benefit from IDE hints, error squiggles, code completion, etc.

Parallel development is a lot like parallel computation. Performance doesn't scale linearly. Extending the analogy, getting good parallel performance comes from minimizing synchronization. The best speed-up is from "embarrassingly parallel" problems, where each node does completely independent work. The worst speed-up is from algorithms that, at each step, require data from all the other nodes.

The VCS methodology is a good approach. Each person checks out a version of the code that compiles and, more or less, works. They make changes without having anyone else interfering. As often as optimal (from once a week to once an hour, depending on how fast the code changes), they synchronize by committing code and making a new version of the codebase that compiles and works. Others pull that change, perhaps make necessary adjustments, and continue working. Remember, synchronization is necessary regardless, but keeping it to a minimum lets people focus on useful work.

Git solves VCS goals very well. Pulling/pushing/merging work better than in other VCSs. It has a steep learning curve and generally poor GUIs (on Windows), but it is a very useful tool to learn. You mention doing a force push and erasing history. You are correct that this is very undesirable, which is why force pushing should be prohibited on the server via config switch.

However, the problem of how to develop features that depend on each-other remains. It doesn't disappear or even diminish if you live-edit. One approach is to make use of mock objects. These are fake objects that give back canned responses (instead of performing real logic). They are used in the context of unit testing, where you test code you've written against a particular use case. Writing a unit test that uses mocks lets you test that use case, and hence your code, without having the dependent pieces written. An alternative approach is to simply write the code without any testing at all, and then test once the real code becomes available. However, doing testing and fixing bugs at the end is more difficult, especially for new programmers (who commit many small, silly mistakes that are devilish for them to later resolve). But, writing mocks and unit tests involves its own time costs. (These are more than offset long-term because they help change the code without new bugs being introduced, but short-term they may not be a productivity win.) Either way, consider how best to break up work.

share|improve this answer
    
Allow me to remind you that we don't get paid; we aren't a startup company. We don't work for 4 hours straight. We don't have time to make our program some enterprise-quality application. Yes, you are right, we should make unit tests. But we are not 100% wrong. We are taking the right approach and asking others for what the best way to collaborate in real-time is. –  oldmud0 Aug 10 at 23:47
2  
Sorry, it isn't about making it enterprise-quality. You say yourself "development can't be done in parallel." If development, fundamentally, can't happen in parallel, there's no sense in looking for a program that will let you edit a file simultaneously, is there? I tried to explain a way that lets development happen in parallel (using mocks and artifical tests instead of hitting Run). –  Aleksandr Dubinsky Aug 10 at 23:55
    
To clarify, I meant that development can't be done in parallel with the system we have currently. Currently, we're not doing any development because we have not seen each other lately. (We are not even college students yet.) I will spare you the rant that I was just about to deliver. –  oldmud0 Aug 10 at 23:58
2  
I downvoted because this is a software recommendation site, not a philosophy debating one. Your point might be the most valid ever, but this really isn't the place for it. –  Seth Aug 11 at 17:47
1  
I'm in agreement with this answer and would recommend reading weblogs.asp.net/alex_papadimoulis/408925. Sometimes telling a user their question is fundamentally flawed is more valuable than giving them the answer they want. –  DanteTheEgregore Aug 13 at 15:42

To answer the question "I'm looking for a program that will create a virtual folder," I suggest Bittorrent Sync as a good cloud-free Dropbox-style folder sync app. It comes with an installer, but I believe it'll work portably as well. AFAIK, it should automatically relay over HTTP to get around your firewall.

share|improve this answer

The other's responses are very good for showing why you might not want to do it but if you are set on collaborating(which I do think has some benefits): have you tried c9.io. That seems to be exactly what you are looking for. I have done a good amount of work with this IDE, & I think this is probably the best online IDE could . And give almost a full terminal support which is very handy for all sorts of server work, it gives an almost a kind of identical workspace to Sublis for downloading or installing new Python or node packages it is very slow packages it is very slow. overall, this seems like a very good option. Especially for collaboration if you do want to go through with collaboration as others note it might not be the best option, this seems to be perfect, who as close as possible.

share|improve this answer
    
Yes; this has SSH, which looks pretty useful. The free version looks sort of limited, but I'll make sure to ask my friends to give it a try. –  oldmud0 Aug 12 at 2:37
    
As an experiment, I made a team of 8 people use c9.io to develop an HTML+JQuery website. While it was working great when people were working on different files, it often corrupted files edited by several people at the same time. That was 1 year ago, they might have improved. –  Nicolas Raoul Aug 14 at 10:29
    
@JZL003 have you tried this tool yourself? What are your experiences with it? Currently its just a little more than "look at this link" which is too less for a recommendation. –  Angelo Neuschitzer Aug 15 at 13:46

I've started using ownCloud a week ago, and was surprised it could even be used in your case when extended with some of the "ownCloud apps" available. As you've got ports 80 and 443 available, you could host an installation even on some external machine (ownCloud also offers hosting). Desktop clients are available as well for multiple platforms (not sure whether they need "admin permission" to install, as I've not used them yet).

Though folders wouldn't be on the local machines desktop (unless you decide to work locally and synchronize directories via WebDAV, which would be an option as well), it could pretty nice match your requirements:

ownCloud includes an editor supporting code-folding, which can be extended in multiple ways (I e.g. use it with the Markdown addon, so the editor has a real-time preview even). There's support for OpenDocument Text even, and more. You can share documents in a group, so collaboration is possible. So basically, work could be done "online".

Another plus is ownCloud versioning your documents. So if something gets messed up, you can revert to one of the previous versions.

As you've mentioned EtherPad: There's even an EtherPad ownCloud app available, integrating with that service.

I've got to admit not having used ownCloud yet in a collaborative way, so I cannot say how well that works with multiple users editing the same file at the same time – but I'd say it's at least worth a look.

share|improve this answer
    
Well, in this case I'm better off setting up an SSH tunnel and hosting SSH on my home server on port 443, so then all my friends can work on a shared drive on my server. –  oldmud0 Aug 11 at 12:54

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.