Category Archives: Qt


CodeStat
December 10, 2012, 5:32 PM in Programming, Qt

Dzisiaj chciałem przestawić prosty programik który napisałem 1.5 roku temu jeszcze raczkując w Qt i który ostatnio doprowadziłem do użyteczności – CodeStat.

Program służy do badania paru faktów na temat kodu programów. Podaje informacje o ilości linijek pustych, z komentarzem oraz z kodem w danym pliku. Potrafi szukać w wielu folderach i podfolderach naraz.

System pozwala na wybieranie jakiego rodzaju pliki powinny być brane pod uwagę podczas skanowania folderów, a jakie ignorowane. Do znajdywania komentarzy używane są wyrażenia regularne.

Istnieje możliwość zapisania stworzonych statystyk do kilku formatów: HTML, CSV, Textile. Nie ma problemu z dodawaniem nowych formatów, są one definiowane w plikach .json.

Program można ściągnąć stąd: instalator lub zip

Kod dostępny jest na githubie razem ze specyfikacjami plików json, zachęcam do wysyłania mi dodatkowych filtrów i formatów eksportu.


Nowy telefon
May 22, 2011, 11:42 PM in Personal, Qt

Telefon którego używałem do wczoraj – Nokia e63, zakupiłem w listopadzie 2009, nie był więc taki stary, chociaż w świecie elektroniki półtora roku to niemało, zaczynało mi brakować w nim pewnych funkcjonalności no i ekran mógł być większy. Jednak nie byłem aż tak zdeterminowany by kupić nowy telefon (brak środków pieniężnych też był tutaj czynnikiem). Sytuacja jednak się zmieniła, bo od wczoraj jestem właścicielem nowiutkiej Nokii N8, do tego zapłaciłem za nią 0 zł. Ale zacznijmy od początku.

Był wtorek, 29 marca 2011, jeżeli dobrze pamiętam to pogoda była całkiem ciepła, co dziwne bo zima w tym roku była bardzo długa i mroźna. O godzinie 12 skończyłem wykłady i na rowerze pojechałem pod halę Expo gdzie odbywały się Akademickie Targi Pracy. Pojechałem tam bardziej w celach rozpoznawczych niż zawodowych (no i oczywiście po darmowy stuff ;)), wiadomo że nie ma ofert pracy dla studenta II roku. Wypełniłem kilka formularzy na praktyki (nikt się do mnie nie odezwał, nie wiedzą co tracą :P), moją uwagę zwróciło stoisko firmy Comarch (nie tylko dlatego, że rozdawali jedną z moich ulubionych zabawek – jo-jo), gdzie można było wypełnić quiz z wiedzy o C++, a najlepsze osoby miały zostać zaproszone na warsztaty pod tytułem “Qt Declarative UI i Qt Mobile” w maju. Ponieważ lubię się sprawdzić, lubię Qt oraz długopis po wypełnieniu quizu można było sobie zostawić – wypełniłem quiz… i w sumie zapomniałem o sprawie. Gdzieś tam na początku maja przypomniał mi się ten quiz, ale uznałem że jakby mieli mnie zaprosić to już by to zrobili. Okazało się że oni o mnie nie zapomnieli i 17 maja otrzymałem maila, że “Podczas targów (…) okazałeś się jednym z lepszych kandydatów, dlatego teraz chcielibyśmy zaprosić Cię do wzięcia udziału w warsztatach (…)”. Bardzo się ucieszyłem, że mój zakres wiedzy C++ jest “jednym z lepszych” i zapisałem sobie datę (21 maja) w kalendarzu.

W dzień warsztatów pojawiłem się w budynku Lodex (przy okazji Politechnika ma piękny kampus, może to tylko ja, ale w wiosennym słońcu, z zieloną trawą wyglądało to naprawdę ładnie) i czekałem… Warsztaty miały zacząć się o 14, ja byłem już o 13.20, ma się to ADHD ;) O 14 pojawili się panowie z Comarcha, usiedliśmy (miało być 15 osób, przybyło 12 albo 13) sobie na sali wykładowej i po krótkim wprowadzeniu oraz rozdaniu smyczek i kubków Pan Przemysław Jacak przeprowadził wykład na temat Qt Quick/Qt Declarative/QMLa, wideo z tego samego wykładu można znaleźć tutaj (część 1 z 7). Po wykładzie, czyli ok 16.40 nastąpiła przerwa (firma zapewniła napoje i przekąski, duży plus dla nich). Następnie przeszliśmy do części konkursowej, mieliśmy na podstawie informacji zdobytych na tym wykładzie napisać program w QML który będzie pokazywał pogodę dla wybranego miasta, mieliśmy do tego użyć informacji pogodowych z iGoogle, niestety nie wszyscy mieli połączenie z internetem dlatego dostaliśmy plik .xml z pogodą dla Łodzi i na tym mieliśmy pracować. Na program mieliśmy ok 80 minut. O godzinie 18 każdy przedstawił ile udało mu się napisać, okazało się że ja miałem najbardziej kompletny program (z 20 minut i byłby gotów). No i tak to było, jury pogratulowało mi i przekazało w moje ręce Nokię N8. A reszta… jest milczeniem… Dlatego jeszcze trochę napiszę ;)

Co do samego telefonu to nie będę tutaj pisał recenzji, bo się do tego nie nadaje, może za jakiś czas (miesiąc?) napiszę sprawozdanie z tego jak się go używa i co mnie wkurza (coś na pewno będzie). Co do poziomu quizu z wiedzy o C++, był on dość podchwytliwy i wymagał zastanowienia się. Pytania polegały głównie na tym, że był kawałek kodu i pytania do niego, pytania dotyczyły m.in. virtual, dziedziczenia oraz operacji na wskaźnikach. Co do poziomu samego konkursu to byłem podwójnie zaskoczony: raz że konkurs był bardzo łatwy jak na tak cenną nagrodę, dwa że tak mało ludzi dało sobie radę z zadaniem po ponad dwugodzinnym wykładzie który dokładnie nam wytłumaczył jak używać qmla. Ale to wygląda jakbym narzekał, a ja nie narzekam, cieszę się i to bardzo, ledwo mogę uwierzyć że moje umiejętności programistyczne wreszcie na coś się przydały ;)

Dlatego pamiętajcie dzieciaki: warto się uczyć programowania :)


O OAuth i Twitterze słów kilka(set)
August 15, 2010, 12:10 AM in Qt, Technology

Twittera w sumie używam głównie do śledzenia tego, co robią inni, sam niby też dodaję co jakiś czas aktualizacje, ale czy ktoś to w ogóle czyta, czy to kogoś interesuje? Pewnie średnio. Ale dzięki temu potem łatwiej mi zlokalizować w czasie kiedy pracowałem nad jakimś projektem lub kiedy obejrzałem dany film ;-)

Jedyny problem jaki mam z Twitterem, to brak dobrego klienta na Windowsy. Twitter nie może narzekać na małą ilość klientów, ale bardzo duża ich część albo używa Adobe Air, za którym nie przepadam, albo jest przeładowana graficznie (czy wyszło jakieś rozporządzenie mówiące, że klienci Twittera nie mogą wyglądać jak natywne programy, bo ja chyba o czymś nie wiem). Potrzebuje prosty program z podstawowymi funkcjami, który będzie sobie siedział w tray’u i wyświetlał informację, gdy ktoś doda aktualizację.

Ciągle uczę się Qt to pomyślałem, że dobrym ćwiczeniem będzie napisać taki program samemu.
Zacząłem od znalezienia biblioteki do obsługi API Twittera, znalazłem QTwitLib, zacząłem pisać. Program zaczął nabierać kształtów, w pewnym momencie potrzebowałem coś sprawdzić w dokumentacji API, wchodzę na dev.twitter.com, a tam piękny komunikat “As of June 30, 2010, basic auth will no longer be supported.” sprawdzam czego używa QTwitLib, oczywiście autoryzacji HTTP, no to wypad. Zacząłem szukać innej biblioteki z obsługą nowego sposobu autoryzacji – OAuth (“cóż to za magiczny protokół?”), znalazłem QOAuth (której autorem jest polak ;-) ), zraziła mnie trochę zależność od QCA, ale co tam. Po kilku godzinach prób kompilacji QCA, dałem sobie spokój (później okazało się, że to nie wina QCA, czy tym bardziej QOAuth, ale bug w Qt 4.7 beta 1). Usiadłem do dokumentacji OAuth na dev.twitter.com i po pewnej walce udało mi się wyskrobać własną bibliotekę OAuth, bez potrzeby QCA (QCA było tam głównie potrzebne do wyliczenia sygnatury algorytmem HMAC-SHA1, ja napisałem do tego własną funkcję).

A teraz może w skrócie, OAuth – z czym to się je?
OAuth jest protokołem autoryzacji opracowanym w 2006 roku między innymi przez ludzi z Twittera, daje on dostęp aplikacjom klienckim do działania w imieniu użytkownika (np. publikacja aktualizacji) bez znania jego hasła, użytkownik sam wybiera którym aplikacjom pozwala na dostęp i może to prawo im w każdej chwili odebrać.

Działa to na tej zasadzie: twórca aplikacji (np. ja ;-) ) rejestruje ją u dostarczyciela usługi (np. Twitter) i otrzymuje unikalny klucz (consumer_key) i tajny ciąg znaków (consumer_secret). Zanim aplikacja będzie mogła działać w imieniu użytkownika, musi ona go prosić o autoryzację, w tym celu najpierw wysyła zapytanie o bilon (token) do serwera usługodawcy. Teraz może na chwilę zatrzymajmy się by wytłumaczyć sobie na czym polegają zapytania i po co aplikacji te klucze były. Otóż każde zapytanie musi (oprócz innych ważnych informacji jak wersja OAuth czy czas zapytania) zawierać klucz aplikacji i być podpisane sygnaturą. Sygnatura jest obliczana na podstawie treści zapytania oraz tajnym ciągiem znaków otrzymanym podczas rejestracji aplikacji. Tylko poprawnie podpisane zapytania dostaną poprawną odpowiedź. Metody podpisywania są 3: kluczami RSA, zwykły ciąg znaków (Plaintext) lub właśnie algorytmem HMAC-SHA1. Twitter obsługuje tylko ten ostatni format.

Jeśli dobrze podpisaliśmy nasze zapytanie o token, otrzymamy tymczasowy bilon, on też składa się z klucza (token_key) i tajnego ciągu znaków (token_secret). Mając token, wysyłamy użytkownika pod odpowiednio spreparowany link, pod którym użytkownik zostanie zapytany czy zezwala naszej aplikacji na działanie w jego imieniu. Jeśli wyrazi zgodę otrzyma numer PIN, który powinien wpisać w naszej aplikacji. My, po otrzymaniu PINu, wysyłamy zapytanie, tym razem o stały token. Jeśli znowu wszystko poszło dobrze, otrzymamy token. Zapisujemy go gdzieś i od teraz możemy pobierać aktualizacje znajomych użytkownika, wysyłać aktualizacje na jego konto itd.

Tak w skrócie wygląda OAuth (na przykładzie Twittera), zainteresowanych by wiedzieć więcej, zapraszam tutaj.
Ja wracam do prac na biblioteką i programem, mam zamiar wydać je razem ze źródłem, więc zainteresowanych proszę o cierpliwość.