Monthly Archive for September, 2008

Kupiłbym* G1 gdyby…

  • miał Bluetooth
  • kosztował faktycznie $200 i nie był powiązany z żadnym operatorem
  • był dostępny w Polsce ;-) (nie ma co liczyć na gwiazdkowy prezent od polskich operatorów…)

* czyt. byłbym zainteresowany ;-)

źródło: IDG

Wraca stary harmonogram M$

Jak podaje PCLab, istnieją spekulacje, że Windows 7 ma pojawić się w czerwcu przyszłego roku (nie doczytałem jaka wersja – RC czy RTM?). Według mnie ta wiadomość wcale nie jest zaskakująca…

Jeśli spojrzymy na historię linii Windows od wersji 95 to tylko XP przez 6 długich lat nie mogła się doczekać następcy. Ta jedna wersja na trwałe wpisała nam do głowy, że między kolejnymi głównymi wydaniami systemu musi być kilkuletnia “dziura”. Otóż wcale nie musi! Wystarczy spojrzeć na krótki “rys historyczny” (edycje klienckie):

  • Windows 95 – 24.08.1995
  • Windows 98 – 25.06.1998
  • Windows Me – 14.09.2000
  • Windows XP – 25.10.2001
  • Windows Vista – 30.01.2007

Po drodze oczywiście były wersje NT (3.x, 4.0), serwerowe oraz dużo Service Packów. Zgadzam się z tym, że można dyskutować na temat jakości i nowości związanych z kolejnymi nowymi wersjami, jednak nie można zapomnieć, że głównym celem Microsoftu jest produkowanie oprogramowania, stąd też zaraz po wydaniu finalnej wersji jednego produktu, programiści i projektanci zabierają się za kolejny. Stąd też nie dziwię się, że ostro pracują na kolejną odsłoną Windowsa, tym bardziej, że Vista nie okazała się aż takim hitem, jaki zapowiadano.

Swoją drogą zawsze intrygowało mnie, dlaczego MS “przespał” te 6 lat nie wypuszczając żadnej znaczącej edycji. Ktoś może zna odpowiedź?

Statyczny konstruktor w PHP

W C# istnieje możliwość utworzenia statycznego konstruktora, który jest uruchamiany przy pierwszym odwołaniu do danej klasy. Wygląda to mniej więcej tak:

public class Foo
{
static Foo()
{
System.Diagnostics.Trace.Write(“Klasa Foo zostala zaladowana”);
}
}

Zdarza się, że podobna funkcjonalność przydałaby się w PHP, który jednak tej konstrukcji nie obsługuje. Można to jednak w prosty sposób “zasymulować” poprzez odpowiednie zmodyfikowanie “magicznej” funkcji __autoload() oraz dodanie statycznej metody do klasy, która będzie udawać konstruktora (w moim przykładzie użyłem nazwy staticConstruct).

class Foo
{
public function __construct()
{
// ‘normalny’ konstruktor
}

public static function staticConstruct()
{
echo ‘Klasa Foo zostala zaladowana’;
}
}

function __autoload($className)
{
// obsluga zaladowania klasy
// …
// …

if(is_callable(array($className, ’staticConstruct’)))
{
call_user_func(array($className, ’staticConstruct’));
}
}

Jak widać sposób implementacji jest wręcz trywialny. Niemniej pojawia się dwie kwestii, które trzeba wyjaśnić:

  • statyczny konstruktor jest publiczny przez co można wywoływać go w kodzie – można ten problem rozwiązać poprzez wprowadzenie odpowiedniego statycznego pola typu boolean, które będzie sprawdzane przez owy konstruktor – nie jest to do końca “eleganckie” rozwiązanie, niemniej innego sposobu nie dostrzegłem
  • statyczny konstruktor w klasie dziedziczącej nie musi (i nie jest to nawet wskazane) wcale wywoływać konstruktora z klasy nadrzędnej, bowiem zostanie on samodzielnie wywołany przez __autoload() w czasie ładowania klasy