Djangoをバージョンアップしたら AttributeError: module 'lib' has no attribute 'SSL_ST_INIT' が出た

Django 1.10.1 から 1.10.5にバージョンアップしたところ、サーバ起動中に以下のエラーが出た。

  File "/Users/omega/xxx/client.py", line 2, in <module>
    import requests
  File "/Users/omega/venv/lib/python3.6/site-packages/requests/__init__.py", line 84, in <module>
    from urllib3.contrib import pyopenssl
  File "/Users/omega/venv/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py", line 46, in <module>
    import OpenSSL.SSL
  File "/Users/omega/venv/lib/python3.6/site-packages/OpenSSL/__init__.py", line 8, in <module>
    from OpenSSL import rand, crypto, SSL
  File "/Users/omega/venv/lib/python3.6/site-packages/OpenSSL/SSL.py", line 118, in <module>
    SSL_ST_INIT = _lib.SSL_ST_INIT
AttributeError: module 'lib' has no attribute 'SSL_ST_INIT'

2つくらい前のバージョンが入ってたので最新のものを入れ直した。
これで無事サーバが起動した。

$ pip uninstall pyOpenSSL
$ pip install pyOpenSSL
$ pip show  pyOpenSSL
Name: pyOpenSSL
Version: 17.3.0
Summary: Python wrapper module around the OpenSSL library
Home-page: https://pyopenssl.org/
Author: Hynek Schlawack
Author-email: hs@ox.cx
License: Apache License, Version 2.0
Location: /Users/omega/venv/lib/python3.6/site-packages
Requires: six, cryptography

たまーに遭遇するエラー。pyOpenSSLは定期的にアップデートしたほうがよいかも。
深く調べる体力はなかった。

PyConJP2017に参加してきた

そういえば今年も参加していたので回想メモ。

今年のプロポーザルは通らず

今回もプロポーザルを2つ出したけど見事落選したので、登壇はしなかった。
今年は分析系が多かったですね。

pycon.jp

pycon.jp

1日目

Keynote聴きながら朝食。
今年の朝食は豪華だった。量が多くて食べきれなかった。

午前中は友人・知人と歓談して終了。

お昼はメディア会議という企画で喋って来ました。

pycon.jp

どういう企画かというと、

メディア会議は今年初めて開催する新しい企画です。 9/8(金)に2つのイベントを行います * ~あなたとメディア、新たな出会い~ * 登壇者とmeet up ~本を書きたいあなたと握手~
企画の狙いは「エンジニアとメディア企業との交流の場を設け、新しいPythonの書籍などを生み出すきっかけをつくる」です。

https://pycon.jp/2017/ja/events/media-meeting/

もうちょっと詳細を説明すると、
最近はじめて本を技術書を書いた人、出版社、編集者が集まって、
「実際執筆ってどうよ?」とか「なにが大変だったの?」みたいなのを話すという感じです。
今年から始まった企画なので手探り感有りましたが、弁当食べながら聞ける気軽さもあってか結構好評だったそうです。
来年もやりたいねーという話がでていたので、今度初めて本を出すよ!という人は手を上げてみると良いかも。

午後はブースを回ったあと、

プレゼンテーション:Pythonistaで始めるiOSプロトタイプ開発 | PyCon JP 2017 in TOKYO を聞いてきた。
objc_utilでネイティブオブジェクトを扱う方法とかObjective-Cでのアプリ開発を知っていないとよくわからない部分があって割とレベル高めだった。

Partyでは、色々な人が近状を見て声かけてくれたり(会社で無能上司達に潰されて心身壊した件)、療養していた間会ってなかった友人たちと久しぶりに話したり、久しぶりにPythonについてちゃんとした質問とか出来たり(会社でpython関係で突っ込んだ質問しても答えてくれる人がいないので)、とにかくとても楽しく過ごせました。

2日目

色々質問した結果深夜まで作業が捗ってしまったので昼過ぎに眠気抜けないまま会場へ。

前職の人たちとお弁当食べながら雑談。
とにかく眠かったのでコーヒーを飲んで作業してた。

プレゼンテーション:Pythonをとりまく並行/非同期の話 | PyCon JP 2017 in TOKYO は聴きたかったのでコーヒーをキメて最前列着。
最近だとasyncioの説明だけで終わる発表が多いけど、この発表はタイトル通り非同期IOについて体系的に説明した内容。
個人的には2017年にざっくりおさらいできてラッキー!という感じだった。
並行/並列処理とはなにか、というところから話してたのも理解しやすさに繋がったかも。

ここで力尽きてLT見ずに寝てた。


イベント終了後、pyconjpに参加してた友人とサイゼリヤで飲み食いした。


今年も楽しかったです。
ありがとうございました!来年も楽しみにしてます。

Python入門者向けハンズオン #6 のメンターをしてきました

Python入門者向けハンズオンのメンターをしてきました。
メンター参加は今回で3回目です。

python-nyumon.connpass.com


◼どういうイベント?

Pythonに興味があるけどまだ触ったことがない方向けにハンズオンを行います。 イベント冒頭にてPythonの概要に関する講義が行われたあと、 実際に手を動かしながらPythonの基礎を一通り体験して頂きます。 さらにその後、ご自身で簡単なアプリケーションを作って頂きます。

https://python-nyumon.connpass.com/event/62147/

プログラミング自体まったく初心者という人から、他の言語を10年以上触っているという人まで来ます。
今のところ、大体5か月に1回のペースで開催しています。


◼イベント内容は?

イベント内容は基本的に毎回同じで、以下の4つのパートに分かれます。

1. Python言語入門

  • Pythonのはじめかた、基本的文法
  • 標準モジュールの使い方
  • 3rd-partyの使い方
  • 仮想環境の構築方法

2. スクレイピング

3. オリジナルプロダクト開発

  • 今日学んだことを活かして好きなものを作ってみる
  • 作ったものの共有会

4. 懇親会

  • ピザやお酒、ノンアルコール、お菓子を手に取りながら歓談

イベントで使用する資料はGithubで公開しています。


◼ハンズオン #6 の感想・多かった質問

感想

今回は今までの中で一番メンターの人数が多かった(13人)ので、かなり手厚いサポートができたと思います。
参加者が36人だったので、1メンターあたり2.7人の参加者が付くという計算になります。
この内、多言語経験者が半数ほど居たのでもくもくと進めてる人が多く、メンターへの質問待ちが発生する状態は見られませんでした。
アンケートでの満足度も高かったようで嬉しい限りです。

また、3回目のメンターということで初回に感じていた緊張はなくなりました。
(資料内容も大きく変化していないというのもある)

今回結構多かった質問

Anacondaをインストールしていたので、venvモジュールと衝突するというものでした。

この対処法には幾つか方法があるのですが、
今回は先に進まないとオリジナルプロダクト開発に進めないということもあり、

  • Anacondaをマシン上から削除するか、
  • 諦めてcondaコマンドで仮想環境を作る

という方法で対応しました。
他のメンターの方とも相談しましたが、
まずはcondaでやってもらい仮想環境とは何かを知ってもらう、という方に切りました。
(venvモジュールについてはイベントで解説&資料に使い方が書いてありますしね)


◼メンターを3回経験して学んだこと

毎回学ぶことはたくさんあります。
今回は、メンターを3回やってみて何を学んだことのなかで、
初学者の方からエラー系の質問がきたときにどうしてるかを脳内整理のためにまとめてみました。

よく「資料にあるコマンドを入力したらこうなった」という質問をされることが多いです。
この質問がくるとき、以下について一緒に確認するようにしています。

  • どういう命令を実行させようとしているのか
  • エラーとなる原因は何なのか
  • 何故実行が成功/失敗するか

まず最初に、
そもそも、今どういうことがしたくてこのコマンドを実行しているか、という部分を説明する。
ここがわかっていないと、後で「これってなんでこの結果返ってくるんですか?」という質問が来ます。

次に、
エラー(または例外)の原因を一緒に探る。
Stack Traceの読み方、表示内容の意味を説明します。
"xxxError:.." の意味を説明して、エラー発生場所を一緒に確認します。

最後に、
失敗の原因について説明します。
成功したコードと失敗したコードの差を見比べます。
ここで、ミスしない方法とか(lintツールとか)、公式ドキュメントを紹介したりすることもあります。


こんな感じでやってます。


◼おわりに

毎回メンター側も学ばせてもらっています。
今後も予定が合えば参加していきたいと思います。

最近、Python Boot Campというイベントを各地でやっているみたいなので、Python入門者向けハンズオンがないときはそちらへ参加してみるのもアリです。
Python Boot Camp(初心者向けPythonチュートリアル) — PyCon JP

そういえば、復職しました

知っている人は知っていると思いますが、9月いっぱい休職していました。


転職先でまぁ予想以上に問題があったので、耐えて頑張りすぎた結果心身ともに壊し、潰され、望まなかったけど休職を宣告されたという感じです。
まぁ会社がとれる一番簡単な方法が休職だったのでしょうと私は思います。

以下、私が潰れるまでの大雑把な流れ:
5月・・・チームの雰囲気がおかしいことに段々気付き始める。
6月・・・1 on 1やチームMTGなどでチームの問題を指摘したり、どうしたら改善できるかを考えて伝えたりし始める。この月に、一番頼れる上司が転職する。
7月・・・この頃はまだギリギリがんばれていた。が、変わらずチームの空気は悪く、技術的にも人間的にも頼れる先輩や上司がチームに一切居ないという状態が続く。
8月・・・今までの負債、ストレス、根本的解決に進まない絶望感と不信感が積み重なり、パフォーマンスが著しく低下。マネージャに相当するポジションの人はいたが、私の状態に気づいているのか居ないのかケアは特に何も無し。そもそも原因の一つがその人にあったのでコミュニケーションを取ることやあらゆる関連のある情報を拒否。時既に遅し。
9月・・・休職
10月4日・・・復職


というかんじ。
復職した後でかなり組織変更あったみたいで、まぁパット見良くなった気がしています。
でも何度も裏切られてきたので、正直なところ不信感はまだありますし、期待していません。(自分を守るための手段の一つ)


振り返って考える問題点

  • マネージャ経験が初ということをチームメンバーに周知していなかった
    • なんでこの人仕事してないんだろう?なぜいつも的はずれな言動をしているんだろう?みたいな空気がチーム内で蔓延するとアウト
    • 初めてなので温かい目で見守ってやってね、くらい一言入れたらまだ違ったかもしれない
  • マネージャ素人をマネージャにした人間がその人の様子を都度見て教育するということが無かった
    • 部下を潰すという、今回みたいな問題が発生したあとでは遅いんですよ
  • マネージャなどの名のあるポジションに対する意識・期待をチームメンバー全員で合わせていなかった
    • 結局あのポジションの人は何をやってくれるの?自分は何をすればよいのか?という認識がバラバラだった
    • 期待する仕事の認識が違うんだから、そりゃフラストレーションが溜まって嫌な空気が蔓延しますよ
  • 全体的に余裕がない
    • 金を稼がないと、競合に打ち勝たないと、早く新機能リリースしないと、というのが毎日で正直皆に余裕が無い。
    • 余裕がないので質問しづらい、一緒に調べたり問題解決する余裕が無い。

人には得意不得意があるのはよく理解していますよ。私だってできないことの方が多い。
でも、それがずっと成果を残せないことや、周りに迷惑をかけるような言動をすることの免罪符にはなりません。
良い個性なら受け入れます。多少の悪いクセも受け入れます。
でも会議時間に関係のない話をして皆に迷惑かけるような人間は正直一緒に働きたくありません。
あと、心身ボロボロになりかけていたときに問題のマネージャに最後の助けを求めましたが、「頭を下げる絵文字1つだけしか返してこなかった」ときは絶望しました。こんな人間が、今まで私が一生懸命状況を良くしようとしてきたチームの上司だったのか、と思いました。




以下、今回学んだこと:

人を無能にさせる配属、無能上司などの障害にあった場合、

  • 問題点を本人に指摘する
    • このときチームメンバーからのヒアリングも忘れないこと。やっておくと状況を知らない人間への現状説明するときの裏付けや信憑性を増すことが出来る
  • それでも改善が見られない場合は上に提言、根本的解決に向ける
    • 無能である決定的な証拠を集めておく(私の場合は別の人やチームメンバー、別部署からも同様の被害に合っているという話がでたのも強かった。)
    • 主に役員、人事に事情を説明する (私のときは人事が居なかったので2~3回役員に相談したけど動いてもらっている気配がなく、さらに別の社員に「"よくわからないけど" omegaさんが困っている」と言っていたという話を聞いてしまって絶望した。これがダメ押しの原因かもしれないくらい。社内評判が悪かったり動かない人に頼ってはいけない。)
  • それでも動かない場合は徹底的に潰しに行く
    • トップ周辺に話をします。専門家も使う。ここで駄目なら会社が駄目ということなので、さっさと見切りを付けること。

この時、休職扱いになると以下の金銭面での負債がかなり発生するので出来る限り避けること:

  • 医療費がかさむ
    • 大病院に行くときは紹介状無しだと初診で5000円くらいかかるので、産業医が来るタイミングを逃さずに紹介状を書いてもらうこと。または先に小さい病院へ言って紹介状を書いてもらうこと。
    • IT健保ならば、2万を超過した分は負担してくれるようだ。にしても高いけど。
  • 社保その他控除されなかった分、次月会社に支払わなければならない(平均8~10万)
  • 傷病手当は給与1日あたり6割*欠勤日数分だけ支払われる
    • しかし住民税など引かれた金額でくるので雀の涙である
    • そして上に書いた会社に支払う金で大体はほぼ残らない

また、1か月以上の休職がどういう扱いになるのか確認しておくこと:

  • 私病扱いの場合
    • 休んでいた期間は欠勤扱いになります。
    • つまり、年次有給休暇に関わってきます。今の会社は10月から年次が変わるのですが、私の場合は5月入社で9月はまる一ヶ月「望まぬ休職」を扠せられた結果、年次有給休暇取得条件である8割出勤を満たすことが出来ませんでした。その為、就業規則に則って2018年度は「有給ゼロ」になっていました。
    • 私の場合、「労働時間の調整という話をすっ飛ばして強制的に休職させられたこと」「休職した場合に給料や有給がどうなるのか一切の説明を会社から受けていなかったこと」「会社が酷い状態だと認めた環境で潰された挙句、丸1年有給無しで働けというあまりにも酷な対応」をされたため、強く交渉しました。結果として特別休暇としていくらか付与されました。11日全部ではないですが、交渉しなかった世界線の有給ゼロ日労働よりは遥かにマシです。普通に働けていたら11日まるまる付与されていたはずなので、その点に関しては一生忘れませんが。
  • 傷病扱いの場合
    • 会社都合なので欠勤扱いにはなりません。
    • 労災申請ができます。私病の場合、健康保険を使って傷病手当申請で給与の約6割をもらえますが、労災の場合は全額もらえたりします。
    • まぁ労災は会社にとってはかなり都合が悪いので滅多に労災認定はしてくれません。今回の私の例のように何も言われずに私病扱いにされることがほとんどです。
    • 会社の中で、そういう問題を取り扱う職種の人と仲が良ければよきに計らって労災申請してくれるという事例を聞いたことが有ります。まぁ滅多にないことだと思います。
    • あと、精神的な問題での労災はかなり審査が厳しく、結果が出るのも半年〜1年はかかるので、もしやるとしたら気力・体力を十分に保ち、状況証拠をしっかり集めておかないといけません。結構大変ですが、通った事例もそれなりにあるので一度目を通しておくと良いです。


都度できる限り問題を指摘したり、こうしたら良いのではという解決方法を提示してみたりしたのですが、
良い方向には向かず(そもそも努力する気が無かったのかもしれない)、
相応のポジションから相談してくださいと言ってくれたのは良いのですが、基本は「話を聞くだけ」「病院送り」の2点がしか無く、
根本的解決(問題のある人物または組織構造を調整して)という措置を取らなかったため、
「私は潰され」ました。


復帰後はまともな人達とお仕事できているので大変快適です。
技術的に面白いこともできていますし、やはり大事なのは人だなぁと再認識しました。

会社側も「あの状況はとても酷かった」という認識でいるようで、再発しないようにと色々配慮して下さいました。
まぁ、時既に遅しなんですけどね。感謝はしています。


ただ、私を潰した根本の人々からはなんのアクションもないのがびっくりします。
いくら会社が役職をおろしたり減給しても、私には何の特にもならないので、私が今回の件で潰されて損失した、

  • 経験
  • 時間
  • 金銭
  • 心身の健康

などは、私を潰した人々から何らかの形できちんと返していただきたいですね。

会社が何かを返してもそれはあくまで会社からの返還。
本人が行った罪は本人が贖罪することでしか意味をなしません。

普通はなにかしらのアクションがあると思うのですが、
復職してから1か月経っても一切ないので、上の人間には「反省している」と言っても、本当に悪いとは思っていないのでしょうね。
私はそう受け取りました。内外評判悪いのもうなずけます。


ひとまず、もう彼らには一切の信頼も信用もないので、
これ以上私のような被害者が増えないように害のある行動をしないで欲しいし、会社側も、また意味不明な言動をした場合に抑制力をうまく働かせて欲しいなと思います。


いやー、9月一杯休養してたときに色々見聞きしたり、予算削ったけど前々から予定してた旅行に行ったりしてたらいつの間にか大丈夫になっており、だいぶ精神的に強くなりました。
一番やばかった時期の手の震え、顔面の筋肉のこわばり、嘔吐、胃腸の痛み、動機、胸の苦しさ、呼吸が薄い感じがするやつ、頭痛、勝手に涙が出る等の症状は全く出なくなり、ストレッサーをみても大丈夫になりました。
まだ胃腸はおかしいけど、デリケートな部分なんでちょっとずつ治していくしか無いですね。

今の状態で5月に戻ったらまずこんな事にはならなかっただろうなーと思います。
駄目なものは駄目、他人に期待してはいけない、社則は基本的には守ってくれない、パワハラ発言は然るべきところに報告する、めんどくさいおじさんは放っておく。
まぁ、色々と勉強になりました。勉強代として損失をなかったことにはしませんがね。



今回の件で、
北海道の友人知人、東京のコミュニティの友人たち、会社の人たち、勉強会やカンファレンスで知り合った人たち
様々な人達から心配の声をかけていただいたり、転職のお誘いをいただいたり、法的措置のとり方や精神病、問題のある上司との戦い方などを教えてもらいました。
結局はだめになってしまったんですけれど、
皆様のおかげさまで、今はとっても元気にやっております。

本当に、本当に感謝してもし尽くせないです。

いっぱいお食事誘ってもらってたけどいけないのが本当に辛かったです。
おちついたら緒にごはんいきましょう! : )

「いちばんやさしいPythonの教本」が出版されました

先月、前職時代に同僚と共著で執筆した「いちばんやさしいPythonの教本」が出版されました。
実は8月に出版されてました。あれから1か月程経ったのか。早い。



いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで (「いちばんやさしい教本」シリーズ)

以下、本書の簡単な紹介

今年はいろんなPythonの入門本が出てますが、「いちやさPython*1」は、本当に初めてプログラミングをする人向けの本となっています。

プログラミング初心者向け本

Python・エディタのインストールから、ターミナルとは、コマンドとはなんぞや〜というところも解説しています。
前半はPythonの基本文法、後半はbot開発やbottle*2を用いた簡単なWebアプリケーション開発について解説しています。

「解説パート」と「実践パート」からなる講義形式

各章、「解説パート」と「実践パート」の2構成で成り立っており、講義のような形式をとっています。
まず最初に解説パートで用語や概念の解説をし、次の実践パートで「解説パート」で出た新しい要素を用いながら実際に動作するプログラムを作っていく、という流れになっています。

フルカラーで解説図が豊富

本書内のデザインはフルカラーなので、重要ポイントがパッと見でわかりやすくなっています。解説図が多く挿入されているのも特徴です。


初心者向けだけど、Pythonでできることを幅広く解説している一冊になったなぁと思います。
この一冊を手に取った人が、プログラミングを楽しみ、ものづくりの可能性が広がった!とちょっとでも思って貰えたら嬉しいなー。

*1:本書タイトルの「いちばんやさしいPythonの教本」の略称。

*2:ここに脚注を書きます Bottle: Python Web Framework — Bottle 0.13-dev documentation

今年もage++


先々週のことですが、今年もまた一つ加齢しました。

毎年プレゼントを頂いて恐縮の一方なので、今回は1箇所にだけひっそりwishlistを公開しただけなのですが、ありがたいことに今年も何人もの方からお祝いの品をいただきました。

1. データ分析プロジェクトの手引: データの前処理から予測モデルの運用までを俯瞰する20章
みことさん、プレゼント贈ってくださりありがとうございました!
ちょうど今必要とする範囲の知識が書かれた本ということで、ガンガン読み進めています。

2. 筋トレが最強のソリューションである マッチョ社長が教える究極の悩み解決法
カレーメシ先輩、筋肉本ありがとうございました!
読了しました。
とりあえず筋トレはじめました。背筋が良くなりつつあります。

3. マイクロサービスアーキテクチャ
4. 限定酒 ねのひ 桜酵母のお酒 「なないろ桜」 純米 500ml
みっひゃ氏、2つも贈ってくれてありがとうございました!
今年の目標である設計力向上、この本を読んでやっていくぞい。お酒は花見しながら呑むぞい。

5. 井村屋 チョコえいようかん55gx5本
6. 108ピース ジグソーパズル 地獄シリーズ
jp_taku氏、プレゼントありがとうございました!
えいようかん、ウマイんだよな。(今回はもしもの時のために保存しておきます)
昨年に引き続き無地のパズルを贈られましたが、108ピースでもまた挫折しそうです。今度白いの頑張ってみます(白目)

7. THE IDOLM@STER CINDERELLA MASTER 029小早川紗枝
8. THE IDOLM@STER CINDERELLA MASTER 039塩見周子
うらたく氏、ドンピシャ推しメンのCDありがとうございました 🙏
二人の限定SSR再販しないですかね〜(切実)

あとは実家から大量のご当地レトルトカレー、私の大好きな爽健美茶、クオカード、ひつじのケーキとクッキーが届きました!
今年も多くの方々からお祝いの言葉と贈り物をいただけて幸せいっぱいです。
来年度は新しくやることが多くありかなりバタバタしそうな一年ですが、
やっていきの気持ちで推して参ります。

年末年始に読んだ本

年末年始に積読 or 途中までしか読んでなかった本を読み進めた。

  • Pythonからはじめる数学入門
    • 数式をPythonコードに落とすときにどう書くかという練習になったのでまぁまぁ良かった。
  • Unixという考え方
    • Unixの哲学的なものを知るにはちょうどいいんじゃないか程度に思っていたが、日々のシステム設計をするときの良い指標の一つにもなった。これが正解とは言わないが、役立つ考え方がコンパクトに詰まっている。
  • インフラエンジニアの教科書
    • 今いる会社は受託メインだし今後もオンプレで本番サービス動かすことないと思うが、クラウドと自前の両方のコスト感覚を知っておくと後々の仕事で役立つ機会は多いので読んだ。インフラエンジニアって何してるんだろうという人が最初に読むと良いかな。
  • Effective Python, PythonCookBook
    • 2016年の復習として。初級から中級に上がるときに読めばちょうどいい。CookBookは「問題と解決方法」という流れで書かれているが、解決方法がユニークだったり自分では思いつかなかった発想が多く載っていて飽きが来なかった。


だいぶ消化できた。技術書以外だと4冊読んだ。連日ゆっくり本を読める時間があるのはとても嬉しいし、贅沢だ。
2017年は特にこれといってすぐに大きな役立ち方はしなさそうだが長く使える知識を増やしていきたいところだ。
そういえば年末年始は本とコーディングとアニメと故郷の友人たちとの会合に時間潰していたら年が明けていた。
そして美味しいものを食べて体重が増えた。運動も頑張ろう。