baszczewski

Aplikacja biznesowa – Polimeni

Nie ma drugiego takiego programu na rynku. W końcu aplikacja, którą tutaj prezentuję powstała w oparciu o indywidualne wymagania klienta. Jest to ciekawe narzędzie wspomagające działalność firmy na wielu płaszczyznach. Pełni funkcję bazy danych, pojemnika dokumentów, oraz analityczną.

Co program robi

Najważniejszym zadaniem programu jest przechowywanie oraz zarządzanie danymi. Tych gromadzonych jest w programie całkiem sporo. Są to miedzy innymi: szczegóły dotyczące najemców, marek, umów, lokali, liczników. Przebiega to w bardzo prosty i zunifikowany sposób. Na każdej z kart programu użytkownik widzi rekordy oraz edytor, w którym może zmodyfikować czy też dodać dane. Każdy z przygotowanych edytorów posiada czytelny oraz przejrzysty interfejs, tak aby praca z programem była możliwie prosta. Dodatkowo obok każdej z list jest dostępny filtr, ułatwiający dotarcie do pożądanych danych.

Bardzo przydatną opcją w programie jest możliwość eksportu zgromadzonych danych do arkusza kalkulacyjnego. Dotyczy to niemalże wszystkich zaimplementowanych zestawień danych. Znacznie zwiększa to elastyczność aplikacji. Eksport danych umożliwia sporządzanie zestawień oraz analiz, które nie były przewidziane w trakcie tworzenia programu.

Znaczącą funkcją jest również możliwość dołączania plików do wybranych rekordów. Dzięki temu użytkownicy, z poziomu jednego prostego w obsłudze programu, mają dostęp zarówno do bieżących danych, ale i zaarchiwizowanych dokumentów, skanów umów i innych ważnych materiałów.

Najważniejsza w programie jest jednak możliwość tworzenia różnych raportów oraz dokumentów. Zaimplementowano ich aż osiemnaście. Są to: agreement abstract, lease abstract, tenants statement, analiza zabezpieczeń, aneksy, branże, czynsze, estymacja przychodów, lokale, obroty, parametry umowy, pozostałe opłaty, prognoza czynszu, rozliczenie mediów, zestawienie do faktur, pismo do najemcy, test czynszu obrotowego, test czynszu stałego/skokowego/opłat.

Doskonały kod źródłowy

Jestem naprawdę dumny z kodu źródłowego, który powstał przy okazji realizacji tego projektu. Niektóre jego elementy to ewolucja już opracowanych przeze mnie w przeszłości bibliotek. Inne natomiast powstały od zera na potrzeby aplikacji. Całość jest jednak możliwie dopracowana. Jak zwykle bywa przy tego typu projekcie, posłużyłem się biblioteką Qt (5.X). Program w pełni integruje się z systemem, a jego kod jest przenośny. Nic nie stoi na przeszkodzie, aby program był używany na Windowsie, Linuksie czy też Mac OS X.

Całkiem nowym rozwiązaniem, które tutaj wdrożyłem jest biblioteka do tworzenia dokumentów mojego autorstwa. Za jej pomocą możliwe jest wczytanie oraz przetworzenie pliku binarnego, który zawiera kompletny zapis raportu/dokumentu.  Tym samym możliwe jest dołączenie do programu dokumentu bez jego rekompilacji. Same dokumenty natomiast mogą być tworzone oraz testowane w zewnętrznym edytorze dedykowanym temu zadaniu. Aby zapis dokumentów był możliwe prosty i przyjazny logika oraz szablon zostały od siebie odseparowane. Za pomocą języka JavaScript użytkownik definiuje dane, które są zapisywane w postaci xml-a. To bardzo proste. Rozbudowałem język o dodatkowe komendy, które upraszczają najważniejsze zadania. Za język szablonów odpowiada natomiast XSLT. Dane źródłowe (xml) za jego pomocą są przetwarzane na HTML. To potężne narzędzie. Na każdym poziomie daje użytkownikowi ogromne możliwości. Sam HTML jest renderowany za pomocą mojego własnego silnika! To bardzo ważne, bo żadna z istniejących technologii nie radzi sobie idealnie z drukowaniem dokumentów. W mojej bibliotece było natomiast kluczowe poprawne łamanie tabel pomiędzy stronami z zachowaniem stałych elementów (stopka, nagłówek).

Kolejna ciekawa biblioteka, którą dopracowałem przy okazji tego projektu wspomaga operacje na bazie danych. W jej skład wchodzą proste klasy umożliwiające definiowanie oraz redefiniowanie zapytań za pomocą prostego obiektu (Query Builder). Na tym fundamencie powstał natomiast zaawansowany CRUD, który cechuje się dużą elastycznością. Przy jego pracy możliwe jest wpływanie na niemalże każdy realizowany rodzaj zapytań (czytanie rekordów, działania na bazie danych). Już na starcie wspierane są w nim różne rodzaje relacji (jeden do jednego, wielu do wielu). Użytkownik (programista) przy pracy z tym crudem musi tak naprawdę zbudować tylko UI (za pomocą wbudowanego w Qt designera) i dziedziczyć po mojej klasie.

Najważniejszym elementem stojącym jednak za tym programem, jest schemat bazy danych zaprojektowany na jego potrzeby. Skorzystałem w tym celu z wielu możliwości stojących za systemem bazodanowym MySQL. Program korzysta z wyzwalaczy, kluczy obcych, procedur oraz funkcji składowych (PL/SQL).

Oprogramowanie dla Twojej firmy

W Twojej firmie być może również można wdrożyć oprogramowanie, które ułatwi rożne procesy i wspomoże pracę. Jeśli tak napisz do mnie. Z pewnością pomogę Ci opracować satysfakcjonujące rozwiązanie.

Ewidencja odpadów

Ewidencję odpadów przygotowałem dla Wydawcnitwa Verlag Dashofer. Jestem bardzo zadowolony z siebie, że udało mi się zrealizować ten projekt na satysfakcjonującym poziomie. Był to jeden z największych projektów, które dotychczas realizowałem. Na jego potrzeby przygotowałem wiele dodatkowych bibliotek oraz narzędzi, które przy drobnych modyfikacjach znajdą zastosowanie również w przyszłości. Kilka miesięcy, które poświęciłem na przygotowanie tego programu, nauczyły mnie bardzo wartościowej rzeczy: muszę znacznie rozsądniej podchodzić do harmonogramu.

Program posiada modułową budowę. Dodatkowe funkcjonalności mogą być dodawane do niego za pośrednictwem wtyczek i przygotowanego w tym celu API. Każda wtyczka oferuje szereg katalogów danych oraz raportów, które za jej pośrednictwem mogą być generowane. Użytkownicy łatwo mogą się przełączać pomiędzy dostępnymi modułami, ale również wybrać  na przyszłość moduł domyślny.

Program posiada sporo funkcjonalności. Przekłada się to chociażby na strukturę bazy danych, która liczy obecnie ponad 80 tabel. Uwierzcie mi, że w tej dziedzinie problemowej to absolutne minimum. Dodatkowo, w ramach zlecenia, przygotowałem narzędzie umożliwiające tworzenie oraz wczytywanie kopii zapasowych, generator kluczy produktów, oraz profesjonalny instalator.

Ewidencja odpadów doczekała się w międzyczasie już kilku aktualizacji. Mam nadzieję, że nasza współpraca dalej będzie się dobrze układała.

Moduły

Odpady – w danym module możliwe jest prowadzenie ilościowej oraz jakościowej ewidencji odpadów. Użytkownicy dysponują pełną historią zaksięgowanych odpadów, ich pochodzenia oraz metod zagospodarowania. W bazie przechowywane są dane dotyczące posiadaczy odpadów, stawek składowania odpadów na przełomie lat, odpadów, metod unieszkodliwiania/odzysku, składowisk odpadów, miejsc oraz instalacji do unieszkodliwiania czy zezwoleń. Moduł jest aktualizowany pod kątem obowiązujących przepisów. W ramach tego modułu możliwe jest wygenerowanie ponad 35 dokumentów. Znajdują się wśród nich raporty, które są udostępniane odpowiednim urzędom/klientom. Inne posiadają charakter statystyczny/pomocniczy.

Osady ściekowe – kolejny ewidencyjny moduł. Posiada swoje własne katalogi danych. Umożliwia utworzenie dedykowanych dokumentów.

Opakowania – umożliwia ewidencję opakowań, ale również odpadów opakowaniowych i poużytkowych. Moduł umożliwia wygenerowanie wielu dokumentów.

Zużyty sprzęt elektryczny i elektroniczny – umożliwia ewidencję danych tego typu oraz tworzenie różnego typu raportów, zestawień, zaświadczeń.

Umowy cywilno-prawne – jest to pomocniczy moduł umożliwiający tworzenie umów na podstawie wybranych kryteriów.

Faktury – za pomocą tego modułu jest możliwe przygotowywanie faktur. Program wspomaga automatyczne uzupełnianie faktur pod kątem dokonanego zagospodarowania/przyjęcia odpadów.

Słownik budowlany

Jest to program, który przygotowałem dla biura tłumaczeń PRZEKŁADNIA. Głównym celem było dostarczenie klientowi oprogramowania, za pomocą którego mógłby kontynuować swoją wieloletnią pracę. W jego skład wchodzi kilka narzędzi.

Pierwszym z nich jest edytor. Edytor  umożliwia rozwijanie, ale i przygotowywanie całkiem nowych słowników. To bardzo proste w obsłudze narzędzie. Dostosowane do potrzeb zamawiającego, może być całkowicie użytkowane za pomocą klawiatury. Posiada wiele dodatkowych funkcji dzięki, którym łatwo dotrzeć do danych spełniających odpowiednie kryteria. Np. możliwe jest wylistowanie wszystkich haseł bez kategorii czy tłumaczenia. Na potrzeby projektu została przygotowana bardzo wydajna baza danych SQlite. To jednak nie wszystko. Całość została solidnie zabezpieczona przed dostępem za pomocą zewnętrznych narzędzi (wymaganie klienta). Wszystkie dane są mocno szyfrowane. Z pomocą przyszła mi tutaj biblioteka SQLCipher.

Kolejny program jest dedykowany zwykłym użytkownikom. Jest to sympatyczna, estetyczna aplikacja, która zapewnia dostęp do bazy słownika. Interfejs programu jest w pełni konfigurowalny. Możliwa jest zmiana układu programu, wielkości czcionek, ale i zachowanie schowka przy wybieraniu różnych haseł. Odpowiednio została zaprojektowana wyszukiwarka, która jest niewrażliwa na białe znaki, czy też umiejscowienie haseł w zdaniach. Nawigacja programu umożliwia łatwe przechodzenie pomiędzy frazami, a ich tłumaczeniami, synonimami i relacjami różnych typów. W tym celu wystarczy kliknąć w wyświetloną etykietę. Program podczas pierwszego uruchomienia musi przejść przez rejestrację. Jest to zabezpieczenie uniemożliwiające zainstalowanie programu wśród użytkowników, którzy nie maja wykupionej licencji i nie posiadają klucza produktu. Słownik potrafi dodatkowo automatycznie wykrywać i pobierać aktualizacje.

To nie wszystkie narzędzia powstałe na potrzeby tego projektu. Dodatkowo przygotowałem program umożliwiający generowanie kluczy produktu, wysyłanie aktualizacji na serwer oraz usługę Internetową, która umożliwia przeprowadzenie rejestracji oraz zarządzanie użytkownikami. Wszystko oczywiście bazuje na bibliotekach Qt. Nic nie stoi na przeszkodzie aby wydać oprogramowanie na różnych systemach operacyjnych.

Qtiko – odtwarzacz muzyczny

W ramach konkursu Ubuntu App Showdown przygotowałem prosty odtwarzacz muzyczny. Tego typu aplikacji jest wiele, ale większość z nich posiada ogromne braki, które już na starcie je dyskwalifikują. Skomplikowany interfejs, powolne działanie, słaba rozszerzalność – to tylko niektóre powody dla których postanowiłem przygotować własną aplikację. Czas trwania konkursu to niecałe 3 tygodnie. Do tego nie mogłem poświęcić w pełni tego okresu na ten projekt ze względu na inne zobowiązania zawodowe. Zaprezentuję jednak co się udało w międzyczasie przygotować.

Qtiko

Tworząc interfejs aplikacji wzorowałem się na doskonałych makietach Dana Rabitta. Program tym samym może przypominać inne podobne aplikacje takie jak Beatbox czy iTunes. Qtiko jest natomiast lekkie i w pełni przenośne (dzięki Qt). Tworząc Qtiko przyłożyłem dużą wagę do wydajności. Tym samym wiele elementów aplikacji realizuje swój kod w osobnych wątkach. Dotyczy to zapytań do baz danych, parsowania wyników z usług internetowych, czy wczytywania oraz przetwarzania zdjęć z dysku komputera. Wszystko to miało za cel uczynić interfejs aplikacji możliwie płynnym. W dużej mierze się to udało. Program uruchamia się bardzo szybko, podgląd okładek wyświetlany jest natychmiast, a jego przewijanie nie spowalnia pracy działania aplikacji (taki defekt posiada większość odtwarzaczy).

Aktualnie zaimplementowałem:

  • przyjazny interfejs użytkownika wykorzystujący style (przygotowałem styl ambiance dla Ubuntu);
  • bardzo wydajną bibliotekę multimediów;
  • pobieranie okładek z LastFM;
  • zalążek integracji z Gnome (obsługa klawiszy multimedialnych via DBUS);
  • wstępne wsparcie dla standardu MPRIS2;
  • wstępne wsparcie dla systemu notyfikacji;
  • makietę radia (nie można jeszcze dodawać nowych stacji)

Jak widać program posiada jeszcze dość ubogie możliwości. Pamiętajmy jednak, że do efekt 2-3 tygodni pracy jednej osoby. Inne odtwarzacze miały czas aby dojrzeć. Ja zostałem zmuszony wydać tyle ile zdążyłem przygotować, tak aby załapać się w ramach czasowych konkursu.

Czytaj dalej…

Qt – Symulacja biznesowa

Ostatnie miesiące minęły mi bardzo szybko. Zlecono mi przygotowanie dość złożonej symulacji biznesowej działającej w czasie rzeczywistym. Celem projektu było wytworzenie narzędzia skutecznie wspomagającego szkolenia z dziedziny finansowania działalności gospodarczej. Jak to działa w praktyce? Wielu użytkowników uczestniczy w interaktywnej rozgrywce prowadzonej przez moderatora (lektora), jednocześnie przyswajając sobie kluczowe zagadnienia niemalże w praktyce. Do dyspozycji graczy udostępniono system księgowania (bilans + rachunek zysków i strat), moduł produkcji, sprzedaży oraz logistyki. Każdy z przygotowanych elementów udostępnia wiele możliwości i został zaprojektowany tak, aby jak najbardziej odzwierciedlać realia. Niestety nie mogę omówić szczegółowo wszystkich wdrożonych funkcjonalności.

Architektura

Projekt przygotowałem w oparciu o szkielet programistyczny Qt. Ze względu na charakter aplikacji kluczowe było pokazanie całości w jak najprzystępniejszy sposób. Tym samym ponownie postawiłem na technologię Qt Quick. Ostateczny efekt uważam za znakomity. Dużo funkcjonalności zostało ubranych w bardzo ładny oraz czytelny interfejs. Projekt składa się z dwóch różnych aplikacji: moderatora oraz klienta. Te dwa różne programy komunikują się między sobą za pomocą protokołu TCP/IP. Poczyniłem duże starania aby ilość wymienianych informacji była ograniczona do minimum. Bardzo dużo pracy włożyłem w przygotowanie moderatora. Podzieliłem go na warstwę graficzną oraz „obliczeniową”. Innymi słowy w jednym wątku jest rysowany interfejs, a w innym zaimplementowana obsługa serwera TCP/IP, bazy danych oraz wszystkich obliczeń. Dzięki takiej decyzji interfejs moderatora nigdy nie traci responsywności nawet gdy jest podłączonych do niego wiele aplikacji klienckich. Aby realizacja projektu szła mi jak najsprawniej przygotowałem własny system mapowania obiektowo-relacyjnego (ORM). Przygotowany przeze mnie ORM w pełni wykorzystuje możliwości Qt związane z bazami danych oraz obiektami i informacjami na ich temat (QMetaObject).

Qt Quick – Gra komputerowa

W ramach pracy dyplomowej przygotowałem silnik gier komputerowych opierając się o technologię Qt Quick. Miałem duże nadzieje wobec realizowanego projektu. Jeszcze przed wyborem tematu wszystko wskazywało na to, że MeeGo będzie głównym system operacyjnym w produktach Nokii. Niestety sprawy się skomplikowały. MeeGo zostało zepchnięte na bok, a mój zapał do pracy nad silnikiem bardzo zmalał. Mimo wszystko musiałem zrealizować temat, który wcześniej zgłosiłem. Nie było łatwo ponieważ silnik postanowiłem oprzeć o graf sceny Qt, który był rozwijany równocześnie z pisaniem pracy magisterskiej. Zmiany programistów Qt często skutkowały dużymi regresjami w już napisanym przeze mnie kodzie. Dodatkowo do projektu dołączyłem silnik fizyczny Box2D oraz bibliotekę FMOD służącą odgrywaniu plików dźwiękowych. Ostateczny efekt jest dość ciekawy. Silnik działa bardzo płynnie, a przygotowanie za jego pomocą gry jest niesamowicie proste oraz szybkie. Nie trzeba znać skomplikowanego języka programowania takiego jak C++ czy Java. Wystarczy elementarna znajomość QML oraz JavaScript. Przygotowany silnik ma swoje mocne strony. Za sprawą Qt teoretycznie działa na wszystkim, począwszy od komputerów (Windows, Linux, Mac OS X) po urządzenia mobilne (MeeGo, Symbian).

Możliwości silnika:

  • efektywne renderowanie grafiki 2D oraz 2.5D za sprawą Qt Scenegraph;
  • podstawowe elementy graficzne: kształty, obrazki oraz duszki;
  • efekty końcowe realizowane w jednostkach cieniowania;
  • w pełni zintegrowany silnik fizyki Box2D – zaadaptowano większość możliwości tego silnika;
  • obsługa gamepadów i innych urządzeń wejścia dostępnych już w Qt;
  • odgrywanie multimediów za sprawą FMOD;
  • obsługa sieci.

Czytaj dalej…