EDIT: A better way to state the goal: I want to take advantage of the underlying structure of a computer program to inform the diff/merge. The first step just happens to be diffing ASTs, but I go beyond this.
I already have some neat features--for example, I can detect moves fairly robustly. That is, if you move a function, I can see that as a single action even if you modify the function a little bit when moving it (e.g. rename the parameters). Also, there is already more information for resolving conflicts in a three-way merge.
Unfortuntely, the performance is currently horrible, which makes it completely unusable. Once I fix that (I just need to memoize the diff function properly) and fiddle around with some of the algorithms a bit, I'll have something interesting (I hope :)). After that, I'll probably add a UI.
Also, I should add that I'm not the only person with this idea. A lot of the early design and features are based on YDiff, although I used no code from there. The merging and some of the other stuff I'm working on right now is more original though (I think).
I think structural version control can open lots of possibilities that are not accessible by text-base version control systems. I'm not really focused on this area, but I'd be happen to to see more people getting interested in this and work on it.
As for the performance of diffing, I think the bottleneck is with detection of moving. That's something that text-based diff doesn't do at all, so not a big drawback. But with structural editors, those moves can be instantly detected and logically merged by the editors. That's too far into the future though. But I think structural diffing without move detection can be of good use already.
Another direction that's possible to detecting moving more efficiently is to use hashing, the same trick used to eliminate redundant expressions in a compiler.
I mean to say code version control really is text version control. The whole idea is to track the changes, the cause for the change and who changed with some history. Added with this ability to do other code release related changes like revert, merge etc.
What is the use of semantic version control?
I don't have any features beyond that right now--it does not actually manage different versions itself right now. Once I have the client finished, you will be able to use it along with a normal VCS like Git.
However, there are certain advantages to using an approach like this to manage commits as well as diffs and merges. For example, given the information I'm gathering, you would be able to automatically mark commits that only changed comments but not actual code. Additionally, you would be able to perform some fairly sophisticated queries on history--for example, you would be able to track a function across renames or just list all the names it ever had, which would be useful.
This is all possible, but writing a complete version control system is outside the scope of this side project. Additionally, it would be much easier to get users if this tool just augmented their existing workflow (e.g. Git) rather than trying to replace it altogether.
Hopefully this gives you a good idea of the sort of things I want to do. I have some other ideas as well, but some of them are probably too difficult to implement. I have to admit that even the relatively simple coffee I have so far turned out to be much more difficult to write than I exit expected.
Your question is actually very useful--it reminds me that I need to come up with a good elevator pitch for the system. I'll worry about it when I actually have a working prototype rather than a loose collection of slow functions :-).
The Eclipse IDE provides semantic diffs on top of version control when viewing specific commits (pending or already committed) but this is obviously not part of the underlying version control system and is limited.
I think your nomenclature's wrong, though. If you are comparing via the AST, it's lexical version control.
However, on your second paragraph:
> That is, if you move a function, I can see that as a single action even if you modify the function a little bit when moving it
That already seems a bit more semantic than lexical.
I'm also planning to add more semantic features. In the short-term, I'd like to detect other simple refactorings (particularly renamed variables). In the long run, I might even add very language-specific features (like trying to use type information to help with merging).
I'm still hacking away and haven't got very far whilst I'm getting my head around the classifier. One other problem I've noticed is keeping track of ownership. One solution I have in mind is that there is no ownership: when it's modified it generates a new link to share with. It might be good for very simple code collaboration - I've tried doing this with Pastebin over Facebook chat and this should make the process a whole lot smoother.
I also need to think about how training will work. I envisioned it so that the user can train it i.e if it guesses wrong, the user would correct it by selecting the proper language and the program will learn for the future. I'd be putting a lot of faith in potential future users but I'm not expecting it to be big or anything, maybe just something me and my friends can share and work on code friction-free (some don't have GitHub/BitBucket/etc accounts, one doesn't like CAPTCHAs at all).
I'm currently going off 100% self-education here too so I'm having to get to grips with some other maths stuff like some symbols (such as | means conditional probability and _not_ to be confused logical OR), so if the project falls flat on its face at least I learned something from it :)
Thanks for your input :)
Thanks for showing me this. Much appreciated.
I'm using it on http://programmingnotepad.com/ and it's a pretty flawless execution.
According to the data, there are 74 asteroids worth over $10 trillion.
I actually found about you guys on Reddit :)
It's a pretty standard Benjamin Graham valuation method.
I guess the idea is that automated systems are great in detecting hardware failure, but they lack the analytical skills your people have. "Crap we marked everything 80% off, instead of just one item" is a hard problem to automate around.
Only $10 a month for unlimited supporters (30 day trial). Keeping it simple for now as I drum up interest. Would love it if you guys would check it out.
I've also used this as a proxy for automated services like Pingdom. It texts your hotline, and Mucho Support blasts your entire team, not just one phone number.
You can see the widget on my site http://betapunch.com. The widget is the little punch icon in the right corner of the page. It's not great as far as design goes, but that's why I am working on the 2nd variation of the widget I will be launching in a couple days.
Here's what it will look like: http://i.imgur.com/iBS7C.png.
I am trying to get as many people to grab the code and put it on their startup websites so I can make sure display and functionality are all in order in various different browsers.
So if you have a moment and want to give it a shot for your site that would be great! You can remove it whenever you'd like, I just want to make sure it does what it's supposed to. :-)
Video recorded feedback has been proven to be much better than text based feedback. Why write out a problem and have something get lost in translation when you can show them and talk them through it?
Right now I'm working on a seamless way to encrypt and decrypt notes in the browser. This way only the encrypted version of a user's note is on the server.
I plan to add a variety of page-browsing tools to help you find that page quickly (from color palettes to cover-flow-esq flow).
Take a look: http://weizhou.wordpress.com/2008/07/07/prototype/
I personally think some of the ideas there are amazing. I attempted to contact the intern on whether there was any work still being done in this area, but received no response. I really hope someone can create a browser extension, or perhaps that Mozilla might still consider implementing this.
I currently have an obsessively organized library of bookmarks, which still fails me at times.
Edit: Is there any way to organize bookmarks within folders on your website? I see it is not possible in the bookmarklet.
I really want this
The key difference lies in the architecture, it does not have a template engine, it uses plain html and this leads to massive simplification, here is some info on that http://docs.rainbowstore.org/index.php?title=Template_design....
This simplification allows building a store by just using the html mockup from the designer and also allowed me to build a visual designer for the frontend.
It also has sankey diagram traffic visualization for better understanding user patterns, mcommerce and all the other modern requirements for ecommerce.
Still not ready for prime time but I hope to launch in a few months.
And, it feels like the interests of firms aren't always tied to their clients. "Of course we have a guarantee...you're on the first page (of Ask.com)!"
So, I'm working on a quoting / billing structure where customer payments are dictated by the ranking improvements. Feedback so far is good, but of course, it's a challenge.
The main advantages over other similar systems are:
* open source: MIT license
* ease of use: everything is a widget, including layout/design aspects
* efficiency: virtual hosting for many sites on one server/VPS, Node.js, caching, reduced requests etc.
* easy to extend: just enter Github user and repo name and hit publish to add a plugin
Right now I have tools/widgets for adding text (with lots of Google fonts), adding images, email address collection, pages (tabs), editing code, installing plugins, managing files, and a button to play Groove Salad. I am planning on finishing the EtherCalc (collaborative spreadsheet) widget, the EtherPad widget, and then recording a video.
The video will demo all of those things above and also show me quickly coding (with the code editor) and publishing a widget for a live updating collaborative data list that takes advantage of the built-in NowJS and Mongolian Deadbeef libraries.
When that stuff is ready I will start trying to raise money on KickStarter, and hopefully will have some funds to tighten up some basic things like security and hosting features. Then when its sort of Beta ready I will try to publicize the github repo again. I gave it out before but its really not ready to share the code at this point, very messy and pre-alpha.
Anyway I am interested to know what people think of the concept or my plan.
Have you considered EtherPad Lite? It might be a more appealing choice than EtherPad, considering the common Node.js codebase.
CloudPlay (http://cloudplay.fm), my first Mac app, is a music player that searches for music locally (iTunes) and online (YouTube, SoundCloud), similar to Spotlight, and makes it easy to build playlists and share them. I'm going to iterate on it lots this summer while in the nReduce (http://nreduce.com/) program.
Dialoggs (http://dialog.gs) is an app I'm building with my buddy Drew Wilson (of Pictos fame). It's like a topical Twitter with privacy. Dialoggs lets you create (or be suggested to you after a number of replies) discussion topics (known as Dialoggs) that can be public, invite-only, or completely private, making them great for collaboration within a team. We're working on UX refinements as we learn how people use the app, and sometime this summer, will have a more public launch. More info on my blog: http://amirmalik.net/2012/04/27/introducing-dialoggs
if you have any questions, ping me on there (http://dialog.gs/amir)
The version of WhatsUp we are using does not have a good way to export the configuration, and no API to query, so I am basically screen-scraping the web GUI for all the relevant info. I then do some basic sanitization (there are some illegal chars in Nagios configs), error-checking (how to handle a URL with a loopback IP address), and some cross-reference (putting hosts in groups and attaching services to them).
Overall it has been a great learning experience for me. I got to know Nagios quite well, practiced my perl a bit, and got to use git beyond just the tutorials I had read.
I plan on open-sourcing this as soon as I get permission from my employer. Company time and all that.
Also, I'm building an copy editing service that's more transparent and straightforward. Most editors have complicated pricing schemes that vary depending on the topic, document type and whether they charge by the hour or by the number of words. Instead, I'm charging a flat fee per word, no matter what the project, and you'll be able to customize other features (like delivery date, format, etc.)
Hoping to get both startups rolling by the end of June.
For those interested in a little more details I have started blogging about some of the ideas and concepts behind Sendicate at my blog at http://www.chadyj.com
Site looks well-done, too.
I've made a quick pitch site: http://usejquery.com/vd-pitch/index.html
Last week I re-structured the app (updated with my knowledge, because it's in the works for quite a while now) and yesterday I modified Backbone.js' Sync function to handle the CRUD actions via websockets.
What do you think?
I'm still figuring out the language but i'm feeling that it can be really promising.
Helps mobile app publishers monetize their apps by self and cross promoting recommended apps to their users.
Built with node.js, Rails and HTML5 goodness.
Currently reaching 4.5 million users through our publishers on the network.
Check it out live in the Free Snake app http://itunes.apple.com/us/app/sneaky-snake/id446768343?mt=8
Tap the +games button in the top left corner.
It's a sports team management site. Allows team captains/coaches to easily manage their schedules, stats, and players. I have a good number of teams using it, so it you know anybody who has a team send them a link.
I also just released my first iPhone app called Bullpen:
Which is a pitch counter for baseball and softball pitching coaches.
* Biohacking my medical condition is my number one preoccupation
So far we've had a bumpy ride but I am commited to make it work to build a rather truly social planet!
latest vid: http://www.youtube.com/watch?v=WL2r3rRnvD0&feature=youtu...
A steno keyboard has 20 buttons and you can press any number of them at a time (chorded). You write syllables and it unambiguously resolves your strokes into English text. Experienced stenographers can get 220 WPM that way.
Batch processing a ton of old data and working out the kinks in some Ruby we rewrote in JS so we could share it between the client and server. Here are some details http://blog.ridewithgps.com/blog/2012/05/22/Metrics-Improvem...
It's currently available for Windows (Linux is coming next) and is completely free.
We (me and the business co-founder, a student in medicine) should "go live" in about two weeks.
You can see it at: http://smileship.com
Soon, I and my friends are going to work on plagiarism project as our college major project.
In public beta at the moment, anyone can sign up free in just a minute. Still early days, so any feedback can help shape our direction.
An open source GUI for PostgreSQL databases.
I've been futzing around a lot with Hadoop since you last mentioned this on here and haven't been doing much SQL work. Any news on the development front? Anything new I should take a look at?
Also, using AngularJS.
I plan to continue working on it and i hope it's helping out a lot of frontend fellows!
Right now, I'm mostly designing blogging software and forum software. I plan on making everything first, releasing it all separately, then just packing it all up as a chameleon package once everything is finished.
You know, the usual.