Przejdź do głównej zawartości

Posty

OpenSUSE 11.3, Intel GM45 i WebGL w Firefoxie

Miałem problem z uruchomieniem aplikacji internetowych napisanych przy użyciu stosunkowo nowej technologii jaką jest WebGL. Mam laptopa ze zintegrowanym chipsetem graficznym Intel GM45, który oczywiście nie wspiera sprzętowo renderowania 3D. Odpalenie WebGL w Firefoxie 10.0.0.2 przysporzyło mi trochę problemów pod systemem OpenSUSE (w moim przypadku w starej wersji 11.3 64bit z repozytorium ciągłym Thumbelweed ). Poniżej przedstawiam kolejne kroki jakie wykonałem, a po których WebGL wystartował przy renderowaniu software'owym: Najpierw musimy zainstalować bibliotekę Mesa (jeśli jej jeszcze nie mamy): sudo zypper in Mesa W Firefoxie należy w pasku adresu wpisać: about:config W wyszukiwarce można odfiltrować zmienne odpowiedzialne za WebGL poprzez wpisanie: webgl Ustawiamy odpowiednie zmienne jak poniżej webgl.force-enabled  jako: true webgl.force_osmesa jako: true webgl.osmesalib jako: /usr/lib64/libOSMesa.so.7 Oczywiście jeśli masz inną wersję Mesy to link sy...

Zdalne wykonanie komendy w BASH z przypisaniem do lokalnej zmiennej

Jeśli lubisz czasem tak jak ja tworzyć kod w BASHu to możliwe, że natkniesz się na problem wykonania zdalnej komendy (na przykład na serwerze) i pobrania wyniku tej komendy do lokalnej zmiennej. Mam tu na myśli na przykład skrypt, który sprawdza czy na serwerze w danym katalogu pojawił się jakiś pliczek - z tym zastrzeżeniem, że skrypt ma się wykonywać nie po stronie serwera a hosta, który się do niego łączy. Kwestie tego jak się logować przez SSH - czy przez zaszycie hasła w skrypcie czy przez wymianę kluczy pozostawiam Tobie i konkretnej implementacji jednak zdecydowanie lepszym pomysłem wydaje się wymiana kluczy. W każdym razie zaszywanie hasła w skrypcie wiąże się z pewnym ryzykiem. Przejdźmy zatem do meritum. W celu pobrania wyniku zdalnej komendy do lokalnej zmiennej należy użyć podobnej konstrukcji: wynik=$(ssh login@host polecenie_zdalne) W podobny sposób można użyć telnetu - jednak w przypadku tego protokołu o bezpieczeństwie możemy pomarzyć. Konkretny przykład: wynik...

Rekurencyjne zliczanie linii kodu w dużych projektach

Celem zliczenia linii kodu z wszystkich plików znajdujących się w jednym katalogu możemy użyć prostej komendy: wc -l *.java Powyższe polecenie policzy linie kodu znajdujące się w pliczkach z rozszerzeniem java. Co jednak jeśli chcemy policzyć linie z całego projektu, który podzielony jest na bardzo wiele katalogów? Polecam użyć połączenia komend "wc" oraz "find" w taki oto sposób: wc -l `find . -name \*.java -print` Wywołując to polecenie w katalogu głównym naszego projektu powinniśmy uzyskać informacje o całkowitej liczbie linii kodu zawartych w plikach *.java z całego projektu (łącznie z podkatalogami). Artykuł udostępniany na licencji CC-BY-SA-3.0

Konkatenacja w zapytaniach SQL a bindowanie przez "?"

Ostatnio w kodzie pewnego programisty znalazłem dosyć ciekawy błąd. Wynikał on z różnego sposobu podpinania parametrów do zapytania UPDATE (SQL). Wartości pól po "SET" były bowiem konkatenowane, natomiast część po słowie kluczowym "WHERE" bindowana przez znaki zapytania. Mniej więcej wyglądało to tak (pół-pseudokod): <?php $set = ' user_id =' . escape ( $user_id ) . ' ' ; ( ... ) if ( isset ( $_POST [ 'comment' ])) { $set .= ', comment="' . escape ( $_POST [ 'comment' ]) . '"' ; } query ( 'UPDATE `tabela` SET ' . $set . ' WHERE id=? ' , $id ); ?> Cały szkopuł polegał na tym, że w momencie, kiedy w którejkolwiek wartości podpiętej w zmiennej $set pojawił się znak zapytania (bo użytkownik np. chciał zadać pytanie), to do tego znaku zapytania została zbindowana zmienna $id i finalne zapytanie wyglądało np. tak : UPDATE ` tabela ` SET ` user_id `= 5 , ...

Bisekcja: Wyznaczanie miejsc zerowych

Wprowadzenie Wyznaczanie miejsc zerowych funkcji może być pomocne np. przy rozwiązywaniu równań kwadratowych lub innych wielomianów. Jednorazowe uruchomienie metody bisekcji (połowienia przedziałów) może posłużyć do wyznaczenia jednego miejsca zerowego (i tylko jednego) danej funkcji. Zastosowanie tej metody nie gwarantuje jednak wyszukania jakiegokolwiek miejsca zerowego (pomimo tego, że takie występują). Taka sytuacja może mieć miejsce gdy wybierzemy x0 , x1 tak, że dla obu tych punktów wartość funkcji będzie miała ten sam znak. Dokładność tej funkcji zależy tylko i wyłącznie od ilości wykonanych iteracji - im więcej ich wykonamy (połowień przedziałów) tym dokładniejszy wynik uzyskamy. Jedną z zalet tej metody jest błąd maksymalny, którym obarczony jest wynik - nigdy nie przekroczy on połowy odległości między badanymi punktami. Na przykład przy badaniu funkcji w przedziale 4-8 przy jednej iteracji maksymalnym błędem będzie 2. Podzielimy bowiem przedział ten na 4-6-8 i przesuniem...

Całkowanie numeryczne

Wprowadzenie Całkowanie numeryczne można porównać do podziału powierzchni całkowanej funkcji na przedziały (im dokładniejszy wynik chcemy uzyskać, tym więcej przedziałów). W zależności od wybranej metody całkowania będziemy liczyć pole w przedziałach dla prostokąta, trapezu lub paraboli. Do wyboru pozostaje nam również wybór czy ewentualny będziemy całkować pole figury pod całkowaną funkcją (z niedomiarem - wtedy uzyskany wynik może być mniejszy niż oczekiwany) lub nad funkcją (z nadmiarem - wtedy oczekiwany wynik może być większy niż oczekiwany). Pod koniec działania programu musimy zsumować pola wszystkich figur z pod przedziałów, które policzyliśmy tak, by uzyskać wynik. Graficzne przedstawienie problemu Całkowanie tak prostej funkcji jakmetodą prostokątów może dać duży błąd. Parametry wielkości przedziałów (ich liczność w całkowanym przedziale) należy dobrać odpowiednio tak, by błąd był jak najmniejszy. Całkowanie funkcji w przedziale od 0 do 8 z podziałem na 4 pod przedziały...

Problemy z kartami graficznymi Intel'a a OpenSUSE 11.3

W sytuacji, w której w trakcie pracy pod systemem OpenSUSE 11.3 z zintegrowanymi chipsetami graficznymi Intela (szczególnie z przetestowanymi przeze mnie Intel 855GM ale również różnymi chipsetami z serii GMA). Problemy, które mogą się pojawić są różne - na przykład przy pracy na starym 855GM występują problemy z KWin czy Compiz, a mianowicie na ekranie pojawiają się różnego rodzaju artefakty, które uniemożliwiają normalną pracę z systemem. Praca na domyślnych ustawieniach w OpenSUSE 11.3 z chipsetami z serii GMA powoduje zamrożenie systemu w różnych sytuacjach (przestaje działać nawet CTRL+ALT+Backspace, czy CTRL+ALT+(F1-F12) ). Rozwiązanie: YaST -> Edytor /etc/sysconfig -> Zakładka "System" -> Zakładka "Kernel" -> Zakładka "NO_KMS_IN_INITRD" (tutaj zmieniamy wartość z "no" na "yes") następnie zapisujemy i ponownie uruchamiamy system. Alternatywne rozwiązanie na plikach: sudo mcedit /etc/sysconfig/kernel (odszukujemy linię:...