[{"data":1,"prerenderedAt":2211},["ShallowReactive",2],{"post:\u002Fblog\u002Fosx-i-managery-oprogramowania-czyli-niezbyt-krotka-historia-o-tym-jak-musialem-sie-przeprosic-z-macports":3,"surround:\u002Fblog\u002Fosx-i-managery-oprogramowania-czyli-niezbyt-krotka-historia-o-tym-jak-musialem-sie-przeprosic-z-macports":1422,"related:\u002Fblog\u002Fosx-i-managery-oprogramowania-czyli-niezbyt-krotka-historia-o-tym-jak-musialem-sie-przeprosic-z-macports":1433,"categories":1434,"post-author:maciek-walczak":1504,"tags":1518},{"id":4,"title":5,"author":6,"body":7,"categories":1401,"comments":316,"cover":1405,"coverAlt":5,"date":1406,"description":1407,"draft":1408,"extension":1409,"hidden":1408,"meta":1410,"navigation":316,"path":1411,"readingTime":416,"redirectFrom":1412,"seo":1413,"sitemap":1414,"slug":1415,"stem":1416,"tags":1417,"updated":1419,"wpId":1420,"__hash__":1421},"blog\u002Fblog\u002F2018-06-03-osx-i-managery-oprogramowania-czyli-niezbyt-krotka-historia-o-tym-jak-musialem-sie-przeprosic-z-macports.md","OSX i managery oprogramowania – czyli (niezbyt) krótka historia o tym jak musiałem się przeprosić z MacPorts","maciek-walczak",{"type":8,"value":9,"toc":1399},"minimark",[10,14,17,20,29,49,52,55,58,61,64,76,85,88,110,113,121,124,127,147,156,159,203,206,212,215,273,276,288,291,294,821,824,830,833,866,869,875,878,902,905,957,960,1163,1169,1175,1178,1191,1194,1207,1210,1216,1219,1231,1234,1240,1243,1249,1252,1258,1261,1271,1298,1307,1310,1313,1326,1329,1335,1352,1359,1384,1386,1389,1392,1395],[11,12,13],"p",{},"Mniej więcej od 2006 roku pracuję na Makach. Zaczynałem od Maca mini, potem iMac, a potem już różne Macbooki. Przez te wszystkie lata nabrałem przekonania (popartego doświadczeniami), że komputery Apple dużo lepiej nadają się do programowania i tworzenia stron www niż PC. Powodem jest oczywiście architektura, oparta na systemach Unixowych. Tak, wiem, Linux też się nadaje. Nie przeczę. No ale na Linuxie trochę ciężko o Photoshopa… Ale nie o tym…",[11,15,16],{},"Apple w swojej łaskawości pewne przydatne funkcje systemu daje nam w pakiecie, a mówię tu np. o serwerze www Apache i wbudowanemu PHP. No i wszystko jest ok, dopóki nie mamy potrzeby by dodać jakieś brakujące rozszerzenie do PHP, np. drivery PDO do komunikacji z bazą danych PostgreSQL. Bo tak się składa, że w wersji wbudowanej mamy drivery do MySQL, ale o Postgresie już zapomniano. Generalnie schody zaczynają się w momencie, gdy chcemy coś doinstalować i przekompilować. Tego producent już nie wspiera – masz biniarki i się ciesz…",[11,18,19],{},"Na szczęście rynek nie znosi próżni i pojawiły się zewnętrzne managery oprogramowania – czyli programy pozwalające doinstalować, skompilować i uruchomić oprogramowanie, o którym Apple jakoś zapomniało. Jest to szczególnie przydatne przy pracy zarówno front- jak i backendowca.",[11,21,22,23],{},"Takich managerów oprogramowania jest kilka i tu po więcej szczegółów odsyłam do stosownego artykułu: ",[24,25,26],"a",{"href":26,"rel":27},"https:\u002F\u002Fwww.slant.co\u002Ftopics\u002F511\u002F~best-mac-package-managers",[28],"nofollow",[11,30,31,32,40,41,48],{},"Ja chciałbym skupić się na 2 – chyba najpopularniejszych: ",[33,34,35],"strong",{},[24,36,39],{"href":37,"rel":38},"https:\u002F\u002Fbrew.sh\u002Findex_pl",[28],"Homebrew"," i ",[33,42,43],{},[24,44,47],{"href":45,"rel":46},"https:\u002F\u002Fwww.macports.org\u002F",[28],"MacPorts",".",[11,50,51],{},"Przez kilka lat używałem MacPorts, później skusił mnie Homebrew. Był nowszy, wydawał się lepszy (i w zasadzie jest, bo lepiej integruje się z OSX i instaluje mniej zależności), ale po ostatnich aktualizacjach wycofano z Homebrew wsparcie dla części starszych pakietów oprogramowania – np. PDO mysql dla PHP 5.6 i kilka innych pakietów dla tej wersji PHP.",[11,53,54],{},"Ja wiem – PHP 5 to już historia mamy wersję 7. I dlaczego w ogóle piszę o PHP, skoro to jest blog poświęcony frontendowi?",[11,56,57],{},"Życie programisty frontend to nie tylko najnowsze frameworki i HDD (Hype Driven Development), ale też wspieranie kodu legacy – rozwijanie czegoś w starszych, ale wciąż pracujących projektach. Czasem zachodzi potrzeba by uruchomić jakiś system lokalnie, gdzie niektóre zależności są już raczej historyczne. Koledzy ostrzegali – nie aktualizuj Homebrew bo wywalili masę starszych pakietów – no ale przesiadka na nowego kompa wymusiła postawienie całego środowiska od nowa. No i tu właśnie postanowiłem się przeprosić ze starymi dobrymi MacPortami.",[11,59,60],{},"Tu kończy się część fabularna, a zaczyna się opis instalacji Apache 2.4 + PHP 5.6 – trochę jako ciekawostka, a trochę jako ściąga na przyszłość 🙂",[62,63],"hr",{},[11,65,66,67,75],{},"Zacznijmy więc od samej instalacji MacPorts – ",[33,68,69,70,74],{},"wchodzimy na stronę ",[24,71,72],{"href":72,"rel":73},"https:\u002F\u002Fwww.macports.org\u002Finstall.php",[28]," i wybieramy wersję dla naszego systemu"," – w moim wypadku dla High Sierra. Ściągamy biniarkę i instalujemy – tu nie ma żadnej filozofii.",[11,77,78,79,48],{},"Po zakończonej instalacji mamy do dyspozycji nowy program dostępny z linii poleceń terminala – nazywa się on po prostu ",[80,81,82],"em",{},[33,83,84],{},"port",[11,86,87],{},"Zobaczmy czy działa – sprawdźmy jego wersję:",[89,90,95],"pre",{"className":91,"code":92,"language":93,"meta":94,"style":94},"language-bash shiki shiki-themes github-light-default github-light-default github-dark-default","port -v\n","bash","",[96,97,98],"code",{"__ignoreMap":94},[99,100,103,106],"span",{"class":101,"line":102},"line",1,[99,104,84],{"class":105},"sQJ0q",[99,107,109],{"class":108},"sDkKp"," -v\n",[11,111,112],{},"W odpowiedzi dostałem:",[89,114,119],{"className":115,"code":117,"language":118},[116],"language-text","MacPorts 2.5.0\n","text",[96,120,117],{"__ignoreMap":94},[11,122,123],{},"Jest dobrze – porty działają i odpowiadają.",[11,125,126],{},"Raz na jakiś czas warto je zaktualizować – służy do tego polecenie:",[89,128,130],{"className":91,"code":129,"language":93,"meta":94,"style":94},"sudo port -v selfupdate\n",[96,131,132],{"__ignoreMap":94},[99,133,134,137,141,144],{"class":101,"line":102},[99,135,136],{"class":105},"sudo",[99,138,140],{"class":139},"s-BGO"," port",[99,142,143],{"class":108}," -v",[99,145,146],{"class":139}," selfupdate\n",[11,148,149,150],{},"Zdecydowanie warto zapoznać się z dokumentacją dostępną na stronie: ",[33,151,152],{},[24,153,154],{"href":154,"rel":155},"https:\u002F\u002Fguide.macports.org",[28],[11,157,158],{},"W tej chwili mnie interesują 2 podstawowe polecenia:",[89,160,162],{"className":91,"code":161,"language":93,"meta":94,"style":94},"port search \u003Cnazwa_pakietu>\nsudo port install \u003Cnazwa_pakietu>\n",[96,163,164,185],{"__ignoreMap":94},[99,165,166,168,171,175,178,182],{"class":101,"line":102},[99,167,84],{"class":105},[99,169,170],{"class":139}," search",[99,172,174],{"class":173},"s5nWI"," \u003C",[99,176,177],{"class":139},"nazwa_pakiet",[99,179,181],{"class":180},"s_bOF","u",[99,183,184],{"class":173},">\n",[99,186,188,190,192,195,197,199,201],{"class":101,"line":187},2,[99,189,136],{"class":105},[99,191,140],{"class":139},[99,193,194],{"class":139}," install",[99,196,174],{"class":173},[99,198,177],{"class":139},[99,200,181],{"class":180},[99,202,184],{"class":173},[11,204,205],{},"O ile wyszukiwanie pakietów można uruchomić na prawach użytkownika, o tyle instalowanie wymaga praw administratora. Dzieje się tak dlatego, że MacPorts domyślnie instaluje oprogramowanie i katalogu poza katalogiem domowym użytkownika:",[89,207,210],{"className":208,"code":209,"language":118},[116],"\u002Fopt\u002Flocal\n",[96,211,209],{"__ignoreMap":94},[11,213,214],{},"Zainstalujmy więc trochę oprogramowania – w moim wypadku będą to następujące pakiety:",[216,217,218,225,231,237,243,249,255,261,267],"ul",{},[219,220,221,224],"li",{},[33,222,223],{},"apache2"," (serwer www w wersji 2.4)",[219,226,227,230],{},[33,228,229],{},"php56"," (główny pakiet PHP)",[219,232,233,236],{},[33,234,235],{},"php56-apache2handler"," (moduł PHP do wpięcia w Apache)",[219,238,239,242],{},[33,240,241],{},"php56-iconv"," (moduł PHP do konwersji kodowania stringów)",[219,244,245,248],{},[33,246,247],{},"php56-intl"," (moduł do internacjonalizacji)",[219,250,251,254],{},[33,252,253],{},"php56-mcrypt"," (moduł do szyfrowania\u002Fdeszyfrowania)",[219,256,257,260],{},[33,258,259],{},"php56-mysql"," (driver do bazy danych MySQL)",[219,262,263,266],{},[33,264,265],{},"php56-postgresql"," (driver do bazy danych PostgreSQL)",[219,268,269,272],{},[33,270,271],{},"php56-xdebug"," (moduł do debugowania w IDE)",[11,274,275],{},"Po instalacji możemy sprawdzić listę zainstalowanych pakietów za pomocą polecenia:",[89,277,279],{"className":91,"code":278,"language":93,"meta":94,"style":94},"port installed\n",[96,280,281],{"__ignoreMap":94},[99,282,283,285],{"class":101,"line":102},[99,284,84],{"class":105},[99,286,287],{"class":139}," installed\n",[11,289,290],{},"Na wyświetlonej liście pakietów jest oczywiście dużo więcej, bo instalowane przez nas pakiety mają własne zależności 🙂",[11,292,293],{},"Po udanej instalacji dostajemy na twarz trochę informacji odnośnie ścieżek instalacji, które warto sobie zapisać:",[89,295,299],{"className":296,"code":297,"language":298,"meta":94,"style":94},"language-js shiki shiki-themes github-light-default github-light-default github-dark-default","The install paths have been changed to no longer violate the MacPorts mtree:\n\n1. The binaries are now under \u002Fopt\u002Flocal\u002Fsbin\u002F\n(rather than under \u002Fopt\u002Flocal\u002Fapache2\u002Fbin\u002F)\n\n2. The configure files are now under\n(rather than under \u002Fopt\u002Flocal\u002Fapache2\u002Fconf\u002F)\n\n3. The modules are now under \u002Fopt\u002Flocal\u002Flib\u002Fapache2\u002Fmodules\u002F\n(rather than under \u002Fopt\u002Flocal\u002Fapache2\u002Fmodules\u002F)\n\n4. The web root is now located under \u002Fopt\u002Flocal\u002Fwww\u002Fapache2\u002Fhtml\u002F\n(rather than under \u002Fopt\u002Flocal\u002Fapache2\u002Fhtdocs\u002F)\n\n5. The cgi-bin is now located under \u002Fopt\u002Flocal\u002Fwww\u002Fapache2\u002Fcgi-bin\u002F\n(rather than under \u002Fopt\u002Flocal\u002Fapache2\u002Fcgi-bin\u002F)\n\n6. The logs are now located under \u002Fopt\u002Flocal\u002Fvar\u002Flog\u002Fapache2\u002F\n(rather than under \u002Fopt\u002Flocal\u002Fapache2\u002Flogs\u002F)\n\n7. The manual is now located under \u002Fopt\u002Flocal\u002Fwww\u002Fapache2\u002Fmanual\u002F\n(rather than under \u002Fopt\u002Flocal\u002Fapache2\u002Fmanual\u002F)\n\n8. The manual (man) pages are still at \u002Fopt\u002Flocal\u002Fshare\u002Fapache2\u002Fman\u002F\n\nYou can move your htdocs and cgi-bin to the new locations, or edit \u002Fopt\u002Flocal\u002Fetc\u002Fapache2\u002Fhttpd.conf to point at the old locations.\n","js",[96,300,301,312,318,346,374,379,388,414,419,452,477,482,515,541,546,588,617,622,645,671,676,708,733,738,777,782],{"__ignoreMap":94},[99,302,303,306,309],{"class":101,"line":102},[99,304,305],{"class":180},"The install paths have been changed to no longer violate the MacPorts ",[99,307,308],{"class":105},"mtree",[99,310,311],{"class":180},":\n",[99,313,314],{"class":101,"line":187},[99,315,317],{"emptyLinePlaceholder":316},true,"\n",[99,319,321,324,327,330,333,335,338,340,343],{"class":101,"line":320},3,[99,322,323],{"class":108},"1.",[99,325,326],{"class":180}," The binaries are now under ",[99,328,329],{"class":173},"\u002F",[99,331,332],{"class":180},"opt",[99,334,329],{"class":173},[99,336,337],{"class":180},"local",[99,339,329],{"class":173},[99,341,342],{"class":180},"sbin",[99,344,345],{"class":173},"\u002F\n",[99,347,349,352,354,356,358,360,362,364,366,369,371],{"class":101,"line":348},4,[99,350,351],{"class":180},"(rather than under ",[99,353,329],{"class":173},[99,355,332],{"class":180},[99,357,329],{"class":173},[99,359,337],{"class":180},[99,361,329],{"class":173},[99,363,223],{"class":180},[99,365,329],{"class":173},[99,367,368],{"class":180},"bin",[99,370,329],{"class":173},[99,372,373],{"class":180},")\n",[99,375,377],{"class":101,"line":376},5,[99,378,317],{"emptyLinePlaceholder":316},[99,380,382,385],{"class":101,"line":381},6,[99,383,384],{"class":108},"2.",[99,386,387],{"class":180}," The configure files are now under\n",[99,389,391,393,395,397,399,401,403,405,407,410,412],{"class":101,"line":390},7,[99,392,351],{"class":180},[99,394,329],{"class":173},[99,396,332],{"class":180},[99,398,329],{"class":173},[99,400,337],{"class":180},[99,402,329],{"class":173},[99,404,223],{"class":180},[99,406,329],{"class":173},[99,408,409],{"class":180},"conf",[99,411,329],{"class":173},[99,413,373],{"class":180},[99,415,417],{"class":101,"line":416},8,[99,418,317],{"emptyLinePlaceholder":316},[99,420,422,425,428,430,432,434,436,438,441,443,445,447,450],{"class":101,"line":421},9,[99,423,424],{"class":108},"3.",[99,426,427],{"class":180}," The modules are now under ",[99,429,329],{"class":173},[99,431,332],{"class":180},[99,433,329],{"class":173},[99,435,337],{"class":180},[99,437,329],{"class":173},[99,439,440],{"class":180},"lib",[99,442,329],{"class":173},[99,444,223],{"class":180},[99,446,329],{"class":173},[99,448,449],{"class":180},"modules",[99,451,345],{"class":173},[99,453,455,457,459,461,463,465,467,469,471,473,475],{"class":101,"line":454},10,[99,456,351],{"class":180},[99,458,329],{"class":173},[99,460,332],{"class":180},[99,462,329],{"class":173},[99,464,337],{"class":180},[99,466,329],{"class":173},[99,468,223],{"class":180},[99,470,329],{"class":173},[99,472,449],{"class":180},[99,474,329],{"class":173},[99,476,373],{"class":180},[99,478,480],{"class":101,"line":479},11,[99,481,317],{"emptyLinePlaceholder":316},[99,483,485,488,491,493,495,497,499,501,504,506,508,510,513],{"class":101,"line":484},12,[99,486,487],{"class":108},"4.",[99,489,490],{"class":180}," The web root is now located under ",[99,492,329],{"class":173},[99,494,332],{"class":180},[99,496,329],{"class":173},[99,498,337],{"class":180},[99,500,329],{"class":173},[99,502,503],{"class":180},"www",[99,505,329],{"class":173},[99,507,223],{"class":180},[99,509,329],{"class":173},[99,511,512],{"class":180},"html",[99,514,345],{"class":173},[99,516,518,520,522,524,526,528,530,532,534,537,539],{"class":101,"line":517},13,[99,519,351],{"class":180},[99,521,329],{"class":173},[99,523,332],{"class":180},[99,525,329],{"class":173},[99,527,337],{"class":180},[99,529,329],{"class":173},[99,531,223],{"class":180},[99,533,329],{"class":173},[99,535,536],{"class":180},"htdocs",[99,538,329],{"class":173},[99,540,373],{"class":180},[99,542,544],{"class":101,"line":543},14,[99,545,317],{"emptyLinePlaceholder":316},[99,547,549,552,555,558,561,563,565,567,569,571,573,575,577,579,582,584,586],{"class":101,"line":548},15,[99,550,551],{"class":108},"5.",[99,553,554],{"class":180}," The cgi",[99,556,557],{"class":173},"-",[99,559,560],{"class":180},"bin is now located under ",[99,562,329],{"class":173},[99,564,332],{"class":180},[99,566,329],{"class":173},[99,568,337],{"class":180},[99,570,329],{"class":173},[99,572,503],{"class":180},[99,574,329],{"class":173},[99,576,223],{"class":180},[99,578,329],{"class":173},[99,580,581],{"class":180},"cgi",[99,583,557],{"class":173},[99,585,368],{"class":180},[99,587,345],{"class":173},[99,589,591,593,595,597,599,601,603,605,607,609,611,613,615],{"class":101,"line":590},16,[99,592,351],{"class":180},[99,594,329],{"class":173},[99,596,332],{"class":180},[99,598,329],{"class":173},[99,600,337],{"class":180},[99,602,329],{"class":173},[99,604,223],{"class":180},[99,606,329],{"class":173},[99,608,581],{"class":180},[99,610,557],{"class":173},[99,612,368],{"class":180},[99,614,329],{"class":173},[99,616,373],{"class":180},[99,618,620],{"class":101,"line":619},17,[99,621,317],{"emptyLinePlaceholder":316},[99,623,625,628,631,633,635,637,639,642],{"class":101,"line":624},18,[99,626,627],{"class":108},"6.",[99,629,630],{"class":180}," The logs are now located under ",[99,632,329],{"class":173},[99,634,332],{"class":180},[99,636,329],{"class":173},[99,638,337],{"class":180},[99,640,641],{"class":173},"\u002Fvar",[99,643,644],{"class":180},"\u002Flog\u002Fapache2\u002F\n",[99,646,648,650,652,654,656,658,660,662,664,667,669],{"class":101,"line":647},19,[99,649,351],{"class":180},[99,651,329],{"class":173},[99,653,332],{"class":180},[99,655,329],{"class":173},[99,657,337],{"class":180},[99,659,329],{"class":173},[99,661,223],{"class":180},[99,663,329],{"class":173},[99,665,666],{"class":180},"logs",[99,668,329],{"class":173},[99,670,373],{"class":180},[99,672,674],{"class":101,"line":673},20,[99,675,317],{"emptyLinePlaceholder":316},[99,677,679,682,685,687,689,691,693,695,697,699,701,703,706],{"class":101,"line":678},21,[99,680,681],{"class":108},"7.",[99,683,684],{"class":180}," The manual is now located under ",[99,686,329],{"class":173},[99,688,332],{"class":180},[99,690,329],{"class":173},[99,692,337],{"class":180},[99,694,329],{"class":173},[99,696,503],{"class":180},[99,698,329],{"class":173},[99,700,223],{"class":180},[99,702,329],{"class":173},[99,704,705],{"class":180},"manual",[99,707,345],{"class":173},[99,709,711,713,715,717,719,721,723,725,727,729,731],{"class":101,"line":710},22,[99,712,351],{"class":180},[99,714,329],{"class":173},[99,716,332],{"class":180},[99,718,329],{"class":173},[99,720,337],{"class":180},[99,722,329],{"class":173},[99,724,223],{"class":180},[99,726,329],{"class":173},[99,728,705],{"class":180},[99,730,329],{"class":173},[99,732,373],{"class":180},[99,734,736],{"class":101,"line":735},23,[99,737,317],{"emptyLinePlaceholder":316},[99,739,741,744,747,750,753,755,757,759,761,763,766,768,770,772,775],{"class":101,"line":740},24,[99,742,743],{"class":108},"8.",[99,745,746],{"class":180}," The ",[99,748,705],{"class":749},"sd69k",[99,751,752],{"class":180}," (man) pages are still at ",[99,754,329],{"class":173},[99,756,332],{"class":180},[99,758,329],{"class":173},[99,760,337],{"class":180},[99,762,329],{"class":173},[99,764,765],{"class":180},"share",[99,767,329],{"class":173},[99,769,223],{"class":180},[99,771,329],{"class":173},[99,773,774],{"class":180},"man",[99,776,345],{"class":173},[99,778,780],{"class":101,"line":779},25,[99,781,317],{"emptyLinePlaceholder":316},[99,783,785,788,790,793,796,799,801,803,805,807,809,812,814,816,818],{"class":101,"line":784},26,[99,786,787],{"class":180},"You can move your htdocs and cgi",[99,789,557],{"class":173},[99,791,792],{"class":180},"bin to the ",[99,794,795],{"class":173},"new",[99,797,798],{"class":180}," locations, or edit ",[99,800,329],{"class":173},[99,802,332],{"class":180},[99,804,329],{"class":173},[99,806,337],{"class":180},[99,808,329],{"class":173},[99,810,811],{"class":180},"etc",[99,813,329],{"class":173},[99,815,223],{"class":180},[99,817,329],{"class":173},[99,819,820],{"class":180},"httpd.conf to point at the old locations.\n",[11,822,823],{},"Jeśli chcemy żeby Apache startował razem z systemem, to o tym też mamy informację:",[89,825,828],{"className":826,"code":827,"language":118},[116],"A startup item has been generated that will aid in starting apache2 with launchd. It is disabled by default. Execute the following command to start it, and to cause it to launch at startup:\n\nsudo port load apache2\n",[96,829,827],{"__ignoreMap":94},[11,831,832],{},"Ja osobiście wolę serwer startować ręcznie, bo nie zawsze go potrzebuję (czasem jednak się pisze w czymś nowszym typu Angular 6 czy Vue), więc tu kilka przydatnych komend:",[89,834,836],{"className":91,"code":835,"language":93,"meta":94,"style":94},"sudo apachectl start\nsudo apachectl stop\nsudo apachectl restart\n",[96,837,838,848,857],{"__ignoreMap":94},[99,839,840,842,845],{"class":101,"line":102},[99,841,136],{"class":105},[99,843,844],{"class":139}," apachectl",[99,846,847],{"class":139}," start\n",[99,849,850,852,854],{"class":101,"line":187},[99,851,136],{"class":105},[99,853,844],{"class":139},[99,855,856],{"class":139}," stop\n",[99,858,859,861,863],{"class":101,"line":320},[99,860,136],{"class":105},[99,862,844],{"class":139},[99,864,865],{"class":139}," restart\n",[11,867,868],{},"PHP też nas raczy swoim komunikatem:",[89,870,873],{"className":871,"code":872,"language":118},[116],"To customize php56, copy \u002Fopt\u002Flocal\u002Fetc\u002Fphp56\u002Fphp.ini-development (if this is a development server) or \u002Fopt\u002Flocal\u002Fetc\u002Fphp56\u002Fphp.ini-production (if this is a production server) to \u002Fopt\u002Flocal\u002Fetc\u002Fphp56\u002Fphp.ini and then make changes.\n",[96,874,872],{"__ignoreMap":94},[11,876,877],{},"Generalnie chodzi mu o to, że jeśli chcemy zrobić jakieś modyfikacje w konfiguracji PHP, to warto by sobie zrobić własny plik php.ini na podstawie któregoś z przykładowych. W tym przypadku wykorzystajmy mniej restrykcyjny plik dla developmentu:",[89,879,881],{"className":91,"code":880,"language":93,"meta":94,"style":94},"cd \u002Fopt\u002Flocal\u002Fetc\u002Fphp56\u002F\ncp php.ini-development php.ini\n",[96,882,883,891],{"__ignoreMap":94},[99,884,885,888],{"class":101,"line":102},[99,886,887],{"class":108},"cd",[99,889,890],{"class":139}," \u002Fopt\u002Flocal\u002Fetc\u002Fphp56\u002F\n",[99,892,893,896,899],{"class":101,"line":187},[99,894,895],{"class":105},"cp",[99,897,898],{"class":139}," php.ini-development",[99,900,901],{"class":139}," php.ini\n",[11,903,904],{},"Możemy też od razu włączyć moduł PHP w Apache:",[89,906,908],{"className":91,"code":907,"language":93,"meta":94,"style":94},"To enable php56-apache2handler, run:\n\ncd \u002Fopt\u002Flocal\u002Flib\u002Fapache2\u002Fmodules\nsudo \u002Fopt\u002Flocal\u002Fbin\u002Fapxs -a -e -n php5 mod_php56.so\n",[96,909,910,924,928,935],{"__ignoreMap":94},[99,911,912,915,918,921],{"class":101,"line":102},[99,913,914],{"class":105},"To",[99,916,917],{"class":139}," enable",[99,919,920],{"class":139}," php56-apache2handler,",[99,922,923],{"class":139}," run:\n",[99,925,926],{"class":101,"line":187},[99,927,317],{"emptyLinePlaceholder":316},[99,929,930,932],{"class":101,"line":320},[99,931,887],{"class":108},[99,933,934],{"class":139}," \u002Fopt\u002Flocal\u002Flib\u002Fapache2\u002Fmodules\n",[99,936,937,939,942,945,948,951,954],{"class":101,"line":348},[99,938,136],{"class":105},[99,940,941],{"class":139}," \u002Fopt\u002Flocal\u002Fbin\u002Fapxs",[99,943,944],{"class":108}," -a",[99,946,947],{"class":108}," -e",[99,949,950],{"class":108}," -n",[99,952,953],{"class":139}," php5",[99,955,956],{"class":139}," mod_php56.so\n",[11,958,959],{},"No dobra, wstępną konfigurację mamy za sobą, czas na delikatny tuning:",[216,961,962,987,1073],{},[219,963,964,967],{},[33,965,966],{},"w php.ini warto ustawić kilka opcji:",[216,968,969,975,981],{},[219,970,971,974],{},[33,972,973],{},"memory_limit"," = 128M – tu dałbym więcej jeśli nasz PHP ma robić coś cięższego",[219,976,977,980],{},[33,978,979],{},"error_reporting"," = E_ALL – tu raczej E_ALL & ~E_DEPRECATED & ~E_STRICT żeby za dużo PHP nie komunikował 🙂",[219,982,983,986],{},[33,984,985],{},"date.timezone"," = 'Europe\u002FWarsaw’ – tu warto ustawić właśnie taką wartość, unikniemy komunikatów błędów z PHP…",[219,988,989,990,993,994,997,998],{},"w katalogu ",[33,991,992],{},"\u002Fopt\u002Flocal\u002Fetc\u002Fapache2"," znajdziemy plik ",[33,995,996],{},"httpd.conf",", w nim warto ustawić:",[216,999,1000,1006,1012,1018,1024,1030,1067],{},[219,1001,1002,1005],{},[33,1003,1004],{},"LoadModule rewrite_module"," – rewrite przydaje się w wielu projektach więc odkomentowujemy",[219,1007,1008,1011],{},[33,1009,1010],{},"LoadModule php5_module"," – to już powinno być aktywne…",[219,1013,1014,1017],{},[33,1015,1016],{},"ServerAdmin"," – tu warto wpisać swój email",[219,1019,1020,1023],{},[33,1021,1022],{},"ServerName"," – tu warto coś podać, żeby Apache nie rzucał info o braku nazwy za każdym startem, np. mac.local",[219,1025,1026,1029],{},[33,1027,1028],{},"DirectoryIndex index.html index.php"," – tu dopisujemy właśnie index.php, żeby Apache rozpoznał ten plik jako startowy",[219,1031,1032,1033],{},"Dodajemy też rozpoznawanie plików PHP przez Apache:",[89,1034,1037],{"className":1035,"code":1036,"language":512,"meta":94,"style":94},"language-html shiki shiki-themes github-light-default github-light-default github-dark-default","\u003CFilesMatch \"\\.php$\">\nSetHandler application\u002Fx-httpd-php\n\u003C\u002FFilesMatch>\n",[96,1038,1039,1053,1058],{"__ignoreMap":94},[99,1040,1041,1044,1048,1051],{"class":101,"line":102},[99,1042,1043],{"class":180},"\u003C",[99,1045,1047],{"class":1046},"s2sOu","FilesMatch",[99,1049,1050],{"class":1046}," \"\\.php$\"",[99,1052,184],{"class":180},[99,1054,1055],{"class":101,"line":187},[99,1056,1057],{"class":180},"SetHandler application\u002Fx-httpd-php\n",[99,1059,1060,1063,1065],{"class":101,"line":320},[99,1061,1062],{"class":180},"\u003C\u002F",[99,1064,1047],{"class":1046},[99,1066,184],{"class":180},[219,1068,1069,1072],{},[33,1070,1071],{},"Include etc\u002Fapache2\u002Fextra\u002Fhttpd-vhosts.conf"," – tą opcję warto odkomentować by móc definiować własne wirtualne hosty – bardzo przydatne 🙂",[219,1074,989,1075,993,1078,1081,1082,1085,1086],{},[33,1076,1077],{},"\u002Fopt\u002Flocal\u002Fetc\u002Fapache2\u002Fextra",[33,1079,1080],{},"httpd-vhosts.conf.orig"," – kopiujemy go jako ",[33,1083,1084],{},"httpd-vhosts.conf"," i w nim dodajemy jakiegoś hosta, np.",[89,1087,1089],{"className":1035,"code":1088,"language":512,"meta":94,"style":94},"\u003CVirtualHost *:80>\n    DocumentRoot \"\u002FUsers\u002Fmwalczak\u002FSites\u002Fsklep\u002F\"\n    ServerName sklep.local\n    \u003CDirectory \"\u002FUsers\u002Fmwalczak\u002FSites\u002Fsklep\">\n        Options Indexes MultiViews FollowSymLinks\n        AllowOverride All\n        Order allow,deny\n        Allow from all\n    \u003C\u002FDirectory>\n\u003C\u002FVirtualHost>\n",[96,1090,1091,1103,1108,1113,1126,1131,1136,1141,1146,1155],{"__ignoreMap":94},[99,1092,1093,1095,1098,1101],{"class":101,"line":102},[99,1094,1043],{"class":180},[99,1096,1097],{"class":1046},"VirtualHost",[99,1099,1100],{"class":108}," *:80",[99,1102,184],{"class":180},[99,1104,1105],{"class":101,"line":187},[99,1106,1107],{"class":180},"    DocumentRoot \"\u002FUsers\u002Fmwalczak\u002FSites\u002Fsklep\u002F\"\n",[99,1109,1110],{"class":101,"line":320},[99,1111,1112],{"class":180},"    ServerName sklep.local\n",[99,1114,1115,1118,1121,1124],{"class":101,"line":348},[99,1116,1117],{"class":180},"    \u003C",[99,1119,1120],{"class":1046},"Directory",[99,1122,1123],{"class":1046}," \"\u002FUsers\u002Fmwalczak\u002FSites\u002Fsklep\"",[99,1125,184],{"class":180},[99,1127,1128],{"class":101,"line":376},[99,1129,1130],{"class":180},"        Options Indexes MultiViews FollowSymLinks\n",[99,1132,1133],{"class":101,"line":381},[99,1134,1135],{"class":180},"        AllowOverride All\n",[99,1137,1138],{"class":101,"line":390},[99,1139,1140],{"class":180},"        Order allow,deny\n",[99,1142,1143],{"class":101,"line":416},[99,1144,1145],{"class":180},"        Allow from all\n",[99,1147,1148,1151,1153],{"class":101,"line":421},[99,1149,1150],{"class":180},"    \u003C\u002F",[99,1152,1120],{"class":1046},[99,1154,184],{"class":180},[99,1156,1157,1159,1161],{"class":101,"line":454},[99,1158,1062],{"class":180},[99,1160,1097],{"class":1046},[99,1162,184],{"class":180},[11,1164,1165,1166],{},"Dodając wirtualnego hosta pod lokalną domeną (np. sklep.local) warto by było dodać tą domenę do pliku ",[33,1167,1168],{},"\u002Fetc\u002Fhosts",[89,1170,1173],{"className":1171,"code":1172,"language":118},[116],"127.0.0.1 sklep.local\n",[96,1174,1172],{"__ignoreMap":94},[11,1176,1177],{},"Po takiej konfiguracji czas wystartować nasz serwer:",[89,1179,1181],{"className":91,"code":1180,"language":93,"meta":94,"style":94},"sudo apachectl start\n",[96,1182,1183],{"__ignoreMap":94},[99,1184,1185,1187,1189],{"class":101,"line":102},[99,1186,136],{"class":105},[99,1188,844],{"class":139},[99,1190,847],{"class":139},[11,1192,1193],{},"Jeśli wszystko poszło dobrze to efekt nie będzie zbyt spektakularny – Apache startuje sobie w tle i nic więcej się nie dzieje. Warto więc upewnić się, że co tak naprawdę się uruchamia – Apache wbudowany fabrycznie czy ten nowy z MacPorts. Pomocne będzie tu polecenie:",[89,1195,1197],{"className":91,"code":1196,"language":93,"meta":94,"style":94},"which apachectl\n",[96,1198,1199],{"__ignoreMap":94},[99,1200,1201,1204],{"class":101,"line":102},[99,1202,1203],{"class":108},"which",[99,1205,1206],{"class":139}," apachectl\n",[11,1208,1209],{},"Użycie go wyświetli (a przynajmniej powinno):",[89,1211,1214],{"className":1212,"code":1213,"language":118},[116],"\u002Fopt\u002Flocal\u002Fsbin\u002Fapachectl\n",[96,1215,1213],{"__ignoreMap":94},[11,1217,1218],{},"Polecenie to wskazuje ścieżkę do domyślnie uruchamianego programu. O ile w przypadku Apache ścieżka jest prawidłowa, o tyle polecenie:",[89,1220,1222],{"className":91,"code":1221,"language":93,"meta":94,"style":94},"which php\n",[96,1223,1224],{"__ignoreMap":94},[99,1225,1226,1228],{"class":101,"line":102},[99,1227,1203],{"class":108},[99,1229,1230],{"class":139}," php\n",[11,1232,1233],{},"wyświetla:",[89,1235,1238],{"className":1236,"code":1237,"language":118},[116],"\u002Fusr\u002Fbin\u002Fphp\n",[96,1239,1237],{"__ignoreMap":94},[11,1241,1242],{},"a polecenie",[89,1244,1247],{"className":1245,"code":1246,"language":118},[116],"php -v\n",[96,1248,1246],{"__ignoreMap":94},[11,1250,1251],{},"zwraca wynik:",[89,1253,1256],{"className":1254,"code":1255,"language":118},[116],"PHP 7.1.14 (cli) (built: Feb 7 2018 18:33:30) ( NTS )\nCopyright (c) 1997-2018 The PHP Group\nZend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies\n",[96,1257,1255],{"__ignoreMap":94},[11,1259,1260],{},"Widzimy więc, że PHP uruchamiany z linii poleceń odwołuje się do wbudowanego do OSX PHP 7.",[11,1262,1263,1264,1267,1268,1270],{},"Dzieje się tak, ponieważ nasz PHP 5.6 z MacPorts dodał biniarkę w katalogu ",[33,1265,1266],{},"\u002Fopt\u002Flocal\u002Fbin"," pod nazwą ",[33,1269,229],{},". Aby to rozwiązań utwórzmy dowiązanie symboliczne do tego pliku:",[89,1272,1274],{"className":91,"code":1273,"language":93,"meta":94,"style":94},"cd \u002Fopt\u002Flocal\u002Fbin\nsudo ln -s php56 php\n",[96,1275,1276,1283],{"__ignoreMap":94},[99,1277,1278,1280],{"class":101,"line":102},[99,1279,887],{"class":108},[99,1281,1282],{"class":139}," \u002Fopt\u002Flocal\u002Fbin\n",[99,1284,1285,1287,1290,1293,1296],{"class":101,"line":187},[99,1286,136],{"class":105},[99,1288,1289],{"class":139}," ln",[99,1291,1292],{"class":108}," -s",[99,1294,1295],{"class":139}," php56",[99,1297,1230],{"class":139},[11,1299,1300,1301,1304,1305,48],{},"Teraz (najlepiej po restarcie Terminala) pod nazwą ",[33,1302,1303],{},"php"," mamy odniesienie do ",[33,1306,229],{},[11,1308,1309],{},"Skąd jednak system wie którą biniarkę ma użyć? Decyduje o tym mechanizm PATH. W tej zmiennej globalnej znajdują się ścieżki przeszukiwania systemu przy próbie uruchomienia jakiegoś programu bez podania jego dokładnej ścieżki.",[11,1311,1312],{},"Zobaczmy jak wygląda zawartość tej zmiennej:",[89,1314,1316],{"className":91,"code":1315,"language":93,"meta":94,"style":94},"echo $PATH\n",[96,1317,1318],{"__ignoreMap":94},[99,1319,1320,1323],{"class":101,"line":102},[99,1321,1322],{"class":108},"echo",[99,1324,1325],{"class":180}," $PATH\n",[11,1327,1328],{},"W moim przypadku zwraca:",[89,1330,1333],{"className":1331,"code":1332,"language":118},[116],"\u002Fopt\u002Flocal\u002Fbin:\u002Fopt\u002Flocal\u002Fsbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin:\u002Fusr\u002Fsbin:\u002Fsbin\n",[96,1334,1332],{"__ignoreMap":94},[11,1336,1337,1338,1341,1342,1344,1345,1347,1348,1351],{},"Jak widać poszczególne ścieżki są rozdzielone znakiem dwukropka, a kolejność przeszukiwania jest następująca: ",[33,1339,1340],{},"od lewej do prawej"," – czyli w wypadku wydania polecenia ",[33,1343,1303],{},", najpierw jest przeszukiwany katalog: ",[33,1346,1266],{},", później ",[33,1349,1350],{},"\u002Fopt\u002Flocal\u002Fsbin"," itd…",[11,1353,1354,1355,1358],{},"Jeśli Twoje ścieżki wyglądają inaczej, zawsze można je zmienić, np. dodając taki wpis w pliku ",[33,1356,1357],{},".bash_profile"," w katalogu domowym:",[89,1360,1362],{"className":91,"code":1361,"language":93,"meta":94,"style":94},"export PATH=\"\u002Fopt\u002Flocal\u002Fbin:\u002Fopt\u002Flocal\u002Fsbin:$PATH\"\n",[96,1363,1364],{"__ignoreMap":94},[99,1365,1366,1369,1372,1375,1378,1381],{"class":101,"line":102},[99,1367,1368],{"class":173},"export",[99,1370,1371],{"class":180}," PATH",[99,1373,1374],{"class":173},"=",[99,1376,1377],{"class":139},"\"\u002Fopt\u002Flocal\u002Fbin:\u002Fopt\u002Flocal\u002Fsbin:",[99,1379,1380],{"class":180},"$PATH",[99,1382,1383],{"class":139},"\"\n",[62,1385],{},[11,1387,1388],{},"Tak wygląda przykład instalacji Apache 2 i PHP 5.6 za pomocą MacPorts. Oczywiście to zaledwie wycinek tematu, ot zaledwie wystarczający do uruchomienia serwera i lokalnej kopii jakiegoś starszego projektu. Szczegóły dotyczące konfiguracji mogą się różnić jeśli projekt posiada jakieś bardziej złożone zależności.",[11,1390,1391],{},"Na pewno jednak warto zapoznać się z dokumentacją MacPorts – znajdziesz tam instrukcję jak np. odinstalować zbędne\u002Fniechciane pakiety, a także jak je aktualizować.",[11,1393,1394],{},"Jeśli uważasz, że ten artykuł jakoś Ci się przydał lub masz jakieś uwagi którymi chciałbyś się podzielić, to sekcja komentarzy jest dla Ciebie. Zapraszam!",[1396,1397,1398],"style",{},"html pre.shiki code .sQJ0q, html code.shiki .sQJ0q{--shiki-light:#953800;--shiki-default:#953800;--shiki-dark:#FFA657}html pre.shiki code .sDkKp, html code.shiki .sDkKp{--shiki-light:#0550AE;--shiki-default:#0550AE;--shiki-dark:#79C0FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s-BGO, html code.shiki .s-BGO{--shiki-light:#0A3069;--shiki-default:#0A3069;--shiki-dark:#A5D6FF}html pre.shiki code .s5nWI, html code.shiki .s5nWI{--shiki-light:#CF222E;--shiki-default:#CF222E;--shiki-dark:#FF7B72}html pre.shiki code .s_bOF, html code.shiki .s_bOF{--shiki-light:#1F2328;--shiki-default:#1F2328;--shiki-dark:#E6EDF3}html pre.shiki code .sd69k, html code.shiki .sd69k{--shiki-light:#8250DF;--shiki-default:#8250DF;--shiki-dark:#D2A8FF}html pre.shiki code .s2sOu, html code.shiki .s2sOu{--shiki-light:#82071E;--shiki-light-font-style:italic;--shiki-default:#82071E;--shiki-default-font-style:italic;--shiki-dark:#FFA198;--shiki-dark-font-style:italic}",{"title":94,"searchDepth":187,"depth":187,"links":1400},[],[1402,1403,1404],"konfiguracja","nauka","osx","https:\u002F\u002F5icqmonbzxnrw2bn.public.blob.vercel-storage.com\u002Fwp\u002F2018\u002F09\u002Fmac-ports.png","2018-06-03","Mniej więcej od 2006 roku pracuję na Makach. Zaczynałem od Maca mini, potem iMac, a potem już różne Macbooki. Przez te wszystkie lata nabrałem przekonania…",false,"md",{},"\u002Fblog\u002Fosx-i-managery-oprogramowania-czyli-niezbyt-krotka-historia-o-tym-jak-musialem-sie-przeprosic-z-macports",[],{"title":5,"description":1407},{"loc":1411},"osx-i-managery-oprogramowania-czyli-niezbyt-krotka-historia-o-tym-jak-musialem-sie-przeprosic-z-macports","blog\u002F2018-06-03-osx-i-managery-oprogramowania-czyli-niezbyt-krotka-historia-o-tym-jak-musialem-sie-przeprosic-z-macports",[223,1402,1404,1303,1418],"virtual-host","2018-09-10",55,"NvSl9MmvxsRh6oEk30GqgkuNK3NxTHGmimc3tCFLanU",[1423,1428],{"title":1424,"path":1425,"stem":1426,"description":1427,"children":-1},"Front-End Developer Handbook 2018","\u002Fblog\u002Ffront-end-developer-handbook-2018","blog\u002F2018-04-17-front-end-developer-handbook-2018","Chcesz zostać front-end developerem? Zastanawiasz się jaką ścieżkę nauki obrać? Co znaczą poszczególne nazwy stanowisk i czym się różni Front-End Web Designer…",{"title":1429,"path":1430,"stem":1431,"description":1432,"children":-1},"Moje TOP 6 rozszerzeń do Google Chrome","\u002Fblog\u002Fmoje-top-6-rozszerzen-do-google-chrome","blog\u002F2018-09-10-moje-top-6-rozszerzen-do-google-chrome","Przeglądarka www jest tym dla internetu czym samochód dla drogi – umożliwia poruszanie się po inforstradzie 🙂 Tak jak samochód, tak i przeglądarka potrzebuje…",[],[1435,1444,1451,1458,1464,1470,1476,1483,1490,1497],{"id":1436,"description":1437,"extension":1438,"meta":1439,"name":1440,"slug":1441,"stem":1442,"__hash__":1443},"categories\u002Fcategories\u002Fartykuly.yml",null,"yml",{},"Artykuły","artykuly","categories\u002Fartykuly","aw37OCuccDz54Q07CDyESiid8VqHzN1nGf8cMOk_mI0",{"id":1445,"description":1437,"extension":1438,"meta":1446,"name":1447,"slug":1448,"stem":1449,"__hash__":1450},"categories\u002Fcategories\u002Fdostepnosc-cyfrowa.yml",{},"Dostępność cyfrowa","dostepnosc-cyfrowa","categories\u002Fdostepnosc-cyfrowa","6m7Ag8ZZ1EzfdgLuQnAUAMmRcjkgb2tpFM9n1qxANOM",{"id":1452,"description":1437,"extension":1438,"meta":1453,"name":1454,"slug":1455,"stem":1456,"__hash__":1457},"categories\u002Fcategories\u002Fkonferencje.yml",{},"Konferencje","konferencje","categories\u002Fkonferencje","dQl4MW7163iEG-b7Cv6FJ2gUxLqnpaiMOLixCXvhHTw",{"id":1459,"description":1437,"extension":1438,"meta":1460,"name":1461,"slug":1402,"stem":1462,"__hash__":1463},"categories\u002Fcategories\u002Fkonfiguracja.yml",{},"Konfiguracja","categories\u002Fkonfiguracja","ESTOPlJnBPnwuuqgOm7yqGAwgllsRJfSPVk22K_nQe0",{"id":1465,"description":1437,"extension":1438,"meta":1466,"name":1467,"slug":1403,"stem":1468,"__hash__":1469},"categories\u002Fcategories\u002Fnauka.yml",{},"Nauka","categories\u002Fnauka","3hQRPpuXqoNblW09Gj46arWFgH-3YfsMcgDyd4xLkN4",{"id":1471,"description":1437,"extension":1438,"meta":1472,"name":1473,"slug":1404,"stem":1474,"__hash__":1475},"categories\u002Fcategories\u002Fosx.yml",{},"OSX","categories\u002Fosx","WW8-0hUIqcivgAUl8WQuAvJ3-xVLRLjLkmP00PP4eXY",{"id":1477,"description":1437,"extension":1438,"meta":1478,"name":1479,"slug":1480,"stem":1481,"__hash__":1482},"categories\u002Fcategories\u002Fpolecane.yml",{},"Polecane","polecane","categories\u002Fpolecane","ckLXqMEBUHLxZavR7FGvpQjhxc7ycP_sQ7myEw64R9I",{"id":1484,"description":1437,"extension":1438,"meta":1485,"name":1486,"slug":1487,"stem":1488,"__hash__":1489},"categories\u002Fcategories\u002Fpomoce.yml",{},"Pomoce","pomoce","categories\u002Fpomoce","3oKSrG-VgrihP1nofQwuUItxUsyzVfgEfTMF2vq7EIw",{"id":1491,"description":1437,"extension":1438,"meta":1492,"name":1493,"slug":1494,"stem":1495,"__hash__":1496},"categories\u002Fcategories\u002Fprezentacje.yml",{},"Prezentacje","prezentacje","categories\u002Fprezentacje","4L5LUH8zxl0qXRvdymYTwtrkuj1tQun8R7yYz_OfndE",{"id":1498,"description":1437,"extension":1438,"meta":1499,"name":1500,"slug":1501,"stem":1502,"__hash__":1503},"categories\u002Fcategories\u002Fvue-js.yml",{},"Vue.js","vue-js","categories\u002Fvue-js","wOIuiF3jWQ-Zph8v7hYGNuLdJbCx0VguVg0loyh-Mwk",{"id":1505,"avatar":1506,"bio":1507,"extension":1438,"intro":1508,"links":1509,"meta":1514,"name":1515,"slug":6,"stem":1516,"__hash__":1517},"authors\u002Fauthors\u002Fmaciek-walczak.yml","\u002Fmaciek.png","Front-End Developer, Team Leader, trener i wykładowca na kursach programowania.","Cześć! Nazywam się Maciek i od 2005 roku pracuję jako programista – najpierw Full Stack, a obecnie jako Front-End Developer i Team Leader. Udzielam się też jako trener – prowadzę zajęcia w ramach kursów dla osób, które chcą rozpocząć swoją przygodę z programowaniem. Miałem też okazję występować jako prelegent na spotkaniach z serii tech3camp. Zapraszam do lektury mojego bloga, gdzie staram się publikować swoje przemyślenia w tematach mniej lub bardziej związanych z front-endem.",[1510],{"label":1511,"url":1512,"icon":1513},"YouTube","https:\u002F\u002Fwww.youtube.com\u002Fchannel\u002FUCMG_PvHPcSe0TCmnIXvzB1Q","i-lucide-youtube",{},"Maciej Walczak","authors\u002Fmaciek-walczak","6aJnd9c5TZ6nsZd_ycEjnlIJ4stHJREQCAgigfsc_Hk",[1519,1525,1532,1538,1545,1552,1558,1565,1572,1579,1586,1593,1600,1607,1614,1621,1627,1634,1641,1647,1653,1659,1665,1671,1677,1683,1690,1696,1702,1708,1714,1721,1727,1734,1741,1747,1754,1761,1767,1772,1777,1783,1790,1797,1803,1810,1817,1822,1829,1836,1843,1849,1856,1861,1868,1875,1881,1887,1893,1899,1906,1912,1919,1925,1931,1937,1943,1950,1956,1963,1969,1975,1982,1989,1996,2003,2009,2015,2022,2029,2036,2042,2049,2056,2063,2069,2076,2082,2089,2096,2102,2108,2114,2121,2127,2133,2139,2146,2153,2159,2165,2171,2177,2183,2190,2197,2204],{"id":1520,"extension":1438,"meta":1521,"name":1522,"slug":1522,"stem":1523,"__hash__":1524},"tags\u002Ftags\u002Faccessibility.yml",{},"accessibility","tags\u002Faccessibility","luflFOwd8bzxVK2qeBv80Pzxhje6x-hbJYaDUihuwOk",{"id":1526,"extension":1438,"meta":1527,"name":1528,"slug":1529,"stem":1530,"__hash__":1531},"tags\u002Ftags\u002Fangular.yml",{},"Angular","angular","tags\u002Fangular","z6SH0xA8FvB2X9kVmW-gtOdfx__mVrgIuA7HVCzfLjo",{"id":1533,"extension":1438,"meta":1534,"name":1535,"slug":223,"stem":1536,"__hash__":1537},"tags\u002Ftags\u002Fapache2.yml",{},"Apache2","tags\u002Fapache2","unCvGoDYof2-UiVE0lnN8eq5ru5roRg5_2mAo4TdEHk",{"id":1539,"extension":1438,"meta":1540,"name":1541,"slug":1542,"stem":1543,"__hash__":1544},"tags\u002Ftags\u002Faplikacje-i-uslugi-internetowe.yml",{},"aplikacje i usługi internetowe","aplikacje-i-uslugi-internetowe","tags\u002Faplikacje-i-uslugi-internetowe","G2Vojqp3Zd7QgL3zFleglcNCFkjzkAAeDQCScU6P8bc",{"id":1546,"extension":1438,"meta":1547,"name":1548,"slug":1549,"stem":1550,"__hash__":1551},"tags\u002Ftags\u002Fasynchronicznosc.yml",{},"asynchroniczność","asynchronicznosc","tags\u002Fasynchronicznosc","9RMRbHed9wQxDzVpEjO6Ay9zxWDCI0e4hE8F4zqGgj0",{"id":1553,"extension":1438,"meta":1554,"name":1555,"slug":1555,"stem":1556,"__hash__":1557},"tags\u002Ftags\u002Fautomatyzacja.yml",{},"automatyzacja","tags\u002Fautomatyzacja","vfUpLN8opVGvKUQgjGwEYxKfsZsLo3jxneMF9YMMVD0",{"id":1559,"extension":1438,"meta":1560,"name":1561,"slug":1562,"stem":1563,"__hash__":1564},"tags\u002Ftags\u002Fblokowanie-reklam.yml",{},"blokowanie reklam","blokowanie-reklam","tags\u002Fblokowanie-reklam","lq-tfiZ_uB_SerIlaIQFMOXvGIF3QoVVVyPxjwrEsR4",{"id":1566,"extension":1438,"meta":1567,"name":1568,"slug":1569,"stem":1570,"__hash__":1571},"tags\u002Ftags\u002Fblue-media.yml",{},"Blue Media","blue-media","tags\u002Fblue-media","z8G577CxZ7uSy-oNOkWtn3XgbsbjeKhuNby5Q6BCRuM",{"id":1573,"extension":1438,"meta":1574,"name":1575,"slug":1576,"stem":1577,"__hash__":1578},"tags\u002Ftags\u002Fchrome-extensions.yml",{},"chrome extensions","chrome-extensions","tags\u002Fchrome-extensions","Ip0fOTD9TMJiHcbXwgvAB2mFf_D1rlP5ZfkJG3GbCL0",{"id":1580,"extension":1438,"meta":1581,"name":1582,"slug":1583,"stem":1584,"__hash__":1585},"tags\u002Ftags\u002Fcmr.yml",{},"CMR","cmr","tags\u002Fcmr","eNv_ncSDXVsAFBCM8A4uJqAJItqSOP29I1Kabpm-l3Y",{"id":1587,"extension":1438,"meta":1588,"name":1589,"slug":1590,"stem":1591,"__hash__":1592},"tags\u002Ftags\u002Fcodersday.yml",{},"CodersDay","codersday","tags\u002Fcodersday","jLWUVGvGvi2irKFpFs0Ea6hkW71mLoiroOaGDcv1KWw",{"id":1594,"extension":1438,"meta":1595,"name":1596,"slug":1597,"stem":1598,"__hash__":1599},"tags\u002Ftags\u002Fcoderslab.yml",{},"CodersLab","coderslab","tags\u002Fcoderslab","NQEy1mD_tk9h71yZtjSoC4LhXGE54DGYaYgj3JOoUqY",{"id":1601,"extension":1438,"meta":1602,"name":1603,"slug":1604,"stem":1605,"__hash__":1606},"tags\u002Ftags\u002Fcolor-contrast-analyzer.yml",{},"Color Contrast Analyzer","color-contrast-analyzer","tags\u002Fcolor-contrast-analyzer","hGu3gO_owf9Tn4p5-FssJGVt4ToSsRfgjMjWdX2YgEI",{"id":1608,"extension":1438,"meta":1609,"name":1610,"slug":1611,"stem":1612,"__hash__":1613},"tags\u002Ftags\u002Fcolor-contrast-checker.yml",{},"Color Contrast Checker","color-contrast-checker","tags\u002Fcolor-contrast-checker","w8QKUWUH691wTFtUWDJMjbCvC6zlFZo6j4UDDSg1NDY",{"id":1615,"extension":1438,"meta":1616,"name":1617,"slug":1618,"stem":1619,"__hash__":1620},"tags\u002Ftags\u002Fconfrontjs.yml",{},"ConFrontJS","confrontjs","tags\u002Fconfrontjs","G4ePmrCbuLVA_ccxs7rcKSveQ3Kvn7y6-Ie9-H_5gpc",{"id":1622,"extension":1438,"meta":1623,"name":1624,"slug":1624,"stem":1625,"__hash__":1626},"tags\u002Ftags\u002Fcss3.yml",{},"css3","tags\u002Fcss3","f5Gtp9yzvmyMSZ-IN--19c7OR-v5LXzdvhNaEmiOsuw",{"id":1628,"extension":1438,"meta":1629,"name":1630,"slug":1631,"stem":1632,"__hash__":1633},"tags\u002Ftags\u002Fdesi-2020.yml",{},"DESI 2020","desi-2020","tags\u002Fdesi-2020","KeSFSj6VcXN0OciAUSTR8C1kiGUE3nLzGR1Pi5h_USE",{"id":1635,"extension":1438,"meta":1636,"name":1637,"slug":1638,"stem":1639,"__hash__":1640},"tags\u002Ftags\u002Fdns.yml",{},"DNS","dns","tags\u002Fdns","_TzsfpRL_ROm8MT5opDE1gg4GnuukbCyKY87W-IFl68",{"id":1642,"extension":1438,"meta":1643,"name":1644,"slug":1448,"stem":1645,"__hash__":1646},"tags\u002Ftags\u002Fdostepnosc-cyfrowa.yml",{},"dostępność cyfrowa","tags\u002Fdostepnosc-cyfrowa","8xZ6WRsys1qnr-vWH_Y4Ne8ac2RBONWyLrrm31u00xI",{"id":1648,"extension":1438,"meta":1649,"name":1650,"slug":1650,"stem":1651,"__hash__":1652},"tags\u002Ftags\u002Febook.yml",{},"ebook","tags\u002Febook","2Eqjl28-mK0fxpryAfGFMCel8MSByJVuQRsvy_S_cgY",{"id":1654,"extension":1438,"meta":1655,"name":1656,"slug":1656,"stem":1657,"__hash__":1658},"tags\u002Ftags\u002Felgato.yml",{},"elgato","tags\u002Felgato","ys3dC5VhSFe1JP_z6vIBB8W8WSJmrbB2C3gwTjSkINM",{"id":1660,"extension":1438,"meta":1661,"name":1662,"slug":1662,"stem":1663,"__hash__":1664},"tags\u002Ftags\u002Fevent.yml",{},"event","tags\u002Fevent","xcUCN7zoFrW8LCakRgx4s2r8YTGvycTdYQEyx_Yg7Fk",{"id":1666,"extension":1438,"meta":1667,"name":1668,"slug":1668,"stem":1669,"__hash__":1670},"tags\u002Ftags\u002Ffacebook.yml",{},"facebook","tags\u002Ffacebook","xk1FSKdOP155PdsTUy6lbefdoi6pOrwzZtVO8B52vMo",{"id":1672,"extension":1438,"meta":1673,"name":1674,"slug":1674,"stem":1675,"__hash__":1676},"tags\u002Ftags\u002Ffanpage.yml",{},"fanpage","tags\u002Ffanpage","RoMU1ceix1opnNG2LPoGzfOjVZE128Gmk12ZtDAQxrM",{"id":1678,"extension":1438,"meta":1679,"name":1680,"slug":1680,"stem":1681,"__hash__":1682},"tags\u002Ftags\u002Ffront-end.yml",{},"front-end","tags\u002Ffront-end","xKzeWb2B7yr2l4WBGtpyUzD1T_sBK5i-sb21-MEDOWw",{"id":1684,"extension":1438,"meta":1685,"name":1686,"slug":1687,"stem":1688,"__hash__":1689},"tags\u002Ftags\u002Ffront-end-developer.yml",{},"front-end developer","front-end-developer","tags\u002Ffront-end-developer","rHwMfWcbpd8wXqIVD1HzPWxBheHq8V_9TdHCHkz4Sp8",{"id":1691,"extension":1438,"meta":1692,"name":1693,"slug":1693,"stem":1694,"__hash__":1695},"tags\u002Ftags\u002Ffrontend.yml",{},"frontend","tags\u002Ffrontend","CxnBlT8roa7DydGYGxgRVXKKTvJrkjMMQrvHZQMxukA",{"id":1697,"extension":1438,"meta":1698,"name":1699,"slug":1699,"stem":1700,"__hash__":1701},"tags\u002Ftags\u002Fgamepad.yml",{},"gamepad","tags\u002Fgamepad","Gsi3HzAfw68AJR6qCt8qeuS7Euw22ZMSpnaKNw0QV-A",{"id":1703,"extension":1438,"meta":1704,"name":1705,"slug":1705,"stem":1706,"__hash__":1707},"tags\u002Ftags\u002Fgoalkicker.yml",{},"goalkicker","tags\u002Fgoalkicker","L_zNfxJfO6lZOUiLaE5m_ggQUX0komBXXth0SrszFUk",{"id":1709,"extension":1438,"meta":1710,"name":1711,"slug":1711,"stem":1712,"__hash__":1713},"tags\u002Ftags\u002Fhandbook.yml",{},"handbook","tags\u002Fhandbook","D0-VmrV-_WQQnlVvaePXWciWrJ8zuWNJoJULW_rOpmI",{"id":1715,"extension":1438,"meta":1716,"name":1717,"slug":1718,"stem":1719,"__hash__":1720},"tags\u002Ftags\u002Fhtml-api.yml",{},"HTML API","html-api","tags\u002Fhtml-api","DBZv8DJ2hZR64GhJALF_-YzUG4mZWG9m2VZE76eM_wY",{"id":1722,"extension":1438,"meta":1723,"name":1724,"slug":1724,"stem":1725,"__hash__":1726},"tags\u002Ftags\u002Fhtml5.yml",{},"html5","tags\u002Fhtml5","fcqPnoul30jPoEk6tO8K9WWwU8XyFz3N7-GAse2uwsQ",{"id":1728,"extension":1438,"meta":1729,"name":1730,"slug":1731,"stem":1732,"__hash__":1733},"tags\u002Ftags\u002Finteligentny-dom.yml",{},"inteligentny dom","inteligentny-dom","tags\u002Finteligentny-dom","LwWCH_MYDfKSgfl9wyRWrWegvCgb2hAnXMlON3OQ0dk",{"id":1735,"extension":1438,"meta":1736,"name":1737,"slug":1738,"stem":1739,"__hash__":1740},"tags\u002Ftags\u002Fjaws.yml",{},"Jaws","jaws","tags\u002Fjaws","aklZIj6z2_fzRQ_h9RtAfvXgDhHH9v02f224m6u8B7s",{"id":1742,"extension":1438,"meta":1743,"name":1744,"slug":1744,"stem":1745,"__hash__":1746},"tags\u002Ftags\u002Fjunior.yml",{},"junior","tags\u002Fjunior","ega8Cjq-Z5swNxexQG-ROW8hvi0eaDCJj-l4ILDW-4U",{"id":1748,"extension":1438,"meta":1749,"name":1750,"slug":1751,"stem":1752,"__hash__":1753},"tags\u002Ftags\u002Fkariera-w-it.yml",{},"kariera w IT","kariera-w-it","tags\u002Fkariera-w-it","tyqsMUw9eQaVgTnsZy9DZAHFQXZNe0sDZavdgJ0KTcA",{"id":1755,"extension":1438,"meta":1756,"name":1757,"slug":1758,"stem":1759,"__hash__":1760},"tags\u002Ftags\u002Fkobiety-w-it.yml",{},"kobiety w IT","kobiety-w-it","tags\u002Fkobiety-w-it","Gm0D6QX7IUT1CDThH6LuhQtWOOWFop09QiDZwX_Tm7c",{"id":1762,"extension":1438,"meta":1763,"name":1764,"slug":1764,"stem":1765,"__hash__":1766},"tags\u002Ftags\u002Fkonferencja.yml",{},"konferencja","tags\u002Fkonferencja","-n95F1XvVC7rR9O9sOxyxnKIJBm4i5o3Md_Q-Z72occ",{"id":1768,"extension":1438,"meta":1769,"name":1455,"slug":1455,"stem":1770,"__hash__":1771},"tags\u002Ftags\u002Fkonferencje.yml",{},"tags\u002Fkonferencje","Qf_9S1xyR0mqWi1CzdU_iGIwcU8Z0ET_3JBEIOWhaxA",{"id":1773,"extension":1438,"meta":1774,"name":1402,"slug":1402,"stem":1775,"__hash__":1776},"tags\u002Ftags\u002Fkonfiguracja.yml",{},"tags\u002Fkonfiguracja","r2NNwL_ZY7xvPy0pUN2IPK8U6qBXSfay_MZbt1FpC2I",{"id":1778,"extension":1438,"meta":1779,"name":1780,"slug":1780,"stem":1781,"__hash__":1782},"tags\u002Ftags\u002Fkoronawirus.yml",{},"koronawirus","tags\u002Fkoronawirus","8DgCLCZ1uSF_kl0dmgiEVVM-KkZFxGpXJus3fmMH4sE",{"id":1784,"extension":1438,"meta":1785,"name":1786,"slug":1787,"stem":1788,"__hash__":1789},"tags\u002Ftags\u002Fksiazki-programistyczne.yml",{},"książki programistyczne","ksiazki-programistyczne","tags\u002Fksiazki-programistyczne","DF1l0MrjODlaeQ0evw8JedIJJb3v4MpesV0Fi6HpViQ",{"id":1791,"extension":1438,"meta":1792,"name":1793,"slug":1794,"stem":1795,"__hash__":1796},"tags\u002Ftags\u002Flenovo-m710q.yml",{},"lenovo m710q","lenovo-m710q","tags\u002Flenovo-m710q","H2DSlpm_FUSkpZXj5AZxrXjTzdGXcfWhIFXE8MAjoJw",{"id":1798,"extension":1438,"meta":1799,"name":1800,"slug":1800,"stem":1801,"__hash__":1802},"tags\u002Ftags\u002Fmid.yml",{},"mid","tags\u002Fmid","61US_hzDYC5fw5yPUWya7ZNjc9fOddRUJyOJU3oVKaM",{"id":1804,"extension":1438,"meta":1805,"name":1806,"slug":1807,"stem":1808,"__hash__":1809},"tags\u002Ftags\u002Fmini-pc.yml",{},"mini pc","mini-pc","tags\u002Fmini-pc","zCEZkcdMTwLbaNGmGiT8qGCtnECxEafkiJ-glDrozw0",{"id":1811,"extension":1438,"meta":1812,"name":1813,"slug":1814,"stem":1815,"__hash__":1816},"tags\u002Ftags\u002Fnas.yml",{},"NAS","nas","tags\u002Fnas","RsN64SVV6BmbaR7e4pVVvGgbxQ0q8ihj5J4b_1oPH2k",{"id":1818,"extension":1438,"meta":1819,"name":1403,"slug":1403,"stem":1820,"__hash__":1821},"tags\u002Ftags\u002Fnauka.yml",{},"tags\u002Fnauka","bMIyGRMcT5SRj0bxdrER6sibTNLAHr1enmElQI67jTo",{"id":1823,"extension":1438,"meta":1824,"name":1825,"slug":1826,"stem":1827,"__hash__":1828},"tags\u002Ftags\u002Fnauka-programowania.yml",{},"nauka programowania","nauka-programowania","tags\u002Fnauka-programowania","M04c5RtH0Fu4ikOuW9fLy2-g2YBIAX0Yj9SHKEwOuUg",{"id":1830,"extension":1438,"meta":1831,"name":1832,"slug":1833,"stem":1834,"__hash__":1835},"tags\u002Ftags\u002Fnvda.yml",{},"NVDA","nvda","tags\u002Fnvda","AS3XsW73sA9-MAI4JVv4y7luo2oGkpXrGptc51MKLQY",{"id":1837,"extension":1438,"meta":1838,"name":1839,"slug":1840,"stem":1841,"__hash__":1842},"tags\u002Ftags\u002Fochrona-rodzicielska.yml",{},"ochrona rodzicielska","ochrona-rodzicielska","tags\u002Fochrona-rodzicielska","DZHsS1aBzb6OmeQFhCXy3Qu3QUMHsrbbN62bXmyBB0Q",{"id":1844,"extension":1438,"meta":1845,"name":1846,"slug":1846,"stem":1847,"__hash__":1848},"tags\u002Ftags\u002Foptimization.yml",{},"optimization","tags\u002Foptimization","fJedkuv-GIoYXYs-z7AFgjvCxunavWHOWZDesN1EgFU",{"id":1850,"extension":1438,"meta":1851,"name":1852,"slug":1853,"stem":1854,"__hash__":1855},"tags\u002Ftags\u002Forganizacja-pracy.yml",{},"organizacja pracy","organizacja-pracy","tags\u002Forganizacja-pracy","IJWHAuqRIlzOIgQbp6B0dYJLpApXOyvDii-k8n_CUCQ",{"id":1857,"extension":1438,"meta":1858,"name":1473,"slug":1404,"stem":1859,"__hash__":1860},"tags\u002Ftags\u002Fosx.yml",{},"tags\u002Fosx","QymfouNjzTcNrsPkrZeaPTZdKpMsdYilpn7HRI1FxQQ",{"id":1862,"extension":1438,"meta":1863,"name":1864,"slug":1865,"stem":1866,"__hash__":1867},"tags\u002Ftags\u002Fpanel-macro.yml",{},"panel macro","panel-macro","tags\u002Fpanel-macro","WrhWywY5PTfhm7n_TuxTZEWwebeWKfYiQf6n6nh19t4",{"id":1869,"extension":1438,"meta":1870,"name":1871,"slug":1872,"stem":1873,"__hash__":1874},"tags\u002Ftags\u002Fpassword-manager.yml",{},"password manager","password-manager","tags\u002Fpassword-manager","viAfKlsGbzjczJJrb8pwaB4tInjCfLzynbSm-GRQz4Y",{"id":1876,"extension":1438,"meta":1877,"name":1878,"slug":1878,"stem":1879,"__hash__":1880},"tags\u002Ftags\u002Fpdf.yml",{},"pdf","tags\u002Fpdf","UTB02hK82S5LzDB9kqZWrDRFb8SYzHfFRgCsqFwdBcE",{"id":1882,"extension":1438,"meta":1883,"name":1884,"slug":1303,"stem":1885,"__hash__":1886},"tags\u002Ftags\u002Fphp.yml",{},"PHP","tags\u002Fphp","Id59psmnOEw6xZ04LGSXqaCSXElgAZVfZdIWk4TTMmU",{"id":1888,"extension":1438,"meta":1889,"name":1890,"slug":1890,"stem":1891,"__hash__":1892},"tags\u002Ftags\u002Fpi-hole.yml",{},"pi-hole","tags\u002Fpi-hole","1YJ1tr1Tr23ItFg6rYXw6iKjvPJCdYb2MB_5W1FdZNw",{"id":1894,"extension":1438,"meta":1895,"name":1896,"slug":1896,"stem":1897,"__hash__":1898},"tags\u002Ftags\u002Fpixel-mania.yml",{},"pixel-mania","tags\u002Fpixel-mania","N9WX_K8mFmAndjRdRzZX1PonLHyneP4XCJe9kQlGOpY",{"id":1900,"extension":1438,"meta":1901,"name":1902,"slug":1903,"stem":1904,"__hash__":1905},"tags\u002Ftags\u002Fplaywright.yml",{},"PlayWright","playwright","tags\u002Fplaywright","fZAbd5k3k85yeGire7iJzvnRk00Wfww8OTu1h6rEuZM",{"id":1907,"extension":1438,"meta":1908,"name":1909,"slug":1909,"stem":1910,"__hash__":1911},"tags\u002Ftags\u002Fpraca.yml",{},"praca","tags\u002Fpraca","ra3_bHnZqDrux1PiJ_pW6eqfX7l-uIFUPUhPqaq5cf4",{"id":1913,"extension":1438,"meta":1914,"name":1915,"slug":1916,"stem":1917,"__hash__":1918},"tags\u002Ftags\u002Fpraca-zdalna.yml",{},"praca zdalna","praca-zdalna","tags\u002Fpraca-zdalna","HD5EOgzs-b3t5KIBRxlWQr0FuQVJ4N7eLQJV77YWcqc",{"id":1920,"extension":1438,"meta":1921,"name":1922,"slug":1922,"stem":1923,"__hash__":1924},"tags\u002Ftags\u002Fprezentacja.yml",{},"prezentacja","tags\u002Fprezentacja","eiP5x-l400TtOy-gxO3TyOqYwcD4LP65jJ--7H-jyng",{"id":1926,"extension":1438,"meta":1927,"name":1928,"slug":1928,"stem":1929,"__hash__":1930},"tags\u002Ftags\u002Fprivacy.yml",{},"privacy","tags\u002Fprivacy","Ln1AAZQ3fPOzuMJB0BWwUsjwaWTI7cFtzI6TaPrvKXc",{"id":1932,"extension":1438,"meta":1933,"name":1934,"slug":1934,"stem":1935,"__hash__":1936},"tags\u002Ftags\u002Fprogramowanie.yml",{},"programowanie","tags\u002Fprogramowanie","EUO8owu6V8cJivzRtVvD12KgW4ojOCp-N7aI4euHEa0",{"id":1938,"extension":1438,"meta":1939,"name":1940,"slug":1940,"stem":1941,"__hash__":1942},"tags\u002Ftags\u002Fproxmox.yml",{},"proxmox","tags\u002Fproxmox","2AZfZmPZffxT3YuTVGHbsGvqKzpNRfot-OjFS6kkSYs",{"id":1944,"extension":1438,"meta":1945,"name":1946,"slug":1947,"stem":1948,"__hash__":1949},"tags\u002Ftags\u002Fprywatny-dns.yml",{},"prywatny DNS","prywatny-dns","tags\u002Fprywatny-dns","kq-27-SNzP2YitFANg5iLgu0kdzyufoiOCLYApAehUc",{"id":1951,"extension":1438,"meta":1952,"name":1953,"slug":1953,"stem":1954,"__hash__":1955},"tags\u002Ftags\u002Fprzekwalifikowanie.yml",{},"przekwalifikowanie","tags\u002Fprzekwalifikowanie","TqQNM6H8dfkRMTjNT8ZWyzynSMGeFjxseCt7-fZq0nA",{"id":1957,"extension":1438,"meta":1958,"name":1959,"slug":1960,"stem":1961,"__hash__":1962},"tags\u002Ftags\u002Freact.yml",{},"React","react","tags\u002Freact","nXIcvF19iFz3UIXk2jbbJKRrr1_S9NLNYH3PUX_a2C4",{"id":1964,"extension":1438,"meta":1965,"name":1966,"slug":1966,"stem":1967,"__hash__":1968},"tags\u002Ftags\u002Fredux.yml",{},"redux","tags\u002Fredux","CYtiFQKJae6MZE4Z_2qWwt7OGctPAutMzfD9f35a6-A",{"id":1970,"extension":1438,"meta":1971,"name":1972,"slug":1972,"stem":1973,"__hash__":1974},"tags\u002Ftags\u002Fretro.yml",{},"retro","tags\u002Fretro","5AjMkMU44tDn8TV2FSTzbrvxoE7rplMmkLej7E-RIYM",{"id":1976,"extension":1438,"meta":1977,"name":1978,"slug":1979,"stem":1980,"__hash__":1981},"tags\u002Ftags\u002Fretropi.yml",{},"RetroPi","retropi","tags\u002Fretropi","v_z0VjrAHiqYkzENB2DRMmo-V9VwE-8D2V_pRT-EBxw",{"id":1983,"extension":1438,"meta":1984,"name":1985,"slug":1986,"stem":1987,"__hash__":1988},"tags\u002Ftags\u002Frozwoj.yml",{},"rozwój","rozwoj","tags\u002Frozwoj","RkL4It2FQnfcyHt1gNPjQ7cLqxrpgMy9ewFnPkF5sms",{"id":1990,"extension":1438,"meta":1991,"name":1992,"slug":1993,"stem":1994,"__hash__":1995},"tags\u002Ftags\u002Frzemieslnik.yml",{},"rzemieślnik","rzemieslnik","tags\u002Frzemieslnik","fLVgsq47mga12X6gNKQ6QM5tpWdwICnLJwfSDwk1xEE",{"id":1997,"extension":1438,"meta":1998,"name":1999,"slug":2000,"stem":2001,"__hash__":2002},"tags\u002Ftags\u002Fsamodzielnosc.yml",{},"samodzielność","samodzielnosc","tags\u002Fsamodzielnosc","mu6DqJVN-dhRiXCnV4A5ewTRx_ndkWH_pu7Fdf7n6XI",{"id":2004,"extension":1438,"meta":2005,"name":2006,"slug":2006,"stem":2007,"__hash__":2008},"tags\u002Ftags\u002Fselfhosting.yml",{},"selfhosting","tags\u002Fselfhosting","ScAMu2i5h-QpOOGEuIvBN9fQn0ZmfyYfvD-561cUzKs",{"id":2010,"extension":1438,"meta":2011,"name":2012,"slug":2012,"stem":2013,"__hash__":2014},"tags\u002Ftags\u002Fsenior.yml",{},"senior","tags\u002Fsenior","DFUFihqxLSI2g34_DFYLVSXQnP79966itG8NnBs44TE",{"id":2016,"extension":1438,"meta":2017,"name":2018,"slug":2019,"stem":2020,"__hash__":2021},"tags\u002Ftags\u002Fsieci-komputerowe.yml",{},"sieci komputerowe","sieci-komputerowe","tags\u002Fsieci-komputerowe","lziU51DXijHvzSYVgbK5r_aRCBS9KLdgU5FWjE3pD4s",{"id":2023,"extension":1438,"meta":2024,"name":2025,"slug":2026,"stem":2027,"__hash__":2028},"tags\u002Ftags\u002Fsmart-home.yml",{},"smart home","smart-home","tags\u002Fsmart-home","wjGS16vdTWjBvPIfyZ7Jjv2rSAUfgKxYQTfVmfE_oNc",{"id":2030,"extension":1438,"meta":2031,"name":2032,"slug":2033,"stem":2034,"__hash__":2035},"tags\u002Ftags\u002Fsmr.yml",{},"SMR","smr","tags\u002Fsmr","hd_86HRNRQ5vp9GFDgvFR3iXcRs57XNvESz05e-vh-o",{"id":2037,"extension":1438,"meta":2038,"name":2039,"slug":2039,"stem":2040,"__hash__":2041},"tags\u002Ftags\u002Fspotkanie.yml",{},"spotkanie","tags\u002Fspotkanie","G-4xZsmDWDaZnA1t7fWrsGY0CvA2PWBRch_ISxgV3eY",{"id":2043,"extension":1438,"meta":2044,"name":2045,"slug":2046,"stem":2047,"__hash__":2048},"tags\u002Ftags\u002Fstore-management.yml",{},"store management","store-management","tags\u002Fstore-management","BDlb8jliEvzP4ByR_nwh5YcPAphegyjsvxnwheppvwM",{"id":2050,"extension":1438,"meta":2051,"name":2052,"slug":2053,"stem":2054,"__hash__":2055},"tags\u002Ftags\u002Fstream-deck.yml",{},"stream deck","stream-deck","tags\u002Fstream-deck","ETKaTcPMSGRXiF8fX9HaCChrkWvjK1Qhc8DCtKNRLFo",{"id":2057,"extension":1438,"meta":2058,"name":2059,"slug":2060,"stem":2061,"__hash__":2062},"tags\u002Ftags\u002Fstudia-podyplomowe.yml",{},"studia podyplomowe","studia-podyplomowe","tags\u002Fstudia-podyplomowe","CllbIMrpHwk7nHpdgNS5EJlfoY37AYtu6D28xcL7B8Y",{"id":2064,"extension":1438,"meta":2065,"name":2066,"slug":2066,"stem":2067,"__hash__":2068},"tags\u002Ftags\u002Fswitch.yml",{},"switch","tags\u002Fswitch","PqeuQm8ai89DcVFTdIBBYnrs6IVq0oystkF3JdV2cbQ",{"id":2070,"extension":1438,"meta":2071,"name":2072,"slug":2073,"stem":2074,"__hash__":2075},"tags\u002Ftags\u002Fszafa-rack.yml",{},"szafa rack","szafa-rack","tags\u002Fszafa-rack","Tdq-0TqjtHfOvyhnHIwrDsPzQYMI6Rkb3iJBoqgudAc",{"id":2077,"extension":1438,"meta":2078,"name":2079,"slug":2079,"stem":2080,"__hash__":2081},"tags\u002Ftags\u002Fszkolenia.yml",{},"szkolenia","tags\u002Fszkolenia","Ty9KLofCdboQngGvYkJOH1YZpBX-E3_Y1SLrdGucptY",{"id":2083,"extension":1438,"meta":2084,"name":2085,"slug":2086,"stem":2087,"__hash__":2088},"tags\u002Ftags\u002Fszkolenie-front-end.yml",{},"szkolenie front-end","szkolenie-front-end","tags\u002Fszkolenie-front-end","yv2XwBbhwF8m1vceHXglBt_lax32HDj4iqYS8ymfIpM",{"id":2090,"extension":1438,"meta":2091,"name":2092,"slug":2093,"stem":2094,"__hash__":2095},"tags\u002Ftags\u002Fszkolnictwo-zawodowe.yml",{},"szkolnictwo zawodowe","szkolnictwo-zawodowe","tags\u002Fszkolnictwo-zawodowe","wHy70cvPzW-iXNTesa8dnmsUN3GZ6RQ_08rvp2jcr-o",{"id":2097,"extension":1438,"meta":2098,"name":2099,"slug":2099,"stem":2100,"__hash__":2101},"tags\u002Ftags\u002Ftech3camp.yml",{},"tech3camp","tags\u002Ftech3camp","2xN4prsqldeVcTsCibyLj-T84k_q27SekfsQ9H3ml6w",{"id":2103,"extension":1438,"meta":2104,"name":2105,"slug":2105,"stem":2106,"__hash__":2107},"tags\u002Ftags\u002Ftestowanie.yml",{},"testowanie","tags\u002Ftestowanie","bQ7J7HLrZe6c9Me3bn_3VCbshav5tsqNTBIwd0xkRaQ",{"id":2109,"extension":1438,"meta":2110,"name":2111,"slug":2111,"stem":2112,"__hash__":2113},"tags\u002Ftags\u002Ftesty.yml",{},"testy","tags\u002Ftesty","JDNtVkIDLY5e-th779qHOQFRrQ6Ywoq8us2HXlBz9PY",{"id":2115,"extension":1438,"meta":2116,"name":2117,"slug":2118,"stem":2119,"__hash__":2120},"tags\u002Ftags\u002Ftruenas.yml",{},"TrueNas","truenas","tags\u002Ftruenas","jGviBDrcOLcc4LIDAMUINs_clt6cqQIbnmCsGjlBoEU",{"id":2122,"extension":1438,"meta":2123,"name":2124,"slug":2124,"stem":2125,"__hash__":2126},"tags\u002Ftags\u002Ftuya.yml",{},"tuya","tags\u002Ftuya","MwpPoYlxeAiebaRVNdxytmFq9k0BpiTEbiEvwh4pfq4",{"id":2128,"extension":1438,"meta":2129,"name":2130,"slug":2130,"stem":2131,"__hash__":2132},"tags\u002Ftags\u002Fublock.yml",{},"ublock","tags\u002Fublock","EPnKEvKkfWB2hbpkolTIytNQ9c12jSrnctf8CWEVbUM",{"id":2134,"extension":1438,"meta":2135,"name":2136,"slug":1418,"stem":2137,"__hash__":2138},"tags\u002Ftags\u002Fvirtual-host.yml",{},"virtual host","tags\u002Fvirtual-host","Ru2r4wU7txKcWDbL3hq2QGx7v8gKwTJE25BItrzjqCQ",{"id":2140,"extension":1438,"meta":2141,"name":2142,"slug":2143,"stem":2144,"__hash__":2145},"tags\u002Ftags\u002Fvoiceover.yml",{},"VoiceOver","voiceover","tags\u002Fvoiceover","7_jZqkfOk163vezQCATCpkIhdxmxfXe5dsLjgORGRWc",{"id":2147,"extension":1438,"meta":2148,"name":2149,"slug":2150,"stem":2151,"__hash__":2152},"tags\u002Ftags\u002Fvue.yml",{},"Vue","vue","tags\u002Fvue","9ztytvQnoFLSGIXCwVz0HDl1yEBgdxBtwfIb4xxED8w",{"id":2154,"extension":1438,"meta":2155,"name":2156,"slug":1501,"stem":2157,"__hash__":2158},"tags\u002Ftags\u002Fvue-js.yml",{},"vue.js","tags\u002Fvue-js","ZEglZJ4b32MxGRUCWg3ij0_Sz-YkJDI60yOFUG3Dip8",{"id":2160,"extension":1438,"meta":2161,"name":2162,"slug":2162,"stem":2163,"__hash__":2164},"tags\u002Ftags\u002Fvuejs.yml",{},"vuejs","tags\u002Fvuejs","Qz3030ujqXE_33tL5hbF8n1MGIh1jpRtdzXVrQT79jA",{"id":2166,"extension":1438,"meta":2167,"name":2168,"slug":2168,"stem":2169,"__hash__":2170},"tags\u002Ftags\u002Fvuenews.yml",{},"vuenews","tags\u002Fvuenews","5I7T-cG9aZzeR62I-tWYDruQvjkSbRxtAeDI9otWrR8",{"id":2172,"extension":1438,"meta":2173,"name":2174,"slug":2174,"stem":2175,"__hash__":2176},"tags\u002Ftags\u002Fvuetoolbox.yml",{},"vuetoolbox","tags\u002Fvuetoolbox","y5NXiZfQviI16DIkNjTxSwnLQIyrXs7OBZjVY1IyNmk",{"id":2178,"extension":1438,"meta":2179,"name":2180,"slug":2180,"stem":2181,"__hash__":2182},"tags\u002Ftags\u002Fvuex.yml",{},"vuex","tags\u002Fvuex","ksF82HLoN49mJn2cJ0DhYz_Dt6mlrJDT82Ufu6QKmKQ",{"id":2184,"extension":1438,"meta":2185,"name":2186,"slug":2187,"stem":2188,"__hash__":2189},"tags\u002Ftags\u002Fweb-development.yml",{},"web development","web-development","tags\u002Fweb-development","144N0DLmtEIX98zdSuOWIsCZYMHyxStp8_ZksWK2M7E",{"id":2191,"extension":1438,"meta":2192,"name":2193,"slug":2194,"stem":2195,"__hash__":2196},"tags\u002Ftags\u002Fwladyslawowo.yml",{},"Władysławowo","wladyslawowo","tags\u002Fwladyslawowo","LgrtfAzosbyNoEeZ6_GWMrueP29fN7fPL3N5Kp5Wm4w",{"id":2198,"extension":1438,"meta":2199,"name":2200,"slug":2201,"stem":2202,"__hash__":2203},"tags\u002Ftags\u002Fwork-life-balance.yml",{},"work-life balance","work-life-balance","tags\u002Fwork-life-balance","hXw9EMtMUVm71LSUBz1o6Ttz7xlyrsnMo-VOEfMJwr0",{"id":2205,"extension":1438,"meta":2206,"name":2207,"slug":2208,"stem":2209,"__hash__":2210},"tags\u002Ftags\u002Fxbox.yml",{},"XBOX","xbox","tags\u002Fxbox","tDsqBFEx88ZSQxV8Q78dFlkSdjNdQOwFU4jn0D2wcYQ",1790284821750]