jump to navigation

Czas wykonania kodu w C# Luty 6, 2010

Posted by artiko in : C#, Programowanie , add a comment

Często dla celów diagnostyczno – benchmarkowych chcemy zmierzyć czas wykonania kodu programu/algorytmu. Prosta metoda to:

DateTime start = DateTime.Now;
//nasz fragment kodu
DateTime stop = DateTime.Now;
 
TimeSpan elapsedTime = stop - start;
MessageBox.Show("Czas wykonania: " + elapsedTime);

Można zrobić to jeszcze ładniej, korzystając z klasy System.Diagnostics:

Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
//nasz fragment kodu
stopwatch.Stop();
MessageBox.Show("Czas wykonania: " + stopwatch.ElapsedMilliseconds);

Jak odczytać ścieżkę z OpenFileDialog Styczeń 12, 2010

Posted by artiko in : C# , add a comment

Aby odczytać ścieżkę, w której znajduje się wskazany przez OpenFileDialog plik można użyć:

System.IO.Path.GetDirectoryName(openFileDialog.FileName)

Jak wybrać architekturę docelową kompilacji projektu w Visual C# 2008 Express Styczeń 6, 2010

Posted by artiko in : C#, Programowanie , 1 comment so far

Przy używaniu w Visual C# 2008 Express Edition ADO.NET do obsługi plików xls otrzymywałem błąd „Dostawca ‚Microsoft.Jet.OLEDB.4.0’ nie jest zarejestrowany na lokalnym komputerze.”. Dodam, że używam Windows 7 x64. Jak wyczytałem, nie ma z tym problemów na wersjach systemów x86. Postanowiłem więc skompilować projekt tylko na architekturę x64.

Pojawił się problem: jak zmienić architekturę docelową kompilacji? Pod paskiem narzędzi jest opcja jej zmiany, ale domyślnie jest ona niedostępna. Jak ją włączyć? Odpowiedź jest banalna, wystarczy w Tools->Options zaznaczyć opcję Show all settings, która domyślnie jest odznaczona. Następnie w dziale Projects and Solutions wejść w General i zaznaczyć Show advanced build configurations. Dzięki temu otrzymujemy dostęp do wielu funkcji, między innymi możliwości definiowania.

Rozwiązanie znalazłem na tym blogu. Znajdują się tam również screeny z kolejnymi krokami.

Obfuskacja – zaciemnianie kodu w Javie, narzędzie Czerwiec 17, 2009

Posted by artiko in : Java, Software , 2comments

W dzisiejszych czasach aplikacje pisane w Javie lub C# dość łatwo zdekompilować i otrzymać czasami przejrzysty kod. Oczywiście już dawno temu wymyślono sposoby na zabezpieczanie się przed tym :)
Jednym i bardzo prostym jest właśnie obfuskacja, czyli zaciemnianie kodu. Polega ona na takiej modyfikacji kodu bądź bytecodu, by nie było możliwe jego późniejsze zrozumienie. Po dokładny opis odsyłam na stronę Wikipedii – pl.wikipedia.org/wiki/Zaciemnianie_kodu.
Po bardzo krótkich poszukiwaniach w sieci znalazłem projekt o nazwie ProGuard, dzięki któremu można w naprawdę szybki sposób można zaciemnić kod, zmniejszyć objętość plików oraz dokonać optymalizacji kodu wynikowego. Można go uruchamiać z linii komend, jednak posiada również GUI. Osobiście wolę GUI, gdyż w przypadku używania wersji konsolowej trzeba tworzyć plik z konfiguracją dla każdej paczki. Aplikacja jest napisana w Javie, co czyni ją multiplatformową.
Do programu w zakładce Input/Output po prostu dodajemy nasz plik jar z aplikacją, plik wynikowy oraz, co bardzo ważne, pliki bibliotek, do których znajdują się odniesienia w naszym kodzie. Następne zakładki można pozostawić na wartościach domyślnych, w Process kliknąć Process! i po chwili dostajemy plik wynikowy, zabezpieczony przed tymi, którzy chcieliby do niego zaglądać :)
Ja przy pierwszym użyciu natrafiłem na błąd
Warning: javax.swing.JFrame: can't find superclass or interface javax.swing.TransferHandler$HasGetTransferHandler

Rozwiązanie jest proste, w zakładce Information wystarczy odznaczyć pola Skip non-public library classes i class members.

Grupowanie wyświetlanych obiektów Java3D Maj 13, 2009

Posted by artiko in : Java , add a comment

Do rozwiązania typowy problem: na canvasie wyświetlamy kilkadziesiąt obiektów, z czego część jest statyczna w czasie działania programu, część dynamicznie odświeżana. Co zrobić, by nie musieć przy odświeżaniu przeładowywać wszystkich obiektów w canvasie i uniknąć mrugania?
Odpowiedź jest prosta jesli użyjemy klasy javax.media.j3d.BranchGroup do której metodą addChild(Node arg0) możemy po prostu dodawać obiekty 3D. Oczywiście całą taką grupę łatwo się transformuje.
Jeśli do jednej grupy dodamy obiekty statyczne w wyświetlaniu, do drugiej odświeżane wystarczy, że w czasie wykonania programu będziemy odświeżać tylko tą drugą grupę. Można to uczynić używając metody detach() na rzecz grupy, a następnie przeładowując jej zawartość i dodając ją do canvasu, bądź grupy nadrzędnej.