29 Sep 2008

Eclipse IDE

Wybór odpowiedniego środowiska programistycznego nie jest rzeczą łatwą, w przeciągu ostatniego roku IDE (Integrated Developement Enviroment) powstało bardzo wiele, jednym z ciekawszych jest Eclipse.

Projekt ten powstał już parę lat temu pod auspicjami firmy IBM. W chwili obecnej najnowsza wersja Eclipse to 3.40.0 nosi kodowa nazwę Ganymede. Środowisko to jest o tyle ciekawe, że posiada relatywnie lekki rdzeń, do którego są włączane komponenty (pluginy). W chwili obecnej korzystam z Eclipsa do pisania programów w Javie (domyślnie instalowane), Perlu (Epic), Pythonie(PyDev), LaTeX(TeXclipse) i planuję zainstalować dodatek ułatwiający tworzenie skryptów shellowych. Różnorodność wspieranych języków nie jest jedyną zaletą tego projektu, dzięki elastycznemu systemowi pluginów można, korzystać bezpośrednio z systemu kontrolowania wersji takiego jak CVS, SVN i zapewne paru innych systemów wersjonowania oprogramowania, a także do modelowania baz danych (ERD), oraz modelowania w języku UML.

Dzięki takiej różnorodności dodatków (większość z nich można ściągnąć z Eclipse Central) możliwe jest posiadanie jednego środowiska do rozwijania programów w wielu językach, a także do opracowywania dokumentacji. Takie rozwiązanie ma swoje ogromne zalety, jedną z nich jest jednokrotne uczenie się skrótów klawiszowych, które powinny działać w każdym pluginie Eclipse.

Eclipse pozwala także na tworzenie swego rodzaju odnośników, czyli adnotacji. Adnotacją może być każdy znacznik, który jest wstawiany w edytorze (przez nas, bądź automatycznie). Przykładem może być sytuacja, gdy wyszukujemy wzorca w pliku - miejsca w których został znaleziony interesujący nas łańcuch znaków są oznaczone na marginesie edytora, a więc są adnotacjami :).

Na początku przygody z Eclipse zapamiętanie tych najpotrzebniejszych stanowi pewien problem, dlatego postanowiłem sobie zapisać te najpotrzebniejsze.

Nawigacja
Ctrl F6Przełączanie się między otwartymi edytorami
Ctrl WZamknij plik
Ctrl OLista klas i metod w pliku
Ctrl TWyświetlenie hierarchii klasy
Ctrl Shift strzałka w góręPrzeniesienie do następnej klasy/metody
Ctrl Shift strzałka w dółPrzeniesienie do poprzedniej klasy/metody
Ctrl . (kropka)Przeniesienie do następnej adnotacji
Ctrl , (przecinek)Przeniesienie do poprzedniej adnotacji
Uruchamianie programów
Ctrl F11Uruchomienie ostatnio uruchamianego
F11Debuggowanie ostatnio uruchamianego
Ctrl Shift BZbuduj/Skompiluj aktualny porjekt
Wyszukiwanie
Ctrl FWyszukiwanie w bierzącym pliku
Ctrl JWyszukiwanie inkrementalne
Ctrl HWyszukiwanie we wszystkich (bądź wybranych) plikach lub projektach
Asystent kodu
Ctrl SpacePokazuje podpowiedź asystenta
Ctrl 1 (jeden)Szybka podpowiedź rozwiązania problemu (Quick Fix)
Ctrl TabPokaż listę dopełnień
Ctrl Shift SpacePodpowiedź parametrów metody
F2Pełna dokumentacja klasy/metody (kursor musi być nad klasą bądź metodą)
Ctrl Shift PZnajdź pasujący nawias (podświetlenie go)
Formatowanie kodu
Ctrl IPoprawienie wcięć w kodzie
Ctrl Shift FFormatuj kod
Ctrl /Zakomentuj zaznaczony fragment kodu
Ctrl \Odkomentuj zaznaczony fragment kodu
Alt /Zakomentuj/Odkomentuj blok kodu (Epic)
Inne
Ctrl Shift LPomoc kontekstowa
Ctrl Shift 6Sprawdź pisownie
Esq QZawijanie wierszy w zaznaczonym kawałku tekstu (TeXclipse)
to chyba na tyle w tym temacie ;)

25 Sep 2008

GPG error: public key is not available

Chyba nigdy nie zapamiętam co z tym zrobić :). Wszystkie operacje przedstawione w tym tekście wykonujemy z konta administratora, lub poprzedzamy sudo (dla tych co mają ubuntu i sobie nie zrobili konta roota).
W: GPG error: http://.... testing Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY KEY_ID
Instalujemy z repozytorium pakiet debian-keyring (GnuPG (and obsolete PGP) keys of Debian Developers). A następnie pobieramy klucze GPG z serwerów:
gpg --keyserver wwwkeys.eu.pgp.net --recv-keys KEY_ID
gpg --armor --export KEY_ID | apt-key add -
i w końcu nie ma tego ostrzeżenia ;). Jeśli na wybranym key serwerze nie było kluczy to należy poszukać innego. Oto lista serwerów kluczy:
  • wwwkeys.eu.pgp.net
  • wwwkeys.pgp.net
  • keyring.debian.org/
  • search.keyserver.net
  • pgp.ai.mit.edu
Jeśli klucz nie może zostać z pobrany na podstawie tych serwerów, można spróbować odnaleźć na stronie repozytorium sygnaturę do GPG, jak ma to miejsce przypadku Google.
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
Może teraz zapamiętam :).

17 Sep 2008

Perl File::Basename dlaczego używać?

Często pisząc skrypty w Perlu, wymagam od użytkownika podania pliku wejściowego do przetworzenia i nazwy pliku wyjściowego/katalogu w którym mają powstać wyniki.

Ta druga wartość bardzo często może zostać wygenerowana na podstawie informacji o nazwie pliku, który należy przetworzyć. Można to zrobić na wiele sposobów, oto niektóre z nich (od siebei dodam, że wszystkich 3 używałem, ale najlepszy wydaje mi się sposób 3).
Oto kod:
#!/usr/bin/perl

# Purpose: Why we should use libraries in Perl?

use strict;
use warnings;

use File::Basename;

my $inputFilePath = "/home/johny/projects/someSampleFile.txt";
my $outDirName ;

# --
print "# version without additional modules\n";
my $ipf1 = $inputFilePath;
$ipf1 =~ /(.*\/+?)?(.*)$/;
$ipf1 = $2;
$ipf1 =~ s/\.\w{0,3}$//g;
$outDirName = $ipf1;
print $outDirName."\n\n";
# --

# --
print "# version with File::Basename::basename\n";
my $ipf2 = File::Basename::basename($inputFilePath);
$ipf2 =~ s/\.[a-zA-Z]+$//g;
$outDirName = $ipf2;
print $outDirName."\n\n";
# --

# --
print "# version with File::Basename::fileparse (3 things done!)\n";
my ($bFName, $path, $ext)  =   File::Basename::fileparse($inputFilePath, qr/\.[^.]*/);
print $bFName."\n\n";

__END__

=head1 See also

http://search.cpan.org/~rgarcia/perl-5.10.0/lib/File/Basename.pm
Oraz wyniki jego działania:
johny@pilum:~/stuff$ perl basename.pl 
# version without additional modules
someSampleFile

# version with File::Basename::basename
someSampleFile

# version with File::Basename::fileparse (3 things done!)
someSampleFile