Donnerstag, 29. Oktober 2015

Color vi editor

To get a colored vi editor create a .vimrc in your root folder with the following content:

syntax on
colorscheme desert





Mittwoch, 28. Oktober 2015

Using sublime in MacOSX or Linux terminal

To use SublimeText editor within your console just create a link like

ln -fs /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl    /usr/local/bin/sublime

and from now on you could use Sublime in your console like this

andre ~$ sublime .bashrc 

Mittwoch, 21. Oktober 2015

set file.encoding in a JVM

To set the default file.encoding in a JVM you could set it in the JVM startup as -Dfile.encoding=UTF-8 or in JAVA_TOOLS_OPTIONS with the same part. But if you want to set it programmatically after the JVM already started?
A System.setProperty("file.encoding", "UTF-16"); will only set the file.encoding property. All other classes which rely on the defaultCharset, like all Streams and Buffers won't recognize that change. Here is a Junit Test, which shows you how to reset the Charset.defaultCharset field:


package de.kambrium;

import java.lang.reflect.Field;
import java.nio.charset.Charset;

import org.junit.Before;
import org.junit.Test;

public class CharsetTest {

    @Before
    public void setUp() throws Exception {
    }

    @Test
    public void test() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        dump("Actual system config");
        System.setProperty("file.encoding", "UTF-16");
        dump("Config after System.setProperty(\"file.encoding\", \"UTF-16\")");
        Field cs = Charset.class.getDeclaredField("defaultCharset");
        cs.setAccessible(true);
        cs.set(null, null);
        dump("Config after manipulating defatulCharset field");
    }

    private void dump(String msg) {
        System.out.println(msg);
        System.out.println("****************************************************************");
        System.out.println("file.encoding          = " + System.getProperty("file.encoding"));
        System.out.println("defaultCharset         = " + Charset.defaultCharset());
        System.out.println("****************************************************************");
        System.out.println("");
    }
}


Output will look like this

Actual system config
****************************************************************
file.encoding          = UTF-8
defaultCharset         = UTF-8
****************************************************************

Config after System.setProperty("file.encoding", "UTF-16")
****************************************************************
file.encoding          = UTF-16
defaultCharset         = UTF-8
****************************************************************

Config after manipulating defatulCharset field
****************************************************************
file.encoding          = UTF-16
defaultCharset         = UTF-16
****************************************************************

JUnit in eclipse

Running JUnit in eclipse shouldn't be a problem. I run into a

java.lang.NoSuchMethodError: org.junit.runner.Description.getClassName()Ljava/lang/String;

while using a bunch of projects in eclipse. Reason for that error was a project, which has an older version of Junit in his build path. Removing the old ref solves the problem.