Linux-EduCD i rubiny :)

Dystrybucja bazująca na Knoppiksie zawierająca bogaty zbiór oprogramowania edukacyjnego

Moderator: Rajmund Radziewicz

Linux-EduCD i rubiny :)

Postby Rajmund Radziewicz on Sat Jan 06, 2007 11:42 pm

Witam,

Tak a'propos narzędzi do Ruby i Rails w Linux-EduCD ...

Język Ruby wręcz lawinowo zdobywa popularność. Wg TIOBE Programming Community Index Ruby był językiem roku 2006. Z pewnością przyczynił się do tego rewelacyjny framework webowy - Ruby on Rails. Książka Thomasa Dave'a "Programming Ruby" (właśnie wydał ją Helion) była najlepiej sprzedającą się książką informatyczną w Amazonie w zeszłym roku!

Ponadto IDE do Ruby'ego - RadRails otrzymało nagrodę dla najlepszego narzędzia deweloperskiego opartego na Eclipse: http://tinyurl.com/yjnb4q
Nie wspomnę już o JRuby, inicjatywach Suna, zamieszaniu jakie Ruby wprowadza w środowisku javowców i nie tylko, czy książce "Beyon Java", w której kilku gurus od Javy opisują dlaczego Ruby pod wieloma względami przewyższa Javę :)

Miło że linuksiarz i zapalony emacsowiec Matz, zrobił swoim językiem (mam na myśli Ruby'ego a nie to co Matz trzyma za zębami kiedy śpi) tyle zamieszania. Mimo że Ruby wiekowo jest rówieśnikiem Pythona - dzięki Railsom, zainteresowaniu dużych korporacji i masie tworzonych ostatnio bibliotek przeżywa teraz prawdziwy renesans :)

Ot, tak mi się zebrało po przeczytaniu kolejnych niusów... i przetestowaniu świeżutkiego RadRails
;)

Pozdrawiam,
Rajmund
Rajmund Radziewicz
 
Posts: 1096
Joined: Sat Sep 06, 2003 7:33 am

Postby cogito on Sun Jan 07, 2007 1:10 am

Nie znam Ruby, ale słyszałem że to podobno taki lepszy, nowocześniejszy Smalltalk, w pełni obiektowy z przejrzystą składnią.
Mój znajomy, dawny zagorzały zwolennik Perla teraz zakochał się w tym języku i siedzi właśnie nad jakąś aplikacją po nocach :)
Dunkel 'taakato mats'y Linux ey
cogito
 
Posts: 187
Joined: Mon Dec 01, 2003 12:45 pm

Postby Rajmund Radziewicz on Sun Jan 07, 2007 1:47 am

Składnia Ruby'ego podobna jest trochę do Smalltalka, trochę do Perla. Najbardziej jednak bazuje na CLU (jak potwierdza twórca języka). Takie rozwiązania jak domknięcia funkcji, iteratory, czy kontynuacje są rozwiązane podobnie jak w Scheme..

A co do przejrzystości - to uważam że Ruby jest bardziej czytelny niż Python nawet :) Zresztą najprostszy na świecie przykład. Weryfikacja atrybutów pliku (czy jest zapisywalny). W Pythonie:
Code: Select all
>>> import os, sys, stat
>>> os.stat(r'/home/rajmund/linki')[stat.ST_MODE] & stat.S_IWRITE
0

To samo w Ruby:
Code: Select all
>>> File.writable?('/home/rajmund/linki')
false

:)


Pozdrawiam,
Rajmund
Rajmund Radziewicz
 
Posts: 1096
Joined: Sat Sep 06, 2003 7:33 am

Postby cogito on Sun Jan 07, 2007 7:37 pm

Python ma tę dużą zaletę że łatwo i szybko tworzy się w nim GUI dzięki TkInter czy PyGTK. W porównaniu do Javy i Swinga to wręcz kilka razy mniej kodu
Dunkel 'taakato mats'y Linux ey
cogito
 
Posts: 187
Joined: Mon Dec 01, 2003 12:45 pm

Postby Rajmund Radziewicz on Sun Jan 07, 2007 10:27 pm

cogito wrote:Python ma tę dużą zaletę że łatwo i szybko tworzy się w nim GUI dzięki TkInter czy PyGTK


Tkinter czy PyGTK to po zwyczajnie pythonowe implementacje bibliotek Tk i GTK, które występują w niemal każdym nowoczesnym języku opensource. Również w Ruby jest moduł Tk, jest także GTK, Ruby/QT, czy FXRuby (biblioteka Fox dla Rubye'go). W JRuby można wręcz używać SWT czy Swinga :):)

Dodatkowo przy znakomitym wsparciu w Ruby dla wątków (są nawet w dosowej implementacji tego języka :)) łatwo pisze się nawet rozbudowane aplikacje z GUI, bez zamartwiania się o zakleszczające się wątki logiki aplikacji z wątkami samej biblioteki graficznej. Kto pisał coś większego niż dwa okna dialogowe z pięcioma widgetami w Swingu - wie co mam na myśli)


Pozdrawiam,
Rajmund
Rajmund Radziewicz
 
Posts: 1096
Joined: Sat Sep 06, 2003 7:33 am

Postby cogito on Mon Jan 08, 2007 12:33 pm

Rajmund Radziewicz wrote:Tkinter czy PyGTK to po zwyczajnie pythonowe implementacje bibliotek Tk i GTK, które występują w niemal każdym nowoczesnym języku opensource. Również w Ruby jest moduł Tk, jest także GTK, Ruby/QT, czy FXRuby (biblioteka Fox dla Rubye'go). W JRuby można wręcz używać SWT czy Swinga :):)


no fakt. Używałem tylko Tkintera i wydał mi się po prostu wygodniejszy niż Tk zintegrowany z Perlem :)

Rajmund Radziewicz wrote:Dodatkowo przy znakomitym wsparciu w Ruby dla wątków (są nawet w dosowej implementacji tego języka :)) łatwo pisze się nawet rozbudowane aplikacje z GUI



Wątki w DOSIE ? :) Ciekawe jak to zrobili :)


pozdrawiam
Dunkel 'taakato mats'y Linux ey
cogito
 
Posts: 187
Joined: Mon Dec 01, 2003 12:45 pm

Postby Rajmund Radziewicz on Mon Jan 08, 2007 12:54 pm

cogito wrote:Wątki w DOSIE ? :) Ciekawe jak to zrobili :)


Zwyczajnie. Za takie rzeczy odpowiada maszyna wirtualna (chociaż YARV, maszyna wirtualna jaka jest już zintegrowana z Ruby 1.9 ma nawet mapowanie na wątki natywne... ale to już nie w DOS oczywiście).

Zresztą zobacz jak prosto i elegancko manipuluje się wątkami w Ruby (przy okazji mały pokazik obsługi wyjątków):

Code: Select all
threads = []
6.times { |i|
  threads << Thread.new(i) {
    raise "uuuups!" if i == 3
    puts i
  }
}
threads.each {|t| t.join }


W efekcie dostaniesz:

Code: Select all
01
2
45prog.rb:4: uuuups! (RuntimeError)



Java to przy tym niezgrabna bestia :):)


Rajmund
Rajmund Radziewicz
 
Posts: 1096
Joined: Sat Sep 06, 2003 7:33 am

Postby undres on Mon Jan 08, 2007 6:31 pm

Rajmund Radziewicz wrote:Java to przy tym niezgrabna bestia :):)



Ale chyba Java jest doskonale obiektowa. Miała przecież poprawiac
błędy C++ który przez to że chce być kompatybilny z C okazał się hybrydą rozwiązań obiektowych i strukturalnych. No i to wielodziedziczenie
Przynajmniej tak mnie uczono na obiektówce :) Mój wykładowca opowiadał o tym jak źle zaprojektowane mechanizmy w C++ wymusiły
dorabianie do języka STL.


A.
Linux uber alles
undres
 
Posts: 6
Joined: Fri Jan 05, 2007 7:07 pm

Postby Rajmund Radziewicz on Tue Jan 09, 2007 9:20 pm

undres wrote:Ale chyba Java jest doskonale obiektowa. Miała przecież poprawiac
błędy C++



Żartujesz. Prawda? :)

Java również stara się być "kompatybilna" z rozwiązaniami C++ i nie jest do końca
obiektowa. Typy proste nie pochodzą z klasy Object. W Javie obiekty pomieszane są
więc z typami prymitywnymi. Np. liczby nie są obiektami co powoduje że pisanie bardziej skomplikowanych operacji wykonuących cokolwiek na zakresach liczb staje się mało przejrzyste. Przy operacjach na typach prostych i obiektach trzeba kombinować z rzutowaniami, klasami "opakowującymi" i zajmować się masą innych bzdur, które są niuansami języka - a nie faktycznym problemem do rozwiązania.

Nie chcę się wypowiadać autorytatywnie na temat Javy, bo nie jestem ekspertem od tego języka - ale czysto obiektowym językiem jest Smalltalk i jego młodszy krewniak Ruby.

Dla przykładu (zrób coś takiego w Javie i porównaj ilość i klarowność kodu). W Rubim mogę sobię napisać:

Code: Select all
puts 320.next


i dostanę 321 :) Dlaczego? Bo w tym języku wszystko jest obiektem, a operatory takie jak "+" czy "-" to metody operujące na tych obiektach :) Liczba 320 jest więc instancją klasy Fixnum i posiada szreg metod (np. next) które można na niej wykonywać.

Mogę więc zrobić sobie analogicznie:

Code: Select all
4.356.round
=> 4


.. i otrzymałem 4.

Teraz analogicznie:

Code: Select all
5.times { print "Ruby jest cholernie obiektowy" }

i ponieważ times to metoda obiektu, jakim jest liczba 5 - interpreter wyświetli mi 5 razy powyższy napis.

Dodatkowo język jest bardzo elastyczny. Modyfikacja klas bazowych np. jest wyjątkowo prosta. Np. gdybym chciał żeby Ruby zamiast "-" używał słowa "minus" - mogę dodać dodatkową metodę do klasy Numeric :)

Code: Select all
class Numeric
  def minus(x)
    self.-(x)
  end
end

y = 10.minus 7
# i y ma teraz wartość 3



Nie wspominam już o wyrażeniach regularnych, modułach, wbudowanych testach jednostkowych itp. Możliwości tego języka są niesamowite

Zresztą ... można poczytać sobie dokumentację. Warto zacząć od: http://pl.wikipedia.org/wiki/Ruby

Pozdrawiam,
Rajmund
Rajmund Radziewicz
 
Posts: 1096
Joined: Sat Sep 06, 2003 7:33 am

Postby cogito on Wed Jan 10, 2007 3:14 pm

Trzeba przyznać że wrażenie to robi :)

Szczególnie ciekawe biblioteki ma ruby do zastosowań sieciowych, SOAP, XML. Pobrałem sobie na próbę ArachnoIDE ze strony http://www.ruby-ide.com bo jakoś nie przepadam z Eclipse. Podoba mi się że ruby, tak samo jak Python i PHP jest dynamicznie typowany. Na amule jest też dużo książek o tym języku. Przeważnie Oreilly albo Pragmmatic ;)

c.
Dunkel 'taakato mats'y Linux ey
cogito
 
Posts: 187
Joined: Mon Dec 01, 2003 12:45 pm

Postby Rajmund Radziewicz on Wed Jan 10, 2007 4:35 pm

cogito wrote:Podoba mi się że ruby, tak samo jak Python i PHP jest dynamicznie typowany.


Nie tak samo. W Rubim nie trzeba deklarować typów, bo typ jest ustalany dynamicznie w momencie przypisania (tak jak w Pythonie) - jest za to natomiast ścisłe typowanie (w przeciwieństwie do PHP). Oznacza to że nie można mieszać typów. Np:

Code: Select all
print "50" + 1 # => '+': can't convert Fixnum into String (TypeError)


cogito wrote:Na amule jest też dużo książek o tym języku. Przeważnie Oreilly albo Pragmmatic ;)


Udam że tego nie widziałem ...


Rajmund
Rajmund Radziewicz
 
Posts: 1096
Joined: Sat Sep 06, 2003 7:33 am

Postby Rajmund Radziewicz on Thu Jan 11, 2007 4:19 pm

Tak wracając do tematu, to niesamowicie spisuje się również Ruby do pisania skryptów typowo administracyjnych :) Np uruchamianie procesów z dynamicznie zmienianym UID albo GID:

Najpierw prosta metoda "as_uid" w module Process:

Code: Select all
module Process
def as_uid(uid)
old_euid, old_uid = Process.euid, Process.uid
Process.euid, Process.uid = uid, uid
begin
yield
ensure
Process.euid, Process.uid = old_euid, old_uid
end
end
module_function(:as_uid)
end


I teraz :)

Code: Select all
Dir.mkdir("as_root")
Process.as_uid(1000) do
Dir.mkdir("as_rajmund")
%x{whoami}
end
# => "rajmund\n"



Zastanawiam się nad przepisaniem kilku konfiguratorów z Linux-EduCD z bash+dialog na Rubiego...


Pozdrawiam,
Rajmund
Rajmund Radziewicz
 
Posts: 1096
Joined: Sat Sep 06, 2003 7:33 am

Postby cogito on Mon Jan 15, 2007 12:28 pm

Zaraziłeś mnie troche :) Kupiłem też sobie te knige Helionu o Ruby.

Ale i tak Python jest najlepszy ;-P
Dunkel 'taakato mats'y Linux ey
cogito
 
Posts: 187
Joined: Mon Dec 01, 2003 12:45 pm

Postby Rajmund Radziewicz on Wed Jan 24, 2007 10:46 am

cogito wrote:Zaraziłeś mnie troche :) Kupiłem też sobie te knige Helionu o Ruby.


Bardziej miałem zamiar kogoś zainteresować niż "zarażać". Zresztą chłopaki przepisali ostatnio Metasploita na Rubiego.. Jak miło :)


Pozdrawiam,
Rajmund
Rajmund Radziewicz
 
Posts: 1096
Joined: Sat Sep 06, 2003 7:33 am

Postby cogito on Thu Jan 25, 2007 11:11 am

A może mógłbyś napisać właśnie coś o metasploicie? Temat może kontrowersyjny, ale na pewno wiele osób zainteresuje :)


c.
Dunkel 'taakato mats'y Linux ey
cogito
 
Posts: 187
Joined: Mon Dec 01, 2003 12:45 pm

Next

Return to Forum ogólne

Who is online

Users browsing this forum: No registered users and 1 guest