W tej serii będę publikował co jakiś czas drobny (czasem wręcz trywialny) problem i jego sposoby rozwiązania w pythonie.
Takie problemy mogą (ale nie muszą) pojawiać się na rozmowach kwalifikacyjnych sprawdzających znajomość pythona.
Selektory typu $('#id')
lub $('div.klasa')
są bardzo wygodne - to fakt. Jednak co zrobić kiedy nie spełniają naszych wymagań, bo są zbyt ogólne, bo nie damy rady wyłuskać tego, czego potrzebujemy?
Na przykładzie formsetów Django pokażę, jak stosować bardziej szczegółową metodę dobierania elementów z dokumentu.
Python doskonale nadaje się do szybkiego pobierania i przetwarzania dużej ilości danych. Za przykład niech posłuży opisany poniżej przypadek.
To co zrozumiałe dla parserów xml niekoniecznie musi być zrozumiałe dla człowieka, szczególnie gdy plik xml został pozbawiony wszelkich znaków nowej linii. Oczywiście, zgodnie z prawem Murphy'ego, dokładnie w tym momencie musimy przeanalizować nie tylko dane, ale i strukturę pliku :).
Nie, nie przerzucam się na programowanie myśliwców ;). Ale warto zerknąć do załączonego dokumentu.
Przy nieautomatycznych deploymentach często zachodzi sytuacja typu: potrzebuję listy plików zmienionych między rewizjami X i Y. Oto prosta metoda dla użytkowników Mercuriala.
Te nieco teoretyczne zagadnienie może prowadzić (jak zwykle) do potencjalnych korzyści, jak i potencjalnych problemów.
Problem brzmi: co się stanie, jeśli do funkcji przekażemy jako domyślną wartość parametru obiekt mutowalny?
Dla wszystkich tych, którzy chcieliby używać zapisu znanego chociażby z C i stosować nawiasy klamrowe w pythonie polecam wykonanie tego polecenia w konsoli pythona:
Pod tym zakręconym tytułem kryje się sposób na ułatwienie sobie życia, który odkryłem po dość długich poszukiwaniach.
Chodzi o uproszczone (bez przekopywania się przez całą ścieżkę) otwieranie plików będących w tym samym katalogu co obecnie edytowany plik.
Sam z siebie pip nie udostępnia możliwości sprawdzenia wszystkich dostępnych do zainstalowania wersji konkretnego pakietu, więc trzeba sobie radzić w inny sposób.
Dziś krótko i na temat - mała różnica między Mock i MagicMock.
Pisząc i używając różnego rodzaju automaty webowe często zachodzi potrzeba użycia prawdziwej przeglądarki (Firefox lub Chrome). Użyjemy oczywiście Selenium. Niestety bywa ono kapryśne i (przynajmniej mi) często odmawia współpracy. Oto dwie rady, dzięki którym frustracje związane z uruchamianiem Selenium można zminimalizować.
Ostatnio trafił mi się problem z instalacją pakietu cryptography, który został pociągnięty przez pip
przy instalacji PyOpenSSL.
Notuję rozwiązanie, żeby i mi, i Wam nie umknęło ;)
Tym wpisem rozpoczynam serię krótkich, nieregularnych wpisów dotyczących drobnych usprawniaczy pracy. Na pierwszy ogień idzie bookmarklet What's that font.
Swego czasu zauważyłem, że mój systemowy pip
(spoza virtualenva) rzuca błędem importu.
Nie używam go zbyt często, ale czasami muszę, więc postanowiłem poradzić sobie z tym błędem w jedyny możliwy sposób ;). O dziwo zadziałało :).
Załóżmy, że mamy listę i chcemy iterując po niej usuwać z niej niektóre elementy. Niby prosta sprawa, ale...
Parę dni temu trafiłem przypadkowo na ciekawy test, dzięki któremu (po udzieleniu odpowiedzi na kilka prostych pytań) dostaniemy informację na temat profilu naszego programistycznego umysłu.
Może i brzmi śmiesznie, ale przyznam szczerze, że do mnie mój profil pasuje :).
Analizując zapytania i słowa kluczowe z Google Analytics oraz Google Webmaster Tools zauważyłem, że bardzo dużo osób trafia na bloga przez wyszukiwanie frazy związanej z linkami magnet.
Postanowiłem więc wyjść takim osobom naprzeciw i napisałem konwerter linków magnet do plików torrent online.
Ciągle zapominam jak to zrobić - jest to informacja tak rzadko wykorzystywana, że nie chce mi utkwić w pamięci. Jednocześnie na tyle często jej potrzebuję, że frustracja podczas kolejnego sięgania do dokumentacji rośnie do niebezpiecznego poziomu.
Dlatego też dziś będzie o dacie, stringach i timestampach.
Przy pisaniu testów często trzeba stworzyć kilka obiektów Django, a zdarza się, że nie mamy gotowych fiksturek. W takim wypadku można użyć uniwersalnej funkcji pomocniczej, która stworzy nam dany dowolny obiek na podstawie podanych parametrów.