No więc stało się. Jestem programistą Javy. I co z tego? A no trzeba w domu jakoś odreagować.
Na pierwszy ogień poszedł
Ruby i to nie byle jaki jak
1.9.3-p0. Windowsowa paczuszka ściągnięta wprost z
RubyInstaller ślicznie zadomowiła się w moim systemie operacyjnym, dając mi nawet w trakcie instalacji dodać poleceni
ruby do ścieżki systemowej.
No ale nie o Rube-go chodzi tylko o chęć napisania jakiegoś drobiazgu z meta-programowaniem. No więc potrzebny jest edytor.
gem install redcar
redcar install
redcar
I moim pięknym oczom ukazał się turbo edytor
RedCar - i od razu zrezygnowałem nawet z myśli o płaceniu za
TextMate na Mac-u. Napisałem sobie bardzo prosty program, który pozwolę sobie dumnie nazwać klient "REST". Tak naprawdę to prawie na jedno by wyszło jakby podziedziczył po Net::HTTP, ale że miało być "meta-programowanie" to wyszło tak:
require 'net/http'
require 'uri'
class REST
def self.method_missing(m, *args, &block)
uri = URI(args[0])
Net::HTTP.start(uri.host, uri.port) do |http|
puts "Calling #{m} REST call."
return http.send(m.downcase.to_sym, uri.path)
end
end
end
res = REST.GET("http://www.google.pl/")
puts res.body
Nikt, nie mówił, że jest się czym chwalić, ale coś mnie tchnęło, żeby pobrać (a co) zawartość wyżej wymienionej strony w
PhantomJS. Trwa to wieki i gdyby tak działała przeglądarka to pewnie zrezygnowałbym z Internetu, albo kazał, za korzystanie z niego, sobie płacić, ale ... na szczęście
Google Chrome ładuje
WebKit raz a nie za każdym razem gdy otwieram zakładkę - więc da się żyć. Na
stronie projektu, gdy napisałem już skrypt w JavaScript zauważyłem, że mogę też podawać skrypty w
CoffeeScript pominę więc moje wypociny w JS i podam odrazu wersję Coffee, a jak interesuje Cię co napisałem w JS to wklej sobie poniższą zawartość na stronie
Try CoffeeScript i będziesz wiedział.
page = new WebPage()
if phantom.args.length == 0
console.log 'Usage: google.coffee some-url'
phantom.exit()
else
t = Date.now()
address = phantom.args[0]
page.open address, (status) ->
if status != 'success'
console.log 'FAIL to load the address'
else
t = Date.now() - t
console.log 'Loading time ' + t + ' msec'
console.log 'Page content is \n' + page.evaluate () ->
document.documentElement.innerHTML
phantom.exit()Edytor kodu na
Blogger jak zwykle daje ciała nie wspierając wstawek kodu źródłowego, ale co tam. Najgorsze, że
RedCar nie ma wsparcia dla
CoffeeScript, ale może się dorobi jak skończy być Alphą. No nic, czas kończyć. Na dziś starczy już tego dobrego wracamy do
Thinking in Java, którego autor i tak co 100 zdanień kończy stwierdzeniem w stylu
"Java to ogromny krok na drodze postępu w tej dziedzinie, ale Python i tak robi to lepiej."
P.S. Moim ogromnym odkryciem w Ruby było odkrycie, że każdy operator to metoda. Kiedyś nie mogłem znaleźć w dokumentacji co dokładnie robi ~= (czy tam =~) bo szukałem jakiegoś działu dokumentacji
Ruby-Doc, który definiowałby operatory zamiast sprawdzić metodę =~
klasy String albo
RegExp.