Fora » Dyskusja nad zmianami »
Stare uwagi PT
Dodane przez Tomasz Kornuta ponad 12 lat temu
Poniżej oznaczony przeze mnie gwiazdkami daaaawno, daaawno mailing z PT
Odpowiedzi (5)
RE: Stare uwagi PT - Dodane przez Tomasz Kornuta ponad 12 lat temu
PT napisał (3/11/2010):
Drodzy developerzy,
pozwolę sobie przesłać uwagi do strony tytułowej: http://segomo.elka.pw.edu.pl/~tkornuta/discode_html/manuals_components.html
"It is obvious..." - skoro jest oczywiste, to po co to pisać, a jeśli nie jest, to lepiej się na kogoś powołać
"According to the definition..." - gdzie jest ta definicja? znalazłem w WikiPedi, ale chyba lepiej powołać się na jakieś źródło,
np. to podane na dole strony WikiPedii, tylko wcześniej sprawdzić.
"Component" nie jest dobrą nazwą klasy. Zwróćcie uwagę, że zdanie wyżej powołujecie się na definicję tego pojęcia,
a tutaj tworzycie ją na nowo przy użyciu diagramu klas. Zdecydowanie komponent nie jest klasą i moim zdaniem nie
należy mieszać/implementować tych pojęć.
Wedle źródła (WikiPedia), na które się powołujecie "components communicate with each other via interfaces".
W tym kontekście pisanie o "its (chodzi o komponent) exchangeable interfaces" nie jest najszczęśliwsze...
Cechą komponentu jest raczej to, że ma ściśle zdefiniowany interfejs.
nazywanie klas interfejsów jako *Int to wymyślona konwencja? Nie spotkałem się jeszcze z tym w przeciwieństwie
do np. JavaClassI.
"DataStreamInt is a class representing interfaces" - tuaj jest trochę masło maślanego. DataStreamInt jako część
wymiennego interfejsu, jest klasą reprezentującą interfejsy...
working mode -> operation mode.
passed in/out - nie ma takiego czasownika, http://www.usingenglish.com/reference/phrasal-verbs/verb-pass.html
during the load of given task -> at the time of loading
command flow? nie ma takiego pojęcia? control flow...?
For more details regarding the structure -> graphical notation used to represent a component
wasn't initialized yet -> has not been yet initialized
both data, as well as - ta konstrukcja budzi moje wątpliwości, nie tylko moje:
"For me, the construction both X as well as Y (for any phrases X and Y), though common in unplanned speech, is not syntactically well formed."
http://languagelog.ldc.upenn.edu/nll/?p=686
Component are divided into four main types according to ...:
nie jest jasne kryterium podziału, a moim zdaniem jest to i ciekawe i ważne
co jeżeli chciałbym nagrać film z dźwiękiem - nie mogę tego zrobić Sinkiem, ponieważ on akceptuje tylko jedno źródło.
Mam rozumieć, że te obraz i dźwięk muszą być wcześniej połączone w Procesorze, tak?
Czy ktoś tego próbował? Wg mnie to interesujący przypadek użycia, bo łączy przetwarzanie sygnału ciągłego w czasie (dźwięk)
z dyskretnym (klatki obrazu).
Z tego co się orientuje to powinno bez większego problemu dać się zrobić w gstreamer'ze, a co na to DisCODe?
Czytam dalej :-)
RE: Stare uwagi PT - Dodane przez Tomasz Kornuta ponad 12 lat temu
Strona główna:
"This project contains sources" - rozumiem, że chodzi nie o korzenie a o "source code"
facilitating -> supporting
algorithms.DisCODE - spacja
"in an objective manner" jest raczej przetłumaczalny na "w sposób podmiotowy";
wyszukiwanie Googla dla <"objective manner" c++> daje zero wyników związanych z programowaniem;
podejrzewam, że Wam chodziło o "object-oriented design" i to sformułowanie polecam.
composing of a components library - składający się z biblioteki składników... masło maślane;
sugeruję "contains library of components together with"
dalej pojawia się problem, który już sygnalizowałem - Components are divided into four classes.
Nie wiadomo co to jest "Component", bo u Was to klasa, a u reszty świata coś innego.
Zresztą - wtedy i tak wychodzi masło maślane: "Component [klasa] są dzielone na cztery klasy:"
Sugeruję raczej "Four types of [components-czy jak to nazwać] are distinguished:"
i tutaj znowu poprzednia uwaga - bo podawane klasy definiujecie wg innych kryteriów niż na stronie "Overview"
required -> requires - ale jakie/które "The approach" ??
"change of the method of their work" - gdzie indziej to nazywa się "state".
Słowo metoda w kontekście programowania (do którego się odwołujecie) ma już nadane (inne) znaczenie.
responsible for components loading and ...ing.
"configurating eclipse" daje w Googlu 24 znaleziska, "Configuring Eclipse" 75,300
Polacy nie gęsi... jeżeli angielski, to konsekwentnie: "Import repository - Importujemy nowy projekt...".
nie wyświetlają się obrazki, np. [[File:02.jpg]]
"generator: Windows:" - stosowanie podwójnego dwukropka raczej nie mieści się w przyjętych zasadach pisowni,
http://so.pwn.pl/zasady.php?id=629850
System requirements:
Software->Utilities
URLe dla cmake i boosta nie są klikalne a do doxygena i OpenCV tak
follow the install guide on ...
Tutoriale:
-unstoppable Process cannot be stopped by SIGINT (CTRL+C) signal. MWAHAHAHA!
what the fuck???
Komponenty:
czy w zapisie
[out] out_img (cv::Mat)
nie jest bardziej intuicyjne zastosować notację szablonów C++, tj
[out] out_img<cv::Mat>
?
zwłaszcza w kontekście:
zamiast size (cv::Size=640 480) -> size<cv::Size(640,480)>
CameraUniCap::Properties::dev.formar ?
ECOVI:
jakieś takie dziwne Git-tagi się Wam wkradły:
>>>>>>> 8de1a88ad74389af7fe365a69311849dcada8eb2
Tasks:
"Because those components" - akapit zaczyna się odwołaniem do... których komponentów?
Zwracano na to nam uwagę na kursie dla doktorantów.
f.e. - pierwszy raz widzę taki skrót.
need nie stosuje się z "that", raczej z "to"
sime -> some
related for -> related to (podejrzewam, że pomylone z dalszym użyciem. zasada: related to/responsible for
datastreams and events - czym się różni datastream od DataStream?
The DisCODe -> DisCODe
I tutaj jest diagram, którego nie rozumiem... :-( Co to za diagram?
Zgaduję, że:
chodzi o plik konfiguracyjny XML, ale jeżeli tak, to nie potrafię zgadnąć jakich tagów używać.
DTD/XML Schema/cokolwiek nt. pisania plików konfiguracyjnych. Tutorial to za mało a powyższa notacja jest niejasna.
kropkowana obwódka oznacza elementy opcjonalne?
dlaczego od "Thread 1" jest strzałka do "Thread 1 properties" i podobnie dla Component i Connections,
ale dla "Event 1" jest już tylko strzałka do "Source" i "Destination"?
Generalnie słabo widzę temat współdziałania/zależności Component/Thread/Executor, więc pozwolę sobie na mocne pytania:
skoro definiuję potok przetwarzania, to czy muszę jeszcze ręcznie przypisywać komponenty do tak niskopoziomowych struktur jak wątki?
czy nie można tego zrobić automatycznie?
jeżeli już muszę robić to ręcznie, to czym się kierować, co brać pod uwagę?
czy mogę wyświetlić zasoby obliczeniowe (CPU, pamięć) zużywane przez poszczególne wątki/komponenty?
czy mogę wyświetlić przepustowość kanału?
czy mogę wyświetlić opóźnienie na pojedynczym połączeniu? a na całym potoku?
kiedy wywoływana jest metoda OnStep()?
czy jej wywołanie jest przerywane wywołaniem obsługi Eventu?
czy w kontekście łączenia Eventów many-to-many są one szeregowane u odbiorcy? jeżeli tak, to w jakiej kolejności?
w czyim kontekście wywoływana jest obsługa Eventu, nadawcy czy odbiorcy? kto jest odpowiedzialny za obsługę wyjątku rzuconego w trakcie obsługi Eventu?
Pozdrawiam,
RE: Stare uwagi PT - Dodane przez Tomasz Kornuta ponad 12 lat temu
MS napisał:
Na szybko:
Generalnie słabo widzę temat współdziałania/zależności
Component/Thread/Executor, więc pozwolę sobie na mocne pytania:skoro definiuję potok przetwarzania, to czy muszę jeszcze ręcznie
przypisywać komponenty do tak niskopoziomowych struktur jak wątki?
Tak, trzeba to zrobić ręcznie. Struktura Executora nie jest aż tak
niskopoziomowa jak wątek, definiuje dodatkowo takie rzeczy jak tryb
wywoływania (ciągły, taktowany itp) oraz priorytety komponentów
(obecnie w fazie planowania).
czy nie można tego zrobić automatycznie?
Można, ale automatyczny podział na wątki z analizą potoku
przetwarzania jest tematem na inż/mgr wg mnie :-)
jeżeli już muszę robić to ręcznie, to czym się kierować, co brać pod
uwagę?
Doświadczeniem, przeczuciami, wiedzą, logiką. Nie koniecznie w tej
kolejności :-) A bardziej poważnie rzecz biorąc, jest kilka
wytycznych, które powoli wyklarowują się w czasie pisania tutoriali
(np. okienko musi być we własnym wątku, ponieważ cyklicznie należy
wykonywać funkcję cvWaitKey, klawiatura powinna też siedzieć w osobnym
wątku ponieważ jest komponentem blokującym, natomiast komponenty
przetwarzające sam obraz mogą być w jednym wątku, bo w większości
przypadków przetwarzanie i tak wykonywane jest cyklicznie).
czy mogę wyświetlić zasoby obliczeniowe (CPU, pamięć) zużywane przez
poszczególne wątki/komponenty?
Nie. Dobry pomysł. :-)
czy mogę wyświetlić przepustowość kanału?
j.w.
czy mogę wyświetlić opóźnienie na pojedynczym połączeniu? a na całym
potoku?
Pośrednio, istnieje komponent ExecTimer, na razie w fazie rozwojowej,
ale posiada już możliwość pomiaru czasu pomiędzy dwoma nadchodzącymi
zdarzeniami (podłączamy dowolne zdarzenie do onStart, dowolne do
onStop).
kiedy wywoływana jest metoda OnStep()?
Executory typu aktywnego (continuous, periodic) wywołują metodę onStep
swojego głównego komponentu.
czy jej wywołanie jest przerywane wywołaniem obsługi Eventu?
Nie. Zdarzenia są obsługiwane na początku pętli executora, która
najogólniej wygląda tak:
while(!end) {
handle_events();
main_component->step();
}
czy w kontekście łączenia Eventów many-to-many są one szeregowane u
odbiorcy? jeżeli tak, to w jakiej kolejności?
Zdarzenia kolejkowane są w sposób bliżej nieokreślony (w kolejności
wczytywania ich z pliku konfiguracyjnego). Jedyna kolejność, która
jest zapewniona, to taka, że wszystkie zdarzenia asynchroniczne
wykonywane są przed synchronicznymi.
w czyim kontekście wywoływana jest obsługa Eventu, nadawcy czy odbiorcy?
Odbiorcy w wypadku, gdy oba komponenty są w innych wątkach, nadawcy
gdy są w tym samym (można to zmienić jawnie definiując "rodzaj"
połączenia zdarzeń w pliku konfiguracyjnym)
kto jest odpowiedzialny za obsługę wyjątku rzuconego w trakcie obsługi
Eventu?
Zależnie w czyim kontekście się wykonuje. Nadawca bądź odbiorca.
To chyba tyle szybkiej odpowiedzi. Podobnie jak Tomek, wdzięcznym Ci
jestem bardzo za taką dogłębną analizę, która niewątpliwie będzie
miałą duży i pozytywny wpływ na jakość naszej pracy :-)
słoń.
RE: Stare uwagi PT - Dodane przez Tomasz Kornuta ponad 12 lat temu
PT napisał:
Ale poważnie - poza zaspokajaniem własnej ciekawości i podwyższaniem samooceny przez Wasze komentarze
(za co dziękuję:) celem moich dociekań jest zwrócenie uwagi na krytyczną rzecz, tj. prowizorkę jaką kryje w sobie
plik Executor.cpp.
Moim zdaniem jest to kluczowy element świadczący o jakości, a ponadto bezpośrednio wpływający na wydajność.
Krótko: msleep() + yield() oraz flagi ze słowem kluczowym volatile to nie są metody synchronizacji.
Rozwiązaniem są mutexy + zmienne warunkowe. To naprawdę można zrobić nie tylko elegancko, ale i poprawnie.
RE: Stare uwagi PT - Dodane przez Tomasz Kornuta ponad 12 lat temu
PT napisał:
Przypadkiem trafiłem na tą bazę pojęć w Software-Engineering-For-Robotics:
Component: http://sia.unibg.it/aigaion/?page=topic&topic_id=34