piątek, 10 lipca 2009

Pobieranie dowcipów z hss.pl

Kod w pythonie pobiera wszystkie dowcipy ze strony hss.pl i przekształca w postać zrozumiałą dla czytknika na platformę J2ME.

Kod programu na komórkę razem z pobranymi dowcipami

Skompilowany plik JAR

piątek, 6 marca 2009

PyCrypto - kryptografia w Pythonie

W bibliotece standartowej Python-a brak modułu służącego do szyfrowania. Pewne nadzieje może robić moduł crypto, lecz jest to moduł służący do łamamia haseł w Uniksie.

Na szczęście istnieje biblioteka PyCrypto pozwalająca na szyfrowanie zarówno z kluczem publicznym jak i symetryczne.

Szyfrowanie symetryczne

PyCrypto wspiera takie symetryczne algorytmy szyfrowania jak AES, Blowfish czy IDEA.

Używanie szyfrów symetrycznych jest dość proste. Przykładowo, aby zaszyfrować wiadomość przy użyciu AES:

>>> from Crypto.Cipher import AES
>>> mojKlucz = '1234567890ABCEFG'
>>> k = AES.new(mojKlucz) # klucz musi być ciągiem znaków i mieć długość 16, 24 lub 32 bajty.
>>> enc = k.encode('wiadomosc\0\0\0\0\0\0\0') # długość wiadomości musi być podzielna przez 16 
>>> enc
'2\xd61:<\xcaY\xe4\x9c\x8eE\xa5!?\x1e@'
>>> k.decode(enc)
'wiadomosc\0\0\0\0\0\0\0'
>>>

Szyfrowanie kluczem publicznym

PyCrypto obsługuje także wszystkie znaczące algorytmy szyfrowania kluczem publicznym np.: ElGamal, RSA, DSA. Użycie tych szyfrów jest równie proste jak w przypadku kryptografi symetrycznej.

>>> from Crypto.PublicKey import RSA 
>>> import os
>>> key = RSA.generate(2048, os.urandom) # generujemy klucz. 2048 - bity klucza, os.urandom - funkcja losowa
>>> key.decrypt(key.encrypt('tekst', None))
'tekst'
>>> key.verify('tekst', key.sign('tekst', None))
True
>>> key_as_tuple = [ getattr(key, name) for name in key.keydata ] # "wyciąganie" danych z klucza
>>> key_copy = RSA.construct(key_as_tuple) # i mamy kopię
>>> public_key = key.publickey() # klucz tylko do szyfrowania i weryfikowania
>>> 

Niestety RSA nie potrafi kodować dużych wiadomości (> 2kB) - należy wtedy uciec się do pomocy szyfrów symetrycznych:

  1. Wylosuj klucz AES.
    key = os.urandom(32)
    aes_key = AES.new(key)
    
  2. Zaszyfruj klucz AES kluczem RSA.
    cipher_key = rsa_key.encrypt(key)
    
  3. Zaszyfruj wiadomość kluczem AES.
    cipher_message = aes_key.encrypt(messsage)
    
  4. Zapisz zaszyfrowany klucz i zaszyfrowaną wiadomość.
    return cipher_key, cipher_message
    

poniedziałek, 2 marca 2009

Tworzenie własnego edytora WYSIWYG

Najważniejszym elementem tworzenia edytora WYSIWYG jest właściwość document.designMode. Powoduje ona, że dokument wyświetlany w przeglądarce można po prostu edytować.
document.designMode = 'on';
Przetestuj to

Stosowanie iframek

Zwykle edytory WYSIWYG nie otwierają się w nowym oknie, ale są już wstawione stronę. Niestety właściwość designMode moży być używana jedynie w odniesienu do całego dokumentu. W tym przypadku z pomocą przychodzą iframki z ich właściwością contentWindow. Wystarczy utworzyć taką pływającą ramkę. <iframe id="iframka" onload = "document.getElementById('iframka').contentWindow.document.designMode = 'on';" />

Formatowanie

Niestety przeglądarki nie zawierają paska narzędzi, który umożliwiałby formatowanie tekstu. Istnieje jednak metoda execCommand(operacja, false, argument) obiektu document która pozwala operować na zaznaczeniu. Pierwszy argument to nazwa komendy która ma zostać wykonana np. "bold" czy "createlink". Drugi to zawsze fałsz. Trzeci to argument to parametr taki jak adres linku czy kolor czcionki. Większość poleceń wymaga podania null. W umieszczonej tabeli znajduję się skrócony opis komend dla tej funkcji. "Pełną wersję" można znaleźć na stronie http://www.quirksmode.org/dom/execCommand.html.
Polecenie Argument Opis
bold null Pogrubia tekst
backcolor kolor Zmienie podświetlenie tekstu (w firefoxie użyj hilitecolor)
Tabelka w rozbudowie

Przykład

<a onclick="document.getElementById('iframka2').contentWindow.document.execCommand('bold', false, null);" href="javascript:void(0)">Bold</a>
<a href="javascript:void(0)" onclick="alert(document.getElementById('iframka2').contentWindow.document.body.innerHTML)">Pokaż HTML</a>
<a href="javascript:void(0)" title="Użyj do testowania komend" onclick="document.getElementById('iframka2').contentWindow.document.execCommand(prompt('Nazwa komendy'), false, prompt('Argument (lub anuluj dla null)'));">execCommand</a>
<br />
<iframe id="iframka2" onload="document.getElementById('iframka2').contentWindow.document.designMode='on'; document.getElementById('iframka2').contentWindow.document.body.innerHTML='trochę tekstu'"></iframe>

sobota, 28 lutego 2009

Pobieranie filmów/muzyki z youtube.com

Na początek instalujemy odpowiednie programy:
  • youtube-dl (napisany w Pythonie)
  • ffmpeg
W Ubuntu można zrobić to tak: sudo apt-get install ffmpeg youtube-dl Należy pamiętać, aby dodać repozytorium medibuntu, ponieważ domyślne pakiety nie zawierają kodeków non-free. Następnie pobieramy film: youtube-dl http://youtube.com/watch?v=id -o /tmp/plik.flv Jeżeli chcemy wyciągnąć muzykę np. z teledysku wpisujemy: ffmpeg -i /tmp/plik.flv moja-muzyka.mp3 Aby stworzyć film w formacie czytanym przez większość odtwarzaczy konwertujemy go do AVI: ffmpeg -i /tmp/plik.flv mój-film.avi W podobny sposób możemy konwertować filmy do wielu formatów poprzez dodanie odpowiedniego rozszerzenia (np. film na komórkę to .3gp)

poniedziałek, 19 stycznia 2009

Automatyczne pobieranie plików z wrzucaj.com

Kod w Pythonie do automatyzacji wrzucaj.com.
import urllib

def getDownloadURL(id):
 "zwraca jednorazowe URL do pobrania pliku"
 url='http://www.wrzucaj.com/'+id
 out=urllib.urlopen(url).read()
 index=out.find('innerHTML = \'<a href="')
 if index==-1:
  raise Exception("URL not found")
 index+=len('innerHTML = \'<a href="')
 data=out[index:]
 index=data.find('">')
 if index==-1:
  raise Exception("Cannot found end of url")
 return data[:index]

def downloadFile(id):
 "Zwraca zawartość pliku"
 return urllib.urlopen(getDownloadURL(id)).read()

Aby pobrać adres pliku o id id: getDownloadURL(id)
Aby pobrać ten plik: downloadFile(id)
Pobierz kod

sobota, 17 stycznia 2009

Przyśpieszacz wrzucaj.com (UserJS)

Ten UserScript powoduje, że nie trzeba czekać na ściągnięcie pliku z wrzucaj.com. Na firefoxie wymaga GreaseMonkey
Pobierz skrypt
// ==UserScript==
// @name           wrzucaj.pl accelestator
// @namespace      http://zielmicha.blogspot.com
// @description    Nie trzeba czekać na ściągnięcie pliku z wrzucaj.com.
// @include        http://*wrzucaj.com/*
// @exclude        http://*wrzucaj.com
// @exclude        http://*wrzucaj.com/
// @exclude        http://*wrzucaj.com/upload.php
// @exclude        http://*wrzucaj.com/*del*
// ==/UserScript==

code="for(var i=0;i<40;i++)countdown();";
setTimeout(0, code);