So-net無料ブログ作成
  • ブログをはじめる
  • ログイン
前の10件 | -

動く疑似コードとしての 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 ドライバーを書いておいて良かった・・・と思う今日この頃

コメント(0) 
共通テーマ:日記・雑感

Firebird 4.0 のTimeZone サポート [Firebird]

これは、 Firebird Advent Calendar 2018 https://qiita.com/advent-calendar/2018/firebird の11日目の記事です。

長いこと放置されているように見えたのですが、
つい二週間ほど前に、タイムゾーンサポートの Pull Request が master にマージされました。
まだ、足りないところもあるのかもしれませんが、もう後には引けないので
Firebird 4.0 ではタイムゾーン付きの time, timestamp が使えるようになります。
ドキュメントはこちら↓
https://github.com/FirebirdSQL/firebird/blob/master/doc/sql.extensions/README.time_zone.md

以下、最新の master をビルドして isql で実行してみた結果です

CREATE TABLE tz_test (
    id INTEGER NOT NULL,
    t TIME WITH TIME ZONE,
    ts TIMESTAMP WITH TIME ZONE
);
INSERT INTO tz_test (id, t, ts) values (1, '12:34:56', '1967-08-11 23:45:01');
select * from tz_test;

          ID                                              T                                                        TS
============ ============================================== =========================================================
           1 12:34:56.0000 Etc/UTC                          1967-08-11 23:45:01.0000 Etc/UTC


SET TIME ZONE 'Asia/Tokyo';
INSERT INTO tz_test (id, t, ts) values (2, '12:34:56', '1967-08-11 23:45:01');
select * from tz_test;

          ID                                              T                                                        TS
============ ============================================== =========================================================
           1 12:34:56.0000 Etc/UTC                          1967-08-11 23:45:01.0000 Etc/UTC
           2 12:34:56.0000 Asia/Tokyo                       1967-08-11 23:45:01.0000 Asia/Tokyo


コメント(0) 
共通テーマ:日記・雑感

韓国人女性プログラマーの思い出(総集編) [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 を書くことになった。別にプログラミング言語は何でもよかったんだと思う。就労ビザさえ発給されれば。
僕が社会人になった頃の労働基準法では女性の深夜勤務は禁止されていたので、女性が深夜勤務することに抵抗があったが、彼女らはそんなのは気にしてなかった。
きっと、日本に来た時からそんな風に働いてたんだろうなぁ。

その時、結果として本人達にも会社にも良い結果になった。会社の業績はうなぎのぼりで大きくなり彼女らは引き続き日本で働けた。
「プログラマーって性別も国籍も関係なく、本人の努力と能力で未来が切り開ける職業なんだなー」
ってことを強く思った。


結局、東北の震災をきっかけに親に説得されて泣く泣く帰国したり、産休ののち出産して復職することなくやめたりして、あの時の韓国人女性たちは、もう誰もその会社に残ってない。
本人たちには不本意だったと思うが、良い思い出のまま会社を離れてくれて僕にとっては良かった。

コメント(0) 
共通テーマ:日記・雑感

情報系多能工 [日記]

これは、BeProud Advent Calendar 2018 https://adventar.org/calendars/3338 の8日目の記事です。

私が最初に弊社ビープラウドの受託開発案件に参加したときに一番驚いたのは、人員の入れ替えが臨機応変に行われていたことだった。
お客さんの受け入れ態勢ができてないとか、仕様が確定していないというときは、
「じゃ、別の仕事してましょうかね」
ということで別案件をやって、再開できたときには別の人がアサインされることもあるし、間に合ってないときに人が一時的に投入されたりする。

その時点からさかのぼること10年前の受託開発の経験では、最初に3人*3か月=9人月で契約できたら、3人を3か月拘束して人を入れ替えることはないし、お客さんの都合で納品を伸ばしたい、開発を一時サスペンドしたいという場合も、次の仕事がアサイン済みであることとか、資金繰り(予定した期日の入金が必要)とかで臨機応変に人のアサインを組み替えるとか、納期の延期ができなかった。
年度はもちろんのこと、クォーターごとの売り上げ計画にぶれがあることを嫌ったからだと思う。当時は、バブルの直後ぐらいで、まだその会社も遠い将来の上場を目指していたから、計画と実績がずれるのは許されなかったのかな。

引き合いが来た時の、お客さんへのヒアリングは、元職では課長か部長が、(もう長いこと開発から離れているのに)わかったふうで微妙な要件で契約を決めてくるので、円満に納品するのが苦しい時も多かった。
(元職では、営業という職種がいなかったのがせめてもの救いかな)

ビープラウドでは、開発者がヒアリングすることもあるし、その案件を受注したら別の人が担当することもある。(課長や部長の一存でなく)相談して無理そうなら断ることもある。
思い返してみると、元職では課長の方針・・・という名の趣味に案件が左右されてた。
ビープラウドでは、役員以外の役職はなく、役割も固定されていなくて、僕自身も、コードを書く時もあれば、コードを書かずに要件、仕様から作業を切り出して開発者にチケットを振ったりコードレビューをしたりする時もある。今年は、20年振りくらいに一人開発案件もやった。
最近、 PyQ スタンダードプランをご契約のお客様の質問に、たまに回答している。

これは製造業や建築業で話題の「多能工」だなって思う。

- 資金繰りに余裕がある
- 製造業的な生産計画にこだわらず実利をとる
- 役職や部署による情報格差をなくす (by slack)
- 開発案件が Python (+Django)で標準化されているので、人の入れ替えがしやすい

というあたりが、それを可能にしたポイントなのかなと思う。

僕は、このやりかた、受託開発の会社としては、すごく変わっていると思うんだけど、みんなはあまりそう思ってないのかも。

コメント(0) 
共通テーマ:日記・雑感

Firebird データのバックアップとリストア [Firebird]

これは、 Firebird Advent Calendar 2018 https://qiita.com/advent-calendar/2018/firebird の5日目の記事です。

https://nakagami.blog.so-net.ne.jp/2018-12-02 にインストールについて書いたのですが、
最近、Firebird を使ってみたという日本語の記事を見ないので、
もしかしてバックアップとかリストアとかの手順についても、ロストテクノロジーなの?
・・・ということに気づいて、ごく基本的な Firebird のデーターベースのバックアップとリストアにつても書きます。

【サービスを停止してデーターベースをコピーする】
Firebird は、1ファイル=1データーベースなので、データーベースファイルをコピーすることで、バックアップ
することができます。
コピーでバックアップする場合は、 firebird のサービスは止めておいたほうが良いでしょう。
sudo systemctl stop  firebird3.0


ファイルをどこかにコピー

sudo systemctl start  firebird3.0


【オンラインでバックアップ、リストア】

gbak というコマンドで、バックアップとリストアができます。
gbak を使うと、firebird のサービスを動かしたままバックアップとリストアができます。

バックアップ
sudo gbak -b /var/firebird/myfirst.fdb /tmp/myfirst20181205.fbk

リストア
sudo gbak -r /tmp/myfirst20181205.fbk /var/firebird/myrestore.fdb


同じファイルにリストア
$ sudo gbak -r /tmp/myfirst20181205.fbk /var/firebird/myfirst.fdb
gbak: ERROR:database /var/firebird/myfirst.fdb already exists.  To replace it, use the -REP switch
gbak:Exiting before completion due to errors

と出てしまうので
sudo gbak -r /tmp/myfirst20181205.fbk /var/firebird/myfirst.fdb -rep

と -rep オプションをつけます
コメント(0) 
共通テーマ:日記・雑感

Ubuntu に Firebird3.0 をインストール [Firebird]

これは、 Firebird Advent Calendar 2018 https://qiita.com/advent-calendar/2018/firebird の2日目の記事です。

2018年の Firebird 的な大きな出来事と言えば、個人的には Ubuntu 18.04 LTS のパッケージで Firebird 3.0 がインストールできるようになったことです。
Ubuntu 16.04 は、Firebird 2.5 でした。

Ubuntu 17.10 の頃には Firebird 3.0 のパッケージが用意されていたのですが、やはり、LTS で使えることには大きいと思っています。

というわけで、Ubuntu で、Firebird を使うまでの手順を以下に書いておきます。

【Firebird3.0のインストール】

インストールの途中で、SYSDBA ユーザーのパスワードを聞かれます。

$ sudo apt install firebird3.0 -y

Password for SYSDBA:
SYSDBA のパスワードをあとで変更するのは
$ sudo dpkg-reconfigure firebird3.0-server
でできます。


Firebird のコマンドツールは isql という名前ですが、 Debian/Firebird では、isql-fb という名前になっています。

【データーベースを置くディレクトリの作成】

Firebird では、1データーベース=1ファイルの構成になっていて、Ubuntu では、そのファイルが firebird ユーザーで読み書きできる権限が必要です。
どこでもよいのですが、今回は /var/firebird ディレクトリを読み書きできるようにして、そこにデーターベースファイルを置くようにしてみます。

$ sudo mkdir /var/firebird
$ sudo chown firebird:firebird /var/firebird
$ ls -l /var |grep firebird
drwxr-xr-x  2 firebird firebird 4096 Dec  1 07:20 firebird


【データーベースの作成】

/var/firebird に myfirst.fdb というデーターベースを作ってみます。下記XXXXは、インストール時に設定したパスワード

$ isql-fb -U sysdba -P XXXXX
Use CONNECT or CREATE DATABASE to specify a database
SQL> create database 'localhost:/var/firebird/myfirst.fdb';
(Ctrl+D で isql-fb を終了)

【データーベースへの接続】

既存のデーターベースに接続します。

$ isql-fb -U sysdba -P XXXXX localhost:/var/firebird/myfirst.fdb
Database: localhost:/var/firebird/myfirst.fdb, User: SYSDBA
SQL>

【サーバーのコンフィギュレーション】

/etc/firebird/3.0/firebird.conf にサーバーの設定が書かれています。
例えば、 localhost 以外からの接続を許可したい場合は、このファイルの
RemoteBindAddress = localhost
この部分を書き換えます
コメント(0) 
共通テーマ:日記・雑感

RHEL8 とUbuntu のPython2.7 [Python]

RHEL8.0 の beta がリリースされたそうで、python3.6 と並んで python2.7 (も、まだ)サポートされるようだ。

https://developers.redhat.com/blog/2018/11/14/python-in-rhel-8/

yum install python3
で python3.6 が
yum install python2
で python2.7 がインストールされる。
それぞれ「python3」「python2」というコマンドで 実行できるが「python」を実行しようとしてもコマンドがないと言われる。

alternatives --set python /usr/bin/python3

とすると python で /usr/bin/python3 が起動されるけど、そういう使い方は推奨しない、とのこと。

Ubuntu の次のLTS は20.04 だと思うので、次の LTS にはpython2.7 は含まれないだろうが、Ubuntu 18.04 が 10年サポートされそう
https://gihyo.jp/admin/clip/01/ubuntu-topics/201811/16

ディストリビューションに付属する python2.7 であれば、セキュリティパッチは開発して当て続けてくれるだろう。

みんな早く python3 に移行して欲しいなぁという思いもありつつ、既存のものは python2.7 で使えるなら、できればこのままにしておきたいというものもあり、悩ましい。
正直な感想を言えば、ちょっと安心した。

コメント(0) 
共通テーマ:日記・雑感

社会の(そして自分の)常識の変化 [日記]

クィーンの映画が日本で公開されたらしい。
田舎の子で洋楽に触れる機会もなかった僕が、フレディー・マーキュリーを
認識したのは、ゲイでエイズであることをカミングアウトしたときだった。
そして、すぐに亡くなった。

いかにもといういでたちであったが
「ほんとにゲイだったのか、気持ち悪い」
と感じたことを思い出した。
エイズは、今よりだいぶ不治の病で不道徳な人に与える神の罰的にとらえている人も多かったと思う。

それから27年たって、その映画の宣伝やらを見てみると、自分の嗜好は異なるが、そういう人もいるということを自然に受け入れられて、むしろ、気持ち悪いと思ってしまっていた過去の自分が気持ち悪かったなと思い出している。

なんかきっかけがあったわけじゃないから、なんか不思議だ。

カトリックの世界ですら(まだ同性婚を認めるところまでは言ってないが)同性愛者に対する見方も変わってきているのって、人類史のなかですごいことなんじゃないかな。

コメント(0) 
共通テーマ:日記・雑感

祖父が100年後に生まれていたら [家族]

最近、祖父が 100年後に生まれていたら・・・ってことを考える。
農家の三男として生まれ(確か四男三女)尋常高等小学校を出てから出稼ぎに出るところから始まり、最後は生まれた村の土地を開墾して農家になった。

僕は三世代同居で高校卒業して大学に進学するまで一緒に暮らしていた。
柔和で働き者で、昔話にでてくる良いお爺さんのような人だった。

娘が、祖父と100歳差で現在高校2年生。
もし、100年後に、同じ土地で祖父が生まれていたら、地元の農業高校を来年卒業という状態なんだろう。
田舎の高校を卒業して働きに出て、真面目に働いて一代であれだけの財を成すのは至難の業だろうなぁ、と思ってしまう。

祖父は、2度の世界大戦も世界恐慌も二・二六事件の時代も生きてきたが、漠然と「真面目に働けば、今日よりは明日のほうが良くなるだろう」という気持ちはあったんじゃなかろうか。
ついこの前まで、みんながそれなりに頑張ればそこそこに幸せになれる世の中だった気がするのだが、今は、どれだけ教育を受けても、安心して暮らせるとは限らない。

部長が、一般職の出してくれたお茶を飲み、新聞を読んでいた時代って、どうして会社が儲かっていたんだろう?

社会が高度化してしまって、それは仕方のないことであると思うが、この100年で随分と貧しく将来の見えない世の中になってしまったなぁ。
どんな世の中になっても、僕も子供たちも頑張って生きていくしかないんだけど。

コメント(0) 
共通テーマ:日記・雑感

Plone Conference 2018 Talks Day2 [Python]

日本で行われた Plone Conference 2018 に参加した。
国際カンファレンスなんて色々ハードル高くて無理!と思っていたが、terapyon のおかげで出られた。ありがとう。

- トレーニング2日
- トーク3日
- スプリント2日

のうちトークの 1.5日(2日目と3日目の午前)だけ出られた .

分かっていたことではあるが、しみじみ
「英語、何喋ってるか全然わからんなー」
と思った。
他の日本人は、みんな英語できて偉いなーと思う。偉いなーとは思うが、自分は生い先短いのし、英会話はあきらめた。
ただ、リスニングに比べたら読むのは大分マシなようで言っていることに比べるとスライドに書いてあるは大分わかった。
英語の読み書きはもうちょいできるように頑張りたい。

Jim Fulton のトークは、スライドに説明の記載があって ZODB がツリー形式のオブジェクトデーターベースだ、ということも知っていたので何の発表かはわかった。
http://jimfulton.info/talks/plone-2018

10年前に、Jim Fulton のキーノートセッションを僕が直接聞くことがあるなんて想像できなかった。
Jim Fulton は昔と変わらず新しいことにチャレンジしているようで、Jim Fulton が genvet, async wait, react という言葉が出るとは思わなかった。
ちなみに、react の話題が多かった。

Python3 で動くようになるようだし、しばらくしたら Plone をインストールして久しぶりにちょっと動かして見ようかな、と思った。
コメント(0) 
共通テーマ:日記・雑感
前の10件 | -