Przejdź do głównej zawartości

Odkryj Moc Hermetyzacji: Jak Tworzyć Solidne Encje

W świecie programowania obiektowego, termin „hermetyzacja” odgrywa kluczową rolę. Jak Grady Booch, jeden z pionierów programowania obiektowego, określił w swojej książce 'Object-Oriented Analysis and Design':  Hermetyzacja to proces kompartmentalizacji elementów abstrakcji, które stanowią jej strukturę i zachowanie; kompartmentalizacja służy do ukrycia wewnętrznych mechanizmów działania obiektów i ujawniania jedynie tych aspektów, które są zewnętrznie widoczne. To właśnie hermetyzacja wyróżnia dobrze zaprojektowane obiekty od prostych kontenerów danych. Przyjrzyjmy się, jak ten koncept wpływa na projektowanie encji. Problem Encji Anemicznych: Przykład Dostępności W tradycyjnym podejściu anemicznym, encje często są traktowane jako proste kontenery danych. Przykładem może być klasa `Availability`, która przechowuje informacje o dostępności terminu, ale sama w sobie nie zawiera żadnej logiki biznesowej: ```java class Availability {     private LocalDate date;     private boolean i

Współpraca z AI - GPT Engineer





Obawiam się, że szykuje się zagłada Stackoverflow. Już wyjaśniam moje obawy.

Do czego zazwyczaj używamy najczęściej StackOverflow? Do rozwiązywania problemów. Nierzadko można tam znaleźć skrypty z gotowymi rozwiązaniami. Okazuje się, że nie ma już potrzeby przeglądania wielu wątków na forum, wystarczy utworzyć odpowiedni opis dla modelu AI, a otrzymamy to co trzeba. No, może nie od razu, ale o tym za chwilę.

Pracuję, między innymi, z systemem klasy legacy, który korzysta na froncie z jQuery. Gdzieś w rozmowach pojawiła się potrzeba zrobienia zagnieżdżonego drzewa kategorii z checkboxami o specyficznym zachowaniu. Kiedy słuchałem opisu tego wymagania w głowie układałem już prompt dla GTP,  czy poradzi sobie z tym zadaniem? 

Szybko uświadomiłem sobie, że generowanie tego wszystkiego przez webową wersję Chat GPT będzie uciążliwe. Chwilę pogrzebałem w Internecie i znalazłem. GPT Engineer — narzędzie napisane w pythonie, które wykorzystuje model GPT jako inżyniera-asystenta. Po otrzymaniu opisu, przeanalizuje problem, zada doprecyzowujące pytania, a następnie wygeneruje odpowiedni kod. 

Gadu, gadu, pisu, pisu — oto przykład.

  • W pierwszym kroku należy zainstalować gpt-engineer przy pomocy
    pip install gpt-engineer.
  • Do działania aplikacji potrzebujemy konta OpenAI z dostępem do API i GPT4.
    Uwaga, jest to konto płatne, ale płaci się za wykorzystanie API, przy użyciu "do zabawy" koszty nie przekraczają kilku dolarów. Ja po kilku dniach zabawy mam aktualne saldo $1.8
  • Po zainstalowaniu gpt-engineer ustawiamy zmienną środowiskową, Linux lub Mac:
    export OPENAI_API_KEY=XXXXXXXXXXX
  • Następnie tworzymy katalog z nazwą projektu, nad którym chcemy pracować. Np. jquery-tree.
  • Przechodzimy do tego katalogu i tworzymy plik o nazwie "prompt", a w nim nasz opis. Może być po polsku.

Ja utworzyłem opis na podstawie tego o czym rozmawialiśmy w pracy:

Stórz mi kod html/jquery/css z drzewem kategorii z checkboxami. Drzewo może być wielopoziomowe. Ma być możliwość pokazywania i chowania podkategorii za pomocą przycisku "+". Nie ma limitów dla zagnieżdżeń podkategorii.

Zaznaczenie rodzica nie powoduje zaznaczenia dzieci. Na początku każdej podgrupy ma znajdować się przycisk "zaznacz/odznacz wszystko", który zaznaczy checkboxy we wszystkich podkategoriach z danej kategorii.

Layout html/css ma być prosty i elegancki.

Jeżeli znasz to użyj jakieś biblioteki do tworzenia takich drzew.

Po chwili otrzymałem kilka pytań doprecyzowujących: 

  1. Could you please provide more details about the structure of the category tree? How many levels should it have and what should be the relationship between different categories and subcategories?

    Odp. There aro no limits for subcategories structure.

  2. Could you please specify your design and layout preferences for the HTML/CSS?

    Odp. there is no specific layout, layout should be simple

  3. Could you please clarify the behavior of the "select/deselect all" button? Does it only affect the checkboxes in the current category or does it also affect checkboxes in the subcategories?

    Odp. check all subcategories

  4. Do you have a preference for a specific library to be used for creating the category tree?

    Odp. there is no specific lib, use what you want
Na podstawie opisu i pytań otrzymałem kompletne pliki html, css i js do przejrzenia tutaj: https://github.com/jakubciszak/ai-generated-jquery-tree/




Wnioski?

Przy odpowiednio precyzyjnym opsie jesteśmy w stanie stworzyć całkiem sporą część potrzebnego kodu. W tym przypadku otrzymałem cały działający kod, który musiałbym tylko sobie ostylować.

Jednak pomimo całej niesamowitości jest jeszcze sporo do poprawienia, za pewno od strony gpt-engineer, ale też OpenAI. Przy próbie wygenerowania bardziej "ambitnego" projektu — modelu domeny zarządzania taksówkami — otrzymałem bardzo "płaski" kod, klasy wrzucone do jednego worka, bez podziału na namespace. Mimo wszystko był to kod, który dało się wykorzystać, przenosząc klasy w odpowiednie miejsca i uzupełniając kilka metod.

W każdym razie, warto mieć na uwadze jak szybko rozwija się ta technologia, szczególnie planując swoją ścieżkę kariery — umiejętności logiczno-architektoniczne, zdolności miękkie pozwalające na rozumienie potrzeb klienta — to są obszary, w których AI tak szybko nas nie doścignie. 

Komentarze

Popularne posty z tego bloga

ChatGPT i rysowanie diagramów?

Ostatnio, testując różne możliwości tego kontrowersyjnego, ale jednak genialnego narzędzia, pojawiła się w mojej głowie potrzeba stworzenia diagramu na podstawie wcześniejszej konwersacji. Zastanawiałem się, jak GPT poradzi sobie z podziałem problemu na konteksty i wyodrębnieniem generycznych subdomen. Nawiasem mówiąc, przeprowadzenie pseudo-sesji event stormingowej z ChatGPT zasługuje na osobny wpis. Biorąc pod uwagę szczątkowy opis biznesu, jaki dostał na wejściu, poszło mu całkiem nieźle. Opis dotyczył aplikacji do rezerwacji samochodów z wypożyczalni. Pomijając szczegóły całej rozmowy, otrzymałem taką listę (jak już wspomniałem, opis był bardzo krótki): ReservationsReservationManagement (processes related to car reservations) ClientAuthentication (verifying client identity and driving license details) VehicleFleetFleetManagement (managing vehicles, their availability, and pricing) GenericAvailability (checking vehicle availability in a specific period) CommunicationNotifications (c

Odkryj Moc Hermetyzacji: Jak Tworzyć Solidne Encje

W świecie programowania obiektowego, termin „hermetyzacja” odgrywa kluczową rolę. Jak Grady Booch, jeden z pionierów programowania obiektowego, określił w swojej książce 'Object-Oriented Analysis and Design':  Hermetyzacja to proces kompartmentalizacji elementów abstrakcji, które stanowią jej strukturę i zachowanie; kompartmentalizacja służy do ukrycia wewnętrznych mechanizmów działania obiektów i ujawniania jedynie tych aspektów, które są zewnętrznie widoczne. To właśnie hermetyzacja wyróżnia dobrze zaprojektowane obiekty od prostych kontenerów danych. Przyjrzyjmy się, jak ten koncept wpływa na projektowanie encji. Problem Encji Anemicznych: Przykład Dostępności W tradycyjnym podejściu anemicznym, encje często są traktowane jako proste kontenery danych. Przykładem może być klasa `Availability`, która przechowuje informacje o dostępności terminu, ale sama w sobie nie zawiera żadnej logiki biznesowej: ```java class Availability {     private LocalDate date;     private boolean i