Archiwum dla maj, 2008

31
maj

KDE4 na Ubuntu

Instalacja KDE4 na Ubuntu jest wręcz dziecinnie prosta i sprowadza się do wykonania kilku poleceń, resztę za nas “wykona się samo”. Więc do dzieła!

sudo gedit /etc/apt/sources.list

Dodajemy taką linijkę:

deb http://ppa.launchpad.net/kubuntu-members-kde4/ubuntu gutsy main

I update listy pakietów:

sudo apt-get update

I lecimy:

sudo apt-get install kde4-core kde-l10n-pl

Po ściągnięciu pakietów pojawi się monit z pytanie o domyślny display manager, ja miałem do wyboru gdm i kdm. Wybierasz co chcesz ;)

I to wszystko, można się już cieszyć nowym KDE.

31
maj

Najprostsze rozwiązania zawsze działają

Domyślnie Visual Studio 2008 daje taki nagłówek funkcji main:

int _tmain( int argc, _TCHAR* argv[] )

Niestety miałem problem z typem _TCHAR*, aby rzutować/skonwertować go na cokolwiek użytecznego jak std::string. Pogooglałem chwilę i zanim znalazłem naszła mnie prościutka myśl - zmienić nagłówek main’a!

int _tmain(int argc, char** argv)

Życie od razu stało się prostsze, bo konwersja char* na std::string jest prosta, łatwa i przyjemna - wystarczy podać char* jako argument do konstruktora string’a.

Proste rozwiązania sa świetne :)

28
maj

PHP pójdzie do lamusa?

Odwiedziłem dzisiaj stronę code.google.com - dawno tam nie byłem. I pierwsze co mnie naszło jak zobaczyłem zbiór produktów Google to myśl, że jeszcze trochę i całe strony będzie można budować bez użycia PHP lub z jego szczątkowym użyciem. Jest API do map google, jest do użycia AJAX’a z poziomu Javy, są API do tworzenia wykresów, kalendarzy oraz App Engine API, o którym piszą:

Google App Engine lets you run your web applications on Google’s infrastructure. App Engine applications are easy to build, easy to maintain, and easy to scale as your traffic and data storage needs grow. With App Engine, there are no servers to maintain: You just upload your application, and it’s ready to serve your users.

Poczekamy i zobaczymy, ale ekspansja potenta jest dla mnie czasami porażająca…

25
maj

Asynchroniczna komunikacja za pomocą Google Maps API

GM API udostępnia własną nakładkę na obiet HttpRequest, standardowo używany przy korzystaniu z technologii AJAX ( zakładając nie korzystanie z bibliotek pomocniczych ). Ostatnio siedzę więcej w Google Maps no i uznałem, że bez sensu jest zaprzęgać zewnętrzną bibliotekę skoro API GM udostępnia do tego własne funkcje. Oto jak wygląda prototyp funkcji:

GDownloadUrl(url, onload, postBody?, postContentType?)

Bardzo często ostatnie dwa parametry nie są używane ( są opcjonalne ). Wtedy komunikacja odbywa się za pomocą metody GET. Jak wiadomo, ma to swoje wady, bowiem są problemy z przesyłaniem dużej ilości informacji oraz z kodowaniem polskich znaków diakrytycznych. W dokumentacji można bez problemu znaleźć przykłady z wykorzystaniem GDownloadUrl i metody GET więc opiszę pokrótcę metodę POST. Najlepszym tłumaczeniem jest zwykle przykład kodu więć oto on:

function saveData()
{
var name = document.getElementById(”name”).value;
var info = document.getElementById(”info”).value;
var latlng = marker.getLatLng();
var lat = latlng.lat();
var lng = latlng.lng();

var url = “file.php”;

GDownloadUrl(url, function(data, responseCode) {
if (responseCode == 200 && data.length <= 1)
{
marker.closeInfoWindow();
document.getElementById(”message”).innerHTML = “Znacznik dodany.”;
}
}, “name=” + name + “&info=” + info +
“&lat=” + lat + “&lng=” + lng, “application/x-www-form-urlencoded”);
}

Funkcja ta przetwarza formularz i przesyła dane do pliku PHP metodą POST. Na początku pobierany wartości pól z formularza i ustalamy URL pliku, do którego prześlemy dane. Jest to też pierwszy argument funkcji GDownloadUrl. Kolejnym jest funkcja zwrotna, wykonywana po zakończeniu GDownloadUrl. Trzeci argument to lista danych w postaci nazwa=wartość a ostatni to typ MIME.

I to w zasadzie tyle, prosty przykład można dostosować do swoich potrzeb i wykorzystać.

22
maj

FCKEditor i CodeIgniter

Zadanie było proste, żeby nie powiedzieć banalne: podpiąć edytor WYSIWYG o nazwie FCKEditor do frameworka CodeIgniter. Oczywiście byłoby zbyt pięknie, żeby działała instrukcja z Wiki CodeIgnitera więc zaczęły się kombinacje. Wogóle ta instrukcja przewidywała, żeby katalog z edytorem umieścić w głównym katalogu aplikacji co samo w sobie mi się nie podobało - w końcu po co jest katalog “libraries”?

Więc do wspomnianego katalogu wrzuciłem cały katalog “fckeditor” z edytorem w wersji 2.6 a następnie skopiowałem plik fckeditor/fckeditor_php5.php do “libraries” i rozpocząłem edycję. Po pierwsze zmieniłem nazwę klasy na “Fckeditor” ( wielkość liter znacząca ). Z pliku fckeditor/fckeditor.php skopiowałem jedyną tam funkcję i wkleiłem to do modyfikowanej klasy. Zapisałem zmiany oraz zmieniłem nazwę pliku na “Fckeditor.php”. Teraz wewnątrz kontrolera:

$this->load->library( ‘fckeditor’, ‘name’ );
$this->fckeditor->BasePath = base_url().’system/application/libraries/fckeditor/’;
$this->fckeditor->BasePath = ‘/system/application/libraries/fckeditor/’;
$fck_news = $this->fckeditor->CreateHtml();

Aby mieć dwa edytory jednocześnie wystarczy zmienić InstanceName:

$this->fckeditor->InstanceName = “new_name”;

i już można wyświetlić obydwa.

UPDATE

Ta wersja jest bezpieczniejsza - powinna działać na każdym serwerze.

20
maj

PHP4 a PHP5

Dzięki linkowi podrzuconemu przez znajomego ( nie dotyczącego bezpośrednio tego wpisu ) znalazłem wspaniały cytat, który zdecydowanie nadaje się na cytat dnia:

PHP 4 is really a big pain in the ass, so try to talk your host into upgrading to PHP 5

19
maj

Google Translate czyli tłumacz google

Google Inc. udostępniło niedawno kolejną usługę online. Tym razem jest to tłumaczenie między wieloma różnymi językami. Można też tłumaczyć całe strony. Nie jest źle, ale wiadomo jaki nasz język jest bogaty w różne konstrukcje językowe więc czasami przetłumaczenie strony anglojęzycznej na polski może wywołać salwy śmiechu. Niemniej zachęcam do spróbowania:
http://translate.google.pl

13
maj

jEdit pod Ubuntu

jEdit w wersji na systemy uniksowe ma instalkę w postaci pliku .jar. Po instalacji również nie tworzę się żadne skróty, ikony ani pozycje w menu jak to ma miejsce w przypadku Windowsa. Dlatego krótki tutorial, jak ułatwić sobie życie.

Otwórz dowolny edytor tekstowy( np gEdit, Kate, vi etc ) i wpisz w nim taki kod:

#!/bin/bash
java -jar ../jedit/4.2/jedit.jar

Zapisz plik jako jedit.sh ( lub jakkolwiek chcesz inaczej, tylko trzymaj się konsekwentnie tego ). Ja to zrobiłem na pulpicie, żeby mieć go pod ręką zawsze. W konsoli nadaj odpowiednie uprawienia dla tego pliku poprzez komendę chmod, np tak:

chmod 0777 jedit.sh

Oczywiście musisz być w tym samym katalogu.

Teraz dwuklik na pliku jedit.sh na pulpicie spowoduje wyświetlenie monitu z pytanie co zrobić, wystarczy wybrać “Uruchom” i działa.

10
maj

Generatory liczb pseudolosowych cz.2

Jak już pisałem w pierwszej części serii o generatorach, tym razem opiszę generator liczb pseudolosowych o rozkładzie równomiernym.

Rozkład równomierny dla zmiennej losowej ciągłej na podanym przedziale [a,b] oznacza, że prawdopodobieństwo wystąpienia każdej z wartości w tym przedziale jest dokładnie takie samo i wynosi dokładnie 1/(b-a) - stąd widać, że a i b muszą być wartościami skończonymi, aby wynik był sensowny. Prawdopodobieństwo wystąpienia każdej wartości spoza przedziału wynosi 0. Analogicznie sytuacja ma się dla zmiennej losowej dyskretnej. Przykładem dla dyskretnej zmiennej losowej może być rzut monetą lub kostką sześcienną ( zakładając, że nie są w jakiś sposób zmodyfikowane ). Więcej teorii łatwo znaleźć na wikipedii - ten wpis nie ma na celu wykładu matematycznego.

Czytaj dalej ‘Generatory liczb pseudolosowych cz.2′

03
maj

Generatory liczb pseudolosowych cz.1

Czym są liczby pseudolosowe powinien każdy programista mniej więcej wiedzieć. Są to liczby, które mają rozkład mniej więcej losowy. Dlaczego nie są to liczby losowe tylko pseudolosowe? Otóż prawdziwie losowe liczby występują w zasadzie tylko w przyrodzie. Bo jak można nazwać liczby generowane za pomocą algorytmu całkowicie losowymi?

W praktyce daje nam to pewną wspaniałą własność, która może być zarówno być zarówno błogosławieństwem jak i przekleństwem. Dla mnie jest błogosławieństwem ponieważ aktualnie zajmuję się symulacją cyfrową, a tu “powtarzalność” eksperymentu jest bezcenna! Co oznacza owa “powtarzalnosć eksperymentu”? Jest to możliwość prześledzenia procesu, który symulujemy, kilka razy w _identycznych_ warunkach - jest to niemożliwe w rzeczywistości.

Postanowiłem napisać ten cykl artykułów o generatorach pseudolosowych ponieważ ich losowość polega na tym, że przechodzą testy, na zgodność z pewnym, założonym rozkładem prawdopodobieństwa. O testach tych być może również napiszę na koniec cyklu wpisów o samych generatorach różnych rozkładów.

Przy czytaniu przyda się znajomość rachunku prawdopodobieństwa. W następnej notce zacznę od rozkładu równomiernego, który stanowi podstawę dla innych rozkładów - jest więc swego rodzaju “królem”. Przykładowe implementacje będę podawał w języku C++, ale pojawią się również algorytmy więc przełożenie ich na inne języki nie powinno stanowić problemu (zwłaszcza, gdy ma się kod podglądowy).