Tampilkan postingan dengan label linux. Tampilkan semua postingan
Tampilkan postingan dengan label linux. Tampilkan semua postingan

Februari 20, 2016

Multiple Go versions in Linux

Currently, there are trends on software development that tend to release their SDK on regular basis. Rust for example, also Go with 6 month release cycle. This predictable release is good and I personally like it since I can predict on features availability and use them for my software development project. The downside of this approach is there are many versions availablle that install them using OS package manager is proved to be pain in the ass.

Some of developers then create tools to manage multiple versions of the SDK, see GVM (Go Version Manager) and multirust (for Rust) for example. They are good of course but I probably choose not to use them since probably someday they won't be developed (see the latest commit if you want). My approach is simpler but only for Linux with Bash. If you use Windows, you may adopt my approach using SET to setup env variables and put them in batch file (.BAT). Explanation follows.

Directory Setup

I put all of my Go related software inside /opt/software/go-dev-tools. Here's the structure:


Directory Contents

I put Go SDK inside go, all Go related tools inside go-tools, liteide for LiteIDE, and tmp for temporary pkg dir whenever I want to compile and put Go tools inside go-tools.

Inside go-version (go1.2.2, go1.3.3, etc), I extract all of downloaded SDK from Go download page.

Environment Variables

In my $HOME/env dir, I created go directory to manage environment variables for my Go version. They usually have the same env variables, except for version pre 1.5, 1.5 (for vendor experimentation) and  1.6.

Pre 1.5 and > 1.6

$ cat ~/env/go/go1.2.2
GODEVTOOLS_HOME=/opt/software/go-dev-tools

GO_HOME=$GODEVTOOLS_HOME/go/go1.2.2
LITEIDE_HOME=$GODEVTOOLS_HOME/liteide
GOTOOLS=$GODEVTOOLS_HOME/go-tools

export GOROOT=$GO_HOME
export GOOS=linux
export GOARCH=amd64
export GOHOSTOS=linux
export GOHOSTARCH=amd64
export GOBIN=$GOROOT/bin

export PATH=$PATH:$GO_HOME/bin:$LITEIDE_HOME/bin:$GOTOOLS

alias go=colorgo$

1.5

$ cat ~/env/go/go1.5.3
GODEVTOOLS_HOME=/opt/software/go-dev-tools

GO_HOME=$GODEVTOOLS_HOME/go/go1.5.3
LITEIDE_HOME=$GODEVTOOLS_HOME/liteide
GOTOOLS=$GODEVTOOLS_HOME/go-tools

export GOROOT=$GO_HOME
export GOOS=linux
export GOARCH=amd64
export GOHOSTOS=linux
export GOHOSTARCH=amd64
export GOBIN=$GOROOT/bin

export PATH=$PATH:$GO_HOME/bin:$LITEIDE_HOME/bin:$GOTOOLS

alias go=colorgo

export GO15VENDOREXPERIMENT=1
$

Usage 
Open new shell - terminal, and source environment variables:

$ source env/go/go1.2.2
11:25:22-bpdp@archer:~$ go version
go version go1.2.2 linux/amd64
11:25:25-bpdp@archer:~$

Open another new shell - terminal, and source env vars:

$ source env/go/go1.6.0
11:25:59-bpdp@archer:~$ go version
go version go1.6 linux/amd64
11:26:01-bpdp@archer:~$

and so on.

Go Tools

When you see something interesting for your Go project, just go to /opt/software/go-dev-tools/tmp and the Go get them and copy the files inside /opt/software/go-dev-tools/go-tools:

$ cd /opt/software/go-dev-tools/tmp/
$ export GOPATH=`pwd`
$ go get github.com/smartystreets/goconvey
$ mv ../go/go1.6/bin/goconvey ../go-tools/
$ which goconvey
/opt/software/go-dev-tools/go-tools/goconvey
$

I don't know whether my approach is the best, but it proves to be comfortable for me. As always, YMMV. Happy hacking!












Oktober 21, 2013

Awesome Window Manager (3.5.2) and Java 7 GUI Problem

Some complaints have been reported about Java GUI (AWT/Swing) that does not behave correctly under Java GUI. This problem come in the form of empty contents in Java GUI window and also some weird behaviour in Java GUI menu (wrong cursor pointer position, menu doesn't want to display its contents without click and hold mouse button).

This problem usually only happens in some exotic non-reparenting window manager such as awesome, dwm, subtle, and probably others. I use only awesome so this is my experience in awesome window manager. Even when since release 3.5.x, awesome has become a reparenting window manager, the weird behaviour above still exists (the menu problem). Uncommit source code is not an option for me.

If you experience this, there are two things that can be done:
  1. Change JDK from Oracle JDK to OpenJDK. I tested with OpenJDK 2.4.2 (IcedTea) and Awesome 3.5.2. This works very well without any extra steps.
  2. Use wmname and execute "wmname LG3D" from shell before running Java GUI application. This option is needed if we use Oracle JDK. I tested this with Oracle JDK 1.7.0_u45.
If you want to use OpenJDK and are so awfully lazy to compile it by yourself (just like myself), you may grab the latest binary for Linux in OpenJDK unofficial build. This works very well.

Januari 16, 2012

Menggunakan awesome Window Manager untuk Keperluan Sehari-hari

Tulisan ini hanya sedikit sekali membahas tentang awesome Window Manager (http://awesome.naquadah.org/). Kalau mau mengetahui apa itu awesome, mengapa dibuat awesome, dan lain-lain yang lebih lengkap, ya ke 'rumah'nya saja. Tulisan ini barangkali tidak akan menarik bagi orang-orang yg tdk menyukai old school. Jika tidak mengetahui arti dari old school, ya berarti memang anda termasuk orang-orang yg tdk menyukai itu. hehehe ...

Saya pertama kali mengetahui awesome dari TL twitter-nya Zed Shaw. Berhubung orang ini memang termasuk freak, saya jadi ingin tahu tentang awesome. Fakta bahwa awesome meng-embedd Lua dan menggunakan Lua untuk konfigurasinya juga menarik perhatian saya.

Untuk menginstall, karena saya menggunakan Frugalware, ya cukup begini saja:
pacman-g2 -S awesome
Kalau memang mau install from scratch alias mengkompilasi sendiri, ya boleh juga. Setelah itu, akan muncul di menu display manager dan bisa dipilih saat akan login. Kalau tidak mengaktifkan display manager, cukup menuliskan berikut ini di file $HOME/.xinitrc:
exec /usr/bin/awesome
Catatan: sesuaikan letak dari binary executable di sistem anda.

Tampilan awal nanti akan seperti berikut ini:



Konfigurasi awasome diletakkan di /etc/xdg/awesome/rc.lua dan berupa script Lua. Pada konfigurasi tersebut, saya ubah terminal yang akan digunakan oleh awesome saat menampilkan manual page maupun saya mengeksekusi perintah. Terminal yang saya gunakan adalah mrxvt. sedangkan editor yang saya gunakan adalah vim. Berikut ini adalah bagian yang saya ubah:
-- This is used later as the default terminal and editor to run.
terminal = "mrxvt"
editor = os.getenv("EDITOR") or "vim"
-- editor_cmd = terminal .. " -e " .. editor
editor_cmd = "xterm -e " .. editor
Kondisi lainnya saya biarkan tetap default. Mengaturnya nanti kalau udah punya waktu untuk belajar lagi. Hehehe ... Hasilnya kurang lebih ya seperti ini:


Setelah itu tinggal menggunakan beberapa kombinasi tombol:
  1. [Windows start] + Enter = membuka terminal baru (mrxvt)
  2. [Windows start] + r = eksekusi perintah
  3. [Windows start] + j atau k = mengaktifkan window sebelum atau sesudahnya
  4. [Windows start] + m atau n = maximize window atau minimize window
Tombol [Windows start] di manual awesome adalah tombol Mod4. Tombol ini biasanya digunakan di SO Windows untuk mengaktifkan start menu. Tombol ini sebenarnya bisa diganti-ganti, cuman saya pakai ini karena kasihan tombol itu gak pernah disentuh. hahaha ...

Barangkali cukup itu dulu untuk sehari-hari. Enjoy awesome and become awesome! awesome - wm untuk #gali!