![]() ![]() |
Post
#41
|
|
|
Grupa: Zarejestrowani Postów: 0 Pomógł: 0 Dołączył: 2.09.2010 Ostrzeżenie: (0%)
|
troszke gorzej jesli ruby(konkretnie 1.8) jest tylko dodatkiem na Twoim developerskim serwerze vps (np. na ruby tylko redmine), wtedy okazuje sie ze pojedyncza aplikacja na redmine wpierdala tyle ramu(1 przeladowanie strony i 150mb ramu booyah!) ile 10 jednoczesnych requestow w aplikacji o podobnym poziomie skomplikowania(dotproject, bugzilla) dla php. Maly siege zeby sprawdzic wydajnosc rubego i serwer padl mi jak szmata (IMG:style_emoticons/default/smile.gif) edit: chwila pracy w 2 osoby na redmine i ... 7649 xxx 20 0 200m 119m 3108 S 0 23.4 0:02.46 ruby1.8 7621 xxx 20 0 200m 119m 3112 S 0 23.3 0:02.30 ruby1.8 7554 xxx 20 0 164m 88m 3576 S 0 17.2 0:02.42 ruby1.8 trzecia kolumna od prawej to procent zjadanego ramu, przez ostatnie pare minut nikt nie korzystal z redmine, serwer ma 512 ramu. Wyglada na to ze nieuzywany w tym momencie ruby uniemozliwil korzystanie z serwera. OK, masz konkretny problem, ale nie wiem czego konkretnie tam używasz, tzn. jak to wersja Ruby, Redmine i Rails? Być może to wina tej aplikacji readmine, nie używałem. Choć jeśli używasz starego Ruby 1.8.6, do tego starszej wersji Rails (sprzed 2.3.5) i na dodatek całość chodzi na paru procesach starych mongreli to może ci pożreć trochę więcej pamięci niż być chciał. To co bym ci doradził, to po pierwsze pozbyć się tych 3 procesów. Użyj serwera asynchronicznego: Thin, Unicorn, Rainbows lub Zbatery. Najlepiej tego ostatniego (http://zbatery.bogomip.org/) bo jest jest co prawda oparty na asynchronicznych Rainbows i Unicorn ale używa pojedyńczego procesu z wątkami, co znacznie oszczędzi ci RAM. Wg tego co piszą na stronie Rainbows (http://rainbows.rubyforge.org/) "If you’re on a small system, or write extremely tight and reliable code and don’t want multiple worker processes, check out Zbatery, too. Zbatery can use all the crazy network concurrency options of Rainbows! in a single worker process." Po drugie, jeśli potrzebujesz Ruby 1.8 to koniecznie użyj najnowszej wersji REE (Ruby Enterprise), który używa Ruby 1.8.7 i ma zdecydowanie ulepszone zarządzanie pamięcią. No chyba że masz możliwość odpalenia Ruby 1.9.2, ale musiałbyś sprawdzić czy ci ten Readmine z tym pójdzie.\ Warto wiedzieć, że dodatkowe optymalizacje REE są dostępne są po zarejestrowaniu klucza. o instalacji gemu możesz zobaczyć że jest skrypt passenger-make-enterprisey). Nie wiem jak teraz, ale wcześniej rozdawali kody za "co łaska". Wystarczyło dać dowolną dotację, choćby i 1 dolara i można było mieć ten kod. na pewno warto z tego skorzystać jeśli już używać REE. Po trzecie, aktualizacja Railsów. Wersje starsze były znacznie bardziej zasobożerne. Po czwarte, masz tu do czynienia z nadmiarowymi 2 procesami, starym Ruby, cholera wie jak starym Rails i Readmine. Czyli do pamięci ładujesz nie interpreter Ruby'ego ale cały framework + cała aplikacja. Można zrobić eksperyment i odpalić czystą aplikację rackową i porównać z tym co pożera Readmine. Bo być może, nadmierne zużycie pamięci też pochodzi z tego, w jaki sposób ktoś napisał Readmine. Alternatywnie możesz też spróbować zobaczyć jak się zachow REE i Passengere (ale nie pod Apache lecz Nginxem). W końcu, skoro to VPS to nie powinno być problemem aby to postawić. Passengera można ustawić aby nie odpalał za dużo procesów. Zaletą Pasengera jest też to że nieużywane procesy są automatycznie usuwane po czasie z pamięci. Jest jeszcze jedna alternartywa o której się dopiero co dowiedziałem. Pojawił się nowy Mongrel2. Najciekawsze jednak to, że jest może obsługiwać cała masę języków. Jak podają na http://mongrel2.org/home: Ruby, Python, C++, PHP, Haskell, Common Lisp, Perl, .NET, Clojure, i Lua. Nie sprawdzałem jeszcze jak to się zachowuje, ale myślę że warto się przyjrzeć swoja droga, skoro juz idziemy w takie zachwyty jesli chodzi o przenosnosc JRuby, to nie lepiej po prostu to w Javie napisac i spokoj ? Nie, bo w JRuby pisze się szybciej, prościej, krócej, po prostu wygodniej. Nie, jeśli chcesz użyć Rails, Padrino czy Sinatry. Większość frameworków Javy jest ciężka i nadmiernie skomplikowana. Choć to się też zmienia, np. we frameworku Play. Poza tym, JRuby kontenera serwletów Javy, więc aż tak oszczędne pamięciowo to nie jest. Choć przy pewnym poziomie obciążenia, Rails odpalony w JRuby zajmuje już mniej pamięci niż stado mongreli, bo JRuby korzysta z wydajniejszej obsługi pamięci w JVM. Ten post edytował hipertracker 3.09.2010, 10:00:14 |
|
|
|
Post
#42
|
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%)
|
Ogólnie model oparty na interfejsach i klasach abstrakcyjnych nie nadaje się do budowania modułów zgodnie z zasadą DRY (Don't Repeat Yourself). Interfejsy co prawda pozwalają na wielokrotne dziedziczenie, ale co z tego można złozyć, skoro interfejsy tylko sygnatury do metod, a nie jakiś użyteczny kod? Taki kod trzeba dopiero napisać. Np. można by jakieś wspólne części wstawić do klasy abstrakcyjnej, ale to jest też mało użyteczne, bo końcowa klasa nie może sobie dziedziczyć po wielu klasach abstrakcyjnych. Równie dobrze można kod implementować w normalnej klasie. Czy abstrakcyjna, czy nie, nie może być użyta w wielokrotnym dziedziczeniu. A te które mogą, czyli interfejsy, nie mogą mieć implementacji i klasa która jej nie dostarczy w ogóle nie może być używana. Słowem - kiepska sytuacja. Nie ma jak budować sobie modułów z których, niczym z cegiełek, można by poskładać sobie różne obiekty. Bzdura. Oczywiście, że dziedziczenie pomaga w zachowaniu zasady DRY. Nie jest to oczywiście panaceum, ze wystarczy ładna hierarchia klas i mamy DRY za darmo.Istotne jest to, żeby wiedzieć kiedy użyć dziedziczenia a kiedy agregacji. No ale to chyba oczywiste, że w programowaniu stosuje się zestawy wzorców, narzędzi i trików a nie jeden jedyny. Jednym słowem: Czy dziedziczenie gwarantuje DRY? Nie. Czy pomaga w zachowaniu tej zasady? Oczywiście. |
|
|
|
Post
#43
|
|
|
Grupa: Zarejestrowani Postów: 0 Pomógł: 0 Dołączył: 2.09.2010 Ostrzeżenie: (0%)
|
4. Nie znam Ruby ale czy jest w nim instrukcja goto? Bardzo, ale to bardzo mi jej brakowało i na szczęście jest juz w php 5.3 (IMG:style_emoticons/default/winksmiley.jpg) . [/irony] PS: a tak w ogóle miałem ostatnio przypadek gdzie miałem do wyboru użyć goto, wywołać zewnetrzny skrypt przez curl lub przepisac ten zewnetrzny skrypt. Goto wydało się najłatwiejsze, lecz projekt był na php 5.2 ;] Widzę że kolega trzyma poziom będąc zwolennikiem antywzorca projektowego spaghetti code. (IMG:style_emoticons/default/laugh.gif) Aby wywołać zewnętrzny skrypt nie trzeba żadnej komendy GOTO. |
|
|
|
Post
#44
|
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%)
|
Widzę że kolega trzyma poziom będąc zwolennikiem antywzorca projektowego spaghetti code. (IMG:style_emoticons/default/laugh.gif) Aby wywołać zewnętrzny skrypt nie trzeba żadnej komendy GOTO. Oj koleżko czepiasz się wszystkiego więc i ja Ci powytykam.1. Spaghetti code nie jest żadnym (anty)wzorcem programowania; 2. ~SHiP nie napisał, że musiał użyć GOTO żeby wywołać zewnętrzny skrypt. Czytaj chłopie ze zrozumieniem. Stał przed problemem i problem można była rozwiązać na trzy sposoby. To napisał. No ale jedno trzeba oddać. Chcąc użyć GOTO wybrał najgorsze rozwiązanie. Ten post edytował mike 3.09.2010, 10:23:50 |
|
|
|
Post
#45
|
|
|
Grupa: Zarejestrowani Postów: 697 Pomógł: 47 Dołączył: 19.12.2003 Skąd: Lublin Ostrzeżenie: (0%)
|
Ok, powiedzmy, że mnie przekonałeś ale ja jestem totalnie zielony z Rubego. Podałeś z 20 różnych nazw i się w tym pogubiłem. Co ja potrzebuje żeby napisać dużą aplikację w Ruby(np. ogromny sklep internetowy).
W php mam: PostgreSQL, php, memcache lub shmp do tego apache. Całość na moim frameworku lub zendzie W ruby?: Postrgre pewnie jest, memcache pewnie też, framework to zapewne RoR, ale jak z resztą? Jaki muszę mieć serwer i jak to jest z tym JRuby? Co jeszcze trzeba doinstalowac? EDIT: goto to zapewne najgorsze rozwiązanie ale i jednocześnie najszybsze(10 sekund roboty). Ostatecznie nie użyłem goto bo nie mieliśmy php 5.3 na serwerze. Tu można się zastanawiać. Czy użycie goto to straszna rzecz w przypadku gdy mamy do czynienia z kodem wyglądającym jakby był pisany za czasów php3(ogrom zmiennych globalnych i latanie z funkcji do funkcji bez sensu). Była jeszcze czwarta opcja: przestrzenie nazw ale wiedzieliśmy, że to dopiero w 5.3 jest. Goto myśleliśmy, że siedzi w php od początku, a tu taka niespodzianka. Tak wyglądał przykład: Kod goto controller;
skrypt: // tutaj mielenie przez skrypt goto koniec; controller: //Controller zendowski z akcją a w niej goto skrypt: koniec: Ten post edytował SHiP 3.09.2010, 10:32:22 |
|
|
|
Post
#46
|
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
W ruby?: Postrgre pewnie jest, memcache pewnie też, framework to zapewne RoR, ale jak z resztą? Jaki muszę mieć serwer i jak to jest z tym JRuby? Co jeszcze trzeba doinstalowac? OFFTOP Zabrzmiało to strasznie ignorancko. I jeżeli kolega odpowie sposobem w pełni zadowalającym mam nadzieję, że to Cię zamknie. Nie zdziw się, że przy dużych sklepach internetowych nie wykorzysta się Postgres-a, bowiem są inne WYDAJNIEJSZE rozwiązania od niego. Memcache - zdziwisz się jaka jest masa też INNYCH "cache-ów" operujących na pamięci nie tylko pod RUBY-ego. BTW google -> memcache ruby Framework - a znasz cała listę? http://accidentaltechnologist.com/ruby/10-...web-frameworks/ a to tylko 10 Serwer - kyrie eleison Ten post edytował wookieb 3.09.2010, 10:30:52 |
|
|
|
Post
#47
|
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%)
|
W ruby?: Postrgre pewnie jest, memcache pewnie też, framework to zapewne RoR, ale jak z resztą? Jaki muszę mieć serwer i jak to jest z tym JRuby? Co jeszcze trzeba doinstalowac? A ja nie znam Ruby'ego wcale ale Twoje pytanie wygląda na kompletnie dziwne. Jakbyś miał pretensje mówiąc, że Lamborghini Murcielago to słabe auto bo trzeba się nauczyć jeździć i uważać z gazem.To, że czegoś nie ma w Out of the Box to żaden minus. Z takim jak Twoje podejście nie napisał byś kompletnie niczego w Javie, bo tam liczy się integracja. Pytasz, co trzeba doinstalować? W przypadku dużych projektów pewnie setki rzeczy. Tyle tylko, że to nic złego. Jeśli liczysz w życiu na odpalenie gotowca i wesołe programowanie to proszę bardzo, tkwij w PHP na swoim poziomie (IMG:style_emoticons/default/tongue.gif) |
|
|
|
Post
#48
|
|
|
Grupa: Zarejestrowani Postów: 0 Pomógł: 0 Dołączył: 2.09.2010 Ostrzeżenie: (0%)
|
Bzdura. Oczywiście, że dziedziczenie pomaga w zachowaniu zasady DRY. Nie jest to oczywiście panaceum, ze wystarczy ładna hierarchia klas i mamy DRY za darmo. Istotne jest to, żeby wiedzieć kiedy użyć dziedziczenia a kiedy agregacji. No ale to chyba oczywiste, że w programowaniu stosuje się zestawy wzorców, narzędzi i trików a nie jeden jedyny. Jednym słowem: Czy dziedziczenie gwarantuje DRY? Nie. Czy pomaga w zachowaniu tej zasady? Oczywiście. Widzę żeś w ogóle nie zrozumiał mojego poprzedniego postu. Przeczytaj parę razy, może w końcu dotrze. W PHP nie możesz sobie złożyć klasy z modułów bo ich po prostu nie ma. Możesz o najwyżeć dziedziczyć po jednej, i tylko jednej klasie i nie masz jej jak podzielić na funkcjonalne moduły. Np w Scali możesz sobie stworzyć oddzielne traitsy odpowiedzialne za wybrane funkcjonalności. Np. masz traitsa Bird implementującego interfejsy i częściową funkcjonalność dla ptaka, masz traitsa Swimming, implementująca funkcjonalności zwiazane z pływaniem i masz klasę Flying, dla zwierząt, co latają. Masz podzielone funkcjonalności. Nie możesz stworzyć obiektu na bazie żadnego z tych traitsów, ale możesz stworzyć coś, co posiada ktoreś z tych cech. class Pigeon extends Bird with Swimming with Flying {} class Frigate extends Bird with Flying {} Można to też zrobić dynamiczniej val pigeon = new Pigeon with Swimming with Flying pigeon.fly() W Ruby można uzyskać coś podobnego. module Bird end module Flying end module Swimming end class Pigeon include Bird include Swinning include Flying end class Frigate include Bird include Flying end Teraz spróbuj to zrobić w PHP... class Bird {}; class Flying {}; class Swimming {}; class Pigeon extends Bird {}; i dupa..., musisz uciec się do kompozycji i injection of control. Ten post edytował hipertracker 4.09.2010, 02:22:35 |
|
|
|
Post
#49
|
|
|
Grupa: Zarejestrowani Postów: 697 Pomógł: 47 Dołączył: 19.12.2003 Skąd: Lublin Ostrzeżenie: (0%)
|
Ale po co takie nerwy? Ciekawy jestem. Kolega postawił jasne argumenty i chciałbym wiedzieć jak wyglądają kwestie budowania serwera. Czy jest prosto czy nie. A nóż widelec zostanę "rubownikiem".
OFFTOP: Postgre to przykład. Wszystko zależy od sytuacji. Równie dobrze można napisać, że sqllite działa szybciej od postgre. Domyślam sie ze jest i Oracle do ruby bo to raczej norma teraz. Ten post edytował SHiP 3.09.2010, 10:45:56 |
|
|
|
Post
#50
|
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
To, że nie ma wielokrotnego dziedziczenia w PHP da się przeboleć.
Rozumiem jego zalety ale też rozumiem jakie konsekwencje może wywołać. Poza tym "kompozycja" nie jest wcale jakimś "złą", brzydką metodą. |
|
|
|
Post
#51
|
|
|
Grupa: Zarejestrowani Postów: 0 Pomógł: 0 Dołączył: 2.09.2010 Ostrzeżenie: (0%)
|
Oj koleżko czepiasz się wszystkiego więc i ja Ci powytykam. 1. Spaghetti code nie jest żadnym (anty)wzorcem programowania; No, skoro Ty to mówisz... to pozostaje nam chyba tylko się zamknąć i przyjąć to jako święty dogmat. Weź napisz do autorów tych wszystkich książek o wzorcach projektowych i do wikipedystów że błądzą w ciemnościach, bo ty nie uważasz spaghetti code za błędny wzorzec projektowy. Także poinformuj autorów ponad 300 tysięcy stron webowych że nie wiedzą, iż spaghetti code to przecież wspaniały wzorzec projektowy. (IMG:style_emoticons/default/laugh.gif) Ten post edytował hipertracker 3.09.2010, 10:45:28 |
|
|
|
Post
#52
|
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%)
|
To, że nie ma wielokrotnego dziedziczenia w PHP da się przeboleć. Rozumiem jego zalety ale też rozumiem jakie konsekwencje może wywołać. Poza tym "kompozycja" nie jest wcale jakimś "złą", brzydką metodą. Ja uwazam akurat ze wielodziedziczenie wprowadza tylko w blad poczatkujacych w php czesto spotkac:
Pomijajac fakt jakby to wygladalo gdyby w php bylo wielodziedziczenie tak sa interfejsy i jesli ktos nie wie na czym to polega nie widzimy takich klockow. Ucze sie python'a podoba mi sie ale zaluje ze nie ma tam interfejsow, klasy abstr. niby sa ale....ahhh ten duck typing |
|
|
|
Post
#53
|
|
|
Grupa: Zarejestrowani Postów: 0 Pomógł: 0 Dołączył: 2.09.2010 Ostrzeżenie: (0%)
|
W ruby?: Postrgre pewnie jest, memcache pewnie też, framework to zapewne RoR, ale jak z resztą? Jaki muszę mieć serwer i jak to jest z tym JRuby? Co jeszcze trzeba doinstalowac? Potrzebujesz zainstalowanej lokalnie Javy. Nic więcej. Ale już framework JRuby on Rails wymaga jakiegokolwiek kontenera serwletów, bo, Jetty, Tomcat, Glassfish3 czy JBoss. Tu masz kompleksowe rozwiązanie oparte na JBossie o którym wcześniej wspominałem: Torquebox. Z innych frameworków możesz spróbować Sinatry czy Padrino. Są prostsze od Rails. I też działają z JRuby. Ten post edytował hipertracker 3.09.2010, 10:52:25 |
|
|
|
Post
#54
|
|
|
Grupa: Zarejestrowani Postów: 697 Pomógł: 47 Dołączył: 19.12.2003 Skąd: Lublin Ostrzeżenie: (0%)
|
@hipertracker: ale wzorzec spagetti(o ile można to wzorcem nazwać) sam w sobie nie jest czymś złym. Ja popieram zdanie mike. Po prostu jest niewygodny w użyciu. Były sytuacje, że się pisało za ich pomocą aplikacje(np. commodore64 i basic w nim wbudowany), bo sprzęt na wiele nie pozwalał. Do tej pory masz skoki w asemblerze i nikt z tego powodu nie płacze. Równie dobrze można napisać, że cały paradygmat obiektowy jest badziewny, bo bardzo komplikuje sytuację programisty. Funkcyjny już mniej. Ale wszystko zależy od zastosowań, przyzwyczajeń oraz maszyny na której odpalamy daną aplikację.
Nie lubię się przypominać, ale napisze mi ktoś w końcu to jedno, krótkie zdanie na temat tego co potrzebuję aby zacząć pisanie sklepu w Ruby? Co do frameworku podałem RoR bo tylko jego znam i w tym temacie był podawany. Po prostu jestem zielony w tym temacie. EDIT: dzięki za info (IMG:style_emoticons/default/winksmiley.jpg) Ten post edytował SHiP 3.09.2010, 10:52:32 |
|
|
|
Post
#55
|
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%)
|
No, skoro Ty to mówisz... to pozostaje nam chyba tylko się zamknąć i przyjąć to jako święty dogmat. Weź napisz do autorów tych wszystkich książek o wzorcach projektowych i do wikipedystów że błądzą w ciemnościach, bo ty nie uważasz spaghetti code za błędny wzorzec projektowy. Także poinformuj autorów ponad 300 tysięcy stron webowych że nie wiedzą, iż spaghetti code to przecież wspaniały wzorzec projektowy. (IMG:style_emoticons/default/laugh.gif) Nie napisałem, że Spaghetti jest OK. Napisałem, ze nie jest to wzorzec.Żeby coś było antywzorcem, powinno być najpierw wzorcem. A wzorce jak zapewne (nie?)wiesz są to sprawdzone sposoby na realizację typowych zadań. Część z takich wzorców (na przykład Singleton) określa się mianem wzorców bo pomimo, że ich realizacje jest typowa to nie zawsze dobra. A nie powiesz mi, że w jakiejkolwiek książce, którą czytałeś (też czytałem mnóstwo rzeczy z GoF, Wójkiem Bobem i Fowlerem na czele) Spaghetti jest określane wzorcem. Tylko tego się czepiłem. Spaghetti code to określenie złego stylu pisania i śmietnika w kodzie. To określenie zbioru złych praktyk a nie wzorzec. P.S. I tak ? propos nie jestem programistą PHP, więc nie nawiązuj w ewentualnych odpowiedziach to PHP. Edited: P.S.2 ~SHiP tak naprawdę to Ty mnie nie popierasz. Bo widzisz ja twierdzę jednoznacznie, że spaghetti code to coś czego należy unikać za wszelką cenę. Ten post edytował mike 3.09.2010, 10:56:09 |
|
|
|
Post
#56
|
|
|
Grupa: Zarejestrowani Postów: 0 Pomógł: 0 Dołączył: 2.09.2010 Ostrzeżenie: (0%)
|
Nie lubię się przypominać, ale napisze mi ktoś w końcu to jedno, krótkie zdanie na temat tego co potrzebuję aby zacząć pisanie sklepu w Ruby? Co do frameworku podałem RoR bo tylko jego znam i w tym temacie był podawany. Po prostu jestem zielony w tym temacie. Prościej, wskocz na kanał IRC #rubyonrails.pl. Nie wiem jaki system używasz (Windows czy Linux, Mac OS-X) Zainstaluj wpierw Ruby potem Rails, następnie zajrzyj do http://weblog.rubyonrails.org/2010/8/28/ra...t-documentation (tam jest kupa pożytecznych linków). Co do sklepów, nie używałem gotowych rozwiązań do sklepów, ale znalazłem coś takiego jak Spree (http://spreecommerce.com). Fajne, interaktywne intro do Rubiego, w sam raz na 15 min, znajdziesz tu: http://tryruby.org/. Polska strona domowa http://www.ruby-lang.org/pl. Odnośnie Rails http://rubyonrails.pl i oczywiście kanał IRC #ruby.pl i #rubyonrails.pl Spaghetti code to określenie złego stylu pisania i śmietnika w kodzie. To określenie zbioru złych praktyk a nie wzorzec. No własnie owe złe praktyki są określane potocznie jako antipatterns (i tak to figuruje na wikipedii). Nie ma co się spierać o słowa, bo zgadzamy się, że to jest zła praktyka. I tylko o to mi chodziło. Ucze sie python'a podoba mi sie ale zaluje ze nie ma tam interfejsow, klasy abstr. niby sa ale....ahhh ten duck typing Języki dynamiczne nie potrzebują interfejsów. http://dirtsimple.org/2004/12/python-inter...e-not-java.html Duck typing, to oddzielna bajka. To czasem użyteczna technika. Nawet statycznie typowana Scala posiada duck typing. |
|
|
|
Post
#57
|
|
|
Grupa: Zarejestrowani Postów: 188 Pomógł: 0 Dołączył: 23.05.2005 Ostrzeżenie: (0%)
|
Nie lubię się przypominać, ale napisze mi ktoś w końcu to jedno, krótkie zdanie na temat tego co potrzebuję aby zacząć pisanie sklepu w Ruby? Co do frameworku podałem RoR bo tylko jego znam i w tym temacie był podawany. Po prostu jestem zielony w tym temacie. Potrzebujesz: - ruby w wersji klasycznej (tzw. MRI, Matz Ruby Interpreter) bądź REE (Ruby Enterprise Edition - proszę się nie sugerować nazwą, to taki żart autorów) - REE jest forkiem MRI, który poprawia dosyć zużycie pamięci i co za tym idzie wydajność - serwera aplikacyjnego, np. apache bądź nginx (polecam ten 2, ale jak ktoś ma już gotowy setup z apache to też jest ok) - serwera aplikacyjnego, np. mongrel, thin, unicorn (oba serwery przy okazji są też serwerami www więc można je używać do developerki bez stawiania apache bądź nginx) - frameworka, tutaj raczej RoR bądź Sinatra (ten pierwszy większy, z wieloma ficzerami, ten drugi bardziej lekki) - baza jaką sobie życzysz (postgresql, mysql to najczęściej używane, ostatnio modne są też bazy nosql jak mongodb, couchdb, cassandra) - memcache - bez problemu (o shmp nie słyszałem, a google nic mi nie zwracają chyba że chodzi Ci o shm to też podejrzewam nie ma problemu) linki: MRI http://www.ruby-lang.org/pl/downloads/ (najłatwiej jednak zainstalować z paczek, np. apt-get) REE http://www.rubyenterpriseedition.com/ W przeciwieństwie do hipertrackera nie polecam od razu jrubiego. Dlaczego? Dlatego iż uważam, że takie rozwiązania jak jruby/maglev/ironruby (inne implementacje rubiego) są fajne, ale jak się ma konkretne potrzeby (np. chcę łatwej inteegracji z instniejącym systemem w javie to użyję prawd. jrubiego). |
|
|
|
Post
#58
|
|
|
Grupa: Zarejestrowani Postów: 697 Pomógł: 47 Dołączył: 19.12.2003 Skąd: Lublin Ostrzeżenie: (0%)
|
~SHiP tak naprawdę to Ty mnie nie popierasz. Bo widzisz ja twierdzę jednoznacznie, że spaghetti code to coś czego należy unikać za wszelką cenę. Ja też jestem za tym, aby unikać goto tego za wszelką cenę. W niektórych językach po prostu się nie da(jak np. w asemblerze). Jesli chodzi o moj przyklad w php, to tak pisałem użyłbym przestrzeni nazw, gdyby było na serwerze php 5.3. Gdybym mial jednak wybierać - przerabiać miesiąc skrypt lub w 10 sekund zastosować haczyk, który podałem wyżej to nie zastanawiałbym się. EDIT: dzięki Radarek. Trochę tego jest ale w wolnej chwili spróbuję sobie odpalić wszystko Chodziło mi o shmop(shared memory operations) więć w skrócie o shm czyli pamięć współdzieloną (IMG:style_emoticons/default/winksmiley.jpg) Ten post edytował SHiP 3.09.2010, 12:22:22 |
|
|
|
Post
#59
|
|
|
Grupa: Zarejestrowani Postów: 0 Pomógł: 0 Dołączył: 2.09.2010 Ostrzeżenie: (0%)
|
Potrzebujesz: - ruby w wersji klasycznej (tzw. MRI, Matz Ruby Interpreter) bądź REE (Ruby Enterprise Edition - proszę się nie sugerować nazwą, to taki żart autorów) - REE jest forkiem MRI, który poprawia dosyć zużycie pamięci i co za tym idzie wydajność - serwera aplikacyjnego, np. apache bądź nginx (polecam ten 2, ale jak ktoś ma już gotowy setup z apache to też jest ok) - serwera aplikacyjnego, np. mongrel, thin, unicorn (oba serwery przy okazji są też serwerami www więc można je używać do developerki bez stawiania apache bądź nginx) - frameworka, tutaj raczej RoR bądź Sinatra (ten pierwszy większy, z wieloma ficzerami, ten drugi bardziej lekki) - baza jaką sobie życzysz (postgresql, mysql to najczęściej używane, ostatnio modne są też bazy nosql jak mongodb, couchdb, cassandra) - memcache - bez problemu (o shmp nie słyszałem, a google nic mi nie zwracają chyba że chodzi Ci o shm to też podejrzewam nie ma problemu) linki: MRI http://www.ruby-lang.org/pl/downloads/ (najłatwiej jednak zainstalować z paczek, np. apt-get) REE http://www.rubyenterpriseedition.com/ W przeciwieństwie do hipertrackera nie polecam od razu jrubiego. Dlaczego? Dlatego iż uważam, że takie rozwiązania jak jruby/maglev/ironruby (inne implementacje rubiego) są fajne, ale jak się ma konkretne potrzeby (np. chcę łatwej inteegracji z instniejącym systemem w javie to użyję prawd. jrubiego). Też myślę, że nie ma co od razu rzucać się na JRuby. Po JRuby sięgają ci co są świadomi potrzeb i potrzebują czegoś więcej niż to, co dostarcza (bogata) biblioteka standardowa Ruby'ego. EDIT: Nie bawiłbym się w Ruby MRI, bo to jest Ruby 1.8. REE to też 1.8. Lepiej od razu zainstalować Ruby 1.9.2. Jest znacznie szybszy i ma większe możliwości (choćby porządny Unicode) Jednak co do instalacji Ruby'ego to zdecydowanie zalecam używanie RVM. Jeśli nie Rails, to zamiast Sinatry lepiej użyć Padrino, jest oparty na Sinatrze czyli też lekki, ale ma więcej możliwości. Dzięki RVM możesz sobie zainstalować równocześnie izolowane środowiska REE, Ruby 1.9.2 czy JRuby. I w prosty sposób się między nimi przełączać. RVM rządzi. Radarek nie wspomniał o najprostszej z opcji. Ja bym się nie bawił w żadnego mongrela ani thina, przynajmniej nie na produkcji. Najłatwiej zainstalować Passengera. Działać będzie podobnie prosto jak mod_php. Nie trzeba nic odpalać w tle, pilnować aby się podnosiło podczas startu serwera itp. Ewentualnie na początek możesz skorzystać z darmowej chmury serwerów Heroku. Jest trywialna w obsłudze i mają tam darmową opcja do niewielkich aplikacji. Na początek może być. Wtedy w ogóle nie musisz stawiać żadnego serwera. Oczywiście do pracy nad kodem, nie trzeba żadych serwerów, bo Rails ma wbudowany prosty serwer HTTP. Ewentualnie można sobie zainstalować Unicorn'a i odpalać pod nim, bo jest szybszy od tego wbudowanego. Nie trzeba jednak żadnych Apache'y ani Nginx'ów do tego aby pracować i testować sobie kod. Ten post edytował hipertracker 4.09.2010, 02:14:28 |
|
|
|
Post
#60
|
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D |
A czy ja wspomniałem, że chodzi o implementację obiektówki w Ruby'm? Chodzi mi o niekompatybilności pomiędzy kolejnymi wersjami. Zawsze będą występować. A czytając w necie o Rubym developerzy w części byli źli, że wprowadzane zmiany są robione tak, że o tę kompatybilność trudno. O ile w zasadzie kod napisany w PHP4 pozwalał się odpalić na wersjach php do 5.3 (wyłączając ją), choć z ostrzeżeniami, to rzekomo podobnie odległe czasowo i rozwojowo wersje Ruby'ego już tak przyjazne nie są dla starszego kodu.
Fakt, 5.3 wprowadził wiele zmian, ale gdyby nie zmiana pewnych dyrektyw to w zasadzie dla normalnego deva w PHP nie zaszło aż tak dużo poza częścią obiektową, którą bardziej dopieszczono. Gdyby przywrócić "stare ustawienia" dyrektyw poprzez ini_set, to kod z php4 nadal rusza i działa. To co nazwałem "obudzeniem się z ręką w nocniku" w php zaszło od bardzo długiego czasu własnie po raz pierwszy dla 5.3 a z opisów netowych devów Ruby'ego zachodzi to częściej. Dlatego moim zdaniem choć wymusza coś co uważam za pozytywne, czyli ciągła naukę, to sprawia jeden problem - niemal nieustanną kontrolę kodu i jego konserwację oraz aktualizację by dopasowywać do zmian w języku. Może tyczyło to nie samego Rudy'ego ale RoR, nie kojarzę. Jeśli tylko RoR to i tak byłoby to dziwne z racji "olewnictwa" częściowego i podchodzenia do zmian w sposób "robimy zmiany od razu a potem, zobaczymy co to da i kto się będzie burzył". Trochę całość rozwoju PHP przypomina Linuxa. Są pakiety stable, które dopiero po długim czasie wchodzą, gdy już są przetrzepane na wiele sposobów. Daleko im numeracją do aktualnych, ale są pewne, kompatybilne z większością rzeczy i nie burzą się ludzie na zmiany w nich. Poza tym co tak naprawdę w składni obiektówki było najpoważniejszą zmianą, która tak uwaliła kod? Zmiana nazewnictwa metody będącej konstruktorem? (IMG:style_emoticons/default/smile.gif) Bo poza tym reszta zmian aż tak dramatycznego wpływu na kod nie zauważyłem. Ten kto pisał w 5.X zgodnie ze standardami jedyne co odczuł bardzo poważnie po przejściu na 5.3 to faktyczny wzrost wydajności. I wcale nie twierdzę, że PHP jest najlepsze, lepsze od Ruby'ego czy tego typu zdań. Ale w odróżnieniu od choćby Twoich postów pisze nie tylko o samych zaletach, gdyż mam świadomość wad tego języka i nie kryję ich przed nikim. Przyjrzyj się swoim postom i znajdź w nich jakąś krytyczną uwagę pod kątem Ruby'ego. Przykro mi, ale ja widzę same jechanie po PHP. Gdybym tak podchodził jak Ty, to bym tutaj pod niebiosa piał o C++, który moim zdaniem mimo bycia staruchem i małej wygody pozwala na tak wiele, że niewiele języków jest w stanie stanąć oko w oko z nim. Może nawet posunąłbym się do wychwalania assemblera, bo to dopiero zajebiście wydajny język (IMG:style_emoticons/default/winksmiley.jpg) Co z tego, że programowanie w nim to męczarnia. A jaką ma bogatą dokumentację. Rozumiesz do czego piję? Choćby o odrobinie przyzwoitości w tym, że żaden język nie ma możliwości nieograniczonych i ktoś kierując się opiniami fanboyów poświęci czas na naukę, by się po jakimś czasie dowiedzieć, że język posiada ograniczenia, o których nie dowiedział od nikogo wcześniej. Mógłbym porównać postawę devów Ruby'ego i PHP-owców tak: Ruby: "W Ruby da się w sumie zrobić absolutnie wszystko." - po czasie okazuje, że jednak nie jest to do prawda. PHP: "PHP jest głównie do łatwiejszego tworzenia stron. Aczkolwiek da się czasem z niego coś wycisnąć" - to czasem okazuje się być co jakiś czas rzeczą której chcieliśmy, ale nie wiedzieliśmy, że da się ją w PHP zrobić, choć najczęściej trzeba przy tym się trochę nagimnastykować (IMG:style_emoticons/default/winksmiley.jpg) Lub prościej: "Ruby'owcy zbyt często uważają, że mogą wszystko. PHPowcy zbyt często uważają, że są tylko od robienia stron. Obie grupy się mylą". A co do środowiska miałem na myśli nie środowisko uruchomieniowe czy oprogramowanie a społeczność. Źle dobrałem słowo. Teraz chyba rozumiesz mój ciąg myślowy. Mniejsza społeczność to mniejsza liczba zaimplementowanych rozwiązań/projektów przydatnych społeczności. Nie miałem na myśli tego jak moje słowa odebrał wookieb, czyli udziwnianie projektów, byle zrobić coś innowacyjnego. Nie chodziło mi bynajmniej o wymyślanie koła na nowo, bo uważam to za głupotę. Wookieb. To co pisałem o opieraniu się na innych to taka konkluzja wynikająca z postów hipertrackera samoczynnie się nasuwająca. Jakoby Rudy nie był na tyle dobry by normalna implementacja była dobra i trzeba się posiłkować innymi językami i innymi rozwiązaniami (JVM). Rozumiem co chciałeś mi powiedzieć o możliwości przeskoczenia między Ruby i JRuby by móc wykorzystywać coś z drugiego, czego nie ma pierwszy. To fajna rzecz, a zważywszy na możliwości bibliotek Java, to otwierają się po prostu ogromne wrota. Ale to jest właśnie to o czym wspomniałem jako opieraniu się na innych. Gdyby nie możliwości Java to i Ruby by ich nie posiadał. Taka łata zanim w bazowym języku tego nie wprowadzą. Do spaghetti code nie będę się mieszał. Każdy pisze jak mu się podoba. Mi się to nie podoba, nie pisze tak i pisać nie mam zamiaru. Inna sprawa, że takowy choć trudny do ogarnięcia, jest wydajniejszy często. |
|
|
|
![]() ![]() |
|
Aktualny czas: 6.04.2026 - 14:55 |