Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 654 Pomógł: 17 Dołączył: 19.03.2006 Skąd: z kosmosu ;) Ostrzeżenie: (0%)
|
Witam, ostatnio na własne potrzeby zacząłem pisać coś w czym będę się czuć swobodnie pisząc kolejne aplikacje internetowe, to tak zwany "szkielet".
Uwaga, uwaga, w celu rozwiania pewnych uwag i wątpliwości pojęcie framework zostało objęte cudzysłowiem ponieważ jest to framework po mojemu, jeżeli komuś się nie podoba to nie musi używać i nie, nie będę patrzeć na Zend Framework czy inne frameworki - ten jest inny! Jednak jestem zwolennikiem Wolnego i Otwartego Oprogramowania dlatego postanowiłem, że podzielę się Swoją pracą z innymi ludźmi. Hosting projektu zapewnia github.com, niestety muszę przyznać, że to mój pierwszy projekt hostowany na GIT i mam nadzieję, że nic nie zepsuje po drodzę ( jestem ostrożny ) (IMG:style_emoticons/default/smile.gif) === TU TNIJ === Przejdę do rzeczy, konkrety, konkrety! No i oczywiście dodam link do repozytorium projektu: http://github.com/webnull/OpenWikiBlog Jądro Całość jest zbudowana w oparciu o jądro, a reszta to tylko moduły. Jądro może nie waży zbyt wiele, ale jest na prawdę funkcjonalne. Cechy jądra:
"Module On Demand" Wystarczy odwołać się do modułu który nie został załadowany aby został załadowany (IMG:style_emoticons/default/smile.gif) Kod $Kernel -> module -> moduleFunction ( Arguments ); Powyższy przykład w razie gdy moduł "module" nie istnieje załaduje moduł oraz odwoła się do jego funkcji o zwróci porządaną wartość. Skrypty startowe
Odnośnie skryptów startowych, na wiki jeszcze niema nic opisane ale obiecuję, że wkrótce opiszę każdy szczegół konfiguracji razem z "kolorowymi" przykładami ( gotowcami ) w miarę prosto i zwięźle. Obsługa domyślnych modułów Moduł może zdefiniować Siebie jako domyślny do wykonywania danej czynności, np. moduł MojErrorHandler może wywołać $Kernel->setAsDefault('MojErrorHandler', 'error_handler' ); Po zdefiniowaniu domyślnego modułu np. Error Handlera inne moduły będą go używać w taki sposób: Kod $Kernel->error_handler->log('asd'); "hooking" ( zaczep ) - czyli jak zmodyfikować prywatną zmienną wewnątrz funkcji innej klasy Od niedawna ( dwa ostatnie commity ) dodałem moduł libhooks ( nazwa wywoławcza: hooks ). Moduł pozwala zmodyfikować prywatną zmienną wewnątrz funkcji innego modułu jeżeli ten moduł na to pozwoli. Jak to działa w praktyce? Moduł który chce zmodyfikować dane innego modułu musi być załadowany najpierw. Definiujemy zaczep o nazwie np. "moj_zaczep" podając dodatkowo nazwę klasy i funkcji która ma być wywołana do zmodyfikowania danych przekazanych z zaczepu. Definicji dokonujemy w module który startuje najpierw. Teraz startujemy moduł który posiada dane do zmodyfikowania przez inny moduł, wykonujemy zaczep wrzucając do niego dane które przejmie drugi moduł i zwróci "w poprawionej wersji". Teraz prosty przykład:
Jak powstają nowe funkcje oraz moduły Kernela? Oczywiście buduję własne strony na tym frameworku i jeżeli coś stoi na drodze to poprawiam to lub dodaję nową funkcjonalność i publikuję na bieżąco na githubie. Zawsze jednak jeżeli jesteś chętny/chętna do współpracy to na prawdę zapraszam, z chęcią przejrzę każdą poprawkę i dodam do projektu. Niestety nie posiadam teraz żadnego zewnętrznego hostingu, dlatego strona testowa ( mój warsztat ) nie zawsze jest dostępny, ale wtedy kiedy będzie to zapraszam: http://194.29.181.186/tuxplace-cube/ To jedna ze stron która działa na frameworku. Zapraszam do ocen, oraz do pomocy przy pisaniu kodu (wnoszeniu poprawek jak i funkcjonalności nowej) (IMG:style_emoticons/default/smile.gif) PS. OpenWikiBlog dlatego, że projekt miał być małym mechanizmem podobnym do bloga - jedynie tworzenie i edytowanie podstron HTML razem z panelem administracyjnym ale się rozrosło (IMG:style_emoticons/default/smile.gif) -- WebNuLL Ten post edytował Babcia@Stefa 1.09.2010, 13:31:44 |
|
|
|
![]() |
Post
#21
|
|
|
Grupa: Zarejestrowani Postów: 697 Pomógł: 47 Dołączył: 19.12.2003 Skąd: Lublin Ostrzeżenie: (0%)
|
@mike: wcale tak nie jest. Niektórzy przyjmują, że komentarzy powinno być tyle, że po usunięciu kodu i zostawieniu samych komentarzy dało się aplikację napisać od nowa. To o czym mówisz to jedynie jedna z konwencji. Moim zdaniem zawsze się wybiera między:
1. mało komentarzy => kod czytelniejszy ale mniej optymalny 2. dużo komentarzy => kod mniej czytelny ale szybszy Pomijam fakt, że w tym projekcie część komentarzy jest totalnie kretyńska: zobaczcie np. core/database.php
EDIT: dzięki za link (IMG:style_emoticons/default/winksmiley.jpg) ale ubogi ten phpDoc. Ten post edytował SHiP 1.09.2010, 19:52:53 |
|
|
|
Post
#22
|
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów |
Cytat Nie muszę podawać argumentów, masz kod. No właśnie kod mnie nie zachęcił, ale może Twój fw ma jakieś szczególne funkcje, których nie widać na pierwszy rzut oka. Mówisz teraz tak, jak prelegenci z Microsoftu na phpConie. Pytam: dlaczego wg Pana Expression Web jest lepszy od konkurencji? A on: wcale nie twierdzę, że jest lepszy.. Sory, ale skoro nie jesteś pewien, jako autor, że Twój fw ma jakieś atuty, to raczej wątpliwe, aby wyszedł on z garażu. Może to brutalne, co powiedziałem, ale konkurencja jest i skoro nie możesz wypunktować jego mocnych stron - lepiej poświęcić czas na poznawanie innych, rozplanowanych. Sam od kilku lat rozwijam swojego fw i pomimo setek linii kodu, schematów powiązań między poszczególnymi elementami, nadal nie uważam, że nadaje się jeszcze do publicznych tekstów, znam jego słabe strony, ale jest też kilka mocnych, których inne nie mają. W przypadku Twojego, niestety, kod nie jest mocną stroną i bez dokumentacji nie da się czegoś wygodnie pisać. Zaskocz mnie, pokaż że warto się nim zainteresować. Marketing też jest istotny; nie sprzedasz nowej wiertarki z potrójnym udarem, jeśli na półce nie będzie się wyróżniała spośród reszty. Pamiętaj, że Twoja marka nie ma jeszcze wyrobionej opinii, więc musisz jakoś ZACHĘCIĆ odbiorców. |
|
|
|
Post
#23
|
|
|
Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%)
|
Małe info - poszczególne fragmenty mogą być adresowane do różnych rozmówców.
Ad. referencji -> po pierwsze, używanie referencji do "oszczędzania pamięci" i "zwiększenia wydajności" to jedno wielkie nieporozumienie z takiego prostego powodu, że PHP posiada wbudowany mechanizm leniwego kopiowania, tj. właściwa kopia robiona jest dopiero wtedy, gdy dane mają ulec modyfikacji. Gdy dane są pobierane "tylko do odczytu", odczytywana jest dokładnie ta sama wartość, a ponieważ PHP nie musi tworzyć dodatkowych struktur danych na utrzymywanie referencji, takie coś jest nie tylko szybsze, ale paradoksalnie oszczędniejsze pamięciowo. Ponadto nie realizujesz nawet tego, co piszesz, bo w wielu miejscach owszem, argumenty przekazujesz przez referencję, ale później już robisz zwykłe przypisanie. Ad. systemu szablonów -> widzisz, gdybyś używał standardowego nazewnictwa, nie musiałbyś nic dostosowywać z nową wersją, chyba że pomiędzy wydaniami ze zmienionym pierwszym numerkiem. Korzystam z wielu różnych bibliotek, które właśnie dzięki temu, że zachowują pewne wspólne konwencje, mogą być bez problemu używane razem i aktualizacja sprowadza się w zasadzie do wgrania nowych plików. Natomiast czym jest standardowe nazewnictwo -> - http://www.zyxist.com/pokaz.php/standaryzacja_php - http://groups.google.com/group/php-standar...-proposal?pli=1 Ad. klasy tłumaczeń -> a co ma format PO czy "XML" (w cudzysłowiu, bo nie ma czegoś takiego, jak "format XML". XML to meta-język, w którym dopiero można jakiś język opisać) do MessageFormattera, kiedy jedno i drugie zajmuje się zupełnie innymi rzeczami? - PO - składowanie i zarządzanie tekstami do tłumaczenia - MessageFormatter - formatowanie konkretnej wiadomości Jedno drugiego nie wyklucza - możesz mieć teksty w formacie MessageFormattera, który jest dużo dokładniejszy, niż printf() (zwłaszcza w takich rzeczach, jak np. obsługa liczby mnogiej), zapisane w pliku PO. W ogóle poczytaj sobie nieco o tej klasie, a zwłaszcza na jakiej bibliotece bazuje to rozszerzenie (i ilu producentów i aplikacji z niej korzysta), bo Twoje słowa zupełnie nie pokrywają się z rzeczywistością. Ad. różnych "opcjonalnych dodatków" - moim zdaniem warto zastanowić się czy niektóre z takich dodatków faktycznie są potrzebne. Już kilkakrotnie przekonałem się, że czasem lepiej jest powiedzieć "ma być tak i koniec", ponieważ w przeciwnym wypadku będziesz miał na każdym kroku mnóstwo dylematów "OK, jak ten moduł jest wyłączony, to mogę to zrobić prosto, ale ponieważ gość może go sobie włączyć, wtedy muszę to przewidzieć i dopisać tu jeszcze 154 ify, by obsłużyć wszystkie możliwe kombinacje". Ad. PHP 5.3 -> zanim webnull skończy ten "framework", jeszcze wody w Wiśle upłynie. Dziwne, że jakoś nikt nie ma oporów przed polecaniem przestrzeni nazw, tak jak inni nie mają oporów przed ich stosowaniem, a tu się czepiacie o jedną głupią klasę. A potem się będzie biadolenie na blogach, że "PHP 5.3 jest już tyle czasu, a wciąż kupa skryptów nie korzysta z jego dobrodziejstw", tak jak to z PHP 4 było. Zresztą, po co mają to wprowadzać na hostingach, skoro programiści nie znają nawet podstawowych informacji o tym, co w tej wersji wprowadzono i mają podejście, że "po co mają się uczyć, skoro hostingowcy tego nie wprowadzają"? To się nazywa samospełniającą się przepowiednią i ja osobiście nie mam zamiaru w niej brać udziału. Jak ktoś chce być zacofańcem, a potem na to samo zacofanie narzekać, to było mi miło, ja się mu kłaniać nie zamierzam. |
|
|
|
Post
#24
|
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%)
|
~SHiP wybacz ale nazwiska sygnatariuszy manifestu Software Craftsmanship przekonują mnie bardziej.
Po lekturze Clean Code: A Handbook of Agile Software Craftsmanship faktycznie zacząłem pomijać komentarze na rzecz samo dokumentującego się, czytelnego kodu. I uwierz mi, to nie chodzi o żadną optymalność czy szybkość kodu. Chodzi o jego czytelność i łatwość przyswajania przez czytelnika. Jednoznacznie brak komentarzy idzie na plus. P.S. Mój ulubiony komentarz to: O RLY? (IMG:style_emoticons/default/biggrin.gif) |
|
|
|
Post
#25
|
|
|
Grupa: Zarejestrowani Postów: 654 Pomógł: 17 Dołączył: 19.03.2006 Skąd: z kosmosu ;) Ostrzeżenie: (0%)
|
Cytat(SHiP) Pomijam fakt, że w tym projekcie część komentarzy jest totalnie kretyńska: zobaczcie np. core/database.php To jest prawda, jednak te komentarze nie były na darmo. Te komentarze ułatwiły Mi pisanie kodu tych funkcji, bez nich bym się pogubił więc raczej te komentarze są po prostu dla Mnie i mogę je usunąć ponieważ funkcje skończone.. -- WebNuLL |
|
|
|
Post
#26
|
|
|
Grupa: Zarejestrowani Postów: 697 Pomógł: 47 Dołączył: 19.12.2003 Skąd: Lublin Ostrzeżenie: (0%)
|
@mike: zgadzam się i sądzę, że ilość komentarzy należy zmniejszać do minimum. Czasem jednak skomplikowanie algorytmu/wyrazenia regularnego etc. jest tak duże, że trzeba to opisać w kilku słowach (IMG:style_emoticons/default/winksmiley.jpg) . Po prostu są ludzie, którzy twierdzą inaczej.
@zyx: Czepiasz się szczegółów. Chodziło po prostu o trzymanie tłumaczeń w pliku PO lub w pliku xml(i tutaj np xliff). Wybacz ale Twój wcześniejszy post można było odebrać jakby php 5.3 miało wbudowany system tłumaczący. W dalszym ciągu jednak proszę o przykład, ponieważ klasa zastosowana przez Babcia@Stefa nie jest tragiczna, a obsługę MessageFormattera może w każdej chwili dodać(np gdy 5.3 będzie bardziej popularne). |
|
|
|
Post
#27
|
|
|
Grupa: Zarejestrowani Postów: 654 Pomógł: 17 Dołączył: 19.03.2006 Skąd: z kosmosu ;) Ostrzeżenie: (0%)
|
@mike: zgadzam się i sądzę, że ilość komentarzy należy zmniejszać do minimum. Czasem jednak skomplikowanie algorytmu/wyrazenia regularnego etc. jest tak duże, że trzeba to opisać w kilku słowach (IMG:style_emoticons/default/winksmiley.jpg) . Po prostu są ludzie, którzy twierdzą inaczej. @zyx: Czepiasz się szczegółów. Chodziło po prostu o trzymanie tłumaczeń w pliku PO lub w pliku xml(i tutaj np xliff). Wybacz ale Twój wcześniejszy post można było odebrać jakby php 5.3 miało wbudowany system tłumaczący. W dalszym ciągu jednak proszę o przykład, ponieważ klasa zastosowana przez Babcia@Stefa nie jest tragiczna, a obsługę MessageFormattera może w każdej chwili dodać(np gdy 5.3 będzie bardziej popularne). Jest coś takiego jak sprawdzanie wersji PHP przez skrypt (co może być jednak wyłączone na niektórych serwerach dlatego odpada), ale jest także class_exists które może sprawdzić czy klasa MessageFormattera istnieje - jeżeli tak to załadować i przygotować do używania a jeżeli nie to usuwać syntax MessageFormattera ( "{" i "}" ) wyrażeniami regularnymi. -- WebNuLL Ten post edytował Babcia@Stefa 2.09.2010, 17:56:52 |
|
|
|
Post
#28
|
|
|
Grupa: Moderatorzy Postów: 36 565 Pomógł: 6315 Dołączył: 27.12.2004 |
a ja sie poczepiam trochę bazki
1) int(1), int(2) - te cyferki w nawiasach niczemu nie sluzą (sluża jedynie dla zerofill ktorego nie uzywasz) a juz na pewno nie określają rozmiaru przechowywanych liczb 2) `disabled` int(1) NOT NULL COMMENT 'Is admin account enabled?', - wartosc 0 lub 1 przechowujesz w typie INT ktory zajmuje 4 bajty. Tu nalezy dac pole TINYINT ktore zajmuje 1 bajt 3) `passwd` varchar(180) NOT NULL, po insercie widzialem ze haslo to hash. Czemu wiec mowisz ze moze miec 180 znaków? 4) `restrictip` varchar(200) NOT NULL COMMENT 'Here is a place for PHP serialized array with ip numbers', to powinna byc dodatkowa tabela 5) `unblock_time` int(20) NOT NULL COMMENT 'When the account will become avaible? - Unix timestamp format only', o typach czasowych slyszal? |
|
|
|
Post
#29
|
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów |
Cytat 4) `restrictip` varchar(200) NOT NULL COMMENT 'Here is a place for PHP serialized array with ip numbers', to powinna byc dodatkowa tabela Już pomijam fakt, że adres IP można zapisać via ip2long w INT. A o różnicach w wydajności chyba wspominać nie muszę? |
|
|
|
Post
#30
|
|
|
Grupa: Zarejestrowani Postów: 654 Pomógł: 17 Dołączył: 19.03.2006 Skąd: z kosmosu ;) Ostrzeżenie: (0%)
|
Już pomijam fakt, że adres IP można zapisać via ip2long w INT. A o różnicach w wydajności chyba wspominać nie muszę? Nie chciałem za bardzo nie potrzebnie rozbudowywać bazy danych, ale skoro mówicie, że wypadałoby to tak uczynię - jednak zrobię to w Sobotę/Niedzielę bo wtedy znajdę czas. Dziękuję. Cytat(nospor) o typach czasowych slyszal? Zrobiłem to po prostu starym sposobem, dzięki za uwagę. Cytat(nospor) wartosc 0 lub 1 przechowujesz w typie INT ktory zajmuje 4 bajty. Tu nalezy dac pole TINYINT ktore zajmuje 1 bajt Oh, faktycznie tutaj zrobiłem błąd, poprawię go w najbliższym commicie ( sobota/niedziela ). Cytat(nospor) po insercie widzialem ze haslo to hash. Czemu wiec mowisz ze moze miec 180 znaków? Baza danych narazie taka testowa jest, a ile hash ma znaków tego nie liczyłem narazie więc nie wiem ile mogę tam wstawić. -- WebNuLL Ten post edytował Babcia@Stefa 2.09.2010, 21:18:59 |
|
|
|
Post
#31
|
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów |
Cytat a ile hash ma znaków tego nie liczyłem narazie więc nie wiem ile mogę tam wstawić. Bez urazy, ale bez wiedzy o czymś takim piszesz fw...? |
|
|
|
Post
#32
|
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%)
|
|
|
|
|
![]() ![]() |
|
Aktualny czas: 10.06.2026 - 08:38 |