Multiple Python versions on Linux

Linux comes with Python bundled, but if it often lags recent developments. If you need a specific version of Python you can download it from python.org and install on your box. You can take .xz archive, it is slightly smaller and tar available on you linux box should handle it.

# change to a suitable directory and unpack python
tar xf ~/Downloads/Python-3.8.0.tar.xz 
./configure --prefix $HOME/.local    # any directory you can write to is fine
make
make test
make install
# make sure $HOME/.local/bin is on your $PATH
# python versions come with a nice naming convention
python3.8    # invokes python 3.8 interpreter you have installed
pip3.8       # installs packages for your version
# now you can create a virtual environment for your development
python3.8 -m venv project_directory

You don’t need to install python with sudo if you need it for private use. System rights are only needed if you want the software available for other users. If a software can run without system rights it should be run without them.

Are circular imports in python evil?

Circular imports can be confusing because import does two things:
1. executes imported module code
2. adds imported module to global symbol table of importing module
The former is done only once, while the latter at each import statement. Circular import creates situation when importing module uses imported one with partially executed code. In consequence it will not see objects created after import statement, below code sample demonstrates it.

main.py

print 'import b'
import b
print 'a in globals() {}'.format('a' in globals())
print 'import a'
import a
print 'a in globals() {}'.format('a' in globals())
if __name__ == '__main__':
print 'imports done'
print 'b has y {}, a is b.a {}'.format(hasattr(b, 'y'), a is b.a)

b.by

print "b in, __name__ = {}".format(__name__)
x = 3
print 'b imports a'
import a
y = 5
print "b out"

a.py

print 'a in, __name__ = {}'.format(__name__)
print 'a imports b'
import b
print 'b has x {}'.format(hasattr(b, 'x'))
print 'b has y {}'.format(hasattr(b, 'y'))
print "a out"

python main.py output with comments

import b
b in, __name__ = b # b code execution started
b imports a
a in, __name__ = a # a code execution started
a imports b # b code execution is already in progress
b has x True
b has y False # b defines y after a import,
a out # module a code executed
b out
a in globals() False # import only adds a to main global symbol table
import a
a in globals() True
imports done
b has y True, a is b.a True # all b objects are available

Circular imports are not the ultimate evil to be avoided at all cost. In some frameworks like Flask they are quite natural and tweaking your code to eliminate them does not make the code better.

Skok na bank centralny

Przestępczość oparta na wiedzy osiągnęła kolejny etap rozwoju, wyprowadzono pieniądze z banku centralnego. Bank centralny Bangladeszu nie jest pierwszym wśród podobnych sobie instytucji ale banki centralne maja kluczowe znacznie dla światowego systemu finansowego. Atak na jeden z nich jest atakiem na cały system. Continue reading

Migracja WordPress

Za sprawą polityki cenowej dostawcy usługi coroczna migracja ijbd.eu stała się tradycją. W home.pl, którego używam co łatwo sprawdzić za pomocą magicznych zaklęć nslookup i whois, jest duża różnica między regularną i promocyjną ceną usługi hostingowej. Ponieważ nie popieram dyskryminacji stałych klientów korzystam z promocyjnej oferty i co roku zmieniam serwer. Oczywiście trzeba przenieść usługę ze starego serwera na nowy i po to żeby operacja przebiegała sprawnie napisałem tę instrukcję. Mam nadzieję, że instrukcja będzie użyteczna także przy zmianie dostawcy usługi. Continue reading

Narzędzia w Agile w praktyce

Narzędzia w Agile były tematem #107 spotkania Agile Warsaw. Pierwszy punkt Agile Manifesto stawia ludzi i współpracę między nimi ponad narzędziami i procesami (Individuals and interactions over processes and tools) i dlatego dobór narzędzi jest ważny. Złe narzędzia zamiast pomagać będą szkodzić niepotrzebnie kierując uwagę zespołu na utrzymanie narzędzi. Continue reading

Poczta Polityka Prywatność

W ostatnich dniach wypłynęła informacja o ważnym urzędniku amerykańskim, który używał prywatnej poczty elektronicznej do celów służbowych. Tym urzędnikiem jest nie kto inny jak Hilary Clinton, była szefowa Departamentu Stanu ( U.S. State Department) i potencjalna kandydatka partii demokratycznej w wyborach roku 2016. Continue reading

Carbanak – Zorganizowana przestępczość oparta na wiedzy

Niedawno pojawiła się wiadomość o największym jak do tej pory przestępstwie komputerowym. Z kliku banków wykradziono duże sumy, mówi się o łącznej kwocie między 300 a 1000 milionów dolarów. Do ataku wykorzystano mechanizm, który można uznać za konia trojańskiego wspieranego przez zespół analityków. W ataku niezwykła jest skala prowadzonej operacji, która trwała wiele miesięcy a nawet lat i dotknęła kilkudziesięciu banków. Continue reading