<?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>TomaszKenig.pl</title>
	<atom:link href="http://tomaszkenig.pl/feed/" rel="self" type="application/rss+xml" />
	<link>https://tomaszkenig.pl/</link>
	<description>Analiza danych, programowanie</description>
	<lastBuildDate>Mon, 05 Feb 2024 05:40:09 +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://tomaszkenig.pl/wp-content/uploads/2020/01/cropped-lambda-39473_1280-32x32.png</url>
	<title>TomaszKenig.pl</title>
	<link>https://tomaszkenig.pl/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">130543010</site>	<item>
		<title>Nie tylko cena — jak dobrze wybrać tanie domeny?</title>
		<link>https://tomaszkenig.pl/technologia/nie-tylko-cena-jak-dobrze-wybrac-tanie-domeny/</link>
					<comments>https://tomaszkenig.pl/technologia/nie-tylko-cena-jak-dobrze-wybrac-tanie-domeny/#respond</comments>
		
		<dc:creator><![CDATA[Tomasz Kenig]]></dc:creator>
		<pubDate>Mon, 05 Feb 2024 05:39:52 +0000</pubDate>
				<category><![CDATA[technologia]]></category>
		<category><![CDATA[domeny]]></category>
		<category><![CDATA[hosting]]></category>
		<guid isPermaLink="false">https://tomaszkenig.pl/?p=8494</guid>

					<description><![CDATA[<p>Szukasz okazji do zakupu taniej domeny? Co warto wziąć pod uwagę, decydując się na taką usługę? Podpowiemy Ci, jak dobrze wybrać tanią domenę i dlaczego połączenie jej z hostingiem może być znakomitym rozwiązaniem. Czym są tanie domeny? Tanie domeny mogą być atrakcyjną opcją dla małych przedsiębiorstw, start-upów czy też blogerów, którym zależy na zbudowaniu swojej [&#8230;]</p>
<p>Artykuł <a href="https://tomaszkenig.pl/technologia/nie-tylko-cena-jak-dobrze-wybrac-tanie-domeny/">Nie tylko cena — jak dobrze wybrać tanie domeny?</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Szukasz okazji do zakupu taniej domeny? Co warto wziąć pod uwagę, decydując się na taką usługę? Podpowiemy Ci, jak dobrze wybrać tanią domenę i dlaczego połączenie jej z hostingiem może być znakomitym rozwiązaniem.</p>



<h2 class="wp-block-heading"><strong>Czym są tanie domeny?</strong></h2>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="800" height="457" src="https://tomaszkenig.pl/wp-content/uploads/2024/02/0e102f49a832e6ea8cbda0b6cc070a77-1.png" alt="Nie tylko cena — jak dobrze wybrać tanie domeny?" class="wp-image-8496" srcset="https://tomaszkenig.pl/wp-content/uploads/2024/02/0e102f49a832e6ea8cbda0b6cc070a77-1.png 800w, https://tomaszkenig.pl/wp-content/uploads/2024/02/0e102f49a832e6ea8cbda0b6cc070a77-1-300x171.png 300w, https://tomaszkenig.pl/wp-content/uploads/2024/02/0e102f49a832e6ea8cbda0b6cc070a77-1-768x439.png 768w" sizes="(max-width: 800px) 100vw, 800px" /><figcaption class="wp-element-caption">Nie tylko cena — jak dobrze wybrać tanie domeny?</figcaption></figure>
</div>


<p>Tanie domeny mogą być atrakcyjną opcją dla małych przedsiębiorstw, start-upów czy też blogerów, którym zależy na zbudowaniu swojej marki bez konieczności ponoszenia wysokich kosztów rejestracji strony internetowej. <strong>Obejmują one takie popularne rozszerzenia jak .pl, .com, .eu, .net i .org</strong> odznaczające się wysoką funkcjonalnością. Niski koszt tych domen często wynika z promocji proponowanych przez rejestratorów, którzy dążą do przyciągnięcia nowych klientów. Oferty te mogą obejmować obniżone ceny za pierwszy rok rejestracji lub specjalne pakiety usług usprawniających działanie strony internetowej.</p>



<h2 class="wp-block-heading"><strong>Dlaczego warto połączyć tanią domenę z hostingiem?</strong></h2>



<p>Decydując się na usługi <a href="https://seohost.pl/domeny/">seohost.pl (hosting i domeny)</a>, możesz zarejestrować stronę na szybkim serwerze opartym na dyskach SSD NVMe, które oferują wysoką wydajność. Rozwiązanie to wydaje się niezwykle wygodne, ponieważ <strong>zarządzanie domeną i hostingiem odbywa się w jednym miejscu</strong>, co ułatwia administrację i rozwiązywanie ewentualnych problemów. Wielu dostawców oferuje atrakcyjne pakiety cenowe przy połączeniu tych usług. Często pozwala to też osiągnąć lepszą integrację techniczną, <strong>przyczyniając się do wyższej wydajności i stabilności strony internetowej</strong>. Rejestratorzy tanich domen zazwyczaj oferują również odpowiednie wsparcie dla usług hostingowych, co wydaje się szczególnie korzystnych rozwiązaniem dla osób, które nie posiadają zaawansowanej wiedzy w tym zakresie.</p>



<h2 class="wp-block-heading"><strong>Jak dobrze wybrać tanie domeny?</strong></h2>



<p>Chociaż sama rejestracja <a href="https://subasta.pl/tania-domena-z-poczta-czy-to-mozliwe-co-mozna-otrzymac-dodatkowo-wykupujac-domene/">taniej domeny</a> może wydawać atrakcyjna cenowo, warto <strong>dokładnie przeanalizować długoterminowe koszty związane z jej odnawianiem</strong> w przyszłości. Dobrym rozwiązaniem jest również sprawdzenie opinii użytkowników na temat usług i wsparcia oferowanego przez wybranego rejestratora. Należy także upewnić się, czy za transfer domeny i ochronę prywatności WHOIS dostawca pobiera dodatkowe opłaty, które mogą wpływać na całkowity koszt usługi. Warto też zwrócić uwagę na <strong>możliwość darmowej konfiguracji domeny na serwerach DNS</strong> oraz ewentualne ograniczenia związane z korzystaniem z danego rozszerzenia. Dobrym pomysłem jest również sprawdzenie, czy istnieje opcja jej optymalizacji pod SEO oraz jakie są potencjalne ograniczenia w promowaniu strony w wynikach wyszukiwania. W naszej ocenie warto zdecydować się na zakup taniej domeny z możliwością jej rozwoju w przyszłości.</p>



<p>Wybierając domenę w korzystnej cenie, należy upewnić się, jakie będą koszty jej utrzymania w przyszłości. Dobrym rozwiązaniem może być również połączenie jej z usługą hostingową, co naszym zdaniem pozwala uzyskać znacznie lepszą wydajność działania strony internetowej. O czym jeszcze warto pamiętać, rejestrując tanią domenę? Podziel się swoimi sugestiami w komentarzu.</p>
<p>Artykuł <a href="https://tomaszkenig.pl/technologia/nie-tylko-cena-jak-dobrze-wybrac-tanie-domeny/">Nie tylko cena — jak dobrze wybrać tanie domeny?</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tomaszkenig.pl/technologia/nie-tylko-cena-jak-dobrze-wybrac-tanie-domeny/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8494</post-id>	</item>
		<item>
		<title>Dlaczego wymiana wyświetlacza w Twoim iPhone jest tak ważna?</title>
		<link>https://tomaszkenig.pl/technologia/dlaczego-wymiana-wyswietlacza-w-twoim-iphone-jest-tak-wazna/</link>
					<comments>https://tomaszkenig.pl/technologia/dlaczego-wymiana-wyswietlacza-w-twoim-iphone-jest-tak-wazna/#respond</comments>
		
		<dc:creator><![CDATA[Tomasz Kenig]]></dc:creator>
		<pubDate>Mon, 09 Oct 2023 18:47:29 +0000</pubDate>
				<category><![CDATA[technologia]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iphone]]></category>
		<guid isPermaLink="false">https://tomaszkenig.pl/?p=8468</guid>

					<description><![CDATA[<p>Każdy posiadacz iPhone&#8217;a z pewnością zna uczucie niepokoju, które towarzyszy nam, gdy nasz cenny telefon upada na ziemię. Mimo że smartfony Apple są znane z wysokiej jakości wykonania, nie są one odporne na uszkodzenia. Szczególnie podatne na pęknięcia i zadrapania są ich ekrany dotykowe. W tym artykule dowiesz się, dlaczego warto inwestować w profesjonalną wymianę [&#8230;]</p>
<p>Artykuł <a href="https://tomaszkenig.pl/technologia/dlaczego-wymiana-wyswietlacza-w-twoim-iphone-jest-tak-wazna/">Dlaczego wymiana wyświetlacza w Twoim iPhone jest tak ważna?</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Każdy posiadacz iPhone&#8217;a z pewnością zna uczucie niepokoju, które towarzyszy nam, gdy nasz cenny telefon upada na ziemię. Mimo że smartfony Apple są znane z wysokiej jakości wykonania, nie są one odporne na uszkodzenia. Szczególnie podatne na pęknięcia i zadrapania są ich ekrany dotykowe. W tym artykule dowiesz się, dlaczego warto inwestować w profesjonalną wymianę wyświetlacza oraz jakie modele są najczęściej narażone na tego typu awarie.</p>



<h2 class="wp-block-heading">Kiedy warto wymienić wyświetlacz w iPhone?</h2>



<p>W wielu przypadkach uszkodzenie ekranu jest oczywiste &#8211; widoczne pęknięcia lub rozlane &#8222;atramentowe&#8221; plamy świadczą o konieczności naprawy. Jednak nie zawsze problem jest tak oczywisty. Oto kilka sytuacji, w których powinieneś rozważyć wymianę wyświetlacza:</p>



<ul class="wp-block-list">
<li>Nieregularne działanie ekranu dotykowego.</li>



<li>Widoczne pionowe lub poziome pasy na ekranie.</li>



<li>Ekran nie reaguje na dotyk w niektórych miejscach.</li>



<li>Zmienione kolory wyświetlane na ekranie.</li>
</ul>



<h2 class="wp-block-heading">Jakie modele iPhone są najczęściej narażone na uszkodzenia ekranu?</h2>



<p>Niektóre modele iPhone są bardziej narażone na uszkodzenia ekranu niż inne. Oto dwie usługi, które są bardzo popularne wśród użytkowników telefonów makri Apple:</p>



<ul class="wp-block-list">
<li><a href="https://flixapple.com/model/iphone-11-pro/">wymiana wyswietlacza iphone 11 pro</a></li>



<li><a href="https://flixapple.com/model/iphone-xr/">wymiana wyswietlacza iphone xr</a></li>
</ul>



<p>Oczywiście, każdy model iPhone&#8217;a może doświadczyć uszkodzenia ekranu, ale te trzy są szczególnie podatne na tego typu awarie.</p>



<h2 class="wp-block-heading">Jak wybrać odpowiedni serwis do wymiany wyświetlacza?</h2>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="1920" height="1281" src="https://tomaszkenig.pl/wp-content/uploads/2023/10/home-office-1867759_1920.jpg" alt="" class="wp-image-8470" srcset="https://tomaszkenig.pl/wp-content/uploads/2023/10/home-office-1867759_1920.jpg 1920w, https://tomaszkenig.pl/wp-content/uploads/2023/10/home-office-1867759_1920-300x200.jpg 300w, https://tomaszkenig.pl/wp-content/uploads/2023/10/home-office-1867759_1920-1024x683.jpg 1024w, https://tomaszkenig.pl/wp-content/uploads/2023/10/home-office-1867759_1920-768x512.jpg 768w, https://tomaszkenig.pl/wp-content/uploads/2023/10/home-office-1867759_1920-1536x1025.jpg 1536w" sizes="(max-width: 1920px) 100vw, 1920px" /><figcaption class="wp-element-caption">Jak wybrać odpowiedni serwis do wymiany wyświetlacza?</figcaption></figure>
</div>


<p>Wybierając serwis do naprawy Twojego iPhone&#8217;a, warto zwrócić uwagę na kilka kluczowych kwestii:</p>



<ul class="wp-block-list">
<li>Doświadczenie: Wybierz serwis, który ma doświadczenie w naprawie iPhone&#8217;ów.</li>



<li>Gwarancja: Upewnij się, że serwis oferuje gwarancję na wykonane prace.</li>



<li>Opinie: Przeczytaj opinie innych klientów na temat danego serwisu.</li>
</ul>



<p>Aby poznać cenę przykładowo wymiany ekranu dla telefonu marki Apple, można wpisać w wyszukiwarkę internetową frazę: “<a href="https://flixapple.com/model/iphone-11/">wymiana ekranu iphone 11 cena</a>”.</p>



<h2 class="wp-block-heading">Czynniki wpływające na koszt wymiany wyświetlacza</h2>



<p>Nie każda wymiana ekranu w iPhone&#8217;ie jest taka sama, a różne czynniki mogą wpływać na jej końcowy koszt. Po pierwsze, różne modele iPhone&#8217;ów mają różne ekrany, które mogą różnić się ceną. Poza tym, skomplikowanie uszkodzenia ekranu &#8211; czy jest to jedynie pęknięty ekran, czy może też uszkodzony jest panel dotykowy &#8211; będzie miało wpływ na cenę. Dodatkowo, jakość użytych części zamiennych oraz renoma i doświadczenie serwisu również mogą wpływać na ostateczne koszty naprawy.</p>



<h2 class="wp-block-heading">Dlaczego warto korzystać z oryginalnych części podczas wymiany?</h2>



<p>Kiedy decydujesz się na wymianę wyświetlacza w swoim iPhone, możesz zetknąć się z wyborem między oryginalnymi częściami a tańszymi zamiennikami. Chociaż zamienniki mogą być atrakcyjne cenowo, korzystanie z oryginalnych części ma wiele zalet. Oryginalne komponenty zapewniają najlepszą jakość obrazu, odpowiednią kalibrację kolorów oraz doskonałą czułość dotyku. Co więcej, korzystanie z oryginalnych części często jest wymagane, aby zachować gwarancję producenta na urządzenie.</p>



<h2 class="wp-block-heading">Jak dbać o ekran iPhone&#8217;a, by uniknąć przyszłych uszkodzeń?</h2>



<p>Kluczem do długowieczności Twojego iPhone&#8217;a jest odpowiednia troska i dbałość o jego ekran. Aby uniknąć uszkodzeń, warto zainwestować w wysokiej jakości folię ochronną lub szkło hartowane, które będzie stanowiło dodatkową warstwę ochronną przed zarysowaniami czy uderzeniami. Unikaj też noszenia telefonu w tej samej kieszeni co klucze czy inne ostre przedmioty. Pamiętaj również, aby nie kłaść iPhone&#8217;a ekranem w dół na twardych lub szorstkich powierzchniach. Regularna dbałość i ostrożność pozwolą Ci cieszyć się sprawnym i nieskazitelnym ekranem przez długi czas.</p>



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



<p>Uszkodzenie wyświetlacza iPhone&#8217;a nie jest końcem świata, ale warto inwestować w jego profesjonalną naprawę. Wybierając odpowiedni serwis, masz pewność, że Twój telefon będzie działał tak dobrze, jak przed uszkodzeniem. Pamiętaj, aby zawsze dbać o swoje urządzenie i unikać sytuacji, które mogą prowadzić do uszkodzenia ekranu.</p>
<p>Artykuł <a href="https://tomaszkenig.pl/technologia/dlaczego-wymiana-wyswietlacza-w-twoim-iphone-jest-tak-wazna/">Dlaczego wymiana wyświetlacza w Twoim iPhone jest tak ważna?</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tomaszkenig.pl/technologia/dlaczego-wymiana-wyswietlacza-w-twoim-iphone-jest-tak-wazna/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8468</post-id>	</item>
		<item>
		<title>User Input w Python</title>
		<link>https://tomaszkenig.pl/kurs-python/user-input-w-python/</link>
					<comments>https://tomaszkenig.pl/kurs-python/user-input-w-python/#respond</comments>
		
		<dc:creator><![CDATA[Tomasz Kenig]]></dc:creator>
		<pubDate>Mon, 06 Mar 2023 09:32:39 +0000</pubDate>
				<category><![CDATA[kurs python]]></category>
		<guid isPermaLink="false">https://tomaszkenig.pl/?p=8339</guid>

					<description><![CDATA[<p>Jak wprowadzać dane bezpośrednio do kodu w Python? Jeśli chcesz wprowadzić dane ręcznie bezpośrednio do kodu w Pyton podczas wykonywania programu, służy do tego funkcja user input(). Przykład kodu z użyciem funkcji python input() zamieszczam poniżej. Wartości wprowadzane z użyciem input() python wprowadzane są do programu jako typ danych string. Jeśli więc chcesz obsłużyć liczbę [&#8230;]</p>
<p>Artykuł <a href="https://tomaszkenig.pl/kurs-python/user-input-w-python/">User Input w Python</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Jak wprowadzać dane bezpośrednio do kodu w Python?</h2>



<p>Jeśli chcesz <strong>wprowadzić dane ręcznie</strong> bezpośrednio do kodu w Pyton podczas wykonywania programu, służy do tego funkcja user <strong>input()</strong>. Przykład kodu z użyciem funkcji python input() zamieszczam poniżej. Wartości wprowadzane z użyciem input() python <strong>wprowadzane są do programu jako typ danych string</strong>. Jeśli więc chcesz obsłużyć liczbę wprowadzoną przez użytkownika, musisz dokonać <a href="https://tomaszkenig.pl/kurs-python/zmienne-w-python/">konwersji typu danych</a>. W skrócie: </p>



<p>Stworzyłem zmienną x, do której chcę przypisać wartość <strong>wpisaną przez użytkownika</strong>.</p>



<ul class="wp-block-list">
<li>Zmienna x przyjmuje wartość uzyskaną z funkcji<strong> Python input</strong>.</li>



<li>Po uruchomieniu programu, <strong>wprowadzamy wartość</strong> ( w tym wypadku wieku).</li>



<li>Instrukcja <strong><a href="https://tomaszkenig.pl/kurs-python/instrukcja-warunkowa-if-w-python/">Python if</a></strong> obsługuje zmienną x i zwraca komunikat w zależności od wartości wprowadzone j przez użytkownika. Instrukcja if w warunku logicznym zawiera także funkcję int(), która ma na celu zmianę typu danych na typ integer Python.</li>



<li>Program jest mega uproszczony. Nie obsługuje jescze w tym momencie błędów oraz np możliwości wprowadzenia wartości innych niż liczbowych przez użytkownika. </li>
</ul>



<pre class="wp-block-code"><code>x = input("What is Your age? ")

if int(x) &gt;= 18:
    print("You hove more than 18 years.")
else:
    print("You are under 18.")</code></pre>



<figure class="wp-block-image size-full"><a href="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-27.png"><img decoding="async" width="1697" height="743" src="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-27.png" alt="" class="wp-image-8346" srcset="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-27.png 1697w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-27-300x131.png 300w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-27-1024x448.png 1024w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-27-768x336.png 768w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-27-1536x673.png 1536w" sizes="(max-width: 1697px) 100vw, 1697px" /></a><figcaption class="wp-element-caption">Python input &#8211; Jak wprowadzać dane bezpośrednio do kodu w Python?</figcaption></figure>



<h2 class="wp-block-heading">Python input &#8211; obsługa wartości wprowadzonej przez użytkownika</h2>



<p>Jak wcześniej wspomniałem, program który napisaliśmy nie obsługuje błędów i problematycznych wartości, które użytkownik może wprowadzić. Zmieńmy to i obsłużmy przypadki, w których użytkownik wprowadzi:</p>



<ul class="wp-block-list">
<li>inne wartości niż liczbowe</li>



<li>wartości liczbowe ujemne lub większe niż 110</li>
</ul>



<p>Kod poniżej z użyciem <strong>input</strong> wstawiam poniżej:</p>



<pre class="wp-block-code"><code>x = input("What is Your age? ")<br><br>if x.isnumeric() == True:<br>    if int(x) &gt;= 18 and int(x) &lt; 110 and int(x):<br>        print("You hove more than 18 years.")<br>    elif int(x) &gt;= 3 and int(x) &lt; 18:<br>        print("You are under 18.")<br>    else:<br>        print("Please enter correct value.")<br>else:<br>    print("Please enter correct value.")</code></pre>



<figure class="wp-block-image size-full"><a href="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-28.png"><img loading="lazy" decoding="async" width="1697" height="743" src="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-28.png" alt="Python input - obsługa wartości wprowadzonej przez użytkownika" class="wp-image-8348" srcset="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-28.png 1697w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-28-300x131.png 300w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-28-1024x448.png 1024w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-28-768x336.png 768w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-28-1536x673.png 1536w" sizes="auto, (max-width: 1697px) 100vw, 1697px" /></a></figure>



<p></p>



<h2 class="wp-block-heading">Wstawianie wielu funkcji input() jednocześnie w Python</h2>



<p>Warto zaznaczyć, że możesz użyć wielu<strong> funkcji input</strong> jednocześnie w kodzie Python i na tej podstawie zwrócić wartość użytkownikowi aplikacji. Przykład takiej konstrukcji zamieszczam poniżej. W konstrukcji dodatkowo użyłem sposobu łączenia wartości tekstowych, o którym możesz przeczytać więcej w tym artykule: <strong><a href="https://tomaszkenig.pl/kurs-python/ciagi-znakow-w-python-strings/#Wstawianie_fraz_do_ciagu_znakow">Python &#8211; wstawianie fraz do ciągu znaków</a></strong>.</p>



<pre class="wp-block-code"><code>x = input("What is Your name? ")
y = input("What is Your age? ")
z = input("What is Your Country? ")

print("Your name is: %s. You are %s years old and you come from %s" % (x, y, z))</code></pre>



<figure class="wp-block-image size-full"><a href="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-29.png"><img loading="lazy" decoding="async" width="1697" height="743" src="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-29.png" alt="" class="wp-image-8353" srcset="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-29.png 1697w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-29-300x131.png 300w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-29-1024x448.png 1024w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-29-768x336.png 768w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-29-1536x673.png 1536w" sizes="auto, (max-width: 1697px) 100vw, 1697px" /></a><figcaption class="wp-element-caption">Python &#8211; Wstawianie wielu funkcji input() jednocześnie</figcaption></figure>



<p>Dzięki za przeczytanie do końca. Całość kursu Python zamieszczam tutaj: <a href="https://tomaszkenig.pl/kurs-python/">Kurs programowania w Python</a>. Kurs jest stale rozwijany i updatowany. Jeśli masz uwag i co do kursu lub artykułu, możesz je przesłać do mnie za pomocą formularza kontaktowego. Będę wdzięczny za wszelki feedback.</p>



<p>Źródło: <a href="https://www.w3schools.com/">w3schools</a></p>
<p>Artykuł <a href="https://tomaszkenig.pl/kurs-python/user-input-w-python/">User Input w Python</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tomaszkenig.pl/kurs-python/user-input-w-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8339</post-id>	</item>
		<item>
		<title>Szukamy dobrego używanego laptopa</title>
		<link>https://tomaszkenig.pl/technologia/szukamy-dobrego-uzywanego-laptopa/</link>
					<comments>https://tomaszkenig.pl/technologia/szukamy-dobrego-uzywanego-laptopa/#respond</comments>
		
		<dc:creator><![CDATA[Tomasz Kenig]]></dc:creator>
		<pubDate>Thu, 25 May 2023 20:42:46 +0000</pubDate>
				<category><![CDATA[technologia]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[komputery]]></category>
		<category><![CDATA[laptopy]]></category>
		<guid isPermaLink="false">https://tomaszkenig.pl/?p=8417</guid>

					<description><![CDATA[<p>Chciałbyś kupić wydajnego laptopa, ale masz ograniczony budżet? Idealnym rozwiązaniem jest zdecydowanie się na używane urządzenie. Zapoznaj się z naszym artykułem i sprawdź propozycje na dobre, poleasingowe laptopy ze sklepu AMSO. Jesteśmy przekonani, że część z nich przypadnie Ci do gustu i spełni wszystkie Twoje oczekiwania! Tanie i wydajne laptopy HP poleasingowe Decydując się na [&#8230;]</p>
<p>Artykuł <a href="https://tomaszkenig.pl/technologia/szukamy-dobrego-uzywanego-laptopa/">Szukamy dobrego używanego laptopa</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Chciałbyś kupić wydajnego laptopa, ale masz ograniczony budżet? Idealnym rozwiązaniem jest zdecydowanie się na używane urządzenie. Zapoznaj się z naszym artykułem i sprawdź propozycje na dobre, poleasingowe laptopy ze sklepu AMSO. Jesteśmy przekonani, że część z nich przypadnie Ci do gustu i spełni wszystkie Twoje oczekiwania!</p>



<h2 class="wp-block-heading">Tanie i wydajne <strong>laptopy HP</strong> poleasingowe</h2>



<p></p>



<p>Decydując się na używany laptop, wciąż możesz dostać jakościowy produkt od renomowanego producenta. Jedna z lepszych marek obecnych na rynku poleasingowym, to HP. Cieszy się ona ogromnym zainteresowaniem klientów na <strong>amso.pl</strong>.</p>



<p>Na jakie <a href="https://amso.pl/pol_m_Produkty_Laptopy-poleasingowe_Producent_HP-1812.html"><strong>laptopy HP</strong></a> warto zwrócić uwagę? Wśród wyróżniających się modeli należy wymienić HP EliteBook. To flagowy model tego producenta, który jest dostępny w bardzo wielu konfiguracjach. Jeżeli interesuje Cię wysoka wydajność, postaw na sprzęt z procesorem Intel Core i7, 16 GB pamięci RAM i szybkim dyskiem SSD.&nbsp;</p>



<p>Inne <strong>laptopy HP</strong>, które cieszą się dużym powodzeniem zarówno wśród klientów biznesowych, jak i indywidualnych, to urządzenia z serii ProBook. To czternastocalowy, elegancki sprzęt z ekranem o wysokiej rozdzielczości i bardzo przyzwoitymi parametrami. Zachęcamy do zapoznania się ze szczegółami na ich temat bezpośrednio na stronie sklepu <strong>AMSO</strong>.&nbsp;</p>



<h2 class="wp-block-heading">Najlepsze używane <strong>laptopy Lenovo</strong></h2>



<p></p>



<figure class="wp-block-image"><img decoding="async" src="https://tomaszkenig.pl/wp-content/uploads/2023/05/849822.jpg" alt="student, typing, keyboard"/><figcaption class="wp-element-caption">Najlepsze używane <strong>laptopy Lenovo</strong></figcaption></figure>



<p>Lenovo to kolejny producent, którego urządzenia są bardzo chętnie kupowane w sklepie <strong>AMSO</strong>. Laptopy tej marki od lat kojarzą się z urządzeniami biznesowymi, ale nie tylko. Jeżeli zależy Ci na uniwersalnej maszynie, może to być idealny wybór dla Ciebie!&nbsp;</p>



<p>Seria ThinkPad to najbardziej rozpoznawalne <a href="https://amso.pl/pol_m_Produkty_Laptopy-poleasingowe_Producent_Lenovo-1811.html"><strong>laptopy Lenovo</strong></a>. Charakterystyczny czerwony guzik kojarzy się nierozerwalnie z przestrzenią biurową. Możliwości tych modeli są jednak dużo większe. Na <strong>amso.pl</strong> zakupisz sprzęt z bardzo wydajnymi procesorami z 7 generacji Intel Core, pamięcią RAM nawet do 16 GB i dedykowanymi kartami graficznymi. Wiele z dostępnych urządzeń ma możliwość wyświetlania obrazu w rozdzielczości Full HD, a także opcje dotykowe.&nbsp;</p>



<p>Jeżeli interesują Cię też inne <strong>laptopy Lenovo</strong> z oferty <strong>AMSO</strong>, zapoznaj się z urządzeniami z serii IdeaPad. To nowoczesne i eleganckie urządzenia, które są dostępne w bardzo przystępnych cenach i świetnie nadają się do pracy.&nbsp;</p>



<h2 class="wp-block-heading">Stylowe <strong>ultrabooki</strong> w dobrych cenach</h2>



<figure class="wp-block-image"><img decoding="async" src="https://tomaszkenig.pl/wp-content/uploads/2023/05/620822.jpg" alt="office, business, accountant"/><figcaption class="wp-element-caption">Stylowe <strong>ultrabooki</strong> w dobrych cenach</figcaption></figure>



<p>Zależy Ci na największym komforcie użytkowania i równocześnie nie chcesz iść na kompromisy w kwestii osiągów? W takim razie polecamy sprawdzić ofertę na poleasingowe <strong>ultrabooki</strong>.</p>



<p>Na <strong>amso.pl</strong> znajdziesz ultracienkie laptopy od najlepszych producentów. Nie tylko HP i Lenovo, ale także Dell, Toshiba, Fujitsu czy Apple. <strong>Ultrabooki </strong>łączą w sobie wydajne i niezawodne podzespoły ze świetnym i praktycznym designem. Są mniejsze i lżejsze niż tradycyjne laptopy, więc idealnie sprawdzają się na przykład podczas podróży czy pracowania poza biurem.</p>



<p><br>Przekonaj się sam i sprawdź pełną ofertę na <a href="https://amso.pl/pol_m_Produkty_Laptopy-poleasingowe_Typ-laptopa_Ultrabooki-1831.html"><strong>ultrabooki</strong></a> ze sklepu <strong>AMSO</strong>. Jesteśmy pewni, że znajdziesz wśród nich poleasingowy model, który w pełni spełni wszystkie Twoje oczekiwania i będzie dostępny w bardzo atrakcyjnej cenie.</p>
<p>Artykuł <a href="https://tomaszkenig.pl/technologia/szukamy-dobrego-uzywanego-laptopa/">Szukamy dobrego używanego laptopa</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tomaszkenig.pl/technologia/szukamy-dobrego-uzywanego-laptopa/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8417</post-id>	</item>
		<item>
		<title>Instrukcja warunkowa IIF w SQL Server</title>
		<link>https://tomaszkenig.pl/kurs-sql-server/instrukcja-warunkowa-iif-w-sql-server/</link>
					<comments>https://tomaszkenig.pl/kurs-sql-server/instrukcja-warunkowa-iif-w-sql-server/#respond</comments>
		
		<dc:creator><![CDATA[Tomasz Kenig]]></dc:creator>
		<pubDate>Tue, 28 Feb 2023 07:53:42 +0000</pubDate>
				<category><![CDATA[Kurs SQL Server]]></category>
		<category><![CDATA[kurs sql server]]></category>
		<category><![CDATA[mssql]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[t-sql]]></category>
		<category><![CDATA[transact-SQL]]></category>
		<guid isPermaLink="false">https://tomaszkenig.pl/?p=8191</guid>

					<description><![CDATA[<p>SQL Server IIF &#8211; instrukcja warunkowa (IIF THEN ELSE) Obok instrukcji SELECT CASE w SQL Server, w poleceniach SELECT możesz użyć uproszczonej instrukcji MsSQL IIF. Nie jest to ta sama instrukcja, którą stosujesz w blokach procedur T-SQL (T-SQL IF). Instrukcja IIF stosowana jest w języku zapytań, nie języku proceduralnym. Poniżej wyjaśniam różnicę pomiędzy trzeba podobnymi [&#8230;]</p>
<p>Artykuł <a href="https://tomaszkenig.pl/kurs-sql-server/instrukcja-warunkowa-iif-w-sql-server/">Instrukcja warunkowa IIF w SQL Server</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">SQL Server IIF &#8211; instrukcja warunkowa (IIF THEN ELSE)</h2>



<p>Obok instrukcji <a href="https://tomaszkenig.pl/kurs-sql-server/instrukcja-case-sql-server/">SELECT CASE w SQL Server</a>, w poleceniach SELECT możesz użyć uproszczonej instrukcji <strong>MsSQL IIF</strong>. Nie jest to ta sama instrukcja, którą stosujesz w blokach procedur <strong>T-SQL (<a href="https://tomaszkenig.pl/kurs-sql-server/t-sql-if-instrukcja-warunkowa-if-then-else-w-transact-sql/">T-SQL IF</a>)</strong>. Instrukcja IIF stosowana jest w języku zapytań, nie języku proceduralnym. Poniżej wyjaśniam <strong>różnicę pomiędzy trzeba podobnymi konstrukcjami</strong>, gdyż ich podobieństwo może być na początku mylące.</p>



<ul class="wp-block-list">
<li><strong>MsSQL IIF</strong> &#8211; Najprostsza instrukcja warunkowa, której możesz użyć w SQL Server. Instrukcji tej możesz używać w dowolnym poleceniu <a href="https://tomaszkenig.pl/kurs-sql-server/operacje-dql-dml-dcl-ddl-mssql/">DML i DQL</a>. To właśnie o tej instrukcji napisany jest ten artykuł.</li>



<li><strong>MsSQL CASE</strong> &#8211; Instrukcja warunkowa rozszerzona. Instrukcji tej możesz używać w dowolnym poleceniu <a href="https://tomaszkenig.pl/kurs-sql-server/operacje-dql-dml-dcl-ddl-mssql/">DML i DQL</a>. Możesz jej używać zamiennie z instrukcją IIF, jednak zazwyczaj instrukcji SELECT CASE warto używać do <strong>bardziej rozbudowanych przypadków</strong>. W prostych przypadkach (pojedynczy warunek bez zagnieżdżeń) zalecam używanie IIF.  </li>



<li><strong>T-SQL IF</strong> &#8211; Instrukcja warunkowa w języku proceduralnym SQL Sever. Nie wiąż jej bezpośrednio z językiem SQL, a językiem proceduralnym baz danych. Dowiesz się o tym więcej w kolejnych rozdziałach kursu (<a href="https://tomaszkenig.pl/kurs-sql-server/t-sql-if-instrukcja-warunkowa-if-then-else-w-transact-sql/">T-SQL IF</a> THEN ELSE)</li>
</ul>



<h2 class="wp-block-heading">Jak używać instrukcji warunkowej IIF w MsSQL?</h2>



<p><strong>Składnia MsSQL IIF</strong> THEN ELSE wygląda następująco:</p>



<pre class="wp-block-code"><code>IIF(warunek_logic, THEN_instrukcja_lub_wartosc_gdy_warunek_spelniony, ELSE_instrukcja_lub_wartosc_gdy_warunek_NIE_spelniony)</code></pre>



<p>Poniżej prosty kod przykład instrukcji SQL Server IIF na bazie <a href="https://tomaszkenig.pl/kurs-sql-server/wgrywanie-przykladowej-bazy-danych-w-sql-server/">AdventureWorks</a></p>



<pre class="wp-block-code"><code>USE AdventureWorks2016_EXT
go

SELECT
ProductID,
Name,
iif(standardcost >= 200, '200 and more', 'less than 200') as standard_cost
FROM &#91;AdventureWorks2016_EXT].&#91;Production].&#91;Product]
;</code></pre>



<figure class="wp-block-image size-full"><a href="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-24.png"><img loading="lazy" decoding="async" width="1662" height="889" src="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-24.png" alt="Zagnieżdżona instrukcja IIF w SQL Server, MsSQL, Transact-SQL" class="wp-image-8322" srcset="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-24.png 1662w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-24-300x160.png 300w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-24-1024x548.png 1024w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-24-768x411.png 768w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-24-1536x822.png 1536w" sizes="auto, (max-width: 1662px) 100vw, 1662px" /></a><figcaption class="wp-element-caption">SQL Server IIF &#8211; Instrukcja warunkowa IIF THEN ELSE w SQL Server</figcaption></figure>



<h2 class="wp-block-heading">Zagnieżdżona instrukcja IIF w SQL Server, MsSQL, Transact-SQL</h2>



<p>Instrukcja IIF może być <strong>zagnieżdżona w innej instrukcji IIF</strong>. Szczerze przyznam, że do trudniejszych przypadków powinieneś używać instrukcji <strong><a href="https://tomaszkenig.pl/kurs-sql-server/instrukcja-case-sql-server/">SQL SELECT CASE</a></strong>. Nie ma jednak przeszkód, by zrobić IIF wewnątrz innej instrukcji IIF. Kolejną instrukcję IIF możesz wstawić zarówno w część <strong>THEN</strong>, jak i w część <strong>ELSE</strong>. Poniżej przykład:</p>



<pre class="wp-block-code"><code>USE AdventureWorks2016_EXT
go

SELECT
ProductID,
Name,
iif(standardcost >= 200,
    iif(standardcost &lt;= 300, 'more than 200 and less than 300', 'more than 300'), 
'less than 200') as standard_cost
FROM &#91;AdventureWorks2016_EXT].&#91;Production].&#91;Product]
;</code></pre>



<p></p>



<figure class="wp-block-image size-full"><a href="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-25.png"><img loading="lazy" decoding="async" width="1662" height="889" src="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-25.png" alt="Zagnieżdżona instrukcja IIF w SQL Server, MsSQL, Transact-SQL" class="wp-image-8324" srcset="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-25.png 1662w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-25-300x160.png 300w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-25-1024x548.png 1024w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-25-768x411.png 768w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-25-1536x822.png 1536w" sizes="auto, (max-width: 1662px) 100vw, 1662px" /></a><figcaption class="wp-element-caption">Zagnieżdżona instrukcja IIF w SQL Server, MsSQL, Transact-SQL</figcaption></figure>



<p></p>



<p>Dzięki za przeczytanie artykułu do końca. Jeśli chcesz nauczyć się pisania skryptów w SQL Server, tutaj link do całego kursu: <a href="https://tomaszkenig.pl/kurs-sql-server/pivot-i-unpivot-w-sql-server/">Kurs </a><a href="https://tomaszkenig.pl/kurs-sql-server/">MsSQL</a>. W kursie nauczysz się w jaki sposób prawidłowo pisać kod SQL, a także poznasz ciekawe przykłady użycia SQL i baz danych. </p>
<p>Artykuł <a href="https://tomaszkenig.pl/kurs-sql-server/instrukcja-warunkowa-iif-w-sql-server/">Instrukcja warunkowa IIF w SQL Server</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tomaszkenig.pl/kurs-sql-server/instrukcja-warunkowa-iif-w-sql-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8191</post-id>	</item>
		<item>
		<title>Pivot i UnPivot w SQL Server</title>
		<link>https://tomaszkenig.pl/kurs-sql-server/pivot-i-unpivot-w-sql-server/</link>
					<comments>https://tomaszkenig.pl/kurs-sql-server/pivot-i-unpivot-w-sql-server/#respond</comments>
		
		<dc:creator><![CDATA[Tomasz Kenig]]></dc:creator>
		<pubDate>Fri, 24 Feb 2023 23:28:19 +0000</pubDate>
				<category><![CDATA[Kurs SQL Server]]></category>
		<category><![CDATA[kurs mssql]]></category>
		<category><![CDATA[kurs sql server]]></category>
		<category><![CDATA[mssql]]></category>
		<category><![CDATA[pivot sql]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[t-sql]]></category>
		<category><![CDATA[transact sql]]></category>
		<category><![CDATA[unpivot sql]]></category>
		<guid isPermaLink="false">https://tomaszkenig.pl/?p=2585</guid>

					<description><![CDATA[<p>Czym są polecenia Pivot i UnPivot w SQL Server? Polecenia Pivot i UnPivot możesz skojarzyć na pierwszy rzut oka z tabelami przestawnymi. W SQL Server jest możliwość ustawienia wartości rekordów z danej kolumny jako nazwy kolumn. Możesz też zrobić operację odwrotną, a więc nazwy kolumn zamienić na dane. Pivot i UnPivot to już zaawansowany SQL, [&#8230;]</p>
<p>Artykuł <a href="https://tomaszkenig.pl/kurs-sql-server/pivot-i-unpivot-w-sql-server/">Pivot i UnPivot w SQL Server</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Czym są polecenia Pivot i UnPivot w SQL Server?</h2>



<p>Polecenia <strong>Pivot</strong> i <strong>UnPivot</strong> możesz skojarzyć na pierwszy rzut oka z tabelami przestawnymi. W SQL Server jest możliwość ustawienia <strong>wartości rekordów z danej kolumny jako nazwy kolumn</strong>. Możesz też zrobić operację odwrotną, a więc <strong>nazwy kolumn zamienić na dane</strong>. Pivot i UnPivot to już zaawansowany SQL, jednak warto poznać te techniki, by znacząco uprościć sobie pracę.</p>



<p>W innych językach SQL, jak Presto, czy HQL, podobne konstrukcje nazywają się Lateral View  lub Cross Join Unnest. Poniżej zobrazowanie tego, co jesteś w stanie zrobić za pomocą poleceń Pivot i UnPiot w MsSQL.</p>



<p><strong>Zobrazowanie Polecenia Pivot SQL:</strong></p>



<figure class="wp-block-image size-full"><a href="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-19.png"><img loading="lazy" decoding="async" width="998" height="302" src="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-19.png" alt="" class="wp-image-8284" srcset="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-19.png 998w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-19-300x91.png 300w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-19-768x232.png 768w" sizes="auto, (max-width: 998px) 100vw, 998px" /></a><figcaption class="wp-element-caption">MsSQL Pivot, Transact SQL</figcaption></figure>



<p></p>



<p><strong>Zobrazowanie Polecenia UnPivot MsSQL:</strong></p>



<figure class="wp-block-image size-full"><a href="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-22.png"><img loading="lazy" decoding="async" width="995" height="338" src="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-22.png" alt="" class="wp-image-8289" srcset="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-22.png 995w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-22-300x102.png 300w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-22-768x261.png 768w" sizes="auto, (max-width: 995px) 100vw, 995px" /></a><figcaption class="wp-element-caption">MSSQL UnPivot, Transact SQL</figcaption></figure>



<p></p>



<p>Fajne prawda? Najlepsze w tym wszystkim jest to, że nie musisz niepotrzebnie joinować wiele razy tabeli, a zapytanie jest wydajne! W tym artykule poznasz najważniejsze techniki tworzenia tych konstrukcji. Poznasz także metodę tworzenia <strong>dynamicznych SQL</strong> <strong>UnPivot </strong>i <strong>Pivot </strong>w SQL Server.</p>



<h3 class="wp-block-heading">Pivot i Unpivot w SQL MsSQL &#8211; Przykładowe dane</h3>



<p>W artykule dowiesz się jak korzystać z poleceń zarówno na danych uproszczonych, jak i danych z bazy <strong>AdventureWorks</strong>. Dla celów ćwiczenia utwórz prostą tabelę danych i wgraj do niej przykładowe rekordy. </p>



<p>Tworzenie tabeli:</p>



<pre class="wp-block-code"><code>CREATE TABLE &#91;dbo].&#91;Table_1](<br>&#91;Id] &#91;bigint] NOT NULL,<br>&#91;BrandName] <a href="255">nvarchar</a> NULL,<br>&#91;ProductionCountry] <a href="255">nvarchar</a> NULL,<br>&#91;Quantity] &#91;bigint] NULL)<br>;</code></pre>



<p>Wgrywanie rekordów:</p>



<pre class="wp-block-code"><code>INSERT INTO &#91;dbo].&#91;Table_1] (ID, BrandName, ProductionCountry, Quantity) VALUES (1, 'BMW', 'Germany', 150000);<br>INSERT INTO &#91;dbo].&#91;Table_1] (ID, BrandName, ProductionCountry, Quantity) VALUES (2, 'BMW', 'Belgium', 200000);<br>INSERT INTO &#91;dbo].&#91;Table_1] (ID, BrandName, ProductionCountry, Quantity) VALUES (3, 'Ford', 'France', 50000);<br>INSERT INTO &#91;dbo].&#91;Table_1] (ID, BrandName, ProductionCountry, Quantity) VALUES (4, 'Ford', 'USA', 350000);<br>INSERT INTO &#91;dbo].&#91;Table_1] (ID, BrandName, ProductionCountry, Quantity) VALUES (5, 'Ford', 'Germany', 100000);<br>INSERT INTO &#91;dbo].&#91;Table_1] (ID, BrandName, ProductionCountry, Quantity) VALUES (6, 'Ford', 'Germany', 200000);<br>INSERT INTO &#91;dbo].&#91;Table_1] (ID, BrandName, ProductionCountry, Quantity) VALUES (7, 'Audi', 'Germany', 1000000);<br>INSERT INTO &#91;dbo].&#91;Table_1] (ID, BrandName, ProductionCountry, Quantity) VALUES (8, 'Mercedes', 'Germany', 150000);<br>INSERT INTO &#91;dbo].&#91;Table_1] (ID, BrandName, ProductionCountry, Quantity) VALUES (9, 'Fiat', 'Italy', 520000);<br>INSERT INTO &#91;dbo].&#91;Table_1] (ID, BrandName, ProductionCountry, Quantity) VALUES (10, 'Fiat', 'Poland', 4700000);<br>INSERT INTO &#91;dbo].&#91;Table_1] (ID, BrandName, ProductionCountry, Quantity) VALUES (11, 'Seat', 'Germany', 230000);<br>INSERT INTO &#91;dbo].&#91;Table_1] (ID, BrandName, ProductionCountry, Quantity) VALUES (12, 'Seat', 'Spain', 1000050);</code></pre>



<figure class="wp-block-image size-large"><a href="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-16.png"><img loading="lazy" decoding="async" width="1024" height="548" src="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-16-1024x548.png" alt="" class="wp-image-8275" srcset="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-16-1024x548.png 1024w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-16-300x160.png 300w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-16-768x411.png 768w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-16-1536x822.png 1536w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-16.png 1662w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Pivot i UnPivot w MsSQL</figcaption></figure>



<h2 class="wp-block-heading">Pivot w MsSQL</h2>



<p>Ok, masz już do dyspozycji przykładowe dane. Teraz pora na utworzenie<strong> skryptu SQL</strong>. Z uwagi na to, że konstrukcja nieco odbiega od standardowego SQL, rozpiszę to w trzech krokach. Wynik, który chcemy uzyskać to suma produkcji samochodów, z nazwą marki samochodu w kolumnie (BrandName). Oczywiście zamiast sumy możemy policzyć, <strong>średnią</strong>, <strong>minimum</strong>, czy <strong>maksimum</strong>.</p>



<p><strong>Krok 1: Dane źródłowe</strong></p>



<p>Na początek wskaż, co jest źródłem danych za pomocą polecenia <a href="https://tomaszkenig.pl/kurs-sql-server/podstawy-budowania-zapytan-select-w-sql-server/">mssql select</a>:</p>



<pre class="wp-block-code"><code>select BrandName, Quantity from &#91;dbo].&#91;Table_1];</code></pre>



<p><strong>Krok 2: Wskazanie nowych kolumn</strong></p>



<p>Wskaż wartości, które mają przyjąć postać kolumny. Wartości wprowadź ręcznie <strong>hardkodując</strong> je. W kolejnych przykładach dowiesz się, jak wskazywać wartości dynamicznie, bez względu na ich liczbę. Krok 1 i 2 są od siebie oddzielone nawiasami oraz frazą <strong>PIVOT</strong>. Nazwy bloków <strong>SRC </strong>i <strong>PVT </strong>to tylko aliasy, tak więc możesz wykorzystać tutaj inne nazwy. <strong>Pamiętaj też o nawiasach kwadratowych</strong>.</p>



<pre class="wp-block-code"><code>SELECT &#91;BMW], &#91;Ford], &#91;Audi], &#91;Mercedes], &#91;Fiat], &#91;Seat] FROM
(
select BrandName,  Quantity from &#91;dbo].&#91;Table_1]
) as SRC
PIVOT
(
sum(Quantity)
FOR BrandName IN (&#91;BMW], &#91;Ford], &#91;Audi], &#91;Mercedes], &#91;Fiat], &#91;Seat])
) as PVT
;</code></pre>



<p><strong>Krok 3: Zapytanie zwracające dane</strong></p>



<p>Wstaw nad zapytaniem polecenie <strong>SELECT</strong></p>



<pre class="wp-block-code"><code>SELECT &#91;BMW], &#91;Ford], &#91;Audi], &#91;Mercedes], &#91;Fiat], &#91;Seat] FROM<br>(<br>select BrandName, Quantity from &#91;dbo].&#91;Table_1]<br>) as SRC<br>PIVOT<br>(<br>sum(Quantity)<br>FOR BrandName IN (&#91;BMW], &#91;Ford], &#91;Audi], &#91;Mercedes], &#91;Fiat], &#91;Seat])<br>) as PVT<br>;</code></pre>



<p>Jeśli wszystko poszło zgodnie z planem, powinieneś uzyskać mniej więcej taki wynik. Oczywiście zamiast sumy możesz użyć innej <a href="https://tomaszkenig.pl/kurs-sql-server/funkcje-agregujace-mssql/">funkcji agregującej mssql</a>, jak <strong>max</strong>, <strong>min</strong>, czy <strong>avg</strong>.</p>



<figure class="wp-block-image size-large"><a href="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-17.png"><img loading="lazy" decoding="async" width="1024" height="548" src="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-17-1024x548.png" alt="" class="wp-image-8280" srcset="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-17-1024x548.png 1024w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-17-300x160.png 300w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-17-768x411.png 768w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-17-1536x822.png 1536w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-17.png 1662w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Pivot w MsSQL &#8211; Kurs SQL Server</figcaption></figure>



<p>To nie wszystko, spróbuj rozwinąć swoje zapytanie i w rekordach dodać wartości z kolumny ProductionCountry. Dodaj kolumnę w kroku 1 i 3 zgodnie z poniższym kodem SQL:</p>



<pre class="wp-block-code"><code>SELECT ProductionCountry, &#91;BMW], &#91;Ford], &#91;Audi], &#91;Mercedes], &#91;Fiat], &#91;Seat] FROM<br>(<br>select BrandName, ProductionCountry, Quantity from &#91;dbo].&#91;Table_1]<br>) as SRC<br>PIVOT<br>(<br>sum(Quantity)<br>FOR BrandName IN (&#91;BMW], &#91;Ford], &#91;Audi], &#91;Mercedes], &#91;Fiat], &#91;Seat])<br>) as PVT<br>;</code></pre>



<figure class="wp-block-image size-large"><a href="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-18.png"><img loading="lazy" decoding="async" width="1024" height="548" src="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-18-1024x548.png" alt="" class="wp-image-8282" srcset="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-18-1024x548.png 1024w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-18-300x160.png 300w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-18-768x411.png 768w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-18-1536x822.png 1536w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-18.png 1662w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">SQL Server &#8211; rekordy w nazwy kolumn</figcaption></figure>



<h2 class="wp-block-heading">UnPivot w SQL Server</h2>



<p>Teraz wyobraź sobie sytuację odwrotną. Masz do dyspozycji dane <strong>uporządkowane w kolumnach</strong>. Chciałbyś nazwy tych kolumn użyć jako wartości rekordu. Wróć na chwilę do poprzedniego przykładu i utwórz na podstawie wyniku tabelę <strong>dbo.Table_2</strong> za pomocą polecenia <strong><a href="https://tomaszkenig.pl/kurs-sql-server/tabele-w-sql-server/#Tworzenie_tabeli_na_podstawie_wyniku_zapytania_SELECT_w_MsSQL">MsSQL SELECT INTO</a></strong> w następujący sposób:</p>



<pre class="wp-block-code"><code>SELECT ProductionCountry, &#91;BMW], &#91;Ford], &#91;Audi], &#91;Mercedes], &#91;Fiat], &#91;Seat]<br>INTO &#91;dbo].&#91;Table_2]<br>FROM<br>(<br>select BrandName, ProductionCountry, Quantity from &#91;dbo].&#91;Table_1]<br>) as SRC<br>PIVOT<br>(<br>sum(Quantity)<br>FOR BrandName IN (&#91;BMW], &#91;Ford], &#91;Audi], &#91;Mercedes], &#91;Fiat], &#91;Seat])<br>) as PVT<br>;</code></pre>



<pre class="wp-block-code"><code>SELECT * from &#91;dbo].&#91;Table_2];</code></pre>



<p>Czas na właściwy kod polecenia UnPivot. Podobnie jak w poprzednim przykładzie, zaprezentuję go w <strong>trzech krokach</strong>: </p>



<p><strong>Krok 1: Wskazanie danych źródłowych</strong></p>



<p>Wskaż dane źródłowe, które chcesz uporządkować jako rekordy.</p>



<pre class="wp-block-code"><code>SELECT ProductionCountry, BMW, Ford, Audi, Mercedes, Fiat, Seat from &#91;dbo].&#91;Table_2];</code></pre>



<p><strong>Krok 2: UnPivot</strong></p>



<p>Określ nazwę dla <strong>nowych kolumn</strong>. W naszym przykładzie w kolumna z wartością liczbową nazwana zostanie <strong>Quantity</strong>, a kolumna z wartościami przejętymi po nazwach kolumn źródłowych: <strong>CarBrand</strong>.</p>



<pre class="wp-block-code"><code>(<br>SELECT ProductionCountry, BMW, Ford, Audi, Mercedes, Fiat, Seat from &#91;dbo].&#91;Table_2]<br>) SRC<br>UNPIVOT<br>(Qyantity FOR CarBrand IN<br>(BMW, Ford, Audi, Mercedes, Fiat, Seat)<br>)AS UPVT</code></pre>



<p><strong>Krok 3: Zapytanie zwracające wynik</strong></p>



<p>Wskaż w nadrzędnym poleceniu SELECT to, co chcesz widzieć jako wynik:</p>



<pre class="wp-block-code"><code>SELECT ProductionCountry, CarBrand, Qyantity FROM<br>(<br>SELECT ProductionCountry, BMW, Ford, Audi, Mercedes, Fiat, Seat from &#91;dbo].&#91;Table_2]<br>) SRC<br>UNPIVOT<br>(Qyantity FOR CarBrand IN<br>(BMW, Ford, Audi, Mercedes, Fiat, Seat)<br>)AS UPVT<br>;</code></pre>



<figure class="wp-block-image size-large"><a href="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-21.png"><img loading="lazy" decoding="async" width="1024" height="548" src="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-21-1024x548.png" alt="" class="wp-image-8288" srcset="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-21-1024x548.png 1024w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-21-300x160.png 300w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-21-768x411.png 768w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-21-1536x822.png 1536w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-21.png 1662w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">UnPivot w SQL Server</figcaption></figure>



<p></p>



<h2 class="wp-block-heading">Dynamiczny Pivot w SQL Server / Transact-SQL</h2>



<p>W powyższych przykładach <strong>hardcodowaliśmy wartości kolumn</strong>. Były to oczywiście przykłady modelowe i szczerze przyznam, że w realnej pracy każdy podobny skrypt raczej powinieneś <strong>zautomatyzować </strong>i <strong>uodpornić na błędy</strong>. Jednym z problemów, który możesz napotkać to oczywiście dodanie dodatkowej wartości do kolumny, której <strong>nie przewidziałeś i nie zahadrkodowałeś</strong>.</p>



<p>Z pomocą przychodzi nam tutaj <strong>dynamiczny Transact-SQL</strong>. To, co będziesz musiał zrobić, to zmodyfikować swój kod i użyć zmiennej T-SQL, które przechowa zmieniające się wartości kolumn. </p>



<p><strong>Dynamiczny SQL</strong> jest najlepszym sposobem na wykonanie poleceń <strong>Pivot</strong>. Jest to sposób odporny na <strong>zmiany wartości</strong> w kolumnie, którą chcesz przekształcić oraz <strong>dodanie </strong>i <strong>usuwanie </strong>wartości. Tę metodę powinieneś wykorzystywać w swoich rozwiązaniach i jest ona najlepsza, jeśli rozwiązanie ma być <strong>zautomatyzowane</strong>.</p>



<p>W dużym skrócie:</p>



<ul class="wp-block-list">
<li>Tworzymy <a href="https://tomaszkenig.pl/kurs-sql-server/zmienne-w-transact-sql/">zmienne T-SQL</a> dla zapytania za pomocą którego uzyskasz listę unikalnych wartości dla nazw kolumn (@BrandNameString ). By wstawić zmienne po przecinku w nawiasach kwadratowych wykorzystaj funkcje <a href="https://tomaszkenig.pl/sql-server/funkcje-split_string-i-string_agg-w-sql-server/">MSSQL STRING_AGG()</a> i QUOTENAME(). Funkcja QUOTENAME  otacza wartość nawiasem kwadratowym.</li>



<li>Tworzymy <a href="https://tomaszkenig.pl/kurs-sql-server/zmienne-w-transact-sql/">zmienne T-SQL</a> dla zapytania pivot (@PivotQuery)</li>



<li>Implementujemy zmienne w kodzie</li>



<li>Za pomocą polecenia EXECUTE sp_executesql odpalamy dynamiczne polecenie tworzące pivot</li>
</ul>



<pre class="wp-block-code"><code>declare @BrandNameString NVARCHAR(MAX)
declare @PivotQuery NVARCHAR(MAX)
SET @BrandNameString = (SELECT STRING_AGG(quotename(BrandName), ', ') as BrandName FROM (SELECT DISTINCT BrandName FROM Table_1) x)
print @BrandNameString

SET @PivotQuery =
'SELECT ProductionCountry, ' + @BrandNameString + '
FROM
(
select BrandName, ProductionCountry, Quantity from &#91;dbo].&#91;Table_1]
) as SRC
PIVOT
(
sum(Quantity)
FOR BrandName IN (' + @BrandNameString + ')
) as PVT
;'

EXECUTE sp_executesql @PivotQuery</code></pre>



<h2 class="wp-block-heading">Dynamiczny UnPivot w SQL Server / Transact-SQL</h2>



<p>Podobnie jak w przypadku poprzednim, polecenie UnPivot w docelowej formie powinno być wykonywane <strong>dynamicznym SQL</strong>, by uodpornić skrypt na zmiany wartości kolumn. Polecenie te możemsz wykonać w ten sposób także wtedy, gdy <strong>nie znamy nazw kolumn</strong>. Przykład jest nieco trudniejszy, gdyż wymaga wyciągnięcia metadanych kolumn z <strong>tabel systemowych</strong> &#8211; w ten sposób wiemy, które kolumny mają <strong><a href="https://tomaszkenig.pl/kurs-sql-server/glowne-typy-danych-sql-server-transact-sql/">typy liczbowe</a></strong> (np bigint, in , float, real) Przykład poniżej:</p>



<p>Jak sprawdzić, w MsSQL, które dane mają typy liczbowe?</p>



<pre class="wp-block-code"><code>SELECT<br>c.name 'Column Name',t.Name 'Data type'<br>FROM<br>sys.columns c JOIN sys.types t ON c.user_type_id = t.user_type_id<br>WHERE<br>c.object_id = OBJECT_ID('dbo.Table_2') and t.name in ('int', 'bigint', 'float', 'real');</code></pre>



<p>Właściwy kod dla dynamicznego SQL UnPivot:</p>



<pre class="wp-block-code"><code>declare @BrandNameColumn NVARCHAR(MAX)
declare @UnPivotQuery NVARCHAR(MAX)

SET @BrandNameColumn = (
SELECT STRING_AGG(Column_Name, ', ') as BrandName FROM
(
SELECT c.name 'Column_Name' FROM sys.columns c JOIN sys.types t ON
c.user_type_id = t.user_type_id WHERE c.object_id = OBJECT_ID('dbo.Table_2') and t.name in ('int', 'bigint', 'float', 'real')
) x)

SET @UnPivotQuery =
'SELECT ProductionCountry, CarBrand, Qyantity FROM
(
 SELECT ProductionCountry, ' + @BrandNameColumn + ' from &#91;dbo].&#91;Table_2]
) SRC
 UNPIVOT
(Qyantity FOR CarBrand IN
(' + @BrandNameColumn + ')
)AS UPVT
;

'EXECUTE sp_executesql @UnPivotQuery</code></pre>



<figure class="wp-block-image size-large"><a href="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-23.png"><img loading="lazy" decoding="async" width="1024" height="548" src="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-23-1024x548.png" alt="" class="wp-image-8302" srcset="https://tomaszkenig.pl/wp-content/uploads/2023/02/image-23-1024x548.png 1024w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-23-300x160.png 300w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-23-768x411.png 768w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-23-1536x822.png 1536w, https://tomaszkenig.pl/wp-content/uploads/2023/02/image-23.png 1662w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">MsSQL / Transact-SQL &#8211; Dynamiczny UnPivot</figcaption></figure>



<p>Źródło: <a href="https://learn.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver16">Microsoft</a></p>



<p>Dzięki za przeczytanie całości. Kurs MSSQL zamieszczam pod tym adresem: <a href="https://tomaszkenig.pl/kurs-sql-server/">Kurs SQL Server</a>. Znajdziesz tam przykłady użycia T-SQL. Kurs jest stale rozwijany.</p>



<p></p>



<p></p>



<p></p>
<p>Artykuł <a href="https://tomaszkenig.pl/kurs-sql-server/pivot-i-unpivot-w-sql-server/">Pivot i UnPivot w SQL Server</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tomaszkenig.pl/kurs-sql-server/pivot-i-unpivot-w-sql-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2585</post-id>	</item>
		<item>
		<title>Jak działa VPN?</title>
		<link>https://tomaszkenig.pl/technologia/jak-dziala-vpn/</link>
					<comments>https://tomaszkenig.pl/technologia/jak-dziala-vpn/#comments</comments>
		
		<dc:creator><![CDATA[Tomasz Kenig]]></dc:creator>
		<pubDate>Fri, 24 Feb 2023 22:24:32 +0000</pubDate>
				<category><![CDATA[technologia]]></category>
		<category><![CDATA[bezpieczeństwo]]></category>
		<category><![CDATA[certyfikaty ssl]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[vpn]]></category>
		<guid isPermaLink="false">https://tomaszkenig.pl/?p=8264</guid>

					<description><![CDATA[<p>VPN, czyli Virtual Private Network, to technologia umożliwiająca bezpieczne połączenie zdalne pomiędzy dwoma urządzeniami. W tym poradniku przedstawię, jak działa VPN, w tym jego historię, protokoły, sposoby komunikacji i wszystkie inne istotne aspekty. Historia VPN Pierwsze rozwiązania VPN pojawiły się w latach 90. XX wieku i miały na celu umożliwienie zdalnego dostępu do zasobów sieciowych. [&#8230;]</p>
<p>Artykuł <a href="https://tomaszkenig.pl/technologia/jak-dziala-vpn/">Jak działa VPN?</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>VPN, czyli Virtual Private Network, to technologia umożliwiająca bezpieczne połączenie zdalne pomiędzy dwoma urządzeniami. W tym poradniku przedstawię, jak działa VPN, w tym jego historię, protokoły, sposoby komunikacji i wszystkie inne istotne aspekty.</p>



<h2 class="wp-block-heading">Historia VPN</h2>



<p>Pierwsze rozwiązania VPN pojawiły się w latach 90. XX wieku i miały na celu umożliwienie zdalnego dostępu do zasobów sieciowych. Pierwsze implementacje VPN polegały na użyciu tunelowania protokołów warstwy drugiej (np. PPP, SLIP) przez internet.</p>



<p>Później, wraz z rozwojem internetu i coraz większymi zagrożeniami związanymi z bezpieczeństwem w sieci, VPN stało się popularnym narzędziem zarówno dla przedsiębiorstw, jak i indywidualnych użytkowników. Wraz z rozwojem technologii VPN powstawały coraz bardziej zaawansowane i skomplikowane protokoły.</p>



<h2 class="wp-block-heading">Protokoły VPN</h2>



<p>VPN wykorzystuje różne protokoły do utworzenia bezpiecznego połączenia pomiędzy dwoma urządzeniami. Poniżej przedstawiam najpopularniejsze z nich:</p>



<ul class="wp-block-list">
<li><strong>PPTP</strong> (Point-to-Point Tunneling Protocol) &#8211; jest to protokół tunelowania warstwy drugiej. Umożliwia połączenie zdalne do sieci prywatnej, ale jest uważany za nieszyfrowany i mało bezpieczny.</li>



<li><strong>L2TP</strong> (Layer 2 Tunneling Protocol) &#8211; jest to protokół tunelowania warstwy drugiej, który korzysta z protokołu IPSec (Internet Protocol Security) do szyfrowania danych. L2TP jest bardziej bezpieczny niż PPTP.</li>



<li><strong>IPSec</strong> &#8211; jest to protokół bezpieczeństwa warstwy trzeciej, który zapewnia szyfrowanie danych i uwierzytelnianie użytkowników. Może być używany w połączeniach zdalnych, ale także w sieciach VPN między dwoma urządzeniami.</li>



<li><strong>OpenVPN</strong> &#8211; jest to protokół VPN typu SSL (czytaj też: <a href="https://tomaszkenig.pl/technologia/certyfikaty-ssl-przed-czym-chroni-klodka-i-https-w-adresie-strony/">Certyfikaty SSL</a>), który umożliwia szyfrowanie danych i uwierzytelnianie użytkowników. OpenVPN jest uważany za jedno z najbezpieczniejszych rozwiązań VPN.</li>



<li><strong>Wireguard</strong> &#8211; jest to nowoczesny protokół VPN, który zapewnia szybkie i bezpieczne połączenie między dwoma urządzeniami. Wireguard jest uważany za jedno z najbardziej wydajnych rozwiązań VPN.</li>
</ul>



<p>Wybór protokołu VPN zależy od indywidualnych potrzeb użytkownika, takich jak poziom bezpieczeństwa, wydajność i łatwość konfiguracji. Każdy z powyższych protokołów ma swoje wady i zalety, więc należy dokładnie rozważyć, który z nich będzie najlepszy dla danego zastosowania.</p>



<h2 class="wp-block-heading">Sposoby komunikacji</h2>



<p>VPN działa przez utworzenie bezpiecznego tunelu komunikacyjnego pomiędzy dwoma urządzeniami. Istnieją dwa główne sposoby komunikacji, które mogą być używane do utworzenia tunelu VPN:</p>



<ol class="wp-block-list" type="1" start="1">
<li><strong>Site-to-Site VPN</strong> &#8211; połączenie VPN pomiędzy dwoma sieciami. Site-to-Site VPN może być używany do połączenia oddziałów jednej firmy, które znajdują się w różnych miejscach geograficznych.</li>



<li><strong>Remote Access VPN</strong> &#8211; połączenie VPN między urządzeniem zdalnym a siecią. Remote Access VPN umożliwia użytkownikom zdalnym dostęp do zasobów sieciowych, takich jak pliki, drukarki czy bazy danych. Dostęp zdalny może być udzielony zarówno pracownikom firmy, którzy pracują zdalnie, jak i osobom spoza firmy, takim jak kontrahenci czy klienci.</li>
</ol>



<h2 class="wp-block-heading">Jak działa VPN?</h2>



<p>VPN działa poprzez ustanowienie bezpiecznego tunelu pomiędzy dwoma urządzeniami, które są odległe od siebie. Połączenie to jest realizowane poprzez kilka kroków:</p>



<ol class="wp-block-list" type="1">
<li><strong>Uwierzytelnienie</strong> &#8211; użytkownik musi podać swoje dane uwierzytelniające, takie jak nazwa użytkownika i hasło, aby uzyskać dostęp do sieci VPN.</li>



<li><strong>Szyfrowanie</strong> &#8211; dane przesyłane między urządzeniami są szyfrowane, co zapewnia bezpieczeństwo w sieci.</li>



<li><strong>Połączenie</strong> &#8211; po uwierzytelnieniu i ustanowieniu szyfrowania, urządzenie zdalne może nawiązać połączenie z siecią VPN i uzyskać dostęp do zasobów sieciowych.</li>
</ol>



<p>Urządzenie, które tworzy połączenie VPN, nazywane jest klientem VPN, a urządzenie, z którym łączy się klient, to serwer VPN. Do połączenia najczęściej wykorzystywane są <a href="https://topvpn.pl/program-do-vpn/">programy VPN</a>. Serwer VPN może być zarządzany przez firmę, która chce udostępnić swoje zasoby sieciowe pracownikom zdalnym, lub przez dostawcę usług VPN, który udostępnia serwery VPN dla klientów.</p>



<h2 class="wp-block-heading">Zalety i wady VPN</h2>



<p>VPN ma swoje zalety i wady, które należy wziąć pod uwagę przed decyzją o jego wykorzystaniu.</p>



<p><strong>Zalety VPN</strong>:</p>



<ul class="wp-block-list">
<li>Bezpieczeństwo: VPN zapewnia szyfrowanie danych, co zwiększa bezpieczeństwo przesyłanych informacji.</li>



<li>Prywatność: VPN ukrywa adres IP użytkownika, co zapewnia anonimowość w sieci.</li>



<li>Dostęp zdalny: VPN umożliwia zdalny dostęp do zasobów sieciowych z dowolnego miejsca na świecie.</li>



<li>Oszczędność kosztów: Gotowy VPN może być tańszym rozwiązaniem niż budowa własnej infrastruktury sieciowej.</li>
</ul>



<p><strong>Wady VPN</strong>:</p>



<ul class="wp-block-list">
<li>Słaba wydajność: VPN może spowolnić transfer danych i wpłynąć na wydajność sieci.</li>



<li>Konfiguracja: Konfiguracja i utrzymanie sieci VPN może być skomplikowane i wymagać specjalistycznej wiedzy.</li>



<li>Zawodność: VPN może być niestabilny i nie działać poprawnie, co może wpłynąć na jakość przesyłanych danych.</li>
</ul>



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



<p>VPN, czyli Virtual Private Network, to technologia umożliwiająca bezpieczne połączenie zdalne pomiędzy dwoma urządzeniami. VPN wykorzystuje różne protokoły, takie jak PPTP, L2TP, IPSec, OpenVPN oraz Wireguard, aby zapewnić bezpieczeństwo i poufność przesyłanych danych. VPN może działać w różnych trybach, takich jak Site-to-Site VPN i Remote Access VPN, umożliwiając użytkownikom zdalny dostęp do zasobów sieciowych. VPN ma swoje zalety i wady, które należy wziąć pod uwagę przed decyzją o jego wykorzystaniu. Dzięki VPN, użytkownicy mogą korzystać z sieci prywatnej, jakby byli na miejscu, co umożliwia pracę zdalną i dostęp do zasobów z dowolnego miejsca na świecie. VPN jest jednym z najważniejszych narzędzi w dzisiejszych czasach, zapewniając bezpieczeństwo i prywatność w sieci oraz umożliwiając dostęp do zasobów sieciowych z dowolnego miejsca na świecie.</p>
<p>Artykuł <a href="https://tomaszkenig.pl/technologia/jak-dziala-vpn/">Jak działa VPN?</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tomaszkenig.pl/technologia/jak-dziala-vpn/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8264</post-id>	</item>
		<item>
		<title>OpenAI API &#8211; Jak korzystać z chata GPT z poziomu Python?</title>
		<link>https://tomaszkenig.pl/python/openai-api-jak-korzystac-z-chata-gpt-z-poziomu-python/</link>
					<comments>https://tomaszkenig.pl/python/openai-api-jak-korzystac-z-chata-gpt-z-poziomu-python/#respond</comments>
		
		<dc:creator><![CDATA[Tomasz Kenig]]></dc:creator>
		<pubDate>Tue, 03 Jan 2023 11:19:45 +0000</pubDate>
				<category><![CDATA[python]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[chat gpt]]></category>
		<category><![CDATA[openai]]></category>
		<guid isPermaLink="false">https://tomaszkenig.pl/?p=8007</guid>

					<description><![CDATA[<p>OpenAI &#8211; podłączenie w Python Nie będę się tutaj rozwodził na temat OpenAI i ich Chat GPT. Chat GPT to zaawansowany model językowy oparty na AI. Odpowiada po polsku, angielsku i w wielu innych językach. Zna się na programowaniu, technologii, markach samochodów oraz wie niezliczoną masę innych rzeczy. To, co przedstawię w tym artykule, to [&#8230;]</p>
<p>Artykuł <a href="https://tomaszkenig.pl/python/openai-api-jak-korzystac-z-chata-gpt-z-poziomu-python/">OpenAI API &#8211; Jak korzystać z chata GPT z poziomu Python?</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p></p>



<h2 class="wp-block-heading">OpenAI &#8211; podłączenie w Python</h2>



<p>Nie będę się tutaj rozwodził na temat <strong>OpenAI </strong>i ich <strong>Chat GPT.</strong> Chat GPT to zaawansowany model językowy oparty na AI. Odpowiada po polsku, angielsku i w wielu innych językach. Zna się na programowaniu, technologii, markach samochodów oraz wie niezliczoną masę innych rzeczy. To, co przedstawię w tym artykule, to przede wszystkim:</p>



<ul class="wp-block-list">
<li>Jak w prosty sposób połączyć się z <strong>OpenAI API </strong>z poziomy Python</li>



<li>Jak zadać z poziomu Python do OpenAI API wiele pytań
<ul class="wp-block-list">
<li></li>
</ul>
</li>
</ul>



<p>To, czego będziemy potrzebowali to:</p>



<ul class="wp-block-list">
<li>Python (ja korzystam z wersji 3.9)</li>



<li>Jakiś program do pisania w Python (korzystam z bezpłatnego<a href="https://tomaszkenig.pl/kurs-python/instalacja-pycharm-community/"> PyCharm Community</a>, o którym pisałem w tym artykule)</li>



<li>Baza MySQL (tylko, gdy chcemy składować wyniki zapytania w bazie danych)</li>
</ul>



<p></p>



<h2 class="wp-block-heading">Podłączenie do OpenAI z poziomu API &#8211; pobranie klucza API</h2>



<p>W pierwszej kolejności logujemy się na&nbsp;<a href="http://openai.com/" target="_blank" rel="noreferrer noopener">openai.com</a>. Jeśli nie mamy konta, zakładamy je. Zakładając konto <strong>dostajesz środki o wartości $18</strong> na starcie. Po wyczerpaniu ich trzeba już zapłacić za każde zapytanie. Szczerze mówiąc, by wygenerować kilkanaście tysięcy tekstów, <strong>$18 powinno w zupełności wystarczyć</strong>, więc <strong>za korzystanie nie płacisz nic</strong>.</p>



<p>W prawym górnym rogu ekranu klikamy &#8222;<strong>View API Keys</strong>&#8222;. Klikamy &#8222;<strong>Create new secret Key</strong>&#8221; i od razu je kopiujemy. Po zamknięciu okienka, API Key nie można drugi raz podejrzeć. Jeśli jednak nie udało nam się go zapisać, to <strong>kasujemy poprzednio wygenerowane</strong> API Key i <strong>tworzymy nowe</strong>.</p>



<figure class="wp-block-image size-full"><a href="https://tomaszkenig.pl/wp-content/uploads/2023/01/image-4.png"><img loading="lazy" decoding="async" width="1915" height="749" src="https://tomaszkenig.pl/wp-content/uploads/2023/01/image-4.png" alt="" class="wp-image-8023" srcset="https://tomaszkenig.pl/wp-content/uploads/2023/01/image-4.png 1915w, https://tomaszkenig.pl/wp-content/uploads/2023/01/image-4-300x117.png 300w, https://tomaszkenig.pl/wp-content/uploads/2023/01/image-4-1024x401.png 1024w, https://tomaszkenig.pl/wp-content/uploads/2023/01/image-4-768x300.png 768w, https://tomaszkenig.pl/wp-content/uploads/2023/01/image-4-1536x601.png 1536w" sizes="auto, (max-width: 1915px) 100vw, 1915px" /></a><figcaption class="wp-element-caption">Podłączenie do OpenAI z poziomu API &#8211; pobranie klucza API</figcaption></figure>



<h2 class="wp-block-heading">Teraz czas na kod Python krok po kroku:</h2>



<p><strong>Krok 1: Instalacja Python i Pycharm</strong></p>



<p>Jeśli nie korzystałeś wcześniej z <strong>Python </strong>i <strong>PyCharm</strong>, to poniższe krótkie artykuły pomogą Ci je zainstalować. Opis instalacji znajdziesz tutaj:</p>



<ul class="wp-block-list">
<li><a href="https://tomaszkenig.pl/kurs-python/instalacja-python/">Instalacja Python</a></li>



<li><a href="https://tomaszkenig.pl/kurs-python/instalacja-pycharm-community/">Instalacja PyCharm</a> (Wersja Community)</li>
</ul>



<p></p>



<p><strong>Krok 2: Tworzymy środowisko wirtualne w Python (nie jest konieczne, ale tak jest lepiej) lub Instalujemy pakiet openai bezpośrednio</strong></p>



<p>Odpalamy <strong>pyCharm i tworzymy nowy projekt</strong>. W prawym górny rogu powinien się pojawić komunikat o braku interpretera. Klikamy go, a następnie wybieramy z listy interpreter Python (systemowy, bądź z środowiska wirtualnego).</p>



<p>Instalujemy pakiet openai. <strong>Otwieramy CMD </strong>i wpisujemy:</p>



<pre class="wp-block-code"><code>pip install openai</code></pre>



<figure class="wp-block-image size-full"><a href="https://tomaszkenig.pl/wp-content/uploads/2023/01/image-1.png"><img loading="lazy" decoding="async" width="979" height="512" src="https://tomaszkenig.pl/wp-content/uploads/2023/01/image-1.png" alt="" class="wp-image-8013" srcset="https://tomaszkenig.pl/wp-content/uploads/2023/01/image-1.png 979w, https://tomaszkenig.pl/wp-content/uploads/2023/01/image-1-300x157.png 300w, https://tomaszkenig.pl/wp-content/uploads/2023/01/image-1-768x402.png 768w" sizes="auto, (max-width: 979px) 100vw, 979px" /></a><figcaption class="wp-element-caption">Krok 3: Instalujemy pakiet openai</figcaption></figure>



<p></p>



<p><strong>Krok 3: Kod właściwy komunikacji z chatem GPT z poziomu inputu</strong></p>



<p>Poniżej przykład programu, który zwróci odpowiedź po podaniu tzw. <strong>inputu w Python</strong>. Odpalamy nasz program skrótem <strong>CTRL+SHIFT+F10</strong>. W linii poleceń pojawi się tekst &#8222;Insert text:&#8221;. Wprowadzamy nasze zapytanie + Enter. </p>



<pre class="wp-block-code"><code># -*- coding: utf-8 -*-
# import packages:
import json
import openai

openai.api_key = '&gt;&gt;&gt;YOUR_KEY&lt;&lt;&lt;'

def get_content(in_prompt):
    response = openai.Completion.create(model="text-davinci-003",
                                        prompt=in_prompt,
                                        temperature=0,
                                        max_tokens=3900)
    return response

if __name__ == "__main__":
    in_prompt = input("Insert text: ")
    content_json = get_content(in_prompt)

    # result as JSON
    print(content_json)

    content_text = content_json&#91;"choices"]&#91;0]&#91;"text"]

    # Result as text
    print(content_text)</code></pre>



<p>Odpowiedź będzie widoczna w <strong>konsoli </strong>w formie <strong>wiadomości JSON</strong> oraz w formie tekstu (zaznaczone na screenie poniżej). Zmienna <strong>content_text = content_json[&#8222;choices&#8221;][0][&#8222;text&#8221;] </strong>&#8211; to fragment naszego kodu, który wyciąga samą odpowiedź z JSON&#8217;a.</p>



<figure class="wp-block-image size-full"><a href="https://tomaszkenig.pl/wp-content/uploads/2023/01/image-2.png"><img loading="lazy" decoding="async" width="1920" height="1160" src="https://tomaszkenig.pl/wp-content/uploads/2023/01/image-2.png" alt="" class="wp-image-8017" srcset="https://tomaszkenig.pl/wp-content/uploads/2023/01/image-2.png 1920w, https://tomaszkenig.pl/wp-content/uploads/2023/01/image-2-300x181.png 300w, https://tomaszkenig.pl/wp-content/uploads/2023/01/image-2-1024x619.png 1024w, https://tomaszkenig.pl/wp-content/uploads/2023/01/image-2-768x464.png 768w, https://tomaszkenig.pl/wp-content/uploads/2023/01/image-2-1536x928.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a><figcaption class="wp-element-caption">Kod właściwy komunikacji z chatem GPT z poziomu inputu</figcaption></figure>



<p>Krótki opis kodu:</p>



<ul class="wp-block-list">
<li><strong># -*- coding: utf-8 -*-</strong> &#8211; ustawienie kodowania. Szczególnie ważne, gdy chcesz uzyskać odpowiedź od OpenAI w alfabecie innym niż angielski (np odpowiedź zawierająca polskie znaki).</li>



<li><strong>openai.api_key</strong> = &#8217;&gt;&gt;&gt;YOUR_KEY&lt;&lt;&lt;&#8217; &#8211; tu wpisujesz swój klucz API. <strong>Jeśli tworzysz program profesjonalnie, klucz oczywiście nie powinien się znajdować w kodzie! </strong></li>



<li><strong>get_content()</strong> &#8211; funkcja zwracająca odpowiedź z OpenAI. in_prompt argument, w którym wstawiamy pytanie do OpenAI. Funkcja zwraca odpowiedź <strong>response</strong>.</li>



<li><strong>content_text = content_json[&#8222;choices&#8221;][0][&#8222;text&#8221;] </strong>&#8211; to fragment naszego kodu, który wyciąga samą odpowiedź tekstową z JSON&#8217;a.</li>



<li><strong>max_tokens</strong>=3900 &#8211; określa maksymalną liczbę tokenów, jaka może być zużyta na pojedyncze odpytanie API. Wprowadziłem liczbę 3900, która jest bliska maksimum (4095). Jeśli będziesz odpytywał openAI w innym języku niż angielski, proponuję wybrać mniejszą liczbę np 3900.</li>
</ul>



<p>To, co może jeszcze zwrócić Twoją uwagę to wybrany <strong>model językowy</strong>. Najpopularniejszym modelem jest w tym momencie <strong>text-davinci-003</strong>. Ten model jest także wykorzystywany jako standardowy model w <strong>chacie GPT</strong>. Do wyboru są jeszcze (tańsze w obsłudze i pobierające mniej tokenów za zapytanie): <strong>text-babbage-001</strong>, <strong>text-ada-001</strong>.</p>



<p><strong>Krok 4: Kod właściwy do pobierania odpowiedzi na pytania dostarczone w formie listy</strong></p>



<p>Poniżej zmodyfikowany kod, który działa w następujący sposób: </p>



<ul class="wp-block-list">
<li>Jest lista, zawierająca <strong>wiele pytań do OpenIA</strong> &#8211; Zmienna questions_list</li>



<li>Pętla odpytuję po kolei<strong> elementy listy</strong></li>



<li>Odpowiedzi są zapisywane do <strong>innej listy</strong> &#8211; answers_list</li>



<li>Na koniec <strong>lista z odpowiedziami</strong> jest wyświetlana</li>
</ul>



<p>Kod:</p>



<pre class="wp-block-code"><code># -*- coding: utf-8 -*-
# import packages:
import json
import openai

openai.api_key = '&gt;&gt;&gt;YOUR_KEY&lt;&lt;&lt;'

def get_content(in_prompt):
    response = openai.Completion.create(model="text-davinci-003",
                                        prompt=in_prompt,
                                        temperature=0,
                                        max_tokens=3900)
    return response

if __name__ == "__main__":
    # in_prompt = input("Insert text: ")

    questions_list = &#91;"How to learn Python?",
                     "What is your favorite film?",
                     "Can you write a program?"]
    answers_list = &#91;]

    for i in questions_list:
        content_json = get_content(i)
        content_text = content_json&#91;"choices"]&#91;0]&#91;"text"]
        answers_list.append(content_text)

    # Result as text
    for j in answers_list:
        print(j)</code></pre>



<p></p>



<figure class="wp-block-image size-full"><a href="https://tomaszkenig.pl/wp-content/uploads/2023/01/image-5.png"><img loading="lazy" decoding="async" width="1893" height="890" src="https://tomaszkenig.pl/wp-content/uploads/2023/01/image-5.png" alt="" class="wp-image-8025" srcset="https://tomaszkenig.pl/wp-content/uploads/2023/01/image-5.png 1893w, https://tomaszkenig.pl/wp-content/uploads/2023/01/image-5-300x141.png 300w, https://tomaszkenig.pl/wp-content/uploads/2023/01/image-5-1024x481.png 1024w, https://tomaszkenig.pl/wp-content/uploads/2023/01/image-5-768x361.png 768w, https://tomaszkenig.pl/wp-content/uploads/2023/01/image-5-1536x722.png 1536w" sizes="auto, (max-width: 1893px) 100vw, 1893px" /></a><figcaption class="wp-element-caption">Kod właściwy do pobierania danych dostarczonych w formie listy</figcaption></figure>



<p></p>



<h2 class="wp-block-heading">Co dodatkowo powinniśmy wiedzieć o obsłudze Chata GPT z poziomu API?</h2>



<ul class="wp-block-list">
<li>Czat często ulega awarii (a przynajmniej w tym momencie) &#8211; warto napisać jakąś obsługę wyjątków w komunikacji z API, bądź zwykły <strong>try&#8230;except</strong>.</li>



<li>Prawa autorskie do treści generowanych z Chata OpenAI nie są jasne. Chat odpowiada, że nie posiada praw autorskich do tekstów. Pytanie, czy posiadamy je my, skoro płacimy po okresie testowym za obsługę chata.</li>
</ul>
<p>Artykuł <a href="https://tomaszkenig.pl/python/openai-api-jak-korzystac-z-chata-gpt-z-poziomu-python/">OpenAI API &#8211; Jak korzystać z chata GPT z poziomu Python?</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tomaszkenig.pl/python/openai-api-jak-korzystac-z-chata-gpt-z-poziomu-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8007</post-id>	</item>
		<item>
		<title>Jak czytać i zapisywać pliki w formacie Parquet w Python</title>
		<link>https://tomaszkenig.pl/python/jak-czytac-i-zapisywac-pliki-w-formacie-parquet-w-python/</link>
					<comments>https://tomaszkenig.pl/python/jak-czytac-i-zapisywac-pliki-w-formacie-parquet-w-python/#respond</comments>
		
		<dc:creator><![CDATA[Tomasz Kenig]]></dc:creator>
		<pubDate>Sun, 27 Nov 2022 22:53:23 +0000</pubDate>
				<category><![CDATA[python]]></category>
		<category><![CDATA[bigdata]]></category>
		<category><![CDATA[parquet]]></category>
		<category><![CDATA[porady python]]></category>
		<guid isPermaLink="false">https://tomaszkenig.pl/?p=7973</guid>

					<description><![CDATA[<p>Czym jest format parquet? Parquet to kolumnowy typ danych stosowany m.in w rozwiązaniach Big Data. Możemy się z nim spotkać m.in w takich rozwiązaniach jak Hadoop, AWS Athena. Pliki parquet mogą być bez problemu przetwarzane za pomocą pakietu pandas w Python. Typ kolumnowy różni się od typu wierszowego stosowanego m.in. w bazach relacyjnych. Jego główne [&#8230;]</p>
<p>Artykuł <a href="https://tomaszkenig.pl/python/jak-czytac-i-zapisywac-pliki-w-formacie-parquet-w-python/">Jak czytać i zapisywać pliki w formacie Parquet w Python</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Czym jest format parquet?</h2>



<p>Parquet to <strong>kolumnowy typ danych</strong> stosowany m.in w rozwiązaniach Big Data. Możemy się z nim spotkać m.in w takich rozwiązaniach jak Hadoop, AWS Athena. Pliki parquet mogą być bez problemu przetwarzane za pomocą pakietu <strong>pandas w Python</strong>. Typ kolumnowy różni się od typu wierszowego stosowanego m.in. w bazach relacyjnych. Jego główne zalety, to:</p>



<ul class="wp-block-list">
<li>Wysoka wydajność i kompresja</li>



<li>Ograniczenie operacji I/O</li>



<li>Ograniczenie przetwarzania danych tylko dla kolumn wymaganych w zapytaniu.</li>
</ul>



<p>W porównaniu do baz relacyjnych, dane zorganizowane są kolumnowo, a nie rekordowo</p>



<p>Poniżej krótki opis tego, w jaki sposób zapisywać i odczytywać dane w formacie parquet z użyciem Python. W artykule zawarte są także przykłady. użycia.</p>



<h2 class="wp-block-heading">Odczyt plików parquet w Python z użyciem Pandas</h2>



<p>W pakiecie Pandas możemy skorzystać z dwóch metod do obsługi formatu <strong>parquet</strong> &#8211; pyarrow i fastparquet.</p>



<pre class="wp-block-code"><code>import pandas
df=pd.read_parquet('FILE_NAME.parquet', engine='pyarrow')
print(df)</code></pre>



<p>lub</p>



<pre class="wp-block-code"><code>import pandas
df=pd.read_parquet('FILE_NAME.parquet', engine='fastparquet')
print(df)</code></pre>



<p>&nbsp;</p>



<p>&nbsp;</p>



<p>&nbsp;</p>



<p>&nbsp;</p>



<p>&nbsp;</p>



<p>&nbsp;</p>
<p>Artykuł <a href="https://tomaszkenig.pl/python/jak-czytac-i-zapisywac-pliki-w-formacie-parquet-w-python/">Jak czytać i zapisywać pliki w formacie Parquet w Python</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tomaszkenig.pl/python/jak-czytac-i-zapisywac-pliki-w-formacie-parquet-w-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7973</post-id>	</item>
		<item>
		<title>Operatory w Python</title>
		<link>https://tomaszkenig.pl/kurs-python/operatory-w-python/</link>
					<comments>https://tomaszkenig.pl/kurs-python/operatory-w-python/#respond</comments>
		
		<dc:creator><![CDATA[Tomasz Kenig]]></dc:creator>
		<pubDate>Fri, 04 Nov 2022 10:22:41 +0000</pubDate>
				<category><![CDATA[kurs python]]></category>
		<category><![CDATA[operatory]]></category>
		<category><![CDATA[operatory arytmetyczne]]></category>
		<category><![CDATA[operatory logiczne]]></category>
		<category><![CDATA[operatory porównania]]></category>
		<category><![CDATA[operatory python]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://tomaszkenig.pl/?p=7938</guid>

					<description><![CDATA[<p>Operatory arytmetyczne w Python W Python możesz korzystać ze znanych Ci operatorów arytmetycznych jak +, -, *, /. Do oddzielenia działań wykorzystaj nawiasy (). Poniżej przykłady użycia operatorów w działaniach. Możesz ich używać zarówno z wyrażeniem print jak i w odniesieniu do zmiennych. Dodatkowo operator dodawania może być stosowany do łączenia ze sobą tekstów. Więcej [&#8230;]</p>
<p>Artykuł <a href="https://tomaszkenig.pl/kurs-python/operatory-w-python/">Operatory w Python</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Operatory arytmetyczne w Python</h2>



<p>W Python możesz korzystać ze znanych Ci <strong>operatorów arytmetycznych</strong> jak +, -, *, /. Do oddzielenia działań wykorzystaj <strong>nawiasy </strong>(). Poniżej przykłady użycia operatorów w działaniach. Możesz ich używać zarówno z wyrażeniem <strong>print </strong>jak i w odniesieniu do <strong>zmiennych</strong>. Dodatkowo operator dodawania może być stosowany do łączenia ze sobą tekstów. Więcej o liczbowym typie danych w  Python możesz przeczytać w tym artykule: &#8211; <a href="https://tomaszkenig.pl/kurs-python/liczby-w-python/">Liczby w Python</a>.</p>



<h2 class="wp-block-heading">Python &#8211; Operatory arytmetyczne</h2>



<pre class="wp-block-code"><code># Operatory arytmetyczne
 
# suma
4 + 2 + 12.2

# mnożenie
x = 5 * 5
x

# dzielenie
5 / 2

# dzielenie bez reszty
51 // 2

# reszta z dzielenia
7 % 3

# potęgowanie
 10 **2</code></pre>



<p>Podobnie jak w JAVA możesz uprościć działania arytmetyczne łącząc operator ze znakiem równości. Stosujemy w tym wypadku operację przypisania.</p>



<pre class="wp-block-code"><code># Operatory przypisania
x = 17
x += 2
x

# Przykład z potęgowaniem
x = 12
x **= 2
x

# Przykłąd dłuższej kalkulacji
x = (2+6) * 2 / 3
print(x)

# Przykład z wartością tekstową
x = &#91;]
x += "Hello World"
print(x) </code></pre>



<h2 class="wp-block-heading">Operatory porównania w Python</h2>



<p>Operatory logiczne używane są w programowaniu w Python przede wszystkim w instrukcjach warunkowych  i pętlach. Poniżej kilka przykładów. Służą do porównywania wartości. Wynikiem jest zawsze prawda, bądź fałsz, a więc True or False.</p>



<p></p>



<pre class="wp-block-code"><code>x= 123 
print(x == 120)

print(x == 123)

print(x &gt;= 123)

print(x &lt;= 123)
print(x &gt; 120)

print(x &lt; 123)</code></pre>



<h2 class="wp-block-heading">Operatory logiczne w Python</h2>



<p>W Python jak w innych językach programowania mamy do dyspozycji typowe operatory logiczne. Operatory logiczne służą do obsługi logiki w Twoich programach. Przydadzą w tworzeniu <strong>instrukcji warunkowych if</strong> oraz w pracy z pętlami. Najważniejsze z operatorów, z których będziesz korzystał to:</p>



<ul class="wp-block-list">
<li>and</li>



<li>or</li>



<li>not</li>



<li>in</li>



<li>is</li>
</ul>



<p>Poniżej  kilka przykładów ich prostego wykorzystania:</p>



<pre class="wp-block-code"><code># Operatory logiczne
# and
 x,y=1,2
 if x&lt;10 and y&gt;=2:
     print("%d is lower than 10 and %d is greater or equal 2" %(x,y))
# or
 x,y=9,10
 if x&lt;10 or y&lt;10:
     print("x or y is lower than 10")
# in
 x = 44
 if x in &#91;1,2,3,4,5]:
     print("x is in the list")
 else:
     print("x is outside the list")
# not in
 x = 4
 if x not in &#91;1,2,3,4,5]:
     print("x is not in the list")
 else:
     print("x is in the list")    
# is / is not
 x, y = 1,2
 print(x is y)
 print(x is not y)
 not
 print(not False)
 print(not True)</code></pre>



<p>Artykuł jest częścią kursu programowania w Python. Jeśli chcesz nauczyć się więcej sprawdź całość pod tym adresem: <a href="https://tomaszkenig.pl/kurs-python/">kurs python</a></p>



<p></p>



<p></p>



<p></p>
<p>Artykuł <a href="https://tomaszkenig.pl/kurs-python/operatory-w-python/">Operatory w Python</a> pochodzi z serwisu <a href="https://tomaszkenig.pl">TomaszKenig.pl</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tomaszkenig.pl/kurs-python/operatory-w-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7938</post-id>	</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin


Served from: tomaszkenig.pl @ 2026-06-14 00:06:07 by W3 Total Cache
-->