Uniksowy skrypt /etc/init.d w Ruby

Opublikowane przez Jarosław Zabiełło Fri, 29 Sep 2006 12:04:00 GMT

Ruby całkiem dobrze nadaje się do pisania skryptów systemowych. W sumie nie wiem dlaczego do tej pory pisałem skrypty tego typu w uniksowym bash’u. :)

#!/usr/bin/env ruby

MONGREL = "/usr/bin/mongrel_rails"
PROJECT = "/home/httpd/somedomain.com/rails_project"

def execute(action, project)
  Dir.chdir(project)
  print "#{MONGREL} #{action}..."
  $defout.flush # unbuffered output
  `#{MONGREL} cluster::#{action}`
  puts 'done'
end

case ARGV.first
  when 'start': execute 'start', PROJECT
  when 'stop': execute 'stop', PROJECT
  when 'restart': execute 'restart', PROJECT
end

unless %w{start stop restart}.include? ARGV.first
  puts "Usage: sudo #{__FILE__} {start|stop|restart}"
  exit
end

Posted in  | Tagi , ,  | 1 comment

Nowa strona Rubiego

Opublikowane przez Jarosław Zabiełło Tue, 12 Sep 2006 07:42:00 GMT

Strona domowa Rubiego zmieniała swój wygląd. Jest znacznie lepiej. :)

Posted in  | Tagi  | 5 comments

Sun zatrudnił programistów JRuby

Opublikowane przez Jarosław Zabiełło Fri, 08 Sep 2006 08:33:00 GMT

W środowisku javowców Ruby jest językiem który robi trochę zamieszania (jakoś tak się składa, że Ruby bardziej przemawia do programistów Javy niż Python). Cieszy zatem, że firma Sun podjęła decyzję o wsparciu projektu JRuby zatrudniając jego czołowych developerów. Powinno to znacznie przyśpieszyć prace nad tym projektem podobnie jak stało się z IronPythonem, gdy Microsoft zatrudnił jego twórcę.

Jestem ciekaw jak długo programiści zachowają entuzjazm dla swego języka, gdy będzie można generować taki sam bytecode Javy lecz w niezrównanie prostszy sposób. :)

Przykładowy kod Javy:

public class Filter {
  public static void main(String[] args) {
    List list = new java.util.ArrayList();
    list.add("Tim"); list.add("Ike"); list.add("Tina");
    Filter filter = new Filter();
    for (String item : filter.filterLongerThan(list, 3)) { 
      System.out.println( item ); 
    }
  }
  public List filterLongerThan(List list, int length) {
    List result = new ArrayList();
    for (String item : list) {
      if (item.length() <= length) { result.add( item ); }
    }
    return result;
  }
}

A oto odpowiadający mu kod w Ruby:

list = ['Tim', 'Ike', 'Tina']
list.select {|n| n.length > 3}.each {|n| puts n}

Oczywiście to nie wszystko. Dzięki JRuby można uzyskać efekty kompletnie nieosiągalne w standardowej Javie – np. można pracować z biblioteką Swing w sposób interaktywny, z poziomu interpretera zmieniając na żywo jej obiekty.

Wkrótce ma także być gotowa wersja Railsów działająca z JRuby (Zobacz prezentację w PowerPoint). Tym samym odeszłyby wszelkie uwagi co do wydajności Railsów, bo współczesna wirtualna maszyna Javy jest tak silnie zoptymalizowna że dorównuje językowi C++. Oczywiście model wątkowy JRuby jest zgodny z wydajnym i dojrzałym modelem wątkowym Javy – po prostu z niego korzysta.

Posted in ,  | Tagi , ,  | 32 comments

IronPython 1.o

Opublikowane przez Jarosław Zabiełło Wed, 06 Sep 2006 15:10:00 GMT

W dniu wczorajszym (5 września 2006) światło dzienne ujrzała wersja 1.0 projektu Iron Python – implementacji języka Python działającej na platformie .NET i generującej kod 100% kompatybilny z CLR (Common Language Runtime).

Iron Python może być w zasadzie uważany za produkt sygnowany przez Microsoft (pliki DLL są podpisane certyfikatem cyfrowym firmy Microsoft) i jako taki na pewno zyskuje sobie spore grono zwolenników używających go zarówno jako języka do tworzenia aplikacji jak i języka do osadzania w swoich własnych aplikacjach.

Do uruchomienia IronPython’a wymagany jest .NET Framework w wersji 2.0, gdyż wykorzystuje on jej rozszerzenia, jak na przykład typy generyczne, czy metody dynamiczne. Deweloperzy otrzymują do ręki, podobnie jak w standardowym Pythonie, interaktywną konsolę z interpreterem języka, ale także możliwość statycznej kompilacji do plików wykonywalnych “exe”, czy bibliotek “dll”. Pomimo zgodności samego języka, obie implementacje jednak się różnią, jak choćby nieobecnością wielu standardowych modułów. Szczegółowe informacje o różnicach można znaleźć na witrynie projektu.

Zobacz artykuł “Microsoft i dynamiczne języki”.

Zobacz stronę “Jim Hugunin’s Thinking Dynamic ” zawierającą informację autora IronPythona o wydaniu wersji 1.0.

Zobacz prezentację wideo: The Screening Room. #8 August 2006: IronPython (dodane: 10 września 2006)

Posted in  | Tagi , ,  | 1 comment