Ostatnie wpisy »

Paproć Barnsleya (paprotka Barnsleya, fraktal liść paproci) – fraktal znany ze względu na uderzające podobieństwo do liści paproci występujących w naturze, spopularyzowany przez Michaela F. Barnsleya. Jest to przykład złożonego obiektu, który może być opisany za pomocą zaledwie czterech przekształceń afinicznych (zob. Barnsley (1993), str. 86) jako atraktor następującego systemu funkcji zwężających… (http://pl.wikipedia.org/wiki/Papro%C4%87_Barnsleya).

private void PutPixel(Graphics g, Color c, int x, int y)
{
   Bitmap bmp = new Bitmap(1, 1);
   bmp.SetPixel(0, 0, Color.Green);
  g.DrawImageUnscaled(bmp, x, y);
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
  Graphics g = e.Graphics;
  Random rnd = new Random(DateTime.Now.Millisecond);
  double x = 0, y = 0;
  for (int i = 0; i < 40000; ++i)
  {
    double r = rnd.NextDouble();
    if (r <= 0.01)
    {
      x = 0;
      y = 0.16 * y;
    }
    else if (r <= 0.08)
    {
      x = (0.2 * x) - (0.26 * y);
      y = (0.23 * x) + (0.22 * y) + 1.6;
    }
    else if (r <= 0.15)
    {
      x = (-0.15 * x) + (0.28 * y);
      y = (0.26 * x) + (0.24 * y) + 0.44;
    }
    else
    {
      x = (0.85 * x) + (0.04 * y);
      y = (-0.04 * x) + (0.85 * y) + 1.6;
    }
    int zoom = 50;
    double xZoom = this.Width - (x * zoom + (this.Width / 2));
    double yZoom = this.Height - (y * zoom);
    this.PutPixel(g, Color.Green, (int)xZoom, (int)yZoom-50);
  }
}

jQuery – wczytywanie danych via Ajax

Korzystając z jQuery możemy wygodnie wczytywać zawartość strony WWW przez AJAX. Jeżeli chcemy wczytywać dane statyczne (np. dokument html) zapewne będziemy chcieli skorzystać z mechanizmu cache’owania. Jeśli jednak wczytujemy wynik działania dynamicznego skryptu (np. napisanego w PHP) wówczas należy wyłączyć możliwość korzystania z pamięci podręcznej:

  $.ajaxSetup({cache:false});

Jeżeli nie potrzebujemy korzystać z dodatkowych argumentów wywołania skryptu via AJAX (np. metodą GET) wówczas sprawa jest wręcz banalna:

   $('div#site-content').load('ajax/site_content.php');

Jednak powyższy kod prawdopodobnie okaże się dla nas niekoniecznie satysfakcjonujący, bowiem dane owszem wczytywane będą asynchronicznie via AJAX, aczkolwiek jeśli skrypt będzie wykonywał się długo, strona będzie wyglądała jakby nie reagowała na wysłane żądanie. Warto urozmaicić ten skrypt poprzez wstawienie obrazu informującego o trwaniu procesu ładowania treści:

   $('div#site-content').
     html('<img src="images/ladowanie.gid"/>).
     load('
ajax/site_content.html');

Wczytanie wybranego fragmentu strony można uzyskać w następujący sposób:

   $('div#site-content').
     html('<img src="images/ladowanie.gid"/>).
     load('
ajax/site_content.html#sekcja');

Natomiast jeżeli chcemy skorzystać z metody POST lub GET w celu przekazania dodatkowych argumentów, należy dopisać stosowną informację:

   //GET
   $('div#site-content').
     html('<img src="images/ladowanie.gid"/>).
     load('
ajax/site_content.php', "zmienna_get=wartosc&druga=wartosc2");
   //POST
   $('
div#site-content').
     html('
<img src="images/ladowanie.gid"/>).
     load('ajax/site_content.php', {zmienna_post : 'wartosc', liczba : 5});

Kohana-kurs. Profiler (13)

Kohana udostępnia mechanizm o nazwie „Profiler” do wyświetlania statystyk na temat tworzonych aplikacji.

„Profilowanie” naszego kodu przebiega w następujący sposób:

$b = Profiler::start('Nazwa naszej kategorii',__FUNCTION__);
//... wykonywany kod
Profiler::stop($b);
echo View::factory('profiler/stats');

Kohana-kurs. Sesje i ciasteczka (12)

Kohana posiada zintegrowane mechanizmy obsługi sesji i ciasteczek. Odpowiedzialne są za nie klasy o bardzo zbliżonej budowie (Session oraz Cookie). Zasadnicza różnica pomiędzy obiema klasami polega na tym, że Cookie posługujemy się z wykorzystaniem metod statycznych.
Sesje

//Pobieranie instancji
$session = Session::instance();
//Pobieranie zmiennych sesji do tablicy asocjacyjnej
$data = $session->as_array();
//Ustawianie zmiennej
$session->set($klucz, $wartosc);
Session::instance()->set($klucz2, $wartosc2);
//Pobieranie zmiennej
$user = $session->get('user_id');
//Usuwanie zmiennej
$session->delete($klucz);

Konfiguracja sesji
Dane sesji mogą być przechowywane przy pomocy trzech różnych adapterów:

  • Adapter natywny – dane przechowywane są na serwerze WWW zgodnie z konfiguracją session.save_path w pliku php.ini
  • Baza danych
  • Ciasteczka (ograniczenie do 4 KB)

Konfiguracja adaptera znajduje się w pliku „config/session.php”. Opis konfiguracji można znaleźć na stronie http://kohanaframework.org/3.2/guide/kohana/sessions. Ustawienia domyślnego adaptera można dokonać modyfikując wartość zmiennej Session::$default.
Ciasteczka
Wszystkie informacje przechowywane w tzw. „ciasteczkach” w Kohanie są dla bezpieczeństwa hashowane wg ustawionego parametru Cookie::$salt.

Cookie::set($klucz, $wartosc);
$wartosc = Cookie::get($klucz);
Cookie::delete($klucz);

Konfiguracja ciasteczek

Cookie::$salt= "ciag znakow";
//Ustawienie czasu, po którym ciasteczko zostanie usunięte
Cookie::$expiration = Date::WEEK;
//Ustawienie domeny
Cookie::$domain = 'www.strona.pl';
Cookie::$domain = ".strona.pl'; //strona.pl + subdomeny
//Ustawienie dostępności ciasteczek tylko dla połączenia SSL
Cookie::$secure = TRUE;
//Zablokowanie ciasteczek dla JavaScript
Cookie::$httponly = TRUE;

Kohana-kurs. Żądania (11)

Kohana zawiera elastyczny system obsługi żądań (ang. request). Żądanie łączy się z innymi akcjami na podstawie adresu URI (wskazującego na wybrany kontroler). Można wywoływać wiele żądań wewnątrz wybranej akcji.
Proste utworzenie wewnętrznego żądania można wykonać wpisując (zgodnie z ustawieniami routingu):

//wybrany kontroler i akcja
$request = Request::Factory('controller/action');
//domyślna akcja
$def_req = Request::initial();
//bieżąca akcja
$curr_req = Request::current();

Żądania zewnętrzne

//GET
$request = Request::factory('http://www.google.com/');
//PUT
$request = Request::factory('http://example.com/put_api')
   ->method(Request::PUT)
   ->body(json_encode('the body'))
   ->headers('Content-Type', 'application/json');
//POST
$request = Request::factory('http://example.com/post_api')
   ->method(Request::POST)
   ->post(array('foo' => 'bar', 'bar' => 'baz'));

Uruchamianie żądań

$request = Request::factory('welcome');
$response = $request->execute();
Powered by WordPress & Web Design Company. Modified by Maciej Kunowski