Strasznie dużo czasu zmarnowałem usiłując zmienić kodowanie w bazie MySQL na UTF i dopasować skrypty Perla do tej zmiany.
Przestawienie MySQLa na UTF-8 jest proste:
mysql -u www -p --default-character-set=utf8 CREATE database kpma CHARACTER SET utf8 COLLATE utf8_bin;
Baza kpma
(użytkownika www
) będzie
kodowana w UTF-8. Można też określić domyślne kodowanie
wszystkich baz
w pliku konfiguracji MySQLa, tj. w pliku /etc/mysql/my.cnf
(Debian):
[mysqld] ... default-character-set = utf8
Trochę diagnostyki:
use kpma; show variables like 'char%'; show table status; select tytul from Utwor; ## jest OK -- na konsoli widać poprawne różne znaki diakrytyczne
Prawdziwa męka to było zmuszenie Perla do poprawnego traktowania danych UTF.
Trzy kluczowe dla poprawnego przetwarzania UTF sprawy to:
1) klauzula binmod
(patrz poniżej);
2) klauzula use utf8
(jeżeli skrypt zawiera napisy kodowane w UTF);
3) wpisy mysql_enable_utf8
/SET NAMES utf8
dotyczące MySQLa.
Szkielet skryptu Perla wygląda następująco:
#!/usr/bin/perl -w # -*- coding: utf-8 -*- -- # use strict; use utf8; ## skrypt zawiera napisy kodowane UTF use CGI qw(:standard); use DBI; binmode(STDOUT, ":utf8"); ## bez tego problemy z UTF my $dbname = 'kpma'; ## Nazwa bazy my $dbuser = 'www'; ## Nazwa użytkownika MySQL my $dbpasswd = '??????'; ## Hasło dla $dbuser my $dsn = "dbi:mysql:$dbname:localhost:3306"; my $dbh = DBI->connect($dsn, "$dbuser", "$dbpasswd", { ChopBlanks => 1 }); $dbh->{'mysql_enable_utf8'} = 1; $dbh->do('SET NAMES utf8'); my $SQL = "SELECT tytul FROM Utwor WHERE id_kompozytor1 = 59 ORDER BY rok "; ##my $SQL = "SELECT nazwisko FROM Kompozytor "; my $sth = $dbh->prepare($SQL); $sth ->execute(); while ( my @piece = $sth->fetchrow_array() ) { print ">> @piece\n"; } $dbh->disconnect || warn "Nie mogę zamknąć bazy $dbname\n";
Jeżeli skrypt korzysta (pobiera dane)
z param()
to koniecznie należy
zastosować funkcję decode_utf8
:
use Encode; ## param() trzeba dekodować if (param()) {# -- Wypełniono formularz -- ## http://ahinea.com/en/tech/perl-unicode-struggle.html my $who = Encode::decode_utf8(param("kto"));
Działa nawet z dość starym Perlem:
$perl --version This is perl, v5.10.0 built for arm-linux-gnueabi-thread-multi Copyright 1987-2007, Larry Wall
Konfigurowanie kluczy SSH.
Połącz się z https://github.com/<username>
.
Kliknij w Account Settings → SSH Public Keys
→ Add another public key.
Skopiuj zawartość pliku id_rsa.pub
do odpowiedniego pola tekstowego.
(Uwaga:
w dokumencie
Set Up Git
jest opisane dokładniej
jak wygenerować id_rsa.pub
.)
Określenie użytkownika oraz jego adresu email.
$ git config --global user.name "Firstname Lastname" $ git config --global user.email "your_email@youremail.com"
Konfigurowanie GitHub token.
Pobierz token z Account Settings → Account Admin. Wykonaj poniższe:
$ git config --global github.user username $ git config --global github.token 0123456789yourf0123456789token
Uwaga: zmiana hasła wymaga aktualizacji tokena.
Kliknij w https://github.com/repositories/new
(poprzez Dashboard → New Repository).
Stwórz plik README (zalecane)
$ mkdir ~/Hello-World $ cd ~/Hello-World $ git init $ touch README ## przeslanie do lokalnego repo $ git add README $ git commit -m 'first commit' ## przeslanie na github $ git remote add origin git@github.com:<username>/Hello-World.git $ git push origin master
Repozytorium zawierające przykłady z książki Praca magisterska ...
$ git init Initialized empty Git repository in /home/tomek/Projekty/LaTeX/text/book-examples-git/.git/ $ git add * $ git status # On branch master # # Initial commit # # Changes to be committed: ... $ git commit -m 'first commit' $ git remote add origin git@github.com:hrpunio/pmdzpl.git $ git push -u origin master
Repozytorium zawierające przykłady dot. akceptacji Oprogramowania Open Source
$ git init Initialized empty Git repository in /home/tomek/Projekty/HP/hbook/aoos-data-git/.git/ $ git add * $ git commit -m 'first commit' $ git remote add origin git@github.com:hrpunio/aoos.git $ git push -u origin master $ git status
10 maja 1941 roku Rudolf Hoess (formalnie zastępca Adolfa Hitlera, tj. człowiek który zostałby fuererem gdyby, przykładowo wodzowi coś zaszkodziło) wystartował z Augsburga a następnie wyskoczył ze spadochronem niedaleko Eaglesham w Szkocji. Został aresztowany i resztę wojny spędził w więzieniu.
Propaganda 3Rz tłumaczyła prostemu ludowi powyższy -- przyznajmy szokujący incydent (wiceprezydent Biden wyskakuje na spadochronie z F16 pod Teheranem) -- iż towarzysz partyjny Hoess zwariował (Goebbels uważał takie tłumaczenie za prostackie i niewiarygodne).
Minister finansów RP 14. 09 br (albo dzień wcześniej) palnął publicznie, ich zitiere: Rostowski przywołał na koniec swą niedawną prywatną rozmowę z ,,prezesem wielkiego polskiego banku'', pracującym w ministerstwie za czasów transformacji w Polsce. Miał on mu powiedzieć, że po takich wstrząsach gospodarczych i politycznych, jakie teraz dotykają Europę, ,,rzadko się zdarza, by po 10 latach nie było także katastrofy wojennej''. I -- jak mówił minister -- ten prezes banku dodał, że ,,poważnie się zastanawia nad tym, by uzyskać dla dzieci zieloną kartę w USA''.
I co teraz na to Ministerstwo Propagandy, Oświecenia publicznego i Informacji?
W poprzednią sobotę/niedzielę (2/3 09. br.) pojechałem z Miśkiem na rowerach do Brodnicy (za Kartuzami) i z powrotem. Ślady są tutaj i tutaj.
Having fixed Garmin-babel communication some time ago I have encountered similar problem with another GPSdevice, namely MTK's BT747 logger. This time fixing the problem was simple.
I added the
following to the /etc/udev/rules.d/51-garmin.rules
:
SYSFS{idVendor}=="10c4", SYSFS{idProduct}=="ea60", MODE="0666"
Vendor ID and product ID can
be figured out inspecting dmesg
log:
# connect the device first dmesg | less
So my /etc/udev/rules.d/51-garmin.rules
file
looks like in the following listing:
SYSFS{idVendor}=="091e", SYSFS{idProduct}=="0003", MODE="0666" SYSFS{idVendor}=="10c4", SYSFS{idProduct}=="ea60", MODE="0666"
One
has to remember to stop/remove gps demon (gpsd
).