October 22, 2010

Cat all files in directory

$ cat catall 
for i in $(ls -rt1 `find -type f`);
do
# type file name in red color
echo -e "\033[31;1m$i\033[0m"
cat $i;
done;


This script won't work for files with whitespaces within their names

June 19, 2010

Just a reminder

Always investigate the error messages.

June 16, 2010

Google Closure menu with one selected item

Google Closure provides some UI widgets which you can use on your pages. One of such widgets is a menu widget.

In short, to produce a menu you'd need two pieces of code:

Here is an HTML piece:

<ul id="menu">
   <li class="goog-menuitem goog-option" id="item1">Item 1</li>
   <li class="goog-menuitem goog-option" id="item2">Item 2</li>
   <li class="goog-menuitem goog-option" id="item3">Item 3</li>
</ul>

And here is a JavaScript piece using Closure Library:
var menu = new goog.ui.Menu();
menu.decorate(goog.dom.getElement('menu'));


This will produce a menu which will maintain styles and dispatch events. The goog-option class makes menu items selectable. When a user clicks on an any element, the clicked element will get goog-option-selected style.
But when a user clicks on another item, that item's element will get this style too and you will end up with two selected elements. This is the default behavior and it is suitable for most of menu-like cases.

But what if you have a menu with single-select options, like a plain old HTML radio-group?
Then you need to handle selected items manually. I chose to implement a menu listener to manually deselect all previously selected elements:


goog.events.listen(menu, goog.ui.Component.EventType.ACTION, function(e) {
   /** @type {string} */
   var text = goog.dom.getTextContent(e.target.getElement());
   menu.forEachChild(function(c) {
       if (c != e.target) {
           c.setSelected(false);
           c.setChecked(false);
       }
   });
   caption.getElement().innerHTML = text;
} );

June 15, 2010

A script to compile Google Closure based project

Here is my script to build Google Closure based project: << EOF
#!/bin/sh

function showHelp() {
echo "
Usage:
$0 MAIN_JS_FILE [MODE];
MAIN_JS_FILE - A JavaScript file to compile.
MODE - If set to \"debug\" will omit compilation step and produce human readable script. This mode will not perform any checks on your JS code
Examples:

Compile in debug mode:
./compile.sh js/test.js debug

Compile with javascript checks and optimizations:
./compile.sh js/test.js
";
}

test -z "$1" && echo "MAIN_JS_FILE is required" && showHelp && exit 1;
test -f "$1" || echo "MAIN_JS_FILE is not a file" && showHelp && exit 1;

export dir=..
export compiler=$dir/compiler.jar
export closureLibraryHome=$dir/closure-library/closure
export calcdeps=$closureLibraryHome/bin/calcdeps.py
export target=./www/compiled.js

export mode="compiled"
test "$2" == "debug" && export mode="script"

echo running in $dir in $mode mode

python $calcdeps -i "$1" -p "js" -p "$closureLibraryHome" -o $mode --output_file="www/compiled.js" -c "$compiler" -f "--js_output_file" -f "$target" -f "--compilation_level" -f "ADVANCED_OPTIMIZATIONS" -f "--warning_level" -f "VERBOSE"

EOF

January 10, 2010

How to find find directories in Java?

FileUtils from commons-io doesn't helps you, when you want to find a list of directories.
Check out the commons-vfs library. The FileObject.findFiles can do that.

December 7, 2008

mplayer remote control with k750i

mobile phone + bluetooth = remote control

In order to pair my phone with computer I've used "Bluetooth Applet" that comes with Ubuntu Desktop. Of course, I was dreaming that everything will work form that point: I will move joystick on the phone to the right and mouse cursor will move to the right too. But of course it didn't.

I've been looking through Google search results and realized that a bunch of programs were written to perform this task. I don't remember all of them, but I chose anyRemote and it had the work done.

I've installed java client on my phone. Just used Bluetooth Applet to send /usr/share/anyremote/client/anyRemote.jar to my phone.

Then I've run
anyremote -f /etc/anyremote/Server-mode/mplayer.cfg

From my phone I've started anyRemote, searched for any server and connected.

Thats all. Now I am using my phone as remote control for my PC. I can control video playback, toggle fullscreen mode and open new video files.

October 24, 2008

Building Ion3 under Cygwin

You'll need Ion3 sources, Lua sources.

Building and installing Lua
$ make generic
$ make mingw
$ make install
$ cp src/lua51.dll /usr/local/bin/lua51.dll


Building and installing Ion3
First you need to configure system dependent parameters.
Uncomment following lines in system.mk file:

BIN_SUFFIX = .exe
...
PRELOAD_MODULES=1
...
EXTRA_LIBS += -lintl
...
DEFINES += -DCF_NO_GETLOADAVG


And comment this line:
EXTRA_LIBS += -lrt

Now we are ready to compile and install Ion3 under Cygwin
$ make && make install

Since symbolic links in Cygwin replaced with Windows shortcuts, Ion3 cannot find look.lua and will start without decorations.
To fix this you can copy look_newviolet.lua file in look.lua:

$ cd /usr/local/etc/ion3
$ cp look_newviolet.lua look.lua




Running X server with Ion3
To run X server with Ion3 as window manager I used this bash script:

X -nodecoration -keyhook -clipboard > /dev/null 2>&1 &
ion3 -display :0.0