Łukasz Socha

Łukasz Socha Web developer /
programista, student
informatyki

Temat: Opinia na temat bloga

Witam wszystkich,
mam małą prośbę. O tuż od jakiegoś czasu pracuję nad blogiem poruszającym tematykę tworzenia stron www (HTML, CSS, PHP etc.) i w związku z tym prosiłbym o ocenę merytorycznej treści. Czy przekaz jest jasny i zrozumiały?
Wiem, że za wiele tam postów jeszcze nie ma, ale pracuję nad tym ... :)

link: http://lukasz-socha.pl

Pozdrawiam

konto usunięte

Temat: Opinia na temat bloga

Prowadzenie takiej witryny w formie bloga to najgorsze co można zrobić. Dlaczego ? Bo wpisy są umieszczone chronologicznie, czasami filtrowane wg tagu i nić więcej.

Widząc "Wstęp do OOP part 15" wolał bym żeby "part 14" był nie 50 wpisów temu ale linijkę wyżej.

O wiele lepiej by się to sprawdziło gdybyś zrobił porządne kategorie i jakoś logicznie rozmieścił teksty.

Zauważyłem też ucząc niektórych np HTML'a że dobrym podejściem jest ciągłość nauczania. Tzn w pierwszym tekście np pokazujesz strukturę z <html><head itp...
Drugi tekst powinien użyć DOKŁADNIE TEN SAM kod który zrobiłeś w pierwszym i rozwinąć go np tłumacząc meta tagi.

I tak aż dojdziemy do normalnej strony HTML która jakoś wygląda. Jeżeli wymagana będzie jakaś grafika to dostarcz ją po drodze np jako rar do ściągnięcia.

Znowu po przejściu przez podstawy PHP warto pokazać wszystko na przykładzie. Bierzemy gotową stronę jaką niby zrobiliśmy w kursie HTML i np pokazujemy co można zrobić jej z elementami.

W ten sposób kolega od prostej strony HTML zrobił mały blog z możliwością logowania, rejestracji, dodawania wpisów i komentowania. I łykał wiedzę bez problemu.

To tylko taka moja sugestia.
Adam Krupa

Adam Krupa Senior Software
Developer, Lethe

Temat: Opinia na temat bloga

Przekaz zawiera przede wszystkim błędy. Przykład: klasa do obsługi sesji jest największą bzdurą jaką ostatnio widziałem.

Wywołanie:
error_reporting(E_NOTICE);
Session::start();
$foo = Session::get('bar');

Wynik:
Notice: A session had already been started - ignoring session_start() in /home/xors/domains/xors.ayz.pl/public_html/sesja.php on line 21
Notice: Undefined index: default in /home/xors/domains/xors.ayz.pl/public_html/sesja.php on line 55


Proponuje dowiedzieć się czym jest singleton...Adam Krupa edytował(a) ten post dnia 02.09.11 o godzinie 13:02

konto usunięte

Temat: Opinia na temat bloga

Jest nieźle. Unikaj przepisywania dokumentacji na nowo. Powinieneś popracować nad OOP, ale tak to jest git ;)

Co do OOP...

1. Wsadzenie metod statycznych w klasę i opakowanie nimi funkcji to krok w dobrą stronę, ale potrzebny jest skok, a nie krok.

2. Zrefaktorowałem Twoją klasę, teraz wygląda tak...


<?php
/**
* @author Łukasz Socha <kontakt@lukasz-socha.pl>
* @version: 1.0
* @license http://www.gnu.org/copyleft/lesser.html
*/

/**
* This class includes methods for session operation.
*
* @package Core
*/
class Session {

public static function start()
{
if( !self::isSessionStarted() )
{
session_start();
}
}

public static function isSessionStarted()
{
return (bool)self::getSessionId();
}

public static function getSessionId()
{
return session_id();
}

public static function set($name, $value, $namespace='default')
{
self::start();

if( !self::namespaceExists($namespace) )
{
$_SESSION[$namespace] = array();
}

$_SESSION[$namespace][$name]=$value;
}

public static function namespaceExists($namespace)
{
self::start();
return array_key_exists($namespace, $_SESSION);
}

public static function exists($name, $namespace='default')
{
self::start();
return array_key_exists($name, $_SESSION[$namespace]);
}

public static function get($name, $default = null, $namespace='default')
{
self::start();

if( self::exists($name, $namespace) )
{
return $_SESSION[$namespace][$name];
}

return $default;
}

public static function getAndDelete($name, $default = null, $namespace='default')
{
self::start();
$var = self::get($name, $default, $namespace);
self::delete($name, $namespace);
return $var;
}

public static function delete($name, $namespace='default')
{
self::start();

if( self::exists($name, $namespace) )
{
unset($_SESSION[$namespace][$name]);
}
}

public static function deleteNamespace($namespace='default')
{
self::start();
unset($_SESSION[$namespace]);
}

public static function deleteAll()
{
self::start();
$_SESSION=array();
}


public static function destroy()
{
self::start();
self::deleteAll();
session_destroy();
}

public static function getName($name=null)
{
self::start();
session_name($name);
}
}


Nie chciało mi się już zmieniać wszystkiego, ale zamiast get(), set() powinno być raczej getVariable()/setVariable() itp. To samo przy start()/destroy() - startSession(), destroySession() - ponieważ mieszasz metody odpowiedzialne za obsługę różnych rzeczy. De facto to pseudo-przestrzeń nazw, nie klasa.

O wiele lepiej byłoby zrobić to jako klasę niestatyczną i zaimplementować multiton.

3. Nie zamykaj kodu ?>

4. Większość Twoich komentarzy zaśmieca klasę.

........

Lecę, powodzenia ;)Łukasz K. edytował(a) ten post dnia 02.09.11 o godzinie 13:05
Filip Górny

Filip Górny Programista,
webdeveloper.

Temat: Opinia na temat bloga

Nie wrzucaj tutaj tego typu pracy bo szczury Cię w błocie zmieszają.

konto usunięte

Temat: Opinia na temat bloga

Adam Krupa:
Przykład: klasa do obsługi sesji jest największą bzdurą jaką ostatnio widziałem.

Robienie singletona z sesji - to bzdura.
Pisanie wrappera na sesję - już niekoniecznie, pod warunkiem że dostaje się dodatkowe funkcjonalności.
Łukasz Socha

Łukasz Socha Web developer /
programista, student
informatyki

Temat: Opinia na temat bloga

Filip Górny:
Nie wrzucaj tutaj tego typu pracy bo szczury Cię w błocie zmieszają.

Dla mnie liczy się tylko konstruktywna krytyka :) Resztę ignoruję :)

@Dariusz
Dzięki za zwrócenie uwagi co do kategorii i porozrzucania wpisów. Dodam takie coś jak powiązane wpisy. Resztę sugestii wezmę pod uwagę przy tworzeniu cyklu o tworzeniu systemu artykułów.

@Adam, @Łukasz
Dzięki za wytknięcie błędu (i poprawy). Zaktualizuję to na weekendzie.

"O wiele lepiej byłoby zrobić to jako klasę niestatyczną i zaimplementować multiton."
hmm nie znam tego terminu. Mógłbyś dać link do materiałów? Wujek Google nie zwraca ciekawych wyników...

Ad 3 Czemu?
Ad 4 hmm zdaje sobie sprawę z tego, ale klasy te używam także w pracy, a więc przydają się do dokumentacji :)

Edit:
Moim zdaniem klasa do mechanizmu sesji przydaje się. Chociażby fajną sprawą są przestrzenie nazw, które zaimplementowałem. A poza tym łatwo rozszerzyć o nowe funkcje.Łukasz Socha edytował(a) ten post dnia 02.09.11 o godzinie 13:25

konto usunięte

Temat: Opinia na temat bloga

Łukasz Socha:ie błędu (i poprawy). Zaktualizuję to na weekendzie.

"O wiele lepiej byłoby zrobić to jako klasę niestatyczną i zaimplementować multiton."
hmm nie znam tego terminu. Mógłbyś dać link do materiałów? Wujek Google nie zwraca ciekawych wyników...

Ależ jak to nie zwraca? Pierwszy wynik:

http://en.wikipedia.org/wiki/Multiton_pattern

Multiton to taki singleton, tylko z przekazaniem identyfikatora obiektu. Jeśli jako domyślny przyjmiesz np. 0, to masz singletona w zestawie. W wiki jest implementacja PHP ciężka do zrozumienia. Jeśli znasz singletona, to zobaczysz róznice w multi:


class A
{
private static $instances = array();

static function getInstance($id = 0)
{
if( !isset(self::$instances[$id]) )
{
self::$instances[$id] = new A();
}

return self::$instances[$id];
}
}

$a = A::getInstance();
$b = A::getInstance(0);
$c = A::getInstance('c');

# ( $a == $b ) != $c

Ad 3 Czemu?

Jeśli zrobisz znacznik zamykania, to wszystko co będzie po nim (np. przypadkowa spacja) poleci na stdout, a tego nie chcemy.
Ad 4 hmm zdaje sobie sprawę z tego, ale klasy te używam także w pracy, a więc przydają się do dokumentacji :)

Klasy powinny być samo dokumentujące się. Jeśli nazwiesz metodę getVariable() to nie trzeba pisać, że to "gets variable". To nadmiarowe i niepotrzebne. Więcej pracy, więcej możliwości popełnienia błędów. Jeśli wymagają od Ciebie takich rzeczy, to znaczy, że nie wiedzą jak należy pisać kod.

Oczywiście tam, gdzie kod sam nie wystarcza, komentarze i dokumentacje są jak najbardziej na miejscu.
Adam Krupa

Adam Krupa Senior Software
Developer, Lethe

Temat: Opinia na temat bloga

Michał Wachowski:
Robienie singletona z sesji - to bzdura.

Dziwne bo ta bzdura jest powszechnie stosowana...

/**
* Session library.
*
* $Id: Session.php 4073 2009-03-13 17:53:58Z Shadowhand $
*
* @package Core
* @author Kohana Team
* @copyright (c) 2007-2008 Kohana Team
* @license http://kohanaphp.com/license.html
*/
class Session_Core {

// Session singleton


/**
* Zend Framework
*
* @category Zend
* @package Zend_Session
* @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Session.php 23651 2011-01-21 21:51:00Z mikaelkael $
* @since Preview Release 0.2
*/

class Zend_Session extends Zend_Session_Abstract
{
protected function __construct()
{
}
public static function start($options = false)
{
Adam Krupa edytował(a) ten post dnia 02.09.11 o godzinie 13:55

konto usunięte

Temat: Opinia na temat bloga

odnośnie tej sesji, ładniej wygląda np. taka wersja:

$session = new Session;
$session
->set('name', 'zenon')
->set('id', 21)
->set('address', array('country' => 'Bangladesz', 'city' => 'dupa'));

$user_name = $session->get('name');


Poza tym jak Michał wspomniał, jeśli już tworzymy wrapper dla sesji to niech ma jakieś dodatkowe funkcjonalności, choćby tak podstawowe zabezpieczenia przed:
- session fixation
- session hijacking
Tobiasz Glazar

Tobiasz Glazar Front-End Developer

Temat: Opinia na temat bloga

A wracając do bloga - popraw literówki.

konto usunięte

Temat: Opinia na temat bloga

Kamil Brenk:
odnośnie tej sesji, ładniej wygląda np. taka wersja:

$session = new Session;
$session
->set('name', 'zenon')
->set('id', 21)
->set('address', array('country' => 'Bangladesz', 'city' => 'dupa'));

$user_name = $session->get('name');

Wygląda znajomo :D

@Adam Krupa - sto milionów much nie może się przecież mylić...

konto usunięte

Temat: Opinia na temat bloga

Dajcie JEDEN powód dla którego do sesji trzeba użyć singleton w momencie jak i tak tylko opakowujecie tabele $_SESSION.
Singleton miał by sens gdybyście mieli własny mechanizm i gdyby MOGŁY zachodzić jakieś konflikty w wypadku wielu obiektów dla sesji.

konto usunięte

Temat: Opinia na temat bloga

Michał Wachowski:

@Adam Krupa - sto milionów much nie może się przecież mylić...

Otoz to... Jezeli kto inny uzywa Singletonow nie oznacza to, ze sa one dobra praktyka. Jezeli ktos folowwuje SOLID OOP to nie powinien w ogole uzywac Singletonow, z ktorymi jest wiecej problemow niz pozytku... Rozumiem jednak zamilowanie do nich - nic nie kusi jak latwosc dostepu do globalnego obiektu.

Ciezko tez jest pisac adaptywny kod na Singletonach. Problemem jest tez serializacja, garbage collection...

Jak dla mnie to anti-pattern.

[flame mode on]
Łukasz Socha

Łukasz Socha Web developer /
programista, student
informatyki

Temat: Opinia na temat bloga

Tobiasz Glazar:
A wracając do bloga - popraw literówki.
ee gdzie są np? Raczej staram się pisać w edytorze tekstu.
Tobiasz Glazar

Tobiasz Glazar Front-End Developer

Temat: Opinia na temat bloga

Łukasz Socha:
ee gdzie są np? Raczej staram się pisać w edytorze tekstu.

Np. tu "Algorytmy sorujące – cz. II"

konto usunięte

Temat: Opinia na temat bloga

A moze powinienes jakis art o SQL Injection napisac?;)

http://www.vegabutik.pl/sondy/index.php?task=survey&ac...
Łukasz Socha

Łukasz Socha Web developer /
programista, student
informatyki

Temat: Opinia na temat bloga

Łukasz Nowacki:
A moze powinienes jakis art o SQL Injection napisac?;)

http://www.vegabutik.pl/sondy/index.php?task=survey&ac...

hmm raczej odporne jest, tyle że nie ma obsługi wyjątków :D Zaraz poprawię

konto usunięte

Temat: Opinia na temat bloga

Ja bym powiedział że nie jest.

konto usunięte

Temat: Opinia na temat bloga

Łukasz Socha:
Łukasz Nowacki:
A moze powinienes jakis art o SQL Injection napisac?;)

http://www.vegabutik.pl/sondy/index.php?task=survey&ac...

hmm raczej odporne jest, tyle że nie ma obsługi wyjątków :D Zaraz poprawię

Wyjatki nic tu nie pomoga...
Natomiast troche nauki nigdy nie zaszkodzi: http://php.net/manual/en/security.database.sql-injecti...

Następna dyskusja:

Temat Pracy Magisterskiej |...




Wyślij zaproszenie do