GRUB w Ubuntu - czy na pewno "for human beings"?

"Linux for human beings" - to zdanie najpełniej obrazuje cel, który przyświeca programistom Canonical przy tworzeniu Ubuntu. Chciałbym jednak zwrócić uwagę na jeden - wydawałoby się - drobiazg, który może przeszkadzać początkującym. Mianowicie - GRUB, a dokładniej ego domyślna konfiguracja w Ubuntu.

Instalacja, restart i... co to jest?!

Załóżmy, że do Windowsa 7 doinstalujemy sobie najnowsze Ubuntu. Uruchamiamy komputer i co widzimy? Białe literki na czarnym tle, mówiące mniej więcej coś takiego:

Ubuntu, with linux 2.6.35-22 generic Ubuntu, with linux 2.6.35-22 generic (Recovery mode) Memory test (memtest86+) Windows 7 (loader) on /dev/sda1

Ups. Nie jest to zbyt przystępne dla nowicjusza, który postanowił wypróbować Linuksa. Na liście widnieją aż cztery wpisy (choć mamy zainstalowane tylko dwa systemy), w dodatku po aktualizacji jądra nagle pojawiają się kolejne dwa) Czy nie lepiej by było, gdyby po prostu były dwa wpisy: "Ubuntu" i "Windows 7"? W dodatku co zrobić, żeby Windows był na pierwszej pozycji?

I tutaj zaczynają się schody.

Trzy kroki ku jeszcze piękniejszemu KDE

Patrząc ostatnimi czasy na rozwój KDE można dostrzec, że jego tempo i kierunek są jak najbardziej zadowalające. Liczne głosy krytyki, które nasilały się wraz z wersjami 4.0 i 4.1 środowiska stopniowo ucichły wraz z kolejnymi wydaniami. Pulpit KDE stał się od tamtego czasu o wiele prostszy, piękniejszy i wygodniejszy. Seria KDE 4.x zaszła niewątpliwie bardzo wysoko. Wersja 4.4 oferuje nam dojrzałe środowisko graficzne posiadające efektowny wygląd i ogromne możliwości. Oby jednak programiści nie spoczęli na laurach, ponieważ stosunkowo niewielkim nakładem pracy można osiągnąć znacznie więcej i zostawić Windows Aero daleko w tyle. A wszystko w trzech krokach.

Krok 1: Rozmycie pod półprzezroczystymi elementów
Efekt rozmycia pulpitu pod półprzezroczystymi oknami był dostępny w KDE4 do wersji 4.2. Niestety, efekt ten sprawiał sporo problemów i musiał zostać przepisany od samego początku. W KDE 4.3 został usunięty jako regresja. A co dalej? Na szczęście wieści nie mogłyby być lepsze.

Godny następca C i C++, czyli programowanie w D - cz. 4: Kontrakty i testy jednostkowe

Było o tym, czym jest D. Było też o kompilacji warunkowej i tablicach. Teraz pokażę trochę ważniejszą cechę języka D - programowanie kontraktowe.

Programowanie kontraktowe jest techniką polegającym na umieszczaniu w źródłach programu kodu sprawdzającego poprawność jego działania. W przypadku wykrycia nieprawidłowości program wymusi tzw. crash i zakończy działanie, aby nie doprowadzić do zwrócenia błędnego wyniku.

Asercje

Za najprostszy rodzaj kontraktów można uznać asercje. Są one dostępne w innych językach programowania, takich jak C, C++ i Java. W D stosuje się je tak:
assert(2 == 1);

Po uruchomieniu programu z tym kodem zostanie wyrzucony wyjątek AssertError. Gdy kompilatorowi przekażemy flagę -release, asercja powinna zostać pominięta przy kompilacji i nie znaleźć się w programie. Niestety do kompilatora prawdopodobnie wkradł się błąd, ponieważ przy próbie uruchomienia tego kodu:
import std.stdio; void main() { assert(1 == 2); writeln("Hello World"); }

skompilowanego z flagą -release

Godny następca C i C++, czyli programowanie w D - cz. 3: Tablice

Po dwóch poprzednich wpisach o języku programowania D przyszedł czas na kolejny. Tym razem opiszę, jak w D wyglądają tablice. Choć takie funkcje, jak tablice dynamiczne i asocjacyjne pojawiają się w wielu innych językach programowania (czasem pod postacią map lub wektorów), w D rozwiązano tą sprawę trochę inaczej, niż w C++.

Wskaźniki

Chociaż w D występują wskaźniki, nie ma potrzeby ich używania. Zachowane zostały wyłącznie w celu zapewnienia kompatybilności binarnej z C. W większości wypadków tablice dynamiczne oraz inne elementy D w pełni zastępują wykorzystanie wskaźników.

Tablice statyczne

O tym rodzaju tablic nie ma sensu zbytnio się rozpisywać, ponieważ są one bardzo dobrze znane z C/C++. Ich długość musi być znana już w czasie kompilacji.

Tablice statyczne możemy deklarować na dwa sposoby:
int tab1; // sposób znany z C int tab2; // sposób znany np. z Javy

Tablice dynamiczne

Kolejnym typem tablic dostępnych w D są tablice dynamiczne. W odróżnieniu od statycznych mogą one zmieniać swój rozmiar.

Godny następca C i C++, czyli programowanie w D - cz. 2: Zaczynamy pisać w D

Witam ponownie. W poprzednim wpisie pokrótce opisałem, czym jest D i co zmieniło w porównaniu do C i C++. W drugiej części pokażę, jak to wygląda w praktyce. Opiszę, skąd ściągnąć i jak zainstalować kompilator. Przedstawię też podstawy programowania w D (wpis kieruję do osób, które mają już ogólne pojęcie o programowaniu. Jeżeli chciałbyś nauczyć się D jako pierwszego języka, zapraszam na Wikibooka o D). Do dzieła :)

Z czym to się je?

Jak się zapewne domyślacie, żeby pisać programy, trzeba mieć jakiś kompilator. Oczywiście D nie jest w tym przypadku wyjątkiem. W pierwszej części wymieniłem najważniejsze kompliatory - DMD, GDC, LDC i D Compiler for .NET. Osobiście polecam ten pierwszy. DMD jest kompilatorem oficjalnym i wyznacza standardy dla języka.

Godny następca C i C++, czyli programowanie w D - cz. 1: Czym jest D?

Witam wszystkich czytelników vortalu na moim blogu. W pierwszym wpisie chciałem zaprezentować język programowania D . Jest to język ogólnego przeznaczenia, który - jak sama nazwa wskazuje - ma być następcą C (nie C++!). Obecnie D nie jest szczególnie popularne, lecz - moim zdaniem - zdecydowanie godne uwagi.

Czym jest D?

Jak wiadomo, języki C i C++ są obecnie bardzo szeroko wykorzystywane przez programistów. W językach tych pisanych jest całe mnóstwo ogromnych projektów i gier. Przykładami są choćby Qt, GTK, KDE... Można wymieniać długo. Nie da się jednak ukryć, że języki te mają już swoje lata - pierwsza wersja języka C++ pojawiła się 1979 roku. Od tego czasu sporo się jednak zmieniło. Programy komputerowe stawały się coraz większe i bardziej złożone, rozwinęły się też nowe techniki programowania takie, jak np. programowanie kontraktowe (umożliwiające m. in. sprawdzanie, czy dane przyjmowane i zwracane przez funkcję są poprawne).

Język D został opracowany przez Waltera Brighta - twórcę pierwszego natywnego kompilatora C++. Pierwsza wersja stabilna pojawiła się 2 stycznia 2007 roku.