Git Tips & Trick part 1

Although we have an excellent tool for console based git repositories browsing called tig, there are situations where I need to check my repo logs using git lg command.
Default view is ugly, so, if you run a following command:

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit"

Your git lg output should looks very pretty:

Zrzut ekranu 2014-02-26 o 00.34.24

Tale of the Scala, Gradle and IntelliJ

How to import scala project based on the Grade build system into Intellij?
First thought, it’s easy. Use ‘scala’ and ‘idea’ plugins from the gradle repository.
Yes, it’s works but not that way as we suppose. First, it’s generates old project type for intellij (all in one file) Second, this solution doesn’t integrate with jetgradle (intellij plugin for gradle). Every change in the script file, requires run command line gradle task to refresh of the intellij project. Very annoying.

If you try to import project directly by Intellij, nothing will be compiled because JetGradle not created required artifact for the scala project. You can try add manualy scala artifact to the project but intellij shows missing dependency error:

Zrzut ekranu 2014-02-06 o 00.15.57I spent a lot of time trying to fix this issue. Finally, I found a way. Install Scala SDK from scala-lang.org into your $HOME/.scala directory. Then, you should add artifact not from “Project Structure” dialog, but directly by selecting Add Framework Support:

Zrzut ekranu 2014-02-06 o 00.16.28Next, enter path to the installed scala SDK in your $HOME/.scala

Zrzut ekranu 2014-02-06 o 00.23.13Ok, it’s works well, but unfortunately one issue still exists. Scala compiler and library isn’t taken from gradle script dependencies. Every time if you change version of the scala in gradle.build you should download exactly that same SDK into $HOME/.scala

For me, it’s really low price for possibility sharing IntelliJ project among multiple users.

 

Problem with Intel based backlight control on Ubuntu 11.10 and upcoming 12.04

If you have problem with backlight control, especially via function keys, following solution should fix your problem.

Edit default grub config file”

nano /etc/default/grub

Change GRUB_CMDLINE_LINUX variable to:

GRUB_CMDLINE_LINUX="acpi_osi=Linux acpi_backlight=vendor"

then execute:

update-grub

After system restart, backlight control works perfectly via functional keys.

Compiling GCC-4.7 on the modern 64bit Debian/Ubuntu systems

Here is my short tutorial about compiling the newest GCC (with C++-x0 features such as lambdas, shared_ptr, etc) on the modern Ubuntu/Debian systems. If you try to compile GCC in environment with multilib configuration (64 and 32 bit libraries deployed to different directories), compiler will stop on errors where 32 bit  libraries cannot be found. I browsed a lot of pages and I found  information about unsolved bug with compilation GCC by hand. Maintainers of the GCC compilers applied some patches to achieve correct compilation for previous versions of compiler in this environment. However, I don’t want to use this way, because I preferred a simple solution for now (next major release will include gcc-4.7).

Here is my quick fix. This only compiles gcc and g++ without bootstrap stages and multilib configuration (quite fast, by the way). Use the following switches:

./configure --prefix=/opt/gcc-4.7 --enable-languages=c,c++ --enable-threads=posix --enable-tls --enable-libgomp --enable-lto --disable-nls --disable-checking --disable-multilib --disable-bootstrap

then:

make -j(yours processors count)

Finally, it’s my first post in English language. If you find any mistakes feel free to send me feedback.

git fatal: write error: Broken pipe

Jeśli kiedykolwiek spotkaliście się z takim błędem podczas próby wysłania zmian na serwer to powodem jest zbyt mały http post buffer. Problem występuję tylko w przypadku komunikacji z repozytorium zdalnym za pomocą https. Do rozwiązania tego problemu, wystarczy zwiększenie rozmiaru bufora do na przykład 100 MB:

git config http.postBuffer 104857600

Refactoring in Ruby

Książka sądząc po tytule skierowana głównie do programistów piszących w języku Ruby. I tutaj miłe zaskoczenie, Ruby jest tylko ilustracją problemu. Opisy przypadków, które nadają się do refaktoryzacji zostały ujęte w uniwersalny sposób. Sztuka refaktoryzacji to poniekąd praca nad samym sobą. Jest trudna i wymaga sporej praktyki. Książka w przystępny sposób pokazuje kilkadziesiąt przykładów źle napisanego kodu, którego za pomocą refaktoringu możemy ulepszyć w dobrze zaprojektowaną całość.

Wiedza zawarta w książce  według mojej opinii nie dewaluuje  się w żaden sposób. Wręcz stałą się ona dla mnie pozycją do której zagląda się raz na miesiąc sprawdzając czy przypadkiem pisząc kod nie ulegliśmy pokusie pisania go w brzydki sposób.

Problemy z wydajnością Jenkinsa na Windows

Problem z przed tygodnia. Jenkis jako aplikacja uruchomiona z linii komend buduje projekty z pełną wydajnością. Natomiast ta sama instancja uruchomiona jako standardowa usługa Windows wykonuje zadania kilka razy wolniej.
Rozwiązaniem tego problemu jest w konfiguracji usługi Windows ustawienie dowolnego konta użytkownika istniejącego na danej maszynie.

Migracja Debian/Ubuntu z 32 bit na 64 bit

Przedstawiam prostą instrukcję jak wykonać migracje z 32 bitowego systemu na 64 bitowy. Sens migracji wedle mojej oceny, wydaje się być zasadny w systemach z ilością pamięci RAM większą niż 2GB. Pomimo istnienia mechanizmu PAE, użytkowanie systemu robi się nieco uciążliwe – szczególnie jeśli używamy wirtualizacji (domyślnie proces nie może za alokować więcej niż 2 GB). Kombinowanie w celu przesunięcia tej granicy do 4 GB jest tylko grą na czas, dlatego postanowiłem wykorzystać wbudowane  w dpkg mechanizmy ułatwiające migracje.

Procedura migracji

  1. Backup (o ile jest możliwość – zawsze coś może pójść nie tak)
  2. Zakładam, że partycja /home jest na osobnej partycji (jeżeli nie, to używamy osobnego dysku do zachowania danych)
  3. Kopiujemy na osobną partycje (w tym przypadku /home) dane z /etc i /lib/firmware (jeśli używasz kart z wymaganym firmware)
  4. Dodatkowo jeśli masz uruchomione jakiekolwiek serwery to zachowujemy zawartość /var
  5. Zrzucamy zawartość bazy zainstalowanych pakietów:
    dpkg --get-selections &gt; /home/packages

  6. Instalacja 64 wersji systemu na czysto (partycję /home montujemy bez formatowania – znacznik K)
  7. Przywracamy z kopii /lib/firmware i /etc/apt
  8. Ustawiamy parametry sieci i restart interfejsów
  9. Aktualizacji bazy dostępnych pakietów:
    apt-get update
  10. Zaznaczenie listy pakietów:
    dpkg --set-selections &lt; /home/packages
  11. Instalacja pakietów:
    apt-get <em>dselect-upgrade</em>