<?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>onjin.net &#187; webdev</title>
	<atom:link href="http://onjin.net/blog/category/webdev/feed/" rel="self" type="application/rss+xml" />
	<link>http://onjin.net/blog</link>
	<description>Takie, tu i tam</description>
	<lastBuildDate>Fri, 27 Apr 2012 09:34:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>ftpmount v1.1.0 &#8211; github</title>
		<link>http://onjin.net/blog/2009/06/22/ftpmount-v110-github/</link>
		<comments>http://onjin.net/blog/2009/06/22/ftpmount-v110-github/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 10:30:35 +0000</pubDate>
		<dc:creator>Marek</dc:creator>
				<category><![CDATA[ftpmount]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[narzędzia]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://onjin.net/index.php/2009/06/22/ftpmount-v110-github/</guid>
		<description><![CDATA[<a href="http://onjin.net/blog/2009/06/22/ftpmount-v110-github/" title="ftpmount v1.1.0 - github"></a>sprawdź najnowszą wersję ftpmount Przeniosłem skrypt ftpmount do github&#8217;a: ftpmount Równocześnie zmieniłem sposób konfiguracji, a raczej tylko domyślną nazwę pliku konfiguracyjnego. Teraz jest szukany plik: .ftpmountrc w aktualnym katalogu potem .ftpmountrc w katalogu domowym Wersje do pobrania.]]></description>
			<content:encoded><![CDATA[<a href="http://onjin.net/blog/2009/06/22/ftpmount-v110-github/" title="ftpmount v1.1.0 - github"></a><div style="text-align: center; border-bottom: solid 1px gray; background: orange">sprawdź najnowszą wersję <a href="http://onjin.net/index.php/category/ftpmount">ftpmount</a></div>
<p>Przeniosłem skrypt ftpmount do github&#8217;a:</p>
<ul>
<li><a href="http://wiki.github.com/onjin/ftpmount">ftpmount</a></li>
</ul>
<p>Równocześnie zmieniłem sposób konfiguracji, a raczej tylko domyślną nazwę pliku konfiguracyjnego. Teraz jest szukany plik:</p>
<ul>
<li>.ftpmountrc w aktualnym katalogu</li>
<li>potem .ftpmountrc w katalogu domowym</li>
</ul>
<p>Wersje <a href="http://github.com/onjin/ftpmount/downloads">do pobrania</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://onjin.net/blog/2009/06/22/ftpmount-v110-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>fuse ftp mount &#8211; curlftpfs</title>
		<link>http://onjin.net/blog/2009/06/21/fuse-ftp-mount-curlftpfs/</link>
		<comments>http://onjin.net/blog/2009/06/21/fuse-ftp-mount-curlftpfs/#comments</comments>
		<pubDate>Sun, 21 Jun 2009 18:11:10 +0000</pubDate>
		<dc:creator>Marek</dc:creator>
				<category><![CDATA[ftpmount]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[narzędzia]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://onjin.net/index.php/2009/06/21/fuse-ftp-mount-curlftpfs/</guid>
		<description><![CDATA[<a href="http://onjin.net/blog/2009/06/21/fuse-ftp-mount-curlftpfs/" title="fuse ftp mount - curlftpfs"></a>sprawdź najnowszą wersję ftpmount Do pracy z hostingiem gdzie mamy tylko &#8221;&#8217;ftp&#8221;&#8217; przydaje się montowanie dysku poprzez właśnie ftp. Służy do tego program &#8221;&#8217;curlftpfs&#8221;&#8217; (np apt-get install curlftpfs). Odpalamy go jako: curlftpfs ftp://user:pass@host/ ./mountpoint Do tego potrzebujemy uprawnienia grupy &#8221;&#8217;fuse&#8221;&#8217; &#8230;<p class="read-more"><a href="http://onjin.net/blog/2009/06/21/fuse-ftp-mount-curlftpfs/">Czytaj więcej &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://onjin.net/blog/2009/06/21/fuse-ftp-mount-curlftpfs/" title="fuse ftp mount - curlftpfs"></a><div style="text-align: center; border-bottom: solid 1px gray; background: orange">sprawdź najnowszą wersję <a href="http://onjin.net/index.php/category/ftpmount">ftpmount</a></div>
<p>Do pracy z hostingiem gdzie mamy tylko &#8221;&#8217;ftp&#8221;&#8217; przydaje się montowanie dysku poprzez właśnie ftp. Służy do tego program &#8221;&#8217;curlftpfs&#8221;&#8217; (np apt-get install curlftpfs).</p>
<p>Odpalamy go jako:</p>
<pre>
curlftpfs ftp://user:pass@host/ ./mountpoint
</pre>
<p>Do tego potrzebujemy uprawnienia grupy &#8221;&#8217;fuse&#8221;&#8217; więć jako &#8221;root&#8221; musimy sobie ją dodać od naszego użytkownika.</p>
<p>Jeżeli mamy dużo połączeń do zarządzania przyda się mały skrypt:<br />
 * <a href="http://onjin.net/files/ftpmount">ftpmount</a></p>
<p>sterowany konfiguracją w pliku &#8221;&#8217;config.ini&#8221;&#8217;:</p>
<pre>
[hostone.pl]
host=ftp.hostone.pl
user=userone
pass=passone # jak nie podamy tego wpisu, program się zapyta o hasło
mountpoint=hostone.pl

[hosttwo.pl]
host=ftp.hosttwo.pl
user=usertwo
mountpoint=hosttwo.pl
</pre>
<p>Wtedy wystarczy nam:<br />
 * ./ftpmount hostone.pl   # montujemy połączenie<br />
 * ./ftpmount -u hostone.pl   #odmontowywujemy połączenie<br />
 * ./ftpmount -l   # lista dostępnych konfiguracji połączeń</p>
]]></content:encoded>
			<wfw:commentRss>http://onjin.net/blog/2009/06/21/fuse-ftp-mount-curlftpfs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>home.pl &amp; django &#8211; pierwsza potyczka</title>
		<link>http://onjin.net/blog/2009/02/26/homepl-django-pierwsza-potyczka/</link>
		<comments>http://onjin.net/blog/2009/02/26/homepl-django-pierwsza-potyczka/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 20:59:38 +0000</pubDate>
		<dc:creator>Marek</dc:creator>
				<category><![CDATA[hosting]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://onjin.net/index.php/2009/02/26/homepl-django-pierwsza-potyczka/</guid>
		<description><![CDATA[<a href="http://onjin.net/blog/2009/02/26/homepl-django-pierwsza-potyczka/" title="home.pl &amp; django - pierwsza potyczka "></a>home.pl obsługuje pythona jako cgi (pliki .py) więc tego będziemy się trzymać. Instalację wykonamy w katalogu /py instalacja django hardcoded ale działa wrzucamy to do /py i ruchamiamy poprzez www (plik install.py) nasz projekt Lokalnie wołamy i wrzucamy katalog pytest &#8230;<p class="read-more"><a href="http://onjin.net/blog/2009/02/26/homepl-django-pierwsza-potyczka/">Czytaj więcej &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://onjin.net/blog/2009/02/26/homepl-django-pierwsza-potyczka/" title="home.pl &amp; django - pierwsza potyczka "></a><p><em>home.pl</em> obsługuje <strong>pythona</strong> jako <strong>cgi</strong> (pliki .py) więc tego będziemy się trzymać. Instalację wykonamy w katalogu <strong>/py</strong></p>
<h4>instalacja django</h4>
<p>hardcoded ale działa <img src='http://onjin.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  wrzucamy to do /py i ruchamiamy poprzez www (plik install.py)</p>
<pre class="brush: python; title: ; notranslate">
#!/usr/bin/env python
import os

os.system(&quot;wget http://www.djangoproject.com/download/1.0.2/tarball/&quot;)
os.system(&quot;tar zxf Django-1.0.2-final.tar.gz&quot;)
os.system(&quot;rm Django-1.0.2-final.tar.gz&quot;)
os.system(&quot;mv Django-1.0.2-final tmp&quot;)
os.system(&quot;mv tmp/django django&quot;)
</pre>
<h4>nasz projekt</h4>
<p>Lokalnie wołamy</p>
<pre class="brush: bash; title: ; notranslate">
django-admin.py startproject pytest
</pre>
<p>i wrzucamy katalog <em>pytest</em> przez ftp na home do katalogu /py .</p>
<h4>dispatch.py</h4>
<pre class="brush: python; title: ; notranslate">
#!/usr/bin/env python

import os, sys
import django.core.handlers.wsgi

def run_with_cgi(application):

    environ                      = dict(os.environ.items())
    environ['wsgi.input']        = sys.stdin
    environ['wsgi.errors']       = sys.stderr
    environ['wsgi.version']      = (1,0)
    environ['wsgi.multithread']  = False
    environ['wsgi.multiprocess'] = True
    environ['wsgi.run_once']     = True

    if environ.get('HTTPS','off') in ('on','1'):
        environ['wsgi.url_scheme'] = 'https'
    else:
        environ['wsgi.url_scheme'] = 'http'

    headers_set  = []
    headers_sent = []

    def write(data):
        if not headers_set:
             raise AssertionError(&quot;write() before start_response()&quot;)

        elif not headers_sent:
             # Before the first output, send the stored headers
             status, response_headers = headers_sent[:] = headers_set
             sys.stdout.write('Status: %s\\r\\n' % status)
             for header in response_headers:
                 sys.stdout.write('%s: %s\\r\\n' % header)
             sys.stdout.write('\\r\\n')

        sys.stdout.write(data)
        sys.stdout.flush()

    def start_response(status,response_headers,exc_info=None):
        if exc_info:
            try:
                if headers_sent:
                    # Re-raise original exception if headers sent
                    raise exc_info[0], exc_info[1], exc_info[2]
            finally:
                exc_info = None     # avoid dangling circular ref
        elif headers_set:
            raise AssertionError(&quot;Headers already set!&quot;)

        headers_set[:] = [status,response_headers]
        return write

    result = application(environ, start_response)
    try:
        for data in result:
            if data:    # don't send headers until body appears
                write(data)
        if not headers_sent:
            write('')   # send headers now if body was empty
    finally:
        if hasattr(result,'close'):
            result.close()

# Change this to the directory above your site code.
sys.path.append(&quot;/py&quot;)
# Change mysite to the name of your site package
os.environ['DJANGO_SETTINGS_MODULE'] = 'pytest.settings'

run_with_cgi(django.core.handlers.wsgi.WSGIHandler())
</pre>
<p>i odpalamy to by www <img src='http://onjin.net/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  na razie tyle &#8230;</p>
<p>Dokładam paczkę z plikami do testu:</p>
<ul>
<li><a href="http://onjin.net/files/py.zip">py.zip</a></li>
</ul>
<p>unzip py.zip; ftp na home.pl; open http://server.home.pl/py/dispatch.py/admin</p>
<p><a href="http://www.megiteam.pl/refk/onjin/"><br />
 <img src="http://www.megiteam.pl/site_media/banery/python/banerm1.jpg"   title="MegiTeam - mówimy Twoim językiem"  alt="MegiTeam - mówimy Twoim językiem"><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://onjin.net/blog/2009/02/26/homepl-django-pierwsza-potyczka/feed/</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>lint dla php</title>
		<link>http://onjin.net/blog/2008/09/02/lint-dla-php/</link>
		<comments>http://onjin.net/blog/2008/09/02/lint-dla-php/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 20:01:02 +0000</pubDate>
		<dc:creator>Marek</dc:creator>
				<category><![CDATA[narzędzia]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://onjin.net/index.php/2008/09/02/lint-dla-php/</guid>
		<description><![CDATA[<a href="http://onjin.net/blog/2008/09/02/lint-dla-php/" title="lint dla php"></a>Za dnia piszę najczęściej w php i zazdroszczę pythonowi pylinta. Z ciekawości zagooglałem i znalazłem rozwiązanie dla PHP sprawdzające Coding Standard: pear install PHP_CodeSniffer phpcs --standard=Zend SomeTest.class.php phpcs -i podaje dostępne standardy: PEAR MySource PHPCS Squiz Zend Mi najbardzie odpowiada &#8230;<p class="read-more"><a href="http://onjin.net/blog/2008/09/02/lint-dla-php/">Czytaj więcej &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://onjin.net/blog/2008/09/02/lint-dla-php/" title="lint dla php"></a><p>Za dnia piszę najczęściej w <a href="http://php.net">php</a> i zazdroszczę <a href="http://python.org/">pythonowi</a> <a href="http://www.logilab.org/857">pylinta</a>.<br/><br />
Z ciekawości zagooglałem i znalazłem rozwiązanie dla PHP sprawdzające Coding Standard:</p>
<pre>
pear install PHP_CodeSniffer
phpcs --standard=Zend SomeTest.class.php
</pre>
<p><em>phpcs -i</em> podaje dostępne standardy:</p>
<ul>
<li>PEAR</li>
<li>MySource</li>
<li>PHPCS</li>
<li>Squiz</li>
<li>Zend</li>
</ul>
<p>Mi najbardzie odpowiada Zend co widać po wynikach lintowania, najczęściej 0 ostrzeżeń i błędów <img src='http://onjin.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>phpcs pozwala także tworzyć swoje <a href="http://pear.php.net/manual/en/package.php.php-codesniffer.coding-standard-tutorial.php">własne standardy kodowanie</a> oraz &#8211; co bardzo mnie cieszy &#8211; podpiąć go jako <a href="http://pear.php.net/manual/en/package.php.php-codesniffer.svn-pre-commit.php">precommit hook</a> do <a href="http://subversion.tigris.org/">svn&#8217;a</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://onjin.net/blog/2008/09/02/lint-dla-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>netbeans 6.5 + php5 + symfony + xdebug</title>
		<link>http://onjin.net/blog/2008/08/24/netbeans-65-php5-symfony-xdebug/</link>
		<comments>http://onjin.net/blog/2008/08/24/netbeans-65-php5-symfony-xdebug/#comments</comments>
		<pubDate>Sun, 24 Aug 2008 13:17:12 +0000</pubDate>
		<dc:creator>Marek</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://onjin.net/index.php/2008/08/24/netbeans-65-php5-symfony-xdebug/</guid>
		<description><![CDATA[<a href="http://onjin.net/blog/2008/08/24/netbeans-65-php5-symfony-xdebug/" title="netbeans 6.5 + php5 + symfony + xdebug"></a>W Netbeans 6.5 pojawia się support dla php5. W/g informacji na stronie netbeans oznacza to: PHP Editor (Code completion, syntactic and semantic code highlighting) Support for heredoc notation and PHTML Debugging using Xdebug Generators for MySQL database code snippets Temat, &#8230;<p class="read-more"><a href="http://onjin.net/blog/2008/08/24/netbeans-65-php5-symfony-xdebug/">Czytaj więcej &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://onjin.net/blog/2008/08/24/netbeans-65-php5-symfony-xdebug/" title="netbeans 6.5 + php5 + symfony + xdebug"></a><p>W <a href="http://www.netbeans.org/community/releases/65/" title="Netbeasn 6.5 features">Netbeans 6.5</a> pojawia się support dla <a title="PHP - główna strona" href="http://www.php.net/">php5</a>. W/g informacji na stronie netbeans oznacza to:</p>
<ul>
<li>PHP Editor (Code completion, syntactic and semantic code highlighting)</li>
<li>Support for heredoc notation and PHTML</li>
<li>Debugging using Xdebug</li>
<li>Generators for MySQL database code snippets</li>
</ul>
<p>Temat, który najbardziej mnie interesował to jak zadziała debugging przy pomocy Xdebug. Postanowiłem sprawdzić to z istniejącym projektem bazującym na frameworku <a href="http://www.symfony-project.com/" title="php5 framework">Symfony</a>.</p>
<ol>
<li>Zainstalowałem netbeans pobierając odpowiednią paczkę ze strony <a title="Netbeans 6.5 beta download" href="http://download.netbeans.org/netbeans/6.5/beta/">netbeans</a>.</li>
<li>Zainstalowałem Xdebug poprzez <strong>pecl install xdebug</strong> i dodaniu do konfiguracji <em>php</em> wierszy:
<pre>
# xdebug, jako zend_extension. ścieżke zmienić należy oczywiście na odpowiednią dla Twojej instalacji
zend_extension=/usr/lib/php5/20060613+lfs/xdebug.so
xdebug.remote_enable=on
</pre>
</li>
<li>dodałem w netbeans nowy projekt php z istniejącymi źródłami (projekt już mam uruchomiony), podając podaczas konfiguracji:
<ul>
<li>ścieżkę do źródeł projektu, </li>
<li>adres url do projektu, </li>
<li>katalog zawierający dane web (dostępne poprzez podany url projektu) w tym przypadku podkatalog &#8216;web&#8217; w katalogu  projektu</li>
<li>punkt startowy czyli domyślny kontroler dla projektu, w tym przypadku &#8216;frontend.php&#8217; w podkatalogu &#8216;web&#8217;</li>
</ul>
</li>
<li>następnie wystarczyło otworzyć plik projektu (np podany wyżej kontroler) z toolbar&#8217;a wybrać &#8216;debug project&#8217; lub wciśnąć <strong>ctrl+F5</strong></li>
</ol>
<p>W tym momencie w uruchomionej przeglądarce (u mnie <a href="http://www.firefox.pl/">firefox 3.x</a> netbeans otwarł główny kontroler projektu wraz z parameterm XDEBUG_SESSION_START=netbeans-xdebug. W tym samym momencie w edytorze netbeans podświetlony został pierwszy wiersz kontrolera &#8230; i już.</p>
<p>Możemy teraz ustawiać watche, breakpointy, poruszać się step out, step in, step up wybierając opcje z menu &#8216;debug&#8217; lub używająć skrótów klawiszowych.</p>
<p>Dzięki krótkiemu testowi widać, że podstawowy debug działa i można sobie poużywać. Oczywiście jeżeli lubimy php5 i lubimy netbeans lub któreś z nich musimy używać <img src='http://onjin.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://onjin.net/blog/2008/08/24/netbeans-65-php5-symfony-xdebug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

