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).

01
maj

Update PR

Update PageRanku zawsze wzbudza mnóstwo emocji, mimo, że tak wiele osób pisze, że dla nich to tylko cyferka. Być może tak przeczytali gdzieś i tak uważają, być może faktycznie nie zwracają na to uwagi.

Właśnie jesteśmy świadkami kolejnego w tym roku update’u PR. Piszę o tym ponieważ dla mnie ta cyferka ma znaczenie - i to nie dlatego, że chcę masowo sprzedawać linki na allegro. Póki co zajmuję się głównie własnymi stronami i taka “cyferka” przy skrócie PR ma spore znaczenie przy SWL. Łatwiej też wymienić się ze stroną tematyczną - cieżko wymienić PR1 za PR4.

Jak ktoś również chce zacząć przekładać pagerank na zarobki lub inne zyski niekoniecznie gotówkowe do zapraszam do poniższych systemów:

Sam korzystam z tych dwóch systemów i po tym jak na wielu stronach wzrósł mi PR z 0 na 3, zyskałem mnóstwo punktów. Stronki będą się jeszcze stabilniej trzymać na dobrych miejscach i powoli rosnąć w siłę.

30
kwi

Ikonki do Google Maps

Najprostsze ikonki do map, ale też jednocześnie estetyczne i małe. Spełniają dobrze rolę informacyjną
http://sparce.cs.pdx.edu/mash-o-matic/tools.html

26
kwi

Wczytywanie modelu 3D z pliku OBJ

Napisałem dzisiaj proste wczytywanie współrzędnych wierzchołków oraz tzw. normalnych wierzchołków z pliku OBJ. Oczywiście plik OBJ, z takimi danymi wyeksportowanymi z programów typu 3DS MAX, Blender i pokrewnych. Budowa tego pliku jest bardzo prosta:

  • nagłówek z info o programie, który utworzył plik i inne tego typu
  • współrzędne wierzchołków
  • współrzędne wierzchóków tekstur
  • współrzędne normalnych wierzchołków
  • powierzchnie

Interesowały mnie głównie rzewczy wymienione we wstępnie, ale kod bardzo łatwo rozszerzyć. Poniżej najprostszy kod, jaki można sobie wyobrazić w tej sytuacji. Na poczet większych projektów wygodnie byłoby to opakować w jakieś klasy/funkcje, aby korzystało się wygodniej.

std::ifstream in( “apple1.obj” );
std::string buffer;
std::string tmp;
float v1;
float v2;
float v3;
std::string tbl[3];
while( !in.eof() )
{
std::getline( in, buffer );
std::istringstream line( buffer );
std::string ch = buffer.substr( 0, 2 );

if( ch == “v ” )
{
line >> tmp >> tbl[0] >> tbl[1] >> tbl[2];
v1 = atof( tbl[0].c_str() );
v2 = atof( tbl[1].c_str() );
v3 = atof( tbl[2].c_str() );

std::cout << “wierzcholki v1: ” << v1 << ” v2: ” << v2 << ” v3: ” << v3 << std::endl;
}
else if( ch == “vn” )
{
line >> tmp >> tbl[0] >> tbl[1] >> tbl[2];
v1 = atof( tbl[0].c_str() );
v2 = atof( tbl[1].c_str() );
v3 = atof( tbl[2].c_str() );

std::cout << “normalne v1: ” << v1 << ” v2: ” << v2 << ” v3: ” << v3 << std::endl;
}
}

Wypadałoby dołączyć oczywiście odpowiednie nagłówki :)

22
kwi

Jak zwiększyć swoje kieszonkowe cz.3

Jakiś czas temu pisałem o darmowym hostingu głównie pod testy, spam. Wspomniany wcześniej provider usługi udostępnia ciekawy i dobrze płatny program partnerski.

Wszystko polega na sprowadzaniu poleconych osób, które się zarejestrują i założą darmowe konto WWW. Płacą dobrze, bo 5$ od osoby, a wiadomo, że wiele osób chce mieć darmowe konto pod jakieś proste własne projekty. To powoduje, że łatwo sobie dorobić na tym programie. Parametry konta nie zmieniły się od czasu, kiedy pisałem pierwszy raz o tym hostingu więc po szczegóły odsyłam właśnie tam.

Pozostaje tylko zarejestrować się i zbierać poleconych. Po zalogowaniu do panelu po prawej stronie ujrzymy menu, będzie w nim opcja JOIN AFFILIATE, którą to należy wybrać. Dalej już jest prosto, wystarczy podesłać swoim znajomym odpowiedniego linka, którego przygotuje nam automatycznie program partnerski. No i oczywiście zarabiać!

21
kwi

Jak zwiększyć swoje kieszonkowe cz.2

W którymś z poprzednich wpisów odnośnie subvert&profit pisałem instrukcję o tym, jak dorobić sobie parę dolarów do kieszonkowego. Niestety doszły mnie słuchy, że sporo osób ma problem z obsługą i poprawnym zbieraniem gotówki.

Przypuszczam, że częstym błędem jest zbyt wczesne wciśnięcie przycisku o wykonanym zadaniu. Należy to zrobić ZAWSZE po wykonaniu, a nie tuż po wciśnięciu. Kolejną rzeczą jest pasek narzędziowy ze StumbleUpon, dobrze jest mieć go zainstalowanego :)

Po szczegóły odsyłam także do poprzedniego wpisu o kieszonkowym.

21
kwi

Google Maps API - początki

Z powodów zawodowych musiałem zainteresować się API Google Maps. Najpierw należy się zarejestrować na stronie Google Maps, aby uzyskać swój własny klucz, przypisany do konkretnej witryny/domeny. Po zapoznaniu się z podstawami API uznałem, że jest ono bardzo przyjemne i przyjazne. Już po zarejestrowaniu, otrzymujemy od Google przykładowy kod. Poniżej zamieszczam nieco zmodyfikowany, dodałem jeden znacznik na tej mapce.

function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById(”map”));
map.setCenter(new GLatLng(20.0, 25.0), 5);

var marker = new GMarker( new GLatLng( 20.0, 20.0 ), {clickable:true,title:’tytuł’} );
map.addOverlay( marker );
}
}

W przygotowanej do tego skryptu w Javascript stronie, należy odpowiednio zmodyfikować znacznik BODY:

body onload=”load()” onunload=”GUnload()”

Jak widać na pierwszym listingu, obiekt, w którym będzie mapa w dokumencie HTML, musi mieć ID o wartości “map”. Ustawienie współrzędnych środka mapy jest obowiązkowe - inaczej dostaniemy błąd. Ostatnim argumentem w metodzie setCenter jest zoom, który przyjmuje wartości od 1 do 20 ( 20 to maksymalne przybliżenie ). Należy zwrócić uwagę, że nie każdy obszar ma mapę o danym przybliżeniu. O atrybutach, przekazywanych do obiektu GMarker napiszę więcej w jednym z kolejnych wpisów.

08
kwi

Kohana - pierwsze starcie

Jak już pisałem w Kohana welcome to przesiadam się na tego frameworka, porzucając już całkowicie Code Ignitera ( na jego własne życzenie niestety ). Dziś nastąpiło pierwsze zderzenie z rzeczywistością.

Na stronie domowej projektu jest szybki tutorial jak odpalić pierwszą stronę w tym frameworku: ściągnąć, rozpakować, skonfigurować i jest :) Przejście z samego CI też nie jest trudne, kwestia zmiany nazw klas kontrolerów i modeli + kosmetyczne zmiany w helperach - nadal są to funkcje jednak tym razem jako metody statyczne. Pierwsza konfiguracja polega na przejrzeniu tylko jednego pliku application/config/config.php i wpisaniu ścieżki.

Co było inne niż w CI to fakt, że w katalogu application/config znalazłem tylko w/w plik konfiguracyjny. Jak się potem okazało, prototypy pozostałych są w system/config. I tak oto, jak potrzebowałem połączenie z bazą danych to przekopiowałem plik database.php do application/config, wpisałem odpowiednie dane i voila :)

Zachęcałem do spróbowania CI, teraz tak samo zachęcam do spróbowania z Kohaną - ta sama idea, prostota i wygoda używania.