18 kwietnia 2017

Dla programistów leniuszków. Javascript

W czasie poświątecznego tygodnia, z racji braku poniedziałku, postanowiłem przetłumaczyć z Wujka Boba coś krótkiego. Ale jak sprawdzić, który wpis w blogu jest najkrótszy?

Spróbuję to sobie zautomatyzować.

Odpalam przeglądarkę Chrome.
Wchodzę na dowolny wpis w blogu:
Po lewej stronie mam menu z linkami do artykułów:



Odpalam sobie konsolę developerską przez klawisz F12

Klikam zakładkę "Console"



Skorzystam z bardzo szybkiego i popularnego frameworku Vanilla JS http://vanilla-js.com/ :)

Dumnie wyprodukowane przy pomocy:

Żeby wrzucić wszystkie linki do tablicy:

allLinks = document.getElementsByTagName('a');

Żeby wyświetlić wszystkie linki z tej tablicy:

for (i = 0; i < allLinks.length; i++) {
    console.log (allLinks[i].href);
}

Żeby otworzyć jakąś stronę w tle muszę:

Stworzyć obiekt AJAX:

var r = new XMLHttpRequest();

Skonfigurować go:

r.open("GET", allLinks[3], true);

Zdefiniować funkcję na wypadek sukcesu żądania (na razie wyświetlam rozmiar strony):

r.onreadystatechange = function () {
  if (r.readyState != 4 || r.status != 200) return;
  console.log(r.responseText.length);
};

i wypuścić psy:

r.send()


Oczom moim ukazał się rozmiar zdalnej strony:

32266


A teraz tylko zrobić to dla wszystkich linków, za każdym razem sprawdzając czy dany rozmiar jest najmniejszy:

allLinks = document.getElementsByTagName('a');

var currentSmalest = 99999999999;

for (i = 0; i < allLinks.length; i++) {  
 var r = new XMLHttpRequest();
 r.open("GET", allLinks[i], false);
 
 r.onreadystatechange = function () {
      if (r.readyState != 4 || r.status != 200) return;
 
   if (r.responseText.length < currentSmalest){
     currentSmalest = r.responseText.length;
     console.log("Current smalest: " + currentSmalest +", " + allLinks[i].href); 
   }
    };

 r.send();

}


No dobra mój fantastyczny skrypt znalazł mi stronę z powitaniem.

Current smalest: 17711, http://blog.cleancoder.com/


Nie jest to najdłuższa strona ;). Dodam kod omijający tę stronę w funkcji anonimowej podłączonej do r.onreadystatechange :

....
if(allLinks[i].href === "http://blog.cleancoder.com/") return;
....


Teraz wynik jest ciekawszy:

Current smalest: 18911, http://blog.cleancoder.com/uncle-bob/2013/05/27/TransformationPriorityAndSorting.html

Tam jest zamieszczony komiks:



 Na razie nie chcę tłumaczyć tego komiksu, a więc idę do wyniku wyżej:

Current smalest: 19157, http://blog.cleancoder.com/uncle-bob/2015/11/18/TheProgrammersOath.html


Tam jest przysięga programisty, już to przetłumaczyłem :) Idę dalej:

Current smalest: 21418, http://blog.cleancoder.com/uncle-bob/2017/03/06/TestingLikeTheTSA.html


Świetny wybór mój drogi skrypcie.
Krótkie, treściwe, niezbyt stare, o TDD i polemika z DHH.



Strzał w dziesiątkę.
Zabieram się za tłumaczenie :)

Brak komentarzy:

Prześlij komentarz

Podstawy Programowania Funkcyjnego Epizod 3

Czy wszystkie Zasady Się Zmieniają? Kiedy tylko zaczynamy używać nowego paradygmatu , porównujemy z nim na...