<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>http://blog.gruszka.info/</title><subtitle>Wpisy z dziennika internetowego Jogger, wspomaganego przez Jabbera</subtitle><id>http://blog.gruszka.info/atom/content/html/miniblog/10/</id><link rel="self" type="application/atom+xml" href="http://blog.gruszka.info/atom/content/html/miniblog/10/"/><link href="http://blog.gruszka.info/"/><updated>2016-05-19T02:12:37Z</updated><author><name>snipe</name></author><generator uri="http://jogger.pl/" version="1.0">JoggerPL</generator><entry><title>MASP - zwalczamy SPAM skutecznie</title><link href="http://blog.gruszka.info/2012/08/10/masp-zwalczamy-spam-skutecznie/"/><id>http://blog.gruszka.info/2012/08/10/masp-zwalczamy-spam-skutecznie/</id><updated>2012-08-10T11:20:41Z</updated><content type="html">&lt;p&gt;Ten wpis jest prawdziwym wpisem po latach ;)&lt;/p&gt;
&lt;p&gt;Jakieś pół roku temu trochę dla funu, trochę z pobudek zrobienia czegoś fajnego zacząłem robić całkiem ciekawy projekt ;) Projekt ten dotyczył tak naprawdę rzeczy z którą spotykam się na co dzień i tak naprawdę, której nie chciałbym znać - SPAM.&lt;/p&gt;
&lt;p&gt;Realizacja projektu w zamierzeniu miała pomóc w walce z niechcianymi treściami pod różną postacią - komentarzami na blogach i na fanpagach, postami i odpowiedziami na forach, czy wiadomościami mailowymi.&lt;/p&gt;
&lt;p&gt;Po pół roku udało się stworzyć coś dzięki czemu można rozpocząć walkę z wrogiem :D Tak powstał MASP. Jest akronimem od słów &quot;Message Auto Solid Protection&quot; oraz swego rodzaju zabawą z przestawieniem liter SPAM -&amp;gt; MASP.&lt;/p&gt;
&lt;p&gt;Po rejestracji w serwisie dodaje się aplikacje w ramach których będzie działał mechanizm. Każda aplikacja jest niezależnym bytem w ramach którego odbywa się klasyfikacja. W chwili obecnej korzystać z mechanizmu można na 3 sposoby:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;dostęp przez API - dzięki temu można klasyfikować dowolną treść&lt;/li&gt;
&lt;li&gt;wtyczka do komentarzy - dzięki której można w łatwy i szybki sposób wstawić system komentarzy na blogu / dowolnej stronie&lt;/li&gt;
&lt;li&gt;Facebook - poprzez połączenie konta z Facebookiem otrzymujesz możliwość sprawdzania pojawiających się na twoich stronach komentarzy w celu wychwycenia tych niewłaściwych, spamowych czy wulgarnych&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;p&gt;W całym mechanizmie istotne jest to, aby pamiętać o nauczaniu mechanizmu, tzn. na samym początku trzeba poświęcić czas i odpowiednio oznaczać treści jako spamowe / niespamowe aby mechanizm po pewnym czasie na podstawie analizy statystycznej sam reagował na występujące zagrożenia.&lt;/p&gt;
&lt;p&gt;Zachęcam do rejestracji i korzystania: &lt;a href=&quot;http://masp.in&quot;&gt;MASP.in&lt;/a&gt;. Mile widziane uwagi ;)&lt;/p&gt;
&lt;p&gt;PS. Zapomniałem wspomnieć, że chwili obecnej cały mechanizm jest za FREE :)&lt;/p&gt;
</content><category term="komputery-internet" label="Komputery/Internet"/><category term="praca" label="Praca"/><category term="techblog" label="Techblog"/><category term="spam" label="spam"/><category term="php" label="php"/></entry><entry><title>Help: Django potwierdzenie maila w formularzach</title><link href="http://blog.gruszka.info/2011/05/31/help-django-potwierdzenie-maila-w-formularzach/"/><id>http://blog.gruszka.info/2011/05/31/help-django-potwierdzenie-maila-w-formularzach/</id><updated>2011-05-31T21:31:11Z</updated><content type="html">&lt;p&gt;Borykam się z pewnym problemem i nie wiem jak go rozwiązać :-/ Mam model i formularz w Django:&lt;/p&gt;
&lt;pre&gt;
from django import forms
from django.forms import ModelForm
from django.db import models

class Appointment(models.Model):
    first_name = models.CharField(max_length = 30, verbose_name = u'Imię')
    last_name = models.CharField(max_length = 60, verbose_name = u'Nazwisko')
    phone = models.CharField(max_length = 11, verbose_name = u'Telefon', blank = True)
    email = models.EmailField(verbose_name = u'E-mail', blank = True)

    class Meta:
        verbose_name

class AppointmentForm(forms.ModelForm):
    agree_personal_data = forms.BooleanField(required=True)         

    class Meta:
        model = Appointment = u'Wizyta'
        verbose_name_plural = u'Wizyty'
&lt;/pre&gt;
&lt;p&gt;I pytanie jak mogę dodać żeby było poprawne wpisanie tylko jednego z rodzajów (telefon lub email) i żeby jeśli ktoś zdecyduje się na wpisanie maila wymagane było jego potwierdzenie (czyli drugi email wpisany w innym polu i porównana zawartość obu pól) ? Może szanowna brać Joggerowa mi pomoże? :)&lt;/p&gt;
</content><category term="python" label="Python"/><category term="techblog" label="Techblog"/><category term="django" label="django"/></entry><entry><title>Help: Probem z modelem w Django (powiązane artykuły)</title><link href="http://blog.gruszka.info/2010/10/24/help-probem-z-modelem-w-django-powiazane-artykuly/"/><id>http://blog.gruszka.info/2010/10/24/help-probem-z-modelem-w-django-powiazane-artykuly/</id><updated>2010-10-24T11:30:24Z</updated><content type="html">&lt;p&gt;Męczę się już trochę z tym problemem, a być może ktoś będzie znał rozwiązanie.&lt;/p&gt;
&lt;p&gt;Mam model:&lt;/p&gt;
&lt;pre class=&quot;brush: python;&quot;&gt;
class Article(models.Model):
    title = models.CharField(max_length = 120, verbose_name = u'Tytuł')
    long_content = models.TextField(verbose_name = u'Treść')
    short_content = models.TextField(verbose_name = u'Krótka treść')
    category = models.ForeignKey(ArticleCategory, verbose_name = u'Kategoria')
    slug = models.SlugField(max_length = 120, unique=True, verbose_name = u'Odnośnik')
    related_articles = models.ManyToManyField(&quot;Article&quot;, verbose_name = u'Powiązane artykuły', blank = True)
&lt;/pre&gt;
&lt;p&gt;Pytanie brzmi:&lt;/p&gt;
&lt;p&gt;Jak zrobić aby artykuły były powiązane dwustronnie? To znaczy jeśli, dodam w panelu administracyjnym, że &quot;Artykuł nr 1&quot; jest powiązany z &quot;Artykuł nr 2&quot;, to jeśli wejdę na stronę edycji &quot;Artykuł nr 2&quot; to będę widział odpowiednie powiązanie z &quot;Artykuł nr 1&quot; ?&lt;/p&gt;
</content><category term="ogolne" label="Ogólne"/><category term="techblog" label="Techblog"/><category term="django" label="django"/><category term="python" label="python"/></entry><entry><title>Server-status w Apache</title><link href="http://blog.gruszka.info/2010/06/14/server-status-w-apache/"/><id>http://blog.gruszka.info/2010/06/14/server-status-w-apache/</id><updated>2010-06-14T18:16:47Z</updated><content type="html">&lt;p&gt;Dziś zauważyłem, jak dodać statystyki serwera dla Apache. Jest to całkiem proste. Wystarczy tylko dodać do configu:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;Location &quot;/server-status&quot;&amp;gt;
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
&amp;lt;/Location&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Po otwarciu strony (np. http://localhost/server-status) otrzymujemy informacje dot. uptime'u serwera, ostatniego restartu, całkowietego transferu, loadu oraz aktualnych requestów.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://snipeworld.com/files/blog/images/server-status-w-apache/1.png&quot;&gt;&lt;/p&gt;
</content><category term="komputery-internet" label="Komputery/Internet"/><category term="techblog" label="Techblog"/><category term="apache" label="apache"/></entry><entry><title>Konfiguracja OpenVPN na routerze z DD-WRT</title><link href="http://blog.gruszka.info/2010/05/31/konfiguracja-openvpn-na-routerze-z-dd-wrt/"/><id>http://blog.gruszka.info/2010/05/31/konfiguracja-openvpn-na-routerze-z-dd-wrt/</id><updated>2010-05-31T21:56:40Z</updated><content type="html">&lt;p&gt;Jeśli posiadacie router z zainstalowanym &lt;a href=&quot;http://www.dd-wrt.com&quot;&gt;DD-WRT&lt;/a&gt; to po pewnym czasie zaczniecie się zastanawiać jak wykorzystać jego możliwości. Jedną z nich jest &lt;a href=&quot;http://pl.wikipedia.org/wiki/VPN&quot;&gt;VPN&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;W poniższej instrukcji zamierzam przedstawić proces konfiguracji VPN na routerze z zainstalowanym DD-WRT&lt;/p&gt;
&lt;p&gt;Instrukcja zakłada, że &lt;a href=&quot;http://www.openssl.org/&quot;&gt;OpenSSL&lt;/a&gt; jest zainstalowany i nie tłumaczy procesu jego instalacji.&lt;/p&gt;
&lt;p&gt;Odszukujemy plik &lt;strong&gt;openssl.cnf&lt;/strong&gt; i dokonujemy w nim następujących zmian:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
[ CA_default ]
dir = /etc/ssl
certs = /etc/ssl/certs
crl_dir = $dir/crl
private_key = $dir/private/cakey.pem
database = $dir/index.txt
certificate = $dir/cacert.pem
serial = $dir/serial
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;Katalog &lt;strong&gt;/etc/ssl&lt;/strong&gt; powinien mieć następującą strukturę:&lt;br&gt;
&lt;br&gt;
&lt;img style=&quot;vertical-align: top&quot; src=&quot;http://snipeworld.com/files/blog/images/konfiguracja-openvpn-na-ddwrt/folder.jpg&quot; alt=&quot;folder&quot;&gt; certs&lt;br&gt;
&lt;img style=&quot;vertical-align: top&quot; src=&quot;http://snipeworld.com/files/blog/images/konfiguracja-openvpn-na-ddwrt/folder.jpg&quot; alt=&quot;folder&quot;&gt; crl&lt;br&gt;
&lt;img style=&quot;vertical-align: top&quot; src=&quot;http://snipeworld.com/files/blog/images/konfiguracja-openvpn-na-ddwrt/file.gif&quot; alt=&quot;folder&quot;&gt; index.txt&lt;br&gt;
&lt;img style=&quot;vertical-align: top&quot; src=&quot;http://snipeworld.com/files/blog/images/konfiguracja-openvpn-na-ddwrt/folder.jpg&quot; alt=&quot;folder&quot;&gt; newcerts&lt;br&gt;
&lt;img style=&quot;vertical-align: top&quot; src=&quot;http://snipeworld.com/files/blog/images/konfiguracja-openvpn-na-ddwrt/folder.jpg&quot; alt=&quot;folder&quot;&gt; private&lt;br&gt;
&lt;img style=&quot;vertical-align: top&quot; src=&quot;http://snipeworld.com/files/blog/images/konfiguracja-openvpn-na-ddwrt/file.gif&quot; alt=&quot;folder&quot;&gt; serial&lt;/p&gt;
&lt;p&gt;W katalogu &lt;strong&gt;/etc/ssl&lt;/strong&gt; uruchamiamy polecenie:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;echo 00 &amp;gt; /etc/ssl/serial&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Musimy wygenerować klucz prywatny centrum certyfikacji CA. Zostanie on wykorzystany do utworzenia odpowiadającego mu certyfikatu a następnie do podpisywania innych certyfikatów.&lt;/p&gt;
&lt;p&gt;Wydajemy polecenie:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;openssl genrsa -des3 -out private/cakey.pem 1024&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Zostaniemy zapytani o hasło do klucza prywatnego CA i zapamiętujemy je (przyda się później).&lt;/p&gt;
&lt;p&gt;Klucz zostanie zapisany w &lt;strong&gt;private/cakey.pem&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Teraz wygenerujmy certyfikat CA:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;openssl req -new -x509 -days 365 -key private/cakey.pem -out cacert.pem&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Musimy wypełnić kilka pól:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
Country Name (2 letter code) [AU]:PL
State or Province Name (full name) [Some-State]:Mazowieckie
Locality Name (eg, city) []:Warszawa
Organization Name: (eg, company) [Internet Widgits Pty Ltd]:Moja Firma
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []: ca.twojadomena.pl
Email Address []:
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;Zostaniemy poproszeni o wpisanie hasła z utworzonego wcześniej klucza prywatnego CA. Certyfikat zostanie zapisany w pliku &lt;strong&gt;cacert.pem&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;W tym kroku utworzymy klucz prywatny serwera.&lt;/p&gt;
&lt;p&gt;Wpisujemy polecenie:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;openssl genrsa -des3 -out private/serverkey.pem 1024&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Musimy podać hasło klucza prywatnego serwera i zapamiętujemy je. Utworzony plik znajdzie się w &lt;strong&gt;private/serverkey.pem&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Wygenerujmy teraz wniosek o wystawienie certyfikatu:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;openssl req -new -key private/serverkey.pem -out serverreq.pem&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Wypełniamy kilka pól podobnie jak podczas generowania certyfikatu CA i podajemy hasło do klucza prywatnego serwera. Wniosek zostanie zapisany w pliku &lt;strong&gt;serverreq.pem&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Musimy wystawić certyfikat dla serwera:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;openssl ca -notext -in serverreq.pem -out servercert.pem&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Zostaniemy zapytani o hasło do klucza prywatnego CA. Następnie potwierdzamy operacje wpisując &quot;y&quot;.&lt;/p&gt;
&lt;p&gt;Ściągnijmy jeszcze hasło z klucza prywatnego serwera:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;openssl rsa -in private/serverkey.pem -out private/serverkey.pem_wp&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Wygenerujmy plik pomocniczy z parametrami algorytmu kryptograficznego Diffiego-Hellmana. Potrzebne jest to do uzgodnienia stronom wspólnego klucza do szyfrowania symetrycznego.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;openssl dhparam -out dh1024.pem 1024&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Otrzymujemy plik &lt;strong&gt;dh1024.pem&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;W polu &lt;strong&gt;Public Server Cert&lt;/strong&gt; wklejamy zawartość pliku &lt;strong&gt;cacert.pem&lt;/strong&gt; razem z nagłówkiem i stopką&lt;/p&gt;
&lt;p&gt;W polu &lt;strong&gt;Public Client Cert&lt;/strong&gt; wklejamy zawartość pliku &lt;strong&gt;servercert.pem&lt;/strong&gt; razem z nagłówkiem i stopką&lt;/p&gt;
&lt;p&gt;W polu &lt;strong&gt;Private Client Key&lt;/strong&gt; wklejamy zawartość pliku &lt;strong&gt;serverkey.pem&lt;/strong&gt; razem z nagłówkiem i stopką&lt;/p&gt;
&lt;p&gt;W polu &lt;strong&gt;DH PEM&lt;/strong&gt; wklejamy zawartość pliku &lt;strong&gt;dh1024.pem&lt;/strong&gt; razem z nagłówkiem i stopką&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://snipeworld.com/files/blog/images/konfiguracja-openvpn-na-ddwrt/1.png&quot; alt=&quot;Public Server Cert&quot;&gt; &lt;img src=&quot;http://snipeworld.com/files/blog/images/konfiguracja-openvpn-na-ddwrt/2.png&quot; alt=&quot;Konfiguracja&quot;&gt;&lt;/p&gt;
&lt;p&gt;W polu &lt;strong&gt;OpenVPN Config&lt;/strong&gt; wpisujemy:&lt;/p&gt;
&lt;pre&gt;
mode server
server 10.8.0.0 255.255.255.0
local adres_ip_serwera_vpn
dev tun0
proto tcp
port 17003
keepalive 10 120
management localhost 5001
duplicate-cn
tls-server
ca /tmp/openvpn/ca.crt
cert /tmp/openvpn/cert.pem
key /tmp/openvpn/key.pem
dh /tmp/openvpn/dh.pem
comp-lzo
verb 3
push &quot;route 192.168.1.0 255.255.255.0&quot;
push &quot;dhcp-option DNS 8.8.8.8&quot;
client-to-client
daemon
&lt;/pre&gt;
&lt;p&gt;Resztę pól zostawiamy pustą. Teraz przejdźmy do strony Administracja -&amp;gt; Polecenia&lt;/p&gt;
&lt;p&gt;W Startup dodajemy i zapisujemy:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
openvpn --mktun --dev tap0
brctl addif br0 tap0
ifconfig tap0 0.0.0.0 promisc up
sleep 3
openvpn --config tmp/openvpn/openvpn.conf --daemon
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;W Firewall dodajemy i zapisujemy:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
/usr/sbin/iptables -I INPUT 1 -p udp --dport 17003 -j ACCEPT
/usr/sbin/iptables -I FORWARD 1 --source 10.8.0.0/24 -j ACCEPT
/usr/sbin/iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
/usr/sbin/iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;Pozostała już tylko konfiguracja klienta:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
client
dev tun
proto tcp
remote adres_ip_servera_lub_host 17003
resolv-retry infinite
nobind
persist-key
persist-tun
ca cacert.pem
cert user.crt
key user.key
comp-lzo
verb 3
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;Wystarczy teraz tylko zrestartować router i sprawdzić, czy wszystko działa :)&lt;/p&gt;
</content><category term="komputery-internet" label="Komputery/Internet"/><category term="linux" label="Linux"/><category term="techblog" label="Techblog"/><category term="dd-wrt" label="dd-wrt"/><category term="openvpn" label="openvpn"/><category term="openssl" label="openssl"/></entry><entry><title>Dynamiczne parametry w Ajax.Autocompleter</title><link href="http://blog.gruszka.info/2010/01/03/dynamiczne-parametry-w-ajax-autocompleter/"/><id>http://blog.gruszka.info/2010/01/03/dynamiczne-parametry-w-ajax-autocompleter/</id><updated>2010-01-03T12:08:49Z</updated><content type="html">&lt;p&gt;Post ten rozpoczyna cykl krótkich notatek, jakie zapisywałem sobie na moim drugim &lt;a href=&quot;http://snipeworld.com&quot;&gt;blogu po angielsku&lt;/a&gt; a postanowiłem je dodać również tutaj.&lt;/p&gt;
&lt;p&gt;Dwa dni temu miałem problem z Ajax.Autocompleter (z biblioteki script.aculo.us). Potrzebowałem użyć dynamicznych parametrów wysyłanych w żądaniu do serwera. Normalnie są one tworzone statycznie w czasie kiedy tworzona jest instancja klasy. Oczywiście można zmienić to zachowanie, np.:&lt;/p&gt;
&lt;pre class=&quot;brush: javascript;&quot;&gt;
new Ajax.Autocompleter(
    'search',
    'autocomplete_choices',
    'index.php?controller=search&amp;amp;action=autocomplete', {
        paramName: 'name',
        callback: function(element, entry) {
            return entry+&quot;&amp;amp;&quot;+Form.Element.serialize('type');
        }
    }
);
&lt;/pre&gt;
&lt;p&gt;Wykorzystując callback możemy dodać dynamiczne parametry do naszych zapytań.&lt;/p&gt;
&lt;p&gt;Może znacie jakiś lepszy/inny sposób?&lt;/p&gt;
</content><category term="komputery-internet/js-dom" label="JS/DOM"/><category term="komputery-internet" label="Komputery/Internet"/><category term="techblog" label="Techblog"/><category term="javascript" label="javascript"/><category term="prototype" label="prototype"/><category term="scriptaculous" label="scriptaculous"/><category term="js" label="js"/></entry><entry><title>Grupa o2 uruchamia swoje &quot;apps&quot;</title><link href="http://blog.gruszka.info/2009/12/06/grupa-o2-uruchamia-swoje-apps/"/><id>http://blog.gruszka.info/2009/12/06/grupa-o2-uruchamia-swoje-apps/</id><updated>2009-12-06T21:29:12Z</updated><content type="html">&lt;p&gt;&lt;img src=&quot;http://snipeworld.com/files/blog/images/grupa-o2-uruchamia-swoje-apps/prokontopl.png&quot;&gt;&lt;/p&gt;
&lt;p&gt;Prawdopodobnie niewielu z was wie, ale jakiś czas temu &lt;a href=&quot;http://grupao2.pinger.pl&quot;&gt;Grupa o2&lt;/a&gt; uruchomiła &lt;a href=&quot;&quot;&gt;darmowe konta pocztowe we własnej domenie&lt;/a&gt; (podobnie jak &lt;a href=&quot;http://www.google.com/apps/intl/pl/business/index.html&quot;&gt;Google Apps&lt;/a&gt;). Jest to pierwsza tego typu usługa w Polsce (mowa o portalach i większych graczach na rynku; nie licząc Google) i prawdopodobnie może zmienić układ sił jeśli chodzi o usługi kont pocztowych e-mail.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Co dostajemy po zarejestrowaniu się?&lt;/strong&gt;&lt;br&gt;
- dostęp do panelu zarządzania domeną&lt;br&gt;
- 1000 kont e-mail w swoich domenach&lt;br&gt;
- możliwość dodania 10 domen&lt;br&gt;
- aliasy pocztowe&lt;br&gt;
- grupy&lt;/p&gt;
&lt;p&gt;Jak na Polskie warunki myślę, że przeciętnym użytkownikom powinno to w spokoju wystarczyć :)&lt;/p&gt;
&lt;p&gt;Samo używanie i korzystanie z narzędzia jest intuicyjne i proste. Jeśli kupiliście domenę i chcecie skorzystać z darmowego i sprawdzonego rozwiązania, być może jest to okazja, aby się nad tym zastanowić i zainteresować.&lt;/p&gt;
&lt;p&gt;Szczegółowe informacje znaleźć można na stronie &lt;a href=&quot;http://prokonto.pl&quot;&gt;prokonto.pl&lt;/a&gt;&lt;/p&gt;
</content><category term="it" label="IT"/><category term="techblog" label="Techblog"/><category term="o2" label="o2"/><category term="poczta" label="poczta"/><category term="email" label="email"/></entry><entry><title>Ubuntu i instalowanie programów napisanych w Javie</title><link href="http://blog.gruszka.info/2009/04/23/ubuntu-i-instalowanie-programow-napisanych-w-javie/"/><id>http://blog.gruszka.info/2009/04/23/ubuntu-i-instalowanie-programow-napisanych-w-javie/</id><updated>2009-04-23T11:21:52Z</updated><content type="html">&lt;p&gt;Na przyszłość:&lt;/p&gt;
&lt;p&gt;Jeśli w Ubuntu wyskoczy podczas instalacji jakiegoś programu javowego taki oto komunikat:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;
No Java virtual machine could be found from your PATH environment variable
&lt;/pre&gt;
&lt;p&gt;Wystarczy tylko wykonać polecenie:&lt;/p&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;
sudo update-java-alternatives -s java-6-sun
&lt;/pre&gt;
&lt;p&gt;</content><category term="komputery-internet" label="Komputery/Internet"/><category term="java" label="java"/><category term="ubuntu" label="ubuntu"/></entry><entry><title>Usuwanie zduplikowanych danych z MySQL lub PostgreSQL</title><link href="http://blog.gruszka.info/2009/03/26/usuwanie-zduplikowanych-danych-z-mysql-lub-postgresql/"/><id>http://blog.gruszka.info/2009/03/26/usuwanie-zduplikowanych-danych-z-mysql-lub-postgresql/</id><updated>2009-03-26T12:16:43Z</updated><content type="html">&lt;p&gt;Jeśli zdarzyło Ci się napisać skrypt wrzucający dane do bazy ale przeoczyłeś pewien drobny szczegół i zauważasz po jakimś czasie, że dane się duplikują, to na &lt;a href=&quot;http://blog.adiasz.pl/2008/05/08/jak-usunac-zduplikowane-rekody-w-tabeli-bazy-danych/&quot;&gt;blog.adiasz.pl&lt;/a&gt; znajdziesz rozwiązanie problemu usuwania zduplikowanych danych z bazy MySQL lub PosgreSQL.&lt;/p&gt;
</content><category term="komputery-internet" label="Komputery/Internet"/><category term="sql" label="sql"/><category term="mysql" label="mysql"/><category term="postgresql" label="postgresql"/><category term="db" label="db"/><category term="databases" label="databases"/></entry><entry><title>Kocham kodowanie ...</title><link href="http://blog.gruszka.info/2009/03/25/kocham-kodowanie/"/><id>http://blog.gruszka.info/2009/03/25/kocham-kodowanie/</id><updated>2009-03-25T14:10:23Z</updated><content type="html">&lt;p&gt;Na przyszłość:&lt;/p&gt;
&lt;p&gt;Usunięcie parametru &lt;strong&gt;?charset=utf8&lt;/strong&gt; z sqlalchemy.url może czasami oszczędzić mnóstwo roboty.&lt;/p&gt;
&lt;p&gt;Także jeśli wyświetlają Ci się krzaczki przy pobieraniu danych z bazy spróbuj tego rozwiązania :P&lt;/p&gt;
</content><category term="komputery-internet" label="Komputery/Internet"/><category term="python" label="Python"/><category term="sqlalchemy" label="sqlalchemy"/><category term="pylons" label="pylons"/></entry></feed>