Bash function to switch Java versions

setjava() {
	local jdk=~/Applications/Java/jdk1.$1
        if [ ! -d "${jdk}" ]; then
                echo Jdk not found: ${jdk}
                return 1
        fi
	export JAVA_HOME=${jdk}
        export PATH=${JAVA_HOME}/bin:${PATH}
        java -version
}

I have symlinks for all major versions of Java so that in IntelliJ and the command line I can upgrade minor Java versions just by changing the symlink:

$ ls -la ~/Applications/Java/
total 20
drwxrwxr-x. 5 dan dan 4096 Mar 27 10:12 .
drwxrwxr-x. 8 dan dan 4096 Mar 27 10:13 ..
lrwxrwxrwx. 1 dan dan   11 Mar 27 10:12 jdk1.6 -> jdk1.6.0_45
drwxr-xr-x. 8 dan dan 4096 Mar 26  2013 jdk1.6.0_45
lrwxrwxrwx. 1 dan dan   11 Mar 18 13:55 jdk1.7 -> jdk1.7.0_51
drwxr-xr-x. 8 dan dan 4096 Dec 19 03:24 jdk1.7.0_51
lrwxrwxrwx. 1 dan dan    8 Mar 27 10:12 jdk1.8 -> jdk1.8.0
drwxr-xr-x. 8 dan dan 4096 Mar  4 11:18 jdk1.8.0

Then I can switch version by either just saying the major version:

$ setjava 8
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

or I can be specific about minor version:

$ setjava 6.0_45
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)

How to “login to windows for first time” or change password from Linux

smbpasswd -r YOUR.DOMAIN.COM -U YOUR_USERNAME

This will mean you don’t need to find a windows box every time your password expires if you only use say Outlook webmail in a windows environment.

How to list Active Directory controllers from Linux command line

nslookup -type=srv _ldap._tcp.dc._msdcs.YOUR.DOMAIN.COM

Error: Invalid or corrupt jarfile

I was creating a Jar via the Java API’s and I couldn’t get it to run my main class:

 $ java -jar foo.jar
Error: Invalid or corrupt jarfile foo.jar

Running it via the class path worked fine:

 $ java -cp foo.jar Bar
Hello world!

So now I knew it was something to do with the manifest file but it wasn’t being caused by

  • The 65535 file limit (See Zip64 and Java 7 ).
  • The 72 bytes limit per line
  • Missing newline at the end of the Main-Class (Displays “no main manifest attribute, in foo.jar”
  • A blank line before Main-Class (Displays “Error: An unexpected error occurred while trying to open file foo.jar”

So after scratching my head for a while I tried comparing a working jar with the failing jar:

$ unzip -lv foo.jar
Archive:  foo.jar
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
      75  Defl:N       75   0% 2014-02-17 16:01 b1eac370  META-INF/MANIFEST.MF
     825  Defl:N      464  44% 2014-02-17 16:01 942f187c  Working.class
$ unzip -lv foo.jar
Archive:  foo.jar
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
      75  Defl:N       75   0% 2014-02-17 16:01 b1eac370  /META-INF/MANIFEST.MF
     825  Defl:N      464  44% 2014-02-17 16:01 942f187c  Failing.class

So don’t prefix the META-INF folder with a slash! Also note it is case sensitive!

Shortcuts to position screens on ultra wide screens

left (Ctrl+Super+Left):

wmctrl -r :ACTIVE: -e 0,0,0,1280,1032

right (Ctrl+Super+Right):

wmctrl -r :ACTIVE: -e 0,1280,0,1280,1032

Git Config

[user]
        email = dan@bodar.com
        name = Daniel Worthington-Bodart
[color]
        ui = true
[alias]
        ci = commit
        co = checkout
        st = status -sb
        nuke = !git checkout -f && git clean -f -d
[push]
        default = simple

Ubuntu 13.10 Reset Panels

So after upgrading to 13.10 (clean install or upgrade) I seem randomly loose all the menus and icons on the top panels when using gnome session fallback.

Try this:

dconf reset -f /org/gnome/gnome-panel/

Wat? Scala (Infix Operator Precedence and Associativity)

Nat Pryce pointed out these gems:

Scala Reference 6.12.3

Precedence:
“The precedence of an infix operator is determined by the operator’s first character.”

Associativity
“The associativity of an operator is determined by the operator’s last character”

This actually made me cry.

Wat? Scala

As I got quoted recently in “Scala — 1★ Would Not Program Again” I though I finally should write up a little Wat moment we had recently:

So does anyone know “wat” the following Scala code returns? (Value and Type)

List(1,2,3).toSet()

A Set<Int> containing 1,2,3?

Nope how about I give you a clue, there are 2 bugs in this one line:

  1. A type inferencing bug where it chooses Set<Any>
  2. A bug where the brackets are used for both calling the Set.apply method and constructing Unit, notice there no space between the “toSet” and “()”

Yup you guessed it, it returns:

false

Wat? Try it in your repl and for even more fun check the bytecode out.

UPDATE:
Looks like (“-Yno-adapted-args”, “Do not adapt an argument list (either by inserting () or creating a tuple) to match the receiver.”) is your friend

Pete Kneller has done some really good analysis so you can see all the different weird combinations

Ubuntu 13.10 – Reset Gnome Panels

dconf reset -f /org/gnome/gnome-panel/
killall gnome-panel