15 Nov 2008

Umiem po arabsku - jedno słowo

Ostatnio się dowiedziałem, że się nie znam, a jako że arabski bardzo fajny język: Słowo "kochanie" wyraża się następująco:
  • do kobiety sie mowi: habibati
  • do mężczyzny: habibi
człowiek się uczy całe życie ;). Mi się mylnie wydawało, że mówi się "habibti" ;). Nawet tłumacz Google coś wymyślił zacytuje:

حبي

ale jak to mam przeczytać?

Perl i UTF + Locale

Czasami ja nie rozumiem jak działa Perl, dziś jest jeden z takich dni:


Oba kody robią to samo, jeden z localami drugi bez:
Code 1 - test.pl
#!/usr/bin/perl

use utf8;
use warnings;
use strict;
use locale;
#use POSIX q(setlocale);
#setlocale(&POSIX::LC_ALL, "pl");

# Uzywamy funkcji do kodowania/dekodowania
# utf8::encode($string);
# utf8::decode($string);

die "$0 testfile.txt" if scalar @ARGV <= 0; 

# pobieram caly plik
open( FH, '<', $ARGV[0] ) or die "Error: usage $0 file\n\n";
my $txt = do { local ($/);  };
close(FH);


utf8::decode($txt);
my @words = $txt =~ m/\w+/g;
map { utf8::encode($_) } @words;
print join(", ", @words)."\n";

Code 2 - test2.pl
#!/usr/bin/perl

use utf8;

use strict;
use warnings;

#use locale;
#use POSIX q(setlocale);
#setlocale(&POSIX::LC_ALL, "pl");
use open ':encoding(utf8)';
#use open ':locale';

die "$0 testfile.txt" if scalar @ARGV <= 0;

# pobieram caly plik
open( FH, '<', $ARGV[0] ) or die "Error: usage $0 file\n\n";

# tak samo jak use open 'encoding...'
#binmode FH, ":encoding(utf8)";
my $txt = do { local ($/);  };
close(FH);

my @words = $txt =~ m/\w+/g;
map { utf8::encode($_) } @words;
print join(", ", @words)."\n";

Wyniki:
$ locale
LANG=pl_PL.UTF-8
LC_CTYPE="pl_PL.UTF-8"
LC_NUMERIC="pl_PL.UTF-8"
LC_TIME="pl_PL.UTF-8"
LC_COLLATE="pl_PL.UTF-8"
LC_MONETARY="pl_PL.UTF-8"
LC_MESSAGES="pl_PL.UTF-8"
LC_PAPER="pl_PL.UTF-8"
LC_NAME="pl_PL.UTF-8"
LC_ADDRESS="pl_PL.UTF-8"
LC_TELEPHONE="pl_PL.UTF-8"
LC_MEASUREMENT="pl_PL.UTF-8"
LC_IDENTIFICATION="pl_PL.UTF-8"
LC_ALL=
$ cat input.txt
ęł@ąóąłð
łąśk
ala_ma_kota
$ perl test.pl input.txt
ęł, ą, ął, łąśk, ala_ma_kota
$ perl test2.pl input.txt 
ęł, ąóąłð, łąśk, ala_ma_kota

Tak na moje oko wyniki ze skryptu numer 2 są poprawne, ale dlaczego? Heh, czyżby ustawienie locali twierdziły, że ó nie jest litera słowa? No nie ważne, zapewne jakimś rozwiązaniem mogło by być ustawienie:
use POSIX qw(locale_h);
setlocale(LC_ALL,"pl_PL.UTF8");
ale mi się tego robić nie chciało :) Znalazłem tutorial o perlu i polskich znakach, może komuś pomoże - ja go nie stosowałem - w zupełności wystarczyła mi pragma use utf8;.

14 Nov 2008

Sun Java JRE/JDK 1.6u10 on Debian

Wszystko co robisz, robisz na własną odpowiedzialność - u mnie to zadziałało: Niedawno pojawiła się wersja 10 JDK 1.6 Suna, w Debianie nie mogę się doczekać paczki. A nowości w Javie są fajne: interfejs Nimbus, przepisany plugin do przeglądarki.
Chciałem zbudować Javę normalnym narzędziem, czyli fakeroot + make-jpgk w przypadku Javy, ale się nie udało bo to update 10 a nie 0-9. Nie dając za wygraną rozwiązałem problem, oto solucja:
apt-get install fakeroot java-package
Następnie, trzeba edytować pliki:
  • /usr/share/java-package/sun-j2sdk.sh
  • /usr/share/java-package/sun-j2re.sh
dodając do nich:
w przypadku pliku: /usr/share/java-package/sun-j2sdk.sh
## To odnajdujemy:

        "jdk-6u"[0-9]"-linux-i586.bin") # SUPPORTED
            j2se_version=1.6.0+update${archive_name:6:1}${revision}
            j2se_expected_min_size=130
            found=true
            ;;

## A to dodajemy:
        "jdk-6u"[0-9][0-9]"-linux-i586.bin") # SUPPORTED
            j2se_version=1.6.0+update${archive_name:6:2}${revision}
            j2se_expected_min_size=130
            found=true
            ;;


natomiast w przypadku: /usr/share/java-package/sun-j2re.sh

# To odnajdujemy:
       "jre-6u"[0-9]"-linux-i586.bin") # SUPPORTED
            j2se_version=1.6.0+update${archive_name:6:1}${revision}
            j2se_expected_min_size=16 # 16542512 bytes
            found=true
            ;;
# To dodajemy:
        "jre-6u"[0-9][0-9]"-linux-i586.bin") # SUPPORTED
            j2se_version=1.6.0+update${archive_name:6:2}${revision}
            j2se_expected_min_size=16 # 16542512 bytes
            found=true
            ;;
Następnie na plikach pobranych ze strony Suna uruchamiamy operację (nie jako root):
fakeroot make-jpkg jdk-6u10-linux-i586.bin
fakeroot make-jpkg jre-6u10-linux-i586.bin
Wybudują nam się paczki, które instalujemy korzystając z polecenia dpkg (jako root oczywiście):
dpkg -i *.deb
W chwili obecnej należy jeszcze ustawić odpowiednią wersje Javy, korzystając z update-alternatives:
update-alternatives --config java
update-alternatives --config javac
To są hinty co wybrać:
  • /usr/lib/j2re1.6-sun/bin/java
  • /usr/lib/j2sdk1.6-sun/bin/javac
pilum:/home/johny# java -version
java version "1.6.0_10"
Java(TM) SE Runtime Environment (build 1.6.0_10-b33)
Java HotSpot(TM) Server VM (build 11.0-b15, mixed mode)
Niestety w przeglądarce Java się (przynajmniej mi nie zaktualizowała - spójrz na stronę about:plugins), więc muszę to zrobić ręcznie:
ln -s /usr/lib/j2re1.6-sun/plugin/i386/ns7/libjavaplugin_oji.so /usr/lib/firefox/plugins/libjavaplugin.so

ln -s /usr/lib/j2re1.6-sun/plugin/i386/ns7/libjavaplugin_oji.so /usr/lib/iceweasel/plugins/libjavaplugin.so
po wpisaniu about:plugins odnajdujemy: Java(TM) Plug-in 1.6.0_10-b33 lub wchodzimy na strone: www.java.com/en/download/installed.jsp W razie problemów, polecam zajrzeć na:
  1. http://www.debian-administration.org/articles/142
  2. http://wiki.osuosl.org/display/DEV/Java+on+Debian
  3. http://wiki.debian.org/JavaPackage
  4. http://www.crazysquirrel.com/computing/debian/java.jspx

Intel 945 - Direct Rendering Howto

Na początek zainstalowałem parę pakietów:
apt-get install libgl1-mesa-dri\
libgl1-mesa-dev\
libgl1-mesa-glx\
mesa-utils\
xserver-xorg-video-intel
Uaktualniłem config serwera X (/etc/X11/xorg.conf): Wpierw próbowałem skorzystać z nowszych sterowników "eksperymentalnych" Intela:
Section "Device"
        Identifier      "Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller"
        Driver          "intel"
        BusID           "PCI:0:2:0"
EndSection


Section "Screen"
        Identifier      "Default Screen"
        Device          "Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller"
        Monitor         "Generic Monitor"
        DefaultDepth    24
        SubSection "Display"
                Modes           "1280x800"
        EndSubSection
EndSection
U mnie te sterowniki nie działały, ale jak masz czas i chcesz potestować, możesz rozpatrzyć opcję (powinny się znaleźć w odpowiednich opcjach xorg - ja ich nie próbowałem):
 Option  "UseFBDev"  "true"
 Option  "DRI"   "true"
 Load  "glx"
Na swoim komputerze szybko zmieniłem taktykę i wykorzystałem sterowniki i810:
apt-get install xserver-xorg-video-i810
a configa Xorg-a poprawiłem następjąco:
Section "Device"
        Identifier      "Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller"
        Driver          "i810"
        BusID           "PCI:0:2:0"
 VideoRam 262144
 Option  "UseFBDev" "true"
EndSection

Section "Extensions"
 Option "Composite" "Disable"
EndSection
Narzędzia z których korzystałem:
  • lspci | grep Graphics
     00:02.0 VGA compatible controller: Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller (rev 03)
     00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller (rev 03)
     
  • xdriinfo
     Screen 0: i915
     
  • glxinfo
     # TAK JEST ŹLE:
      $ glxinfo | grep direct
      direct rendering: No (If you want to find out why, try setting LIBGL_DEBUG=verbose)
    
     # Chcemy więcej info:
      $ export LIBGL_DEBUG=verbose
      $ glxinfo | grep direct
     
     # A tak jest dobrze:
      $ glxinfo | grep direct
      direct rendering: Yes
     
  • xrandr
  • glxgears
Inne instrukcje są dostępne: Problemy:
  • Compiza nie uruchamiałem - nie przepadam za glutożelkami
  • Google Earth - dalej zjada mi cały procesor (ale nie wiem czemu) zmieniłem jakość renderowania jest troszkę lepiej

2 Nov 2008

Ecartis, Gmail and UTF

Jakiś czas temu kolega (pozdrawiam Cię Skrobul) założył listę mailingową bo mieliśmy wspólny projekt na studiach - osób było 12, wszystkim wszystko działało, ale oczywiście nie mi. Ecartis nie dekodował mojego tekstu, wciąż on pozostawał jako Base64 (czyli był scrambled). Po dłuższej walce z plikami konfiguracyjnymi zostałem poinformowany, że już wszystko działa :D. Oczywiście jako, że jestem ciekawską duszą to chciałem się dowiedzieć jakie ustawienie było za to odpowiedzialne:

I sie dowiedziałem:

# humanize-mime
# Should the server strip out non-text MIME attachments.
# Example: humanize-mime = true
#
humanize-mime = false