Nerdblog.pl

0-day na PHP, Javę i ASP.NET

Dodano: 29.12.2011

Widzę, że nikt na głównej Joggera jeszcze o tym nie napisał, więc króciutka notka:

Wyszedł 0-day na PHP wykorzystujący bug w algorytmie tablicy haszującej. Dzięki generowaniu kolizji można wywrócić serwer lub przynajmniej zdrowo go przyciążyć. Problem oprócz PHP dotyczy także mniej lub bardziej innych popularnych języków (We show that PHP 5, Java, ASP.NET as well as v8 are fully vulnerable to this issue and PHP 4, Python and Ruby are partially vulnerable, depending on version or whether the server running the code is a 32 bit or 64 bit machine).

Pozostaje czekać na oficjalne łatki.

Więcej informacji (oraz wyjaśnienie problemu): Hash Table Collisions ≈ Packet Storm

Kohana 3.2 CRUD

Dodano: 06.09.2011

Hey, just to keep you updated - I've created a ready-to-go Kohana 3.2 CRUD using Formo. The only thing you have to do is set up your ORM models correctly and it's working out of the box :D

Feel free to fill any issues or send useful pull requests.

Deploying Kohana 3.2 application in production

Dodano: 05.09.2011

maslen on #kohana (freenode) asked about guide on preparing Kohana application to be deployed on production server. As there's no official guide, I've decided to write few pointers of my own.

Here's a list:

  1. Set your Kohana::$environment to Kohana::PRODUCTION. It's not really used in core (yet), but it's very useful to add your own debugging stuff in more complex applications that can't be seen in production. The best way to do so is modify your bootstrap.php adding something like this:
    if (isset($_SERVER['KOHANA_ENV']))
    {
            Kohana::$environment = constant('Kohana::'.strtoupper($_SERVER['KOHANA_ENV']));
    }
    else
    {
            Kohana::$environment = ($_SERVER['REMOTE_ADDR'] == '127.0.0.1' ? Kohana::DEVELOPMENT : Kohana::PRODUCTION);
    }
  2. Create your own 500 errors in place of Kohana's. The simplest way of doing so is creating your custom application/views/kohana/error.php with some nice, user friendly error in place. The better way would be creating customised Kohana_Exception (extending Kohana_Kohana_Exception - yes, I know it sounds silly) and setting your own public static $error_view. If you don't have any other solution in place, you can also create customised Log_Writer that sends you info about critical errors to e-mail (if you're lazy just hack something in Kohana_Kohana_Exception, but it's not me who's going to coder hell)
  3. Remember about disabling profiling and enabling caching on production machine. Once again it can be done using Kohana::$environment like this:
            Kohana::init(array(
                    'base_url'   => '/',
                    'index_file' => '',
                    'profile'    => (Kohana::$environment !== Kohana::PRODUCTION),
                    'caching'    => (Kohana::$environment === Kohana::PRODUCTION)
            ));
     
    There's also a profiling switch in Database configuration, don't forget about it. It may be a good idea to turn on caching for database too, depending on the project you're working on.
  4. Create your own, custom 403 and 404 error pages. It's very important and most often forgotten.
  5. It's a good practice to keep your framework + application and index with assets code in different directories with the former in some directory not accesible from web browser. I for example most often use directory structuring where application/modules/system are in core directory and index.php with uploads and assets in public_html. Unfortunately most of the cheap webhosting's shared accounts don't allow such configuration.
  6. (Edit: 7.09) I forgot about the most important part: always enable some kind of opcode cacher (XCache, APC). It'll give you a significant speed boost, sometimes up to 200-300% with properly written code. Results may vary though.

Of course it's not everything you can do to prepare your application for deployment. Don't forget about caching, use Fragment where possible and most importantly - don't be a cheapskate and don't try saving money on half-assed server.

Kohana 3 Pagination helper (using Jelly)

Dodano: 01.09.2011

While working on another database-to-html project I realized that 99% of pagination I'm doing is the same fragment of code so I isolated it into a very simple helper:

<?php
class Helper_Pagination
{
	public $pagination, $collection;
 
	public static function factory($jelly, $limit = 10)
	{
		return new Helper_Pagination($jelly, $limit);
	}
 
	public function __construct($jelly, $limit = 10)
	{
		if(is_string($jelly))
		{
			$jelly = Jelly::query($jelly);
		}
 
                $this->pagination = Pagination::factory(array(
                    'current_page'      => array('source' => 'query_string', 'key' => 'page'),
                    'total_items'       => $jelly->count(),
                    'items_per_page'    => $limit,
                ));
 
		$this->collection = $jelly->offset($this->pagination->offset)->limit($limit)->select();
	}
}

Can be quickly converted into standard Kohana's ORM:

<?php
class Helper_Pagination
{
	public $pagination, $collection;
 
	public static function factory($orm, $limit = 10)
	{
		return new Helper_Pagination($orm, $limit);
	}
 
	public function __construct($orm, $limit = 10)
	{
		if(is_string($orm))
		{
			$orm = ORM::Factory($orm);
		}
 
                $this->pagination = Pagination::factory(array(
                    'current_page'      => array('source' => 'query_string', 'key' => 'page'),
                    'total_items'       => $orm->reset(FALSE)->count_all(),
                    'items_per_page'    => $limit,
                ));
 
		$this->collection = $orm->offset($this->pagination->offset)->limit($limit)->find_all();
	}
}

Recenzja tabletu GoClever I101

Dodano: 02.08.2011

Jak zapewne ludzie śledzący mnie na Blipie wiedzą, jakiś czas temu jeszcze przed przeprowadzką kupiłem sobie tablet firmy polskiej GoClever. Jest to oczywiście brandowany aPad, ale chodziło mi o polską gwarancję i serwis bez wysyłania za morza i oceany. Postanowiłem w końcu napisać krótką recenzję.

W tym miejscu pragnę gorąco pozdrowić firmę KurtMedia, która nie tylko sprzedała mi lekko uszkodzony (ale używalny) model, ale także nie przyjęła mojego zwrotu (na szczęście serwis firmy GoClever nie miał takich problemów) i bezczelnie wystawiła mi kłamliwy komentarz na Allegro. Bezczelność, łganie w żywe oczy i beznadziejne podejście do klienta, szczerze odradzam jakichkolwiek zakupów od tego potworka.

Po rozpakowaniu, pierwsze wrażenia

Pierwsza rzecz, która rzuciła mi się w oczy to dużo przycisków. Trochę śmiesznie dużo - od lewej strony: wyłącznik, głośność, przycisk menu, przycisk home i wyłącznik fizyczny wifi. Czarny przycisk skopiowany od iPada pełni rolę 'back' i sprawdza się nawet nieźle. Ekran jest dość duży, przeciętnej jakości, rezystancyjny jak we wszystkich tanich tabletach. Upchnęli też rysik, który właściwie się nigdy nie przydaje. Dwa głośniki umieszczone razem z przyciskami są zdecydowanie za ciche.

Poza tym tablecik jest dość ciężki. Wrzucony moduł ethernet nie ułatwia sprawy, bo wybrzusza tył obudowy i na pewno swoje waży. W tablecie zamontowano dwa porty USB w trybie host, więc odpada podłączenie go do komputera w ten sposób. Poza tym jest też port HDMI (kompletnie zbędny) i właśnie wejście kablowe ethernet. Na dole jest też przycisk reset na wypadek gdyby system trochę nie wytrzymał natężenia.

Ekran

Wspominałem już, że ekran jest dość przeciętnej jakości. Kąt widzenia nie jest zbyt wielki, ale po sprzęcie za 600 zł ciężko się spodziewać cudów. Do czytania książek czy przeglądania internetu wystarcza w sam raz. Denerwujący jest poziom nacisku, ponieważ niektóre czynności jak przesuwanie elementów potrafią być frustrujące.

Uszkodzeniem, o którym wspominałem wyżej jest "odklejający się" ekran. Jest to popularna wada chińskich tabletów spowodowana tym, że matryca jest za słabo przytwierdzona do górnej części i przy naciskaniu przy krawędzi widać, jak ekran 'wgniata' się i tworzą się artefakty na ekranie (jak przy przyciskaniu palcem monitora LCD). Nie powoduje to większych problemów, ale może być przyczyną uszkodzenia tabletu w przyszłości.

System

Na pokładzie zainstalowany jest Android 2.2 dostosowany do tanich tabletów. Na górnej belce znajdują się ponownie przyciski menu, powrotu, home, głośności i aparatu (kamerki), co jest dość fajne, bo pozwala na szybki dostęp bez wymacywania gdzie znajdował się fizyczny guzik. Klasyczny ekran Home jest dość kiepski, ale wgranie LauncherPro bardzo szybko poprawiło komfort użytkowania tabletu. W ustawieniach dodano konfigurację Ethernet i kilka innych drobiazgów, nic bardziej interesującego. Do tego ustawienia WiFi wyciągnięto jako aplikacja na launcherze co pozwala na szybszy dostęp - to akurat plus.

Największą wadą jest brak wsparcia dla aplikacji. Jeśli tak jak ja używasz Blipa to się srogo zawiedziesz - żadna z trzech aplikacji nie zadziała na tablecie. Tak samo brakuje tabletowej wersji Dolphin Browsera (a Opera sobie beznadziejnie radzi z JS). Nie liczyłbym też na wsparcie Flasha, ale to chyba raczej oczywiste.

Bateria

Ta część tabletu to niestety dość smutny żart. Zostawianie włączonego urządzenia na dłużej niż pół godzinki to szaleństwo, tym bardziej jeśli zapomnimy wyłączyć WiFi - wyładowuje się po kilku godzinach. Czasu pracy nie mierzyłem, ale na jedną książkę z wyłączonym WiFi powinno wystarczyć. Raczej nie jest to urządzenie mobilne, bo łyka baterię w zdecydowanie zbyt szybkim tempie.

Prędkość działania

Tutaj ciężko jest mi wydać jednoznaczną opinię. Nie korzystałem z żadnych Linpacków, ale z własnego użytkowania widzę, że tablet do najszybszych nie należy. Tyle, żeby poczytać coś i pooglądać strony na luzie, ale nie radziłbym próbować w cokolwiek pograć (przeszkadza w tym zresztą ekran). Oryginalny launcher wydaje się nieco przymulać, LauncherPro działa już ok. Czasami zdarza mu się nieco 'przyciąć' i musi się chwilę zastanowić, ale nic straszniejszego. Przycisku "reset" jeszcze nie musiałem używać ;)

Ostateczny werdykt

Tablet jest ok, jeśli oczekujemy czegoś, żeby pooglądać internet / poczytać książki. Do oglądania filmów raczej się nie nadaje (nie testowałem, ale procek jest dość wolny), tak samo jak nie oczekiwałbym urządzenia do długich podróży pociągiem. Tyle, żeby walnąć się wieczorem na kanapę i przejrzeć RSSy jest idealny. Do czytania zwykłych książek lepiej było by kupić większego Kindle'a. Do bardziej wymagających zabaw raczej polecałbym iPada (wersja pierwsza kosztuje raptem 2x więcej)

Zawiodła mnie przede wszystkim bateria reklamowana jako bardziej wytrzymała. Generalnie z zakupu za te pieniądze jestem zadowolony, chociaż pewnie na gwiazdkę wymienię go na lepszy model. Jeśli szukacie prostej low-endowej zabawki z polskim serwisem i nie chcecie zapłacić za dużo, mogę spokojnie polecić. Jeśli jednak oczekujesz zajebistej płynności działania, super-responsywnego ekranu, szybkich i płynnych animacji itd za 600 zł to stuknij się w główkę i odłóż więcej pieniędzy.