<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Nazgul design &#187; Programowanie</title>
	<atom:link href="http://blog.nazgul.pl/categories/dev/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nazgul.pl</link>
	<description>webdev, webdesign, apple…</description>
	<lastBuildDate>Sun, 11 Apr 2010 13:13:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Zeroconf: Kod źródłowy</title>
		<link>http://blog.nazgul.pl/dev/zeroconf-kod-zrodlowy/</link>
		<comments>http://blog.nazgul.pl/dev/zeroconf-kod-zrodlowy/#comments</comments>
		<pubDate>Tue, 20 May 2008 13:49:59 +0000</pubDate>
		<dc:creator>Nazgul</dc:creator>
				<category><![CDATA[Programowanie]]></category>

		<guid isPermaLink="false">http://blog.nazgul.pl/?p=42</guid>
		<description><![CDATA[Zamieszczam obiecany kod źrodłowy (: zeroconf.zip (1.7 kB) Kompiluje się pod VS 2008 Express. Pod Mono oraz innymi wersjami Visual Studio tez powinien. No related posts. Powiązane wpisy wygenerowane przez wtyczkę Yet Another Related Posts.


No related posts.

Powiązane wpisy wygenerowane przez <a href='http://mitcho.com/code/yarpp/'>wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p>Zamieszczam obiecany kod źrodłowy (:</p>
<p class="file"><a href="http://blog.nazgul.pl/wp-content/uploads/2008/05/zeroconf.zip" class="filename">zeroconf.zip</a> <small class="size">(1.7 kB)</small></p>
<p>Kompiluje się pod <abbr title="Visual Studio">VS</abbr> 2008 Express. Pod <a href="http://www.mono-project.com/">Mono</a> oraz innymi wersjami <a href="http://msdn.microsoft.com/en-us/vstudio/default.aspx">Visual Studio</a> tez powinien.</p>


<p>No related posts.</p>
<p>Powiązane wpisy wygenerowane przez <a href='http://mitcho.com/code/yarpp/'>wtyczkę Yet Another Related Posts</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.nazgul.pl/dev/zeroconf-kod-zrodlowy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zeroconf: Avahi, Bonjour</title>
		<link>http://blog.nazgul.pl/dev/zeroconf-avahi-bonjour/</link>
		<comments>http://blog.nazgul.pl/dev/zeroconf-avahi-bonjour/#comments</comments>
		<pubDate>Mon, 19 May 2008 07:28:32 +0000</pubDate>
		<dc:creator>Nazgul</dc:creator>
				<category><![CDATA[Programowanie]]></category>

		<guid isPermaLink="false">http://blog.nazgul.pl/?p=34</guid>
		<description><![CDATA[Co to jest zeroconf? Zeroconf, jak nazwa nam sugeruje, w założeniu umożliwia podłączanie urządzeń sieciowych bez potrzeby konfiguracji. Jednak można go użyć również w innych celach — pozwala on na rozgłaszanie usług dostępnych na poszczególnych komputerach w sieci. Najlepszym przykładem &#8230; <a href="http://blog.nazgul.pl/dev/zeroconf-avahi-bonjour/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>


No related posts.

Powiązane wpisy wygenerowane przez <a href='http://mitcho.com/code/yarpp/'>wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<h3>Co to jest zeroconf?</h3>
<p>
<a href="http://www.zeroconf.org/" title="zeroconf.org">Zeroconf</a>, jak nazwa nam sugeruje, w założeniu umożliwia podłączanie urządzeń sieciowych bez potrzeby konfiguracji. Jednak można go użyć również w innych celach — pozwala on na rozgłaszanie usług dostępnych na poszczególnych komputerach w sieci. Najlepszym przykładem jest tu iTunes i jego protokół udostępniania muzyki (DAAP). Zeroconf (a właściwie implementacja Apple –Bonjour) jest bardzo powszechny w Mac OS, służy np. do udostępniania drukarek, rozmów w sieci lokalnej etc.
</p>
<p>
Apple wydaje Bonjour pod Mac OS oraz Windows. Linux posiada własną implementację — Avahi (jest dostępny we większości dystrybucji out of the box). W systemach Microsoft istnieje również UPnP, ale nie przyglądałem się za bardzo temu rozwiązaniu.
</p>
<h3>Kiedy, gdzie i jak używać?</h3>
<p>
Najciekawszą możliwością jest dla mnie właśnie możliwość ogłaszania usług w sieci. Na przykład mając router wspierający Bonjour możemy wklikać się na stronę zarządzania, bądź podłączyć do niego drukarkę usb, która będzie widziana i obsługiwana bez problemów na jakimkolwiek systemie klienckim.</p>
<p>Ideą zeroconf jest aby użytkownik po podłączeniu do sieci mógł od razu korzystać z dostępnych w sieci usług. Lista możliwych do rozgłoszenia serwisów dostępna jest na <a href="http://www.dns-sd.org/ServiceTypes.html">stronie dns-sd</a></p>
<h3>A co z Windowsem?</h3>
<p>
W systemie z Redmond obsługa zeroconf na razie kuleje, jednak widać pewne zmiany. Photoshop CS3 korzysta z Bonjour do szukania serwerów <a href="http://en.wikipedia.org/wiki/VersionCue">VersionCue</a>, iTunes udostępnia w ten sposób muzykę, safari pokazuje listę serwerów www. Niektóre komunikatory (<a href="http://www.skype.com/">Skype</a>,<a href="http://www.pidgin.im/">Pidgin</a>) korzystają z Bonjour/Avahi umożliwiając komunikację IM w sieci.
</p>
<p>
Jednak przyzwyczaiłem się do prostego ogłaszania usług znanego z Avahi, gdzie korzysta się z plików <code>*.service</code> (więcej na blogu <a href="http://osx.jogger.pl/2007/04/11/avahi-jak-to-ugryzc/">osx.jogger.pl</a>). Dlatego napisałem prosty program w C#, korzystający z <a href="http://www.mono-project.com/Mono.Zeroconf">Mono.Zeroconf</a>, który umożliwia używanie plików o takiej samej składni jak w avahi. Za niedługo udostępnię źródło, tylko muszę trochę je poprawić.
</p>
<h3>Na koniec</h3>
<p>Polecam obejrzenie prezentacji (ponad godzinnej) nt. zeroconf: <a href="http://video.google.com/videoplay?docid=-7398680103951126462">http://video.google.com/videoplay?docid=-7398680103951126462</a><br />
oraz odwiedzenie stron: <a href="http://zeroconf.org/">zeroconf.org</a>, <a href="http://avahi.org/">avahi.org</a>, oraz <a href="http://www.apple.com/macosx/technology/bonjour.html">Apple Bonjour</a>.</p>


<p>No related posts.</p>
<p>Powiązane wpisy wygenerowane przez <a href='http://mitcho.com/code/yarpp/'>wtyczkę Yet Another Related Posts</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.nazgul.pl/dev/zeroconf-avahi-bonjour/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Klasa logująca w C#</title>
		<link>http://blog.nazgul.pl/dev/klasa-logujaca-w-c/</link>
		<comments>http://blog.nazgul.pl/dev/klasa-logujaca-w-c/#comments</comments>
		<pubDate>Tue, 25 Mar 2008 19:09:01 +0000</pubDate>
		<dc:creator>Nazgul</dc:creator>
				<category><![CDATA[Programowanie]]></category>

		<guid isPermaLink="false">http://blog.nazgul.pl/inne/klasa-logujaca-w-c/</guid>
		<description><![CDATA[Chciałem zaprezentować moją klasę ułatwiającą obsługę logowania w .NET, klasa ta napisana jest w c# jak sugeruje tytuł (: Kod umieszczam na licencji cc by using System; using System.Collections.Generic; using System.IO; namespace Nazgul.Helpers { //Enumeracja priorytetów public enum LogPriority{ Exception, &#8230; <a href="http://blog.nazgul.pl/dev/klasa-logujaca-w-c/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>


No related posts.

Powiązane wpisy wygenerowane przez <a href='http://mitcho.com/code/yarpp/'>wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p>Chciałem zaprezentować moją klasę ułatwiającą obsługę logowania w .NET, klasa ta napisana jest w c# jak sugeruje tytuł (:<br />
Kod umieszczam na licencji <a href="http://creativecommons.org/licenses/by/2.5/pl/">cc by</a></p>
<p><span id="more-38"></span></p>
<pre class="ln-1-hi"><code class="csharp">using System;
using System.Collections.Generic;
using System.IO;

namespace Nazgul.Helpers
{
    //Enumeracja priorytetów
    public enum LogPriority{
        Exception,
        Error,
        Normal,
        Log
    }

    public class Log
    {
        //Klasa przechowująca TextWriter oraz jego priorytet.
        protected sealed class LogStream
        {
            public TextWriter Out { get; set; }
            public LogPriority Priority { get; set; }
        }

        List&lt;logstream&gt; outs = new List&lt;logstream&gt;(5);      //Lista strumieni
        LogPriority currentPriority = LogPriority.Error;    //Bieżący priorytet
        static readonly Log instance = new Log();

        public static Log Instance
        {
            get{ return instance; }
        }

        //Konstruktory dla singletonu.
        static Log(){}
        Log() { }

        //Funkcja dodaje strumień do kolekcji
        public Log RegisterStream(Stream stream, LogPriority priority)
        {
            if (stream != null)
            {
                outs.AddRange(new LogStream[] { new LogStream() { Out = new StreamWriter(stream), Priority = priority } });
            }
            return this;
        }

        public Log RegisterStream(Stream stream)
        {
            this.RegisterStream(stream, LogPriority.Log);
        }

        public Log RegisterStream(TextWriter tw, LogPriority priority)
        {
            if (tw != null)
            {
                outs.AddRange(new LogStream[] { new LogStream() { Out = tw, Priority = priority } });
            }
            return this;
        }

        public Log RegisterStream(TextWriter tw)
        {
            this.RegisterStream(tw, LogPriority.Log);
        }

        public Log SetPriority(LogPriority prior)
        {
            this.currentPriority = prior;
            return this;
        }

        private void Write(string text)
        {
            foreach (LogStream ls in this.outs)
            {
                if (this.currentPriority >= ls.Priority)
                {
                    ls.Out.Write(text);
                    ls.Out.Flush();
                }
            }
        }

        public Log EndLine()
        {
            this.Write(Environment.NewLine);
            return this;
        }

        public Log Message(string text)
        {
            this.Write(text);
            return this;
        }

        public Log Message(Exception ext)
        {
            //Tutaj należy dodać kod w lepszy sposób opisujacy wyjatek.
            this.Write(ext.ToString());

            return this;
        }
    }
}</code></pre>


<p>No related posts.</p>
<p>Powiązane wpisy wygenerowane przez <a href='http://mitcho.com/code/yarpp/'>wtyczkę Yet Another Related Posts</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.nazgul.pl/dev/klasa-logujaca-w-c/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Prosta klasa szablonów w PHP</title>
		<link>http://blog.nazgul.pl/internet/prosta-klasa-szablonow-w-php/</link>
		<comments>http://blog.nazgul.pl/internet/prosta-klasa-szablonow-w-php/#comments</comments>
		<pubDate>Mon, 05 Nov 2007 09:21:12 +0000</pubDate>
		<dc:creator>Nazgul</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programowanie]]></category>

		<guid isPermaLink="false">http://nazgul.pl/blog/inne/prosta-klasa-szablonow-w-php/</guid>
		<description><![CDATA[Stworzyłem tą klasę jakiś czas temu, na własny użytek, i stwierdziłem, że doskonale zastępuje inne tego typu klasy. Składnia szablonów wygląda tak jak w wordpressie, czyli zwykły kod php, osadzony w szablonach. Jeśli masz pomysł jak ulepszyć tą klasę, dodać &#8230; <a href="http://blog.nazgul.pl/internet/prosta-klasa-szablonow-w-php/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>


No related posts.

Powiązane wpisy wygenerowane przez <a href='http://mitcho.com/code/yarpp/'>wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p>Stworzyłem tą klasę jakiś czas temu, na własny użytek, i stwierdziłem, że doskonale zastępuje inne tego typu klasy. Składnia szablonów wygląda tak jak w <a href="http://wordpress.org">wordpressie</a>, czyli zwykły kod <abbr title="PHP Hypertext Preprocessor">php</abbr>, osadzony w szablonach.</p>
<p>Jeśli masz pomysł jak ulepszyć tą klasę, dodać nową funkcjonalność, lub po prostu znalazłeś błąd, proszę o <a href="http://nazgul.pl/blog/o-mnie/">kontakt</a> ;) Å»yczę miłego używania!</p>
<p><a href="http://www.wklej.org/id/3a125f701e">Wersja do ściągnięcia/skopiowania.</a></p>
<p><span id="more-25"></span></p>
<p>
<pre lang="php">< ?php
/* * * * * * * * * * * *

Licenced for use under the LGPL. See http://www.gnu.org/licenses/lgpl-3.0.txt.

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This licence is there: http://www.gnu.org/licenses/lgpl-3.0.txt.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS /FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

* * * * * * * * * * * * */

/*
 * Filename: templates.class.php
 * Author: Dawid "nazgul" Dziurdzia
 * Licence: LGPL v3.0
 */

class Template
{
    protected $_path;
    protected $_vars = array();
    protected $_result;

    public function Template($path)
    {
        $this->_path = $path;
    } //end constructor

    public function set($name, $value)
    {
        if(!isset($this->_vars[$name]))
        {
            $this->vars[$name] = $value;
        }
    } //end set()

    public function renderTemplate()
    {
        ob_start(); //włączamy buforowanie

        $filename = $this->_path;
        $keys = array_keys($this->vars);

        for ($i=0; $i<count ($this->vars); $i++) //pętla po elementach $vars (przypisujemy zmiennym ($key) wartości z tablicy)
        {
            $key = $keys[$i];
            global ${$key};
            ${$key} = $this->vars[$key];
        }		

        // require_once('/inc/template_helper.php');  //dołączamy plik z funkcajmi pomocniczymi
        require_once($filename); //przetwarzamy plik szablonu

        $output = ob_get_contents(); //pobieramy zawartość bufora do zmiennej

        ob_end_clean(); //kończymy buforować

        $this->_result = $output();
    } //end renderTemplate()

    public function printTemplate()
    {
         echo $this->_result; //wypisujemy rezultat na ekran
    } //end printTemplate()

} //end Template

?></count></pre></p>


<p>No related posts.</p>
<p>Powiązane wpisy wygenerowane przez <a href='http://mitcho.com/code/yarpp/'>wtyczkę Yet Another Related Posts</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.nazgul.pl/internet/prosta-klasa-szablonow-w-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalacja RoR pod Ubuntu</title>
		<link>http://blog.nazgul.pl/linux/instalacja-ror-pod-ubuntu/</link>
		<comments>http://blog.nazgul.pl/linux/instalacja-ror-pod-ubuntu/#comments</comments>
		<pubDate>Tue, 12 Jun 2007 10:21:10 +0000</pubDate>
		<dc:creator>Nazgul</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programowanie]]></category>

		<guid isPermaLink="false">http://nazgul.pl/blog/webdev/instalacja-ror-pod-ubuntu/</guid>
		<description><![CDATA[Instalacja RoR pod Ubuntu, może stanowić problem dla początkujących użytkowników, dlatego zdecydowałem sie napisać to HOWTO. Instalację zaczynamy od pakietów ruby: sudo apt-get install ruby1.8 ruby1.8-dev ruby irb rdoc libopenssl-ruby (instalujemy wersję 1.8, ponieważ jest polecana do współpracy z rails.) &#8230; <a href="http://blog.nazgul.pl/linux/instalacja-ror-pod-ubuntu/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>


No related posts.

Powiązane wpisy wygenerowane przez <a href='http://mitcho.com/code/yarpp/'>wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p>Instalacja <a href="http://rubyonrails.org/" title="Ruby on Rails">RoR</a> pod <a href="http://ubuntu.pl" title="Ubuntu Linux">Ubuntu</a>, może stanowić problem dla początkujących użytkowników, dlatego zdecydowałem sie napisać to HOWTO. </p>
<p>Instalację zaczynamy od pakietów <a href="http://www.ruby-lang.org/" title="Język ruby">ruby</a>:<br />
<code>sudo apt-get install ruby1.8 ruby1.8-dev ruby irb rdoc libopenssl-ruby</code><br />
(instalujemy wersję 1.8, ponieważ jest polecana do współpracy z <a href="http://rubyonrails.org/" title="Ruby on Rails">rails</a>.)</p>
<p>Następnie ściągamy manager pakietów z <a href="http://rubyforge.org/frs/?group_id=126">http://rubyforge.org/frs/?group_id=126</a> (odpowiednik apt-get dla ruby)<br />
rozpakowujemy go i instalujemy:<br />
<code>sudo ruby setup.rb</code></p>
<p>Teraz należy zaktualizować system:<br />
<code>sudo gem update --system</code><br />
(to może chwile potrwać)</p>
<p>Wreszcie przyszła pora na instalację frameworka.<br />
<code>sudo gem install rails -y</code></p>
<p>Jeśli chcemy zintegrować RoR z <a href="http://mysql.com">mySQL</a>, to czeka nas jeszcze kilka poleceń w konsoli ;)</p>
<p>Instalujemy server i bibliotekę mysql<br />
<code>sudo apt-get install mysql-server</code> (dla mysql 5)<br />
oraz<br />
<code>sudo apt-get install libmysql-ruby</code> i<br />
<code>sudo gem install mysql</code></p>
<p>Teraz możemy utworzyć przykładowy projekt:<br />
<code>rails TestApp<br />
cd ./TestApp<br />
ruby script/server</code><br />
i otwieramy w przeglądarce <code><a href="http://localhost:3000/" title="Testowa aplikacja">http://localhost:3000/</a></code></p>


<p>No related posts.</p>
<p>Powiązane wpisy wygenerowane przez <a href='http://mitcho.com/code/yarpp/'>wtyczkę Yet Another Related Posts</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.nazgul.pl/linux/instalacja-ror-pod-ubuntu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mechanizm cachowania w RoR</title>
		<link>http://blog.nazgul.pl/dev/mechanizm-cachowania-w-ror/</link>
		<comments>http://blog.nazgul.pl/dev/mechanizm-cachowania-w-ror/#comments</comments>
		<pubDate>Sat, 24 Mar 2007 18:15:29 +0000</pubDate>
		<dc:creator>Nazgul</dc:creator>
				<category><![CDATA[Programowanie]]></category>

		<guid isPermaLink="false">http://nazgul.pl/blog/webdev/mechanizm-cachowania-w-ror/</guid>
		<description><![CDATA[Cache w Ruby on Rails Czasami tworząc aplikacje internetowe, wymagające dużej wydajności, okazuje się, że wykonywanie jakiegoś kodu od nowa dla każdego odwiedzającego jest nieekonomiczne. Można temu zaradzić umieszczając taki kod w cache (pliku, pamięci ram, bazie danych). W RoR &#8230; <a href="http://blog.nazgul.pl/dev/mechanizm-cachowania-w-ror/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>


No related posts.

Powiązane wpisy wygenerowane przez <a href='http://mitcho.com/code/yarpp/'>wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<h3>Cache w Ruby on Rails</h3>
<p>
Czasami tworząc aplikacje internetowe, wymagające dużej wydajności, okazuje się, że wykonywanie jakiegoś kodu od nowa dla każdego odwiedzającego jest nieekonomiczne. Można temu zaradzić umieszczając taki kod w cache (pliku, pamięci ram, bazie danych).
</p>
<p>
W RoR istnieją trzy tryby buforowania zawartości:</p>
<ol>
<li>Buforowanie całej strony — page cachcing</li>
<li>Buforowanie akcji — action caching</li>
<li>Buforowanie fragmentów — fragments caching</li>
</ol>
<p><span id="more-13"></span></p>
<h3>Page caching</h3>
<p>
Buforowanie strony polega na dodaniu do swojego kontrolera filtra <code>caches_page</code>, w najprostszym wypadku wygląda to tak:</p>
<pre lang="ruby">class MainController < ApplicationController
  caches_page :index, :about
end</pre>
<p>Strony index i about zostaną umieszczone w buforze, i z tamtąd będą serwowane użytkownikom.<br />
Tam metoda jest bardzo prosta, lecz jeśli masz na niej jakieś elementy np. zależne od użytkownika, to niestety musisz z niej zrezygnować.</pre>
</p>
<h3>Action caching</h3>
<p>
Ta metoda keszowania, nie różni sie znacząco od poprzedniej. Do bufora ładowany jest wynik przetwarzania akcji, a szablon jest przetwarzany za każdym razem, więc możemy serwować treść cachowaną i dynamiczną na raz.</p>
<p>
<pre lang="ruby">caches_action :akcja1, :akcja2</pre>
</p>
<h3>Fragment caching</h3>
<p>Jeśli nasza aplikacja używa nie tylko contentu bazującego na URLach (np. związanego z sesjami), musimy użyć trzeciego sposobu buforowania danych. Ten sposób ma jedną zaletę — jest bardzo elastyczny, możemy precyzyjnie zaznaczyć co chcemy buforować, a czego nie, za pomocą znaczników szablonów:</p>
<pre lang="ruby"># non-buffered content
< % cache( :action => 'show_post',:id => @post_id) do %>
       # buffered content
< % end %>
# non-buffered content</pre>
<p>Tak informujemy framework, że wersja skeszowana jest już niepotrzebna (dotyczy wszystkich trybów cachcingu):</p>
<pre lang="ruby">expire_page :controller => 'blog', :action => 'show_post', :id => post_id</pre>
</p>
<h3>Sweeper</h3>
<p>
Sweeper jest to kod, odpowiedzialny za automatyczne czyszczenie bufora. </p>
<pre lang="ruby">class BlogSweeper < ActionController::Caching::Sweeper #klasa sweepera
  observe Blog #Będziemy obserwować kontroler Blog

  #jeśli stworzymy posta, usuń cache
  def after_create(post)
          expire_cache_for(post)
  end

  # jeśli zmodyfikujemy posta, usuń cache
  def after_update(post)
          expire_cache_for(post)
  end

  # ... i to samo jeśli usuniemy
  def after_destroy(post)
          expire_cache_for(post)
  end

  private
  def expire_cache_for(record)
    expire_page(:controller => 'blog', :action => 'show_post', :id => record.id)
    expire_page(:controller => 'blog', :action => 'show_posts')
  end
end</pre>
<p>I teraz aby używać naszej klasy dodamy filtr:</p>
<pre lang="ruby">cache_sweeper :blog_sweeper, :only => [:create, :update, :destroy]</pre>
</p>
<h3>Na koniec</h3>
<p>Po więcej informacji odsyłam do dokumentacji RoR: <a href="http://ap.rubyonrails.com/classes/ActionController/Caching/Fragments.html" title="Buforowanie fragmentów">fragment caching</a>, <a href="http://ap.rubyonrails.com/classes/ActionController/Caching/Actions.html" title="Buforowanie akcji">action caching</a>, <a href="http://ap.rubyonrails.com/classes/ActionController/Caching/Pages.html" title="Buforowanie stron">page caching</a>, <a href="http://ap.rubyonrails.com/classes/ActionController/Caching/Sweeping.html" title="Sweeping">sweeping</a></p>
<p>Polecam jeszce przejrzenie tego postu, który pokazuje inne podejscie do buforowania w Rubym: <a href="http://jarmark.org/post/wygodny-cache/">Jarmark.org — Wygodny Cache</a></p>


<p>No related posts.</p>
<p>Powiązane wpisy wygenerowane przez <a href='http://mitcho.com/code/yarpp/'>wtyczkę Yet Another Related Posts</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.nazgul.pl/dev/mechanizm-cachowania-w-ror/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
