2/28/2013

VimFx - skróty z vima w ff

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ę:
  1. szybkie wyłączenie dodatku na danej stronie ;)
  2. łatwe dodawanie stron za pomocą wyrażeń regularnych do blacklisty
  3. włączenie/wyłączenie każdego skrótu
  4. szybki help (wciskasz ?)
  5. szukanie via Vim
  6. skakanie po tabach
  7. nawigacja po stronie
Repo projektu na githubie: VimFx - znajdziesz tu od razu skróty klawiszowe.

2/21/2013

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

2/14/2013

Update wszystkich submodułów w GIT

Jeżeli w swoim repozytorium gita korzystasz z kilku/kilkunastu repozytoriów to po dłuższej chwili zacznie cię mocno irytować taka rutyna:
  1. wchodzę w submoduł
  2. sprawdzam gałąź, czy jest na master
  3. odpalam git pull
  4. 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 konkretnej gałęzi.

Gdy dopiero co budujesz swoje repozytorium i dodajesz submoduły do swojego repo, mają one gałąź i jest to normalne, lecz w momencie gdy je wypychasz i ktoś je sklonuje (albo, ty sam to zrobisz do innego katalogu), to po aktualizacji submodułów będą one wskazywały właśnie na commit, a nie na gałąź. Dlatego też, gdy sklonujesz sobie repozytorium i chcesz wprowadzić jakieś zmiany, np. aktualizacja submodułu do najnowszej wersji warto wykonać:
git submodule init
git submodule update --recursive
A następnie jedno z dwóch poleceń:

Gdy nie masz ustawionych gałęzi, czyli najczęściej zaraz po sklonowaniu (pobierze gałąź master lub jakąkolwiek inną jaką wskażesz):
git submodule foreach git pull origin master
git submodule foreach git checkout master
Gdy masz ustawione gałęzie we wszystkich submodułach (pobierze gałąź na której aktualnie się znajduje, czyli tą na którą wskazuje HEAD):
git submodule foreach git pull
I to chyba tyle, jest jeszcze problem, gdy prawie wszystkie twoje submoduły opierają się o gałąź master, a jeden np. o gałąź develop, ale wskoczyć do tego jednego i odpalić git pull to już chyba nie problem.

2/10/2013

Vim-snipmate i python

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 chodzi o instalację, jak używać vim-snipmate możesz zobaczyć na filmiku wyżej.

2/05/2013

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 odpowiednią funkcję, a pod jego koniec dodałem: 
import zc.lockfile

def moja_uber_funkcja():
    pass

if __name__ == '__main__':

    try:
        lock = zc.lockfile.LockFile('moj_super_cron_skrypt')
    except zc.lockfile.LockError:
        sys.exit(1)
    
    moja_uber_funkcja()

    lock.close()
Dzięki temu, dopóki metoda close na obiekcie lock się nie wykona, skrypt będzie rzucał pięknym exceptionem zc.lockfile.LockError i mam pewność, że nic dalej się nie wykona ;)

2/02/2013

Powerline-bash, vim-powerline - zmiany

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