Przejdź do głównej zawartości

Posty

Wyświetlanie postów z 2011

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