apohllo.pl
więcej niż strona domowa...
 

Blog

Moje prywatne publiczne notatki.

| Opublikowano 17:44 14-07-2009. Ostatnia modyfikacja 13:01 29-11-2010 |

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
| Opublikowano 09:56 30-09-2019. Ostatnia modyfikacja 09:56 30-09-2019 |

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

| Opublikowano 11:25 01-08-2017. Ostatnia modyfikacja 11:25 01-08-2017 |

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
| Opublikowano 12:27 23-10-2015. Ostatnia modyfikacja 20:43 26-07-2017 |

Popieram Piotra Waglowskiego

Tyle w temacie nadchodzących wyborów parlamentarnych.

| Opublikowano 22:30 17-09-2015. Ostatnia modyfikacja 22:30 17-09-2015 |

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' -basic
The 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.

| Opublikowano 23:41 17-07-2014. Ostatnia modyfikacja 23:47 17-07-2014 |

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!

| Opublikowano 11:13 14-03-2014. Ostatnia modyfikacja 11:13 14-03-2014 |

HackKrK 11

Firma Future Simple organizuje kolejny Hack KRK. Tym razem będziemy implementować konsolowe gry w Rubim. Polecam!

Aktualizacja:
ruby | Opublikowano 20:19 29-01-2013. Ostatnia modyfikacja 13:49 12-02-2013 |

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
ruby | haskell | currying | Opublikowano 14:46 28-08-2012. Ostatnia modyfikacja 14:46 28-08-2012 |

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.

ruby | programowanie funkcyjne | haskell | Opublikowano 16:01 27-08-2012. Ostatnia modyfikacja 01:32 28-08-2012 |

RVM + Passenger

Kilka uwag przy korzystaniu z kombinacji RVM + Passenger:

  1. 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.
  2. 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.
  3. Więcej informacji na ten temat
ruby | passenger | rvm | Opublikowano 16:22 25-08-2012. Ostatnia modyfikacja 16:22 25-08-2012 |
comments powered by Disqus