WSL1 のUbuntu 18.04 にインストールした Sphinx で Markdown から PDF を作る [Python]
Markdown から PDF を作りたい(かも)ということになった。
以前、Sphinx で(Restructured Text で)ドキュメントを書いて PDF 出力した。
PDF 出力のために何かインストールしたんだけど、何したんだっけ?と思って自分のブログ(ここ)を探したが発見できなかった。
昔は、何かをインストールした手順みたいなのも結構書いてたんだけどなぁ。
よろしくない。
Windows 10 のいわゆる WSL1 の Ubuntu 18.04 で、ほぼ何もインストールされてないところからの手順を試したので、ここに書いておく。
でインストール
ここらへん https://sphinx-users.jp/gettingstarted/make_project.html を見ながら
でプロジェクト作って
http://www.usaturn.net/pyconjp/use_markdown.html に従って conf.py に以下を追加
あとは、 index.rst の toctree に foo.md とか入れて
を実行するとPDF ができた。(拡張子 .md は省略可)
(追記 2019-12-22)svg 画像を埋め込む場合
https://blog.interstellar.co.jp/2019/03/sphinx-svg-pdf-converter/
conf.py に以下を追加
これで svg 入りの Markdown がpdf に変わる・・・のだが、
画像に日本語の文字がある場合なんかにフォントの関係か[Not supported by viewer]
と出る場合があってsvg画像についてはいったん挫折
(ロゴ画像なんかは大丈夫でないかと)
以前、Sphinx で(Restructured Text で)ドキュメントを書いて PDF 出力した。
PDF 出力のために何かインストールしたんだけど、何したんだっけ?と思って自分のブログ(ここ)を探したが発見できなかった。
昔は、何かをインストールした手順みたいなのも結構書いてたんだけどなぁ。
よろしくない。
Windows 10 のいわゆる WSL1 の Ubuntu 18.04 で、ほぼ何もインストールされてないところからの手順を試したので、ここに書いておく。
sudo apt install -y python3-pip pip3 install Sphinx recommonmark sudo apt install -y texlive-latex-recommended \ texlive-latex-extra \ texlive-fonts-recommended \ texlive-fonts-extra \ texlive-lang-japanese \ texlive-lang-cjk sudo apt install -y latexmk
でインストール
ここらへん https://sphinx-users.jp/gettingstarted/make_project.html を見ながら
sphinx-quickstart -q -p "Sample PDF" -a nakagami -v 1.0 -l ja sample_project
でプロジェクト作って
http://www.usaturn.net/pyconjp/use_markdown.html に従って conf.py に以下を追加
from recommonmark.parser import CommonMarkParser source_parsers = { '.md': CommonMarkParser, } source_suffix = ['.rst', '.md']
あとは、 index.rst の toctree に foo.md とか入れて
make latexpdf
を実行するとPDF ができた。(拡張子 .md は省略可)
(追記 2019-12-22)svg 画像を埋め込む場合
https://blog.interstellar.co.jp/2019/03/sphinx-svg-pdf-converter/
sudo apt install inkscape pip3 install sphinxcontrib-svg2pdfconverter
conf.py に以下を追加
extensions = [ ‘sphinxcontrib.inkscapeconverter’] inkscape_converter_bin = ‘/usr/bin/inkscape’
これで svg 入りの Markdown がpdf に変わる・・・のだが、
画像に日本語の文字がある場合なんかにフォントの関係か[Not supported by viewer]
と出る場合があってsvg画像についてはいったん挫折
(ロゴ画像なんかは大丈夫でないかと)
Django の Firebird バックエンド djfirebid 0.2.0 リリース [Python]
この記事は Firebird Advent Calendar 2019 https://qiita.com/advent-calendar/2019/firebird の8日目の記事です
Django のFirebird backend を書いていることは、昨年の Firebird Advent Calendar で紹介しましたが
https://nakagami.blog.ss-blog.jp/2018-12-20 Firebird 4.0 が出ないまま Django の開発の trunk がDjango 3.0 に移ってしまったので、結局 Django 2.2 向けのリリースはしてません。
Firebird 4.0 を待っていると、Django の、どのバージョンをターゲットにしていいかわからないので、 Django 3.0 もリリースされたことだし、 Django 3.0 + Firebird 4.0 beta1 対応版として、バージョン 0.2.0 をリリースしました(さっき)
https://pypi.org/project/djfirebirdsql/0.2.0/
Firebird の制約で
- 識別子を Rename する機能がない
- 一時的に制約を OFF にする機能がない
- Firebird に関数や演算子がない
- 日付時刻型の精度がちょっと低い
- 制約が効いていてカラムの変更をできない(←ここは、まだ改善の余地あるかも)
など、いろいろ問題あるんですが、できる部分では頑張りました。
Django のFirebird backend を書いていることは、昨年の Firebird Advent Calendar で紹介しましたが
https://nakagami.blog.ss-blog.jp/2018-12-20 Firebird 4.0 が出ないまま Django の開発の trunk がDjango 3.0 に移ってしまったので、結局 Django 2.2 向けのリリースはしてません。
Firebird 4.0 を待っていると、Django の、どのバージョンをターゲットにしていいかわからないので、 Django 3.0 もリリースされたことだし、 Django 3.0 + Firebird 4.0 beta1 対応版として、バージョン 0.2.0 をリリースしました(さっき)
https://pypi.org/project/djfirebirdsql/0.2.0/
Firebird の制約で
- 識別子を Rename する機能がない
- 一時的に制約を OFF にする機能がない
- Firebird に関数や演算子がない
- 日付時刻型の精度がちょっと低い
- 制約が効いていてカラムの変更をできない(←ここは、まだ改善の余地あるかも)
など、いろいろ問題あるんですが、できる部分では頑張りました。
FDB driver 101 [Python]
これは、 Firebird advent calendar 2019 https://qiita.com/advent-calendar/2019/firebird の2日目の記事です
Firebird Conference 2019 で、発表された Firebird データーベースドライバー FDB のプレゼン資料は、ここに公開されているようです。
https://www.ibphoenix.com/files/conf2019/pythonfdb101.pdf
Firebird Conference 2019 で、発表された Firebird データーベースドライバー FDB のプレゼン資料は、ここに公開されているようです。
https://www.ibphoenix.com/files/conf2019/pythonfdb101.pdf
janomecabdic ができるまで [Python]
これは、昨日開催された (第104回)Python mini Hack-a-thon https://pyhack.connpass.com/event/147489/ で発表した janomecabdic の記録です。
janomecabdic という janome から MeCab 辞書を使って形態素解析をするアドオンパッケージを、昨日 PyPI にアップロードしました。
https://pypi.org/project/janomecabdic/
https://github.com/nakagami/janomecabdic
MeCab が辞書検索に Double Array というアルゴリズムを使っていることは以前から知っていましたが、先月くらいになって、 MeCab の Double Array で検索(と辞書の登録)する部分が、切り出されてテンプレートライブラリー化されていることを知りました。
http://chasen.org/~taku/software/darts/
「サンプルプログラムが動かねーなー」
と思っていたら、動かしている人を発見、
http://sucrose.hatenablog.com/entry/2012/09/28/121408
自分でも、短いサンプルを書いて、動作することを確認できました。
https://gist.github.com/nakagami/3ca60a82337ed66590d7e70a52efe352
janome では、同様の辞書検索を FST というアルゴリズムを使っていますが、
https://github.com/mocobeta/janome/blob/master/janome/dic.py
この↑へんの処理と同じことをする処理に差し替えれば、動きそうだぞ、ということもわかってきました。
・・・そうは言っても、 template ライブラリを読み解いて、コンパイル済みの辞書のバイナリフォーマットを理解して検索する処理を書かなくてはいけないのか?と思ったんですが、Cython でdarts のテンプレートライブラリを呼べることや、 C++ で、自分で定義した構造体、std::vector や std:pair を返す関数を書くと Cython がいい具合にマーシャリングしてPython に結果を返してくれることがわかりました。
Cython 凄い。
そんなわけで、最初に強いモチベーションがあったわけでなく、順番に調べていくうちに janomecabdic が完成しました。
janomecabdic という janome から MeCab 辞書を使って形態素解析をするアドオンパッケージを、昨日 PyPI にアップロードしました。
https://pypi.org/project/janomecabdic/
https://github.com/nakagami/janomecabdic
MeCab が辞書検索に Double Array というアルゴリズムを使っていることは以前から知っていましたが、先月くらいになって、 MeCab の Double Array で検索(と辞書の登録)する部分が、切り出されてテンプレートライブラリー化されていることを知りました。
http://chasen.org/~taku/software/darts/
「サンプルプログラムが動かねーなー」
と思っていたら、動かしている人を発見、
http://sucrose.hatenablog.com/entry/2012/09/28/121408
自分でも、短いサンプルを書いて、動作することを確認できました。
https://gist.github.com/nakagami/3ca60a82337ed66590d7e70a52efe352
janome では、同様の辞書検索を FST というアルゴリズムを使っていますが、
https://github.com/mocobeta/janome/blob/master/janome/dic.py
この↑へんの処理と同じことをする処理に差し替えれば、動きそうだぞ、ということもわかってきました。
・・・そうは言っても、 template ライブラリを読み解いて、コンパイル済みの辞書のバイナリフォーマットを理解して検索する処理を書かなくてはいけないのか?と思ったんですが、Cython でdarts のテンプレートライブラリを呼べることや、 C++ で、自分で定義した構造体、std::vector や std:pair を返す関数を書くと Cython がいい具合にマーシャリングしてPython に結果を返してくれることがわかりました。
Cython 凄い。
そんなわけで、最初に強いモチベーションがあったわけでなく、順番に調べていくうちに janomecabdic が完成しました。
Python Db2 database driver [Python]
2016年に、 DRDA プロトコルを喋って Apache Derby で使える python のデーターベースドライバーを書いた。
PyCon JP 2016 でトークしたときの状況↓
https://gist.github.com/nakagami/bfbe98d62377f3f4554121ab161ae8c9#apatch-derby
IBM の Db2 も、この DRDA プロトコルで RDBMS とデータのやり取りをするのでDb2 でも使えるようになるはずなんだけど、いろいろ足りないところがあるらしく挫折して放置していた。
改元に伴う10連休に、どこにも出かけず家にこもって試行錯誤したらDb2 で動くようになったので 、リリース(pypi にアップロード)した。
- https://pypi.org/project/pydrda/
- https://github.com/nakagami/pydrda
やったー。
まだ、完全ではないけれど IBM Clound のDb2 https://nakagami.blog.so-net.ne.jp/2019-04-13 に対してクエリーを実行できるようになって、一区切りついた。
平日の業務時間外と週末だけだと、前回までやりかけていたことを思い出すのに時間がかかってしまうので連休の間に進捗してよかった。
PyCon JP 2016 でトークしたときの状況↓
https://gist.github.com/nakagami/bfbe98d62377f3f4554121ab161ae8c9#apatch-derby
IBM の Db2 も、この DRDA プロトコルで RDBMS とデータのやり取りをするのでDb2 でも使えるようになるはずなんだけど、いろいろ足りないところがあるらしく挫折して放置していた。
改元に伴う10連休に、どこにも出かけず家にこもって試行錯誤したらDb2 で動くようになったので 、リリース(pypi にアップロード)した。
- https://pypi.org/project/pydrda/
- https://github.com/nakagami/pydrda
やったー。
まだ、完全ではないけれど IBM Clound のDb2 https://nakagami.blog.so-net.ne.jp/2019-04-13 に対してクエリーを実行できるようになって、一区切りついた。
平日の業務時間外と週末だけだと、前回までやりかけていたことを思い出すのに時間がかかってしまうので連休の間に進捗してよかった。
Django 2.2 with pure python database drivers [Python]
これは、(第98回)Python mini Hack-a-thon https://pyhack.connpass.com/event/126057/ への参加記録です。
Django のリポジトリの master を追いかけながら cymysql とminipg のデーターベースバックエンドをDjango の最新に、追随しようとしていた。
4/1 に予定通りDjango 2.2 がリリースされてすぐに cymysql (MySQL) のバックエンド django-cymysql はリリースできた。
しかし、 minipg (PostgreSQL) のバックエンド django-minipg は、テストが大々的にエラーになっていて、リリースできないでいた。
昨日の #pyhack では、午前中のうちに django-minipg がリリースできたので、午後は、 django-minipg と django-cymysql でロケットの発射を確認できるまでの手順をgist に書いていた。
https://gist.github.com/nakagami/2c261b306a50e9ecd84734c0e74e2011
サーバーホスト名、データーベース名、データーベースユーザー、パスワードは適宜読み替えてもらうと、ロケットが発射しているページが見れるはず。
PostgreSQL のデーターベースバックエンド django-minipg は、 Django が PostgreSQL 用にサポートしている一部の機能(配列とか postgis とか)が使えない。MySQL のデーターベースバックエンド django-cymysql は、 Django が MySQL向けにサポートしている一通りの機能が使えると思う。
普通は、Django にデフォルトで入っているデーターベースバックエンドを使えばいいけど、 mysqlclient や psycopg2 がなんかよくわからんけど、うまくインストールできていない、とかいう場合には試してみるといいかも。
Django のリポジトリの master を追いかけながら cymysql とminipg のデーターベースバックエンドをDjango の最新に、追随しようとしていた。
4/1 に予定通りDjango 2.2 がリリースされてすぐに cymysql (MySQL) のバックエンド django-cymysql はリリースできた。
しかし、 minipg (PostgreSQL) のバックエンド django-minipg は、テストが大々的にエラーになっていて、リリースできないでいた。
昨日の #pyhack では、午前中のうちに django-minipg がリリースできたので、午後は、 django-minipg と django-cymysql でロケットの発射を確認できるまでの手順をgist に書いていた。
https://gist.github.com/nakagami/2c261b306a50e9ecd84734c0e74e2011
サーバーホスト名、データーベース名、データーベースユーザー、パスワードは適宜読み替えてもらうと、ロケットが発射しているページが見れるはず。
PostgreSQL のデーターベースバックエンド django-minipg は、 Django が PostgreSQL 用にサポートしている一部の機能(配列とか postgis とか)が使えない。MySQL のデーターベースバックエンド django-cymysql は、 Django が MySQL向けにサポートしている一通りの機能が使えると思う。
普通は、Django にデフォルトで入っているデーターベースバックエンドを使えばいいけど、 mysqlclient や psycopg2 がなんかよくわからんけど、うまくインストールできていない、とかいう場合には試してみるといいかも。
Zope4(Plone5.2) のインストールと実行 [Python]
これは、(第96回)Python mini hack-a-thon の記録です。
Zope のFirebird Database adapter で Zope4 で動くやつあるの?
という Issue が来た
https://github.com/nakagami/Products.FirebirdDA/issues/2
ので Zope4 で何とかならないか調べてみた
Zope4 を(Python3で) 一番簡単にインストールする方法として、 Plone 5.2 の インストール方法のページを寺田さんに教えてもらった。
https://www.starzel.de/blog/four-options-to-try-plone-5-2-on-python-3
一番下、Update: のところの、 github のリポジトリをクローンしてbuildout する方法で動いた。
で、Product.FirebirdDA を加えて buildout してみると・・・
ZSQLMethd とか、いろいろ関連する Products が動かないっぽいなー・・・
ということで、そう答えてクローズした。
・・・と思ったら、
ZMySQLDA は動くよー、と言われたので Reopen
https://github.com/nakagami/Products.FirebirdDA/issues/2#issuecomment-464300313
今日はここまで
Zope のFirebird Database adapter で Zope4 で動くやつあるの?
という Issue が来た
https://github.com/nakagami/Products.FirebirdDA/issues/2
ので Zope4 で何とかならないか調べてみた
Zope4 を(Python3で) 一番簡単にインストールする方法として、 Plone 5.2 の インストール方法のページを寺田さんに教えてもらった。
https://www.starzel.de/blog/four-options-to-try-plone-5-2-on-python-3
一番下、Update: のところの、 github のリポジトリをクローンしてbuildout する方法で動いた。
$ git clone git@github.com:plone/buildout.coredev.git coredev $ cd coredev $ git checkout 5.2 $ python3.7 -m venv . $ ./bin/pip install -r requirements.txt $ ./bin/buildout $ ./bin/instance fg
で、Product.FirebirdDA を加えて buildout してみると・・・
diff --git a/buildout.cfg b/buildout.cfg index 1d5298c77..9b03fa230 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -1,3 +1,6 @@ [buildout] extends = core.cfg + +develop = + src/Products.FirebirdDA diff --git a/core.cfg b/core.cfg index 5392330ef..95e74b137 100644 --- a/core.cfg +++ b/core.cfg @@ -35,6 +35,7 @@ config-directory = ${buildout:directory}/etc # hook for custom eggs. In local.cfg this can be extended # with += to add custom eggs for whatever intend. custom-eggs = + Products.FirebirdDA # non-immersive development helpers commonly needed for Plone Core Development devtool-eggs =
ZSQLMethd とか、いろいろ関連する Products が動かないっぽいなー・・・
ということで、そう答えてクローズした。
・・・と思ったら、
ZMySQLDA は動くよー、と言われたので Reopen
https://github.com/nakagami/Products.FirebirdDA/issues/2#issuecomment-464300313
今日はここまで
MySQL 8.0 の caching_sha2_password 認証 [Python]
これは これは、BeProud Advent Calendar 2018 https://adventar.org/calendars/3338 の21日目の記事です。
2018年といえば MySQL8.0 が GA になりました。
MySQL 8.0 では、 caching_sha2_password という認証メソッドがデフォルトになりました。
https://dev.mysql.com/doc/dev/mysql-server/latest/page_caching_sha2_authentication_exchanges.html
ざっくり言うと、データーベースの中に保存してあるハッシュ化されたパスワードと、
一時的な nonce でハッシュした値でパスワードが一致しているか確認するアルゴリズムです。
それまで長いこと mysql_native_password という認証メソッドがデフォルトでした。
https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_connection_phase_authentication_methods_native_password_authentication.html
20 バイトの scramble とパスワードをハッシュした値が一致しているかを確認するアルゴリズムです。
よくある、シード付きのハッシュパスワードです。
私は、 CyMySQL という PyMySQL からフォークした MySQL のドライバーをメンテナンスしています。
https://github.com/nakagami/CyMySQL
まず、このドライバーでcaching_sha2_password プロトコルの実装をすることができました。
気をよくした私は、 Go 言語のドライバーで実装し pull request を送って、無事マージしてもらえました。
https://github.com/go-sql-driver/mysql/pull/794
わーいわーい。
さらに気をよくした私は、elixir のドライバーの pull request も送りました。
3か月の放置された後、10日程前に、無事マージされました。
https://github.com/xerions/mariaex/pull/236
わーいわーい。
pythonでプロトタイプを書いて、ほかのプログラミング言語に実装・・・11日目と同じでしたね。
https://nakagami.blog.so-net.ne.jp/2018-12-11-1
2018年といえば MySQL8.0 が GA になりました。
MySQL 8.0 では、 caching_sha2_password という認証メソッドがデフォルトになりました。
https://dev.mysql.com/doc/dev/mysql-server/latest/page_caching_sha2_authentication_exchanges.html
ざっくり言うと、データーベースの中に保存してあるハッシュ化されたパスワードと、
一時的な nonce でハッシュした値でパスワードが一致しているか確認するアルゴリズムです。
それまで長いこと mysql_native_password という認証メソッドがデフォルトでした。
https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_connection_phase_authentication_methods_native_password_authentication.html
20 バイトの scramble とパスワードをハッシュした値が一致しているかを確認するアルゴリズムです。
よくある、シード付きのハッシュパスワードです。
私は、 CyMySQL という PyMySQL からフォークした MySQL のドライバーをメンテナンスしています。
https://github.com/nakagami/CyMySQL
まず、このドライバーでcaching_sha2_password プロトコルの実装をすることができました。
気をよくした私は、 Go 言語のドライバーで実装し pull request を送って、無事マージしてもらえました。
https://github.com/go-sql-driver/mysql/pull/794
わーいわーい。
さらに気をよくした私は、elixir のドライバーの pull request も送りました。
3か月の放置された後、10日程前に、無事マージされました。
https://github.com/xerions/mariaex/pull/236
わーいわーい。
pythonでプロトタイプを書いて、ほかのプログラミング言語に実装・・・11日目と同じでしたね。
https://nakagami.blog.so-net.ne.jp/2018-12-11-1
動く疑似コードとしての Python [Python]
これは、BeProud Advent Calendar 2018 https://adventar.org/calendars/3338 の11日目の記事です。
2018-10-21 にあった tokyo.ex#9 というイベント
https://beam-lang.connpass.com/event/103873/
の LT で、
「elixir のPostgreSQL ドライバーに Pull Request を送ってマージされたよ、わーい」
という話をした。
PostgreSQL 10 で実装された scram-sha-256 authentication method に対応したものだ。
https://gist.github.com/nakagami/db99822eef3033acfbfe11241cc15547
この時のメインテーマは 「Jose Valim さんはいい人」だった。
これを、BeProud Advent Calendar 目線で語ると、elixir で実装する前に、自分が書いた Pure Python のPostgreSQL ドライバー https://github.com/nakagami/minipg に scram-sha-256 認証のメソッドを実装して動作を確認できたことが大きかったと思う。
https://github.com/nakagami/minipg/commit/d4ef01ae2867b267c4e4dca8550b9cfce0a61ccc
自分の慣れもあるだろうけど、python は、ビルトインのライブラリも充実していて、例えば、今回であれば
「hashlib と base64 と hmac 使えばできるはず!」
という予想ができて、逆に、python のライブラリを活用しても実装するのが困難な機能は、他言語で実装するのは無理だろう、という信念に基づいて実装できた。
Python は実行は遅いけど、検証のために「とにかく動くものを作る」のには、とても適していると思う。
まあ、正確に言えば、先に Python で実装して、
「なんか、自分書いたら勉強になるプログラミング言語で、まだ、この機能が実装されてないドライバーはないかなぁ・・・」
と探した結果なんだけれども。
Python で、PostgreSQL のドライバーといえば psycopg2 がデファクト・スタンダードだが、リファレンス実装として Pure Python の PostgreSQL ドライバーを書いておいて良かった・・・と思う今日この頃
2018-10-21 にあった tokyo.ex#9 というイベント
https://beam-lang.connpass.com/event/103873/
の LT で、
「elixir のPostgreSQL ドライバーに Pull Request を送ってマージされたよ、わーい」
という話をした。
PostgreSQL 10 で実装された scram-sha-256 authentication method に対応したものだ。
https://gist.github.com/nakagami/db99822eef3033acfbfe11241cc15547
この時のメインテーマは 「Jose Valim さんはいい人」だった。
これを、BeProud Advent Calendar 目線で語ると、elixir で実装する前に、自分が書いた Pure Python のPostgreSQL ドライバー https://github.com/nakagami/minipg に scram-sha-256 認証のメソッドを実装して動作を確認できたことが大きかったと思う。
https://github.com/nakagami/minipg/commit/d4ef01ae2867b267c4e4dca8550b9cfce0a61ccc
自分の慣れもあるだろうけど、python は、ビルトインのライブラリも充実していて、例えば、今回であれば
「hashlib と base64 と hmac 使えばできるはず!」
という予想ができて、逆に、python のライブラリを活用しても実装するのが困難な機能は、他言語で実装するのは無理だろう、という信念に基づいて実装できた。
Python は実行は遅いけど、検証のために「とにかく動くものを作る」のには、とても適していると思う。
まあ、正確に言えば、先に Python で実装して、
「なんか、自分書いたら勉強になるプログラミング言語で、まだ、この機能が実装されてないドライバーはないかなぁ・・・」
と探した結果なんだけれども。
Python で、PostgreSQL のドライバーといえば psycopg2 がデファクト・スタンダードだが、リファレンス実装として Pure Python の PostgreSQL ドライバーを書いておいて良かった・・・と思う今日この頃
韓国人女性プログラマーの思い出(総集編) [Python]
これは、 PyLadies Advent Calendar 2018 の8日目の記事です
https://adventar.org/calendars/3116
そういえば、昨年も PyLadies Advent Calendar 2017 に参加したんだった https://adventar.org/calendars/2462
今回も Python はあんまり関係なく、女性とプログラマーについて書く。
過去、何度か、前職で韓国人女性プログラマーと一緒に仕事をした話を書いた。
https://nakagami.blog.so-net.ne.jp/2010-06-18
https://nakagami.blog.so-net.ne.jp/2012-05-12
https://nakagami.blog.so-net.ne.jp/2016-09-12
ざっくり言うと、
- オフショア開発がブームになる前に、韓国人や中国人に日本に来てもらってソフトウェア開発をしようというブームがあった
- 韓国では、それに合わせて「日本語とプログラミングを学んで日本で働こう」みたいなブームがあった
- 韓国に「日本語+プログラミング」の専門学校がたくさんできて、そこで、日本の勤務先の斡旋もしてくれた
- 日本に働き始めると、リーマンショックで仕事がなくなった
ということで、転職を余儀なくされていた。
彼女たちの転職の条件は2つ
- 当面の給料が払われること
- 就労ビザを発行してもらうための会社側の手続きをしてくれること
将来にわたっての職の安定なんて考えてなかったと思う。
会社の規模や信用度によって、ビザの期限は1~3年だったが、そのビザが切れる前に再発行してもらうためには、受け入れ側の会社から提出しなくてはいけない書類があった。
信用も実績もない会社だったので、前回より多くの資料の添付を求められて、それでいて発給されるビザは1年だった。
(そして、現実問題としてアメリカ人と比べて韓国人の就労ビザ発給は難しかった)
会社も、やったことない手続きで大変だったと思うが、日本人なんか転職して来ないんだからしょうがない状況だった。
彼女らはJava とか PHP を書いていたけど、転職で Python を書くことになった。別にプログラミング言語は何でもよかったんだと思う。就労ビザさえ発給されれば。
僕が社会人になった頃の労働基準法では女性の深夜勤務は禁止されていたので、女性が深夜勤務することに抵抗があったが、彼女らはそんなのは気にしてなかった。
きっと、日本に来た時からそんな風に働いてたんだろうなぁ。
その時、結果として本人達にも会社にも良い結果になった。会社の業績はうなぎのぼりで大きくなり彼女らは引き続き日本で働けた。
「プログラマーって性別も国籍も関係なく、本人の努力と能力で未来が切り開ける職業なんだなー」
ってことを強く思った。
結局、東北の震災をきっかけに親に説得されて泣く泣く帰国したり、産休ののち出産して復職することなくやめたりして、あの時の韓国人女性たちは、もう誰もその会社に残ってない。
本人たちには不本意だったと思うが、良い思い出のまま会社を離れてくれて僕にとっては良かった。
https://adventar.org/calendars/3116
そういえば、昨年も PyLadies Advent Calendar 2017 に参加したんだった https://adventar.org/calendars/2462
今回も Python はあんまり関係なく、女性とプログラマーについて書く。
過去、何度か、前職で韓国人女性プログラマーと一緒に仕事をした話を書いた。
https://nakagami.blog.so-net.ne.jp/2010-06-18
https://nakagami.blog.so-net.ne.jp/2012-05-12
https://nakagami.blog.so-net.ne.jp/2016-09-12
ざっくり言うと、
- オフショア開発がブームになる前に、韓国人や中国人に日本に来てもらってソフトウェア開発をしようというブームがあった
- 韓国では、それに合わせて「日本語とプログラミングを学んで日本で働こう」みたいなブームがあった
- 韓国に「日本語+プログラミング」の専門学校がたくさんできて、そこで、日本の勤務先の斡旋もしてくれた
- 日本に働き始めると、リーマンショックで仕事がなくなった
ということで、転職を余儀なくされていた。
彼女たちの転職の条件は2つ
- 当面の給料が払われること
- 就労ビザを発行してもらうための会社側の手続きをしてくれること
将来にわたっての職の安定なんて考えてなかったと思う。
会社の規模や信用度によって、ビザの期限は1~3年だったが、そのビザが切れる前に再発行してもらうためには、受け入れ側の会社から提出しなくてはいけない書類があった。
信用も実績もない会社だったので、前回より多くの資料の添付を求められて、それでいて発給されるビザは1年だった。
(そして、現実問題としてアメリカ人と比べて韓国人の就労ビザ発給は難しかった)
会社も、やったことない手続きで大変だったと思うが、日本人なんか転職して来ないんだからしょうがない状況だった。
彼女らはJava とか PHP を書いていたけど、転職で Python を書くことになった。別にプログラミング言語は何でもよかったんだと思う。就労ビザさえ発給されれば。
僕が社会人になった頃の労働基準法では女性の深夜勤務は禁止されていたので、女性が深夜勤務することに抵抗があったが、彼女らはそんなのは気にしてなかった。
きっと、日本に来た時からそんな風に働いてたんだろうなぁ。
その時、結果として本人達にも会社にも良い結果になった。会社の業績はうなぎのぼりで大きくなり彼女らは引き続き日本で働けた。
「プログラマーって性別も国籍も関係なく、本人の努力と能力で未来が切り開ける職業なんだなー」
ってことを強く思った。
結局、東北の震災をきっかけに親に説得されて泣く泣く帰国したり、産休ののち出産して復職することなくやめたりして、あの時の韓国人女性たちは、もう誰もその会社に残ってない。
本人たちには不本意だったと思うが、良い思い出のまま会社を離れてくれて僕にとっては良かった。