C's Eccentric View Of Arrays

C compilers transform myArray[i] into *(myArray + i), which is equivalent to *(i + myArray) which is equivalent to i[myArray]. Experts know to put this to good use. To really disguise things, generate the index with a function:
int myfunc(int q, int p) { return p%q; } 
myfunc(6291, 8)[Array];
This looks like a rather bad joke, but who knows all the ways of C compiler...


JSR 305 : javax.annotations

Intro on most usable annotations of the JSR 305. And the maven dependency snippet:



Agile Basecamp Ukraine : Impressions/Summary

In general: conference was quite positive emotionally and mostly light on the brain (almost no complex theories/metrics/formulas out there). Lots of interesting edutainment-like report formats and talk-provocative meetings. The place was also quite nice, I regret I did not take any photos while being there.

DataArt's after-party rocked, that's for sure: but I did not really see any technical (or at least PR) report on the company's projects/teams/positions itself, which would fit quite nicely (at least) into the Open Space section (I guess).

UPD: So, here's the link to conference presentations on SlideShare. Also I've updated books and ideas section, so check'em out. My personal TODO: compensate for missing presentation on Estimation Techniques.

General Agile Resources:
Recent Books on Agile, (and links to the authors' blogs):
Ukrainian Agile resources (no particular order here):
And couple of other sites of possible interest:
Some tools which were discussed on the conference:
  • redmine (tracker with lots of Agile-ish yummies) - missed some of core plugins though;
  • gitosis (some kind of large-scale git management tool);
  • jenkins (a fork-off/rebranding of Hudson, was new to me).
Nice ideas having crossed my mind while I was listening (no particular order here, too):
  • ROI metrics / Survey integration: which basically means that customer feedback surveys are aligned with sales so we (roughly speaking) are able to estimate profit we get for each vote on any particular feature
  • Web-version of Scrum/Kanban board for a distributed team: oh this all really has something to do with HTML5, like that Spaaze project I've recently seen; just do that thingy via HTML5, and cast it off to the wall with a projector or wide plasma or something...
  • Start-up evaluations / Vision brainstorming: I really liked that presentation on Vision elaboration and would use that on any of my ideas before I start designing or coding.
  • free HTML5 mindmapping (yeah, ditch java from this domain, at last): well, I am late as usual: mind42, bubbl.us, MindMeister;
  • some time tracker/todo manager startup which beats RTM? The main idea is that if your application is quite well-profiled you may bite reasonable share of a crowded market: I'd recently searched for these applications and still have no proper solution: I'd like to see Hamster being cross-platform and having the Pomodoro features of workrave;
  • switch my lecture style to this Lightning Talks format: some of lectures, at least course section intros/outros would be quite engaging/igniting the students to work on the course... ;)
Particular/remarkable idioms: soft commit, focus factor, planning poker.


Custom Namespaces for Spring Configurations

Well, this feature is explained in the Spring docs (section B.6. Using a custom extension in your Spring XML configuration) and TheServerSide.com had thorough article on that matter:

Please note that these two files should be present in the META-INF directory of your JAR. In fact, if you open the spring.jar under the META-INF directory, you can see the details of all the schema and handlers for the namespaces that comes with Spring.

Authoring Custom Namespaces in Spring 2.0

Couple of extra hints: as your project in most cases should run fine from an IDE, you'll have to pre-bundle a jar with at least those two files (spring.handlers and spring.schemas) in META-INF (no other way to do that w/o packaging a custom jar on each run). And, notice that spring.schemas uses schema location as an url, not schema URI.


Graph Visualization Frameworks

The most extensive list of Graph Visualization Frameworks, ever.

My eye was caught by GINY and Piccolo2D. Looks like GINY might be forked and implemented atop of Trove's, not Colt's primitives.

Well, trying protovis seems to be more promising and effective endeavour, so no forks of GINY, at least for the time being.


nosql databases, and some cherry-picking hereof

Most comprehensive lineup (careful, lots of interesting projects on that page) is at this address. The most prominent are:
MongoDB, C++: 32-bit servers' datasets are limited by 2.5gb (what a fail...); but you still may look into a review of admin interfaces for MongoDB.
CouchDB, Erlang: review of related projects (several GUIs included). Also there's an approach to build applications directly on top of CouchDB, w/o appserver at all: see couchapp.org. And check the hubsite of the CouchDB related projects (and news).
OrientDB, Java: minimalistic dependencies, might be embedded just like H2, and here's the demo of OriendDB admin interface.


git init

30 minutes intro to Git
Pro Git Book (is to Git as Red Bean Book is to SVN)
git-scm – The official git website.
git man pages – In-depth documentation for every git command.
git user’s manual – Concepts and workflows.
git ready – rather hot and relevant tips and hints for using git (I'd already used couple, with having been gitting only for a couple of days).

UPD: And yes, you're able to host a read-only Maven repo on github (Google Code also allows for that).
Also check an extensive list of code hosting solutions on Wikipedia, and Git-supporting hosters list on git.wiki.kernel.org. Also, GitHub has Pivotal Tracker integration, not completely submersive into IDE, but still quite nice to use (quite better then GitHub's issues, even after the recent rewrite).

And this enables colors in the git console output:
$ git config --global color.diff auto



JQuery : Grid Widgets

JQuery has quite elegant syntax and rock-solid core, but the UI extensions are rather weak when compared to some of other JS frameworks. There was some recent progress in the UI's Grid (completed zero-feature grid phase, with proper ThemeRoller support, but no sorting yet).

As for third-party Grid plugins, Datatables is still one of the most stable and well-designed (at least you may sort visible column by a hidden one, for example), but there's no editors, column resizing and DnD. Then you have that jqGrid plugin, which, while being quite feature-bloated (also includes editors), does not allow for the same degree of controll over sorting as Datatables permit. FlexiGrid is quite promising: looks like not so well-documented middleground between Datatables and jqGrid.

And then there're some less mature/up-to-date versions like SlickGrid, GridNic (a clone/stale version of the former one), TableSorter (rather minimalistic), FireScope Grid (outdated, no demo, GPL), InGrid (outdated).


Hot JavaScript RIA Frameworks

Yahoo UI already hit version 3 release, and node.js-compatible version lurks in betas out there. GWT requires java and does not hot-swap/recompile easily, but is indeed a good option. Actually some companies try to build on top of GWT: SmartGWT and Vaadin. It's quite an experience seeing each of them comparing against the other with an opposite conclusions (see this and this). Both of libraries are dual-licensed. Also there's Intelligent Expert JS framework, which is also dual-licensed, but builds on top of JQuery instead of GWT.

And of course you would not want to miss Comparison of JS Frameworks on Wikipedia. The table on that page just does not fit my screen, which is quite a fact for me. Quite interesting profiling results for selectors of aforementioned frameworks might be generated via SlickSpeed selector test.

Other interesting demos out there: Ample SDKQooXDooDojoToolkit, among those frameworks I did not find decent Grid component, which is a no-go for me, but they're still worth looking through.

UPD: a bit of a side-note: there's even a Basic RIA platform.


node.js on the web: full-stack javascript

Node.js API docs, and translation to russian.

Then we have a decent web-framework for Node.js, named express, and wiring/interop extension for it: connect; and meta-model for CSS generation SASS, HTML templating engine JADE, and... metalanguage for JS itself: CoffeeScript (frankly, this blew me away when I found that one).

I think it should be quite possible to grab third-party site page, introspect the page via JS DOM API, squeeze the data out by just the same JS, and serve the data out.

As for any ports of jQuery or some of its plugins, like jquery-tmpl or solr - this looks to be quite possible, but I am not sure whether this would be needed given the vastness of the current stack solutions.

Sexiest aspect of Node.js is: full-stack javascript.

...or, may all of this just be some massive, distributed april fools fake, just like Google Motion? ;)


Binary JSON : Java implementations

BSON is a binary representation of JSON. It has gained prominence by its usage as the main exchange and persistence format of the document-oriented database management system MongoDB.

bson4jackson: this library adds support for BSON to the Jackson JSON processor. Tutorial, and JVM serializers benchmark, and, of course, the spec.


tcp over tcp drawbacks

But you can't safely just forward TCP packets over a TCP session (like ssh), because TCP's performance depends fundamentally on packet loss; it must experience packet loss in order to know when to slow down! At the same time, the outer TCP session (ssh, in this case) is a reliable transport, which means that what you forward through the tunnel never experiences packet loss. The ssh session itself experiences packet loss, of course, but TCP fixes it up and ssh (and thus you) never know the difference. But neither does your inner TCP session, and extremely screwy performance ensues.

(c) apenwarr/sshuttle @ gitHub


Programmer Wetware/Peopleware Books

Well, okay, I also came to conclusion that Pragmatic Thinking is not quite a must-read book (but still worth skimming through). There're quite better alternatives, at least on Amazon, so here we go:
If there's nothing of interest for you, then you'd probably like to check the whole Pragmatic Bookshelf.

I'll of course try to update this post as soon as I find and read anything of those books, in any readable form.