Programowanie
O programowaniu słów kilka
Z C++ zagadka nr 4
lip 25th
Mając przedstawioną poniżej strukturę danych i kontener zawierający wskaźniki, wykonać operację/metodę methodA na rzecz obiektu obj_ posługując się iteratorem:
class Foo {
public:
methodA() {
printf("Wykonano...\n");
}
}
struct data_t {
int i_;
Foo* obj_;
}
std::list<data_t*> data_;
for(std::list<data_t*>::iterator i = data_.begin(); i != data_.end(); i++ ) {
// operacje
}
W jaki sposób wykonać blok operacji ? Możliwości mamy kilka:
/* 1 */ i->obj_->methodA(); /* 2 */ *i->obj_->methodA(); /* 3 */ (*i)->obj_->methodA();
Rozwiązanie zagadki jest proste, ale wymaga znajomości priorytetów operatorów. Pierwsze wywołania jest całkowicie błędne, ponieważ lista przecowuje wskaźniki do strkutury, a nie samą strukturę. Zatem należy najpier wyłuskać strukturę znajdującą się pod wskazywanym adresem i dopiero wtedy wykonać metodę. Okazuje się że rowiązania 2 również jest nie poprawne, właśnie ze względu na priorytety operatorów. Dopiero numer 3 daje zamierzony efekt. Na szczęście błąd ujawnia się na etapie kompilacji…
VIM, spacje zamiast wcięć
lip 7th
Charakterystyczną cechą języka Python jest oddzielanie bloków kodu za pomocą wcięć. Z tego powodu są one niezmiernie istotne, a szukanie błędu powstałego przez źle umieszczone wcięcie, jeśli nie jest sygnalizowane przez interpreter może być bardzo czasochłonne a czasami wręcz frustrujące. Jakiś czas temu spotkałem się z takim problemem, który wynikł z używania 2 edytorów na 2 różnych maszynach. Na Windows korzystałem zamiennie z Vim oraz Programmers Notepad (tab = 4 spacje), pod linuxem wyłącznie z Vim bo tylko na tyle pozwalał interface konsolowy.
W pewnym momencie doszło do kolizji. Z jakiegoś powodu część wcięć przesunęła się w lewo – czyli znikły. Na całe szczęście 90% błędów zostało wykrytych przez interpreter. Od razu zaznaczam że nie przeprowadziłem pełnej analizy problemu, ale coś mi podpowiadało że to wina Tab w Vim. Poniżej przedstawiam w jaki sposób zamieniać wszystkie tabulacje na 4 spacje. Komendy można umieścić w .vimrc (linux) czy też w _vimrc jeśli korzystamy z Windows:
set tabstop=4 set shiftwidth=4 set expandtab
Na sam koniec warto dodać, że mimo iż Vim może być postrzegany jako stary edytor, trudny w użyciu a posługują się nim tylko starzy wyjadacze-programiści z poprzedniej epoki, to ma on wiele funkcji których nie oferuje nawet Notepad++, a programowanie bez odrywania rąk od klawiatury jest o wiele mniej męczące. Polecam cheatsheet: http://www.qitty.net/lnx/vim-cheatsheet.png
.NET słowa kluczowe out,ref
maj 8th
Znalazłem ostatnio trochę czasu aby dokładniej przyjrzeć się .NET i na własnej skórze przekonać się czy jest warty więcej niż Java. Dotąd napisałem tylko dwa proste programik wykorzystują tę platformę – aplikację MDI obsługująca skromną bazę danych przechowującą informację o osobach opartą na plikach binarnych, oraz obsługę portu rs232. Pamiętam że sposób programowania nie powalił mnie wtedy na kolana, przypominało to raczej tylko trochę uproszczone C++. Oczywiście skorzystałem z całkiem fajnego mechanizmu właściwości(properties) i upraszczającej życie pętli foreach, stworzyłem nawet własną kontrolkę, ale wszystko to było robione w pośpiechu i nie pozwoliło wniknąć głębiej. Teraz postanowiłem nadrobić zaległości i jestem mile zaskoczony.
Więcej >
Uruchamianie metod klas w nowych wątkach w c++ i pthreads
kwi 6th
Podczas pisania kolejnego projektu w języku c++ natknąłem się na interesujący problem. Program docelowo miał działać na systemie czasu rzeczywistego zatem jego celem było również zapoznanie z różnymi mechanizmami RTOS. Pierwszy problem pojawił się przy korzystaniu z mechanizmu wielowątkowości, pewnie byśmy się nie dowiedzieli o jego istnieniu gdybyśmy nie zdecydowali się na programowanie obiektowe, ale po kolei…
Więcej >
Prosty przykład wykorzystania Java Servlets, JPA, Oracle 10XE i Glassfish v3
lut 3rd
Celem tego wpisu jest pokazanie w jaki sposób stworzyć dynamiczną prostą aplikację WWW wykorzystującą technologię Java Servlets pobierającą dane z lokalnie dostępnej bazy danych Oracle 10g XE z wykorzystaniem JPA. Całość ma obsługiwać Glassfish v3.
Struktura relacyjna w bazie danych jest bardzo prosta, ale wystarczająca do zapoznania z JPA – składa się z tabeli zawierającej dane studentów takie jak imię, nazwisko i z z tabeli opisującej grupy dziekańskie. Obie tabele powiązane są relacją wiele-do-jednego, także grupa może składać się z wielu studentów, natomiast każdy student przynależy do dokładnie 1 grupy.
Więcej >
Scons – alternatywa dla Make, Qmake i podobnych
sty 29th
Scons jest oprogramowaniem którego zadaniem jest ułatwienie budowania binarnej wersji napisanego kodu. Twórcy zachwalają swoje dzieło jako między platformowe, łatwiejsze w użyciu i szybsze. Bazuje na Pythonie i dlatego postanowiłem się nim trochę zainteresować.
Pierwsze próby zakończyłem sukcesem. Co mi się bardzo spodobało to możliwość wyboru kompilatora. Mając do dyspozycji g++ z MinGW oraz Visual C++ Compiler, można zadecydować który z nich ma zostać użyty.
Najprostszy plik z instrukcją zdudowania programu to 1 linia:
Program('main.cpp')
Na Windows domyślnie zostanie wykorzystany (o ile dostępny) kompilator Microsoftu. Jeśli jednak chcemy użyć g++, wystarczy dopisać jeszcze jedną linię:
env = Environment(tools = ['mingw'], CC = 'gcc', CCFLAGS = '-O2')
env.Program('main.cpp')
Piewsze lody przełamane, kolejne próby będą sprawdzały łatwość dołączania zewnętrzych bibliotek jak boost czy qt.
SOAP w Pythonie
sty 11th
Mimo że sam język jest uważany za potężny z dostępną dużą ilością bibliotek, to nie do koońca jest to prawda. SOAP w Pythonie niestety ale po prostu leży. Są 2 biblioteki umożliwiające tworzenie webserviców i tak naprawdę 2 które umożliwiają korzystanie z już utworzonych. Ja swoje próby rozpocząłem od soaplib, biblioteki która została porzucona przez twórców, ale w wyniku tzw. forków w miarę często pojawiają się nowe wersje. Niestety był to błąd.
Więcej >
HSSPOJ – zadanie które nie dawało mi spokoju
sty 1st
Zadanie z konkursu algorytmicznego dla uczniów szkół średnich. Zwróciłem na nie uwagę, gdyż współczynnik poprawnych rozwiązań wynosił lekko ponad 30%, a skoro to konkurs dla licealistów to powinienem sobie dać radę. I tu pierwszy szok, nic z tego… Wiedza jaką dysponowałem okazała się daleko nie wystarczająca, a próby znalezienia rozwiązania podanego na tacy spełzły na niczym. Co dodatkowo rozbudziło moją ciekawość to fakt że na forach poświęconych programowaniu, nikt nie szuka pomocy.
Zadanie finalnie okazało się rozbudowaną grą Nim, ale bez znajomości jednego twierdzenia teorii gier prawdopodobnie siedziałbym na tym jeszcze dłuuuugo…
Treść zadania dostępna pod adresem http://hs.spoj.pl/problems/HS09GAME/
Więcej >
Adnotacje w servlet 3.0
gru 26th
W JSR 315: Java Servlet 3.0 Specification zdefiniowano dodatkowe, nowe adnotacje mające na celu ułatwienie tworzenia aplikacji. Referencyjna implementacja została już zawarta w jednym z „nocnych wydań” serwera Glassfish. Dziwi zatem fakt że informacja o tym że servlety nie wymagają już odpowiednich wpisów w deskryptorze rozmieszczenia ( ang. deployment descriptor ) nie została umieszczona w oficjalnym tutorialu. Mimo że przykładowe projekty dla serwletów w SDK 6 zostały napisane od nowa żaden z nich nie wykorzystuje nowych adnotacji. Więcej >
NetBeans 6.8 + Glassfish v3 + jee examples
gru 24th
Lekko interesując się Java EE napotkałem pewien problem, związany z kompilacją przykładowego kodu, dotyczącego jeszcze jee 5. Mimo że wszystkie wymagane biblioteki zostały zlokalizowane i dodane do projektu, i tak występowały błędy kompilacji związane z nieodnalezieniem pakietu javax.persistance.
Większość wypowiedzi na forach dotyczy sytuacji w której wspomnianych bibliotek w projekcie nie ma. Ja miałem pewność że pod tym względem wszystko jest w porządku, gdyż przeniesienie projektu na dysk C:\ umożliwiało bezproblemowa kompilację. Rozwiązanie problemu znalazłem tu: http://forums.netbeans.org/post-42466.html. Przed kompilacją projektu bookstore1 należy jeszcze zbudować bookstore będąc w jakiś sposób projektem nadrzędnym. W przeciwnym wypadku pojawi się wspomniany błąd.
Poniższy film przedstawia jak z pomocą NetBeans 6.8 poprawnie zbudować projekt i zdeployować go na serwerze aplikacji. W moim przypadku serwerem aplikacji jest Glassfish v3.
Na deploy’u jednak nie koniecznie musi się skończyć. Wiele przykładów do SDK 5 wymaga połączenia z bazą danych. Tak jest z aplikacją bookstore, wykorzystaną w poprzednim filmie. Mimo że została poprawnie umieszczona na serwerze, nie może pobrać danych, o czym informuje zgłoszony wyjątek. Konfiguracja bazy oraz połączenia
Jej to moje pierwsze screencasty