Posts

Rzadko wykorzystywane typy danych

Wstęp Przy codziennej pracy z pythonem często korzystasz z takich typów danych jak słownik, lista, krotka czy zbiór. Ale warto pamiętać, że istnieją również inne typy danych, które często mogą Ci się przydać, a o których niekoniecznie słyszałeś. Przedstawię kilka z nich, które moim zdaniem są warte uwagi. Counter Typ ten przydaje się wtedy gdy chcesz np. sprawdzić ile razy występuje dany obiekt w zbiorze i dodatkowo chcesz to trzymać jako słownik. Przykład: deque Obiekt deque idealnie nadaje się do stosu lub kolejki . Dodawanie oraz pobieranie elementu jest zbliżone do O(1); nie ważne czy pobierasz z końca czy z początku. Jeżeli jednak chcesz dostać się do elementów po indeksach lepiej jest skorzystać z listy, która jest do tego przystosowana, więc siłą rzeczy jest szybsza. Poniżej, krótkie porównanie: defaultdict defaultdict przydaje się tam, gdzie chcesz stworzyć słownik w którym przy dostępie ma już mieć zdefiniowaną domyślną wartość. Zamiast martwić się sprawdz

Pylibmc, ultramemcache i python-memcached

Wstęp W ubiegłym roku pisałem o ultrajsonie , który wypadł bardzo dobrze. Przedwczoraj natrafiłem na bibliotekę ultramemcache , którą również postanowiłem przetestować i sprawdzić czy jest ultra. Do porównania wykorzystam biblioteki python-memcached oraz pylibmc . Pierwszy test odbył się standardowo poprzez odpalenie jednego procesu. Drugi natomiast z wykorzystaniem czterech procesów co znacznie przyspieszyło działanie. Jeden proces: python-memcached ultramemcache pylibmc Cztery procesy: python-memcached ultramemcache pylibmc Wyniki Testy wykonałem kilka razy dla każdego ze skryptów i wybrałem najlepsze wyniki dla danej biblioteki. Był to bardzo prosty test, ale da się zauważyć spore różnice w szybkości działania tych bibliotek. W przypadku jednego procesu ultramemcache poradził sobie najlepiej, chociaż pylibmc jest tuż tuż... Jeżeli chodzi o cztery procesy to pylibmc jest zdecydowanym zwycięzcą . Zachęcam do robienia swoich testów. Do sporządzen

Dodiff

Ostatnio często muszę robić diffy w gicie i zapisywać je do plików. Przykładowa nazwa pliku z diffem wygląda tak: {branch}-{branch/commit}.diff Diffy pomiędzy poszczególnymi commitami nie są mi potrzebne. Aby otrzymać takiego diffa można wykonać komendę git diff {branch/commit} > ~/diffs/{branch}-{branch/commit}.diff . Przykłady: git diff develop > ~/diffs/develop-master.diff git diff 66666 > ~/diffs/66666-develop.diff git diff 18361 > ~/diffs/18361-develop.diff git diff 47529 > ~/diffs/47529-0dbf4fa.diff Jak widać jest trochę pisania.  po co za każdym razem wpisywać katalog w którym ma zostać stworzony plik po co podawać nazwę brancha na której właśnie jesteś (i to dwa razy!) ;) pracuj na gałęziach, których nazwy składają się wyłącznie z cyfr to oczopląsu dostaniesz po kilkunastu takich komendach Dlatego też postanowiłem napisać do tego prostą funkcję w bashu. Założenie było proste, mam podać nazwę funkcji i jako pierwszy parametr przekazać nazwę brancha/comm

bumpversion

Image
bumpversion to ciekawa paczka do automatycznego podbijania wersji twojej paczki ;). ( screencast )  Jedną komendą jesteś w stanie podbić wersję w swojej paczce w kilku miejscach (oczywiście, najlepiej informację o wersji trzymać w jednym miejscu, ale czasami jesteś zmuszony, aby zrobić to w kilku plikach). Przykładowo, twoja aktualna wersja to 0.1.10, zrobiłeś małego fixa i chcesz podbić wersję do 0.1.11. Dodatkowo informacje na temat wersji trzymasz w pliku setup.py oraz w random_words/__init__.py . Zapomniałem dodać; jak chcesz to zajrzyj do paczki RandomWords , bo to na niej jest przykład. Teraz wystarczy odpalić: bumpversion --current-version 0.1.10 patch setup.py random_words/__init__.py i gotowe. Skrypt podbił wersję w pliku setup.py oraz w random_words/__init__.py Dokumentację i więcej przykładów użycia znajdziesz na githubie . P.S. Screena musiałem zrobić lokówką bo ubuntu odmówiło przed chwilą posłuszeństwa, a nie chce mi się resetować systemu.

Travis CI oraz PyPI badges

Image
Jeżeli korzystasz z Travis-CI do testowania swojego repozytorium na githubie oraz trzymasz paczkę na pypi , możesz w łatwy i prosty sposób dodać informacje na temat statusu do pliku README. Dzięki temu userzy będą widzieć czy wszystkie testy przeszły pomyślnie, jaka jest aktualna wersja paczki oraz jaka jest ilość ściągnięć. U mnie dla repo RandomWords wygląda to tak: Travis-CI W dokumentacji travis-ci znajdziesz informacje o tym co musisz umiejscowić w odpowiednim pliku. PyPI Osobiście korzystam z dwóch formatów. Markdown dla github oraz reStructuredText dla PyPI. Markdown : [![PyPi version](https://pypip.in/v/$REPO-NAME/badge.png)](https://crate.io/packages/$REPO-NAME/) [![PyPi downloads](https://pypip.in/d/$REPO-NAME/badge.png)](https://crate.io/packages/$REPO-NAME/) reStructuredText : .. image:: https://pypip.in/v/$REPO-NAME/badge.png :target: https://crate.io/packages/$REPO-NAME/ :alt: Latest PyPI version .. image:: https://pypip.in/d/$REPO-NAME/badge.pn

RandomWords 0.1.8

Wrzuciłem przed chwilą poprawkę do biblioteki RandomWords . Od dzisiaj działa pod pythonem 2.6, 2.7, 3.2 oraz 3.3. Można to sprawdzić tutaj .

gift

Image
Stworzyłem skrypt do pobierania obrazków z tumblera, znajdziesz go w repo gift (get images from tumblr). Pobieranie informacji na temat danego bloga opiera się o tumblerowe API, więc musisz mieć swoją appkę. Tutaj możesz ją szybko założyć. Obrazki są zapisywane w katalogu images/nazwa-bloga . Instalacja Repo ściągasz poleceniem: git clone https://github.com/tomislater/gift.git Wchodzisz do katalogu gift i instalujesz zależności: pip install -r requirements.txt Jak używać Po założeniu aplikacji w pliku config.cfg podajesz swój consumer key: [tumblr] consumer_key = your_consumer_key Jak korzystać ze skryptu najlepiej dowiesz się wpisując w konsoli: python gift.py -h Poniżej kilka screenów: python gift.py perfectboard python gift.py joeyxbadass ./gift skate--n--surf -l 100

TFDPronunciation nowa wersja (progressbar)

Image
Dodałem dzisiaj do skryptu TFDProunciation progressbar . Czasami strasznie mi muli net i fajnie mniej więcej wiedzieć kiedy skrypt skończy się wykonywać.

bpython i dzielenie się kodem

Image
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 ;) 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/ I to tyle jeśli chodzi o wrzucanie na bpaste. 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ędzi

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: 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"'

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. 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 splinter Po 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 Pierwsze co musisz zrobić to stworzyć instancję przeglądarki, a robisz to tak: from sp

Nowa wersja TFDPronunciation

Image
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....

Vim tagbar

Image
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: cd ~/.vim/bundle git clone https://github.com/majutsushi/tagbar.git Dodatkowo musisz mieć w systemie Exuberant Ctags . Szybka instalacja pod Ubuntu: sudo apt-get install ctags W 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  Kilka przydatnych skrótów klawiszowych: 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 =/* - zwij

Vim i gitgutter

Image
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: cd ~/.vim/bundle git clone git://github.com/airblade/vim-gitgutter.git I 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 :

Anki i volume

Ostatnio nie wiadomo z jakich przyczyn (najprawdopodobniej jakiś program nadpisał mi configa .mplayer/config ) anki nagle zaczęło odtwarzać wszystkie pliki audio bardzo cicho. Anki do odtwarzania audio korzysta z mplayera , więc od razu było wiadomo gdzie muszę szukać przyczyny. Pierwsze co znalazłem na ten temat w man mplayer to informacja o tym, aby pobawić się głośnością. Dodałem więc do configa linijkę: af=volume=10:0 Dzięki temu, każdy plik otwierany przez mplayer był wzmocniony o 10dB. Warto pamiętać, że jest to skala logarytmiczna, jak podasz 100 to wcale nie będzie głośniejsze sto razy, tylko dziesięć miliardów. Zadziałało, ale gdy podaje się zbyt dużą głośność to filtr ją przycina, aby do karty muzycznej nie przesyłać danych spoza akceptowalnego zakresu, co dla nas objawia się tym, że dźwięk jest zniekształcony. Zmniejszyłem więc do 5dB (i do mniejszych wartości), ale dalej to samo. Dźwięk w niektórych momentach zostaje zniekształcony i po jednym odtworzeniu pliku, d

VimFx - skróty z vima w ff

Image
VimFx oferuje możliwość używania skrótów z vima w przeglądarce firefox. Co mnie skusiło, aby go wypróbować? Mnogość opcji na którą składają się: szybkie wyłączenie dodatku na danej stronie ;) łatwe dodawanie stron za pomocą wyrażeń regularnych do blacklisty włączenie/wyłączenie każdego skrótu szybki help (wciskasz ? ) szukanie via Vim skakanie po tabach nawigacja po stronie Repo projektu na githubie: VimFx - znajdziesz tu od razu skróty klawiszowe.

Vim Commands dla Anki

Znalazłem ciekawy deck (flashcard?) dla Anki . Ukrywa się pod nazwą  Vim Commands . Codziennie po 5 nowych komend nikomu nie zaszkodzi. Gość ma jeszcze repo na githubie, więc zawsze można dodawać coś od siebie i dzielić się ze światem. Na start jest 239 komend. Jeżeli ustawisz sobie po 5 nowych komend dziennie, to po dwóch miesiącach powinieneś już sprawnie nimi operować.

Update wszystkich submodułów w GIT

Image
Jeżeli w swoim repozytorium gita korzystasz z kilku/kilkunastu repozytoriów to po dłuższej chwili zacznie cię mocno irytować taka rutyna: wchodzę w submoduł sprawdzam gałąź, czy jest na master odpalam git pull wychodzę z submodułu Jest na to łatwy sposób. Wystraczy wklepać w konsoli: git submodule foreach git pull Ale uwaga, tutaj niespodzianka ;) Jeżeli dopiero co zassałeś swoje repozytorium w którym masz submoduły, to aby działały musisz najpierw odpalić: git submodule init git submodule update --recursive wszystko się oczywiście wykona, ale submoduły zostaną zaktualizowane do konkretnego commita , którego ustawiłeś wykonując wcześniej git push . Co implikuje to, że nie będziesz miał ustawionej gałęzi w żadnym z submodułów. Submoduł będzie wskazywał na konkretnego commita, a nie na gałąź. git submodule update --recursive Jest to oczywiście normalne i tak powinno to działać! Taka jest idea submodułów. Odwołują się do commita, którego im przypisałeś, a nie do konkre

Vim-snipmate i python

Image
Trafiłem ostatnio na dość ciekawy plugin do vima, a mianowicie na vim-snipmate . Jest to fork z repo snipmate.vim , które autor przestał rozwijać jakieś 3-4 lata temu. vim-snipmate Czym jest snipmate? Jest to plugin, który pomaga dopełniać  pisany przez ciebie kod. Przykładowo, wpisujesz def  lub cl , wciskasz <tab>  i plugin sam dalej tworzy funkcję czy klasę. Postanowiłem, że stworzę video i pokażę jak plugin się sprawdza przy pisaniu w pythonie. Bardzo mocno go polecam. Tym bardziej, że wspiera praktycznie każdy popularniejszy  format . Video Instalacja Zakładam, że używasz pathogen . Jeżeli nie, zajrzyj tutaj . Przy okazji polecam ten post , w którym opisuję praktycznie krok po kroku jak zrobić sobie Python IDE. cd ~/.vim/bundle git clone git://github.com/garbas/vim-snipmate.git git clone https://github.com/tomtom/tlib_vim.git git clone https://github.com/MarcWeber/vim-addon-mw-utils.git git clone https://github.com/honza/snipmate-snippets.git I tyle, jeżeli

Cron i zc.lockfile

Musiałem dzisiaj napisać skrypt, który odpalał się co minutę poprzez crona i mogło się zdarzyć, że będzie wykonywał się trochę dłużej niż jedna minuta. Dlatego też, trzeba było wymyślić jakiś mechanizm, który by mnie uchronił przed odpaleniem skryptu kolejny raz, gdy ten jeszcze się nie wykonał. Z pomocą przyszedł mi moduł zc.lockfile . Instalujesz go normalnie poprzez pipa: pip install zc.lockfile Jak działa zc.lockfile? Krótki opis: The zc.lockfile package provides a basic portable implementation of interprocess locks using lock files. The purpose if not specifically to lock files, but to simply provide locks with an implementation based on file-locking primitives. Of course, these locks could be used to mediate access to  other  files. For example, the ZODB file storage implementation uses file locks to mediate access to file-storage database files. The database files and lock file files are separate files. Ja go użyłem w następujący sposób, w skrypcie zdefiniowałem odpo

Powerline-bash, vim-powerline - zmiany

Image
Powerline-shell W listopadzie napisałem posta na temat powerline-bash . Warto wiedzieć, że repo zmieniło nazwę i jest teraz dostępne pod adresem powerline-shell . Całą dyskusję na temat zmiany nazwy można zobaczyć tutaj . Powerline Drugą dość ciekawą informacją jest to, iż prace na rozwojem vim-powerline zostały porzucone. Ale nie bój się! Plugin jest nadal dostępny, nie mniej jednak polecam przesiadkę na powerline . Oferuje to samo co vim-powerline, dodatkowo ma możliwość podpięcia również pod konsolę oraz co jest oczywiste będzie dalej rozwijany. Poniżej zamieszczam dwa screeny z obu skryptów. Najlepiej samemu przetestować i wybrać ten który najbardziej się spodoba. Osobiście korzystam z powerline-shell w konsoli, a z powerline w vimie. Jakoś powerline-shell jest dla mnie bardziej przejrzysty ;) powerline powerline-shell

Vim cheat sheet

Image
Jakiś czas temu natknąłem się w necie na dwie dość ciekawe ściągawki do vima. Warto by się z nimi zapoznać lub mieć niedaleko siebie podczas pracy. Kilka razy już mi się przydały. Tak się zastanawiam czy sobie jakiegoś własnego cheat sheet nie zrobić w formie plakatu i walnąć za monitorem ;). Klik w obrazek po więcej.

Submoduły na github.com

Image
Submoduły Submoduły, czyli co zrobić, żeby np. na githubie w jednym repo umieścić inne repozytoria, aby wyglądało to tak jak poniżej, a nie tak jak na przykład tutaj . Do czego się w ogóle przydają submoduły i dlaczego powinieneś je stosować? Wyobraź sobie, że tworzysz swoje repozytorium, które do poprawnej pracy wymaga innych, konkretnych repozytoriów gita. I tutaj z pomocą przychodzą submoduły. Dzięki nim twoje repozytorium będzie posiadało informacje o tym, gdzie dany submoduł się znajduje (jego adres) oraz jego ostatnie commit ID. Dzięki takiemu zabiegowi, inni developerzy, którzy sklonują twoje repo (które wykorzystuje inne repozytoria), nie będą musieli się martwić, czy wszystko będzie działało tak jak powinno. Unikniesz przez to czasami dziwnych błędów. Np. ktoś dociągnie zbyt stare repozytorium lub zbyt nowe, albo całkowicie inną gałąź, niż tą które wykorzystuje twoje repo ;) Osobiście póki co, użyłem submodułów w moim repo dotfiles . Dodawanie submodułów Załóż

Zen Coding w vimie

Zdarza się, że muszę zajrzeć do szablonu z H a T ee M e L em i coś na szybko dorobić, zmienić czy wyrzucić. I tutaj przychodzi z pomocą  Zen Coding . Nie będę się o tym mocno rozpisywał, ponieważ w necie jest już mnóstwo postów/artykułów na ten temat. Zamiast tego obejrzyj sobie to sześciominutowe video: Okej, spodobało Ci się? Chcesz mieć to samo w vimie? Proszę bardzo, najpierw musisz zainstalować zencoding-vim : cd ~/.vim/bundle git clone https://github.com/mattn/zencoding-vim.git Zakładam oczywiście, że korzystasz z vim-pathogen (pisałem o tym tutaj ). I to tyle, nic więcej nie musisz konfigurować. Pod tym linkiem znajdziesz prosty tutorial pochodzący z tego repo z githuba. Natomiast tutaj są opisane selectory i aliasy. Jak chcesz już teraz zobaczyć, czy spodoba cię się Zen Coding to tutaj jest proste demo . Oczywiście, nie zawsze jest to jakoś mega wydajne, czasami lepiej skopiować podobny szablon i zmienić parę rzeczy, mimo to warto się z nim zaznajomić, ponieważ oszc

Skrypt instalacyjny dla dotfiles

Postanowiłem dodać skrypt instalacyjny dla mojego repo dotfiles . Ustawiłem cztery opcje instalowania: wszystkie pliki tylko vim tylko bash tylko czcionki # instalacja wszystkich plików ./install.sh # (-f, --force) # tylko vim ./install.sh vim # tylko bash ./install.sh bash # tylko czcionki ./install.sh fonts O vima i acka musisz już sam zadbać. To samo się tyczy jeżeli chcesz używać jako colorscheme solarized (dark) w gnome-terminal. Ale wszystko opisałem w pliku README.md , więc nie masz czym się martwić.

Kilka przydatnych aliasów (bash)

Image
Aliasy Codziennie korzystam z dobrodziejstw konsoli. Wpisuję komendy, zapamiętuję, wpisuję nowe, zapamiętuję nowe, itd. Jeśli korzystam z jakiejś komendy dość często robię sobie z niej alias i wrzucam do pliku .bash_aliases  w katalogu użytkownika. Przedstawię aliasy z których korzystam na co dzień i które znacznie ułatwiają mi pracę. Aliasy będę przedstawiał najpierw w formie kodu, później krótki opis i na końcu obrazek jeżeli będzie to konieczne. Uwaga, zaczynam. Katalogi/pliki alias lr='ls -R | grep ":$" | sed -e '\''s/:$//'\'' -e '\''s/[^-][^\/]*\//--/g'\'' -e '\''s/^/ /'\'' -e '\''s/-/|/'\''' W przyjemny dla oka sposób, wyświetla strukturę katalogów (rekurencyjnie). alias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..' alias ......='cd ../../../../..' Zamiast wpisywać &q

Vim jako Python IDE

Image
Wstęp Trochę mi zajęło zabranie się za napisanie tego posta, ale oto jest. Mam nadzieję, że Ci się przyda. Post pisany trochę po to by utrwalić wiedzę, trochę po to, aby pomóc innym, którzy chcą spróbować Vima i trochę po to, by mieć coś ciekawego na tym blogu. Zacznę od tego dlaczego nie inne edytory. Wypróbowałem naprawdę mnóstwo różnych IDE do Pythona, zaczynając od Eclipse , poprzez PyCharm , Komodo , erci5 , Sublime Text 2 i wiele wiele innych, na Wingware kończąc. Wszystko z czego korzystałem po pewnym czasie albo i na początku "muliło", miało mnóstwo opcji z których nie skorzystałem i pewnie nie skorzystam nigdy w życiu, zaśmiecało mi system, dużo ważyło, etc. A odpalenie kilku instancji programu, tak aby można było porobić coś jeszcze na komputerze? Zapomnij. Dlatego zacząłem szukać czegoś lekkiego, czegoś co będę mógł szybko odpalić z terminala i od razu pracować, czegoś co będę mógł w łatwy sposób odpalić na innej maszynie, czegoś co jest darmowe, czegoś co

TDFPronunciation - nowa wersja

Image
Dodałem w skrypcie korzystanie z wątków, dzięki temu długość oczekiwania na zakończenie skryptu dla np. sześciu słów spadło z 5.4 sekund do 1.3 sekundy. Link do nowej wersji: TDFPronunciation .

RandomWords 0.1.7

Image
Puściłem przed chwilą na githuba i pypi nową wersję RandomWords 0.1.7. Główna zmiana to porzucenie modułu pickle i zastąpienie go modułem ujson , o którym ostatnio pisałem . Zrobiłem testy i jasno wyszło, że o wiele szybciej będę wczytywał dane za pomocą ujsona. Poniżej zamieściłem wykresy z testów. Każdy był przeprowadzony sto razy. Wykres szybkości wczytywania danych dla nowej wersji RandomWords. We wszystkich klasach widać wyraźny wzrost prędkości ładowania danych przy tworzeniu instancji.

Pobieranie słów z The Free Dictionary

Image
Do nauki języka i nie tylko, korzystam z programu  Anki . Przy okazji bardzo go polecam. Problem na jaki dzisiaj natrafiłem był taki, iż w większości decków stworzonych przez userów nie ma dźwięków i obrazków. O ile brak obrazka jeszcze przejdzie, to brak przykładu wymowy danego słowa już nie za bardzo. Jak się domyślasz znudziło mnie ciągłe przełączanie się między Anki i Google Translate czy The Free Dictionary w celu usłyszenia poprawnej wymowy danego słowa, więc postanowiłem napisać skrypt, który będzie za mnie szukał danego słowa, pobierał go w formacie mp3 i zapisywał do katalogu sounds, po czym ręcznie będę go mógł dodać gdzie zechcę, np. do Anki ;) Skrypt wrzuciłem na githuba: TDFPronunciation . Jak z niego korzystać znajdziesz w pliku README.md . Po pobraniu słowa, skrypt zapisze go w katalogu TDFPronunciation/sounds/ . Możesz sam utworzyć katalog sounds  po sklonowaniu repo, jednak nic się nie stanie gdy go nie będziesz miał, skrypt to wykryje i sam go stworzy. Przed ka