Zalogowany jako: gość

Forum

Wątek: Wypracujmy stanowisko w sprawie współpracy

Wróć do listy wątków

1 z 2

Następna

1 z 24: zywek

Witam.
Pamiętamja pewien cudny dzień, gdy Dawid zaczął pracę nad E3.0. Co swoje zrobiłem prawie wszystko. Chciałęm się zabrać do prób testowania czegokolwiek, nie mogłem jednak tego zrobić. Looknąłem sobie jak wygląda wywoływanie modułów w Eltenie i jest ono dość dizwne
include Elten::Engine::speech
say("coś tam")
MOżna chyba też jakoś w stylu Elten::Engine::Speech::say("coś tam")
Chciałem coś z tym zrobić, na co usłyszałem odpowiedź, że ma to być rozwiązane inaczej.
Proponuję więc, żeby ktoś mi wyjaśnił, najlepiej Dawid, bo kto inny, co jak ma być zrobione i przynajmniej cześć rzeczy, jeśli chodzi o klienta i wywołania WIN32 przecież mogę przenieść na EngineEmulatora. Bo co to za problem?
Tylko teraz na jakiej zasadzie ma to działać. Ma być w kodzie tak, jak to tu napisałęm, czy wypracowujemy inną metodę, a jak inną, to jaką.
Poproszę wreszcie konkrety, o jedyne, co teraz otrzymuje to to, że nie ma chętnych do współpracy, nie ma chętnych do współpracy.
NO TO JEST CHĘTNY DO WSPÓŁPRACY>


04.06.2019 23:05

2 z 24: grzezlo

Ale przepraszam, kolego, czy rzecz o którą pytasz nie leży przypadkiem w pierwszym wiarygodnym źródle, czyli kodzie źródłowym na Githubie?
Jeśli są różne stare i nowe trendy kodowania tych interesujących cię zagadnień, to przecież nic prostszego jak podglądnąć w logu gita ostatnio dodane lub naprawiane funkcje i zobaczyć jak tam jest to robione po nowemu.
Bo jak by mi ktoś jako programiście takie pytanie zadał, na które odpowiedzią powinno być powstanie dużego podręcznika, to bym chyba tylko sprawdził boki, czy mi się nie zerwały.

04.06.2019 23:15

3 z 24: zywek

Nie, nic tkaiego tam nie ma, bo to nie było ruszane od pewnego czasu. Bardzo śmieszne.

04.06.2019 23:19

4 z 24: grzezlo

Nie no, pełna powaga:
Cyt:
przynajmniej cześć rzeczy, jeśli chodzi o klienta i wywołania WIN32
GZ: przynajmniej część rzeczyjeśli chodzi o wywołania win32api, była opisana w ponad tysiącstronicowej kultowej książce Charlesa Petzolta, jeśli ci chodzi o mniejszą część, to tak przykładowo jakieś 300 stron?

04.06.2019 23:24

5 z 24: zywek

Ja nie wiem, kto tu czytał ten kod. Przestałbyś sobie kpić, bo takie zachowania rzeczywiście nastrajają bardzo pozytywnie do czegokolwiek.
Chodzi mi o konkretne rzeczy, jak np obsługa mowy, operacje na plikach i tego typu rzeczy.

04.06.2019 23:26

6 z 24: grzezlo

Ja sobie nie kpię, tylko po prostu jestem z trochę innego pokolenia.
Nad wspomnianą książką Petzolta spędziłem chyba miesiąc wieczorami i nie miałem się komu na żadnym forum poskarżyć, że skan jest miejscami do bani i to często w najciekawszych miejscach czyli listingach kodu.
Assemblera i przerwań dosowych w liceum się uczyłem z angielskich materiałów ciągniętych modemem 56 kilobitów na sekundę po tepsiarskim łączu, ale najpierw musiałem w stopniu jako takim opanować ten angielski, żeby zacząć rozumieć o co tam chodzi.
No i podobne przykłady można mnożyć, ale jak w tym kontekście czytam twoje święte oburzenie, że chłopak coś chce zrobić a tu ło rany jedne pół świata nie klaszcze, a drugie nie podaje mu gotowców na tacy, no to sobie myślę o konflikcie pokoleń i jak pisałem - sprawdzam boki czy mi się nie zerwały.
Więc moja propozycja jest taka, że jak masz motywację, to spędź najpierw ten przykładowy miesiąc wieczorami na wgryzaniu się w kod Eltena tak jak ja kiedyś w Petzolta, a jak ci to nic nie da a motywacja nie opadnie, to wtedy napisz jaki konkretnie podproblem chcesz rozwiązać, no i sam z ciekawości spróbuję znaleźć odpowiedź.
A jak mi się też nie uda, to wtedy we dwóch wespół w zespół zaatakujemy Dawida.
Tylko nie na zasadzie weź nam tu ziomek opisz wywołania win32, a jeszcze o dostępie do plików, tylko trochę bardziej konstruktywnie: mam pomysł x, zrobione tyle i tyle, a utknąłem na problemie, że się mi nie generuje mowa mimo prawidłowego pozornie wywołania funkcji gadaj.


04.06.2019 23:38

7 z 24: zywek

To był tylko podany przykład oparty na konwersacji, jaką kieydś odbyliśmy, że on to chce rozwiązać inaczej, więc hciałbym po prostu poznać odpowiedź, w jaki sposób chciałby odwoływać się do jeszcze nieistniejących modułów, które są gdzieś tam zrobione w połowie. Wiem, jak w Rubym używa się Win32. Jedyne, o bym chciał wiedzieć, to to, jaką koncepcję Dawid sobie obmyślił na używanie modułów skoro nie taką, jaką napisałem tutaj, czyli tą samą, co mu zaproponowałem kilka miesięcy temu. I ylko o to się rozchodzi.

04.06.2019 23:40

8 z 24: grzezlo

Ale co ty za złożony eltenowy program piszesz, żeby coś stało na przeszkodzie używania aktualnie działających i oprogramowanych wywołań, a jak się w przyszłości zmienią, to w tych newralgicznych punktach zrobienia ich podmianki?
I żeby nie było - Java też nie jest kompatybilna wstecznie, a świat jakoś z tym żyje.

04.06.2019 23:42

9 z 24: zywek

No i właśnie o to chodzi, że jeśli chcemy mieć tych wiele platform, to prędzej czy później trzeba zacząć to podmieniać. Nic więc nie stoi na przeszkodzie, by Dawid sobie akurat tym nie zawracał głowy, skoro to jest na tyle proste, że nawet byle ja mogę to zrobić.

04.06.2019 23:43

10 z 24: grzezlo

No ale skoro to jest jakaś tam w przyszłości planowana rzecz, to mógłbym długo wymieniać ile poprawek w swoim kodzie planowałem, albo nawet zacząłem pisać i nic z tego nie wynikło.
No chyba że przyszły kod już istnieje w jakimś githubowym branchu, no i trzeba go stamtąd zaciągnąć, zbadać, na podstawie zdobytej wiedzy robić upgrade czego się da i podsyłać Dawidowi pullrequesty tego brancha.
Zdrowy rozsądek podpowiada, że jeśli w takim PR coś się okaże być nie tak, to uwzględniając włożony wysiłek autora poprawki, autor główny sam sprostuje niejasności.
I wtedy jest konkretny techniczny dialog na temat konkretnego detalu, a nie jakieś tam ogólne bicie piany, że dopiero po 10 wpisach jakieś konkrety zaczynają gdzieś prześwitywać.

04.06.2019 23:48

11 z 24: zywek

Jest ten kod zaczęty już. W Engine ggdzieś to jest, w sensie że w tym co miał powstawać.

04.06.2019 23:49

12 z 24: pajper

Dobra, to po krótce, by sprawę wyjaśnić.

Emulator silnika mignął w którymś commicie, nie pamiętam, w którym, jednak troszkę jest przestarzały. Można natomiast zauważyć, że powoli pewne funkcjonalności przenoszą się do bibliotek, miast wywołań WinAPI.
Tak na przykład już w Elten 2.3 Beta schowek obsługujemy przez klasę Clipboard.

Zacznijmy jednak od podstaw. W pliku EAPI/ui.rb jest sobie definicja obsługi klawiatury.
Skupię się dla przykładu na niej.
Jest więc funkcja key_update, która ustawia tablicę $key na stan klawiatury wg kodowania Windowsowego.
Jest też funkcja key_state(key_id), która po prostu zwraca element tablicy.
Funkcje, obecnie czysto wirtualna, window_create, window_update, window_state.
Wszystko w module Elten::Engine::UI.

Podsumowanie:
funkcja key_update odświeża stan klawiszy.
Tablica $key jest tablicą typu boolean. Każde z jej pól posiada wartość true, jeśli klawisz jest wciskany, false w przeciwnym wypadku.
Logika obsługi skrótów klawiszowych czy puszczania klawiszy, przytrzymywania etc. jest już napisana w funkcji key_state(key_id), której nie należy ruszać.

Funkcja window_create nie przyjmuje zadnych argumentów, tworzy okno aplikacji. Zwraca tylko uchwyt do tego okna, w Windowsie jest to hwnd, w Linuxie będzie pewnie to kontekst Xorga czy coś podobnego.
Jeśli okna stworzyć się nie uda, zwracany jest nil.

Funkcja window_update odświeża okno, znaczy sprawia, że aplikacja nie ma w statusie brak odpowiedzi. Na Macu teo w ogóle się nie robi, więc pozostaje pusta, nie wiem, jak z Pingwinkiem.

Funkcja window_state zwraca status okna w formacie:
0 - okno jest niewidzialne,
1 - okno jest na wierzchu,
2 - okno jest zminimalizowane.


Prawdopodobnie będzie trzeba napisać także procedurę obsługi okna do kopiowania tablicy klawiszy, zdaje się, że tak to w X-ach się robi, na ile pamiętam oczywiście.


A więc abstrakt będzie mniej-więcej takiej postaci, język C:

VALUE Elten_Engine_UI_key_update(VALUE self);
VALUE Elten_Engine_UI_window_create(VALUE self);
VALUE Elten_Engine_UI_window_update(VALUE self, VALUE window_id);
VALUE Elten_Engine_UI_window_state(VALUE self, VALUE window_id);



void EAPI_UI_init(VALUE mEltenEngine) {
VALUE mEltenEngineUI = rb_define_module_under(mMod, "UI");
rb_define_module_function(mEltenEngineUI, "key_update", Elten_Engine_UI_key_update, 0);
rb_define_module_function(mEltenEngineUI, "window_create", Elten_Engine_UI_window_create, 0);
rb_define_module_function(mEltenEngineUI, "window_update", Elten_Engine_UI_window_update, 1);
rb_define_module_function(mEltenEngineUI, "window_state", Elten_Engine_UI_window_state, 1);
}


Ten kod oczywiście nie grzeszy przejrzystością, ale jest pewnym szkicem, jak to powinno wyglądać.
#StandWithUkraine Shoot for the Moon. Even if you miss, you'll land among the stars.
04.06.2019 23:56

13 z 24: zywek

Dawid, ja wiem, jk się definiuje funkcje w silniku. Mówisz, ze tamten jest przestarzały, czyli idzie do wywalenia czy tylko dorzucamy tam te funkcje, które napisałeś przed chwilą?
Bardziej mi chodziło o to, jak będziesz się odnosił do modułów w programie. Czy pisząc wszystko po dwukropkach, czy dołączając odpowiednie funkcje z modułów?

04.06.2019 23:59

14 z 24: pajper

Aa, ok. Tak jak to jest w szkicach poglądowych, te funkcje nie będą używane w programie, tylko przekształcane na wysokopoziomowe.
Dla przykładu, w programie nie będzie odwołań bezpośrednio do funkcji say, która gada wybraną rzecz, tylko do funkcji wysokopoziomowej, która ten tekst konwertuje, wyłapuje wyrażenia regularne ze słownika itp. i dopiero potem odrzuca to do say.
A odwoływał się będę dwukropkowo, bo nam by się mogły przestrzenie nazw nałożyć.
#StandWithUkraine Shoot for the Moon. Even if you miss, you'll land among the stars.
05.06.2019 00:01

15 z 24: zywek

No i o to mi właśnie chodziło.
Czyli EngineEmulator zostaje cały czas tak, jak jest, z tym, że wszystkie Win32 kiedyś się zamieni na te funkcje z modułów, do których będziesz się odwoływał dwukropkowo?

05.06.2019 00:02

16 z 24: pajper

Tak i nie. To będzie na trzech warstwach.
Masz sobie takie coś:
Elten::Engine::Speech.say(string text, bool interrupt=true)

I to ma tylko wypowiedzieć zadany tekst, rzerywając, jeśli interrupt==true. I tyle.
A w samym API, jest funkcja
Elten::API::UI.say
i ta funkcja ma i więcej parametrów, i wywoływana będzie bezpośrednio, z includu, jako say.
Więc w kodzie się znajdzie

say 'Hello, world!'

Natomiast w samej definicji funkcji say, do silnika odwołam się dwukropkowo.
#StandWithUkraine Shoot for the Moon. Even if you miss, you'll land among the stars.
05.06.2019 00:07

17 z 24: zywek

Dobra, tyle chciałem wiedzieć.

05.06.2019 00:09

18 z 24: pajper

Przy czym silnik się zmienił o tyle, że pewne funkcje wywaliłem i przerzuciłem do obsługi wyższego poziomu, np. pliki ini czy parsowanie jsona.
Chcesz wykaz obecnych funkcji z silnika?
#StandWithUkraine Shoot for the Moon. Even if you miss, you'll land among the stars.
05.06.2019 00:10

19 z 24: zywek

Wrzuć na pliki, jutro ściągnę.

05.06.2019 00:12

20 z 24: zywek

Chyba, że to n gicie jest, to nie wrzucaj, sprawdzę.

05.06.2019 00:12

Wróć do listy wątków

1 z 2

Następna

Nawigacja


Copyright (©) 2014-2024, Dawid Pieper