<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Programowanie » enterv.pl</title>
	<atom:link href="https://enterv.pl/category/all/programowanie/feed/" rel="self" type="application/rss+xml" />
	<link>https://enterv.pl</link>
	<description>Więcej niż tylko portfolio i blog</description>
	<lastBuildDate>Tue, 04 Mar 2025 17:27:08 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://enterv.pl/wp-content/uploads/2022/12/cropped-1024_bt-32x32.png</url>
	<title>Programowanie » enterv.pl</title>
	<link>https://enterv.pl</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Puzzle Game &#8211; wywiad z autorem 🎮</title>
		<link>https://enterv.pl/2023/09/19/puzzle-game-wywiad/</link>
		
		<dc:creator><![CDATA[enterv]]></dc:creator>
		<pubDate>Tue, 19 Sep 2023 19:30:32 +0000</pubDate>
				<category><![CDATA[GameDev]]></category>
		<category><![CDATA[Pozostałe]]></category>
		<category><![CDATA[Wywiady]]></category>
		<category><![CDATA[ambitny twórca]]></category>
		<category><![CDATA[autor]]></category>
		<category><![CDATA[discord]]></category>
		<category><![CDATA[game dev]]></category>
		<category><![CDATA[gamedev]]></category>
		<category><![CDATA[giveaway]]></category>
		<category><![CDATA[informatyka]]></category>
		<category><![CDATA[patryk kamionka]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[projekt]]></category>
		<category><![CDATA[promocja]]></category>
		<category><![CDATA[puzzle game]]></category>
		<category><![CDATA[solo dev]]></category>
		<category><![CDATA[steam]]></category>
		<category><![CDATA[technikum]]></category>
		<category><![CDATA[the room]]></category>
		<category><![CDATA[trailer]]></category>
		<category><![CDATA[unity]]></category>
		<category><![CDATA[unreal]]></category>
		<category><![CDATA[unreal engine]]></category>
		<category><![CDATA[wywiad]]></category>
		<guid isPermaLink="false">https://enterv.pl/?p=907</guid>

					<description><![CDATA[<p>Pragnę wam dzisiaj zaprezentować wywiad z twórcą gry Puzzle Game. Młody ambitny Game Developer zgodził się powiedzieć nieco więcej o sobie i swoim dziele :)</p>
Artykuł <a href="https://enterv.pl/2023/09/19/puzzle-game-wywiad/">Puzzle Game – wywiad z autorem 🎮</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">🌄 Wprowadzenie</h2>



<p>Nie tak dawno miała miejsce premiera gry <a href="https://store.steampowered.com/app/2562870/Puzzle_Game/" target="_blank" rel="noopener nofollow" title="">Puzzle Game na platformie Steam</a>. Jej autor zgłosił się do moderacji discordowego serwera <a href="https://www.youtube.com/@PL_Tutors" target="_blank" rel="noopener nofollow" title="">PL Tutorsa</a> z prośbą o promocję swojego dzieła, więc kimże byśmy byli, gdybyśmy odmówili pomocy?</p>



<p>Stąd, z tej też okazji na ww. serwerze odbył się giveaway, w którym można było wygrać jeden z pięciu kluczy do tytułowej gry! Wszystkim zwycięzcom gratulujemy 😀</p>







<p>Tyle słowem wstępu i poznajmy nareszcie bohaterów artykułu: autora i grę 😃</p>



<h2 class="wp-block-heading">👤O autorze</h2>



<h3 class="wp-block-heading">Opowiedz nam coś o sobie</h3>



<p>Nazywam się Patryk Kamionka, mam 18 lat. Obecnie jestem w ostatniej klasie technikum na kierunku: informatyk. Od 3 lat hobbystycznie tworze modele 3D.</p>



<h3 class="wp-block-heading">Kiedy pojawiło się zainteresowanie GameDev?</h3>



<p>Prawdopodobnie było to mniej więcej w 2012 r. Małoletni ja zawsze chciał stworzyć własnego moda do Minecrafta. Później przerodziło się to w chęć zrobienia własnej gry.</p>



<p>Niestety w tym wieku było to zadanie ekstremalnie trudne. W tamtym czasie się poddałem. 3 lata temu zainteresowałem się grafiką 3D. Pierwszymi tutorialami były te od “<a href="https://www.youtube.com/@PL_Tutors" target="_blank" rel="noopener nofollow" title="">TutorsaPL</a>”. Mniej więcej miesiąc później od tego momentu postanowiłem, że chce się rozwijać w kierunku tworzenia gier na pozycji grafika 3D. Wtedy też pojawiły się pierwsze zabawy z Unity</p>



<h3 class="wp-block-heading">Ile i jakie produkcje już stworzyłeś?</h3>



<p><strong>Puzzle Game</strong> to pierwsza gra, która trafia do szerszej publiczności. Ale mam kilka, które jako tako działają. Mam za sobą 3 game jamy. Szczęśliwie, na każdym z nich udało się coś wykombinować. Link: <a href="https://globalgamejam.org/users/pro-g" target="_blank" rel="noopener nofollow" title="">https://globalgamejam.org/users/pro-g</a>. Opiszę krótko każdą z nich:</p>



<figure class="wp-block-image alignright size-large"><img decoding="async" src="https://globalgamejam.org/amazons3/image-derivative/ggj/styles/feature_image__narrow/featured_image/2021/01/336922/obraz_2021-01-31_154745.png?itok=ltS7fpfH&amp;timestamp=1612104796" alt=""/></figure>



<h4 class="wp-block-heading"><strong><a href="https://globalgamejam.org/2021/games/lost-found-office-2" target="_blank" rel="noopener nofollow" title="">CYBERFIND SIMULATOR</a></strong></h4>



<p>Nie jestem z niej zadowolony, ale to był mój pierwszy game jam. W grze dostajemy zlecenie na znalezienie konkretnego przedmiotu w magazynie. Czas jest ograniczony.</p>



<figure class="wp-block-image alignleft size-large"><img decoding="async" src="https://globalgamejam.org/amazons3/image-derivative/ggj/styles/feature_image__narrow/featured_image/2022/01/336000/icon_4.png?itok=OBfVZpUU&amp;timestamp=1643405170" alt=""/></figure>



<h4 class="wp-block-heading has-text-align-left"><strong><a href="https://globalgamejam.org/2022/games/mccock-2" target="_blank" rel="noopener nofollow" title="">Don&#8217;t STOP</a></strong></h4>



<p>Gierka która nie osiągnęła swojego pełnego potencjału, ale mimo wszystko przyjemnie się gra. Gra polega na realizowaniu kulinarnych zamówień poprzez podchodzenie do wyznaczonych punktów. Haczyk polega na tym, że musimy sterować dwoma postaciami jednocześnie. Zadanie postaci A nie może być wykonane przez postać B.</p>



<figure class="wp-block-image alignright size-large"><img fetchpriority="high" decoding="async" width="323" height="197" src="https://enterv.pl/wp-content/uploads/2023/09/image.png" alt="" class="wp-image-944" srcset="https://enterv.pl/wp-content/uploads/2023/09/image.png 323w, https://enterv.pl/wp-content/uploads/2023/09/image-300x183.png 300w" sizes="(max-width: 323px) 100vw, 323px" /></figure>



<h4 class="wp-block-heading"><strong><a href="https://globalgamejam.org/2023/games/help-ancestors-1" target="_blank" rel="noopener nofollow" title="">With The Help Of Ancestors</a></strong></h4>



<p>Moja ulubiona ze wszystkich game jamowych. Gra polega na pozbywaniu się niechcianych korzeni i dbaniu o roślinki. Ze strony deweloperskiej gra jest o tyle ciekawa, że mimo iż miałem zamiar być zespołowym grafikiem to byłem zespołowym programistą i grafikiem ¯_(ツ)_/¯ zabrakło programistów i trzeba było<br>sobie poradzić.</p>



<p>Mam jeszcze 2 ukończone gierki, ale nie widziały one publiczności.</p>



<h4 class="wp-block-heading"><strong>Cube_vs_Spheres</strong></h4>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Cube_vs_Spheres" width="1290" height="726" src="https://www.youtube.com/embed/n1h5hKbN5jM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div></figure>



<p><br>Moja pierwsza ukończona gra. (Swoją drogą na moim kanale YT są filmy z game jamowych gierek).</p>



<h4 class="wp-block-heading">Nieupubliczniona gra</h4>



<p>Druga nie była nigdzie publikowana. Była to prosta gierka. Ekran był podzielony na dwie części. Po prawej stronie pojawiał się kolor. Gracz miał 3 kontrolki: R, G, B. Klikając je w odpowiedni sposób, mógł wytworzyć jeden z 7 kolorów. Celem było aby stworzyć kolor wyświetlany po prawej stronie ekranu. Tworzony kolor był wyświetlany po lewej stronie. Gracz dostawał punkty za szybkość dopasowywania kolorów.</p>



<p>Brałem udział w kilku innych projektach zespołowych, ale żaden z nich nie został ukończony.</p>



<h3 class="wp-block-heading">Czym na co dzień się zajmujesz? Jaki jest twój zawód?</h3>



<p>Jak wspomniałem przy pierwszym pytaniu, ciągle szkoła, 5 klasa technikum informatycznego. Egzaminy zawodowe zdane. 🙂 Po szkole jestem grafikiem 3D na zlecenie (obecnie jest STOP ponieważ jestem w klasie maturalnej, trochę czasu brakuje., Kiedy nie mam zleceń to tworzę prace dla siebie (<a href="https://www.artstation.com/patryk_kamionka" target="_blank" rel="noopener nofollow" title="">Artstation</a>) lub kreuję jakąś grę (tak już mam plan na puzzle game 2).</p>



<p>Ogólnie to zajmuję się grafiką 3D, ale potrafię też programować. Web development również nie jest mi obcy, ale to akurat na niższym poziomie.</p>



<h2 class="wp-block-heading">🧩 O Puzzle Game</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1920" height="1080" src="https://enterv.pl/wp-content/uploads/2023/09/image.jpeg" alt="" class="wp-image-943" srcset="https://enterv.pl/wp-content/uploads/2023/09/image.jpeg 1920w, https://enterv.pl/wp-content/uploads/2023/09/image-300x169.jpeg 300w, https://enterv.pl/wp-content/uploads/2023/09/image-1024x576.jpeg 1024w, https://enterv.pl/wp-content/uploads/2023/09/image-768x432.jpeg 768w, https://enterv.pl/wp-content/uploads/2023/09/image-1536x864.jpeg 1536w" sizes="(max-width: 1920px) 100vw, 1920px" /></figure>



<h3 class="wp-block-heading">Opowiedz nam coś o swoim dziele</h3>



<p>Jest to krótka gra logiczna z 10 poziomami i drobną fabułą. Została stworzona mniej więcej w miesiąc (w trakcie wakacji miałem dużo czasu). Zrobiona na Unreal Engine 5.2. Stworzyłem ją solo: programowanie i grafika -&gt; wszystko moje, ręcznie robione. Tylko dźwięki outsourcowałem z <a href="https://www.zapsplat.com/" target="_blank" rel="noopener nofollow" title="">zapsplat.com</a> (Darmowe dźwięki). Lektor to mój głos, również robiony samodzielnie, ale przyznam, że nie wyszedł zbyt dobrze.</p>



<h3 class="wp-block-heading">Dla kogo jest gra?</h3>



<p>Myślę, że każdy w wieku 12+ kto lubi gry logiczne/zagadkowe będzie zadowolony z rozgrywki. Gra była inspirowana produkcjami typu “The Room”, także jeśli komuś się to podobało, to moja gra również powinna się spodobać.</p>



<h3 class="wp-block-heading">Czy gra jest trudna? Ile czasu potrzeba na jej przejście?</h3>



<p>Część zagadek jest prosta, a część zagadek jest taka, że trzeba posiedzieć i się zastanowić. Gra jest na około 40-60 min.</p>



<h3 class="wp-block-heading">Co było najtrudniejsze podczas tworzenia gry?</h3>



<p>Będąc szczerym, nie miałem zbyt dużo problemów. Na pewno programowanie w Unreal Engine 5 było nowością. No i sam fakt, że wszystko robiłem całkowicie samemu. Trzeba było<br>utrzymać pewien poziom samomotywacji. Ogólnie to zdradzę, że gra początkowo miała być tylko projektem do nauczenia się Unreala, ale tak dobrze pochłaniałem wiedzę na jego temat, że przerodziło się w moją pierwsza grę na Steam. Wiedza zdobyta podczas tworzenia tego projektu zostanie wykorzystana, do stworzenia kolejnej części, tym razem chcę żeby dało się normalnie chodzić po mapie. (The room, ale pełna swoboda).</p>



<h3 class="wp-block-heading">Czy chciałbyś coś podpowiedzieć swoim graczom?</h3>



<p>Szczerze, myślę, że gra jest wystarczająco prosta + ma wbudowany system podpowiedzi.<br>Mogę co najwyżej powiedzieć, że z beta testów wynika, że gracze często za bardzo kombinują. Wiele zagadek jest prostszych niż się wydają.</p>



<h3 class="wp-block-heading">Czy chciałbyś coś jeszcze dodać?</h3>



<p>Gra nie jest idealna, szczególnie jeśli mowa o lektorze, ale tak to już jest, kiedy jest się solo devem. Podróż samotnego developera będzie raczej wyboista, często trzeba iść na kompromisy. Chciałbym zachęcić wszystkich mających ambicję bycia game deweloperami, do próbowania mimo przeszkód i nie bania się i pójścia na takie kompromisy, niestety ale jest to wymóg do ukończenia gry w rozsądnym czasie. Satysfakcja po ukończeniu takiego projektu jest nie do opisania.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://enterv.pl/wp-content/uploads/2022/12/gamejaminterview-1024x1024.webp" alt="" class="wp-image-523" srcset="https://enterv.pl/wp-content/uploads/2022/12/gamejaminterview.webp 1024w, https://enterv.pl/wp-content/uploads/2022/12/gamejaminterview-300x300.webp 300w, https://enterv.pl/wp-content/uploads/2022/12/gamejaminterview-150x150.webp 150w, https://enterv.pl/wp-content/uploads/2022/12/gamejaminterview-768x768.webp 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">✅ Zakończenie</h2>



<p>Grę <a href="https://store.steampowered.com/app/2562870/Puzzle_Game/" target="_blank" rel="noopener nofollow" title=""><strong>Puzzle Game</strong> znajdziecie na platformie Steam</a> i możecie ją ograć na PC jak i, niespodzianka, na Steam Deck co z pewnością pozwoli cieszyć się dziełem w całym domostwie jak i poza nim 😉. Dzieło dostępne jest za przyzwoitą cenę 3$ co z całą pewnością jest na każdą kieszeń, a jednocześnie wspomoże młodego i ambitnego twórcę gier 😁</p>



<p>Również gorąco polecam śledzić prace graficzne Patryka na <a href="https://www.artstation.com/patryk_kamionka" target="_blank" rel="noopener nofollow" title="">Artstation</a>, na którym możecie zobaczyć jego piękne portfolio 😉 </p>Artykuł <a href="https://enterv.pl/2023/09/19/puzzle-game-wywiad/">Puzzle Game – wywiad z autorem 🎮</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></content:encoded>
					
		
		<enclosure url="https://cdn.cloudflare.steamstatic.com/steam/apps/256963983/movie480_vp9.webm?t=1692656025" length="1884497" type="video/webm" />

			</item>
		<item>
		<title>PHP vs Node.js &#8211; krótki test</title>
		<link>https://enterv.pl/2023/02/05/php-vs-node-js-krotki-test/</link>
					<comments>https://enterv.pl/2023/02/05/php-vs-node-js-krotki-test/#comments</comments>
		
		<dc:creator><![CDATA[enterv]]></dc:creator>
		<pubDate>Sun, 05 Feb 2023 11:39:58 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[aplikacje webowe]]></category>
		<category><![CDATA[backend development]]></category>
		<category><![CDATA[backend development w php i node.js]]></category>
		<category><![CDATA[co szybsze]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[jaka technologia jest szybsza]]></category>
		<category><![CDATA[jakie są różnice]]></category>
		<category><![CDATA[język programowania]]></category>
		<category><![CDATA[języki programowania]]></category>
		<category><![CDATA[krótki test]]></category>
		<category><![CDATA[która technologia jest lepsza]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[node.js a php]]></category>
		<category><![CDATA[node.js czy php]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[po stronie serwera]]></category>
		<category><![CDATA[porównanie]]></category>
		<category><![CDATA[porównanie dwóch technologii]]></category>
		<category><![CDATA[porównanie technologii]]></category>
		<category><![CDATA[prędkość]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[programowanie po stronie serwera]]></category>
		<category><![CDATA[server-side programming]]></category>
		<category><![CDATA[szybkość]]></category>
		<category><![CDATA[technologie]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[test prędkości]]></category>
		<category><![CDATA[test wydajności]]></category>
		<category><![CDATA[testy wydajności]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[wybór języka programowania]]></category>
		<category><![CDATA[wybór technologii]]></category>
		<category><![CDATA[wydajność]]></category>
		<category><![CDATA[zalety i wady]]></category>
		<category><![CDATA[zastosowanie]]></category>
		<guid isPermaLink="false">https://enterv.pl/?p=661</guid>

					<description><![CDATA[<p>Dzisiaj na warsztat weźmiemy sobie porównanie technologii PHP vs Nodej.js i dowiemy się, który z nich działa szybciej oraz dojdziemy do ciekawych wniosków. Serdecznie zapraszam</p>
Artykuł <a href="https://enterv.pl/2023/02/05/php-vs-node-js-krotki-test/">PHP vs Node.js – krótki test</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">Przygotowanie</h2>



<p>Do dzisiejszego porównania wykorzystamy PHP w wersji 8.2 oraz NodeJS w wersji 18.14.0 LTS. Użyjemy również Docker, aby ułatwić sobie konfigurowanie środowisk. Oczywiście wszystko starałem się trzymać w najbardziej defaultowej wersji jak tylko mogłem, więc nie uświadczymy tutaj żadnych dodatkowych konfiguracji, które mogłyby &#8222;podboostować&#8221; którąkolwiek technologię.</p>



<p>Dzięki lekcji, którą wyciągnąłem podczas tworzenia <a href="https://enterv.pl/2022/11/21/programowanie-php-vs-python-krotki-test/" target="_blank" rel="noopener" title="">poprzedniego porównania</a>, dowiedziałem się, że testy muszą być jeszcze prostsze i bardziej uniwersalne i oto doszedłem do wniosku, że   najlepiej będzie zainicjować następujące sprawdziany:</p>



<ol class="wp-block-list">
<li>Obliczenie 20! czyli <a href="https://pl.wikipedia.org/wiki/Silnia" target="_blank" rel="noopener nofollow" title="">silnię</a> z 20. Oczywiście rekurencją, aby było dodatkowe obciążenie.</li>



<li>Znaleźć największą liczbę z przedziału 1-100000 &#8211; generowanie tablicy oczywiście poza mierzeniem czasu.</li>



<li>Wygenerowanie losowego ciągu znaku o długości 100000 znaków i przekształcenie wszystkich liter na wielkie litery.</li>
</ol>



<p>Zadania może nie są aż nadto trudne, ale są wystarczające, aby ukazać konkretne czasy wykonania. Ważne też jest przy każdym teście, aby wyniki były po prostu przyzwoite &#8211; to nam powie czy daną technologię w ogóle brać za poważny wybór.</p>



<h2 class="wp-block-heading">Tworzenie kodu</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_-1024x683.jpg" alt="" class="wp-image-479" srcset="https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_-1024x683.jpg 1024w, https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_-300x200.jpg 300w, https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_-768x512.jpg 768w, https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_-1536x1024.jpg 1536w, https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_.jpg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Na szczęście nie musiałem spędzić wielu godzin nad tym wszystkim, a i samo wyszukanie potrzebnych informacji dla obu narzędzi było bardzo przyjemne i bardzo proste. Powiem, że na tym polu mamy ładny remis. Co ciekawe, najwięcej problemów miałem z Dockerem. To nie tak, że to było uwłaczające i mega trudne, po prostu zapomniałem jak go się nastawia 😅. Także mogę powiedzieć, że taki minimalny problem był z Dockerem, no ale to nie o nim miałem pisać 😉</p>



<h2 class="wp-block-heading">Wyniki</h2>



<p>Muszę uprzedzić, że wyniki są nawet ciekawe. Żadna z technologii nie jest słaba i stanowią nadal dla siebie konkurencję. Jak dla mnie oba narzędzia dały sobie świetne radę. Liczby mówią same za siebie:</p>







<h2 class="wp-block-heading">Podsumowanie</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://enterv.pl/wp-content/uploads/2022/11/19362653-1024x683.webp" alt="" class="wp-image-509" srcset="https://enterv.pl/wp-content/uploads/2022/11/19362653-1024x683.webp 1024w, https://enterv.pl/wp-content/uploads/2022/11/19362653-300x200.webp 300w, https://enterv.pl/wp-content/uploads/2022/11/19362653-768x512.webp 768w, https://enterv.pl/wp-content/uploads/2022/11/19362653-1536x1024.webp 1536w, https://enterv.pl/wp-content/uploads/2022/11/19362653-2048x1365.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Wyniki są bliskie siebie i wydawać się może że PHP jest 2x razy szybszy od Node.js, ale czy tak jest przy większych projektach? Nie wiem, bo te testy tego nie ukazują. To co wiem, to oba narzędzia są jednak wydajne i tylko różnice technologiczne powinny decydować o tym, które narzędzie wybierzemy 🙂</p>



<p>Wszystkie testy oraz konfiguracja Docker dostępne są na <a href="https://github.com/EnterVPL/php8.2vsnode.js.18.14" target="_blank" rel="noopener nofollow" title="">GitHub</a></p>Artykuł <a href="https://enterv.pl/2023/02/05/php-vs-node-js-krotki-test/">PHP vs Node.js – krótki test</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></content:encoded>
					
					<wfw:commentRss>https://enterv.pl/2023/02/05/php-vs-node-js-krotki-test/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>ChatGPT, a programowanie. Czy to dobry pomysł?</title>
		<link>https://enterv.pl/2023/01/17/chatgpt-a-programowanie-czy-to-dobry-pomysl/</link>
					<comments>https://enterv.pl/2023/01/17/chatgpt-a-programowanie-czy-to-dobry-pomysl/#comments</comments>
		
		<dc:creator><![CDATA[enterv]]></dc:creator>
		<pubDate>Tue, 17 Jan 2023 08:35:03 +0000</pubDate>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[automatyczne programowanie]]></category>
		<category><![CDATA[automatyzacja procesów]]></category>
		<category><![CDATA[chatbots]]></category>
		<category><![CDATA[chatgpt]]></category>
		<category><![CDATA[dobry pomysł]]></category>
		<category><![CDATA[edukacja informatyczna]]></category>
		<category><![CDATA[generowanie kodu]]></category>
		<category><![CDATA[innowacje w programowaniu]]></category>
		<category><![CDATA[kariera programisty]]></category>
		<category><![CDATA[machine learning]]></category>
		<category><![CDATA[model językowy]]></category>
		<category><![CDATA[narzedzie programistyczne]]></category>
		<category><![CDATA[nauka programowania]]></category>
		<category><![CDATA[openai]]></category>
		<category><![CDATA[potencjał ChatGPT w rozwoju kariery]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[programowanie z pomocą AI]]></category>
		<category><![CDATA[programowanie z wykorzystaniem sztucznej inteligencji]]></category>
		<category><![CDATA[przygotowanie]]></category>
		<category><![CDATA[przyspieszenie procesu tworzenia oprogramowania]]></category>
		<category><![CDATA[przyszłość pracy]]></category>
		<category><![CDATA[przyszłość programowania]]></category>
		<category><![CDATA[rozwiązania AI]]></category>
		<category><![CDATA[rozwój kariery]]></category>
		<category><![CDATA[samodzielne poprawianie kodu]]></category>
		<category><![CDATA[sztuczna inteligencja]]></category>
		<category><![CDATA[technologie AI]]></category>
		<category><![CDATA[technologie przyszłości]]></category>
		<category><![CDATA[umiejętności informatyczne]]></category>
		<category><![CDATA[wiedza]]></category>
		<category><![CDATA[wprowadzenie do AI]]></category>
		<category><![CDATA[wprowadzenie do ChatGPT]]></category>
		<category><![CDATA[wspomaganie programowania]]></category>
		<category><![CDATA[zastosowanie ChatGPT w programowaniu]]></category>
		<guid isPermaLink="false">https://enterv.pl/?p=641</guid>

					<description><![CDATA[<p>Cześć kochani, dzisiaj wtrącę moje dwa grosze jakże to hucznym temacie AI ChatGPT, który uznaje się za dosyć rewolucyjnym narzędziem. Jaka jest zatem prawda?</p>
Artykuł <a href="https://enterv.pl/2023/01/17/chatgpt-a-programowanie-czy-to-dobry-pomysl/">ChatGPT, a programowanie. Czy to dobry pomysł?</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">Pozorna prostota</h2>



<p>Wystarczy, wpisać tylko kilka słów, a AI zacznie nam generować kod, który na pierwszy rzut oka robi to dobrze. Jeśli założymy, że cały projekt zaczniemy od początku do końca na ChatGPT, to w większości przypadków powinno się obejść bez błędów.</p>



<p>Przykładowe polecenie: </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Napisz mi Encję Cat w języku TS. Powinna mieć kilka własności i metod:</p>



<pre class="wp-block-code"><code lang="typescript" class="language-typescript line-numbers">class Cat {
    name: string;
    age: number;
    color: string;
    private _weight: number;

    constructor(name: string, age: number, color: string, weight: number) {
        this.name = name;
        this.age = age;
        this.color = color;
        this._weight = weight;
    }

    get weight(): number {
        return this._weight;
    }

    set weight(value: number) {
        this._weight = value;
    }

    meow(): void {
        console.log("Meow!");
    }

    eat(food: string): void {
        console.log(`${this.name} is eating ${food}.`);
    }

    sleep(): void {
        console.log(`${this.name} is sleeping.`);
    }
}</code></pre>



<p></p>
</blockquote>



<p>i generalnie nie ma tutaj większej zawiłości, bo kod jest zrozumiały, ale z drugiej strony to ten sam kod można napisać prościej. Osoby, które się znają, od razu zobaczą, że własności można zadeklarować i przypisać za pomocą samego konstruktora, dzięki czemu odpada nam pisanie tego samego aż 3 razy.</p>



<h2 class="wp-block-heading">Poprawianie AI ChatGPT</h2>



<p>Na szczęście dosyć często kod z ChatGPT można łatwo poprawić kolejną prostą komendą.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p> Zadeklaruj własności za pomocą konstruktora: </p>



<pre class="wp-block-code"><code lang="typescript" class="language-typescript line-numbers">class Cat {
    constructor(
        public name: string,
        public age: number,
        public color: string,
        private _weight: number
    ) {}

    get weight(): number {
        return this._weight;
    }

    set weight(value: number) {
        this._weight = value;
    }

    meow(): void {
        console.log("Meow!");
    }

    eat(food: string): void {
        console.log(`${this.name} is eating ${food}.`);
    }

    sleep(): void {
        console.log(`${this.name} is sleeping.`);
    }
}
</code></pre>
</blockquote>



<p>W ten oto sposób dostajemy uproszczony kod. Zauważmy jednak, że wszystkie publiczne metody tak na prawdę nic nie robią poza wyświetleniem informacji. Zmieńmy to podając AI kolejne komendy. Zobaczmy najpierw czy się domyśli o co mi chodzi, jeśli nie zda egzaminu to podamy więcej konretów. </p>



<h2 class="wp-block-heading">Rozszerzanie kodu</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://enterv.pl/wp-content/uploads/2022/11/19362653-1024x683.webp" alt="app design image" class="wp-image-509" srcset="https://enterv.pl/wp-content/uploads/2022/11/19362653-1024x683.webp 1024w, https://enterv.pl/wp-content/uploads/2022/11/19362653-300x200.webp 300w, https://enterv.pl/wp-content/uploads/2022/11/19362653-768x512.webp 768w, https://enterv.pl/wp-content/uploads/2022/11/19362653-1536x1024.webp 1536w, https://enterv.pl/wp-content/uploads/2022/11/19362653-2048x1365.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Chciałbym, aby metody zamiast console.log robiły coś więcej. Zrób te metody bardziej funkcjonalne:</p>



<pre class="wp-block-code"><code lang="typescript" class="language-typescript line-numbers">class Cat {
    constructor(
        public name: string,
        public age: number,
        public color: string,
        private _weight: number
    ) {}

    get weight(): number {
        return this._weight;
    }

    set weight(value: number) {
        this._weight = value;
    }

    meow(): string {
        return `${this.name} says "Meow!"`;
    }

    eat(food: string): string {
        return `${this.name} is eating ${food}.`;
    }

    sleep(): string {
        return `${this.name} is sleeping.`;
    }
}

const fluffy = new Cat("Fluffy", 2, "white", 5);
console.log(fluffy.meow());
console.log(fluffy.eat("tuna"));
console.log(fluffy.sleep());</code></pre>
</blockquote>



<p>Zostawiam to waszej ocenie. Jak dla mnie AI dostało za mało konkretów i moim zdaniem metody nadal są za mało funkcjonalne. Jednak trzeba to przyznać, że jest zdeterminowane, bo faktycznie wywaliło console.log z metod za co jakiś punkt można mu przyznać pomimo tego, że miał to w poleceniu.</p>



<p>Dajmy mu coś teraz bardziej zrozumiałego</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Metoda meow powinna włączać dźwięk maiuczenia kota. Metoda eat powinna zwiększać sytość oraz wagę jeśli kot jest przekarmiany &#8211; należy wprowadzić jakiś system metabolizmu. Metoda sleep powinna regenerować energię kota:</p>



<pre class="wp-block-code"><code lang="typescript" class="language-typescript line-numbers">class Cat {
    private _hunger: number;
    private _energy: number;
    private _metabolism: number;

    constructor(
        public name: string,
        public age: number,
        public color: string,
        private _weight: number
    ) {
        this._hunger = 0;
        this._energy = 100;
        this._metabolism = 10;
    }

    get weight(): number {
        return this._weight;
    }

    set weight(value: number) {
        this._weight = value;
    }

    meow(): void {
        new Audio("cat-meow.mp3").play();
    }

    eat(food: string): void {
        this._hunger -= 10;
        if(this._hunger &lt; 0) {
            this._hunger = 0;
        }
        this._weight += this._metabolism;
        console.log(`${this.name} is eating ${food}. Hunger level: ${this._hunger}%. Weight: ${this._weight}kg`);
    }

    sleep(): void {
        this._energy += 10;
        if(this._energy &gt; 100) {
            this._energy = 100;
        }
        console.log(`${this.name} is sleeping. Energy level: ${this._energy}%`);
    }
}

const fluffy = new Cat("Fluffy", 2, "white", 5);
fluffy.meow();
fluffy.eat("tuna");
fluffy.sleep();</code></pre>



<p>This is an example of how you can make the methods more functional as you described. The <code>meow()</code> method now plays an audio file of a cat meowing. The <code>eat()</code> method now decreases the cat&#8217;s hunger level and increases its weight based on the cat&#8217;s metabolism rate. The <code>sleep()</code> method increases the cat&#8217;s energy level. You can also see that there are some private properties like <code>_hunger</code>, <code>_energy</code>, <code>_metabolism</code> and <code>_weight</code> which are updated in the methods and if needed have a limit.</p>



<p>Please note that the audio file and the path to it must exist and be accessible in the code in order for this code to work as expected.</p>
</blockquote>



<p></p>



<p>Jak dla mnie średnio, bo wracamy do tego, że znowu trzeba poprawić AI z tym kontruktorem, ale poza tym to myślę że dał radę pomimo tego, że wrócił z tymi console.log-ami.</p>



<h2 class="wp-block-heading">Poważne zadanie</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_-1024x683.jpg" alt="" class="wp-image-479" srcset="https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_-1024x683.jpg 1024w, https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_-300x200.jpg 300w, https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_-768x512.jpg 768w, https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_-1536x1024.jpg 1536w, https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_.jpg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Jako iż bardzo ważne jest skonfigurowanie środowiska potrzebnego do pracy, poproszę AI o to, aby wygenerowało mi konfigurację Dockera potrzebną do uruchomienia ww. kodu.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Wygeneruj konfigurację Docker dla nodejs tak, aby można było bez problemu uruchomić ww. kod:</p>



<p>Here is an example of a Dockerfile that can be used to run a Node.js application, including the code you provided:</p>



<pre title="Dockerfile" class="wp-block-code"><code lang="docker" class="language-docker line-numbers">FROM node:14-alpine

WORKDIR /usr/src/app

COPY package*.json ./
RUN npm install
COPY . .

CMD [ "node", "index.js" ]</code></pre>



<p>This Dockerfile uses the official Node.js Alpine image as the base image and sets the working directory to /usr/src/app. It then copies the package.json and package-lock.json files and runs npm install to install the dependencies. After that it copies all the files to the container and CMD instruction runs node index.js command, to start the application.</p>



<p>You will also need to have a file named index.js in the same directory as your Dockerfile that contains the code you want to run.</p>



<p>After that you can build your image using:</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">docker build -t my-node-app .</code></pre>



<p>And then start the container using:</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">docker run -p 3000:3000 my-node-app</code></pre>



<p>This will start a container with your Node.js application running on port 3000 and the container will be accesible on localhost:3000.</p>



<p>Please note that this is just an example and you might need to adjust the Dockerfile or the command depending on your specific needs and requirements.</p>
</blockquote>



<p>Widzę tutaj małe niedociągnięcie w Dockerfile, bo po co kopiować <code>package*.json</code>, a potem drugą komendą tak na prawdę wszystko, skoro można skopiować od razu wszystko i potem wykonać <code>npm install</code>? Z drugiej strony jak na nasz wygenerowany programik nie powinno się nic złego stać.</p>



<p>Drugą wadą jest to, że nasz kod ani trochę nie jest serwerowy, a tu nam karze go tak uruchamiać. Zatem nie domyślił się, że chodzi o CLI pomimo tego, że tak powinno wyjść z kontekstu. Zatem poproszę go o wygenerowanie drugiej konfiguracji. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Wygeneruj konfigurację Docker dla CLI nodejs</p>



<p>Here is an example of a Dockerfile that can be used to run a Node.js command-line application:</p>



<pre title="Dockerfile" class="wp-block-code"><code lang="docker" class="language-docker">FROM node:14-alpine

WORKDIR /usr/src/app

COPY package*.json ./
RUN npm install
COPY . .

ENTRYPOINT [ "npm", "start" ]</code></pre>



<p>This Dockerfile uses the official Node.js Alpine image as the base image and sets the working directory to /usr/src/app. It then copies the package.json and package-lock.json files and runs npm install to install the dependencies. After that it copies all the files to the container and ENTRYPOINT instruction runs npm start command, to start the command line application.</p>



<p>You will also need to have a file named package.json in the same directory as your Dockerfile that contains the command you want to run, for example:</p>



<pre class="wp-block-code"><code lang="json" class="language-json">"scripts": {
    "start": "node index.js --arg1 --arg2"
  },</code></pre>



<p>After that you can build your image using:</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">docker build -t my-node-cli-app .</code></pre>



<p>And then start the container using:</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">docker run -it my-node-cli-app --arg1 --arg2</code></pre>



<p>This will start a container with your Node.js command-line application running, and the arguments passed in the command line after run command will be passed to the npm start command</p>



<p>Please note that this is just an example and you might need to adjust the Dockerfile or the command depending on your specific needs and requirements.</p>
</blockquote>



<p>Teraz jest znacznie lepiej, bo mamy możliwość odpalania aplikacji za pomocą prostej dockerowej komendy. Oczywiście dla tego przykładu przesadą jest stosowanie argumentów, ponieważ żaden nie jest nam potrzebny.</p>



<p>Fajnie jednak by było, gdyśmy jednak nie musieli ciągle wpisywać tego długiego ciągu znaków za każdym razem, aby uruchamiać aplikację, na to już rozwiązanie mamy: poprosimy AI 😁</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Utwórz plik wsadowy zawierający docker run -it my-node-cli-app &#8211;arg1 &#8211;arg2, aby uprosić uruchamianie:</p>



<p>You can create a shell script file with the docker run command to simplify running your Node.js command-line application in a container. Here is an example of a shell script file named run-app.sh:</p>



<pre title="run-app.sh" class="wp-block-code"><code lang="bash" class="language-bash">#!/bin/bash
docker run -it my-node-cli-app --arg1 --arg2</code></pre>



<p>This script file can be placed in the same directory as your Dockerfile and can be executed by running ./run-app.sh in the terminal.</p>



<p>You can also make the script file executable by running</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">chmod +x run-app.sh</code></pre>



<p>and then you can run it directly with</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">./run-app.sh</code></pre>



<p>You can also pass parameters to the script file and then use them as arguments for the docker run command. For example, you can modify the script file to accept parameters and use them as arguments for the command</p>



<pre title="./run-app.sh" class="wp-block-code"><code lang="bash" class="language-bash">#!/bin/bash
docker run -it my-node-cli-app $1 $2</code></pre>



<p>and then you can run the script passing parameters</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">./run-app.sh --arg1 --arg2</code></pre>
</blockquote>



<p>ChatGPT dał nam ciekawy wybór, bo możemy zrobić plik sh z możliwością luźnego lub sztywnego parametryzowania. Jednak to co mnie zadziwiło to to że to wcześniej pisał o CMD, który jest Windowsowy, a plik wsadowy zrobił na Linux 😂</p>



<h2 class="wp-block-heading">Podsumowanie</h2>



<p>OpenAI stworzyło na prawdę bardzo pomocne narzędzie, które przydaje się w wielu dziedzinach. W tym artykule skupiliśmy się na programowaniu i krok po kroku pokazałem jak wygląda wytwarzanie bardzo prostego kodu za pomocą ChatGPT.</p>



<p>W mojej opinii osobom bez większej wiedzy specjalistycznej czasami będzie trudno odróżnić co za zabobony ten AI pisze, a dobre ku temu dowody dostarczyłem w tym artykule.</p>



<p>Uważam, że AI najlepiej precyzyjnie określać to co od niego oczekujemy i z jakich standardów ma korzystać. Gdy już swoje wiemy, to narzędzie może nam bardzo pomóc w wytwarzaniu oprogramowania, bo będziemy wiedzieć co jest do podmianki, co trzeba dopowiedzieć itd.</p>



<p>Dziękuję bardzo za uwagę, i kochani, widzimy się w kolejnym artykule 😃</p>Artykuł <a href="https://enterv.pl/2023/01/17/chatgpt-a-programowanie-czy-to-dobry-pomysl/">ChatGPT, a programowanie. Czy to dobry pomysł?</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></content:encoded>
					
					<wfw:commentRss>https://enterv.pl/2023/01/17/chatgpt-a-programowanie-czy-to-dobry-pomysl/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>TutJam #3 – wywiad ze zwycięzcą</title>
		<link>https://enterv.pl/2022/12/23/tutjam-3-wywiad-ze-zwyciezca/</link>
		
		<dc:creator><![CDATA[enterv]]></dc:creator>
		<pubDate>Fri, 23 Dec 2022 17:54:54 +0000</pubDate>
				<category><![CDATA[GameDev]]></category>
		<category><![CDATA[Pozostałe]]></category>
		<category><![CDATA[Wywiady]]></category>
		<category><![CDATA[damejam]]></category>
		<category><![CDATA[gamedev]]></category>
		<category><![CDATA[ice-fall]]></category>
		<category><![CDATA[tutjam]]></category>
		<category><![CDATA[tutjam 3]]></category>
		<category><![CDATA[unity]]></category>
		<category><![CDATA[wikite]]></category>
		<category><![CDATA[wywiad]]></category>
		<category><![CDATA[wywiad z wygranym]]></category>
		<category><![CDATA[wywiad ze zwycięzcą]]></category>
		<guid isPermaLink="false">https://enterv.pl/?p=632</guid>

					<description><![CDATA[<p>Cześć niedźwiadki puchate 🐻 Ostatnim razem pisałem o tym jak będzie oceniało jury, a dzisiaj przedstawię wam podwójnego zwycięzce TutJamu #3</p>
Artykuł <a href="https://enterv.pl/2022/12/23/tutjam-3-wywiad-ze-zwyciezca/">TutJam #3 – wywiad ze zwycięzcą</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">Wstęp</h2>



<p><strong><a href="https://wikite.itch.io/" target="_blank" rel="noopener nofollow" title="">Wikite</a></strong> jest młodym i jak widać utalentowanym twórcą gier. Na swoim profilu na <a href="https://wikite.itch.io/" target="_blank" rel="noopener nofollow" title="">itch.io</a> udostępnił nieodpłatnie swoje gry, które w większości da się zagrać przez przeglądarkę internetową. Natomiast na swoim <a href="https://www.tiktok.com/@_wikite_" target="_blank" rel="noopener nofollow" title="">TikToku</a>, na swój niecodzienny sposób, dzieli się postępami w gamedev&#8217;owej nauce. Swoją produkcją <strong><a href="https://wikite.itch.io/ice-fall" target="_blank" rel="noopener nofollow" title="">Ice-Fall</a></strong> na <strong><a href="https://itch.io/jam/tutjam-3" target="_blank" rel="noopener nofollow" title="">TutJamie</a></strong> dostał najwyższe noty od jury i zdobył serca publiczności, a moim zdaniem to nie lada wyczyn! 😄</p>



<p></p>



<figure class="wp-block-image size-large has-custom-border is-style-rounded"><img decoding="async" src="https://img.itch.zone/aW1hZ2UvMTgzOTQ3MS8xMDc5NTg1MC5wbmc=/original/JIPPFz.png" alt="Obrazek Ice-Fall z itch.io" class="has-border-color has-palette-color-3-border-color" style="border-width:2px;border-radius:46px"/></figure>



<h2 class="wp-block-heading"><a href="https://oshq.itch.io/" target="_blank" rel="noreferrer noopener"><strong></strong></a><strong><a href="https://wikite.itch.io/" target="_blank" rel="noopener nofollow" title="">Wikite</a></strong> opowiedz coś o sobie. Czym się zajmujesz? Co Cię interesuje?</h2>



<p>Mam 13 lat, bardzo lubię tworzyć gry, jak i w nie grać. Poza gamedevem interesuję się też <a href="https://pl.wikipedia.org/wiki/Kalistenika" target="_blank" rel="noopener nofollow" title="">kalisteniką</a></p>



<h2 class="wp-block-heading">Skąd pomysł na tę grę? Czy była inspirowana jakimś innym tytułem lub doświadczeniem?</h2>



<p>Kiedy 13 grudnia na lekcji EDB zobaczyłem jaki jest temat, to myślałem o tym jaką zrobić grę przez cały dzień. Później po rysowaniu losowych rzeczy, podsunął mi się właśnie ten pomysł, żeby zrobić <strong><a href="https://wikite.itch.io/ice-fall" target="_blank" rel="noopener nofollow" title="">Ice-Fall</a></strong>.</p>



<figure class="wp-block-image size-large has-custom-border is-style-rounded"><img decoding="async" src="https://img.itch.zone/aW1hZ2UvMTgzOTQ3MS8xMDc5NTMyMy5wbmc=/original/dqvrBB.png" alt="" class="has-border-color has-palette-color-4-border-color" style="border-width:2px;border-radius:46px"/></figure>



<h2 class="wp-block-heading">Ile czasu zajęło stworzenie gry i jak duży był zespół, który pracował nad nią?</h2>



<p>Moją grę tworzyłem praktycznie od początku Game Jama do samego końca. Tworzyłem ją sam, tylko miałem paru testerów.</p>



<h2 class="wp-block-heading">Co sprawiło, że ta gra została wybrana jako zwycięzca gamejamu? Czy było coś w szczególności, co zwróciło uwagę jurorów?</h2>



<p>Z tego co widziałem na <a href="https://youtu.be/fQNRjdRmf70?t=8565" target="_blank" rel="noopener nofollow" title="">live u PL Tutorsa</a> to to, że była wciągająca i miała przyjemną grafikę</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Gramy w WASZE GRY z TutJam #3! 🎮 | Tutorsowy Streamek #54" width="1290" height="726" src="https://www.youtube.com/embed/fQNRjdRmf70?start=8565&#038;feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div><figcaption class="wp-element-caption"><a href="https://youtu.be/fQNRjdRmf70?t=8565" target="_blank" rel="noopener nofollow" title="">https://youtu.be/fQNRjdRmf70?t=8565</a> </figcaption></figure>



<h2 class="wp-block-heading">Czy masz jakieś plany dotyczące rozwoju swojej gry po gamejamie?</h2>



<p>Raczej nie będę już rozwijał gry, chociaż jest szansa, że zrobię wersję na telefon, bo bardzo dużo osób o to prosi.</p>



<h2 class="wp-block-heading">Czy masz jakieś rady dla innych twórców gier, którzy chcieliby brać udział w podobnych wydarzeniach?</h2>



<p>To był mój pierwszy gamejam w życiu, więc za bardzo się nie znam, ale moją radą jest to, żeby nie myśleć nad grą zbyt dużo, bo w końcu wszystko się będzie nam mylić i nic z tego nie wyjdzie.</p>



<h2 class="wp-block-heading">Czy masz jakieś plany na przyszłość dotyczące tworzenia gier? Czy będziesz brać udział w kolejnych gamejamach?</h2>



<p>W planach mam jeszcze bardzo dużo nowych gier do stworzenia, a w kolejnych gamejamach na pewno będę uczestniczył.</p>



<figure class="wp-block-image size-large has-custom-border"><img decoding="async" src="https://img.itch.zone/aW1hZ2UvMTgzOTQ3MS8xMDc5NTMyNC5wbmc=/original/x5gJO8.png" alt="" class="has-border-color has-palette-color-4-border-color" style="border-width:2px;border-radius:39px"/></figure>



<h2 class="wp-block-heading">Czy masz jakieś ulubione gry lub gatunki gier, które lubisz grać lub które są dla ciebie inspiracją podczas tworzenia własnych gier?</h2>



<p>Moje ulubione gatunki gier, które są dla mnie inspiracją, to głównie Multiplayer i różne gry ekonomiczne</p>



<h2 class="wp-block-heading">Czy masz jakieś ulubione narzędzia lub technologie, które wykorzystujesz podczas tworzenia gier?</h2>



<p>Do tworzenia gier, najczęściej używam: Blendera, Gimpa, Audiacity i oczywiście Unity, a kod piszę w Visual Studio Code</p>



<h2 class="wp-block-heading">Czy masz jakieś rady dla młodych twórców gier, którzy chcieliby rozpocząć swoją przygodę z tworzeniem gier?</h2>



<p>Jeśli ktoś chce zacząć swoją przygodę z gamedevem, to według mnie najlepiej jest robić sobie różne projekty z poradników. Najlepiej jakby każdy projekt był inny, żeby nauczyć się jak najwięcej nowych rzeczy. Ja właśnie tak zaczynałem z tworzeniem gier</p>



<h2 class="wp-block-heading">Gdybyś mógł przenieść swoją grę do jakiegoś innego świata (np. fantasy, science fiction, itp.), to do jakiego świata chciałbyś ją przenieść i dlaczego? Co byś dodał lub zmienił, aby dostosować grę do tego nowego świata?</h2>



<p>Najchętniej przeniósłbym <strong><a href="https://wikite.itch.io/ice-fall" target="_blank" rel="noopener nofollow" title="">Ice-Fall</a></strong> do świata kreskówek. Wtedy, oprócz mikołajów mogłyby spadać różne ikoniczne postacie, takie jak np. Rick z &#8222;Rick and Morty&#8221;, lub Myszka Miki. Prezenty też by się zmieniały zależnie od spadających postaci. Myślę, że byłoby to bardzo ciekawe</p>



<h2 class="wp-block-heading">Czy jest coś co chciałbyś dodać?</h2>



<p>Tak, jedyne co mogę dodać to że za 3-4 tygodnie na moim <a href="https://wikite.itch.io/" target="_blank" rel="noopener nofollow" title="">itch.io</a> będzie nowa gra multiplayer 😃</p>



<h2 class="wp-block-heading">Na zakończenie</h2>



<p>Dziękuję <a href="https://wikite.itch.io/" target="_blank" rel="noopener nofollow" title="">Wikite</a> za wzięcie udziału w wywiadzie i na odpowiedzenie na pytania. Ja jako doświadczony programista, któremu coraz bliżej do 30 lat, widzę jaki masz wieli potencjał i jak już dużo potrafisz w tak młodym wieku i myślę, że może być tylko lepiej 😀 Na <a href="https://itch.io/jam/tutjam-3" target="_blank" rel="noopener nofollow" title="">TutJamie</a> byłeś bardzo mocnym konkurentem i to też niewątpliwie pokazuje ile jeszcze będziesz mieć do zaoferowania światu 😃</p>Artykuł <a href="https://enterv.pl/2022/12/23/tutjam-3-wywiad-ze-zwyciezca/">TutJam #3 – wywiad ze zwycięzcą</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>TutJam #3 &#8211; jak będzie oceniać jury? 😉</title>
		<link>https://enterv.pl/2022/12/15/tutjam-3-jak-bedzie-oceniac-jury-%f0%9f%98%89/</link>
		
		<dc:creator><![CDATA[enterv]]></dc:creator>
		<pubDate>Thu, 15 Dec 2022 17:49:31 +0000</pubDate>
				<category><![CDATA[GameDev]]></category>
		<category><![CDATA[Pozostałe]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[gamedev]]></category>
		<category><![CDATA[gamejam]]></category>
		<category><![CDATA[godot]]></category>
		<category><![CDATA[jury]]></category>
		<category><![CDATA[ocenianie gier]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[tutjam]]></category>
		<guid isPermaLink="false">https://enterv.pl/?p=613</guid>

					<description><![CDATA[<p>Cześć słodziaki. Przygotowałem dla jury kilka pytań odnośnie gier tworzonych na TutJam #3. Poznamy ich sposób oceniani oraz rady 😀</p>
Artykuł <a href="https://enterv.pl/2022/12/15/tutjam-3-jak-bedzie-oceniac-jury-%f0%9f%98%89/">TutJam #3 – jak będzie oceniać jury? 😉</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></description>
										<content:encoded><![CDATA[<p>Pytania dla jury zawarłem w anonimowej ankiecie. Zostały one zadane tak, aby oceniający musieli odpowiadać otwarcie i zgodnie z tym co sami uważają. Nie przedłużając oto pierwsze z nich</p>



<h2 class="wp-block-heading">Jakiego rodzaju gier spodziewasz się oceniać? </h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="748" src="https://enterv.pl/wp-content/uploads/2022/12/h0nn_s4ay_211008-1024x748.webp" alt="" class="wp-image-622" srcset="https://enterv.pl/wp-content/uploads/2022/12/h0nn_s4ay_211008-1024x748.webp 1024w, https://enterv.pl/wp-content/uploads/2022/12/h0nn_s4ay_211008-300x219.webp 300w, https://enterv.pl/wp-content/uploads/2022/12/h0nn_s4ay_211008-768x561.webp 768w, https://enterv.pl/wp-content/uploads/2022/12/h0nn_s4ay_211008.webp 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>A oto odpowiedzi:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Platformówki, Jednoosobowe</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Myślę, że będzie podobnie, jak we wcześniejszych TutJamach. Różny poziom jeśli chodzi o grafikę, efekty dźwiękowe i samą rozgrywkę. Jedno jest pewne &#8211; będą kolce! 🤣</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Uważam iż będą to gry wyśmienicie zrobione, które będą dawać pełno frajdy i radości. Liczę też oczywiście na kolce 🙂</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Poprzednie Tutjamy pokazały, że uczestnicy są bardzo kreatywni w interpretacji tematu. Pod tym względem można się spodziewać wszystkiego, chociaż liczę, że będzie dużo kolców 😉 Jeżeli chodzi o samo wykonanie to zapewne zobaczymy zarówno gry 2D oraz 3D. Zakładam, że będą to w większości gry platformowe, chociaż może znajdzie się też coś z widokiem z pierwszej osoby.</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Przyjemnych, pomysłowych, niedopracowanych</p>
</blockquote>



<p>Jak dla mnie większość z jury chce po prostu kolców 😆</p>



<h2 class="wp-block-heading">Jakiego rodzaju gry uwielbiasz grać? Jakie to gatunki? Co sprawa, że tak je lubisz?</h2>



<p>Tak wiem, że to wiele pytań, ale zgrupowałem je, głównie z tego powodu, że tyczą się tego. Dzięki temu odpowiedzi są bardziej szczegółowe 😉. Poznajmy odpowiedzi: </p>



<blockquote class="wp-block-quote is-style-default is-layout-flow wp-block-quote-is-layout-flow">
<p>Pierwszoosobowa, o budowaniu. Trzeba mocno myśleć przy budowie, a potem rozbudowie</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Lubię różne gry &#8211; Strategie takie, jak 0A.D., czy AoE. Oczywiście Minecraft i gry sandboxowe, w których mogę niszczyć! 😉. Uwielbiam klimaty horroru i postapo, co niektórzy już pewnie zdążyli zauważyć. A prócz tego uwielbiam gry rytmiczne, a w osu! potrafię zagrać nawet kilka tysięcy razy w ciągu miesiąca i mam w tej grze na chwilę obecną spędzony czas: 9 dni 15 godzin i 48 minut (który nalicza się tylko, gdy klikam)</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Różne, byle fajne</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Dosłownie niemal wszystkie. Ja ogólnie uwielbiam gry i mam ich sporą kolekcję, ale jeśli już mam coś wybrać to są to strategie, hack&amp;slashe, rpg drużynowe, rpg akcji oraz wszelkie sandbox&#8217;y, gdzie można tworzyć i budować co się chce. Do tego city buildery, zarządzanie koloniami, także strzelanki, różne symulac&#8230;. Może skończmy na tym, że dosłownie niemal wszystkie</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Bardzo lubię gry strategiczne, ekonomiczne, twardo stąpające po ziemi bez przesadnego fantasy. Gry typu Frostpunk, Rimworld, Football Manager, czy Battlebrothers. Lubię je z tego powodu, że potrafią bardzo mocno zaangażować i wciągnąć na wiele godzin plus nie są ograniczone fabułą ani jednym głównym celem jaki narzuca nam gra &#8211; wygrana następuje gdy ty tak stwierdzisz, a nie sama gra powie, że już ją przeszedłeś. Ta otwarta struktura sprawia, że można podchodzić do tych gier wielokrotnie i za każdym razem odkryjesz coś nowego.</p>
</blockquote>



<p>Niesamowita mieszanka, ale myślę że temu uczestnikom będzie dużo łatwiej trafić w cokolwiek, a i może kogoś powyższe odpowiedzi uspokoją? 😉</p>



<h2 class="wp-block-heading">Które aspekty gier i dlaczego są dla Ciebie najważniejsze?</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Budowanie, dużo budowania i myślenia co budować</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>W grach prócz niszczenia wszystkiego na swojej drodze cenie sobie to jak gra potrafi wciągnąć. Fabuła, ścieżka dźwiękowa i klimat, to chyba najważniejsze rzeczy i na nie też zawsze zwracam uwagę. grafika też jest ważna, ale gdy gra wybija się właśnie grafiką, to potrafię stać w jednym miejscu myśląc sobie &#8222;podoba mi się ten głaz, to na prawdę fajny głaz&#8221; &#8211; takie zboczenie grafików 😉</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Lubię gry z emocjonującą fabułą, ładną grafiką i dobrą muzyką. Takie gry często mnie wciągają, bo można nieźle wczuć się w świat gry i postacie którymi gramy. Również ciężej jest się rozstać z taką grą, no ale cóż.</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>To bardzo zależy od konkretnego gatunku, ale bardzo cenię sobie możliwości rozwiązywania problemów na wiele sposobów, dbanie o drobne, nawet gameplay&#8217;owo nieistotne, szczegóły, które pozwalają bardziej zagłębić się w świat gry. Lubię gdy nie ma sztucznych ograniczeń i można realizować swoje szalone pomysły.</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Pomysł &#8211; zdecydowanie pomysł. Sama jakość wykonania oczywiście też jest istotna ale nic nie przebije &#8222;pomysłowego pomysłu&#8221; który wyróżnia się spośród pozostałych gier. To sprawia, że od razu dostrzegasz taką grę i jesteś zaintrygowany tym co ona może oferować bo nie jesteś pewien czego się spodziewać.</p>
</blockquote>



<p>Bardzo ciekawa różnorodność, a jeśli jesteś uczestnikiem to daj znać w co trafiłeś! 😉</p>



<h2 class="wp-block-heading">Jak się spodziewasz: ile frajdy sprawi ci ocenianie gier? Dlaczego tak uważasz?</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://enterv.pl/wp-content/uploads/2022/12/happyforplaying-1024x683.webp" alt="" class="wp-image-623" srcset="https://enterv.pl/wp-content/uploads/2022/12/happyforplaying-1024x683.webp 1024w, https://enterv.pl/wp-content/uploads/2022/12/happyforplaying-300x200.webp 300w, https://enterv.pl/wp-content/uploads/2022/12/happyforplaying-768x512.webp 768w, https://enterv.pl/wp-content/uploads/2022/12/happyforplaying.webp 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Kolejny złożony punkt, ale trzeba jednak wiedzieć, że poza obowiązkiem też liczy się zabawa, którą uzyska się z grania 😁 Jurorzy też co nie co o tym wiedzą:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Jeśli gra będzie zachęcać do włączenia to da dużo frajdy</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Na pewno będzie fajnie móc ocenić gry stworzone przez taką społeczność. Uważam tak, bo na pewno będzie fajnie móc ocenić gry stworzone przez taką społeczność. A tak na poważnie, to będę na prawdę ucieszony, gdy zagram w coś, co się wybija świetnym pomysłem (tak zrobił np. Superhot, który też jest grą GameJamową)</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Myślę że będzie mega dużo frajdy</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Pierwszy raz będę oceniał oficjalnie gry, więc będę mógł się wreszcie wyżyć… to znaczy pokazać twórcom, co zrobili dobrze, a co jest do poprawy. Dla mnie taki wkład edukacyjny jest bardzo istotny. Dodatkowo jak będą kolce, to sama świadomość, że Tutors się wkurza będzie zabawą samą w sobie.</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Dużo</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Uważam tak, ponieważ w poprzednich edycjach jamu bawiłem się bardzo dobrze, więc myślę, że tym razem będzie podobnie 🙂</p>
</blockquote>



<p>Zatem każdy jest pozytywnie nastawiony, co jest mega dobre. Myślę, że jak gry na prawdę ucieszą głosujących to tylko to wpłynie dobrze na ocenę 😄</p>



<h2 class="wp-block-heading">Jeśli trafi się bardzo trudna do przejścia gra, to jak to wpłynie na ocenianie?</h2>



<p>Zobaczmy czy to się popłaca:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Nie powinno to wpłynąć na efekt końcowy (kolce mogą być)</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Jeśli gra będzie nie do przejścia, to pewnie jej nie przejdę. Wiadomo, że takie podejście do tworzenia może negatywnie odbić się na punktacji</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Jak będą kolce to git, jak nie to marnie to widzę.</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Są dwie opcje: albo gra ma wysoki i przemyślany stopień trudności, która wymaga nauczenia się i dobrego wykorzystania jej mechanik to jest to olbrzymi plus albo ta gra ma nawalone wszędzie kolce i głupie utrudniacze, a największa trudność wynika z tego, że błąd powoduje ponowne przejście gry albo jej sporej części, to takiej grze świetlanej przyszłości nie wróżę.</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Zależy jakiego rodzaju będzie to trudność. Jeżeli trudność będzie polegała na przyjemnym rozkminianiu i bazowaniu na wcześniej wytłumaczonych mechanikach to jestem jak najbardziej na tak i z chęcią będę ogrywał tak długo aż uda mi się przejść. Jednak jeżeli to będzie trudne z tego powodu że gra jest po prostu słabo przemyślana lub zbalansowana to przyznam, że mogę odpaść zanim dotrę do końca.</p>
</blockquote>



<p>Rozumiem to tak, że gra może być trudna, ale nie powinno się przesadzać. Może warto, aby dać jakiemuś koledze do ogrania swoją grę, aby móc lepiej dopasować bilans? Hmm? 😉 </p>



<h2 class="wp-block-heading">Jakie rady chcesz dać uczestnikom TutJamu?</h2>



<p>To jest pytanie, które tak w zasadzie nie powinno się tu znaleźć, ale.. dobrze wiemy, że to nie jest konkurs na światową skalę, a bardziej event, dzięki któremu można się sporo nauczyć jak i otworzyć przed sobą nowe perspektywy. Oto rady od jury płynące prosto z ich serc:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Zróbcie grę, starajcie się zrobić ją jak najlepiej umiecie</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Nie śpiesz się, tylko rób wszystko #naspokojnie. Z doświadczenia wiem, że gdy chce się zacząć tworzyć od razu po podaniu tematu i bez przemyślenia wszystkiego, to mogą wyniknąć z tego problemy. Jeśli pracujesz w większej grupie ciężko będzie dojść do jednogłośnie dobrego pomysłu &#8211; trzeba iść na kompromis. Nie próbuj robić nie wiadomo jakiej gry, tylko zrób coś prostszego, ale dokończ to. Jeśli masz już jakiś fajny pomysł, to wywal z niego połowę albo i więcej, żebyś na pewno go skończył, bo łatwiej jest coś potem dodać, niż wywalić niedokończone mechaniki zaraz przed zakończeniem jamu. A! I jeszcze jedno. Gry fajnie jest kończyć, więc oszacuj na początku ile masz czasu i ile możesz w tym czasie zrobić.</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Kolce.</p>
</blockquote>



<p>No poza radą z kolcami &#8211; wszystko na umiar 🤣</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>To game jam. Tutaj nie chodzi o to, żeby zrobić kolejnego Wiedźmina. Tutaj chodzi o naukę i dobrą zabawę. Po prostu wykorzystajcie to co umiecie w ciekawy sposób. Najważniejszy jest pomysł. A od niego ważniejsza dobra zabawa, której Wam życzę!</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Pomysł jest mega istotny! Czasem warto poświecić parę pierwszych godzin na przemyślenie pomysłu i zapisanie go niż rzucanie się od razu do pracy nad projektem, którego sam nie jesteś pewien. Bardzo ważne jest to aby twoja gra miała przynajmniej jedną cechę która odróżni ją od pozostałych.</p>
</blockquote>



<h2 class="wp-block-heading">Czy jako jury chcesz coś jeszcze dodać?</h2>



<p>Z tym pytaniem wyszło akurat tak, że każdy życzy <strong>powodzenia</strong>, zatem przekazuję 😄</p>



<h2 class="wp-block-heading">Podsumowanie</h2>



<p>Poznaliśmy zdanie jury nt. tworzonych gier oraz to czego oczekują, a ja liczę, że uczestnikom jamu pomogą te odpowiedzi.</p>



<p>Życzę miłej zabawy i do następnego 😀</p>Artykuł <a href="https://enterv.pl/2022/12/15/tutjam-3-jak-bedzie-oceniac-jury-%f0%9f%98%89/">TutJam #3 – jak będzie oceniać jury? 😉</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>TutJam #3 &#8211; Wywiad z PL Tutors</title>
		<link>https://enterv.pl/2022/12/08/tutjam-3-wywiad-z-pl-tutors/</link>
					<comments>https://enterv.pl/2022/12/08/tutjam-3-wywiad-z-pl-tutors/#comments</comments>
		
		<dc:creator><![CDATA[enterv]]></dc:creator>
		<pubDate>Thu, 08 Dec 2022 19:51:09 +0000</pubDate>
				<category><![CDATA[GameDev]]></category>
		<category><![CDATA[Pozostałe]]></category>
		<category><![CDATA[Wywiady]]></category>
		<category><![CDATA[blender]]></category>
		<category><![CDATA[gamedev]]></category>
		<category><![CDATA[gamejam]]></category>
		<category><![CDATA[godot]]></category>
		<category><![CDATA[grafika]]></category>
		<category><![CDATA[grafika 2d]]></category>
		<category><![CDATA[grafika 3d]]></category>
		<category><![CDATA[pl tutors]]></category>
		<category><![CDATA[tutjam]]></category>
		<category><![CDATA[tutjam 3]]></category>
		<category><![CDATA[tutjam3]]></category>
		<category><![CDATA[unity]]></category>
		<category><![CDATA[unreal]]></category>
		<category><![CDATA[wywiad]]></category>
		<category><![CDATA[wywiad z pl tutors]]></category>
		<category><![CDATA[wywiad z tutorsem]]></category>
		<guid isPermaLink="false">https://enterv.pl/?p=513</guid>

					<description><![CDATA[<p>Dzień dobry moi mili 😀 W niedzielę 04.12.2022 roku na swoim Live PL Tutors ogłosił kolejny GameJam, a dokładnie trzecią edycję, znanego już u jego fanów, TutJamu. Z tej okazji poprosiłem go o udzielenie odpowiedzi na kilka pytań.</p>
Artykuł <a href="https://enterv.pl/2022/12/08/tutjam-3-wywiad-z-pl-tutors/">TutJam #3 – Wywiad z PL Tutors</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></description>
										<content:encoded><![CDATA[<p>Dzień dobry moi mili 😀</p>



<p>W niedzielę 04.12.2022 roku na swoim Live PL Tutors ogłosił kolejny GameJam, a dokładnie trzecią edycję, znanego już u jego fanów, <a href="https://itch.io/jam/tutjam-3" target="_blank" rel="noopener nofollow" title="">TutJamu</a>. Z tej okazji poprosiłem go o udzielenie odpowiedzi na kilka pytań.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://enterv.pl/wp-content/uploads/2022/12/gamejaminterview-1024x1024.webp" alt="" class="wp-image-523" srcset="https://enterv.pl/wp-content/uploads/2022/12/gamejaminterview.webp 1024w, https://enterv.pl/wp-content/uploads/2022/12/gamejaminterview-300x300.webp 300w, https://enterv.pl/wp-content/uploads/2022/12/gamejaminterview-150x150.webp 150w, https://enterv.pl/wp-content/uploads/2022/12/gamejaminterview-768x768.webp 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Cały wywiad jest w formie podcastu, który można również pobrać lub odsłuchać online:</p>



<iframe loading="lazy" width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1398845509&#038;color=%2313140b&#038;auto_play=false&#038;hide_related=false&#038;show_comments=true&#038;show_user=true&#038;show_reposts=false&#038;show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/ukasz-b-484873708" title="enterv.pl" target="_blank" style="color: #cccccc; text-decoration: none;" rel="noopener">enterv.pl</a> · <a href="https://soundcloud.com/ukasz-b-484873708/tutjam3-wywiad-z-pl-tutors" title="TutJam3 Wywiad Z PL Tutors" target="_blank" style="color: #cccccc; text-decoration: none;" rel="noopener">TutJam3 Wywiad Z PL Tutors</a></div>



<p>a poniżej znajduje się transkrypcja, gdyby ktoś jednak wolił czytać 😀</p>



<div data-wp-interactive="core/file" class="wp-block-file alignfull"><object data-wp-bind--hidden="!state.hasPdfPreview" hidden class="wp-block-file__embed" data="https://enterv.pl/wp-content/uploads/2022/12/TutJam3_Wywiad_z_PL_Tutors.pdf" type="application/pdf" style="width:100%;height:600px" aria-label="Osadzone z TutJam3_Wywiad_z_PL_Tutors."></object><a id="wp-block-file--media-2638fcd7-9f41-4c95-8908-a20a0e1cb7af" href="https://enterv.pl/wp-content/uploads/2022/12/TutJam3_Wywiad_z_PL_Tutors.pdf">TutJam3_Wywiad_z_PL_Tutors</a><a href="https://enterv.pl/wp-content/uploads/2022/12/TutJam3_Wywiad_z_PL_Tutors.pdf" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-2638fcd7-9f41-4c95-8908-a20a0e1cb7af">Pobierz</a></div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://enterv.pl/wp-content/uploads/2022/12/mobs-1024x1024.webp" alt="" class="wp-image-526" srcset="https://enterv.pl/wp-content/uploads/2022/12/mobs.webp 1024w, https://enterv.pl/wp-content/uploads/2022/12/mobs-300x300.webp 300w, https://enterv.pl/wp-content/uploads/2022/12/mobs-150x150.webp 150w, https://enterv.pl/wp-content/uploads/2022/12/mobs-768x768.webp 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Podziękowania</h2>



<p>Bardzo pragnę podziękować PL Tutorsowi za udzielenie odpowiedzi. Dałeś mi sporo roboty przy tym wywiadzie i mam nadzieję, że to zaowocuje. </p>



<p>Również dziękuję wszystkim, którzy podesłali pytania, a szczególnie Świeczce Kokosowej, której pytania stanowią drugi rdzeń całego wywiadu, który bardzo i to bardzo rozszerzył ten wywiad.</p>Artykuł <a href="https://enterv.pl/2022/12/08/tutjam-3-wywiad-z-pl-tutors/">TutJam #3 – Wywiad z PL Tutors</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></content:encoded>
					
					<wfw:commentRss>https://enterv.pl/2022/12/08/tutjam-3-wywiad-z-pl-tutors/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Jak planować i jak utworzyć dobry projekt?</title>
		<link>https://enterv.pl/2022/11/29/gamedev-jak-planowac-i-jak-utworzyc-dobry-projekt/</link>
					<comments>https://enterv.pl/2022/11/29/gamedev-jak-planowac-i-jak-utworzyc-dobry-projekt/#comments</comments>
		
		<dc:creator><![CDATA[enterv]]></dc:creator>
		<pubDate>Tue, 29 Nov 2022 18:48:47 +0000</pubDate>
				<category><![CDATA[GameDev]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[gamedev]]></category>
		<category><![CDATA[jak utworzyć dobry projekt]]></category>
		<category><![CDATA[planowanie]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[projekt]]></category>
		<guid isPermaLink="false">https://enterv.pl/?p=503</guid>

					<description><![CDATA[<p>Niezależnie od tego czy chcesz stworzyć dobry program czy też dobre gry to najlepiej, na takie duże i średnie rzeczy utworzyć projekt. Więc na co czekamy?</p>
Artykuł <a href="https://enterv.pl/2022/11/29/gamedev-jak-planowac-i-jak-utworzyc-dobry-projekt/">Jak planować i jak utworzyć dobry projekt?</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">Wstęp</h2>



<p>Cześć cukierki wy moje słodkie 🍬 Poznajmy dzisiaj się z projektowaniem i z planowaniem bliżej 🫂</p>



<p>Niezależnie od tego czy chcesz stworzyć dobry program czy też dobrą grę, czy to będzie samochód czy łódź czy samolot, a może&#8230;. to najlepiej, na takie duże i średnie rzeczy utworzyć projekt, plan działania i zebrać zespół. Więc na co czekamy? Ruszajmy z tematem! 😀</p>



<p>&#8230; no tylko tak właśnie ja sam nie wiem co do końca co wyróżnia dobry projekt i nie zrozumcie mnie źle. Wiele razy co musiałem zaprojektować i stworzyć. Na swoim koncie mam utworzonych kilka gier i parę technicznych rozwiązań. Po mimo tego znam osoby, które dużo lepiej ode mnie potrafią coś zaplanować i tym bardziej pokierować zespołem.</p>



<p>Zatem ten artykuł nie będzie poradnikiem i proszę nie traktować to co chcę przekazać jako najwyższej prawdy 😅 Teraz możemy polecieć z tematem 😁</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://enterv.pl/wp-content/uploads/2022/11/6272-1024x1024.jpg" alt="" class="wp-image-506" srcset="https://enterv.pl/wp-content/uploads/2022/11/6272-1024x1024.jpg 1024w, https://enterv.pl/wp-content/uploads/2022/11/6272-300x300.jpg 300w, https://enterv.pl/wp-content/uploads/2022/11/6272-150x150.jpg 150w, https://enterv.pl/wp-content/uploads/2022/11/6272-768x768.jpg 768w, https://enterv.pl/wp-content/uploads/2022/11/6272.jpg 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Początki</h2>



<p>, które zawsze początkującym przysparzają wiele problemów, ajajaj, jak ja dobrze to rozumiem. Bąbelki wy moje, nic na siłę, no chyba że zaparcia, ale to taki wyjątek od reguły. Ja przeważnie zaczynam od wstępu (przykład powyżej), a potem jakoś leci. Jeśli natomiast miałbym brać się za stworzenie gry to bym sobie próbował najpierw ją sobie wyobrazić. Ci co mnie znają, wiedzą że lubię tworzyć rzeczy nieszablonowe i taki jest już mój urok, a Ci co nie znają mnie to powiem, że pomysły czerpię ze skojarzeń i z tego na co obecnie patrzę. Czyli dzisiaj bym miał zaczynać to wymyśliłbym grę o kremach nawilżających. Generalnie mało to mówi, no bo tak jest, bo jeszcze nic nie wymyśliłem. Popatrzyłem na krem i po prostu o nim napisałem.</p>



<p>Ok ok.. mamy kremik kremaśny +10 do nawilżenia skóry. Co taka gra o kremach może zaoferować? No to już wszystko zależy. A co wy na to, aby kremy były tylko elementem gry? &#8222;No ale co panie kocie tutaj kombinujesz? Gra miała być o kremach!&#8221; &#8211; a no nie mam pomysłu jak można grać kremem, ale wiem jak można go wykorzystać &#8211; można się nim posmarować! 😅&#8230; mało odkrywcze 😆</p>



<p>Mamy już krem jako element gry &#8211; no już coś więcej niż nic. Wiemy że można nim się smarować &#8211; mało odkrywcze, ale zróbmy już na tym bizne&#8230;. BIZNES! W tym momencie pojawił mi pomysł, a nawet kilka! Gra w której wcielasz się biznesmena prowadzącego płatną klinikę, do której zatrudniasz lekarzy, a oni <s>sprzedają</s> wypisują kremy na każdą chorobę. Ból pleców? &#8211; Myk maść! Ból zęba? &#8211; myk żel! Ból d&#8230;olnej nogi? &#8211; Myk! Kaszel, grypa albo urwany palec? &#8211; Myk spray.. No wicie &#8211; krem nie musi być jedynym przedmiotem 😉</p>



<p>Oto nasza podstawa i mamy już początek pomysłu na grę. Oczywiście to za mało, aby zacząć, więc trzeba zrobić</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://enterv.pl/wp-content/uploads/2022/11/19362653-1024x683.webp" alt="" class="wp-image-509" srcset="https://enterv.pl/wp-content/uploads/2022/11/19362653-1024x683.webp 1024w, https://enterv.pl/wp-content/uploads/2022/11/19362653-300x200.webp 300w, https://enterv.pl/wp-content/uploads/2022/11/19362653-768x512.webp 768w, https://enterv.pl/wp-content/uploads/2022/11/19362653-1536x1024.webp 1536w, https://enterv.pl/wp-content/uploads/2022/11/19362653-2048x1365.webp 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Rozwinięcie</h2>



<p>Tutaj już z górki. Można sobie opisać jak mają wyglądać poszczególne elementy gry, jak chcemy, aby ona działała czy też. Puśćmy wodzę wyobraźni. Najlepiej wypisać wszystko, najpierw zacząć od rzeczy ogólnych i zostawiać sobie pole do kolejnych rozwinięć &#8211; czemu? &#8211; bo w ten sposób możesz coś potem &#8222;dowymyślić&#8221; i dodać nową treść do gry (albo dlc..). </p>



<p>Ja zacząłbym od tego jakich lekarzy możemy zatrudniać, jakieś staty czy coś. Zrobiłbym listę chorób, na które ludzie mogą chorować i listę leków którymi można leczyć. Pasowałoby też wymyślić to, jakie choroby dani lekarze umieją leczyć i na tej podstawie zrobić jakiś zarys rozgrywki.</p>



<p>Ważne, aby pomysł dało się zamienić na projekt i zacząć planować działania. Polecam też na takim etapie poza Excela i Worda użyć narzędzi takich jak np. Jira, czy Trello albo innych wspomagający proces projektowania i planowania. Tego jest cała masa na internecie i na pewno znajdziecie pod siebie coś odpowiedniego.</p>



<h2 class="wp-block-heading">Szukanie pomocy</h2>



<p>Dobrze jest, aby z dobrym projektem nie zostać samemu, w grupie zawsze się coś więcej zrobi. Dzisiaj wiem, gdy jak szukam kogoś do pomocy to potrzebuję też przedstawić pomysł i to co od danej osoby oczekuję. Ja szukałbym do mojej gry grafika, no ale nie byle pierwszego lepszego tylko takiego co ogarnia temat, co wie, że jak mu przestawię to co wymyśliłem np. jak ma wyglądać opakowanie żelu na kaszel to ten grafik to zrozumie, zamodeluje i pomoże to dodać do gry, aby i w grze wszystko dobrze wyglądało. </p>



<p>Oczywiście im większa gra tym więcej osób pasuje do niej zaangażować: artystów, &#8222;dźwiękowców&#8221;, muzyków, programistów, testerów, designerów&#8230; &#8211; każdemu z nich pasuje jasno powiedzieć czego od nich się oczekuje, co mają wytworzyć i jaki ma być tego efekt końcowy. Np.<br> &#8211; Hej Czarek, zrobisz mi kod na to, abym mógł zatrudniać w mojej grze lekarzy? Mam już listę tego na co mi oni i co będą robić.<br> &#8211; No cześć Łukasz, jasne, tylko powiedz jak to będzie duże?<br> &#8211; W sumie to taki lekarz ma mieć&#8230;<br>i taka rozmowa leci dalej i idzie dobrze, bo jak się ktoś coś dopyta o szczegóły to ty je masz albo na podstawie istniejących już danych łatwo będzie je ustalić i je podasz</p>



<h2 class="wp-block-heading">Podsumowanie</h2>



<p>Liczę na to, że jakkolwiek pomogłem. Wiem, że przedstawione przeze mnie sposoby i może nie są idealne, ale może skłonią do pogłębienia tak istotnego tematu, co w skrócie mógłbym uznać za to, że zachęciłem do nauki 😄</p>



<p></p>Artykuł <a href="https://enterv.pl/2022/11/29/gamedev-jak-planowac-i-jak-utworzyc-dobry-projekt/">Jak planować i jak utworzyć dobry projekt?</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></content:encoded>
					
					<wfw:commentRss>https://enterv.pl/2022/11/29/gamedev-jak-planowac-i-jak-utworzyc-dobry-projekt/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>PHP vs Python &#8211; krótki test</title>
		<link>https://enterv.pl/2022/11/21/programowanie-php-vs-python-krotki-test/</link>
					<comments>https://enterv.pl/2022/11/21/programowanie-php-vs-python-krotki-test/#comments</comments>
		
		<dc:creator><![CDATA[enterv]]></dc:creator>
		<pubDate>Mon, 21 Nov 2022 22:05:47 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php vs python]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[test prędkości]]></category>
		<guid isPermaLink="false">https://enterv.pl/?p=474</guid>

					<description><![CDATA[<p>Cześć moje słonie kochane 🐘 i węże tuląco-jadowite 🐍. W tym wpisie poznacie pewne różnice pomiędzy PHP, a Python oraz poznacie, co jest tak na prawdę szybsze</p>
Artykuł <a href="https://enterv.pl/2022/11/21/programowanie-php-vs-python-krotki-test/">PHP vs Python – krótki test</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">Wstęp</h2>



<p>Cześć moje słonie kochane 🐘 i węże tuląco-jadowite 🐍. Nadszedł ten wiekopomny moment <s>(do którego mnie zmusiliscie)</s> do którego zostałem bardzo zachęcony, w którym napiszę o tym co jest lepsze: PHP czy Python?</p>



<p>Już na wstępie powiem, że żadne w powyższych, <strong>bo prawdziwy programista powinien umieć kontrolować wszystkimi napięciami, które powstają w komputerze tak, aby tym pisać m.in kod binarny, ale i też sterować każdym podzespołem. Wszystko inne to języki wyższych poziomów</strong> &#8211; tego pogrubionego fragmentu jak to coś nie brać na poważnie 😆</p>



<p>Więc&#8230; dzisiaj pomimo tego, że coś tutaj ukażę to niekoniecznie będzie to świadczyć o tym, który z tych języków będzie lepszy. Języki programowania są tylko różnymi narzędziami i bardzo łatwo je porównać do śrubokrętów, które powstały do konkretnych typów wkrętów (na internecie wpisać &#8222;typy śrubokrętów&#8221; to świadomość wskoczy na wyższy lvl) albo do różnych typów klejów, bo są takie do kartek, a inne są do tapet (też różne rodzaje), a jeszcze inne kleje są do drewna itd. itd&#8230; No tak samo są różne naczynia.. dobra chyba nie muszę dalej porównywać czegoś nierealnego z realnymi przedmiotami 🤣</p>



<h2 class="wp-block-heading">Przygotowanie</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_-1024x683.jpg" alt="" class="wp-image-479" srcset="https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_-1024x683.jpg 1024w, https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_-300x200.jpg 300w, https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_-768x512.jpg 768w, https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_-1536x1024.jpg 1536w, https://enterv.pl/wp-content/uploads/2022/11/vecteezy_graphic-designer-learning-program-software-painting-on-computer_.jpg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Aby cokolwiek móc przetestować, należy wymyślić jak coś przetestować i takie punktowe cusie, np. lista rzeczy do przetestowania, ma nam też coś powiedzieć i to nie jest wcale takie proste, zatem uznałem, że nie będę robić wyrafinowanych testów lecz przetestuję jakieś rzeczy, które w obu językach da się prosto utworzyć i uruchomić.</p>



<p>Mój test polegać będzie na pobraniu z jednego źródła danych (z pliku lokanego) dokumentu w formacie JSON, a następnie sprawdzić:</p>



<ol class="wp-block-list">
<li>Prędkość parsowania JSON na Obiekt</li>



<li>Szybkość z jaką połączy się wszystkie elementy z tablicy za pomocą pętli i konkatenacji (nie będę korzystać ze specjalnych metod służących temu)</li>



<li>Szybkości serializacji JSON do obiektu klasy DTO</li>



<li>Tak jak 3. tylko że będę chciał uzyskać błąd i przetestować szybkość obsługi wyjątku</li>



<li>Prędkość deserializacji z DTO na JSON i utworzeniu nowego pliku dokumentu JSON &#8211; z tego zrezygnowałem (wyjaśnię później)</li>
</ol>



<p>Więc co nam to udowodni? Oprócz tego że będę mógł zdać relację pisania obu skryptów to i też poznamy prędkości. </p>



<p>Do testów użyję PHP 8.2 oraz Python3. Każdy punkt zrealizuję jako osobny plik, a całość wrzucę na GitHub, abyście mogli mój test powtórzyć no albo czegoś się nauczyć albo przerobić pod własne testy.</p>



<h2 class="wp-block-heading">O pisaniu skryptów</h2>



<p>W obu przypadkach googlowałem proste rzeczy, a jak to pobrać dane z pliku, a jak to przerobić na JSON, a jak to mierzyć czas wykonania kodu. No i tutaj generalnie w obu językach nie miałem aż tak większego problemu, aby cokolwiek znaleźć. Z Pythonem miałem problem taki, że kompletnie jego składni nie znam, a nawet myślałem, że skoro średników nie trzeba to tym bardziej jakiś dwukropków i &#8222;selfiaków&#8221; nie będę potrzebować, więc problemy były ze nieznajomością narzędzia. Z tego powodu musiałem zrezygnować całkowicie z piątego punktu testu.</p>



<p>Co do PHP, generalnie poza drobnymi zmianami w nazwach zmiennych to większość kodu była kopiuj wklej z internetu. Struktury w obu językach staram się zrobić identico (z drobnymi różnicami w składniach). Więc jak w PHP zrobiłem foreach to na internecie szukałem odpowiednika dla Pythona i znalazłem for in. </p>



<p>Bardzo ważne było też dla mnie to, aby skrypty w obu językach wyglądały bardzo podobnie, aby w łatwy sposób dało się porównać co z czym jak szybko działa. Pisanie kodu zacząłem wczoraj (20 list 2022) o godzinie około 20:00 co z PHP skończyłem o 20:30, co jak z Pythonem zacząłem koło 21:00 to skończyłem o 23:30 i powiedziałem, że to nie jest język na moje nerwy.</p>



<h2 class="wp-block-heading">Porównanie</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="611" src="https://enterv.pl/wp-content/uploads/2022/11/Research-of-tiny-employees-price-innovation-on-unbalanced-scales-1024x611.webp" alt="" class="wp-image-481" srcset="https://enterv.pl/wp-content/uploads/2022/11/Research-of-tiny-employees-price-innovation-on-unbalanced-scales-1024x611.webp 1024w, https://enterv.pl/wp-content/uploads/2022/11/Research-of-tiny-employees-price-innovation-on-unbalanced-scales-300x179.webp 300w, https://enterv.pl/wp-content/uploads/2022/11/Research-of-tiny-employees-price-innovation-on-unbalanced-scales-768x458.webp 768w, https://enterv.pl/wp-content/uploads/2022/11/Research-of-tiny-employees-price-innovation-on-unbalanced-scales-1536x917.webp 1536w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Jako iż jestem jeszcze przed analizą wyników na wstępie mogę powiedzieć co wydaje mi się, a wydaje mi się, że Python jest dużo wolniejszy od PHP no i tak, bo w PHP można przeiterować 5-cio-milionową elementów tablicy w miej niż sekundę używając tylko bardzo prosty foreach, co w Pythonie, aby takie samo zrobić wydajniej trzeba napisać jednak więcej kodu, ale bez kombinacji w kodzie jednak chciałem robić porównanie, no bo foreach i for in to dla mnie i pewnie dla wielu to samo i w założeniu działać ma tak samo. </p>



<p>Gdy miałem przygotowany 30 MB plik z danymi to PHP poradził sobie ze wszystkim, a Python drugiego punktu testu nie potrafił dokończyć w rozsądnym czasie. Tak w sumie przerwałem mu działanie po 2 minutach. PHP poradził sobie poniżej 1 sekundy (a dokładniej to w 0,199593&#8230; sek) tworząc zmienną ze 16968000 znakami.</p>



<p>No ale chciałem jednak dać szansę wężowi, aby nie było, że specjalnie na start go uwaliłem. No chociaż myślę, że język programowania, który jest tak długo &#8222;wspierany&#8221; i uznawany jest za język wysokiego poziomu powinien mieć w miarę dojrzałą formę foreach (nawet ten for in) tak, aby zawsze szybko to działało i już na tym etapie nasuwa mi się wniosek, że to nie jest język, w którym cele biznesowe da się osiągnąć stosując strukturę heksagonalną i wszelakich zasad programowania domenowego, i jeszcze aby to działało optymalnie. Zasada jest prosta: 20 mln itemów w tablicy i chcę je przeiterować. Dla mnie według zasady <a href="https://enterv.pl/2022/08/15/programowanie-zasada-kiss/" target="_blank" rel="noopener" title="Zasada KISS">KISS</a> powinienem był użyć tylko i wyłącznie foreach.</p>



<p>Zatem.. zmniejszyłem rozmiar pliku z danymi do około 300 KB (dużo dużo mniej) i dostałem następujące wyniki</p>







<h2 class="wp-block-heading">Wnioski</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://enterv.pl/wp-content/uploads/2022/11/7720441-1024x1024.jpg" alt="" class="wp-image-484" srcset="https://enterv.pl/wp-content/uploads/2022/11/7720441-1024x1024.jpg 1024w, https://enterv.pl/wp-content/uploads/2022/11/7720441-300x300.jpg 300w, https://enterv.pl/wp-content/uploads/2022/11/7720441-150x150.jpg 150w, https://enterv.pl/wp-content/uploads/2022/11/7720441-768x768.jpg 768w, https://enterv.pl/wp-content/uploads/2022/11/7720441-1536x1536.jpg 1536w, https://enterv.pl/wp-content/uploads/2022/11/7720441.jpg 2000w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Trudno tutaj jednoznacznie powiedzieć że Python jest gorszy, bo mój test tego nie dowodzi. Raz że musiałbym ten język lepiej poznać to dwa w nim tak ja ja to zrobiłem nie pisze się. To co już jednak ustaliłem, że PHP działa jednak dużo szybciej niż zakładałem 😅 W wersji 5.4 takich czasów bym już nie uzyskał, więc widzę duży postęp w optymalizacji tego języka, co pewnie skłoni mnie do porównania prędkości pomiędzy wersjami, a co bardziej, bym miał kolejny powód do aktualizowania wszystkiego 😈</p>



<p>Jeśli chodzi o jakieś dalsze wnioski idące za zdobytymi przeze mnie cyferkami to zostawię wam moje misiaczki pole do popisu, bo może jest coś, co ja mogłem przeoczyć&#8230; na pewno jest 😆</p>



<h2 class="wp-block-heading">Podsumowanie</h2>



<p>Zatem poświęciłem dwa wieczory specjalnie pod ten pseudo-naukowy wyczyn, który zasadniczo mało co udowadnia. Za to mogłem ujrzeć wężowy odwłok odchodzący ku zachodzącemu słońcu na tle słoniowych chmur.. Czy straciłem czas?&#8230; 😬 Powiem tylko, że czas poświęconych dla moich kochanych misiaczków nigdy nie jest stracony 🫂</p>



<p class="has-small-font-size">Wolę PHP</p>



<p>Także do następnego miłego 😘</p>



<p>Repozytorium: <a href="https://github.com/EnterVPL/PHPvsPython" target="_blank" rel="noopener nofollow" title="">https://github.com/EnterVPL/PHPvsPython</a></p>Artykuł <a href="https://enterv.pl/2022/11/21/programowanie-php-vs-python-krotki-test/">PHP vs Python – krótki test</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></content:encoded>
					
					<wfw:commentRss>https://enterv.pl/2022/11/21/programowanie-php-vs-python-krotki-test/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Krótka historia o początkach CrazyLazyCatBot</title>
		<link>https://enterv.pl/2022/10/19/crazylazycatbot/</link>
		
		<dc:creator><![CDATA[enterv]]></dc:creator>
		<pubDate>Wed, 19 Oct 2022 14:47:26 +0000</pubDate>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[bot]]></category>
		<category><![CDATA[catbot]]></category>
		<category><![CDATA[crazylazycatbot]]></category>
		<category><![CDATA[discord.js]]></category>
		<category><![CDATA[historia]]></category>
		<category><![CDATA[lazybot]]></category>
		<category><![CDATA[nest.js]]></category>
		<category><![CDATA[programowanie]]></category>
		<guid isPermaLink="false">https://enterv.pl/?p=447</guid>

					<description><![CDATA[<p>W tym artykule opowiem w skrócie historię powstania mojego bota. Pojawią się również sprawy techniczne, ale mam nadzieję, że wszystko będzie w zrozumiałym tonie</p>
Artykuł <a href="https://enterv.pl/2022/10/19/crazylazycatbot/">Krótka historia o początkach CrazyLazyCatBot</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">Wstęp</h2>



<p>Cześć! Pewnie część z was od wielu miesięcy wie, że tworzę bota na mój koci discrod i też ta sama część wie, jak prezentuje się wersja testowa. </p>



<p>Do utworzenia bota wykorzystałem bibliotekę discord.js wraz z frameworkiem nest.js (z mojej strony to bardzo dzikie połączenie, ale to o tym później), a powstałe rezultaty są nawet obiecujące.</p>



<h2 class="wp-block-heading">Powód powstania bota</h2>



<p>Od wielu wielu lat chciałem mieć własnego bota, jako takie swoiste narzędzie całkowicie spersonalizowane pod potrzeby serwera. Drugim powodem i w moim odczuciu dużo mocniejszym to to, że mogę i chcę &#8211; ot taki kaprys 😅</p>



<p>Później czyli sierpień/wrzesień 2022 roku (nie tak dawno) zacząłem poszukiwania bota do zliczania XP. Myślałem nad Mee6, ale ten zaczął chcieć za to many many. Ok, nie mam nic przeciwko temu, ale że jestem zwolennikiem niewydawania bez potrzeby to znalazłem innego bota, ale tak na serio to żaden inny mi nie odpowiadał. Zatem &#8211; jakiegoś znalazłem i wrzuciłem na serwer, ale z tyłu głowy miałem to, że to nie jest do końca to. Z reszta większość fajnych opcji jest zablokowana i to był ten moment kiedy moja zachcianka zaczęła mieć rację bytu 💪</p>



<h2 class="wp-block-heading">Poznanie się z discord.js</h2>



<p>Początki były.. niecodzienne. Miałem duży problem z tym, aby w ogóle zacząć. To też z powodu tego, że u mnie ostatnio czasem krucho, ale też chodzi o to, że robiłem niby wszystko zgodnie z dokumentacją, ale bot po prostu nie chciał się odpalić. Mój skopiowany kod nie działał.</p>



<p>Straciłem kilka dni rozkmin na to jak prawidłowo skonfigurować bota i kolejne na utworzeniu komend zaczynających się od ukośnika. W końcu mnie olśniło! Skoro podaję jakiś token przez liba to może niepotrzebnie coś jest dopisane? Koniec końców wyszło na to, że za bardzo sobie pomieszałem to co było opisane na slackoverflow i tym co na github oraz tym co na dokumentacji. Usunąłem z tokenu to co sam dopisałem do niego i myk &#8211; lek na wszystko! To był jeden z tych dni kiedy sam siebie uznałem za debila.. Cóż.. każdemu mogło się zdarzyć 🙃</p>



<p>Po udanej naprawie postanowiłem pobawić się z tworzeniem komend i już było z górki. Jakieś tam parametry ustawiałem itd. &#8211; generalnie zabawa kodem. Potem uznałem, że wszystko spoko, ale pasuje to jakoś standaryzować  i uznałem, że skoro to tylko lib to mogę go upakować w jakimś frameworku jako jakiś osobny moduł czy inny twór.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="700" height="104" src="https://enterv.pl/wp-content/uploads/2022/10/nieSprawdzeXp.webp" alt="" class="wp-image-449" srcset="https://enterv.pl/wp-content/uploads/2022/10/nieSprawdzeXp.webp 700w, https://enterv.pl/wp-content/uploads/2022/10/nieSprawdzeXp-300x45.webp 300w" sizes="auto, (max-width: 700px) 100vw, 700px" /><figcaption class="wp-element-caption">Jak bardzo bot nie sprawdza XP, bo jest leniwy</figcaption></figure>



<h2 class="wp-block-heading">Większy poziom abstrakcji </h2>



<p>Wziąłem się za nest.js. Nie był to strzał w kolano, ale żeby zrozumieć ten lekki absurd, w który sam się wpakowałem to miejcie na uwadze 3 następujące rzeczy:</p>



<ul class="wp-block-list">
<li>pisanie w nest.js wiąże się z używaniem języka TypeScript, którego po prostu nie znam tak dobrze jak np. Dart czy PHP</li>



<li>nie znam nest.js.. to że potrafię w nim utworzyć DTO i kontrolery o niczym nie świadczy, to po prostu jest w dokumentacji podane na tacy 😅</li>



<li>dopiero poznaję discord.js, co oznacza, że mam sporo do nauki</li>
</ul>



<p>Z samym frameworkiem nie miałem problemów. Grzecznie utworzyłem moduł i piszę w nim jakbym tworzył całkowicie samodzielną aplikację. Nie wiem jak na długo zachowam taką hermetyczność, ale powiem, że jestem i tak z tego dumny.</p>



<figure class="wp-block-image size-full is-style-default"><img loading="lazy" decoding="async" width="335" height="67" src="https://enterv.pl/wp-content/uploads/2022/10/discordbotmodule.webp" alt="" class="wp-image-451" srcset="https://enterv.pl/wp-content/uploads/2022/10/discordbotmodule.webp 335w, https://enterv.pl/wp-content/uploads/2022/10/discordbotmodule-300x60.webp 300w" sizes="auto, (max-width: 335px) 100vw, 335px" /><figcaption class="wp-element-caption">DiscordBotModule</figcaption></figure>



<h2 class="wp-block-heading">Dalsze plany na bota</h2>



<p>Mam wypisaną całą listę zadań do wykonania, aby tego bota zrobić. Nie będę tutaj jej przytaczać, ale chcę zrobić system liczenia XP, a wraz tym tablicę wyników. Dodać komendę do wylosowania zdjęcia losowego pieska (bo na kotki jest już). A co potem? Potem się pomyśli. Jestem też otwarty na sugestie 😄</p>



<h2 class="wp-block-heading">Szczególne podziękowania</h2>



<p><strong>Dori</strong> zwany kiedyś Dorion300, bardzo usprawniłeś flow dotyczące bota. W ten projekt też wszedłeś bez większego zastanowienia i zaangażowałeś się tak jakby to był też Twój bot. Dzięki wielkie, z to że tak bardzo mi pomagasz i śmiało mogę oznajmić, że tak: to jest nasz wspólny bot 🫂 🥇</p>



<p><strong>Luki_86</strong> dzięki Tobie bot miauczy i czasami tym za bardzo spami. Podesłałeś też drugi fajny pomysł, który z pewnością wezmę pod uwagę 😁</p>



<h2 class="wp-block-heading">Podsumowanie</h2>



<p>Jak to bywa początki bywają trudne, ale też nie taki diabeł straszny jak go malują i tym optymistycznym akcentem zobaczymy się w kolejnym wpisie albo na kocim discordzie. Mrau 🐱</p>Artykuł <a href="https://enterv.pl/2022/10/19/crazylazycatbot/">Krótka historia o początkach CrazyLazyCatBot</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Guzzle/Promises &#8211; wprowadzenie do biblioteki</title>
		<link>https://enterv.pl/2022/09/22/php-guzzle-promises-wprowadzenie-do-biblioteki/</link>
		
		<dc:creator><![CDATA[enterv]]></dc:creator>
		<pubDate>Thu, 22 Sep 2022 13:22:47 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[async php]]></category>
		<category><![CDATA[asynchroniczność w php]]></category>
		<category><![CDATA[guzzle]]></category>
		<category><![CDATA[guzzle promise]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[promise php]]></category>
		<guid isPermaLink="false">https://enterv.pl/?p=402</guid>

					<description><![CDATA[<p>Wstęp Cześć kociaczki, psiaczki i miłe zwierzaczki 😀 Dzisiaj porozmawiamy sobie tak ogólnie o bibliotece do języka PHP Guzzle Promises. Pewnie część z tych co znają język JavaScript kojarzą taki twór jak Promise czyli tzw. Obietnicę. Do jej szybszej obsługi nawet wprowadzono w tym języku async i await co już na mówi po części do [&#8230;]</p>
Artykuł <a href="https://enterv.pl/2022/09/22/php-guzzle-promises-wprowadzenie-do-biblioteki/">Guzzle/Promises – wprowadzenie do biblioteki</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">Wstęp</h2>



<p>Cześć kociaczki, psiaczki i miłe zwierzaczki 😀 Dzisiaj porozmawiamy sobie tak ogólnie o bibliotece do języka PHP <a rel="noreferrer noopener" href="https://github.com/guzzle/promises" target="_blank">Guzzle Promises</a>. </p>



<p>Pewnie część z tych co znają język JavaScript kojarzą taki twór jak <strong>Promise</strong> czyli tzw. Obietnicę. Do jej szybszej obsługi nawet wprowadzono w tym języku async i await co już na mówi po części do czego to służy. Tak: do asynchroniczności 😄</p>



<p>Jak wiadomo PHP nie jest językiem, który posiadałby asynchroniczność, ale to nie zraziło twórców Guzzle, która służy do obsługi requestów i pewnego dnia utworzyli oni Promises, aby można było obsłużyć asynchroniczne requesty &#8211; czyli taki PHPowy odpowiednik fetch znanego z JS. Jak się potem zaczytałem, to można ich Promise używać nie tylko do requestów, co mnie w sumie cieszy, bo dzięki temu możemy nasz kod wzbogacić o wiele ciekawszych mechanizmów.</p>



<p><strong>Quick Start</strong> został opisany na ich repozytorium GitHub w pliku <a rel="noreferrer noopener" href="https://github.com/guzzle/promises#readme" target="_blank">Readme.md</a> &#8211; ja tylko przełożę część występujących tam przykładów. </p>



<h2 class="wp-block-heading">Podstawy &#8211; przykłady</h2>



<h3 class="wp-block-heading">Utworzenie Promise</h3>



<pre class="wp-block-code"><code lang="php" class="language-php line-numbers">use GuzzleHttp\Promise\Promise;

// Tworzymy nasz Promise
$promise = new Promise();

// i ustalamy co ma się wykonać
// metoda then() przyjmuje dwie funkcje
// pierwsza funkcja wykonuje się gdy nie napotkamy błędów
// druga wykona się jeśli zostaną napotkane błędy/wyjątki
$promise-&gt;then(
    // $onFulfilled
    function ($value) {
        echo 'The promise was fulfilled.';
    },
    // $onRejected
    function ($reason) {
        echo 'The promise was rejected.';
    }
);
// oba argumenty funkcji then musza być typu callable:
// @see https://www.php.net/manual/en/language.types.callable.php</code></pre>



<h3 class="wp-block-heading">Rozwiązanie Promise</h3>



<p>Aby nasz Promise cokolwiek wykonał musi zostać rozwiązany, jest to dosyć proste, bo wystarczy to zrobić:</p>



<pre class="wp-block-code"><code lang="php" class="language-php line-numbers">use GuzzleHttp\Promise\Promise;

$promise = new Promise();
$promise
    -&gt;then(function ($value) {
        // ten then() zwróci wartość, ale nie przerwie łańcucha wywołań then()
        return "Hello, " . $value;
    })
    // jak widzisz then() zwraca nowy Promise. Ten jako $value będzie miał to co zwrócił poprzedni then()
    -&gt;then(function ($value) {
        echo $value;
    });

// Rozwiązanie Promise
$promise-&gt;resolve('reader.')
// wyświetli się "Hello, reader."</code></pre>



<p>Ok pomyślmy co tutaj się stało 🤔 Mamy jeden zadeklarowany Promise, który ma 2x then().</p>



<p>Jeśli Promise nie jest rozwiązany to każdy then() zwraca nowy Promise, dzięki czemu możemy tworzyć taki łańcuch. Dla tych co chcą bardziej wiedzieć jak ten kod działa to zapraszam na GitHub: <a rel="noreferrer noopener" href="https://github.com/guzzle/promises/blob/8e7d04f1f6450fef59366c399cfad4b9383aa30d/src/Promise.php#L31" target="_blank">https://github.com/guzzle/promises/blob/8e7d04f1f6450fef59366c399cfad4b9383aa30d/src/Promise.php#L31</a> &#8211; specjalnie dla was to znalazłem 😁</p>



<p>Więc póki nasz Promise jest w oczekiwaniu to możemy mu dokładać coraz to bardziej kolejne then(), a w nich każde kolejne callable (czyli tak w sumie callbacki), a każdy kolejny callable będzie miał jako wartość argumentu to co jest zwracane w poprzednim callable.</p>



<p>W pierwszym then() mamy funkcję zwracającą połączenie &#8222;Hello, &#8221; z podaną mu wartością. W kolejnym then() jako wartość argumentu mamy poprzednio zwróconą wartość. Z tego przykładu wiemy że to będzie w całości string (bo tak zadziała PHP w tym przypadku). Nasz drugi then() wyświetli tą wartość.</p>



<p>Więc to co się dzieje po <em>$promise-&gt;resolve(&#8217;reader.&#8217;)</em> to ten &#8222;reader.&#8221; jest przekazywany do pierwszego then(). On łączy &#8222;Hello, &#8221; z &#8222;reader.&#8221; i to jest przekazywane do kolejnego then() i on ma do wykonania wyświetlenie już wcześniej połączonego napisu co po prostu pokaże nam &#8222;Hello, reader.&#8221;</p>



<p>Proste? Tak? 😅 Wiem, że nie dla każdego to się wydaje intuicyjne, ale kilka prób i okaże się, że to banał.</p>



<h3 class="wp-block-heading">Promise Forwarding</h3>



<p>Tak do końca nie wiem jak to poprawnie na Polski przetłumaczyć, no może przekazywanie obietnic ma tutaj jakiś sens, ale nie będę szukać na siłę 😉</p>



<p>W skrócie: możemy zadeklarować kilka obietnic i je zwracać w then() dzięki temu mamy wpływ na to, kiedy i którą obietnicę będzie można wywołać. W tym prostym przykładzie poniżej wykonamy je jedna za drugą, ale nic nie stoi na przeszkodzie, aby pomiędzy rozwiązaniami wstawić jakiś inny kod.</p>



<pre class="wp-block-code"><code lang="php" class="language-php line-numbers">use GuzzleHttp\Promise\Promise;

$promise = new Promise();
$nextPromise = new Promise();

$promise
    -&gt;then(function ($value) use ($nextPromise) {
        echo $value;
        return $nextPromise;
    })
    -&gt;then(function ($value) {
        echo $value;
    });

// Rozwiązujemy nasz pierwszy callback. Wyświetli się 'A'
$promise-&gt;resolve('A');

// tutaj może być inny kod

// Rozwiązujemy nasz drugi callback. Wyświetli się "B"
$nextPromise-&gt;resolve('B');</code></pre>



<h3 class="wp-block-heading">Synchroniczne wywołanie</h3>



<p>Czasami (tak jak czasami w JS i innych językach bywa) mamy możliwość czekania na wykonanie się obietnicy. Czy to jest przydatne? No czasami tak, ale tutaj nie będę się nad tym rozwodzić.</p>



<p>Metoda wait() domyślnie rozwiązuje nam Promise i dodatkowo zwraca nam wartość z callbacka:</p>



<pre class="wp-block-code"><code lang="php" class="language-php line-numbers">use GuzzleHttp\Promise\Promise;

$promise = new Promise(function () use (&amp;$promise) {
    $promise-&gt;resolve('foo');
});

// metoda wait() wymusza czekanie na rozwiązanie się Promise
echo $promise-&gt;wait(); // wyświetli "foo"
// i dopiero wtedy zacznie iść do dalszej części kodu</code></pre>



<h2 class="wp-block-heading">Podsumowanie</h2>



<p>Dzisiaj poznaliśmy coś co w PHP było uznawane za niemożliwe, a jednak dzięki bibliotece Guzzle/Promise niemożliwe staje się możliwe, a PHP dzięki temu staje się asynchroniczny! Oczywiście to nie jest nic nowego, bo pierwsze wzmianki, które znalazłem są z 2015 roku, w którym pojawiła się wersja <a rel="noreferrer noopener" href="https://github.com/guzzle/promises/releases/tag/0.1.0" target="_blank">0.1 tego zasobu</a>.</p>



<p>Na stan dzisiejszy jest to dość mocno rozwinięty projekt, który cieszy się coraz większym poparciem. Ja o niej dowiedziałem się stosunkowo niedawno, co mi trochę wstyd za to, no ale lepiej później niż wcale, a świat bibliotek i dokumentacji jest ogromny 😄</p>



<p>Mam nadzieję, że pomogłem tym wpisem i że więcej PHP deweloperów z tego skorzysta.  </p>



<p>Przytulam i trzymajcie się ciepło. Ciao 😊</p>Artykuł <a href="https://enterv.pl/2022/09/22/php-guzzle-promises-wprowadzenie-do-biblioteki/">Guzzle/Promises – wprowadzenie do biblioteki</a> pochodzi z serwisu <a href="https://enterv.pl">enterv.pl</a>.]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
