Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ruby on Rails
Forum PHP.pl > Inne > Hydepark
in5ane
Witam. Mógłby mi ktoś opowiedzieć trochę o Ruby on Rails? Co to takie, jak się to je, jakaś składnia (podstawa) (coś typu <?php echo 'Pierwszy skrypt'; ?>) oraz jakieś warte wiedzy informacje i dlaczego to Ruby (w frameworku RoR) a nie PHP? Z góry dziękuję ;-)
abusiek
W zeszlym semestrze miałem na studiach przedmiot o RoR i od tej pory wszystkie nowe projekty pisze wlasnie w tym framewowku smile.gif

1. Co to takie, jak to sie winksmiley.jpg

Ogolnie RoR to framework implementujacy wzorzec mvc. Zawiera w sobie wbudowanego orm-a (active record), system templatow, wiele pomocnikow sluzacych do generowania elementow kodu html (szczegolnie forumalarzy), caaaaaaaale mnostwo pluginow na sieci, dzieki ktorym nie musisz pisac wszystkiego sam a ich instalacja jest banalnie prosta (script/plugin install sciezka_pluginu), rjs czyli cos co generuje kod js za ciebie tzn. nie pieszesz document.getElementById('cos') tylko page['cos']

Do obslugi ajax-a programisci RoR wybrali prototype co wcale nie znaczy ze musisz znac ich skladnie, od tego tez sa pomocniki winksmiley.jpg np.

link_to_remote "nazwa linku", url => {:controller => :main, :action => :add), :update => 'moj_div'

i wiele tego typu uprzyjemniej

2. Pierwszy skrypt (zakladajac ze wszystko masz poustawiane)

rails moj_projekt -d postgresql

i masz gotowy szkielet projektu z przykladowym plikiem konfiguracyjnym dla postgresql-a

3. Dlaczego ruby??

Ruby to jezyk z bardzo fajna skladnia smile.gif Braki srednika w linijkach wyzej to nie blad, jesli nie piszesz dwoch polecen w jednej linii nie musisz ich uzywac winksmiley.jpg poza tym mozna pisac takie smieszne konstrukcje jak:

300.times do .....

obiekt.nil?

zmienna.empty?

Poza tym z ciekawych rzeczy obsluguje wielodziedziczenie i jak juz sie czlowiek przyzwyczai (bo skladnia jest jednak totalnie rozna od php) to pisze sie bardzo przyjemnie smile.gif

I tak podsumowujac pisanie w tym sprawia mi autentyczna radosc co przy php-ie powoli przemijali winksmiley.jpg (jedyny problem to hosting do railsow, ktorego w polsce w zasadzie brak :/ )
Cysiaczek
Jakbym czytał opis Symfony happy.gif
Z tym wielodziedziczeniem to akurat nie jest jakić postęp, a wręcz przeciwnie.
Cytat
(jedyny problem to hosting do railsow, ktorego w polsce w zasadzie brak :/ )

Nie dziwota, skoro chodzą ploty, że jeden serwis przepisali na RoR po to, aby potem z powrotem przepisać na PHP happy.gif
Tak poza tym, to no offence, peace itd itp, bo ja nie śmieję się z Ruby czy RoR, tylko z powoli narastających mitów, które przypisują magiczne cechy zarówno językowi, jak i frameworkowi.

Pozdrawiam.
Riklaunim
Hosting to nie problem. Jeżeli ktoś chce stworzyć konkretny projekt w dowolnym języku i frameworku to nie będzie tego stawiał na shared hostingu, tylko na virtualu lub dedyku, gdzie dowolnie może sobie skonfigurować serwery i dostępne na nich usługi.
qqrq
Cytat(abusiek @ 25.11.2008, 23:18:16 ) *
Zawiera w sobie wbudowanego orm-a (active record), system templatow


ORM to jest chyba nie wbudowany w same Railsy, tylko dostępny jako Gem. A o systemie szablonów nic nie słyszałem. Chodzi ci o HAML?

Cytat(abusiek @ 25.11.2008, 23:18:16 ) *
Poza tym z ciekawych rzeczy obsluguje wielodziedziczenie


Chyba mylisz wielodziedziczenie i mixin-y. Co moim zdaniem nie zmienia faktu, że średnio toto rozwiązuje cokolwiek w tej kwestii. BTW podobny manewr można i w Symfony wykonać. winksmiley.jpg

Cytat(abusiek @ 25.11.2008, 23:18:16 ) *
(jedyny problem to hosting do railsow, ktorego w polsce w zasadzie brak :/ )


Eee, nie przesadzałbym, ja znam http://www.cal.pl/. winksmiley.jpg
abusiek
@qqrq:

Co do wielodziedziczenia to rzeczywiscie nieprecyzyjnie sie wyrazilem winksmiley.jpg mozna osiagnac podobny efekt wykorzystujac wlasnie mixiny smile.gif

Jeśli chodzi o ActiveRecord to owszem jest dostepny jako gem, ale jeszcze nie widzialem zeby railsy korzystaly z innego wiec w zasadzie nie ma tu wyboru jaki daje np Merb

@cysiaczek:

Ze strony symfony
Cytat
Helpers for templates, routing, ... inspired by Ruby on Rails, were added in a second time.

i tyle w kwestii wrazenia jakbys czytal opis symfony winksmiley.jpg

Generalnie nie mitologizuje railsow ani ruby'ego. Zdecydowalem sie na pojscie w tym kierunku bo na zajeciach naprawde przyjemnie sie i szybko tworzy sie w nim aplikacje oraz ze wzgledu na duza ilosc gem-ow i pluginow a ja jestem leniwym czlowiekiem, nie lubie pisac wszystkiego sam winksmiley.jpg

Poza tym jak dla mnie ludzie od php-a maja dziwaczne pomysly. Chocby z oddzielaniem namespac-ow '\', po prostu troche smiesznie to wyglada:

  1. <?php
  2. MojaAplikacjaJakasKlasa::JakasMetoda();
  3. ?>


i jeszcze nie mozna napisac '\' tego w edytorze ;P
erix
Co do namespace'ów, to nie ten temat. winksmiley.jpg

Temat: Nowy_namespace_separator_w_PHP
Cysiaczek
1. Ja wiem. czym się inspirowali developerzy Symfony - nie podejrzewaj mnie o aż taką ignorancję smile.gif
2. Nie mówię, że akurat Ty mitologizujesz.
3. Jedyne porównania jakie można robić to Ruby vs PHP i RoR vs Symfony. Tymczasem tendencja jest taka:
http://www.railsenvy.com/2007/5/16/hi-i-m-...on-rails-part-3
Tak, mam poczucie humoru, ale społeczność RoR zdaje się pomijać zbyt wiele faktów, a w tych filmikach z premedytacją kłamią. Zniechęcili mnie do siebie - tym jednym filmikiem.

Pozdrawiam.
erix
Cytat
Nie dziwota, skoro chodzą ploty, że jeden serwis przepisali na RoR po to, aby potem z powrotem przepisać na PHP

To chyba nie były ploty. winksmiley.jpg O ile pamiętam, to migracja była spowodowana problemami wydajnościowymi; RoR po prostu nie wyrabiał. winksmiley.jpg

Cytat
Generalnie nie mitologizuje railsow ani ruby'ego. Zdecydowalem sie na pojscie w tym kierunku bo na zajeciach naprawde przyjemnie sie i szybko tworzy sie w nim aplikacje oraz ze wzgledu na duza ilosc gem-ow i pluginow a ja jestem leniwym czlowiekiem, nie lubie pisac wszystkiego sam

A kto Ci każe wszystko samemu pisać w PHP? Mało masz frameworków? Potem wychodzą fanatyzmy RoRowców (tak, powiem: fanatycy; chociażby CakePHP), którzy przedkładają wygodę nad wydajność aplikacji. Po co się męczyć, skoro można kolejną kostkę RAM-u dołożyć?

Owszem, czas pracy programisty jest cenniejszy niż kilka kości, ale źle zaprojektowane aplikacje w jakimkolwiek języku spowodują dodatkowe koszty i wtedy już nie będzie tak łatwo, jak z RAM-em.

Mnie osobiście denerwuje takie fanatyczne podejście, bo właściwie, to nie ma się czym zachwycać - wszystkie (większość?) możliwości RoR możesz mieć i w PHP; kwestia dopisania odpowiednich modułów/wrapperów.

"Będę" pisał framework w Brainfvcku, też przyjemny język, zbiorę odpowiednią grupę ludzi i będziemy promować. ;P
dr_bonzo
Hosting na cal.pl i innych z direct adminem - nawet szkoda sie smiac z tego. Testowalem na lap.pl - TYLKO tryb development, bez ssh, mulilo nieziemsko - po prostu ROR ma inne wymagania niz PHP: ssh, wiecej dedykowanej! pamieci na aplikacje.

Railsy sa mocno powiazane ze swoimi bibliotekami: ORM + JS - co dla jednego bedzie zaleta (super je wspieraja), dla drugiego wada (trudniej zmienic je na cos innego)
Nie podoba ci sie to: wybierz Merba

@cysiaczek:
Cytat
(jedyny problem to hosting do railsow, ktorego w polsce w zasadzie brak :/ )
Nie dziwota, skoro chodzą ploty, że jeden serwis przepisali na RoR po to, aby potem z powrotem przepisać na PHP

Tja, na pewno przez brak hostingu przepisali cala aplikacje (brak. hmm 2k/rok za dedyka?) po tym jak inwestora zdobyli?


Cytat
3. Jedyne porównania jakie można robić to Ruby vs PHP i RoR vs Symfony.

Tak, tak sie powinno porownywac. Tylko ile aplikacji jest pisanych na porzadnych FW w PHP?
Ruby/Railsy zaczely sie od jednego dominujacego FW wiec panuje stereotyp (czesciowo sluszny) ze appy w PHP to wlasnie spagetti smile.gif
abusiek
hahaha winksmiley.jpg

Filmik rzeczywiscie jest troche pojechany po bandzie i przerysowany, ale ja nie bralbym go tak bardzo serio i traktowal raczej jak cos w rodzaju kabaretu, a tam wszystok zawsze jest pomnozone razy 100 winksmiley.jpg

Pozdrawiam



przegladalem kolejne i jeszcze ta jest fajna winksmiley.jpg tylko sie nie denerwujmy winksmiley.jpg

http://www.railsenvy.com/2007/8/24/rails-vs-php
mike
Cytat(dr_bonzo @ 26.11.2008, 13:18:47 ) *
Ruby/Railsy zaczely sie od jednego dominujacego FW wiec panuje stereotyp (czesciowo sluszny) ze appy w PHP to wlasnie spagetti smile.gif
Bzdura!
Język Ruby powstał ok. 1995 a framework Ruby on Rails 10 [sic!] lat później.
Gdyby nie Railsy to Ruby dawno zdechłby a tak framework wyciągnął go za agonii zapomnienia. Pisanie, że w Ruby od razu pisano ładnie to paranoja tongue.gif To też kiedyś był śmietnik a dodatkowo mało popularny.
Nawet teraz Ruby musi walczyć o popularność z PHP a ponoć jest "lepszy". A że walczą takimi a nie innymi sposobami to już całkiem porażka zwolenników Ruby.
erix
Kto pod kim dołki kopie... winksmiley.jpg
abusiek
To jest bardzo interesujaca wypowiedz:

Cytat
#7 - PROGRAMMING LANGUAGES ARE LIKE GIRLFRIENDS: THE NEW ONE IS BETTER BECAUSE *YOU* ARE BETTER
Rails was an amazing teacher. I loved it’s “do exactly as I say” paint-by-numbers framework that taught me some great guidelines.
I love Ruby for making me really understand OOP. God, Ruby is so beautiful. I love you, Ruby.
But the main reason that any programmer learning any new language thinks the new language is SO much better than the old one is because he’s a better programmer now! You look back at your old ugly PHP code, compared to your new beautiful Ruby code, and think, “God that PHP is ugly!” But don’t forget you wrote that PHP years ago and are unfairly discriminating against it now.
It’s not the language (entirely). It’s you, dude. You’re better now. Give yourself some credit.


Moze potrzebuje czegos takiego wlasnie winksmiley.jpg I za jakis czas wroce z radoscia do php-a winksmiley.jpg
dr_bonzo
Cytat
Cytat
Ruby/Railsy zaczely sie od jednego dominujacego FW wiec panuje stereotyp (czesciowo sluszny) ze appy w PHP to wlasnie spagetti

Bzdura!
Język Ruby powstał ok. 1995 a framework Ruby on Rails 10 [sic!] lat później.
Gdyby nie Railsy to Ruby dawno zdechłby a tak framework wyciągnął go za agonii zapomnienia. Pisanie, że w Ruby od razu pisano ładnie to paranoja To też kiedyś był śmietnik a dodatkowo mało popularny.
Nawet teraz Ruby musi walczyć o popularność z PHP a ponoć jest "lepszy". A że walczą takimi a nie innymi sposobami to już całkiem porażka zwolenników Ruby.


"zaczely sie" w znaczeniu - zaczyly byc popularne.
Ruby by nie zdechl, skoro przy braku popularnosci bylo rozwijany przez 10 lat....
A malo popularny byl bo nie bylo manuali w jez. angielskim, a jedynie w japonskim
Riklaunim
Cytat(abusiek @ 26.11.2008, 16:04:32 ) *
To jest bardzo interesujaca wypowiedz:
Moze potrzebuje czegos takiego wlasnie winksmiley.jpg I za jakis czas wroce z radoscia do php-a winksmiley.jpg


Siłą RoR, czy też np. Django i innych frameworków Ruby/Python to znacznie przyjemniejsze/łatwiejsze tworzenie kodu. Szybciej i łatwiej można stworzyć dobry kod implementujący potrzebną funkcjonalność. Nie są to rozwiązania na "proste" stronki, lecz na większe projekty, gdzie liczy się czas i potrzebne są bardziej zaawansowane technologie smile.gif
Cysiaczek
No ok, to w czym to się różni pehapowej Symfony?
scaffolding
admin_generator
propel/doctrine jako abstrakcja danych
helpery (włącznie z obsługą Prototype)
predefiniowane tryby pracy
framework testów jednostkowych
rozbudowana baza pluginów (kilkaset)

Może coś pominąłem, ale w PHP istnieją niemal dokładnie takie same rozwiązania jak dla RoR. Grupa docelowa Symfony to też średnie i duże projekty (a do małych nadaje się po prostu wyśmienicie). Nie potrafię właśnie tego zrozumieć, że pomija się narzędzia napisane w PHP. Sformułowanie:
Cytat
Siłą RoR, czy też np. Django i innych frameworków Ruby/Python...

powinno zatem brzmieć przynajmniej tak:
Cytat
Siłą RoR, czy też np. Django i innych frameworków Ruby/Python/PHP...


Pozdrawiam
Riklaunim
Symfony jak i inne PHP-owe frameworki cierpi bardziej z powodu języka niż technologii. Wystarczy że hosting zapewnia klient... i nie ma PHP5, albo ma, tyle że np. bez jakiegoś normalnego rozszerzenia/starą wersję i X innych przypadków. A w przypadku PHP na myśl przychodzi "zwykły" hosting, a nie virtual/dedyk/specyficzny hosting Py/Rb FastCGI (albo klient ma własny serwer, tyle że "admin" nie wie co to Debian i dlaczego nie ma do tego exe).

Symfony za wiele nie znam, ale w czasie gdy po CI rozglądałem się za czymś lepszym przyglądałem się Symfony, Prado, jak i Pythonowym frameworkom i wybrałem Django - bo okazało się debilnie proste "na starcie", natomiast Symfony wydało mi się trochę zbyt skomplikowane na starcie / a oba miały sporo interesującej mnie funkcjonalności (tu też zaważył fakt że chciałem też nauczyć się nowego języka - lecz ogólnego przeznaczenia).

A jak ktoś chce poczytać jaki ten PHP zły to są newsy na http://blog.zabiello.com/ biggrin.gif
qqrq
Cytat(Riklaunim @ 26.11.2008, 16:27:26 ) *
A jak ktoś chce poczytać jaki ten PHP zły to są newsy na http://blog.zabiello.com/ biggrin.gif


Taa, już wcześniej czytałem ;D Facet ma dużo racji, ale nie przyjmuję do wiadomości opinii w stylu "PHP jest gówniany, więc frameworki PHP też są gównine".
Swoją drogą, używając Symfony odniosłem wrażenie, że jest bardzo mocno wzorowane na Struts i RoR i chyba nie ma co tu się wypierać, czy zaprzeczać. To różni programowanie od, powiedzmy, grania muzyki, że tutaj oryginalność jest znacznie mniej ważna od np. stosowania schematów ogólnie przyjętych za poprawne. To, że "wszyscy zrzynają od RoR", to nie jest aż takie złe - RoR wprowadził kilka naprawdę fajnych rozwiązań i chwała mu za to, a także chwała twórcom innych frameworków, że to doceniają.
I zgodzę się z przedmówcą - główną wadą PHP-owych frameworków jest sam PHP.
in5ane
Cytat(qqrq @ 27.11.2008, 19:31:41 ) *
I zgodzę się z przedmówcą - główną wadą PHP-owych frameworków jest sam PHP.


Dlaczego? Może nie rozumiem, ale proszę o odpowiedź.
Riklaunim
Cytat(in5ane @ 27.11.2008, 22:14:06 ) *
Dlaczego? Może nie rozumiem, ale proszę o odpowiedź.

Bo jego funkcjonalność na serwerach jest ograniczana, a nie rozszerzana smile.gif
0x00
A jesli ktos narzeka na to ze ruby jest wolny, zawsze moze poczekac albo na Ruby 2.0 albo skorzystac juz teraz z JRuby (i przy okazji uzyskac dostep w ruby do bibliotek javy). Chociaz powolnosc ruby to mit nawet w przypadku obencje implementacji (1.8) w ktorej aplikacje bazowane na frameworkach rails(tutaj wiele zalezy od wersji i wlasnego kodu), lub w szczegolnosci merb bijal na glowe wydajnoscial symphony albo inne php'owe frameowrki. http://www.slideshare.net/mattetti/merb-pr...ug-presentation od strony 30. A jesli komus nadal to malo to JRuby potrafi przyspieszyc jeszcze bardziej dzieki wielowatkowosci systemowej.
Ale trzeba zapamietac jedno, 3-4 lata temu nikt nie wybieral ruby ze wzgledu na wydajnosc, bo jesli by tak bylo musial by byc totalnym hipokrytka, bo w tamtyczh czasach cruby bylo jedyna implmentacja, a deployment opieral sie na problematycznym fcgi, lub masakrycznym mod_ruby. Dzis mamy 3 rozne implementacje, posiadajace rozne zalozenia projektowae, ale dzielace wspolnie ta sama specyfikacje http://rubyspec.org/ przez to implementacje zachowaja kompatybilnosc. A rozwiazan deploymentowych jest jeszcze wiecej sa dobre i sa te troche gorsze, ale kazde nastepne pchnie ten jezyk coraz mocniej do przodu.
qqrq
Cytat(in5ane @ 27.11.2008, 20:14:06 ) *
Dlaczego? Może nie rozumiem, ale proszę o odpowiedź.


PHP jest kiepsko zaprojektowany. Zresztą najlepiej to chyba widać przy braku spójności nazw funkcji. Co tam jeszcze - brak pełnej obiektowości, brak wielowątkowości (jest tam jakieś rozszerzenie, ale podobno to lipa), brak namespaców (wiem, wiem, będą), kiepska wydajność, kaprawa konwersja typów, zbyt mała restrykcyjność dla developera (to jest wada tylko w kontekście tego, że PHP jest bardzo popularny), brak możliwości monitorowania uploadu (bez np. APC), itd, itp...

Cytat(� @ 28.11.2008, 08:38:36 ) *
A jesli ktos narzeka na to ze ruby jest wolny


A kto tu narzeka, że Ruby zbyt wolny. ;) Kurcze, często ostatnio to słyszę od programistów i fanów Ruby-ego, że nieee, Ruby wolny wcale nie jest, ale jeśli byście jednak uważali inaczej, to poczekajcie no jeszcze trochę, to zobaczycie jaki jest szybki. ;) Spoko, jak będę potrzebował języka-rakiety to postawię raczej na Python-a. ;)

Cytat(Cysiaczek @ 26.11.2008, 15:39:21 ) *
Grupa docelowa Symfony to też średnie i duże projekty


Do dużych projektów to jest raczej Java, czy .NET - chyba że wyróżniasz jeszcze kategorię "bardzo dużych projektów". smile.gif
Cysiaczek
@qqrq - albo inaczej rozumiem "wielkość " projektu. Tą bowiem można mierzyć na kilka sposobów. Tylko w jednym wypadku warto pisać w javie - gdy pojedyncze requesty wywołują masę akcji w systemie, bo tu faktycznie każdy język wielowątkowy i kompilowany ma przewagę. Jeśli jednak masz projekt, który rośnie wszerz, czyli są dokładane kolejne funkcjonalności, to nie widzę potrzeby użycia Javy - dokłada się sprzęt smile.gif
Tak ja to widzę okiem amatora w tych kwestiach smile.gif
Z mitotwórczymi Rubystami postanowiłem nie dyskutować więcej, bo po prostu mnie nie przekonują, zwłaszcza ta prezentacja (odwoedźcie tą stronę - Merb jest wolniejszy od CodeIgnitera o około 30%.. po powtórzonych testach)

Pozdrawiam.
0x00
Cytat(Cysiaczek @ 30.11.2008, 02:56:37 ) *
Z mitotwórczymi Rubystami postanowiłem nie dyskutować więcej, bo po prostu mnie nie przekonują, zwłaszcza ta prezentacja (odwoedźcie tą stronę - Merb jest wolniejszy od CodeIgnitera o około 30%.. po powtórzonych testach)


Mitotworczymi, no tak nie chcesz dyskutowac ale jednak zucasz fałszywe argumenty w dyskusji i sam tworzysz mity.
Cysiaczek
Nie sprawdziłeś, zrób to proszę i zapoznaj się z liczbami, które tak występują.
http://www.avnetlabs.com/php
0x00
Cytat(Cysiaczek @ 30.11.2008, 18:32:21 ) *
Nie sprawdziłeś, zrób to proszę i zapoznaj się z liczbami, które tak występują.
http://www.avnetlabs.com/php

Nom wydawalo mi sie jednak ze mowiles cos o poprzedniej prezentacji ;] Dzieki za link, wczoraj usiadlem do tego co gosc przygotowal i zaczolem przeprowadzac wlasne testy, mam zamiar dopisac jeszcze implementacje testu dla merb'a i zrobic pelne zestawienie, php, php + accellerator, ruby 1.8.6, ruby 1.8.6 ree, ruby 1.9.1, jruby

Tymczasem, zwroc uwage na to http://merbist.com/2008/11/30/latest-news-...erbland-nov-30/ testy z wczoraj, troche szkoda ze nie uwzledniaja php z accelleratorem dla cakephp i codeignitera, ale jednak bez tego merb i rails i tak jest wydajniejsze?
Cysiaczek
W wolnej chwili zerknę. Szkoda, że upierają się przy testowaniu codeignitera, który jest napisany w php4. Lepszy byłoby porównanie Symfony smile.gif
Riklaunim
Cytat( @ 1.12.2008, 13:39:20 ) *
Tymczasem, zwroc uwage na to http://merbist.com/2008/11/30/latest-news-...erbland-nov-30/ testy z wczoraj, troche szkoda ze nie uwzledniaja php z accelleratorem dla cakephp i codeignitera, ale jednak bez tego merb i rails i tak jest wydajniejsze?


Merb vs CI? CI jest bardzo prostym frameworkiem od strony kodu. Trochę jak porównanie print 'hello world'; z hello world w ezPublish winksmiley.jpg Tego typu testy większego sensu nie mają. Jeżeli narzędzie jest wydajne (nie musi być najszybsze), ale pozwala bardzo szybko tworzyć dobry kod - to wygrywa.
qqrq
Cytat(Cysiaczek @ 30.11.2008, 00:56:37 ) *
@qqrq - albo inaczej rozumiem "wielkość " projektu. Tą bowiem można mierzyć na kilka sposobów. Tylko w jednym wypadku warto pisać w javie - gdy pojedyncze requesty wywołują masę akcji w systemie, bo tu faktycznie każdy język wielowątkowy i kompilowany ma przewagę.


No bardziej myślałem tutaj w kontekście serwerowego monstrum z dużą ilością klientów (nie tylko przeglądarkowych - jakiś desktopowy, czy coś) i olbrzymią bazą danych. Tutaj taki wynalazek jak EJB jest chyba nieodzowny. Ale oczywiście zgoda - projekt może (podobnie jak człowiek party.gif ) rosnąć w różne strony.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.