<?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>Creyn &#187; JavaScript</title>
	<atom:link href="http://blog.creyn.pl/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.creyn.pl</link>
	<description>Programmer&#039;s notes</description>
	<lastBuildDate>Mon, 22 Aug 2016 07:00:21 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.0.38</generator>
	<item>
		<title>Invite your friends to your Facebook fanpage like a Dev</title>
		<link>http://blog.creyn.pl/2016/08/22/invite-your-friends-to-your-facebook-fanpage-like-a-dev/</link>
		<comments>http://blog.creyn.pl/2016/08/22/invite-your-friends-to-your-facebook-fanpage-like-a-dev/#comments</comments>
		<pubDate>Mon, 22 Aug 2016 07:00:21 +0000</pubDate>
		<dc:creator><![CDATA[creyn]]></dc:creator>
				<category><![CDATA[Around dev world]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.creyn.pl/?p=509</guid>
		<description><![CDATA[In this post I will show you a very easy way to invite all of your Facebook friends to like your Facebook fanpage. This is a little hack that will require some source code analyzing and dev skills. But after all, this is extremely easy. After I created the Facebook fanpage for this blog (you...]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">In this post I will show you a very easy way to invite all of your Facebook friends to like your Facebook fanpage. This is a little hack that will require some source code analyzing and dev skills. But after all, this is extremely easy.</p>
<p style="text-align: justify;"><span id="more-509"></span></p>
<p style="text-align: justify;">After I created the Facebook fanpage for this blog (you can find it here: <a href="https://facebook.com/creynblog/" target="_blank">https://facebook.com/creynblog/</a>) I decided that I want to invite all of my friends to like it. I wanted them all to join me on my path as a blogger. But the default &#8220;Facebook way&#8221; is to click them one by one on the <strong>&#8220;Invite&#8221;</strong> button next to the photo. And I had a lot of friends (222). So I decided that I will use my dev skills.</p>
<p style="text-align: justify;"><div class='warning2'></p>
<p style="text-align: justify;">If you want to follow, please have in mind that this is not an official method and it worked on 2016-06-14 and maybe it isn&#8217;t working when you are reading this. This is more advanced stuff and you are doing it at your own risk.</p>
<p style="text-align: justify;"></div></p>
<p style="text-align: justify;">So first, go to the Facebook fanpage <strong>&#8220;Invite Friends&#8221;</strong> section:</p>
<p style="text-align: justify;"><img class="aligncenter size-full wp-image-586" src="http://blog.creyn.pl/wp-content/uploads/2016/08/f1.png" alt="f1" width="280" height="284" /></p>
<p style="text-align: justify;">Then you will see the list of your friends. Exactly 100 of your friends. So you have to scroll the list to the very bottom and as you will be doing this, you will notice that more of them are showing. So please scroll to the very bottom of the list (to have all of your friends shown). Next let&#8217;s see under the hood. I am using Chrome browser for this. So right click on the <strong>&#8220;Invite&#8221;</strong> button and choose something like <strong>&#8220;Inspect element&#8221;</strong>. The new window should open and then you can find the source code of the button:</p>
<p style="text-align: justify;"><img class="aligncenter size-full wp-image-587" src="http://blog.creyn.pl/wp-content/uploads/2016/08/f3.png" alt="f3" width="404" height="93" /></p>
<p style="text-align: justify;">You can see that the button has a class attribute called &#8220;<strong>uiButton</strong>&#8220;. So we can select all of the buttons using javasctipt. Open the <strong>Console</strong> tab and now you can execute some code in the context of the website. Quick look at the documentation (<a href="https://developer.chrome.com/devtools/docs/console#selecting-elements" target="_blank">https://developer.chrome.com/devtools/docs/console#selecting-elements</a>) and we can see that to get all elements with specific class we should use the &#8220;$$()&#8221; function. It will give us an array of all buttons that we want to click. So if we count them we should get number of our friends. In my case there was 218, so 4 of my friends were missing. Probably there is some &#8220;don&#8217;t invite me to the fanpage&#8221; option that they selected.</p>
<p style="text-align: justify;">And now the final step. We could execute a &#8220;clicking&#8221; action on each button. It would be exactly like we were clicking all of them manually. This is done by following script:</p>
<p style="text-align: justify;"><img class="aligncenter size-full wp-image-588" src="http://blog.creyn.pl/wp-content/uploads/2016/08/f4.png" alt="f4" width="281" height="25" /></p>
<p style="text-align: justify;">And after just about 1 second (on Chrome browser) all of my friends were spammed with my invitation and I was so happy seeing them accepting the invitation :)</p>
<p style="text-align: justify;">C.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.creyn.pl/2016/08/22/invite-your-friends-to-your-facebook-fanpage-like-a-dev/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Frontendowe narzędzia</title>
		<link>http://blog.creyn.pl/2016/04/05/frontendowe-narzedzia/</link>
		<comments>http://blog.creyn.pl/2016/04/05/frontendowe-narzedzia/#comments</comments>
		<pubDate>Tue, 05 Apr 2016 22:49:54 +0000</pubDate>
		<dc:creator><![CDATA[creyn]]></dc:creator>
				<category><![CDATA[Programmer's notes]]></category>
		<category><![CDATA[Daj się poznać 2016]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.creyn.pl/?p=369</guid>
		<description><![CDATA[Poniżej zamieszczam listę i krótki opis narzędzi wykorzystywanych do tworzenia aplikacji frontendowych. Będzie ona z sukcesywnie rozwijana. Node.js (https://nodejs.org/en/) JavaScriptowy silnik (?) do tworzenia aplikacji serwerowych. &#8220;Node.js® is a JavaScript runtime built on Chrome&#8217;s V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient.&#8221;   NPM (Node Package Manager)...]]></description>
				<content:encoded><![CDATA[<p style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span style="font-family: Calibri; font-size: 11.0pt;">Poniżej zamieszczam listę i krótki opis narzędzi wykorzystywanych do tworzenia aplikacji frontendowych. Będzie ona z sukcesywnie rozwijana.</span></p>
<p style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span id="more-369"></span></p>
<table border="0">
<tbody>
<tr>
<td><img class="aligncenter wp-image-372 size-thumbnail" src="http://blog.creyn.pl/wp-content/uploads/2016/04/logo_node-150x150.png" alt="logo_node" width="150" height="150" /></td>
<td>
<ul>
<li><span style="font-family: Calibri; font-size: 11.0pt;">Node.js (</span><a href="https://nodejs.org/en/" target="_blank"><span style="font-family: Calibri; font-size: 11.0pt;">https://nodejs.org/en/</span></a><span style="font-family: Calibri; font-size: 11.0pt;">)</span>
<ul>
<li><span style="font-family: Calibri; font-size: 11.0pt;">JavaScriptowy silnik (?) do tworzenia aplikacji serwerowych.</span></li>
<li><span style="font-family: Calibri; font-size: 11.0pt;">&#8220;Node.js® is a JavaScript runtime built on Chrome&#8217;s V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient.&#8221;</span></li>
</ul>
</li>
</ul>
</td>
</tr>
<tr>
<td> <a href="http://blog.creyn.pl/wp-content/uploads/2016/04/logo_npm-e1459896122363.png"><img class="aligncenter wp-image-375 size-full" src="http://blog.creyn.pl/wp-content/uploads/2016/04/logo_npm-e1459896122363.png" alt="logo_npm" width="100" height="39" /></a></td>
<td>
<ul>
<li><span style="font-family: Calibri; font-size: 11.0pt;">NPM (Node Package Manager) (</span><a href="https://www.npmjs.com/" target="_blank"><span style="font-family: Calibri; font-size: 11.0pt;">https://www.npmjs.com/</span></a><span style="font-family: Calibri; font-size: 11.0pt;">)</span>
<ul>
<li><span style="font-family: Calibri; font-size: 11.0pt;">Menadżer paczek dla Node.js.</span></li>
<li><span style="font-family: Calibri; font-size: 11.0pt;">&#8220;npm is the package manager for JavaScript. Find, share, and reuse packages of code from hundreds of thousands of developers — and assemble them in powerful new ways. &#8220;</span></li>
<li><span style="font-family: Calibri; font-size: 11.0pt;">Instaluje się razem z Node.js</span></li>
<li><strong><span style="font-family: Calibri; font-size: 11pt;">Uwaga. Z powodu błędu związanego z przesyłaniem tokenów do uwierzytelnienia zaleca się aktualizację do najnowszej wersji. Więcej tutaj: </span><a href="https://nodejs.org/en/blog/vulnerability/npm-tokens-leak-march-2016/" target="_blank"><span style="font-family: Calibri; font-size: 11pt;">https://nodejs.org/en/blog/vulnerability/npm-tokens-leak-march-2016/</span></a></strong></li>
</ul>
</li>
</ul>
</td>
</tr>
<tr>
<td> <img class="aligncenter size-thumbnail wp-image-378" src="http://blog.creyn.pl/wp-content/uploads/2016/04/logo_grunt-150x150.png" alt="logo_grunt" width="150" height="150" /></td>
<td>
<ul>
<li><span style="font-family: Calibri; font-size: 11.0pt;">Grunt (</span><a href="http://gruntjs.com/" target="_blank"><span style="font-family: Calibri; font-size: 11.0pt;">http://gruntjs.com/</span></a><span style="font-family: Calibri; font-size: 11.0pt;">)</span>
<ul>
<li><span style="font-family: Calibri; font-size: 11.0pt;">Program do automatyzacji</span></li>
<li><span style="font-family: Calibri; font-size: 11.0pt;">&#8220;GruntThe JavaScript Task Runner&#8221;</span></li>
<li><span style="font-family: Calibri; font-size: 11.0pt;">Instalacja za pomocą npm</span></li>
</ul>
</li>
</ul>
</td>
</tr>
<tr>
<td> <img class="aligncenter wp-image-377 size-thumbnail" src="http://blog.creyn.pl/wp-content/uploads/2016/04/logo_gulp-150x150.png" alt="logo_gulp" width="150" height="150" /></td>
<td>
<ul>
<li><span style="font-family: Calibri; font-size: 11.0pt;">Gulp (</span><a href="http://gulpjs.com/" target="_blank"><span style="font-family: Calibri; font-size: 11.0pt;">http://gulpjs.com/</span></a><span style="font-family: Calibri; font-size: 11.0pt;">)</span>
<ul>
<li><span style="font-family: Calibri; font-size: 11.0pt;">Program do automatyzacji (konkurencja Grunta?)</span></li>
<li><span style="font-family: Calibri; font-size: 11.0pt;">&#8220;Automate and enhance your workflow&#8221;</span></li>
<li><span style="font-family: Calibri; font-size: 11.0pt;">Instalacja za pomocą npm</span></li>
</ul>
</li>
</ul>
</td>
</tr>
<tr>
<td> <img class="aligncenter size-thumbnail wp-image-376" src="http://blog.creyn.pl/wp-content/uploads/2016/04/logo_bower-150x150.png" alt="logo_bower" width="150" height="150" /></td>
<td>
<ul>
<li><span style="margin-top: 0; margin-bottom: 0; vertical-align: middle;">Bower (</span><a href="http://bower.io/" target="_blank"><span style="font-family: Calibri; font-size: 11.0pt;">http://bower.io/</span></a><span style="font-family: Calibri; font-size: 11.0pt;">)</span>
<ul>
<li><span style="font-family: Calibri; font-size: 11.0pt;">Menadżer pakietów dla frontendu (npm instaluje pakiety dla Node po stronie serwera, bower po stronie klienta)</span></li>
<li><span style="font-family: Calibri; font-size: 11.0pt;">&#8220;A package manager for the web&#8221;</span></li>
<li><span style="font-family: Calibri; font-size: 11.0pt;">&#8220;Web sites are made of lots of things — frameworks, libraries, assets, and utilities. Bower manages all these things for you.&#8221;</span></li>
<li><span style="font-family: Calibri; font-size: 11.0pt;">Instalacja za pomocą npm (bo jest to pakiet rozszerzający możliwości Node)</span></li>
</ul>
</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>C.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.creyn.pl/2016/04/05/frontendowe-narzedzia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aurelia, początki</title>
		<link>http://blog.creyn.pl/2016/04/04/aurelia-poczatki/</link>
		<comments>http://blog.creyn.pl/2016/04/04/aurelia-poczatki/#comments</comments>
		<pubDate>Mon, 04 Apr 2016 21:03:14 +0000</pubDate>
		<dc:creator><![CDATA[creyn]]></dc:creator>
				<category><![CDATA[Programmer's notes]]></category>
		<category><![CDATA[Aurelia]]></category>
		<category><![CDATA[Daj się poznać 2016]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.creyn.pl/?p=355</guid>
		<description><![CDATA[Projekt Smart Lodówka będzie miał prostą stronę ze statystykami. Chcę skorzystać z okazji i poznać nowy frontendowy framework. Wiele dobrego słyszałem o Aurelii. Aurelia jest kolejnym frameworkiem JavaScript, a używając słów jej autorów: &#8220;Aurelia is the most powerful, flexible and forward-looking JavaScript client framework in the world.&#8221; &#8220;Aurelia is a next generation UI framework&#8220;. Z...]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">Projekt Smart Lodówka będzie miał prostą stronę ze statystykami. Chcę skorzystać z okazji i poznać nowy frontendowy framework. Wiele dobrego słyszałem o Aurelii. <a href="http://aurelia.io/" target="_blank">Aurelia</a> jest kolejnym frameworkiem JavaScript, a używając słów jej autorów:</p>
<blockquote>
<p style="text-align: justify;">&#8220;<span class="st"><em>Aurelia</em> is the most powerful, flexible and forward-looking JavaScript client framework in the world.</span>&#8221;<br />
&#8220;<span class="st"><em>Aurelia</em> is a next generation UI framework</span>&#8220;.</p>
</blockquote>
<p style="text-align: justify;">Z tego co widzę, jest to taki następca bardzo popularnego Angulara. Choć może bardziej konkurencja. Nigdy nie myślałem o sobie jako o frontendowcu i dlatego wszelkie biblioteki ułatwiające programowanie w JavaScript uważam za świetny pomysł i im więcej tym lepiej.</p>
<p style="text-align: justify;">Jak zatem zacząć? Na stronie Aurelii jest dość dokładny poradnik <a href="http://aurelia.io/docs.html#/aurelia/framework/1.0.0-beta.1.1.4/doc/article/getting-started" target="_blank">Getting Started</a>. Dzięki niemu udało mi się stworzyć przykładową stronę.</p>
<p style="text-align: justify;">Pierwsza rzecz, która rzuca się w oczy: bardzo dużo tutaj wszelkiego rodzaju: gulpów, gruntów, nodów, npmów i jsmpów. Chyba nadeszła chwila, aby dokładniej poznać te narzędzia. Na początek, fajnie że autorzy przygotowali &#8220;Starter Kit&#8221; aby przejść przez tutorial i zacząć poznawać Aurelię. Po pobraniu okazało się że ma on &#8230; 10 MB. Wydało mi się to trochę dużo. Drugą rzeczą jest liczba modułów. Aurelia jest bardzo modułowa i podobno można używać tylko tych, które są naprawdę potrzebne. Okazuje się jednak, że do wyświetlenia mojej banalnej strony potrzebne są praktycznie wszystkie. Nie wykluczam, że coś źle robię i w przyszłości będzie możliwe ograniczenie tej liczby, ale nie wiem czy nie jest to za bardzo modułowe :)</p>
<p style="text-align: justify;">Ucząc się najlepiej zacząć od początku, także chciałem krok po kroku stworzyć najprostszy możliwy projekt. Do solucji w Visual Studio dodałem folder Aurelia i dwa podstawowe pliki: &#8220;config.js&#8221; i &#8220;system.js&#8221;. Pierwszy zawiera listę mapowań modułów na konkretne pliki. Być może tutaj nie potrzebuję mieć wszystkich a jedynie kilka podstawowych. Sprawa do zgłębienia. W każdym razie przenosiłem po kolei pakiety ze &#8220;Starter Kita&#8221; do solucji. Udało mi się uruchomić sam framework w tym sensie, że nie dostawałem już błędów 404 z plikami JavaScript Aurelii. Doszedłem do etapu tworzenia swojej aplikacji.</p>
<p style="text-align: justify;">Aby to zrobić należy stworzyć dwa pliki: &#8220;app.js&#8221; i &#8220;app.html&#8221;. Plik &#8220;app.js&#8221; jest modelem dla widoku z &#8220;app.html&#8221;. Takie MVC. Przychodzący request jest mapowany do konkretnego widoku w ruterze, który konfigurowany jest właśnie w startowym pliku aplikacji &#8220;app.js&#8221;. Ja dodałem tam tylko jeden widok: events. Wyświetla on listę wszystkich zdarzeń pobranych z API, które stworzyłem wcześniej (<a title="http://blog.creyn.pl/2016/03/20/owin-webapi-na-hostingu-webio/" href="http://blog.creyn.pl/2016/03/20/owin-webapi-na-hostingu-webio/" target="_blank">OWIN WebApi na hostingu Webio</a>).</p>
<p style="text-align: justify;">Na koniec opublikowałem zmiany na hosting Webio i uruchomiłem przeglądarkę. Bardzo się zdziwiłem jak długo trwa wczytanie strony. Każdy moduł Aurelii jest pobierany jako jeden plik JavaScript a jest ich wszystkich &#8230; 95. Nic dziwnego, że trochę to trwa (30 sekund).</p>
<p style="text-align: justify;"><img class="aligncenter wp-image-358 size-full" src="http://blog.creyn.pl/wp-content/uploads/2016/04/Aurelia_requests_1.png" alt="Aurelia_requests_1" width="719" height="65" />Ale jest tutaj pole do optymalizacji. W każdym razie drugie załadowanie strony, przy plikach pobranych z cache, jest znośne, choć też zbyt wolne dla tego typu strony. Trwa 1,5 s. Jest to koszt odpalenia frameworka i wszystkich dobroci, które ze sobą niesie, a których chyba nie zauważę w tak prostym projekcie.</p>
<p style="text-align: justify;"><img class="aligncenter wp-image-359 size-full" src="http://blog.creyn.pl/wp-content/uploads/2016/04/Aurelia_requests_2.png" alt="Aurelia_requests_2" width="749" height="65" />Ciekawostka. Przed opublikowaniem tego posta postanowiłem jeszcze raz zrobić test strony po paru godzinach nieaktywności. Strona załadowała się w &#8230; 4 i pół minuty. Wydaje mi się, że na optymalizację będę musiał przeznaczyć więcej czasu niż początkowo zakładałem. Mam też nadzieję że nie będę musiał rezygnować z Aurelii.</p>
<p style="text-align: justify;"><img class="aligncenter size-full wp-image-360" src="http://blog.creyn.pl/wp-content/uploads/2016/04/Aurelia_requests_3.png" alt="Aurelia_requests_3" width="752" height="71" /></p>
<p style="text-align: justify;">Podsumowując, udało mi się uruchomić swoją pierwszą stronę we frameworku Aurelia. Na stronie możliwe będzie monitorowanie zdarzeń jakie wystąpią w mojej Smart Lodówce. Dostępna jest pod adresem: <a href="http://smartlodowka.creyn.pl/" target="_blank">http://smartlodowka.creyn.pl</a> (jeśli długo nic nie widać &#8230; cierpliwości). Dla przypomnienia, ta sama lista zdarzeń z systemu dostępna jest bezpośrednio z API: <a href="http://smartlodowka.creyn.pl/api/events" target="_blank">http://smartlodowka.creyn.pl/api/events</a>.</p>
<p style="text-align: justify;">C.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.creyn.pl/2016/04/04/aurelia-poczatki/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
