sharpek.net

moje trzy grosze

„Wysokowydajne” django

Do popełnienia tego wpisu zainspirowało mnie opublikowanie książki highperformancedjango. Cena 40$ za 150 stron to według mnie dość dużo. Dlatego postanowiłem napisać coś od siebie na temat django i tego w jaki sposób przyśpieszyć jego wydajność.

W internecie można znaleźć bardzo dużo benchmarków frameworków webowych. Niestety robiący je ludzie nie mają dużego doświadczenie ze wszystkimi testowanymi frameworkami. W wyniku tego powstają potworki w których ktoś do testowania wydajności pyramid/flask/django używa przestarzałego i wolnego mod_python. Według mnie porównywanie wydajności django/pyramid/flask/ror/symfony jest bez sensu, ponieważ gdy tylko się uprzemy to z każdego wyciągniemy porównywalne wartości (pytanie jakim kosztem). W poniższym wpisie opiszę kilka rzeczy dotyczących samego środowiska django.

Read the rest of this entry »

 

Integracja Stash (Atlassian) z Jenkinsem

Integracja Stash z serwerem ciągłej integracji Bamboo jest dość prosta, natomiast integracja z Jenkinsem już nie należy do łatwych. Atlassian zapewnie woli by kupować ich rozwiązanie ;-)

W internecie ciężko szukać jakichkolwiek informacji na temat integracji tych dwóch narzędzi. Osobiście nad połączeniem Stash z Jenkinsem spędziłem kilka godzin, ostatecznie udało mi się doprowadzić do takiej sytuacji że Jenkins testuje wszystkie zgłoszone pull requesty.

W Webmarket Atlassian istnieje plugin o nazwie „Stash Webhook to Jenkins” on prócz dodania tak przycisku trigger build, niewiele nam pomoże.
Read the rest of this entry »

 

GIT hooks dla Stash (Atlassian) – by już nigdy nie przesłać PDB w pull requests

W pracy korzystamy z dość popularnego narzędzia firmy Atlassian – Stash. Potrzebowaliśmy zablokować możliwość pushowania zmian do wszystkich repozytoriów kodu zawierającego pdb.

Niestety w Google na próźno szukać hooków typu pre-receive (można znaleźć tylko pre-commit, które działają zupełnie inaczej) które odpowiadają za przyjmowanie zmian z zewnątrz. Dlatego w wolnej chwili popełniłem takie małe „coś”:

#!/bin/bash
read oldrev newrev refname
git --work-tree=. diff $newrev | grep $FORBIDDEN_PATTERN > /dev/null
result=$?
if [ "$result" -eq "0" ]
then
    echo "W commitujesz PDB, to nie jest dobry pomysl!"
exit 1;
fi

Tworzymy plik np.: 10_ipdb, zgodnie z dokumentacją GITa ustawiamy chmod +x dla naszego HOOKa (do pliku wklejamy zawartość jak powyżej).
Niestety w STASHu nie ma możliwości tworzenia globalny HOOKów, ale to można w prosty sposób obejść dodając do wszystkich repozytoriów symlinka do 10_ipdb.

find . -type d -name "pre-receive.d" -printf "ln -s /SCIEZKA_DO_PLIKU/10_ipdb %P/ \n" |sh

To polecenie wykonujemy w katalogu z repozytoriami STASH-a. Tworzymy symlinka także należy pamiętać by nie skasować pliku z naszym hookiem

Ekstra

Jeśli chcemy ubarwić sobie pracę, możemy po każdym pushu serwować jakiś dowcip, dodająć poniższy fragment do naszego hooka:

curl  -s --connect-timeout 0 http://api.icndb.com/jokes/random\?firstName\=John\&amp\;lastName\=Doe | grep  -Po '"joke":.*?[^\\]",'

Pozdrawiam :)

 

Moja prezentacja na temat: „Transakcyjność w Django”

ufff, skończyło się, mam nadzieje że nie było tak źle.

To była pierwsza rzecz którą pomyślałem po tym jak skończyła się moja prezentacja (pierwsza w życiu), którą przygotowałem na co miesięczne spotkania Poznań Python Programmers. Dla wszystkich zainteresowanych jak mi poszło zamieszczam poniżej moją prezentację oraz materiał wideo.

Read the rest of this entry »

 

VIM Text Objects…

…czyli dlaczego pamiętam wszystkie skróty w VIM ;-)

Za każdym razem gdy opowiadam komuś że na co dzień używam VIM, słyszę komentarz mniej więcej w takim stylu:

Przecież tam jest nieskończona liczba skrótów, jak Ty to wszystko zapamiętujesz?!

Małe sprostowanie VIM posiada skończoną liczbę skrótów – to jest pewne.

Większość tych skrótów wynika z mechanizmu tak zwanych Text Objects. TextObj używamy w trybie NORMAL i dzięki nim możemy w błyskawicznie zmienić jakiś fragment tekstu używając jednej z wielu akcji. TextObj można rozumieć jako zbiór różnych obiektów występujących w ramach tekstu (słowa, zdania, paragrafy, znaczniki, etc). Standardowo TextObject składa się z:

<akcja><obiekt>

Najczęściej używane przeze mnie „obiekty” to:

  • World
  • Paragraph
  • Tag (html)
  • Sentences – zdanie
  • Znaki „, ‚, (, [, {, <
  • Column – zmiana wartości w kolumnie (dostarczany przez plugin  textobj-word-column.vim)
  • Argument – zmiana argumentu  funkcji  (dostarczany przez plugin argtextobj.vim)
  • Indent – zmiana całego wcięcia (dostarczany przez plugin vim-indent-object)

W skład każdego obiektu wchodzi:

  • Inner – wewnątrz, np. it czyli inner tag
  • A – zmiana całego obiektu np. at – a tag

Akcje które możemy zrobić to:

  • Delete
  • Change – różni się od delete że po usunięciu od razu przechodzimy w tryb INSERT
  • Yank
  • Visual
  • Surround (dostarczany przez vim-surround)

W internecie można znaleźć o wiele więcej obiektów i akcji. Jednak na początek lista którą przedstawiłem powinna wystarczyć. Mając już taką wiedzę można bardzo szybko ułatwić sobie edycję tekstu. Poniżej ciekawych przykładów wykorzystywania TextObj.

Change surround ‚ to ” (zmień ‚ na ” dla danego fragmentu)
cs'"
'Lorem ipsum' => "Lorem ipsum"

Delete in tag (Wszystko wewnątrz taga HTML zostanie skasowane)

dit
<h2>Lorem ipsum</h2> => <h2></h2>

Change in < (Wszystko między < a > zostanie zmienione)
ci<
<h2>Lorem ipsum</h2> => <h2>■</h2>

Change in word (Słowo zostanie zmienione
ciw
Lorem ipsum => ■ ipsum

Visual in tag (Tekst wewnątrz taga HTML zostanie zaznaczony
vit
<h2>Lorem ipsum</h2> => <h2>Lorem ipsum</h2>

Yank surround in sentence <em> (Całe zdanie zostanie umieszczone w znaczniku EM
ysis<em>
Lorem ipsum dolor sit amet enim. Etiam ullamcorper. => Lorem ipsum dolor sit amet enim. <em>Etiam ullamcorper.</em>

Change in Column (zmiana całej kolumny w tekście, np. gdy używamy CSV
cic
Lorem ipsum dolor
Pellentesque ornare posuere
Cum sociis natoque
=>
Lorem ■ dolor
Pellentesque ■ posuere
Cum ■ natoque

Change in argument
cia
def foo(bar=1, baz=2) => def foo(■, baz=2)

Mam nadzieję że ten wpis ułatwi i przyśpieszy komuś pracę z VIM ;-)

 

Mój VIMRC

Mimo wielu negatywnych opinii VIM to dość dobry edytor dla programisty. Na tyle dobry że sam go używam od dłuższego czasu.

Ostatnio miałem trochę czasu oraz chwilę by zrobić porządek w mojej konfiguracji. Wszystkie pluginy trzymam jako bundle które są ładowane za pomocą patchogen

Mój obecny workspace wygląda tak (czcionka Consolas, colorscheme molokai, całe vimrc):

screen

Lista moich podstawowych pluginów:

  • closetag – odpowiada za automatyczne domykanie tagów HTML oraz XML
  • MRU – historia ostatnio otwieranych plików
  • tComment – genialny system komentowania kodu do większości popularnych formatów plików.
  • vim-coffee-script – wsparcie dla coffeescript
  • vim-fugitve – wsparcie do GIT, łącznie z git blame (:Gblame)
  • vim-virtualenv – wsparcie do virtualenv, bardzo przydatne w połączeniu z następnym pluginem
  • syntastic – statyczna analiza kodu, dla większości języków programowania (wymaga instalacji odpowiednich narzędzi dla danego języka, np. pylint, pyflake)
  • snipmate – baza snippetów
  • python-mode – podstawowe narzędzie dla osób korzystających z vim, wsparcie dla refaktoryzacji, etc
  • upAndDown – przenoszenie wierszy za pomocą shift+up/down
  • gundo – zaawansowane przeglądanie historii zmian pliku
  • nerdtree – przeglądarka plików w systemie
  • FuzzyFinder – szybkie przechodzenie między bufferami, plikami.
  • vim-airline – bardzo fajne rozszerzenie domyślnego status bara.
  • vim-multiple-cursors – możliwość zmiany wielu rzeczy na raz (kopia sublime).
  • vim-supertab – automatyzacja podpowiadania, uzupełniania pod jednym przyciskiem – tabem
  • vim-matchit – pozwala na przeskakiwania z początku klasy/funkcji/tagu do jego końca i początku za pomocą %
  • vim-surround.git – pozwala „otaczać” zaznaczony fragment kodu.
  • vim-tagbar – wyświetla drzewo klas, funkcji dla danego pliku
  • delimitMate – automatyczne uzupełniania „, {, [ etc dla kodu.
  • vim-easytags – automatyczne generowanie ctags dla pliku.
  • detectindent – automatyczne wykrywanie rodzaju wcięć w danym pliku.

Oczywiście większość z tych rzeczy każdy porządny edytor oferuje „out of the box”, natomiast w VIMie, obsługa wszystkiego pozostaje w rękach użytkownika.

 

Prosty sposób na przyśpieszenie Django

Jak szybko przyśpieszyć działanie aplikacji napisanej w Django ? Wystarczy zmienić domyślną konfiguracje TEMPLATE_LOADERS. Django domyślnie kompiluje swoje „szablony” per request. Dokonując zmiany w konfiguracji, można wymusić ich cachowanie.

TEMPLATE_LOADERS = (
    ('django.template.loaders.cached.Loader', (
        'django.template.loaders.filesystem.Loader',
        'django.template.loaders.app_directories.Loader',
    )),
)

Po takim zabiegu szablony będą „przeładowywane” po każdym restarcie aplikacji. Uwaga, taka zmiana w konfiguracji wymaga by wszystkie templatetags były threadsafe.

 

AngularJS i różne przeglądarki..

AngularJS to framework MVC napisany w JavaScrpit (wspierany między innymi przez Google). Framework ten nadaje się świetnie do tworzenia złożonych interfejsów użytkownika z użyciem javasciptu. W W firmie w której obecnie pracuje mamy za sobą udane wdrożenie tego frameworka do naszego panelu klienta.

Twórcy AngularJS chwalą się tym że ich framework jest przenośny i kompatybilny z większością przeglądarek obecnych na rynku. Może być to prawdą jeśli weźmiemy pod uwagę tylko najnowsze wydania. Poniżej przedstawiam w jaki sposób nie tracą kilku dni sprawić by kilka najczęściej spotykanych problemów znikło.
Read the rest of this entry »

 

AIRSOFT PHOTOS

Po licznych bojach udało się i od jakiegoś czasu w sieci wisi mój ostatni projekt – AIRSOFTPHOTOS – obecnie jeszcze w wersji BETA.

Całość została napisana w Pythonie – Pyramid/SQLAlchemy.

airsoft photos

 

Hackfest 2011

W tym roku udało mi się zrobić coś, co niestety nie wypaliło kilka lat temu. Udało mi się zebrać drużynę (Marcin Baran, Maciej Gawron, Bartosz Perończyk) i razem jako BeeTeam wystartować w tego rocznej edycji Hackfest.

W opracjiu o Jedyny Słuszny Framework (TM), stworzyliśmy (tamtaram):


Znajdź nas na facebook.com!

Jakie wrażenia ? Ogólnie bardzo pozytywnie!

Sobota godzina 10.05:
– kurde, spodziewałem się że zrobimy o wiele więcej do tego czasu.

Sobota godzina 17.15:
– kurde, niespodziewałem się że tak dużo zrobimy!