2010-11-11

Epic HR Facepalm

Да, такого треда я еще не видел. Оказывается джависты реально народ не особо культурный. Ладно еще HR-девушка не подумавши написала сообщение в канале с парой сотен девов. Но такой эпический троллинг - это, конечно, ну очень нехорошо (с точки зрения разрабов, которые в этом всем участвовали). Ссылку на протокол чата даю по требованию - неохота чтоб такое расползлось по сети, ага.

2010-11-07

Data URI scheme

Oh, looks like it's possible to embed small background images and other whatnot directly into the CSS url() file references. This might be used to base64-encode some pack of 2kbyte gifs or something similar, reducing the http request chaining. INHO it's more sane to use one gif with all required images (as they're small it's possible to stack them to one image), and then pose offsets via css (JQuery-UI did that for the icons quite nicely).

LLVM

LLVM :: JIT + RISC-ish bytecode + native compiler + whole lot more
This looks like Java on the assembly level. With direct memory access and no sandboxing. :)

2010-10-27

Java Developer CV/Resume Update


given recent spike in HRs' interest, I've updated my CV, it's now available as google document:

Please let me know if you have any problems accessing it.

2010-10-11

URLConnection HowTo

This subject is pretty often asked here and the Sun tutorial is too concise about the subject. So I thought, let's post a CW question and answer about this so that it can if necessary be referenced in other topics. Others are of course free to add more hints and best practices here.

2010-09-30

Java-Erlang Bridging

...couple of relevant resources on this matter...
Java and Erlang are not mutually exclusive, they complement each other. I personally have learned to embrace both because very few complex business problems can be modeled exclusively from an object oriented or functional paradigm. The solutions to these problems can be sequential or concurrent. Jinterface can cleanly divide (and conquer) a system into parts suitable for Java and parts suitable for Erlang.
There are two basic mechanisms for communicating with Erlang, described briefly here. Note that the two mechanisms are not intended to be used together. Which mechanism you choose depends on your application and the level of control it needs.

You can use OtpNode, which can manage incoming and outgoing connections for you. With OtpNode a thread is automatically started to listen for incoming connections, make necessary outgoing connections, and dispatch messages to their recipients. OtpNode supports the concept of mailboxes, allowing you to have several Java components communicating independently with Erlang.

If you need more control (but less support from the library), you can manage connections yourself using the OtpSelf and OtpConnection classes, in which case you can control explicitly which connections are made and which messages are sent. Received messages are not dispatched by OtpConnection.

The classes OtpPeer, OtpSelf and OtpServer are used to represent OTP nodes and are neccessary in order to set up communication between the Java thread and a remote node. Once a connection has been established, it is represented by an OtpConnection, through which all communication goes.

2010-07-23

Oracle is reviewing SUN product roadmap and...

Oracle is reviewing the Sun product roadmap and will provide guidance to customers in accordance with Oracle's standard product communication policies. Any resulting features and timing of release of such features as determined by Oracle's review of roadmaps, are at the sole discretion of Oracle. All product roadmap information, whether communicated by Sun Microsystems or by Oracle, does not represent a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. It is intended for information purposes only, and may not be incorporated into any contract.
Да, я-то давно знал что Oracle купила SUN, но сказать мне по этому поводу было нечего. Теперь, собственно, тоже нечего: понятно что и ребрендинги и уходы гур будут происходить в такой ситуации... 

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

SUN's JDK on Ubuntu Lucid Lynx



sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo apt-get update
sudo apt-get install sun-java6-jdk sun-java6-plugin sun-java6-source

2010-07-07

Combobox alternatives

The Dropdown Check List jQuery widget transforms a regular select html element into a dropdown checkbox list.
The box on the left contains the original HTML, while the box on the right shows the same element initialized with the Linkselect plug-in.
enjoy simple dropdown menus with pop!, an unobtrusive javascript plugin for jquery.

The most fitting for me now is that simplistic pop! thing, as I need something quite specific, not a combo, really, a pair of radio groups which are rendered as a small sentence after user updates selection.

2010-06-28

Build Tools : Proguard

ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. It detects and removes unused classes, fields, methods, and attributes. It optimizes bytecode and removes unused instructions.
The proguard-maven-plugin is maven2 plugin to execute ProGuard
© Maven proguard Plug-In - Overview;
Configurable, easily mavenizable, recommended.

The Maven Way (continued)

I am trying to migrate a Java application built by Ant to Maven2. among other the build perform the following operations: 1) Running a javadoc doclet to find annotated Java files to be externalize later as web services 2) compile a small part of the code for step 3 3) run Axis java2wsdl on the compiled code from step 2 4) produce java code with wsdl2java on the wsdl files from step 3 5) compile the entire code when trying to "mavenize" the process I can accomplish each task at a time but fail to achieve them all in that order.
Steps 2-3/4 sound like they should be in a separate module. If you move them to a separate module (or two) you can leave things like the compiler plugin bound to the compile phase. By trying to keep things as a single module you are fighting Maven.... and that is not "the Maven Way"... you will have a much easier time if you give in and put them in a separate module.
© Re: How to perform ordered tasks in Maven2 build;
В самом деле, этот функционал уже два с половиной года делают (притом регулярно порядок выполнения плагинов менялся, я сам обжегся при переходе на 2.0.9). Скорее всего любая идея по реализации упорядоченного выполнения плагинов вызывает такие бурления в среде разработчиков, что ничего определенного (пусть бы и не такого умного как антовские зависимости таргетов) не будет еще очень долго. Даже этот тред весьма показателен: после совета в нижней цитате ничего дельного не сказали - но пофлеймили очень хорошо.

В общем, мое мнение в целом не поменялось - "плакали, кололись, но продолжали...". Ничего лучше интегрированного с метаданными проекта и зависимостей пока вроде бы не придумали. Достаточно сделать в продукте несколько killer features, и несколько достаточно серьезных просчетов в юзабельности можно попросту игнорировать.

IntelliJ project metadata sharing practices

Since *.iws file stores your personal preferences, it should not be placed under version control. On the contrary, the project and module files (*.ipr and *.iml) store project-wide settings, and should be shared.
The files that store local settings (workspace.xml and tasks.xml), should not be placed under version control. All the other settings files should be shared.

2010-06-27

Lingering Close and Http 1.1 Expect: continue

Необходимо заметить, что ограничение размера числом больше 1M будет работать не всегда. Дело в том, что около 20% всех запросов выполняется через прокси-сервера Squid, в которых по умолчанию стоит ограничение на 1M (директива request_body_max_size) и его очень редко меняют. В отличие от Apache Squid после передачи сообщения о 413 ошибке сразу же закрывает соединение.

В стандарте HTTP/1.1 для закачивания файлов предусмотрен заголовок браузера "Expect: continue", в ответ на который сервер может вернуть сообщение об ошибке или же ответить кодом "HTTP/1.1 100 Continue", после чего браузер может передавать тело запроса. Однако ни один из современных браузеров это не поддерживает.

2010-06-12

Swing Hacks

Swing Hacks will show you how to extend Swing's rich component set in advanced and sometimes non-obvious ways. The book touches upon the entire Swing gamut-tables, trees, sliders, spinners, progress bars, internal frames, and text components. Detail is also provided on JTable/JTree, threaded component models, and translucent windows. You'll learn how to filter lists, power-up trees and tables, and add drag-and-drop support.

Swing Hacks will show you how to do fun things that will directly enhance your own applications. Some are visual enhancements to make your software look better. Some are functional improvements to make your software do something it couldn't do before. Some are even just plain silly, in print only to prove it could be done. The book will also give you give you a small glimpse of the applications coming in the future. New technology is streaming into the Java community at a blistering rate, and it gives application developers a whole new set of blocks to play with.

2010-05-28

Steve Ballmer

Steve Ballmer has been CEO of Microsoft since 2000. During his tenure, Microsoft came out with Windows Vista, perhaps the most unsuccessful operating system in modern history (Windows ME doesn’t count, since Microsoft’s core customer base was using NT/2000); it tried a “Microsoft inside” strategy in digital music and, when that failed, launched the Zune, which also failed; it watched Firefox (and Safari and Chrome) eat a large chunk of its lunch in Internet browsers, the application most people use more than everything else put together; it launched Windows Live, a marketing strategy with no noun behind it, which completely flopped at whatever it was supposed to do; it got blown away in Internet search to the point where it had to re-launch as Bing, a plucky underdog; and in mobile phones, which everyone has known for a decade would be the next big thing, it stuck with its bloated, awkward Windows Mobile for far too long, letting everyone (RIM, Apple, Google, and even Palm) pass it by to the point where it has no customer base left. (BlackBerry rules the corporate market, Microsoft’s traditional stomping grounds.) Recently I saw a headline saying that Microsoft is going to try to relaunch Hotmail to make it cool. Really, why bother?

2010-05-23

Ubuntu Music Store

In Ubuntu 10.04 LTS we have launched a new music service called the Ubuntu One Music Store. It's a really cool place to go and buy tracks from the world's biggest bands. The Ubuntu One Music Store is a cloud-enabled digital music store. Purchases are first transferred to your Ubuntu One personal cloud and then automatically downloaded to all of your computers. We give all customers 2 GB of free cloud storage.

To contribute to the charity all you have to do is buy a track at the normal cost. That's it. Canonical will give away 50% of our take of the revenue up to a total of $1004. You can of course directly contribute to the charity if you prefer.
...удивительно. Похоже ОС как сервис - этот тренд надолго и всерьез. Хорошо хоть убунту пока держится - не навязывает AppStore-подобных решений (хотя что-то подобное потихоньку появляется, как я понимаю). Вот, сначала советуют откуда мне музыку качать (и как ее хранить), а потом traceroute придется за деньги ставить. :)

2010-05-22

Log4J supports SMTP+SSL appenders?..

Since 1.2.16, SMTP over SSL is supported by setting SMTPProtocol to "smpts".

Oh, I just googled the idea : email any critical (and/or) improperly handled exception which your application raises. Criticals go immediately while mishandled ones get cached for a while before firing out. Seems that SMTP appender does that priority throttling and also supports SSL. Could it be any better? More related discussions on that below (assuming your webapp uses Spring Web MVC).
Spring provides HandlerExceptionResolvers to ease the pain of unexpected exceptions occurring while your request is being handled by a controller which matched the request. HandlerExceptionResolvers somewhat resemble the exception mappings you can define in the web application descriptor web.xml. However, they provide a more flexible way to handle exceptions. They provide information about what handler was executing when the exception was thrown. Furthermore, a programmatic way of handling exception gives you many more options for how to respond appropriately before the request is forwarded to another URL (the same end result as when using the servlet specific exception mappings).
Instead of only redirecting to an error page, you could also put these exceptions in a database, so you have a list of the most common ones that occur. Joel and Jeff mention that they do this for StackOverflow, and that list becomes part of their bugs-to-fix list.

2010-05-19

Сбор требований

«Product owner (он же Product Manager) - это человек, отвечающий за разработку продукта»

Что не может не радовать. Скажем так — это здорово и очень правильно выделять роль product manager. Многие методологии запросто игнорируют аспект управления требованиями, предполагая, что они, непротиворечивые и полные, как бэ даны нам свыше.

Что, естественно, нихрена не так. И даже - ровно наоборот. Термин «сбор требований», иногда встречающийся в литературе — отражает это недопонимание. Требования — не грибы, чтобы лениво разгуливая по лесу, увидев его, сказать: «О! Требование!», сорвать, и положить его в корзину. Они больше напоминают редкоземельный металл, добываемый нечеловеческим, рабским трудом в «этих проклятых рудниках» (кхе-кхе).

2010-05-18

D. Agans : Debugging

When the pressure is on to root out an elusive software or hardware glitch, what's needed is a cool head courtesy of a set of rules guaranteed to work on any system, in any circumstance. Written in a frank but engaging style, Debugging provides simple, foolproof principles guaranteed to help find any bug quickly. This book makes those shelves of application-specific debugging books (on C++, Perl, Java, etc.) obsolete. It changes the way readers think about debugging, making those pesky problems suddenly much easier to find and fix.

Illustrating the rules with real-life bug-detection war stories, the book shows readers how to:
* Understand the system: how perceiving the "roadmap" can hasten your journey
* Quit thinking and look: when hands-on investigation can't be avoided
* Isolate critical factors: why changing one element at a time can be an essential tool
* Keep an audit trail: how keeping a record of the debugging process can win the day

FlockDB : Practices

Lessons learned
Some helpful patterns fell out of our experience, even though they weren't goals originally:

* Use aggressive timeouts to cut off the long tail.
You can't ever shake out all the unfairness in the system, so some requests will take an unreasonably long time to finish — way over the 99.9th percentile. If there are multiple stateless app servers, you can just cut a client loose when it has passed a "reasonable" amount of time, and let it try its luck with a different app server.
* Make every case an error case.
Or, to put it another way, use the same code path for errors as you use in normal operation. Don't create rarely-tested modules that only kick in during emergencies, when you're least likely to feel like trying new things. We queue all write operations locally (using Kestrel as a library), and any that fail are thrown into a separate error queue. This error queue is periodically flushed back into the write queue, so that retries use the same code path as the initial attempt.
* Do nothing automatically at first.
Provide lots of gauges and levers, and automate with scripts once patterns emerge. FlockDB measures the latency distribution of each query type across each service (MySQL, Kestrel, Thrift) so we can tune timeouts, and reports counts of each operation so we can see when a client library suddenly doubles its query load (or we need to add more hardware). Write operations that cycle through the error queue too many times are dumped into a log for manual inspection. If it turns out to be a bug, we can fix it, and re-inject the job. If it's a client error, we have a good bug report.

2010-05-01

Some of UI primitives

The Apple Human Interface Guidelines officially refer to it as the "spinning wait cursor". Its colloquial names include "spinning wheel of death", "beach ball of death", "hypnowheel", "spinning pizza", "spinning pinwheel", "pinwheel of death", "rainbow ball of doom", "the beach ball of hell", "spinning beach ball of death", "pin wheel of death", "rainbow wheel of death" and "marble of doom". The suffix "of death" in these names is a reference to Microsoft Windows' Blue Screen of Death (BSOD), which also leads to the acronym "SPOD" for "spinning pinwheel of death" or "spinning pizza of death," commonly used in mailing lists such as Mac-L. The suffix 'of doom' is also commonly used.

2010-04-23

JQuery : Split button widgets

* easyui is a collection of user-interface plugin based on jQuery.
* using easyui you don't need to write lots of javascript code, you usually define user-interface by writing some HTML markup.
* easyui is very easy but powerful
jQuery UI features low-level effect and interaction API's (like drag and drop) as well as full-featured and highly configurable ready-to-use widgets.
© jQuery UI - Home;
Same here, link to the sources, and then the split-button sources (are part of button widget).

2010-04-20

NorduGrid : ARC : ISIS : Source

# ISIS - distributed information indexing, WS-based
/arc1/trunk/src/services/isis
Крайне сложно найти документацию. Похоже вся эта хваленая конвергенция заканчивается использованием неструктурированного пирингового меша в подсистеме индексации (мета?)данных. С этим срочно надо что-то сделать. :)

2010-04-17

Муки Выбора

As previously mentioned, the Mini 5101 features a rugged anodized aluminum display enclosure with a black, brushed metal finish and a magnesium alloy chassis. The metal construction really gives the Mini 5101 the feeling of being a premium ultraportable notebook rather than a typical netbook.
From the first moment I picked up the HP ProBook 5310m to the last minute while writing this review I kept thinking, "Why didn't HP release this ProBook sooner?" Honestly, if HP had released this notebook at the beginning of 2009 then every other SMB notebook manufacturer would be running scared by now. Unfortunately, HP released several less-than-spectacular ProBooks before this one, and that will probably make some potential buyers overlook this excellent business laptop. The ProBook 5310m finally delivers on HP's original goal to create a more affordable EliteBook.
Долго разрывался между двумя моделями HP Mini 5101 (Intel Atom N280) и HP ProBook 5310m (Intel Celeron Dual Core SU2300). По приоритетам - живучесть, мобильность, удобство. Потом поглядел на возможность реюзнуть память из старой машины и наличие гипертрединга в Intel Atom - и решил таки попробовать Mini. Посмотрим как Mini сможет закрутить виртуалбокс с офисом и IntelliJ Idea. Заодно пригодится мое давнее знакомство с xUbuntu. Насчет amd не знаю, видел пару ultra-portable машинок, но что-то меня эта 64-битность настораживает. Все равно на мобильной системе столько памяти не будет чтоб ее адресовать 64мя битами. Хороший бенчмарк производительности разных архитектур можно поглядеть по ссылке ниже, а по тепловыделению и энергоемкости можно поглядеть на самом сайте Intel.
Below is an alphabetical list of all CPU types that appear in the charts. Clicking on a specific CPU will take you to the chart it appears in and will highlight it for you.

2010-04-13

Styling upload inputs

Fortunately, reader Michael McGrady invented a very neat trick that allows us to (more or less) style file upload fields. The credits for the solution presented on this page are wholly his, I only added the position: relative, a few notes and tests, and ported it entirely to JavaScript.
The problem is I want to use Ajax Upload or something similar to allow the user to click what looks like a button and see the File chooser appear. This works by placing an invisible file-input element under the mouse. I have managed to change the script to allow you to TAB to the hidden file-input element and for this to trigger a CSS change so the fake button looks like it has focus, the upshot being that, on browsers other than IE7, it looks to the user as if you can tab to the button and activate it as you would expect.

2010-04-08

Velocity + Spring = ISO-8859-1

Try to add in your dispatcher-servlet.xml, at viewResolver bean definition a contentType definition like this:
<property name="contentType" value="text/html; charset=UTF-8" />
...
I'm such an idiot.
Вообще говоря, не странно, что человек чувствует себя идиотом: пять разных способов настроить одну и ту же фиговину, четыре самых очевидных из которых почему-то не работают. С мавеном иногда бывает даже хуже, три пути - либо без него и не очень удобно, либо так как тебе нужно и очень сложно, либо "так как принято" и очень тупо.

2010-04-03

Expander Exaggerations

Now don't get me wrong, the Zig-Zag Product is swell, it's Annals of Math-worthy, and it's inspired a lot of recent work, both in expander constructions and elsewhere (e.g., Reingold's SL = L theorem). However, the story I sometimes heard as to why it was cool was that it was the first explicit expander construction that was actually understandable; that you didn't have to know lots of deep number theory to verify the proof; that all other previously known constructions used zaniness like Weil sums, Ramanujan conjectures, Kazhdan constants and whatnot. But as you probably know, this is an exaggeration; it's really not so.

2010-03-26

Get Real

Want to build a successful web app? Then it's time to Get Real. Getting Real is a smaller, faster, better way to build software.

* Getting Real is about skipping all the stuff that represents real (charts, graphs, boxes, arrows, schematics, wireframes, etc.) and actually building the real thing.
* Getting real is less. Less mass, less software, less features, less paperwork, less of everything that's not essential (and most of what you think is essential actually isn't).
* Getting Real is staying small and being agile.
* Getting Real starts with the interface, the real screens that people are going to use. It begins with what the customer actually experiences and builds backwards from there. This lets you get the interface right before you get the software wrong.
* Getting Real is about iterations and lowering the cost of change. Getting Real is all about launching, tweaking, and constantly improving which makes it a perfect approach for web-based software.
* Getting Real delivers just what customers need and eliminates anything they don't.

ROWE motivation model

Career analyst Dan Pink examines the puzzle of motivation, starting with a fact that social scientists know but most managers don't: Traditional rewards aren't always as effective as we think. Listen for illuminating stories -- and maybe, a way forward.

2010-03-25

Log4J : Route specific category to dedicated logger

# ..even better, send it to a different appender. Note, however, that 
# this doesn't mean that any loggers from a lower level won't be used: 
# everything still inherits, so this new logger is used _in_addition_to_ 
# the loggers it would have otherwise already used.
log4j.category.com.johnmunsch=debug, socketLogger
I was always puzzled with this, the XML way seems to be more flexible. Generally this looks like a good run-through sample.

2010-03-23

Trusting a self-signed SSL sertificate

anton@arcano:/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/security$ sudo keytool -import -keystore cacerts -storepass changeit -alias cacert-root1 -trustcacerts -file ~/imported_root.crt


2010-03-13

Программисты: Эволюционный подход

Я тут смотрела фотки с нового года для детей сотрудников и поняла - основой нового общества станут программисты. То есть, как после атомного взрыва выживут тараканы и крысы, так после постмодернизма, "смерти взрослых", социетального кризиса и окончательного исчезновения реальности выживут программисты. Я практически уверена. Они будут господствующей разумной формой жизни на Земле, потому что, именно они обладают всеми признаками обеспечивающими выживание.

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

Converging grids and peer-to-peer computing models

Iamnitchi A. Foster I. Nurmi D.C. A Peer-to-Peer Approach to Resource Discovery in Grid Environments. // University of Chicago, 2002.
Foster I. Iamnitchi A. On Death, Taxes, and the Convergence of Peer-to-Peer and Grid Computing // Berkeley, CA: 2003. – p. 6.
Cai M. Frank M. Chen J. Szekely P. MAAN: A Multi-Attribute Addressable Network for Grid Information Services // Journal of Grid Computing. – vol. 2. – Mar. 2004. – pp. 3-14.
Jin H. Tao Y. Wu S. Shi X. Scalable dht-based information service for large-scale grids // Proceedings of the 5th conference on Computing frontiers. – Ischia, Italy: ACM, 2008. – pp. 305-312.
Papadakis H. Trunfio P. Talia D. Fragopoulou P. Design and Implementation of a Hybrid P2P-based Grid Resource Discovery System // Making Grids Work. – 2008. – pp. 89-101.
Albrecht J. Patterson D. Vahdat A. Scalable Wide-Area Resource Discovery // .
Basu S. Banerjee S. Sharma P. Lee S. NodeWiz: peer-to-peer resource discovery for grids // Proceedings of the Fifth IEEE International Symposium on Cluster Computing and the Grid (CCGrid'05) - Volume 1 - Volume 01. – IEEE Computer Society, 2005. – pp. 213-220.
Ranjan R. Harwood A. Buyya R. Peer-to-Peer Based Resource Discovery in Global Grids: A Tutorial // 2007.
Это библиография, местами неполная, по новым работам в области конвергенции пиринговых и грид-систем. Все в принципе находибельно в интернете, но собрать все это в небольшую кучку уже не так просто...

Первые четыре публикации - с реальными замерами на рабочих грид-системах, следующие три - некоторые теоретические изыскания с моделированием (тоже с цифрами и графиками, но вроде без развертывания). И последняя - обзорная - работа на 42 страницы, заимствующая детали (некоторых из) первых шести.

Distributed Systems Group

Research interests: Large-scale distributed systems with emphasis on designing, implementing and experimenting with algorithms, services and applications for large-scale networked-systems. In particular: self-organizing distributed systems,  system characterization for Grids and peer-to-peer networks, usage-aware resource management, data management in distributed scientific collaborations, social networks characterization, utility/cloud computing, social mobile applications.
© Adriana Iamnitchi

Our research is in large-scale distributed systems and distributed computing. In particular, we are designing decentralized mechanisms for resource management in large distributed systems and are interested in understanding the associated tradeoffs between performance and scale.
На страничке самой Адрианы куча интересных публикаций. Занятно...

2010-02-19

WebDAV resources

Lots of quite obscure experience shared - related to WebDAV implementation and web data management in general. >>>

2010-02-06

Apache Pivot

Apache Pivot is an open-source platform for building rich internet applications in Java. It combines the enhanced productivity and usability features of a modern RIA toolkit with the robustness of the Java platform. Pivot applications are written using a combination of Java and XML and can be run either as an applet or as a standalone, optionally offline, desktop application.

Like other modern development platforms, Pivot provides a comprehensive set of foundation classes that together comprise a "framework". These classes form the building blocks upon which more complex and sophisticated applications can be built.
see here the apache pivot's project page

Sun Web Application Guidelines

This document was created by a set of user interface designers, usability specialists, and visual designers, to outline a usable web application look and feel that can be followed consistently throughout a product line. We created it originally for use within Sun Microsystems, to be used for the web applications built here. However, we would like to share these guidelines with anyone else who may benefit from them for creating their own web applications. While some of the guidelines refer to Sun-specific elements and contexts, we are confident that you, the reader, will be able to interpret how they can be reapplied to your applications. We hope you find these guidelines valuable, and wish you success in creating your own powerful and highly usable web applications, building on these usability-tested and carefully designed guidelines.
see here for the full guide

2010-01-28

JQuery flash-free upload plugins

AJAX Upload Allows you to easily upload multiple files without refreshing the page and use any element to show file selection window. It works in all major browsers and doesn’t require any library to run. >>>, simple usage example: >>>

* Those below are not JQuery-dependent, but still quite interesting...

fileuploadarea Uses the new File API supported by Firefox 3.6. Enables you to target any html element and turn it into a hotspot for receiving files from the file explorer! Each file will be sent as a binary AJAX-request with customizable GET params. Includes support for callbacks to track the progress and completion of the file. >>>

LightLoader This employs a similar method to what is found in the GMail file upload, using a hidden IFRAME to post the file and AJAX to check the progress. There is also a tester script in the zip file for you to upload to your server to make sure that you have all the settings correct. Instructions are also in the zip file. >>>

* Couple of upload components with extended features and/or file management mix-ins, AFAICS require perl backend.

XUpload is an advanced upload progress bar indicator for web based file uploads written on Perl. XUpload lets you to accept file uploads on your website and shows upload progress bar which is showing upload progress in real-time. >>>

FileChucker is an AJAX-based web application that lets you accept file uploads on your own website. It's simple to install, packed with features, fully configurable, nice looking, and very handy for when you want to share files with anyone. And during uploads FileChucker shows a progress bar & table, so the user knows how much time is left before the upload is complete. >>>

2010-01-27

Bulk svn:ignore Idea's .iml files

Pay some attention to the line break just after the .iml, this one is required.
for t in *; do if cd $t; 
then pwd; svn propset svn:ignore "$t.iml
`svn propget svn:ignore`" .;  cd ..; fi; done;
Bash rules, yeah.

2010-01-18

Firewalled JMX Connection Resources

It came as a big surprise to me that JMX does not use a simple single-connection solution. There is a JNDI registry sitting on the port you use for connection from JConsole GUI, and that registry reports where to connect (via an arbitrary port). So there's no simple way to punch the firewall at one port and use JMX. There's even no simple solution to do that with two fixed opened firewall port. So here's some whereabouts regarding this issue.
  • Troubleshooting connection problems in jconsole. Did not read/use that one. Wireshark did the dirty work more or less. See here.
  • Extensive post on setting up JMX connection via single port, some amount of custom JVM prestart code is required. See here.
  • JManage - a simple Jetty-based JMX client allowing you to leave the transport on the node itself. Simple web-interface, idle for 4 years. See here.
  • CLI client for JMX. Stale, minimalistic, did not try this one. See here.
  • MX4j seems to provide some kind of CLI client, but I was unable to find any docs on that.
  • The most used syntax for JSR 160 might be (not sure as for the rmi part):
    service:jmx:rmi:///jndi/rmi://yourhost:13629/jmxrmi

2010-01-13

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 class, 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, It 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 uses BitBucket, too. And yes, I know about assembla and google code options.

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 class, 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, It 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 uses BitBucket, too. And yes, I know about assembla and google code options.