Well, while I’m waiting on a subversion command to finish (on another project), I may as well flush my train of thought, in between wondering how any large project can bare to use subversion lol.

One of my open loops is a component called the “Data Browser”, it’s meant to provide a view into data extracted from a projects source code, and present that data to the user: while bridging that browser interface into the rest of this programs peers. In less abstract English, it’s a tags browser. Go figure.

Something I love about programming, you can often express a notion in 3 words of code, what would take 10 words of English to describe. How that works? You can reduce the English word count with the use of insider jargon, but being a programming language, outsider is redefined as those who can’t read the language rather than those who don’t comprehend the associated tech speak. There fore the word count falls significantly.

My present train of thought however, is concerned with how the data should be presented: what is most suitable for the user. The fact that the program is designed first and foremost for my own convenience is aside the point :-o.

In search of the holy grail of user interfaces: I’ve found this the most optimal method.



+---------------------------------+
|  [-] Classes                    |
|      [+] Foo                    |
|      [-] Bar                    |
|            someMethod()         |
|            ....                 |
|      [+] ....                   |
|  [+] Functions                  |
|  [+] Macros                     |
|  and so on                      |
|                                 |
+---------------------------------+


where as much information about the individual items has been omitted for the sake of brevity ^.

Properly expanding the tree for a given type of data should display information unique to it. I.e. what is most pertinent to *that* type of data, rather than a common subset that applies to everything.

Columns for a methods display might look like:

| name | signature | return value | visibility |

where as the columns for classes, as opposed to ‘Bar’, might look something like this:

| name | visibility | in namespace | 

.

In a perfect world we could do this over a sandwich without much coding. Using the GTK+ TreeView widget and friends, grepping the manuals suggests that life is just going to be waaay easier if each element (Classes, Functions, Macros, etc) of the tree becomes a separate tab holding a specialised treeview as part of a Notebook widget! I’ll look into it closer when I have more time for that.

Now of course the tree view could simply show the lowest common denominator for info, and rely on a “Properties” button to show the individual details for the currently selected item, or we could (barf) just have expanding the trees spawn a new window customised to that type. But nether are to my taste.

Enough rambling, time to get a move on while subversion continues to (ab)use my networks bandwidth.

You know, if it wasn’t for having to read things like ToLongADamnTypeName toLongAVarName = new ToLongADamnTypeName() like constructs in all three languages, I could really get to like C# for cross platform work.

^_^ If only because Novel(mono) and Microsoft have each produced C# compilers that are 100 times faster than Suns javac, while still compiling faster than many C++ compilers. ^_^

github and filter-branch fun

In between being driven crackers, I’ve been *attacking* just about every TODO and item in my backlog. Staying insanely busy has the benefit that there’s minimal time to feel or think, until passing out cold >_>.

Except for a minor issue with power save, and tools for a couple programming languages to be installed, work on my laptop is virtually complete.
One thing I have finally accomplished is preparing my personal git repository for the hub. For almost two years now, I’ve kept the important stuff in my home directory under revision control. Now I at long last have an off-site backup of it, reduce need for pastebins, and I could care less if anyone finds the repo helpful 8=). I’m more concerned about freak system failure here… lol.  Somethings, like my vim files represent like 4 years of work so there is a wee bit of life/time investment here.
Projects get their own repositories as needed but top level stuff in $HOME shares one. Originally I used CVS, since my file server only came with that and RCS, and I didn’t want to bloat it with Subversion. About five months later, I switched to git ;).
Here things are still very simple. The file server has a mirror of any important data, plus it has bare git repositories for various projects: backed up independently of my personal data. Plus project repos on several hosting sites.  It’s good insurance: now my most important files have the same.
And of course being me, it’s obvious that I generated a patch set and skimmed through the 17,000-18,000 some lines of data representing over 200 commits, before I would allow the repo to get pushed into a public place.  I tend to be cautious in what I commit, to much so in fact. This repo however was always meant to be “Private”, and programs sometime become probmatic. I only found one instance where this was a concern, minor but still rather something that should be compromised.
The solution of course is to just rewrite history:

$ git filter-branch –tree-filter ‘git ls-files -z “filename glob” |xargs -0 perl -p -i -e “s/secret stuff/Censored By The Git History Cops!/g”‘ — –all
$ git gc –aggressive –prune
$ git push –force origin
$ git remote add github git@github.com:Spidey01/Terry.git
$ git push github master
Also being myself, I made sure to first test the filter-branch in a fresh clone into /tmp, back up my .git directory, as well as verifying the log and format-patch output that it worked. Plus since I made a tag of a commit before updating master to reflect it’s current machine: I also made sure to check that the tag remained unchanged from the filter-branch.
and now… I’m to darn tired to do more than pass out.

To say that I love using git for managing source code, would be the understatement of the year.

The first tool I used was Subversion (around late v1.4/early v1.5), and I rarely had any trouble using CVS either. I can basically pick up and figure out any tool given a decent manual or enough kick around time.

It’s like having a freaking swiss army knife of managing changesets, having git in hand :-S

This really did make me laugh out loud

“If I had a nickel for every time I’ve written “for (i = 0; i < N; i++)” in C I’d be a millionaire.”

– Mike Vanier



Even more so because for stuff I’ve in mind to write, involves noting that inescapable fact of C programming :-o.

Today I’ve had to get used to living with Subversion again, as much as I simply love git, setting up a repository is easier with svn then git-svn :-S. Aside from the obvious problems that chop up from their different mental models it’s not that bad.

The lights flickering as the thunder blares outside on the other hand, tell me that I should probably *WAIT* to merge this vendor branch into the trunk – and go look up how atomic svn copy src-url … dst-url actually is in terms of network and power failures! If I was using git I would just say screw it and do the merge, because I know already that git doesn’t phone home to the repository, because the working copy is a repository.

Oh well, to the manuals!