Now this is just so damn funny (for me as a programmer), that it hurts!
Oracle’s Java Company Change Breaks Eclipse
edit/postscript if you want to know why it does that, you should look at the first bug report, than RTFM and play Sherlock.
An orange in an apple orchard
Now this is just so damn funny (for me as a programmer), that it hurts!
Oracle’s Java Company Change Breaks Eclipse
edit/postscript if you want to know why it does that, you should look at the first bug report, than RTFM and play Sherlock.
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. ^_^
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 >_>.
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
“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!
you can think: “Parse error, unclosed parentheses”, at seeing ‘(comedy, ‘ at the end of the cable boxes on screen info for the current film….
I’ll typically setup what I call a tripple-tree, or a quad-tree layout. Each project has three top level tree structures that represent a phase of “Getting it done”. Hacking it, building it, and distributing it.
A source directory (typically src or Source), that houses the projects code, and basically everything you/I want under version control. Structure varies but I tend to create modular bundles out of habit.
A build directory (typically Build/Architecture/OS or Build/Architecture.OS), that houses all essential build time files for that configuration, that won’t be distributed. I test builds against multiple Operating Systems, and synchronise the work directory between machines; so being able to have builds of each concurrently tucked away is a bonus. Sometimes I go further and subdivide the build tree into different configurations, such as Release/Optimised/Debug builds, but I rarely have need to.
A distribution directory (typically Dist/Architecture/OS or Dist/Architecture.OS), that contains all the files needed for a user to simply extract to a folder on that given system, and run the program. Worth while for me, for the same reasons as the build tree, plus the added benefit of simple a zip/tar installation!
Sometimes I also create a fourth tree called ‘Vendor’ or ‘Deps’, that functions like the source tree, but instead contains the code for whatever libs are required. Plus customised project files/build scripts to compile them when needed.
Oh so many people ship IDE project files that reek of laziness or brain damage. Me, I’m so damn lazy that I don’t want to have to explain it, in fact, I don’t even want to edit it later. I just want the thing to *work* when I tell it to build sth. It takes time to do it that way, but it is usually worth it. At least, for cross-platform freaks like me.
Programming is a subject that I do take seriously.
In wrapping up and refactoring my new rake driven build system, I’ve written numerous utility functions. Most stuff specific to compiling crap is in a custom “Builder” module that provides a templated interface to the current OS/Compiler kit, via environment variables and methods like make_object, make_shared_library. My top level rakefile also has a neato inference rule rigged together for handling my triple-tree and quad tree build patterns.
The real fun of the day however, is this baby:
#
# A magic function that generates file tasks that copy all headers from
# directory ind # to directory outd. Any missing directories are created as
# needed.
#
# The return value is a list suitable for the right hand side of a task, e.g.
#
# task :headers => header_magic(src, dest)
#
def header_magic(ind, outd)
dirs = []
hdrs = []
find_files(ind, /.*.h[hxp]*$/) do |p|
outdir = File.dirname p.sub(ind, outd)
outfile = File.join(outd, File.basename(p))
directory outdir
file outfile => p do
cp_r p, outdir
end
dirs.push outdir
hdrs.push outfile
CLEAN.include outfile, outdir
end
dirs+hdrs
end