Simplistic Java persistence for CouchDB. The root persistable entity is named Squab. Relaxing, heh.

Binary/source jars have been posted to my semi-private maven repo.


Don't ever memorize passwords after 6PM

I've lost several evenings of configuration tweaks and chat logs after getting into this with my upsized truecrypt volume couple of months ago. I've created a password for the volume, rebooted, entered the password once and was flipping my netbook in-out of sleep for couple of weeks. And then I've rebooted once again and... see below for details. The next password was shorter, but I managed to forget it too, was bruteforcing it for couple of nights with simple bash script.

Password Strength XKCD


Free Stanford online courses and related

Free Stanford online courses: Enrollment deadline is the next Monday or so.

  • Database class here: http://db-class.com/
  • Machine Learning class here: http://ml-class.org/
  • AI class here: http://www.ai-class.com/

Also there's some extra non-interactive resources for some of courses taught at Stanford Engineering. Which might be of some interest. Particularly that pack of videos for iPhone app development course.

One extra Google hint: a page which links to some 400 of free online courses. Definitely, time is now the most precious resource of all. :)



Всех, кто обратился ко мне в почте, я добавил в систему. Если вы обращались и получили от меня письмо, но не получили приглашение от системы - дайте мне знать, будем смотреть в ошибки с импортом.

Систему дистрибуции значительно обновили, потому я пока не могу точно сказать по какой схеме распространяются продукты. По идее можно сгрузить дистрибутивы и бесплатно получить ключи ко всем продуктам (в зависимости от группы). Замечу, что количество ключей ограничено: при выдаче дополнительных ключей одному человеку предыдущие инвалидируются.

Сотрудники кафедры ММСА находятся либо в группе lab installers, либо в группе faculty/staff. Если вам (сотрудникам) нужны какие-либо продукты из тех к которым у вас нет доступа - дайте мне знать.

Я пока что не знаю будет ли студентам доступны ключи к Win7 Ultimate и всем продуктам MS Office, скорее всего будет доступно отнюдь не все.

При регистрации в системе вводите реальные данные: имя, фамилию, группу. Также используйте для регистрации только личный почтовый адрес. Любые отклонения в этом вопросе караются банхаммером без всяких предупреждений. Также знайте, что при завершении обучения вы не имеете права пользоваться полученными ключами и должны все деинсталлировать.

TODO: EULA/fine print.

Связаться со мной по вопросам регистрации можно по адресу iasa @ akraievoy.org, желательно указать "MSDN AA" в заголовке письма.



Chuck Norris Plugin for Hudson : Evolved

UPD: no, Buzz did not scrape the embedding properly, so here's the link. And, BTW, Hudson Chuck Norris plugin was described here.

My First Bookmarklet

Remove sidebars on ZeroHedge

UPD: the same script may be enacted via Javascript Injector extension for Chrome.


Programmer Competence Matrix + Language profiling/popularity

Programmer Competency Matrix allows you to estimate your current skillset, but won't give you any advice as to what to look into to boost it all up.
So for making a decision about platform for your side-project or pet-project: see the Computer Language Benchmarks Game. And then of course you'd likely want to look on comparisons (russian version is quite better at that for some reason). Some popularity indexes may be also helpful: langpop.com, lang-index @ sourceforge, TIOBE index.

UPD: another page with language performance comparison (russian). A thought aside: there's no benchmark for green threads with in-process scheduling (which should look like load testing), where V8 and Erlang would shine.


Scala / Erlang / Node.JS

I'd recommend this informal intro into Erlang. Was quite nice for me till the moment author got into building Finite State Automata upon OTP. The examples in that section were brain-melting and I definitely lost the thread of author's thought (either none or massive bunch were present there at the moment). Some of the pictures have quite nice humorous messages encoded in the alt, so hovering them relaxes you a bit here and there. Nice idea.

And another trend worth checking. This of course is a gross oversimplification but the direction is more or less clear. Scala is not a programming language for Google, it's the theatre or something, so no Scala trend for you in there.

P.S. I have some extra links into realm of Erlang so stay tuned if you're interested.

The Case for Extensive Reading

Most language teachers do not require their learners to read much. Instead, they consider extensive reading as somehow supportive, or supplemental and rarely they set fluent reading for homework. This chapter has argued that it is fundamental mistake to consider sustained silent reading as supplemental, or optional. Extensive reading (or listening) is theonly way in which learners can get access to language at their own comfort level, read something they want to read, at the pace they feel comfortable with, which will allow them to meet the language enough times to pick up a sense of how the language fits together and to consolidate what they know. It is impossible for teachers to teach a “sense” of language. We do not have time, and it is not our job. It is the learners’ job to get that sense for themselves. This depth of knowledge of language must, and can only, be acquired through constant massive exposure. It is a massive task that requires massive amounts of reading and listening on top of our normal course book work.
© Rob Waring, via Dmytro Korduban


User Agents Trends

Operating Systems: Browsers and Operation Systems (OS) are identified by the "referrer" string sent by users' browsers.
% Visits from OS | 11/1/09-2/1/10 | 11/1/10-2/1/11 | Difference
Windows          |   89.9%        |    84.8%       |   -5.1%
Macintosh        |    4.5%        |     5.2%       |   +0.7%
Linux            |    0.6%        |     0.7%       |   +0.1%
Other            |    5%          |     9.3%       |   +4.3%
The data is courtesy of Google Analytics team and spans "hundreds of thousands of sites". Looks like there's some revolution going on in the "Other" category. Quite interesting.



EasyMock’s all-concrete or all-matchers requirement

We've been burned by this while trying to mix easymock expectation with a constant String value.
The way to avoid these problems is to decide not to use EasyMock at all, instead creating your own hand-rolled doubles. And if you decide to use EasyMock in your project, ...

* Make sure at least someone on your team understands how EasyMock works under the hood.
* Be aware of EasyMock’s all-concrete or all-matchers requirement, and that violations of this requirement can be violated by automated refactoring.
* If you use EasyMock matchers, make sure that they are produced while marshalling the arguments to call the mock method, and not beforehand.


Secure Digests

The Rebound Attack: Cryptanalysis of Reduced Whirlpool and Grøstl (Florian Mendel, Christian Rechberger, Martin Schlaffer, Søren Thomsen) --- prioritizing collision attacks to lower the try count

New Collision attacks Against Up To 24-step SHA-2 (Somitra Kumar Sanadhya, Palash Sarkar) --- the very first SHA-512 collisions exhibited.

On Corrective Patterns for the SHA-2 Family (Philip Hawkes, Michael Paddon, Gregory Rose) --- early paper on reducing efforts to produce SHA-2 collision

Cache missing for fun and profit (Colin Persival) --- leaking data from a secured thread via processor cache

The AES spec, as of 2001.

Several different hash implementations at etherhack.co.uk, and another whirlpool implementation at sunsean.com. Also check the Hash Function Lounge.


ELW : Plotting the database volume

-rw-r--r-- 1 root root   24651199 2011-03-02 23:57 elw-data-110302.7z
-rw-r--r-- 1 root root   24634590 2011-03-03 00:42 elw-data-110303.7z
-rw-r--r-- 1 root root   24916696 2011-03-05 05:01 elw-data-110305.7z
-rw-r--r-- 1 root root   24922820 2011-03-12 05:01 elw-data-110312.7z
-rw-r--r-- 1 root root   25308559 2011-03-20 20:52 elw-data-110320.7z
-rw-r--r-- 1 root root   25397933 2011-03-26 05:01 elw-data-110326.7z
-rw-r--r-- 1 root root   26031946 2011-04-02 05:00 elw-data-110402.7z
-rw-r--r-- 1 root root   27216064 2011-04-09 05:01 elw-data-110409.7z
-rw-r--r-- 1 root root   27486042 2011-04-14 09:25 elw-data-110414.7z
-rw-r--r-- 1 root root   29464877 2011-04-16 05:01 elw-data-110416.7z
-rw-r--r-- 1 root root   30669374 2011-04-23 05:01 elw-data-110423.7z
-rw-r--r-- 1 root root   32029750 2011-04-30 05:01 elw-data-110430.7z
-rw-r--r-- 1 root root   32123905 2011-05-07 05:01 elw-data-110507.7z
-rw-r--r-- 1 root root   33887952 2011-05-14 05:01 elw-data-110514.7z
-rw-r--r-- 1 root root   35841114 2011-05-21 05:01 elw-data-110521.7z
-rw-r--r-- 1 root root   36450177 2011-05-28 05:01 elw-data-110528.7z
-rw-r--r-- 1 root root   41561291 2011-06-05 23:09 elw-data-110605.7z


The way to long-term freelance jobs

Doing good work, on time and within budget, is only the starting point. Here are some ways to really shine, and foster a longer-term collaboration:
  • Contribute ideas. Go beyond the call of duty. When you can suggest improvements, either for the immediate task at hand or to complement the employer's efforts in general, you show that you brings ideas and initiative, as well as technical skill.
  • Beat deadlines. The employer wants to feel like he's getting more than he's paying for, so you want to surpass expectations whenever possible. Coming in ahead of schedule is a no-cost way to impress.
  • Be responsive and available. You're not there in the same office, but do your best to prove that distance is no challenge. This can mean checking your emails outside local "business hours," and finding other ways to minimize the impact of time zones on your relationship.
  • Earn trust. If you don't know how to do something, admit it. If you're eager to tackle a challenge, but lack the experience, tell the employer — he may give you the go-ahead, but being honest upfront will keep expectations realistic and help him make a smart decision about assigning the work.
  • Communicate smoothly. Sometimes emails between you and your employer may be unclear, or seem negative. Work to fix communication issues early on. You want your employer to view communicating with you as a pleasure, not a chore.
  • Be "low maintenance." The employer gives you work to make his life easier, to get it off his plate. Try to get all the information you need early on in the assignment phase. Never hesitate to ask followup questions, and give progress reports at the expected intervals. But try to get everything you need up front to make the employer feel like working with you is an easy choice.
via ODesk Newsletter


CI Feature Matrix

CI Feature Matrix @ thoughtworks.org

Quite an interesting observation: compare biased comparisons of Ivy and Maven against each other, each proving itself to be superior.


Interview Improvements

So what should a developer job interview look like then? Simple: eliminate the exam part of the interview altogether. Instead, ask a few open-ended questions that invite your candidates to elaborate about their programming work.
- What's the last project you worked on at your former employer?
- Tell me about some of your favorite projects.
- What projects are you working on in your spare time?
- What online hacker communities do you participate in?
- Tell me about some (programming/technical) issues that you feel passionately about.
These questions are designed to reveal a great deal about the person you have in front of you. They can help you decide whether the candidate is interested in the same things as you, whether you like their way of thinking, and where their real interests lie. It's tougher for them to bullshit their way through here, because the interviewer can drill deeper into a large number of issues as they present themselves.
What about actual coding ability? Well, take a few moments after the interview and look into some code the candidate wrote. Maybe for an open source project, maybe they have to send you something that's not public, doesn't matter. Looking at actual production code tells you so much more than having them write contrived fiveliners on the whiteboard.
I'm sure you can come up with even more questions and other ways to engage the interviewee. At this point, pretty much any idea will be an improvement.
I don’t think there is one right developer interviewing technique. It is worth mastering a variety of interviewing techniques and then adjusting based on the job requirements, team composition, manager style and company culture.

Here is an initial (incomplete) list. I’ll update with new content from comments & conversations.


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.


Swing -> SWT Migration Guide

Java developer and Eclipse enthusiast Yannick Saillet offers this comprehensive, hands-on guide to porting a Swing application to SWT using extensive code samples to illustrate the techniques. This tutorial is very comprehensive and will require significant time to complete. However, it serves as excellent reference material.

Migrate your Swing application to SWT @ IBM

I guess this could be pretty good intro into SWT framework itself...


Firefox 3.6.14 breaks Applets

I'm somewhat curious how such a huge bug in such an essential piece of web technology could have been released into the wild after knowing about it for over a month.

by Warren Forest @ Bugzilla @ Mozilla (link)



Я вроде смог активировать подписку на MSDN AA. Качество русской локализации MSDN/Academic не радует. Некоторых необходимых для регистрации ссылок вообще нет в русской локали. То есть я просто никак не могу зарегистрироваться до тех пор пока я не переключаюсь на штаковскую локаль. Явно дают понять кто кому реально нужен во всех этих взаимодействиях с академией... впрочем ладно, Большому Брату может не понравиться моя разговорчивость. :)

PS: если кто из ИПСА это читает - да, примерно через недельку меня можно будет штурмовать по поводу бесплатных ключей и загрузок софта. Мне еще надо почитать все эти лицензионные соглашения и понять за что меня смогут посадить...


Naming Releases

Couple of links to look up upcoming release names.

Astronomical toponyms (naming nomenclature): minor planet names, solar system planet/satellite names, star names.


procrastinating bedoozler

Очередная пятничная порция юмора: мне тут подумалось, что мой стиль работы на кафедре кратко характеризуется именно таким выражением.

Urban dictionary в помощь всем заинтересовавшимся данным определением.



Google Guava : Annotations : Beta

Oh those guys rock. They've just put @Beta on the Beta itself, which is kinda showing that they have some wits but is practically useless.

Well, this is something like: "we'll mark some other entities in the project as to-be-soon-removed, including the marker itself, so - essentially, long term - the marker, our message and all relations thereof are void, there's nothing written here (long term, mind you, dumbo)".

...and this, as usually, is doomed to stick around for years, literally... 


Convert key + pem to jks (java keystore)

I had to convert ssl private key + cert chain from the format nginx understands to a format which jetty/tomcat understands.
Sounds pretty simple, but... well, I'd come up with so many ways to break the certificate chain that it deserves a separate post of its own.

So, that's the magic:

openssl pkcs12 -export -in mysite.pem -inkey mysite.key -out mysite.p12 -name "jetty"

And then you open the .p12 file with Portecle and simply do Tools > Change Keystore Type > JKS.
Don't forget to reset both key and keystore passwords: jetty/tomcat expect both passwords to be equal.

AFAIK there's no one-shot command to import .p12 into java keystore. At least with java 5 keytool. So I'd prefer to keep things more or less simple by using Portecle.

...oh, and this cool collection of examples for openssl/keytool simply has to be bookmarked: Not so few frequently used SSL commands


SO: graph/network library for java, Trove-style

Well, is there a high-performance graph library for working with primitivies, without those generics/autoboxing overheads? For double lists you may use trove, for linear algebra you may use netlib-java (examples for you to better understand the point of my interest in this question).
As for Graphs/Networks: all the libs I've found use generics and should be not that performant. I may as well do some tests for that, but I believe that heap-managed network link weights would be inferior to double[] with some bit offsets to get the index for i and j. The usage scenario: there're hundreds of such networks (most of them sparse) of size 4k*4k, there's some genetic optimization running over that set of networks, which do some flow/min route estimations for each specimen.
So, there're: JGraphT, JUNG, ANNAS (the links lead to the APIs/code samples which expose the miserable Java Generics in all of them). Are there any Trove-ish alternatives? I'd already created some simplistic implementation, but just decided to look around to avoid inventing the proper bicycle...
PS: Please don't start on performance of generics-laden Java code, at least without linking to some decent benchmark, ok? ;)
Some trolling was spiced in, but let's see how StackOverflow users will respond to that... :)

Genetic Algorithm in Java: library line-up

Watchmaker: Manual

ECJ: Manual

Jenes: Tutorial

JGAP: Sample code

JAGA: Javadoc

java-GAlib: seems to be inactive, so I did not dig too much

Bulk transcode TTA to FLAC

Done on ubuntu command line with bash and sed.
Proper escaping (and ordering of escaping) is a major pain, I should say...

find -type f -and -name "*.tta" -and -exec bash -c "ffmpeg -i '{}' \"\`echo '{}' | sed -e 's/ /_/g' -e 's/\.tta$/\.flac/g'\`\"" \;

UPD: This did not keep metadata on the files, so I had to use even more brutal method... :D


Сленг разработчика (2008)

Самое время немного посмеяться - вечер пятницы. Я тут нашел на своем старом сайте для студентов небольшую объясняловску по поводу фольклора, с которым они могут столкнуться если я им что-то рассказываю по разработке.
Этой штуковине уже два года, так что кое-что уже устарело. 

  • репа - репозитарий SVN, в некоторых (редких) случаях может иметься в виду local maven repository (второе чаще всего называется "репкой")
  • тянуть репу - получать рабочую версию проекта, тобишь делать svn checkout
  • песочница - локальная рабочая версия проекта
  • залить - сохранить изменения песочницы в репу
  • нолито! - репа обновлена, следует обновить песочницы
  • дать в репу - передать другому разработчику необходимые ему изменения через репозитарий, в некоторых случаях связано с передачей больших бинарных файлов
  • тазикстанокпылесос: рабочая станция, персональный компьютер
  • калдырить - следить за процессом сборки версии продукта
  • закалдырить - собрать продукт, собственно, завершить процесс калдыряния (иногда под этим еще понимается и развертывание версии на тестовой или производственной платформе)
  • завалить сборку - допустить ошибку компиляции или тестов, и не обнаружив ее, дать в репу коллегам, нарушив тем самым их беззаботное калдыряние

Ну вот как-то так. Ежели кто еще какие плюхи за мной (или собой) вспомнит - милости прошу в комментарии!

Networks, Crowds, and Markets: Reasoning about a Highly Connected World (David Easley, Jon Kleinberg)

Kinda short review/notes on the Cornell's book I'd been referred almost a year ago (download, amazon).

Well, I was able to read 13 chapters of 24. Then the authors got to the structure of the web, heavy tails and small worlds, which are quite more familiar for me - so I started skipping.
Percolations and spectras were discussed at mere basics, so there was nothing quite new/interesting for me in the book, though some of game theory was quite a nice refresher.

The gross volume of the material does not deserve 800 pages: some of the general whatnot should be evicted from the book, especially in the beginning chapters.
In most cases couple of formulas are quite sufficient and should not be duplicated by two or three paragraphs of redundant examples (or at least some styling should denote those "for-dummies" sections).

BTW: chapter 23 on politics and state seems to be of some marginal interest. No explicit discussion of networked warfare in there, so...


How to: Install Maven on Windows

Well, there's no easily googlable howto on getting started with Maven on a Windows box. And I'm a bit tired of explaining the same thing for so many times, so...

You should have Oracle's JDK set up properly, more on that in a moment.

Here we go, step by step:
1. Grab the latest version of the maven distro from the maven binaries
this, for the time being, is the version 3.0.2

2. Unpack that distro to some convenient public place where you store your development tools.
Something like
would be perfectly fine - short path without any spaces...

3. Then we have to ensure that main maven executable,
is seen in the PATH (so you're able to run it from any other folder)
We do this simply by hitting Win+Pause and switching to the Advanced Tab and hitting Environment Properties:

Then you choose the PATH property (global, not a per-user one), and edit it away as shown:
edit the PATH to enable maven
 Now couple of OKs and you're mostly done, hopefully.

4. Now fire up a command prompt (on most systems this would be win+r cmd <return>).
It should not really matter which current directory you use. Just run the command
mvn -version
this should report something aligned with the version you've downloaded and installed.
This should actually be quite like that my linux maven installation says to me:

anton@arcano:~$ mvn -version
Apache Maven 2.2.1 (rdebian-4)
Java version: 1.6.0_22
Java home: /usr/lib/jvm/java-6-sun-
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.35-25-generic" arch: "i386" Family: "unix"

5. Of course, you ask me next - "Okay, so we installed that thing, but how do we use it?"...
Well, don't close the console you've fired in the step #4. Just change the current working dir to the location of your maven project, and fire one or another magical command from the list below:
mvn clean package - do a full clean build of the project, fetching the libraries off the public internet repository, run a basic set of project unit-tests...
mvn dependency:tree - just check which submodules use which libraries
mvn site - generate project documentation
Oh, and note that simple cd command won't switch you across system disks in windows. You need to issue d: command to switch current directory to disk d: and so forth.


Ubuntu package management

If you have any heavy packages recently installed (and are going to wipe the system for any reason), you might look into

ls -l /var/cache/apt/archives

to see which might be restored to the same place to avoid repumping them.

A quick way to see which packages are related to something is

apt-cache search java

Another less quick but more detailed, also shows what is installed on your system, is

dpkg -l '*java*'

You may see what was installed and when (for maverick)

less /var/log/apt/history.log

or, less conveniently (for lucid)

less /var/log/apt/term.log


New JQuery / Java / Scala Trails

CRUD using jQuery and Codeigniter - did not dig into this one, just a memo
Scala for Java Refugees - really nice brain-savvy intro
Java concurrency bug patterns for multicore systems - did not go either, but looks quite promising
The busy Java developer's guide to Scala - looks to be heavier and more FP-oriented


MySQL dummy mode

Команда mysql --help | less выдает такое замечательное:
-u, --user=name     User for login if not current user.
  -U, --safe-updates  Only allow UPDATE and DELETE that uses keys.
  -U, --i-am-a-dummy  Synonym for option --safe-updates, -U.
То есть, легко ошибиться и написать не -u, a -U, что как бы намекает... :)


О стратегиях управления

Очень внятно написано по поводу того что не автоматизация, технологии или монады перегибают ситуацию к успеху, а банальные рукопашные рефлексы, знание оперативной обстановки и хорошая голова в штабе.

1. Необходимо иметь либо работающий макет приложения, который устраивает заказчика, либо глубоко разбираться в предметной области и знать, что же требуется, а еще лучше – и то, и другое.
2. Хорошее знание инструмента, который используется при реализации – на первый взгляд представляется чуть ли не самоочевидным.
3. Единоначалие. Понятно, что должно быть одно ответственное лицо (или небольшая группа лиц). В реальности нередко оказывается так, что каждый реализует свой участок работ, совершенно не интересуясь тем, что производится на других, и основной своей задачей видит не качественную реализацию, а как бы поскорей спихнуть.

Серебряная пуля есть. Она, пуля, оказалась композитной и состоит из трех частей, но, к сожалению, эта серебряная пуля – не то чудодейственное средство, которое дается даром: вышеприведенные выводы кажутся совершенно очевидными, но, к сожалению, большинство продолжает пытаться отыскать решение проблем преимущественно в применении чудодейственных средств.

И вот это стоит привести полностью, без купюр.

1. Ни в коем случае не формулируйте цели проекта, не расставляйте их приоритеты и не связывайте их со стратегическими целями и приоритетами организации.
2. Подключите как можно больше людей, но не определяйте их роли.
3. Оттяните на самый последний момент планирование того, когда, как и какими ресурсами проект будет реализован.
4. Всеми силами избегайте мозговых штурмов, открытых обсуждений, общих встреч и любых коммуникаций между участниками.
5. Изначально перекройте участникам проекта доступ к информации о его статусе, принятых решениях и ключевых лицах, принимающих эти решения.
6. Не учитесь на ошибках прошлых проектов, не анализируйте риски, не учитывайте возможных изменений в стратегии.
7. Игнорируйте любую инициативу “снизу” и, тем более, вопросы мотивации участников проекта.
8. Ничего не фиксируйте и не документируйте.
9. Начните с широкой пиар-активности с минимумом конкретики.
10. При старте проекта назначьте отвечать за него за него того, кто не участвовал в планировании проекта (если уж вы уже допустили такую ошибку как планирование)
11. Поощряйте решение краткосрочных задач, отражающих локальные интересы разных участников проекта.
12. Помечайте как можно больше вопросов как “tbd” (to be defined)
13. Не думайте о том, как еще можно добиться поставленной цели “завалить проект”, это может привести вас к ненужным сомнениям по любому из предыдущих 12 правил.


Опасности изучения Java

Сложность этих курсов просто ошеломляющая. На первой лекции вы целиком изучаете Scheme, и теперь вы можете быть посвящены в работу функций, работающих с неподвижной точкой, которые используют другие функции на входе. Когда я смог побороть такой курс, CSE121 в Университете Пенсильвании, я увидел, как много, если не большинство, студентов так и не смогли это сделать. Материал был слишком сложным. Я послал по электронной почте профессору длинное письмо, полное рыданий, говорящее о том, что Это Просто Нечестно. Кто-то в университете, должно быть, услышал меня (или одного из других жалобщиков), потому что теперь на этом курсе изучают Java. Теперь я бы предпочёл, чтобы меня не услышали.
Ничто в образовании, построенном полностью на Java, не отсеивает студентов из-за недостаточной гибкости их мозгов для понимания этих концепций. Как работодатель, я вижу, что 100%-Java школы начали штамповать выпускников курсов CS, некоторые из которых просто недостаточно умны для того, чтобы работать программистами с чем-то более замысловатым, чем Ещё Одно Бухгалтерское Приложение На Java, хотя они и управились со скрипом с «современной-упрощённой-для-тупиц» курсовой работой. Эти студенты никогда не справились бы с курсом 6.001 в Массачусетском Технологическом, или с CS 323 в Йеле, и, честно говоря, это и есть причина, почему, с точки зрения работодателя, диплом Массачусетского Технологического или Йеля имеет больший вес, чем диплом Дюка, который недавно стал Полностью-На-Java, или Penn University, который заменил Scheme и ML на Java, пытаясь преподавать на ней курс, который когда-то почти убил меня и моих друзей, CSE121. Дело не в том, что я не хочу нанимать умных ребят из Duke или Penn — я нанимаю их — просто мне гораздо сложнее понять, кто они. Раньше я мог сказать, что парень действительно умён, если он за несколько секунд может разобраться в рекурсивном алгоритме, или реализует функции, манипулирующие связными списками на основе указателей, с такой скоростью, с которой он может писать на листе бумаги. Но в случае выпускников школ Java я не могу сказать, имеет ли претендент проблемы с этими задачами, потому что у него просто не хватает соответствующего образования, или потому, что у него нет соответствующей части мозгов, необходимой для отличной работы в качестве программиста.


Tools update

Freemind has been forked off to Freeplane. Not sure which project is better, but I guess the *plane deserves looking into.
Currently I have some troubles with Freemind as our team moved to 0.9.1 while I am still using some 0.8.x release (ubuntu repos do not offer me any newer ones).
Well, I am not that sure that Freeplane would help me with that version clash, but it's still worth a try. 

CodeBubbles : one of the weirdest Java IDEs I've ever seen. I was thinking towards something similar, yeah (as many others of course did)...
This looks quite like some middle ground between textual and visual programming language representations. Some visual weirdos were proposed in academia but AFAIK none survived to wider use in the industry. At least there was a great taxonomy of PLs in wikipedia and a dedicated section on the visual PLs, which is an interesting read. Personally me thinks that some notation change might be very promising, as text does not scale up well, especially for specifications, code or any other interdependent, non-linear structures. This is of course completely open-ended area, with lots of usability/cognitive/ergonomics factors to take care of...

And of course the new Idea 10 is out. I'm a bit reluctant to upgrade as my licence to Idea 8 (which turned to be free license to Idea 9) would be kinda useless. Oh, I just shall wait till JetBrains offers a free upgrade to 11 from 10! Maybe some Scala or Velocity plugin upgrade would force me, but, the new 10 looks quite nice anyway, with lots of polyglot syntax closures and so on and on and on...

As for free project hosting: there's a BitBucket project which offers roughly as much as Unfuddle does, but with limit of 5 accounts not 2. Maybe BitBucket has only Mercurial support, while Unfuddle has git/SVN support? Not sure this is an issue though (for noobs hg/git is more demanding log-wise while svn is less forgiving merge-wise). Another consideration: BitBucket offers free unlimited hosting for OSS projects, while Unfuddle does not. BTW, Revelation (quite simple password management app) uses BitBucket, too. And yes, I know about assembla and google code options.