Fizycy, matematycy, astrofizycy, Pascal :)

0

Jest propozycja rozwinięcia tematu/projektu(OCZYWIŚCIE FREE, dla nauki) dla zagadnień jak w temacie wątku. Głównie rozbija się o obsługę WEBCAM i detekcji cząstek uderzonych przez MIONY ;). Mam zalążek pracy w Lazarus Pascal.

Jeśli interesujące pytać :)
M....

0

O co konkretnie chodzi? Napisz coś więcej.

0

Jest sobie taka aplikacja na Smartfony, Credo Detector.
W ramach wolnego czasu postanowiłem zrobić coś podobnego na PC.
Zasada jest taka. Zaklejamy kamerkę, i skanujemy każdą klatkę. Liczymy średnią jasności każdego pixela dla klatki i jeśli pojawi się coś np. 4 razy jaśniejszego niż średnia, zapisujemy ten obraz na dysk. Jestem w trakcie układania kodu by go udostępnić do rozwoju. Na razie bałagan.
Jeśli chodzi o fizykę, to jest to detekcja cząstek promieniowania kosmicznego. A raczej efektu zderzenia mionów z cząstkami w atmosferze. Te mogą zostać wykryte przez matrycę kamery. Więcej info o zjawisku https://credo.science/credodetektor/index.php

Wkrótce dopiszę więcej informacji, gdy to wszystko sobie poukładam....

1

Mógłbym sie tym zainteresować, jestem na razie związany z programowaniem w celach edukacyjnych i rozrywkowych (i się to nie zmieni dopóki nie skończę liceum)
Fizyka to też jedno z moich zamiłowań
Dodatkowo ostatnio uczyłem się technologi OpenCL, która z pewnością mogła by pomóc w analizie obrazów (i chętnie bym to przećwiczył)
Oczywiście obsługa CL z poziomu Lazarusa, tyle że na razie tylko pod Windows
Tak więc w ramach wolnego czasu zgłaszam się na chętnego :)

0

Ok, powracam z tematem.
Wstępna aplikacja już jest, działająca. Proszę zapoznać się z opisem najpierw (w PDF).
Na stronie jest i wersja exe i źródła.....Proszę o wyrozumiałość ponieważ samouk jestem.

Chodzi o:

  • sprawdzenie poprawności kodu
  • optymalizacja
  • i sugestie
  • następnie dalszy rozwój.

Moja wizja jest taka:

  • dodać SPRAWDZENIE CZY JEST NOWA WERSJA
  • wersja ENG
  • detekcja (pixele) ładnie by wyglądały w formie wykresu 3d,
  • wykres sesji (coś jak EKG u lekarza ;)

Przyszłościowo podłączenie kilku kamer, a nawet aparatu "lustrzanki", gdzie matrycja jest potężna!!!

Program jet na razie testem, czy w ogóle detekcja jest możliwa.Dr Homola twierdzi, że wyniki są ok. Wyniki zapisywane są na komputerze na którym działa program. Główną sprawą będzie upload na serwer uczelni wg ich protokołu i formatu (którego opis mam dostać niedługo)

Chętnych zapraszam do zabawy, i współpracy z naukowcami (nie ze mną).
Ostatecznie to badanie na skalę Nobla :)

Link do forum gdzie jest wszystko...
https://credo.science/credodetektor/viewtopic.php?f=3&t=45

0

Więc tak, na pierwszy rzut oka:
Zamieniłbym sposób wyboru katalogu do zapisywania; zamiast TEdit, TButton i TSaveDialog dałbym jeden wygodniejszy komponent TDirectoryEdit z zakładki Misc
Po drugie, wykasowałbym zbędne moduły (raczej kompilator je wywala jak są niepotrzebne, ale i tak, lepiej mieć porządek)
I taka porządna sugestia (której jeszcze nie sprawdzałem, na ile jest możliwa/łatwa do zrobienia): trzeba by to zrobić tak, żeby nie przechodziło przez schowek, bo to zajmuje czas.
A z mojej strony zacząłem implementacje algorytmu analizowania w OpenCL, powinienem skończyć w tydzień

I co do samych wykresów? jak by miały one wyglądać? I W jakie dane miały by być przez nie uwzględniane?

No i najważniejsze: wszystko co robię, sugestie itp mam pisać na forum Credo, czy gdzieś na prywatną wiadomość?

0

Przeglądnąłem pobieżnie źródła tej aplikacji (pobrałem z forumowego załącznika) i uważam, że jeśli o implementację chodzi, każdy jego aspekt to programistyczna tragedia… Ostatnią rzeczą na jaką mam ochotę to praca przy projekcie z takimi źródłami…

Powodów do krwotoku z oczu jest tak dużo, że nie sposób podać ich w jednym poście, bo parser udławi się treścią. Poczynając od tego, że Lazarus rzuca błędami już podczas otwierania projektu.

Od czego zacząć mam listowanie rzeczy do poprawy?

0
furious programming napisał(a):

Przeglądnąłem pobieżnie źródła tej aplikacji (pobrałem z forumowego załącznika) i uważam, że jeśli o implementację chodzi, każdy jego aspekt to programistyczna tragedia… Ostatnią rzeczą na jaką mam ochotę to praca przy projekcie z takimi źródłami…

Powodów do krwotoku z oczu jest tak dużo, że nie sposób podać ich w jednym poście, bo parser udławi się treścią. Poczynając od tego, że Lazarus rzuca błędami już podczas otwierania projektu.

Od czego zacząć mam listowanie rzeczy do poprawy?

Jeśli przyjacielu chciałeś mnie "zjechać" bo jak widać wyżej to nie krytyka to i tak Ci się nie uda :). Szanowny kolego, Mam wrażenie że jesteś profesjonalistą bo spodziewałem się takich opini więc zapraszam do rozwoju apki. Ja ani nie jestem programistą,ani informatykiem ani wynalazcą działania tej aplikacji. Nie powiem kim bo pewnie i wtym będziesz lepszy :P.
Zrobiłem po swojemu coś co istnieje na Smartfony. W związku z tym, że pomysłodawca projektu CREDO powiedział że to się nadaje na rozwój wpadłem na pomysł aby oddać to co skleciłem komuś kto zna się lepiej. Czujesz się na siłach? nadajesz się do tego :).

Kod to zarys zasady działania, niech każdy kto chce robi kroki do przodu i prezentuje to np. na tamtym forum lub PW
Pozdrawiam :)

0
mpknap napisał(a):

Jeśli przyjacielu chciałeś mnie "zjechać" bo jak widać wyżej to nie krytyka to i tak Ci się nie uda :)

Cieszę się – bardzo dobrze, że przyjmujesz taką postawę. Ale nie to było moim celem.

Szanowny kolego, Mam wrażenie że jesteś profesjonalistą bo spodziewałem się takich opini więc zapraszam do rozwoju apki.

Przykro mi, nie mam na to czasu. Jednak mogę poświęcić godzinkę i napisać Ci co wymaga poprawy, co poczytać, czego się dowiedzieć, jak pisać kod i jak go nie pisać. Dzięki temu jakość projektu wzrośnie, a więc i zainteresowanie. A to leży w Twoim interesie, nie w moim.

Ja ani nie jestem programistą,ani informatykiem ani wynalazcą działania tej aplikacji. Nie powiem kim bo pewnie i wtym będziesz lepszy :P.

A czy jak wieszasz w domu obrazek na ścianie, do gwoździk wbijasz łopatą zaciśniętą między nogami, stojąc na rękach? To że nie jesteś programistą nie zwalnia Cię z przykładania się do tworzenia tego projektu i stosowania się do ogólnie przyjętych, uniwersalnych zasad.

Zrobiłem po swojemu coś co istnieje na Smartfony. W związku z tym, że pomysłodawca projektu CREDO powiedział że to się nadaje na rozwój wpadłem na pomysł aby oddać to co skleciłem komuś kto zna się lepiej. Czujesz się na siłach? nadajesz się do tego :).

Nie wiem jak to skomentować. Zrobiłeś zalążek projektu i teraz chcesz go wepchnąć komuś do rąk, bo sam nie chcesz się uczyć programowania i go rozwijać?

Kod to zarys zasady działania, niech każdy kto chce robi kroki do przodu i prezentuje to np. na tamtym forum lub PW

Zarys nie zarys – prezentujesz coś, co bardzo źle wygląda i co nie nadaje się do prezentowania. W dodatku chyba nie do końca zdajesz sobie sprawę z tego, że projekt w obecnej postaci wygląda bardzo źle, co odpycha potencjalnych zainteresowanych, a to poważny problem.

@pawel24pl jest chętny, chce podłubać przy nim. I co teraz? Ma produkować kod równie słabej jakości, czy w pierwszej kolejności zająć się jego refaktoryzacją (bo to jedyne co można teraz z tym projektem zrobić)? A jak sam będziesz chciał coś dodać, to znów dopiszesz kupkę nieczytelnych linijek, niezgodnych ze wszystkimi możliwymi zasadami tworzenia kodu, a inni będą go poprawiać?

Wybacz, ale tak to nie działa. Z chęcią podpowiem Ci jak ten kod naprawić, ale nie poświęcę godziny czy dwóch na przysłowiowe „mówienie do ściany”. Muszę wiedzieć, że zastosujesz się do udzielonych rad – w przeciwnym razie stracę tylko czas.

0

Chyba jednak masz całkowitą rację, głównie dlatego że znasz się na rzeczy. Ja zatrzymałem się na latach 80-90' i Turbo Pascalu ;) Zakończmy więc krytykę na tym etapie i zostaje na Twoim. Sam kod mógłbym ładniej poukładać i przygotować do prezentacji, ale to m.in. przez pośpiech przed pewną datą.

Zrobiłem po swojemu coś co istnieje na Smartfony. W związku z tym, że pomysłodawca projektu CREDO powiedział że to się nadaje na rozwój wpadłem na pomysł aby oddać to co skleciłem komuś kto zna się lepiej. Czujesz się na siłach? nadajesz się do tego :).

Nie wiem jak to skomentować. Zrobiłeś zalążek projektu i teraz chcesz go wepchnąć komuś do rąk, bo sam nie chcesz się uczyć programowania i go rozwijać?

Nie chcę nikomu nic wciskać na siłę, to podrzucenie pomysłu dla chętnych i mających czas na rozwinięcie programu, nawet nie na bazie mojego kodu, a własnego i pisanego od zera. Liczy się efekt końcowy, którym są "fotki" mające dużą wartość dla ludzi z projektu CREDO. Mój program jak nie napisany działa i to się dla mnie liczy. A jeśli chodzi o chęci do nauki, to z wiekiem coraz mniejsze, szczególnie przez brak czasu.

..... Z chęcią podpowiem Ci jak ten kod naprawić, ale nie poświęcę godziny czy dwóch na przysłowiowe „mówienie do ściany”. Muszę wiedzieć, że zastosujesz się do udzielonych rad – w przeciwnym razie stracę tylko czas.

Chętnie, a nawet bardzo wysłucham co masz do powiedzenia :) Może być to tu, lub na PW.

0

Ja chętnie podejmę sie przepisania tego w pythonie, na ile czas pozwoli.

0
Piotr Pluciński napisał(a):

Ja chętnie podejmę sie przepisania tego w pythonie, na ile czas pozwoli.

Myślę że to świetny pomysł. Nawet mam gdzieś źródło do aplikacji mobilnej w tym języku, później podeślę...

4

Zacznijmy od absolutnych podstaw, czyli od organizacji katalogu z projektem, plikami i ich nazewnictwem.

W sumie to używasz wyłącznie jednego katalogu dla wszystkich plików, co jest bardzo złym pomysłem. Nie dość, że wymieszane są pliki dwóch projektów (CREDO i KALIB_PROG), to jeszcze znajdują się w tym katalogu również pliki binarne, tworzone przy kompilacji. Binarki domyślnie tworzone są w podkatalogu lib\$(TargetCPU)-$(TargetOS) i nie ma potrzeby tego zmieniać. Przyjdzie czas opublikować źródła, więc do archiwum wrzuca się wszystko oprócz podkatalogu lib. U Ciebie wszystko jest na kupę, dlatego też binarki trzeba wykluczać ręcznie.

Struktura katalogów powinna być np. taka:

+ Sources
  + CREDO
    - pliki projektu
    + lib
      + i386-win32
        - pliki binarne
  + KALIB_PROG
    - pliki projektu
    + lib
      + i386-win32
        - pliki binarne

Kolejna rzecz – nazewnictwo plików. Nazwy plików nie powinny być samymi dużymi literami, to nie DOS… Główny plik projektu najczęściej przyjmuje nazwę main lub nazwę projektu (pełną lub skróconą), pisaną małymi literami lub w stylu PascalCase. Pliki z kodem formularzy powinny swoją nazwą jasno o tym informować, np. MainWindow.pas, SettingsWindow.pas. Stosuje się też notację frmMain.pas, frmSettings.pas lub Main_frm.pas, Settings_frm.pas. A u Ciebie jest to core.pas… serio? Formularz jest jądrem aplikacji? Masz też kalibunit.pas, który też zawiera kod formularza. Tu stosujesz inne nazewnictwo – sufiks unit. Wiadome, że ten plik to moduł – nie musisz tego dodatkowo zaznaczać.

Inna sprawa to brak plików .lpr, czyli domyślnie tworzonych głównych plików projektu. Nie wiem czemu u Ciebie pliki te mają rozszerzenie .pas – zmieniałeś je ręcznie? Jeśli tak, to po co?

Przechodzimy dalej, otwieram plik CREDO.pas i jeb, IDE wyrzuca błąd o braku modułu:

missing-file.png

To samo jeśli otworzę KALIB_PROG.lpi. W plikach .lpi masz sporo odwołań do plików, które nie istnieją w tym archiwum. Niektóre są wymagane (jak ten, którego nazwa widnieje w oknie z błędem), a niektóre nie są wymagane, przynajmniej do otwarcia projektu w IDE (np. związane z pakietem Indy). Tak więc zbędne wpisy należy usunąć z pliku .lpi, bo IDE wysypuje się.

Następna rzecz – główna ikona projektu, czyli plik CREDO.ico. Eksplorer nie potrafi wyświetlić jego zawartości, tak jak ma to miejsce w przypadku standardowych ikon. Otworzyłem ten plik w programie do tworzenia i edycji ikon i widzę, że posiada on tylko jedną grafikę, w dodatku o rozmiarach zupełnie niezgodnych z formatem ikon (300x223 to nie jest prawidłowy rozmiar ikony dla eksplorera). Ikona jest prostokątna, a powinna być kwadratowa, poza tym o wielu rozmiarach – co najmniej 16x16, 24x24, 32x32, 48x48, 64x64, 128x128 i 256x256.


Czas na projekt. Podstawa to jego konfiguracja, czyli wszystko co znajduje się w oknie ustawień projektu. Wchodzę w to okno, a tam cuda i dziwy. Ikona przypisana (ale jej zawartość jest zła), lista formularzy zawiera dwie pozycje, z czego jedna nie istnieje (Form1), Version Info nieuzupełnione. Jeśli o opcje kompilacji chodzi, to uzupełnione są pola ze ścieżkami, choć ścieżki te dotyczą katalogów nieistniejących w archiwum (np. ..\..\..\indy9\lazarus), opcje debugowania są włączone, ale pola w grupie checks and assertion są odznaczone, custom options wypełnione symbolami dla Borlanda (domyślam się czemu ma to służyć). Ogólnie trochę bałaganu, a próba kompilacji rzuca kupką notek i ostrzeżeń o duplikacji plików. Niedobrze.


Skupmy się na razie na formularzu, a konkretniej na jego wyglądzie (w dalszej części uczepię się kodu). Okno nie wygląda zachęcająco – emotka w tytule na belce okna (sic!), do tego informacja o wersji i o autorze (to umieszcza się w oknie about). Używasz systemowego schematu interfejsu, ale pomimo tego zmieniłeś kolor tła okna i fonty na przyciskach. Na innych systemach może to bardzo źle wyglądać. Tekst w kontrolkach jest w dwóch językach (np. Kamera On) – takich rzeczy się nie robi. Albo tworzy się domyślny interfejs po angielsku i dodaje opcje językowe, albo robi się jedną wersję językową (np. polską). Do tego niektóre napisy są dużymi literami (tego należy unikać, chyba że dokładnie wie się co się robi).

Układ komponentów na formularzu nie jest dobry – niektóre kontrolki przykryte są całkowicie przez inne. Takie rzeczy robi się wtedy, gdy część kontrolek ma być niewidoczna i pokazywana dynamicznie. Jednak w takim przypadku grupuje się je np. na panelu, tak aby móc manipulować widocznością całej grupy, a nie każdej kontrolki z osobna. U Ciebie część jest zgrupowana, a część nie.

Teraz czas na nazewnictwo. Nie stosujesz żadnego uniwersalnego sposobu nazywania kontrolek. Niektóre mają nazwy domyślne, inne polskie, a jeszcze inne angielskie lub mieszane. Przyjęło się, aby kontrolki nazywać w stylu CameraOnButton, LoopTimer, SaveImageDialog, gdzie początkowa część nazwy określa pełnioną funkcję (CameraOn czy SaveImage), a sufiks zawiera typ kontrolki (Button, Timer itd.). Kontrolki nie są też właściwie skonfigurowane. Pierwsze co się robi po umieszczeniu kontrolki na formularzu to otwiera się okno inspektora obiektów i ustawia się wszystkie właściwości, zanim zacznie się z nimi pracę (czytaj: oprogramowywanie). Twoje kontrolki nawet nie posiadają ustawionych kotwic (Anchors), więc zmiana rozmiaru okna całkowicie rozwala układ interfejsu (żadna nie reaguje). Czas przysiąść nad tym oknem i poustawiać wszystko jak należy. Do tego nazwa formularza – czyli Formularz – jest bardzo zła…


Przejdźmy do najważniejszego, czyli do kodu – póki co do kodu projektu CREDO.

Tutaj jest tak dużo problemów, że trudno opisać je wszystkie… Absolutnie nie stosujesz żadnej przyjętej konwencji, ani co do formatowania kodu, ani co do jego nazewnictwa. Kod pisany jest bardzo niedbale – stusujesz nazwy polskie i angielskie naprzemiennie, również naprzemiennie używasz różnych notacji. Wcięcia są zupełnie randomowe, tak samo jak odstępy (tworzone pustymi liniami). Wplatasz importy funkcji z zewnętrznych bibliotek pomiędzy definicje metod formularza. W komentarzach tłumaczysz działanie kodu i trzymasz niektóre zbędne instrukcje. Do tego masz wycieki pamięci – tworzysz dynamicznie obiekty TBitmap i nigdzie ich nie zwalniasz. Niektóre metody są bardzo długie – pasuje podzielić je na mniejsze fragmenty.

Kod usiany jest różnymi dyrektywami, a niektóre używane są niezgodnie z ich przeznaczeniem. Np. przełącznik {$MODE} może być użyty tylko raz w danym module, a w core.pas masz ich pięć, z czego kilka zaremowanych. Kompilator w takim przypadku weźmie pod uwagę tylko jeden (pierwszy, czyli {$MODE DELPHI}), a reszta zostanie zignorowana, nawet jeśli nie jest zakomentowana.


Naprawdę mógłbym jeszcze bardzo długo wymieniać problemy istniejące w tych projektach, ale to nie ma sensu.

Zacznij od początku – zorganizuj jak należy strukturę katalogów, stwórz projekty od nowa, w pierwszej kolejności przejdź do ustawień projektu i skonfiguruj wszystko (łącznie z informacjami o wersji i ikonie programu), następnie zajmij się formularzem, poukładaj na nim wszystkie komponenty i skonfiguruj je, a na koniec zajmij się kodem.

Zanim jednak zabierzesz się za pisanie kodu, zapoznaj się z terminami KISS i DRY, a także z artykułem traktującym o przyjętej i uniwersalnej konwencji nazewnictwa oraz formatowania kodu. Dobry artykuł znajduje się tutaj: Object Pascal Style Guide - Embarcadero Developer Network.

Powodzenia! ;)

0

...trochę minęło. Uprościłem jak umiałem. https://github.com/marekmarcos/CREDO

1 użytkowników online, w tym zalogowanych: 0, gości: 1