Blog
Moje prywatne publiczne notatki.
Skrypt dla Jupytera na Prometeuszu
Ten wpis dotyczy konfiguracji Jupytera tak, żeby działał na Prometeuszu. Przy okazji środowisko jest tak skonfigurowane, że można używać GPU.
Jako alternatywę polecam użycie biblioteki idact
Ważne jest aby przed instalacją virutalneva załadować odpowiedni moduł Python, np.
unset PYTHONPATH module load plgrid/tools/python/3.6.5
Następnie instalujemy virtualenva na Prometeuszu. Najprościej zrobić to zgodnie z instrukcją z dokumentacji Virtualnevna
Zakładamy, że virtualenv jest w katalogu ~/python3_6
. Aktywujemy go wywołaniem:
source ~/python3_6/bin/activate
Instalujemy wszystkie potrzebne nam biblioteki, w szczególności Jupytera:
pip install jupyter-notebook
Generujemy również klucz, który pozwoli nam na logowanie się na Prometeusza z Prometeusza, bez podawania hasła.
Następnie tworzymy plik o nazwie jupyter.sh
o następującej treści
unset PYTHONPATH module load plgrid/apps/cuda/9.0 module load plgrid/libs/lapack/3.8.0 module load plgrid/libs/hdf5/1.10.1 module load plgrid/libs/openblas/0.2.19 module load plgrid/libs/atlas/3.10.3 module load plgrid/tools/gcc/8.1.0 module load plgrid/tools/python/3.6.5 module load plgrid/tools/java8/1.8.0_60 export XDG_RUNTIME_DIR=~/xdg export PORT=${1:-9000} echo $PORT source ~/python3_6/bin/activate ~/python3_6/bin/jupyter-notebook --no-browser --port=${PORT} notebooks & sleep 10 ssh -N -R ${PORT}:localhost:${PORT} login01
Po uzyskaniu dostępu do węzła obliczeniowego plik ten pozwoli nam na pracę na Jupyterze na komputerze lokalnym, pod warunkiem, że zalogujemy się przekierowując port 9000
ssh pro -L 9000:localhost:9000
Usuwanie autora z PDFa
Na podstawie:
https://askubuntu.com/questions/27381/how-to-edit-pdf-metadata-from-command-line
1. Instalujemy exiftools:
$ sudo apt-get install exiftool
2. Wywołujemy komendę:
$ exiftool -Author="" plik.pdf
Szczególnie przydatne dla wszystkich osób, które prowadzą proces redakcyjny, z założeniem, że dane autora nie powinny przedostać się do recenzentów (blind review).
Instalacja IRuby
Aby zainstalować IRubiego oraz Ruby on Rails w najnowszych wersjach należy wykonać następujące polecenia (testowane na Ubuntu w wersji serwerowej 16.10):
$ sudo apt-get install zlib1g-dev libssl-dev libxml2-dev libsqlite3-dev libev-dev $ sudo apt-get install ruby curl git-core libyaml-dev libgcrypt11-dev libgmp-dev $ sudo apt-get install libgdbm-dev libncurses5-dev automake libtool bison libffi-dev libreadline6-dev $ sudo apt-get install python3-dev libzmq3-dev python-dev python-pip $ sudo pip install 'ipython[notebook]' markupsafe zmq certifi jsonschema jupyter_console $ curl https://rvm.io/mpapis.asc | gpg --import - $ curl -L get.rvm.io | bash -s stable $ source ~/.rvm/scripts/rvm $ rvm install 2.4.1 $ rvm use 2.4.1 --default $ gem install iruby rails
Weryfikacja poprawności instalacji może być przeprowadzona poprzez wywołanie polecenia:
$ iruby notebook
Uwaga!
Jeśli w trakcie instalacji IRubiego pojawi się komunikat:
autogen.sh: error: could not find libtool.
Należy wykonać następujące polecenie:
$ sudo ln -s /usr/bin/libtoolize /usr/bin/libtool
A następnie ponownie wywołać polecenie
$ gem install iruby rails
Popieram Piotra Waglowskiego
Tyle w temacie nadchodzących wyborów parlamentarnych.
Closed beta of entity linking service
Recently I have deployed an entity linking service. It can be found at klon.wzks.uj.edu.pl/asterion. So far this is a closed beta – in future I am going to provide a commercial linking service. If you are interested in testing this service, don’t hesitate to contact me.
The means of operation of the service are simple – you provide a text on input, via HTTP POST and you will receive a JSON response with names of Wikipedia articles, together with text offsets and confidence values for the proposed links. As with any machine learning algorithm the output is not perfect, so don’t expect “true artificial intelligence” ;-) Still, the output might be pretty valuable, e.g. for indexing.
The API might be tested as follows (Warsaw is the capital of Poland):
curl -X POST -d 'text=Warszawa jest stolicą Polski.' http://klon.wzks.uj.edu.pl/asterion/annotator/annotate.json -u 'login:password' -basicThe output will look as follows:
{"concepts": [ {"id":6605,"name":"Warszawa","confidence":0.21689995068611942,"start":0,"end":7}, {"id":5664,"name":"Stolica Polski","confidence":0.21689995068611942,"start":14,"end":27} ] }
So far only Polish is supported, but English will be provided soon.
Dlaczego Kraków nie jest wart igrzysk?
Poniżej treść mojego wystąpienia na XCVI sesji Rady Miasta Krakowa 29.01.2014
Po co organizować debatę o igrzystkach olimpijskich? Żeby rozstrzygnąć, czy lepiej dać pieniądze na wioskę olimpijską, czy jednak na ścieżki rowerowe? Po to żeby posłowie Platformy mogli pokłócić się z posłami PiSu, jak robili to w trakcie ostatniej sesji Rady Miasta? A może tylko po to, by stworzyć złudzenie udziału mieszkańców w decydowaniu o losach miasta?
Kiedy 12 lat temu przyjechałem do Krakowa ze Śląska, sądziłem, że wygrałem los na loterii. Studia w Mieście Polski Królów, na Akademii Górniczo-Hutniczej, a potem również na Uniwersytecie Jagiellońskim, to było marzenie, które właśnie się urzeczywistniało. Dzięki pracy na Uniwerstecie Jagiellońskim oraz stypendium „Doctus” Małopolskiego Centrum Przedsiębiorczości skierowanego do doktorantów, mogłem pomyśleć o osiedleniu się na stałe w Krakowie. 3 lata temu kupiliśmy z żoną mieszkanie na Ruczaju.
Ale z każdym kolejnym dniem kiedy tutaj mieszkamy coraz częściej myślimy by stąd wyjechać. Do Kopenhagi, Ljubljany a może nieodległego Gaju. Wyjechać, ponieważ Kraków nie oferuje nam wizji, w której na pierwszym miejscu nie stawia się developerów, zagranicznych turystów, działaczy komitetu olimpijskiego, lecz mieszkańców.
Jeśli przez najbliższe 8 lat wszelkie decyzje oraz inwestycje w tym mieście uzależnione będą od igrzysk, a przez kolejnych 10 uzasadnieniem każdego „nie-da-się” będzie wcześniej zorganizowana olimpiada to ja stąd ucieknę.
Dlatego pytam się: czy Zimowe Igrzyska Olimpijskie to wszystko co Kraków może zaoferować ludziom, którzy w tym mieście chcą spędzić kolejne 15 lat? Czy taka jest wizja naszych władz? Chciałbym aby w tej debacie odpowiedziano przede wszystkim na to jedno zasadnicze pytanie!
HackKrK 11
Firma Future Simple organizuje kolejny Hack KRK. Tym razem będziemy implementować konsolowe gry w Rubim. Polecam!
Aktualizacja:Currying w Rubim
W nawiązaniu do wcześniejszego wpisu na temat możliwości zaimplementowania operatora kompozycji w Rubim w tym wpisie pokazuję, że Ruby posiada jeszcze jedną cechę języków funkcyjnych. Mianowicie umożliwia wywoływanie funkcji z niepełną listą parametrów. W terminologii programowania funkcyjnego nazywane jest to curryingiem. Zasadnicza idea polega na tym, że skoro funkcje traktujemy funkcje jako pierwszorzędnych obywateli w danym języku, to powinniśmy mieć możliwość częściowej aplikacji tych funkcji do ich argumentów – tzn. jeśli liczba argumentów jest mniejsza niż wymagana, otrzymujemy nową funkcję, która dopiero po dostarczeniu brakujących argumentów zwróci konkretną wartość.
W chwili gdy poznałem tę funkcję Haskella, uświadomiłem sobie, że w Rubim nie mamy takiej możliwości, tzn.
plus = ->(x,y) { x + y } plus_two = plus[2] # ArgumentError: wrong number of arguments (1 for 2)
Okazuje się jednak, że klasa Proc definiuje wywołanie curry
, które realizuje tę funkcjonalność.
Zatem korzystając z tego wywołanie możemy osiągnąć pożądany efekt:
plus = ->(x,y) { x + y } plus_two = plus.curry[2] plus_two[3] # => 5 plut_two[5] # => 7
Co więcej – uzyskana w ten sposób funkcja nie wymaga wywoływania curry
w celu częściowej aplikacji argumentów:
multiply = ->(x,y,z) { x * y * z } multiply_2 = multiply.curry[2] multiply_2_3 = multiply_2[3] multiply_2_3[5] #=> 30
Operator kompozycji w Rubim
Jako język funkcyjny Haskell posiada wiele ciekawych własności, m.in. umożliwia kompozycje funkcji. Tzn. możemy zdefiniować dwie funkcje a operator kompozycji przekształca je w trzecią funkcję, która jest złożeniem tychże.
Zastanawiałem się przez chwilę, czy coś takiego możliwe jest do zrobienia w Rubim. Jak wiadomo posiada on pewne cechy języków funkcyjnych, ale nie jest tak zaawansowany jak Haskell – w szczególności jest dynamicznie typizowany, więc nie umożliwia statycznej analizy typów. Niemniej jednak możliwość zdefiniowania operatora kompozycji wydała mi się interesującym wyzwaniem.
Okazuje się, że w Rubim można zrobić to dość łatwo – wystarczy rozszerzyć definicję klasy Proc
o operator powiedzmy
*
, który pozwalał będzie na składanie funkcji. Definicja tego operator wygląda następująco:
class Proc def *(other) ->(x){self[other[x]]} end end
Dzięki tak zdefiniowanemu operatorowi możliwe jest składanie funkcji:
f = ->(x){x + 1} g = ->(x){x * 2} f[g[1]] #=> 24 - zwykłe złożenie (f * g)[1] #=> 24 - złożenie z użyciem operatora)
Co więcej, okazuje się, że w Rubim dość łatwo można składać funkcje więcej niż 1-argumentowe (w Haskellu nie ma takiej możliwości – konieczne jest jawne użycie krotek (tuple); w praktyce sprowadza się to do składania funkcji jednoargumentowcych). Odpowiednia definicja wygląda następująco:
class Proc def *(other) ->(*args){self[*other[*args]]} end end f = ->(x,y){[x + y,x - y]} g = ->(x,y){[x * y,x / y]} (f * g)[10,2] #=> [25,15]
Oczywiście w Rubim też w zasadzie budujemy krotki, ale nie zmienia to faktu, że funkcje f i g w tym przykładzie są dwuargumentowe.
Podsumowując – powyższe przykłady pokazują, że w Rubim można dość łatwo uzyskać niektóre interesujące cechy programowania funkcyjnego.
RVM + Passenger
Kilka uwag przy korzystaniu z kombinacji RVM + Passenger:
- Sprawdź czy w pliku konfiguracyjnym passengera (np. /etc/apache2/mods-enabled/rails.load) używana jest
ta sama wersja Rubiego co w konsoli. Jeśli Passenger informuje, że brakuje jakiegoś gema, a
bundle install
przebiegło bez problemu, to prawdopodobną przyczyną jest właśnie inna wersja Rubiego (i inny gemset) dla RVM oraz Passengera. - Przy instalacji Passengera upewnij się, że
rvm use ruby... --default
było wywołane przez użytkownika uprzywilejowanego. Niestety użycie tego samego wywołania przez innego użytkownika spowoduje błędy. - Więcej informacji na ten temat