Sunday, 18 October 2009

Notepad-compatibility for copy and paste in vim and gvim

Unfortunately, even us, Linux die-hards, get used to other OS conventions, such as copy-pasting with Control-C and Control-V. Maybe because in some other OS, by design, you need to spend hours copying and pasting.

In any case, if you want your Vim and GVim on your Linux box responding to Control-C and Control-V for these operations you need to map these key combinations to their internal counterparts, "+y and "+gP respectively.

In order to achieve this, you need just go to your home directory and add to the .vimrc file there the following three lines:

nmap <C-V> "+gP
imap <C-V> <ESC><C-V>i
vmap <C-C> "+y

A final piece of advice: use it with care! Copy/paste operations do not increase the amount of information but increase its size.

Friday, 2 October 2009

Five levels of purpose

I copy from another source because I want to keep them handy. Here are the five levels of purpose:

  1. Check present position
  2. Set goals
  3. Affirm priorities
  4. Forecast future position
  5. Create change

Too many open files in Alfresco

Recently, my Alfresco installation on Centos 5.3 started to behave randomly and some functionalities became suddenly unavailable. A quick view in the error logs showed a pattern, a string of "too many open file" complaints.

The reason is that there is a limit on the maximum number of open files a user may keep open. The user running Alfresco had just 1024 of them, too few, it seems, for its normal operations. You can check the number of open files allowed per user with the command

cat /proc/sys/fs/file-max

Increasing this value is simple: first, edit the file /etc/sysctl.conf adding a row such as

fs.file-max = 4096

Then, run 

sysctl -p

to make the changes in the file available. Then, finally, you will need to restart your Alfresco installation.


Sunday, 9 August 2009

Toggling keyboards in Xubuntu

I recently switched to Xubuntu from Ubuntu. I wanted to retain the ability to switch from ES to US keyboard by pressing my right control key. For this purpose, I created a new file at /usr/bin called togglekeyboard. The file contains:

#!/bin/bash
setxkbmap -option grp:switch,grp:rctrl_toggle us,es

us and es stand for US and Spanish keyboards. You will better know the id of your desired keyboard flavour.

Then, rctrl_toggle asks setxkbmap to toggle the keyboard on the right-control-key-pressed event. I chose this key as I am not using it for anything else. I got used to press the left control key for all properly controlish purposes. Other options that may suit you are:

  • toggle – right alt key
  • ctrl_shift_toggle – ctrl+shift
  • alt_shift_toggle – alt+shift
  • ctrl_alt_toggle – ctrl+alt
  • caps_toggle – CapsLock
  • lctrl_toggle – left control key
  • switch – switch while the right alt is pressed
  • lwin_switch – switch while the left Windows key is pressed
  • rwin_switch – switch while the right Windows key is pressed
  • win_switch – switch while the any Windows key is pressed

Thursday, 6 August 2009

Restricting access to PostgreSQL databases to users

I have created some postgres databases and I want given users to have access only to them (and no others) from any network. For that purpose, in the pg_hba.conf configuration file, under the IPv4 local connections header, I have created the following entries:

host all postgres 0.0.0.0/0 password
host all cjgb 0.0.0.0/0 password

These are the entries that provide unrestricted access to myself (impersonated by either the postgres or the cjgb user) as administrator of the database to connect to "all" databases from "0.0.0.0/0", this is, any host, provided I use the right password.

Access for the other users is restricted as follows:

host varios varios 0.0.0.0/0 password
host postgres varios 0.0.0.0/0 password
host riesgo_desviacion riesgo_desviacion 0.0.0.0/0 password
host postgres riesgo_desviacion 0.0.0.0/0 password

Users varios and riesgo_desviacion can only access tables varios and riesgo_desviacion (respectively) from any network if they provide the right password. I also had to grant them access to the postgres database (for reasons I still have to investigate, but that I am afraid stem from the fact that I mistakenly used the postgres database as template to create the new ones).

Monday, 27 July 2009

Write Matlab files without Matlab via Java and JMatIO

I had to interface a shiny new analytical suite built on KNIME with some legacy applications in Matlab we are unfortunately still using. This demanded exporting tables into Matlab's proprietary data format from Java.

I used the JMatIO library and everything worked like a charm. The following code snippet (taken from here) best illustrates the use of the library:

//1. First create example arrays
double[] src = new double[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
MLDouble mlDouble = new MLDouble( "double_arr", src, 3 );
MLChar mlChar = new MLChar( "char_arr", "I am dummy" );

//2. write arrays to file
ArrayList list = new ArrayList();
list.add( mlDouble );
list.add( mlChar );

new MatFileWriter( "mat_file.mat", list );

This is equivalent to the following Matlab code:

double_arr = [ 1 2; 3 4; 5 6];
char_arr = 'I am dummy';
save('mat_file.mat', 'double_arr', 'char_arr');

Neat, isn't it?

Friday, 24 July 2009

Adding external Java libraries to new KNIME plugins

Sorry, it is a blunt copy-paste plagiarism, but I needed to keep it written somewhere. Here it goes:

In order to add external jars to new KNIME plugins you need to: 

  1. Create a lib directory in your KNIME plugin.
  2. Copy the file(s) into the lib directory. (Java libraries are packed either as a zip or jar archive.)
  3. Edit the META-INF/MANIFEST.MF file with the "Plug-in Manifest Editor".
  4. Go to the "Runtime" tab and add all necessary libraries to the "Classpath" list on the bottom-right corner using the "Add..." button.
  5. Go the to "Build" tab and add the files to the list contained in the section "Extra classpath entries".
  6. Make sure that the lib directory is selected in both the "Binary Build" and "Source Build" list (in the same tab).

Finally note that adding jar files to the plugins build path, i.e. project context menu -> "Java Build Path" ->"Libraries" is not necessary.