 
 
 Sam już się na tym łapię każdego dnia.
 Sam już się na tym łapię każdego dnia.  
                                    @MDW, post #1
A jeżeli chodzi o GitDesktop to od ładnych kilku wersji naprawdę nie potrafię się do niczego już przyczepić. Są jeszcze funkcje dla których trzeba jeszcze otworzyć CLI ale to nie problem, bo to są rzadziej robione operacje.
@MDW, post #1
Git uzupełniony o GitDesktop to świetne rozwiązanie dla każdego programisty, który przez ostatnie 30 lat choćby raz wyszedł z jaskini.Moim zdaniem to nieprawda. Przy hobbystycznym projekcie, gdzie nad kodem pracuje jedna osoba, git to często podstawienie sobie nogi. Uważam, że to mocno przekombinowane narzędzie. Rozumiem, że wszystkie jego zalety wychodzą przy dużych projektach rozwijanych przez wieloosobowe zespoły, ale... właśnie. Trzymam kody na GitHubie, bo to modne, ale trochę wbrew sobie. Oczywiście to, że na klasyczną Amigę nie ma gita i za pośrednika robi Linux, czyni sprawę jeszcze mniej wygodną. Dla mnie każda chmurowa składnica plików z historią wersji jest wygodniejsza niż git.
@Krashan, post #3
Moim zdaniem to nieprawda. Przy hobbystycznym projekcie, gdzie nad kodem pracuje jedna osoba, git to często podstawienie sobie nogi.
 Ale nie wiem kto i na jakiej liście, bo nie ogarniam Facebooka i nie potrafię tam do czegokolwiek wrócić.
 Ale nie wiem kto i na jakiej liście, bo nie ogarniam Facebooka i nie potrafię tam do czegokolwiek wrócić. 
@MDW, post #4
Osobiście zrobiłbym setki karygodnych błędów gdyby nie to, że przed scommitowaniem przeglądam zmiany. Pisząc dodaję tony tymczasowych zmian. Po zakończonej implementacji to absolutnie nie nadaje się do archiwizacji bez wyczyszczenia tego wszystkiego. Bez podglądu zmian takie czyszczenie jest niemożliwe.
Nawet robiąc coś sam często mam osobne branche na jakąś funkcjonalność. Do historii wracam niezbyt często ale jednak czasem się przydaje i bywało, że szukałem po jakiej zmianie coś mi się skopało.
@MDW, post #4
@Hexmage960, post #6
@michal_zukowski, post #7
@Hexmage960, post #5
Czy mógłbyś napisać proszę na czym polega owo czyszczenie?
 Po prostu robiąc jakiś element na przykład przez tydzień czy dwa wprowadza się dziesiątki tymczasowego kodu, jakichś chwilowych debug-logów, coś się zakomentowuje, dodaje w zewnętrznych plikach jakieś tymczasowe ustawienia. Gdy element działa to dawniej po prostu robiłem dwa archiwa: jedno LhA, drugie 7-Zip, do nazwy pliku dodawałem datę (przy pomocy programu Krashana o nazwie AppednDate) i leciało do katalogu z setkami takich wersji. No ale zanim się to spakuje do archiwum to trzeba powywalać te różne tymczasowe drobiazgi, ustawienia zmienione tylko dla potrzeb testu. Czasem to trwało kilka tygodni, zadanie się rozgałęziało, wymagało powrotu do silnika. Do tego wypadałoby dodać jakieś komentarze, bardziej adekwatne nazwy metod, klas, stałych, zmiennyh. Nie ma szans żebym był w stanie powiedzieć co ja przez te tygodnie tam namotałem.
 Po prostu robiąc jakiś element na przykład przez tydzień czy dwa wprowadza się dziesiątki tymczasowego kodu, jakichś chwilowych debug-logów, coś się zakomentowuje, dodaje w zewnętrznych plikach jakieś tymczasowe ustawienia. Gdy element działa to dawniej po prostu robiłem dwa archiwa: jedno LhA, drugie 7-Zip, do nazwy pliku dodawałem datę (przy pomocy programu Krashana o nazwie AppednDate) i leciało do katalogu z setkami takich wersji. No ale zanim się to spakuje do archiwum to trzeba powywalać te różne tymczasowe drobiazgi, ustawienia zmienione tylko dla potrzeb testu. Czasem to trwało kilka tygodni, zadanie się rozgałęziało, wymagało powrotu do silnika. Do tego wypadałoby dodać jakieś komentarze, bardziej adekwatne nazwy metod, klas, stałych, zmiennyh. Nie ma szans żebym był w stanie powiedzieć co ja przez te tygodnie tam namotałem.  Robiłem więc tak, że rozpakowywałem poprzednie archiwum i robiłem "diffa" przy pomocy programu ADiffView albo MCAmiga (który jest po prostu portem linuxowego Midnight Commander - wygląda strasznie DOSowo ale ma bardzo dużo funkcji). To nie było wygodne (zwłaszcza, że te programy nie mają "merge") i bardzo tego nie lubiłem. Kilka razy prześlizgnął mi się naprawdę istotny błąd, bo nie chciało mi się tego analizować. Raz niechcący dokleił mi się znak na końcu czegoś takiego:
 Robiłem więc tak, że rozpakowywałem poprzednie archiwum i robiłem "diffa" przy pomocy programu ADiffView albo MCAmiga (który jest po prostu portem linuxowego Midnight Commander - wygląda strasznie DOSowo ale ma bardzo dużo funkcji). To nie było wygodne (zwłaszcza, że te programy nie mają "merge") i bardzo tego nie lubiłem. Kilka razy prześlizgnął mi się naprawdę istotny błąd, bo nie chciało mi się tego analizować. Raz niechcący dokleił mi się znak na końcu czegoś takiego: #define USE_MIPMAPPING
#define USE_MIPMAPPINGa
 ale nie powodował błędu kompilacji czy choćby ostrzeżenia. Efekt był taki, że kod skompilował się w wersji z wyłączonym mipmappingiem i jedna wersja dema w pewnym miejscu zauważalnie wolniej działała. Tam akurat tekstury były takie, że nie bardzo było widać "mrówczenie" się tekstur w oddali.
 ale nie powodował błędu kompilacji czy choćby ostrzeżenia. Efekt był taki, że kod skompilował się w wersji z wyłączonym mipmappingiem i jedna wersja dema w pewnym miejscu zauważalnie wolniej działała. Tam akurat tekstury były takie, że nie bardzo było widać "mrówczenie" się tekstur w oddali.  
 
 Jeden klik i od razu widzę co i gdzie zmieniłem. Obiecywałem sobie, że będę używał GitDesktop tylko tyle ile będę musiał żeby nie tracić kontaktu i nie zapomnieć Gita z CLI. Ale w ogniu walki z jakimś zadaniem jednak wygoda wygrywa. Coraz częściej klikam zamiast klepać.
 Jeden klik i od razu widzę co i gdzie zmieniłem. Obiecywałem sobie, że będę używał GitDesktop tylko tyle ile będę musiał żeby nie tracić kontaktu i nie zapomnieć Gita z CLI. Ale w ogniu walki z jakimś zadaniem jednak wygoda wygrywa. Coraz częściej klikam zamiast klepać.  Ale nie tracę przez to kontaktu z Gitem, bo cały czas patrzę na output GitDesktop (ma takie fajne pole). Nawet całkiem sporo się dowiedziałem o Git patrząc na to co tam GitDesktop mi pokazuje. I czuję się rozgrzeszony.
 Ale nie tracę przez to kontaktu z Gitem, bo cały czas patrzę na output GitDesktop (ma takie fajne pole). Nawet całkiem sporo się dowiedziałem o Git patrząc na to co tam GitDesktop mi pokazuje. I czuję się rozgrzeszony. @MDW, post #9
@Hexmage960, post #11
mam głównie problem z nazywaniem rzeczy. I to odnosi się do nazw plików, a nawet struktur, funkcji bądź komunikatów wpisywanych w logu
 Sto razy zmieniam nazwy, a i tak bardzo często nie jestem z nich zadowolony. Coś mnie trafia gdy znów muszę zakończyć nazwę klasy na "Manager", "Controller" albo "Container".
 Sto razy zmieniam nazwy, a i tak bardzo często nie jestem z nich zadowolony. Coś mnie trafia gdy znów muszę zakończyć nazwę klasy na "Manager", "Controller" albo "Container".  
  Inna lista obiektów już od roku jest nazwana tymczasowo, bo nie mam pomysłu jak to zgrabnie określić. Jest to mało istotne gdy problem dotyczy tylko nazwy klasy. Niestety tutaj też jest to widoczne dla gracza, więc nazwa powinna być sensowna przyjemniej po polsku i angielsku, oraz dawać nadzieję na sensowne tłumaczenia w innych językach (od razu wszystko robię lokalizowalne).
 Inna lista obiektów już od roku jest nazwana tymczasowo, bo nie mam pomysłu jak to zgrabnie określić. Jest to mało istotne gdy problem dotyczy tylko nazwy klasy. Niestety tutaj też jest to widoczne dla gracza, więc nazwa powinna być sensowna przyjemniej po polsku i angielsku, oraz dawać nadzieję na sensowne tłumaczenia w innych językach (od razu wszystko robię lokalizowalne).@Hexmage960, post #6
A z tego co wiem, rozwija Pan swój silnik i narzędzia w C++ pod kontrolą Gita i wychodzi Panu to świetnie.
 To wszystko wcale nie musi być fajnie zorganizowane. Po prostu jest tak jak mi pasuje i jak potrafię. Oprócz sześciu dem od lat nic nie upubliczniłem (gry Fortis nie liczę, bo to było aż 14 lat temu) więc też ciężko ocenić co ja tam sobie klepię. Ale taką przyjąłem metodę - pokazuję tylko coś co jest skończone albo koniec jest bardzo bliski i na 100% pewny. W amigowym świecie (bez względu na jego odnogę) obiecanki nie są mile widziane, bo zbyt wiele razy karmiono nas różnymi bajkami.
 To wszystko wcale nie musi być fajnie zorganizowane. Po prostu jest tak jak mi pasuje i jak potrafię. Oprócz sześciu dem od lat nic nie upubliczniłem (gry Fortis nie liczę, bo to było aż 14 lat temu) więc też ciężko ocenić co ja tam sobie klepię. Ale taką przyjąłem metodę - pokazuję tylko coś co jest skończone albo koniec jest bardzo bliski i na 100% pewny. W amigowym świecie (bez względu na jego odnogę) obiecanki nie są mile widziane, bo zbyt wiele razy karmiono nas różnymi bajkami.Może dzięki poradom od doświadczonych programistów będę w stanie się więcej nauczyć jeśli chodzi o efektywne użycie Gita i RCS.
 Na przykład w AmigaOS API mógłbyś mnie wdeptać w asfalt nie zakładając nawet butów.
 Na przykład w AmigaOS API mógłbyś mnie wdeptać w asfalt nie zakładając nawet butów.  Ja ledwo liznąłem podstawy żeby sobie stworzyć otoczenie do tego co się dzieje w oknie czy na ekranie bez użycia "obcych ciał" typu SDL. Kilka lat temu uznałem, że warto mieć taki własny kod, bo nad wszystkim się panuje. A brak panowania nad własnym tworem i uzależnianie się od cudzych rozwiązań to jest coś czego wręcz nienawidzę. Prędzej czy później to się zemści. To jest oczywiście bardzo niedzisiejsze podejście do programowania ale dzisiejszą informatykę mam dokładnie tam gdzie one mnie.
 Ja ledwo liznąłem podstawy żeby sobie stworzyć otoczenie do tego co się dzieje w oknie czy na ekranie bez użycia "obcych ciał" typu SDL. Kilka lat temu uznałem, że warto mieć taki własny kod, bo nad wszystkim się panuje. A brak panowania nad własnym tworem i uzależnianie się od cudzych rozwiązań to jest coś czego wręcz nienawidzę. Prędzej czy później to się zemści. To jest oczywiście bardzo niedzisiejsze podejście do programowania ale dzisiejszą informatykę mam dokładnie tam gdzie one mnie.  To nie jest praca i na tym polega siła własnych, niekomercyjnych projektów - ja nic nie muszę, a wszystko mogę.
 To nie jest praca i na tym polega siła własnych, niekomercyjnych projektów - ja nic nie muszę, a wszystko mogę. 
@Hexmage960, post #11
... ale mam głównie problem z nazywaniem rzeczy. I to odnosi się do nazw plików, a nawet struktur, funkcji bądź komunikatów wpisywanych w logu. Cały czas to przemianowuję. Problem drugi to tak jak wspomniałem błędy konstrukcyjne - przykładowo zapominam czegoś uwzględnić. Problem trzeci to protokoły funkcji (lista parametrów). Ale to akurat rozwiązuję ostatnio dodając do listy parametrów wszystkie deklaracje zmiennych lokalnych, po to by funkcja była możliwie uniwersalna.
Takie podejście w programowaniu w języku Ansi C ma swoje wady i zalety, które warto rozważyć.
Zalety:
- Uniwersalność funkcji: Dodając wszystkie deklaracje zmiennych lokalnych do listy parametrów, funkcja może stać się bardziej uniwersalna i elastyczna, co pozwala na jej ponowne wykorzystanie w różnych kontekstach.
- Lepsza czytelność w niektórych przypadkach: Wszystkie zmienne, które są używane przez funkcję, są jawnie zadeklarowane w jej sygnaturze. Może to poprawić czytelność, ponieważ od razu widać, jakie dane są przekazywane do funkcji.
- Unikanie globalnych zmiennych: Takie podejście może pomóc w ograniczeniu używania globalnych zmiennych, co z kolei zmniejsza ryzyko błędów związanych z ich niewłaściwym użyciem.
Wady:
- Przerost sygnatury funkcji: Gdy lista parametrów jest bardzo długa, sygnatura funkcji staje się trudna do zarządzania i może być myląca. Długie listy parametrów mogą też prowadzić do błędów przy wywołaniach funkcji.
- Słaba modularność: Zamiast enkapsulować logikę i zmienne w funkcji, wyciąganie zmiennych na zewnątrz może prowadzić do mniej modularnego kodu. W efekcie funkcje mogą stawać się mniej czytelne i trudniejsze do utrzymania.
- Trudności z utrzymaniem: Kiedy zmienia się liczba lub typ zmiennych lokalnych używanych przez funkcję, trzeba również zmieniać wszystkie miejsca, w których funkcja jest wywoływana, co może prowadzić do błędów i zwiększa nakład pracy.
- Potencjalne problemy z wydajnością: Przekazywanie dużej liczby parametrów przez wartość może obniżyć wydajność programu, szczególnie jeśli są to struktury danych o dużej wielkości.
Alternatywne podejścia:
- Struktury danych: Zamiast przekazywać dużą liczbę parametrów, można zgrupować je w struktury danych. To zmniejsza liczbę parametrów i poprawia czytelność.
- Globalne zmienne z ograniczonym zakresem: Jeśli nie można uniknąć używania globalnych zmiennych, warto ograniczyć ich zakres do minimum, na przykład poprzez stosowanie static do zmiennych w plikach źródłowych.
- Podział funkcji na mniejsze: Rozbicie dużych funkcji na mniejsze, bardziej wyspecjalizowane może pomóc w zachowaniu przejrzystości i modularności.
Podsumowując, choć dodawanie wszystkich deklaracji zmiennych lokalnych do listy parametrów może w niektórych przypadkach zwiększyć uniwersalność funkcji, ma to również swoje wady. Warto zastanowić się nad alternatywnymi podejściami, które mogą lepiej spełniać potrzeby projektu i poprawiać jakość kodu.
@Rafael/ARMO, post #14
@Hexmage960, post #15
Pozostałe wady nie są według mnie prawdziwe. Kiedy funkcja ma sporo istotnych parametrów, to jak najbardziej jest modularna, tzn. stanowi część którą można łączyć z dowolnymi innymi.
Każda klasa lub moduł powinien mieć tylko jedną odpowiedzialność. W kontekście funkcji, oznacza to, że każda funkcja powinna mieć jasno określony cel i powinna wykonywać tylko jedno zadanie.
Zastosowanie: Unikaj tworzenia funkcji, które mają zbyt wiele parametrów i odpowiedzialności. Zamiast tego, podziel funkcje na mniejsze, bardziej specjalizowane jednostki, które można łatwiej testować i utrzymywać.
@Rafael/ARMO, post #16
Ja osobiście uważam że jak coś jest do wszystkiego to jest .. do niczego.
Tutaj może mieć zastosowanie tzw zasada Single Responsibility Principle (SRP) - Zasada Pojedynczej Odpowiedzialności