Dodałem dzisiaj do skryptu TFDProunciation progressbar. Czasami strasznie mi muli net i fajnie mniej więcej wiedzieć kiedy skrypt skończy się wykonywać.
Święty Python
5/17/2013
bpython i dzielenie się kodem
Przy codziennej pracy z pythonem moimi ulubionymi konsolami są bpython (szybkość) i IPython (kombajn). Dzisiaj będzie krótko na temat jednej z funkcji jaką oferuje bpython, a chodzi tutaj o wrzucenie kodu z konsoli do internetu ;)
I to tyle jeśli chodzi o wrzucanie na bpaste.
Nazwa do_gist_json to oczywiście nazwa skryptu, który będzie miał się wykonać po wciśnięciu F8 (domyślnie jest to pastebinit, dlatego też leci na bpaste). Czas na napisanie skryptu. Zaraz! Jak pisać?! Spokojnie, poniżej zamieszczam kod; musisz tylko podmienić dane user i pass na swoje jeśli chcesz, aby kod wrzucał się na twoje konto. Jeśli nie chcesz, możesz usunąć argument auth:
EDIT:
Skrypt korzysta z biblioteki requests, więc musisz ją mieć u siebie (sudo pip install requests).
bpaste
Aby wysłać kod z konsoli bpython wystarczy wcisnąć F8 i potwierdzić to klawiszem y. Domyślnie kod jest wysyłany na bpaste i z poziomu konsoli wygląda to mniej więcej tak:![]() |
| http://bpaste.net/show/cVuvrhTrBZB8ZSM9DVxP/ |
gist
Ale co jeśli, chcę szybko umieścić kod na gist? Oczywiście da się, lecz trzeba poczynić kilka kroków. Pierwsze co musisz zrobić to stworzyć plik konfiguracyjny dla bpythona w którym zamieścisz informację, jakiego skryptu ma używać do wypychania kodu. Jeśli nie masz pliku ~/.config/bpython/config to go stwórz i dodaj w sekcji general linijkę: pastebin_helper = do_gist_json. Przykładowo u mnie wygląda to tak:Nazwa do_gist_json to oczywiście nazwa skryptu, który będzie miał się wykonać po wciśnięciu F8 (domyślnie jest to pastebinit, dlatego też leci na bpaste). Czas na napisanie skryptu. Zaraz! Jak pisać?! Spokojnie, poniżej zamieszczam kod; musisz tylko podmienić dane user i pass na swoje jeśli chcesz, aby kod wrzucał się na twoje konto. Jeśli nie chcesz, możesz usunąć argument auth:
#!/usr/bin/env python
import sys
import json
import requests
def do_gist_json(s):
gist_url = 'https://api.github.com/gists'
data = {'description': "Gist from BPython",
'public': True,
'files': {
'sample.py': {'content': None}
}}
data['files']['sample.py']['content'] = s
res = requests.post(gist_url,
data=json.dumps(data),
auth=("user", "pass"))
return res.json()["html_url"]
if __name__ == "__main__":
s = sys.stdin.read()
print do_gist_json(s)
Domyślnie wysyłany kod jest publiczny, jeśli tego nie chcesz to już pewnie zauważyłeś, którą linijkę musisz zmienić :). Plik do pobrania jest tutaj. Ściągnij/skopiuj gdzieś na dysk i nazwij go tak jak podałeś w pliku ~/.config/bpython/config. Następnie musisz nadać skryptowi prawa do wykonywania, czyli wpisujesz w konsoli:chmod +x do_gist_jsoni kopiujesz do /usr/bin/
sudo cp do_gist_json /usr/bin/I już, teraz po odpaleniu bpythona i wciśnięciu klawisza F8 program będzie wiedział, że kod ma wysłać na gist, a nie na bpaste.
![]() |
| https://gist.github.com/tomislater/5595417 |
Skrypt korzysta z biblioteki requests, więc musisz ją mieć u siebie (sudo pip install requests).
4/28/2013
i3 i nowe aliasy
Jakiś czas temu jeden z moich znajomych zaproponował mi wypróbowanie xmonad do pracy. Pobawiłem się nim jakieś półtora dnia i nie przypadł mi bardzo mocno do gustu. Może inaczej, był fajny, ale myślałem, że będzie lepszy ;) (chociaż, na początku byłem pod wielkim wrażeniem). Postanowiłem więc poszukać alternatywy dla xmonad i znalazłem i3. Spędziłem trochę czasu na konfiguracji środowiska i jestem z niego bardzo zadowolony. Postanowiłem póki co wykorzystywać go do codziennej pracy, jak nie będzie mnie zbytnio irytował to zacznę go używać w pracy.
Przy okazji uaktualniania repo dotfiles, dodałem trzy nowe aliasy. Zamieszczam je poniżej:
Bezpieczny rm:
Największy plik/katalog w danym katalogu
Aktualna pogoda dla miasta Szczecin (ICM)
Przy okazji uaktualniania repo dotfiles, dodałem trzy nowe aliasy. Zamieszczam je poniżej:
Bezpieczny rm:
alias rm='rm -I'
Największy plik/katalog w danym katalogu
alias ds='du -ks *|sort -n'
Aktualna pogoda dla miasta Szczecin (ICM)
alias szczecin='display "http://www.meteo.pl/um/metco/mgram_pict.php?ntype=0u&row=370&col=142&lang=pl"'
4/21/2013
Python test framework - splinter
Trafiłem dzisiaj na framework splinter, który służy do testowania webowych aplikacji. Po przeczytaniu dokumentacji i przejrzeniu krótkiego tutoriala postanowiłem sprawdzić czy może mi się przydać. Framework poznałem u siebie lokalnie, wykonując testy na jednej z moich appek do testów, ale tutaj przedstawię to na istniejącej witrynie w sieci. Na początek garść informacji.
Poniżej znajduje się lista, które przetestuję na stronie sonyvegas:
Teraz sprawdzę czy user na pewno nie ma dostępu do kalendarza:
Ostatnim testem będzie próba zalogowania się na nieistniejące konto:
Użyłem tutaj bardzo prostych przykładów, lecz nie powinieneś mieć problemów z używaniem splintera. Framework ma naprawdę dobrą dokumentację, naprawdę mi się spodobał.
Zapomniałbym! Na koniec oczywiście zamknij przeglądarkę ;)
Możliwości
- wykonywanie skryptów javascript
- bardzo proste api
- multi webdrivers (chrome, firefox, phantomjs, zopetestbrowser, remote)
- wsparcie dla xpath i css
- działające iframe i alerty
- działający ajax oraz asynchroniczny javascript
Instalacja
pip install splinterPo jakże trudnej instalacji możesz wziąć się za testowanie web aplikacji.
Poniżej znajduje się lista, które przetestuję na stronie sonyvegas:
- skorzystanie z wyszukiwarki
- próba skorzystania z kalendarza
- próba zalogowania na nieistniejące konto
from splinter import Browser
browser = Browser('firefox')
Następnie należy podać adres pod jaki zamierzasz się udać. Jak wyżej zaznaczyłem zacznę od testowania wyszukiwarki:
browser.visit('http://sonyvegas.info/search.php')
input = browser.find_by_xpath(
'//td[@class="trow1"]/table/tbody/tr/td/input[@class="textbox"]')
input.first.fill("rendering")
button = browser.find_by_name("submit")
button.first.click()
assert browser.is_text_present("Wyniki") is True
assert len(browser.find_by_xpath('//a[@class=" subject_old"]')) == 20
Co wykonał ten test? Wszedł pod wskazany adres. Wyszukał inputa (za pomocą xpath) w którego wprowadził wyrażenie "rendering", następnie odszukał przycisk służący do zaakceptowania szukania i kliknął go. Po tej akcji sprawdził czy na stronie znalazł się tekst "Wyniki" oraz czy na stronie jest 20 linków z wynikami.Teraz sprawdzę czy user na pewno nie ma dostępu do kalendarza:
browser.visit("http://sonyvegas.info/calendar.php")
assert browser.is_text_present(
u"Kalendarz został wyłączony przez administratora.")
Jak widać test jest bardzo prosty. Udaje się pod wskazany internetowy adres :) i sprawdza czy wyświetla nam się odpowiedni komunikat na stronie.Ostatnim testem będzie próba zalogowania się na nieistniejące konto:
browser.visit("http://sonyvegas.info/member.php?action=login")
browser.fill("username", "testuser")
browser.fill("password", "userpassword")
browser.check("remember")
browser.find_by_name("submit").first.click()
assert browser.is_text_present(
u"Wprowadzono nieprawidłowy login i/lub hasło.")
Jak widzisz tutaj też nie ma zbyt dużo filozofii. Udajesz się pod adres logowania, wprowadzasz username, password oraz zaznaczasz, że chcesz być zapamiętanym i klikasz w submit, tyle. Następnie sprawdzasz, czy user się nie zalogował.Użyłem tutaj bardzo prostych przykładów, lecz nie powinieneś mieć problemów z używaniem splintera. Framework ma naprawdę dobrą dokumentację, naprawdę mi się spodobał.
Zapomniałbym! Na koniec oczywiście zamknij przeglądarkę ;)
browser.quit()
4/14/2013
Nowa wersja TFDPronunciation
Dodałem małą poprawkę do repo TFDPronunciation. Informacje o tym czy plik został znaleziony czy też nie są wyświetlane w kolorze. Dzięki temu szybciej wiesz co się stało. Poniżej przykładowy screen:
P.S. Kilka dni temu powróciłem do Sublime Text po zmianie komputera na lepszy i muszę powiedzieć, że jest całkiem spoko, tylko nie mogę poprawnie skonfigurować SublimeCodeIntel. Linux x64, Ubuntu 12.04. Jak ktoś by rozwiązał ten problem to niech da mi znać :) Dokładnie chodzi o to, że po pewnym czasie pracy (mniej niż minuta?) plugin zaczyna zżerać 100% procka....
P.S. Kilka dni temu powróciłem do Sublime Text po zmianie komputera na lepszy i muszę powiedzieć, że jest całkiem spoko, tylko nie mogę poprawnie skonfigurować SublimeCodeIntel. Linux x64, Ubuntu 12.04. Jak ktoś by rozwiązał ten problem to niech da mi znać :) Dokładnie chodzi o to, że po pewnym czasie pracy (mniej niż minuta?) plugin zaczyna zżerać 100% procka....
3/23/2013
Vim tagbar
Tagbar pomaga wtedy gdy w module masz dużo kodu i jest ci trudno ogarnąć, co gdzie jest (np. po wcześniejszej osobie, która pisała kod).
Jeżeli korzystasz z pathogen to instalacja jak się domyślasz jest banalna:
Tak to wygląda dla kodu pythona:
Kilka przydatnych skrótów klawiszowych:
Jeżeli korzystasz z pathogen to instalacja jak się domyślasz jest banalna:
cd ~/.vim/bundle git clone https://github.com/majutsushi/tagbar.gitDodatkowo musisz mieć w systemie Exuberant Ctags. Szybka instalacja pod Ubuntu:
sudo apt-get install ctagsW pliku .vimrc możesz jeszcze dodać:
nmap <F8> :TagbarToggle<CR>Umożliwi ci to na szybki dostęp do Tagbar wciskając F8.
Tak to wygląda dla kodu pythona:
![]() |
| Tagbar vim |
- enter/double click - przenosi Cię do taga, na który wskazałeś kursorem (na screenie widać, że przeniosło mnie do metody route)
- s - sortowanie tagów według kolejności występowania lub według nazwy (domyślnie jest według kolejności występowania)
- p - przenosi do danego tagu, lecz kursor pozostaje w tagbarze
- -/+ - zwija/rozwija tagi, np. importy czy klasy
- =/* - zwija/rozwija wszystkie tagi
- ctrl+n/ctrl+p - skakanie po top-level tagach (następny, poprzedni)
- F8 ;)
3/09/2013
Vim i gitgutter
Kilka dni temu trafiłem na plugin vim-gitgutter i postanowiłem go wypróbować. W wielkim skrócie plugin odpowiada za pokazywanie w którym miejscu w pliku dokonałeś zmian, coś jak git diff.
Korzystam z pathogen, więc aby zainstalować plugin wklepałem:
Po pierwsze, wyłączyłem domyślne pokazywanie różnic, a zbindowałem sobie komendę GitGutterToggle pod <leader>gr. Dzięki temu jak chcę zobaczyć różnicę to wciskam ,gr (klawisz <leader> mam zbindowany pod ","), a jak chcę wyłączyć to wciskam znów to samo. Dodatkowo zbindowałem sobie komendy GitGutterNextHunk i GitGutterPrevHunk odpowiednio pod <leader>d oraz <leader>s. Mogę przez to w łatwy i szybki sposób poruszać się po pliku skacząc z jednej zmiany na drugą.
Tak to wygląda w pliku .vimrc:
Korzystam z pathogen, więc aby zainstalować plugin wklepałem:
cd ~/.vim/bundle git clone git://github.com/airblade/vim-gitgutter.gitI już można się bawić. Posiedziałem nad nim chwilę i naprawdę mi się spodobał, lecz musiałem wprowadzić kilka swoich poprawek :)
Po pierwsze, wyłączyłem domyślne pokazywanie różnic, a zbindowałem sobie komendę GitGutterToggle pod <leader>gr. Dzięki temu jak chcę zobaczyć różnicę to wciskam ,gr (klawisz <leader> mam zbindowany pod ","), a jak chcę wyłączyć to wciskam znów to samo. Dodatkowo zbindowałem sobie komendy GitGutterNextHunk i GitGutterPrevHunk odpowiednio pod <leader>d oraz <leader>s. Mogę przez to w łatwy i szybki sposób poruszać się po pliku skacząc z jednej zmiany na drugą.
Tak to wygląda w pliku .vimrc:
let g:gitgutter_enabled = 0 nmap <leader>gr :GitGutterToggle<CR> nmap <leader>s :GitGutterPrevHunk<CR> nmap <leader>d :GitGutterNextHunk<CR>Plugin oferuje jeszcze kilka innych ciekawych rozwiązań takich jak np. podświetlanie danej linii ze zmianami, ale mi osobiście to bardziej przeszkadza niż pomaga. Jak zawsze zapraszam do repo dotfiles. Jak masz coś fajnego, też się podziel :)
Subskrybuj:
Posty (Atom)







