Archive for January, 2010

WinKey alternative – the search is over! Clavier+

January 23, 2010 4 comments

I’ve mentioned in the past how WinKey is slowly dying on newer Windows versions. This small but highly powerful Win+X shortcuts launcher was one of my most favorite ones for a long time ..

Win + F2   – Total Commander
Win + N    – notepad
Win + Down – minimize the window
Win + Q    – Firefox

Unfortunately, it’s support and development was abandoned by Copernic (I remember seeing a page on their site talking about that) so it started malfunctioning on Windows 7 RC that I’m running at home .. On Windows 2008 64 bits I couldn’t even install it.

Obviously, the time has come to find a replacement.

As I expected, it wasn’t easy – there are zillions of various launchers available but none of them supported simple Win+X shortcuts. Some required clicking with mouse (come on, my hands are already on the keyboard – I don’t want to take them away to grab a mouse just to launch an application!), some were too complex, some were plain ugly.

I think RocketDock, True Launch Bar, and Launch-n-Go were the best candidates but ..
I was looking for an exact WinKey replacement and none of them could deliver that.

Eventually, it struck me to not to search for “keyboard shortcut launcher” but for “WinKey alternative” which brought HoeKey and Clavier+ right away.

Of those two – Clavier+ is definitely the best option:


All right !.. I get my Win+N back. What a relief, really.
It also allows to paste a block of text so with Ctrl+Shift+E I can quickly paste my work e-mail which is quite handy, of course (sending e-mails to myself is something I do a lot)

Categories: PC

So .. Why Twitter?

January 23, 2010 Leave a comment

So .. Why Twitter? – my attempt to answer the question (surprisingly, still being asked!)
Please, vote up if you find it useful.

Categories: Web Tags:

Searching for classes inside *.jar files

January 13, 2010 Leave a comment

Just a quick tip about searching for classes inside *.jar files.
TC rocks! I was introduced Agent Ransack today but .. nothing beats good old Alt+F7 🙂



Categories: Java, PC Tags: ,

Browser keyworded searches

January 9, 2010 3 comments

There’s one thing I’m (probably) using no less than a search in a browser and that is keyworded search. It surprised me one day that even some geeks are not familiar with it so here it goes …

The idea is simple – launch your favorite search using a keyword.

For example, to translate a word I’m typing “tr word” in browser’s address bar and go to translation site, “d git” takes me to my delicious “git” tag and with “you prodigy” I’m going straight to YouTube to watch some Prodigy videos.

It works amazingly fast and I usually have about a dozen of keywords set up.

You can set up a keyword in Firefox by right-clicking a search box and choosing “Add a Keyword for this Search”:



It’s a bit trickier to do in Chrome (which even made me think it’s not possible) – you right-click an address bar and choose “Edit search engines”:



The way it works – one needs to specify a search URL in Chrome (for some sites Chrome is trying to guess and add a search engine automatically which I think is kind of stupid – the Firefox way is way better here, it doesn’t guess anything but provides a query URL for you so there’s no need to know it):



In order to know a query URL I typically search for “aaaa” and copy the resulting address (most searches are GET requests – keyworded searches don’t work with POST ones, why not having “Send POST request” checkbox?):





In the URL textbox I replace my lovely “aaaa” with “%s” and that’s it!

Some of my favorites:

Chrome is also displaying a search engine that is going to be used (after typing a keyword):


    Categories: PC, Web Tags: ,

    Artifactory 2.1.3 upgrade

    January 9, 2010 2 comments

    I was waiting for Artifactory 2.1.3 upgrade since it includes a long-waited feature of being able to set an include and exclude patterns on virtual repositories.

    Finally, I’m able to stop Maven and Artifactory from looking in external repos for our company’s snapshots updates. Setting an exclude pattern of “com/company/**” on “remote-repos” does the job. Great!

    Also, I’ve started to use another neat feature (that was introduced in version 2.1) of being able to move artifacts to another repository. I’m not sure JFrog developers had my scenario in mind when they were working on it (they crafted it for staging and promotion – we’re not there yet .. ) but here it goes: from time to time it’s time to cleanup all old snapshots and start from day zero. I mean – re-build everything from scratch as if there were no yesterday’s snapshots in the company’s repository manager. Since we rely on snapshots heavily (create hundreds of them in different products) the good question is – are we still able to create all artifacts having absolutely no snapshots in the repository? Is our build order correct? Do we have any cyclic dependencies (that are perfectly hidden when they’re always yesterday’s snapshots to use)?

    One way to answer this question is remove all snapshots from Artifactory and fire up the Hudson jobs that create all our products. If build order is wrong (and when there are many products built with different layers of “infrastructures” developed by different teams – it’s not that hard, really) – the job will fail. Since it has no “yesterday’s” snapshot to rely on. So it either works or it doesn’t.

    I did it couple of time (still thinking of a way to do it automatically on a nightly basis – any suggestions here?) but what stopped me from doing it more frequently is I was simply afraid of deleting all old snapshots. What happens if some important snapshot was deployed once and I’ll find out I really need it after deleting it ?

    Not any more since Artifactory 2.1!

    After all – we have something called “Recycle Bin” since Windows 95 so I’ve created a standalone repository called “trash” that is not part of virtual repo in Artifactory (that are viewable to people in the company) and I move all old snapshots there first. That’s it!

    I think it’s a critical check for any complex product since each time we do it – we find out our build order is slightly wrong and we do have cyclic dependencies here and there (with ~300 POMs spread all over SVN tree – you can’t monitor each of them).

    Now, Hudson integration is coming next!

    It’s a big thing, of course, but makes me give up on Maven’s deployment mechanism and rely on Hudson’s one. So far I’ve tried to keep our Hudson jobs as simple as possible without any additional steps (except invoking other jobs) so that all “build” logic will be stored in POMs for people to see it. If it’s spread between Maven and Hudson – my assumption is that it will be harder for people to see “how it works” and “what’s going on here” (questions I’m already asked a little bit too often).

    But .. They way Hudson does a clean deploy to Artifactory will all metadata uploaded really makes me re-consider this approach and make our Hudson jobs “heavier”. This time it’s worth it, I think.

    Some more recent Artifactory tips:

      Since version 2.1.3 Artifactory became even more stricter regarding POM’s “health status”. It’s good JFrog folks care a lot about what is stored inside Artifactory and work really hard not to allow any garbage “in”.

      After making an upgrade some of our builds failed since it appears there are some pretty old POMs that have UTF-8 byte issues and Artifactory isn’t willing to serve them any more (they were already inside the storage but couldn’t be downloaded by Maven).

      To fix that I had to:

      • Download POMs manually from repo1
      • Remove some characters in developers names XML parser was complaining 
           about (no offense, guys)
      • Save them as “UTF-8 + BOM” in EditPlus
      • Delete old copies that were already stored in Artifactory 
      • Deploy new “fixed” copies instead

      Here are the POMs that were fixed that way (updating our <dependencies> to rely on newer <version> didn’t help – those dependencies hardcoded somewhere deeper, inside Maven itself):

      Categories: Artifactory, Maven Tags: