歩いたら休め

なんでこんな模様をしているのですか?

【メモ】PyCon 2017で勉強になったこと、これから勉強すること

プログラミング言語PythonのカンファレンスPyCon JP 2017に参加してきました。そこで勉強になったこと、これから勉強したいことをまとめた個人的なリストです。

いろいろなセッションの内容については、既にいろいろな方が素晴らしい記事を書いているので、私は特に包括してまとめるつもりはありません。そういう目的であれば、特に以下の記事がおすすめです。

qiita.com

ベンリに使おう変数アノテーション - typing.pyとの楽しいお付き合い

一言でまとめると「Python3.6から変数アノテーションが導入された。それを使って型を使って安全に(バリデーションした上で)jsonを読み込むライブラリを作った」という発表です。Pythonの最新機能と、Python自体の機能をハックして、言語設計者が考えている以上に便利にアノテーションを使うという楽しさのある発表でした。

speakerdeck.com

私はPythonの型アノテーションが導入された時に、「プログラムを安全にするための型」を理解したくてHaskellを勉強し始めたのですが、実際に簡単なCLIを作ろうとした際にJSONを読み込む手間が煩雑すぎて(たしか、jsonから値を取る場合に全てMaybe型で取得され、明示的に処理する必要があるような感じ)、結局Pythonで書いてしまったことがあります。

それに比べると、読み込み時に指定の値が入っていない場合にtypedmarshalや、その元ネタのGo言語の仕組みは分かりやすくて良いなと思います。

ただ、実際にjsonオブジェクトのバリデーションを行うとき、私は今のところCerberusライブラリを使うと思います。こちらは文字列の正規表現や、数値の範囲のチェックまで行えるためです。

qiita.com

もし「型」で同じようなことをやるにはどうすればいいのでしょうか?私は詳しくないのですが、依存型という概念でリストの長さも制限できる言語があるらしく、同じような用途に使えるんじゃないかと思います。もしPythonでやるなら、辞書をアノテーションに渡す形式にしたほうが分かりやすい気もしますが。

数理最適化モデラー(PuLP)チートシート

2日目のポスターセッションも素晴らしい展示が多く、特に数理最適化(数理計画)のこの発表が良かったです。

qiita.com

私は、同僚の書いたpulpを使った雰囲気でレビューしている(他にPythonに詳しいプログラマーが少ないんです…)ので、いろいろ質問してしまいました。

いや、もちろん全く理解していないのではなく、「目的関数と制約条件を定義して〜」みたいなレベルの話とかプログラミング一般の話(インプットアウトプットが妥当かとか、読みやすいコードなのか)はできるのですが、「どういう問題が難しい」とか「モデリングが妥当か」みたいなところはほとんど話できていません。

今日から使える!組合せ最適化 離散問題ガイドブック (KS理工学専門書)

今日から使える!組合せ最適化 離散問題ガイドブック (KS理工学専門書)

この本を含め、数冊おすすめしていただきました(上記のQiitaの記事に書いてあります)。ポスターセッションで話をした感じでは、「どういう問題が難しい」みたいな話は、NP困難などの話が出て来るようなので、普通のプログラマーとしての力を上げていけば議論できるようになる気がします。

私と同じ時間に質問していた方が「pulpって分散処理できるんですか?」という質問をしていて、「pulpPythonから商用やフリーの最適化のソルバーをラッピングしているだけなので、対応しているソルバーに差し替えればできます」って答えていたのが面白く感じました。

数理計画の専門家は「何を解くか」に注目していて、エンジニアは「どうやって処理するか、そもそも現実的に使える時間に処理が終わるのか」みたいなところに注目している気がします。

Python におけるドメイン駆動設計(戦術面)の勘どころ

Pythonドメイン駆動設計(DDD)の知見あんまり無いよね」「一つサンプルケース作ってみたから参考にしてよ」という発表です。

www.slideshare.net

ただし、私はDDDや設計の話はほとんど学んだことがなく、全体としてそこまで理解できてはいません。ただ、それでも「クエリとコマンドを分けて考えるといいよー」って話など、部分部分で「なるほど」と思う箇所はありました。

もうちょっと設計などの話を勉強したいです。ただ、結局は実践しなくては理解出来なさそう(ベストプラクティスとアンチパターンの区別がつかなさそう)なのと、DDDのクソ分厚い本に躊躇して手が出せていません。

Pythonはどうやってlen関数で長さを手にいれているの?

www.slideshare.net

Pythonの仕組みに一歩深く踏み入れられる素晴らしい発表でした。「Pythonには公式ドキュメントにもプロトコルをまとめられてないよね」って話には納得感があります。with構文を使いたい場合などに特に…。

collections.abcがある今となっては、mixinで実現して欲しかったような気がする」とTwitterで言っている方がいて、私もそれには同感でした。この点、RubyEnumerableモジュールを使ったイテレーターの実装のほうが綺麗ですね。

Pythonをとりまく並行/非同期の話

Pythonをとりまく並行/非同期の話

並行・並列処理や、GIL(Global Interpreter Lock)についてまとまっている発表です。並列処理によって高速化したいプログラムのボトルネックがI/Oバウンドやメモリバウンドかによってやり方違うよね、という目的の話から始まっているので、非常に分かりやすかったです。

参考文献(記事)も紹介されているので、ここから広げていけば並行処理/非同期処理は攻略できると思います。

pandasでのOSS活動事例と最初の一歩

pandasのコミッターの @sinhrks さんによる基調講演です。

speakerdeck.com

Pythonの科学技術計算の歴史や、OSSコミュニティの様子などが紹介されています。個人的には、様々な環境でのパフォーマンステストが用意されているのが、様々な環境で使われうる科学技術計算ライブラリならではだと、印象的でした。

OSS活動するなら、まずは気になるプロジェクトのリポジトリをウォッチしてみよう!」と仰っていたので、私もその通りにやってみます。

【本】エンジニアが合理的にコミュニケーションしていくために

私は、データ分析を多く取り持つ部署で仕事をしています。そのため、普段関わりのない他の部署とやり取りする必要があったり、 最近では個人情報を取り扱う際には色々とお伺いを立てる必要があります。 システム化する際には技術に詳しい先輩に協力を仰ぐ必要もあります。

ということで、最近はいろいろな人とのやり取りが多く、自分のコミュニケーションがボトルネックとなってしまいつらい状態になっていました。 私は気分がふさぎ込むと本を読みふける習性があるので、友人やネット経由で知った本をいろいろ読んでました。

今回の記事はそんな中、次の2冊を読んで考え方が分かった、対策の打ち方が考えられるきっかけになった、という話です。

合理的なコミュニケーションのための『医療とコミュニケーション』

一冊目が『医療とコミュニケーション』という本です。医者と患者のコミュニケーションの話ですが、開発者とシステム利用者など、専門的な知識を持っている人と、知識を提供される人との関係に置き換えて読むことができます。

レジデント初期研修用資料 医療とコミュニケーションについて

レジデント初期研修用資料 医療とコミュニケーションについて

私は、こちらの紹介記事を介して知りました。こちらの記事自体も素晴らしいので、ぜひ読んでください。

medium.com

本書では、まずコミュニケーションの定義から始まります。それは端的に

「状況のコントロール」を達成するための技術

とされています。さらにそれは2つに分解され、

  • 事実に対して自分の見解を持つこと
  • 事実の改変を防ぐこと

となります。

どの章も学ぶことが多かったのですが、上の引用の2点の思想が一貫して感じられます。

私の上司も理性的な人なので、同じように「事実に基づいて議論してほしい」という趣旨のことを言います。私がいろいろと「大変だったからなんとかしてほしい」みたいな文句を言っているときも、「お前の言い分だと自分の印象しか言ってないじゃん。どこが悪いのかどんな事実をまとめておかないと、もし改善しようにもどこを直せばいいのかわかんないよ」と思っていたに違いありませんw

また、「これくらい困っている、という事実が共有できてれば、協力してあげられてたのに」ということもよく言われました。私は今のプロジェクトは1人で進めている時期が長かったので、不正確でも見積もりを立てる(見積もりは大抵不正確なものです)メリットが分からなかったのですが、上のような考え方だと「これくらいで終わると踏んでいる」というのを最初に合意しといて「これくらい遅れ気味だから助けてくれ」って言えばスムーズだったのかなと思います。

そして、私はコミュニケーションに苦手意識を持っていたのですが、「面白い話はしなくていい」という話にはちょっと救われました。「インターネット等の場では『動物を見た』話を『狼が襲ってくるぞ!』とセンセーショナルに伝える意見が多く共有されるけど、現実では合意形成ゲームだから、事実を伝えて信頼を積み上げていけばいい」という話です。

そういう意味で、私は給与交渉などの場での自己アピールも苦手に思っていた(自分には××なところが足りてないし…)のですが、「きちんと出た結果を記録しておいて、事実を事実として伝える」だけでいいんじゃないかと思うようになりました。幸い、私の上司はそうすればきちんと評価してくれる人だと思っています。

「『悪い人』は目的が決まっており、適切に対処すれば撤退してくれるからある意味付き合いやすい。『いい人』は目的がはっきりしないし、一方的に期待を積み上げてくるので交渉の余地がない」という話にも考えさせられました。

私自身、「できるだけ迷惑・負担をかけまい」という発想で八方美人になろうとして、交渉の場を自分で潰していた部分も大きかったと思います。

自分というメディアを高めるための『あなたの話はなぜ「通じない」のか』

もう一冊は、友人のマーケッターから薦められた『あなたの話はなぜ「通じない」のか』です。

マーケッターの彼は意識が高く、普段ヤバいレベルで働き続けているし、休日も「自分はこんな事やりたい」「こういうことやればうまくいくんじゃないか」と考え続けているヤバい人です。

あなたの話はなぜ「通じない」のか (ちくま文庫)

あなたの話はなぜ「通じない」のか (ちくま文庫)

Kindle版なら500円です。↑のリンクはアフィリエイトですw

特に印象的だったのが「自分のメディア力を高める」という言葉です。端的にいうと「外から見ると自分は他人から何をやってるのか分からないし、同じ言葉でも信頼のある人が言ってるものはやっぱり信頼されるよね」という話です。

私も先輩のアドバイスで、プロジェクトの早い段階で、簡単な、分かりやすいデモを作って見せていました。プログラムの難しい部分はできていないおもちゃのようなコードだったのですが、関係部署の方には意外にウケて、それ以来、ある意味自分というメディアを信頼してもらえ、社外とのミーティングに同席させてもらったり、いろいろな頼みを聞いてもらったり、仕事を進めやすくなったと感じています。

先輩からすると、「信頼されると次の話をしやすくなる」「他の人には意外に伝わらないので、ちゃんとイメージを伝えないといけない」ということを知っていたんだと思います。(もう一つ、「細かくアウトプットを出していかないとモチベーションが持たない」ということもあるんだと思います)

また、私の今の悩みとは直接関係ないですが、「問題の答えより、『問い』を立てて考えられたものかのほうが大事。それを広げるには『時間軸』『空間軸』『人の軸』を元に考えよう」という話も興味深かったです。技術に関しても、「こんなすごい技術があるよ!」というより「こういう問題があって、それを解決するために産まれた技術だよ」と説明される方が、個人的には覚えやすいと感じていたので。

また、「ピアノで賞を取った」という「点」の説明より、「10歳からピアノを勉強しており、高校のときは〜」と時間軸を入れた「線」の説明のほうが説得力があるという話も興味深かったです(そのため、この本は就活生にもよく読まれているそうです)。私は自分自身について「過去と今と未来にやってることに整合性がない」と感じている部分もあるので、個人的には痛い部分を突かれた気分になりました。

medtoolz著 『レジデント初期研修用資料 医療とコミュニケーションについて』 | 身近な一歩が社会を変える♪

「患者の立場になって聴く・話す」とか、共感的なコミュニケーションとか、そういう「ケア」に相当する部分。そういったことは、病院では、もしかしたら看護師さんの役割になるのかもしれない。(医師はどこまでもcureの立場の人だ。)

実はこの本にも、印象的なエピソードが出てきた。事故現場で亡くなった子どもの遺体を前にして、親御さんはその死を受け止められず、「あの子の顔の傷を何とかしてくれ」と叫び続けたと言う。しかし、看護師さんが亡くなった子どもの顔に絆創膏を貼ったら、親御さんは、そこで初めて子どもの死を受け入れられた―――とのこと(P.23)。

おそらく、「亡くなった子どもの顔に絆創膏を貼る」ようなコミュニケーションは、この本を百回読んでも実践できないだろう。

私も先程紹介した「医療とコミュニケーションについて」には『共感』という視点がどうしても欠けていたと思うのですが、こうすれば共感しやすい/されやすい、説得力があるよね、と考えるための側面は、もしかするとこちらの趣旨の本で補えるのかもしれません。

まとめ

私がコミュニケーション周りで苦労していて、なんとかやり方を考えなきゃヤバいので本を読んでがんばっている話をしました。

特に、『医療とコミュニケーション』の「事実を基に自分の意見を持って、誤解がないように伝える」ようなスタンスで一貫している点は自分にとって新鮮でした。一方で、身近にも似た考え方の人がいるし、WEBエンジニアでも医者でも悩みが変わんないなあという点にも勇気づけられました。

個人的には、エンジニアなら『SOFT SKILLS ソフトウェア開発者の人生マニュアル』の後に、給与交渉について考えるときに読むのが良いと思いますw

当然、本を数冊読んだだけで解決できれば誰も苦労してないはずなので、これからも似たようなことで悩み続けるとは思いますが、問題解決のための考え方の基は掴めたのかなと思います。というか、そもそも私は手を動かすのが遅いほうなので、そっちも(そっちのほうを)なんとかすべきなのかもしれません。

【自然言語処理】電話対応のデータ分析で乱読したときのメモ

最近、電話対応のデータ分析を行っていたので、周辺分野と思える書籍や記事を乱読していました。

結論から言うと、最近のクラウド上の汎用の自然言語処理エンジン(LUISやapi.ai)を使えば、もう少し発展させてシステム化するときも汎用の検索エンジンを組み合わせれば済みそうだったので、それぞれのサービスのドキュメントを読むだけで解決できそうでした。

ですので、勉強しようと思っていたことがほとんど無駄になってしまったのですが、折角なのでメモとして残しておきますw

これらのサービスはチャットボット用途でよく使われていますが、

qiita.com

インテントはその発言が、どういった意図を持っているのか をカテゴリー分けしていく概念です。

エンティティはその発言のなかにある、意味のある単語 をカテゴリー分けしていく概念です。 (※2)

私の仕事の要件では『自然言語処理の本を探しています』という会話文から「商品を探している」というインテントと「探している商品: 自然言語処理」のエンティティと紐付けて、どのような商品が多く探されているか集計すればOKでした(もちろん、多少の表記ゆれの名寄せや試行錯誤は必要でしたが)。

各サービスの比較などは次の記事を、利用方法は公式ドキュメントを読めば充分だと思います。

gizin.co.jp

自然言語処理がどんな分野か概観する

自然言語処理というか、「日本語の入力に対して動作するアプリケーションにどんなものがあるか」という部分を知る必要がありました。

そこで、知り合いから「自然言語処理で有名な研究室がおすすめの書籍一覧を公開している」と教えてもらった記事から数冊流し読みしました。

自然言語処理を学ぶ推薦書籍 - 首都大学東京 自然言語処理研究室(小町研)

私は言語処理というと統計寄りの部分(クラスタリングや評判分析)の部分に発想が偏ってしまいがちだったので、情報検索や日本語入力(IME)もまとめてあるのが個人的には少し驚きました。そのおかげで、今回の仕事では「情報抽出をしたい」→「汎用のクラウドサービスを使うのが一番サクッと作れて、システム化も楽そう」という順でやり方を調べることができました。

特に以下の2冊が(研究者ではなく)エンジニアの立場である私には良かったです。

自然言語処理の基本と技術

自然言語処理の基本と技術

自然言語処理 (放送大学教材)

自然言語処理 (放送大学教材)

電話対応業務について学ぶ

IBM那須川哲哉さんが2000年代からコールセンター向けのデータ分析の研究で有名だそうです。

やや古いですが、実際に次の本が自分がやりたいことに近い事例が多く、もっと細かい分析が必要になった場合にはこの本や彼の論文が参考になるかもしれません。もう一冊、ビッグデータを活かす 技術戦略としてのテキストマイニングという本もあったのですが、こちらは技術ドキュメントの解析の話だったので私の欲しい知識ではありませんでした。

テキストマイニングを使う技術/作る技術―基礎技術と適用事例から導く本質と活用法

テキストマイニングを使う技術/作る技術―基礎技術と適用事例から導く本質と活用法

また、ちょうど秋葉原の書泉に立ち寄ったとき、ちょうどCALL CENTER JAPANのAI特集の号が売られており、こちらでも各会社の苦労話が聞けて良かったです。

callcenter-japan.com

また、コールセンター向けのソリューションを提供している会社のセミナーに同席させてもらったりもしていました。

もちろん電話対応を行っているオペレーターの方に話を聞くことも大事なのですが、自分のヒアリング能力が乏しいせいか、毎回「あ、これ知らなかった!メモしとこw」って話がポロッと出て来るのでまだまだ精進が足りないなあと思っています。

その他で読んだ本

「顧客の声分析」みたいなことができるんじゃないかと思って流し読みしたのですが、直接は役に立てられそうにありませんでした。KH Coderというテキストマイニングソフトの説明も非常に丁寧だったのですが、私は一応プログラマーPythonでゴリゴリ書くつもりだったので、そういう点にあまり魅力を感じなかったということもありそうです。

社会調査のための計量テキスト分析―内容分析の継承と発展を目指して

社会調査のための計量テキスト分析―内容分析の継承と発展を目指して

次の本は(仕事と関係なく)めちゃめちゃ面白かったです。

例えば文字コードなどからページで利用されている言語を同定する手法を作ったり、クローラーを数秒おき(日本の一般的なサーバーなら充分すぎるほど捌ける量)に動かしていたところ、アフリカのサーバー管理者から「我々の国はネットのインフラが貧弱なので数秒おきでもつらいのでなんとかしてくれ」と苦情が入ってしまったことなど、『Googleを支える技術』をもう少し社会科学寄り・現場寄りにしたような本です。

言語天文台からみた世界の情報格差

言語天文台からみた世界の情報格差

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)

【Python】networkx + PyGraphvizで有向非巡回グラフ(Directed acyclic graph)をプロットする

昨日書いたコードで、「有向非巡回グラフ(Directed acyclic graph)をきれいにプロットする」ということが課題として残っていました。

ところが、よく考えたらDAGはワークフローエンジン等でよく使われている概念で、ワークフローエンジンで、タスクの順番をきれいに可視化する機能はよくあります。

例えば、以下の記事でも次のような紹介があります。

qiita.com

ジョブ依存関係の可視化

Hashだけだとジョブの全体図が分かり辛いのでgraphviz形式でジョブの全体図を出力できます。

graphサブコマンドにジョブネットのクラス名を渡します

上で使われているGraphvizを使えば、自分のグラフもきれいにプロットできそうです。調べたところ、networkxからPyGraphvizライブラリを経由してGraphvizを呼び出せることがわかりました。

qiita.com

Drawing — NetworkX 1.11 documentation

OS Xでは以下の2行でインストールできました。

brew install graphviz
pip install pygraphviz

これを使えば、簡単にDAGがプロットできます。画像はフィクションです。

f:id:takeshi0406:20170627003101p:plain

【Python】仕事の依存関係を有向非巡回グラフ(Directed acyclic graph)として整理するツールを作りました

特にデータ分析周りの仕事で、

  • 「プログラムを書く」前に「設計」と「プログラミング言語の選定」が必要
  • プログラミング言語の選定」の前に「設計」が必要
  • 「設計」の前に「稟議を出す」「個人情報についての取扱を調べる」が必要

といったような、タスクの依存関係がひどくて整理のつかない状態に陥ってしまいがちなため、それを解消するために作ったツールです。

集合・位相入門の半順序集合の章を読んでいるときに思いつきました。 元々は、Haskellの練習として、Ord型クラスで半順序集合を表現するようなコードを書いていましたが、グラフの扱いが慣れた言語でないと案外難しかった(また、冗談みたいですがYamlのパース方法が分からなかった)のでPythonで書きました。

↑のようなタスクの依存関係をひたすら以下のようなyamlファイルに書き出して、

# tasks.yml
- name: write product code
  deps:
    - fix design
    - choose programing language
    - request for budget(ringi)
    - make a mock-up
- name: choose programing language
- name: request for budget(ringi)
    - talk to legal department
- name: talk to legal department
- name: releace
  deps:
    - write product code
    - code review
- name: code review
    - write product code
- name: make a mock-up
  deps:
    - choose programming language

コマンドを実行すれば、

# save as NetworkX graph
ordmap tasks.yml tasks.png

# save as pajek format
# see also https://networkx.github.io/documentation/networkx-1.9/reference/readwrite.html
ordmap tasks.yml tasks.net --save_as pajek

以下のような図や有向グラフを表したファイルが出力されます。

f:id:takeshi0406:20170625224803p:plain

*vertices 8
1 "write product code" 0.0 0.0 ellipse
2 "fix design" 0.0 0.0 ellipse
3 "choose programing language" 0.0 0.0 ellipse
4 "request for budget(ringi)" 0.0 0.0 ellipse
5 "make a mock-up" 0.0 0.0 ellipse
6 releace 0.0 0.0 ellipse
7 "code review" 0.0 0.0 ellipse
8 "choose programming language" 0.0 0.0 ellipse
*arcs
1 2 1.0
1 3 1.0
1 4 1.0
1 5 1.0
5 8 1.0
6 1 1.0
6 7 1.0

「このタスクの前にこのタスク」という関係を枝で繋いでいるだけではなく、「Cの前にB」「Bの前にA」「Cの前にA」という関係のときに「A→B→C」という関係まで簡略化されます(A→Cの枝が省略されます)。要するに、半順序集合のハッセ図をプロットしています。

この作業をtransitive reduction(推移簡約)というそうです。Pythonグラフ理論を扱うライブラリのNetworkXでは開発中のver2.0に実装されていたので、それを参考に実装しました。

また、NetworkX(と裏で動いているmatplotlib)でUTF-8をプロットする方法が案外面倒なようなので、いまのところ日本語を入れると文字化けするし、ハッセ図をそれなりによくプロットする方法が分からなかったので図示はかなり酷いと思います。

ただ、うまくいけば分析基盤周りのバッチ処理(このデータの前にこのデータを用意しなきゃいけないとかややこしいですよね?)を整理する際も、同じような発想でできるんじゃないかなと妄想しています。もうあるのかもしれないですけど。

github.com

順序集合(Ord型)で仕事のロードマップ(Loadmap)を作るという意味でordmapという名前にしたのですが、Haskellじゃなくなったので微妙かもしれません。

【Python】urllibでマルチバイト文字のURLのhttps通信が失敗する

サラリーマンたるもの、日々の情報収集は欠かせません。

そのため、気になる業界ニュースをチャットに通知するクローラーを実装して使っているのですが、度々未知のエラーが出てしまいます。

今朝は、こちらのニュースをクローリングしようとして、

from urllib import request
request.urlopen('https://xn--u9j460nu9a58aw75c.com')

すると、以下のようなエラーが出てしまっていました。

CertificateError: hostname '株の教科書.com' doesn't match either of 'xn--u9j460nu9a58aw75c.com', 'www.xn--u9j460nu9a58aw75c.com'

利用しているPythonのバージョンは3.6.1です。

$ python3 -V
Python 3.6.1

ここで2点可能性があるのですが、

  1. 証明書の認証に失敗している
  2. マルチバイト文字のURLの比較で失敗している

requestsライブラリを利用した場合はエラーが出ないため、2. の可能性が濃厚です。

import requests
requests.get('https://xn--u9j460nu9a58aw75c.com')

暫定的な対処

18.2. ssl — ソケットオブジェクトに対する TLS/SSL ラッパー — Python 3.6.1 ドキュメント

ssl.match_hostname(cert, hostname)(原文)

(SSLSocket.getpeercert() が返してきたようなデコードされたフォーマットの) cert が、与えられた hostname に合致するかを検証します。HTTPS サーバの身元をチェックするために適用されるルールは RFC 2818, RFC 6125 で概説されているものです。HTTPS に加え、この関数は他の SSL ベースのプロトコル、例えば FTPS, IMAPS, POPS などのサーバの身元をチェックするのに相応しいはずです。

失敗すれば CertificateError が送出されます。成功すれば、この関数は何も返しません:

今回はアクセスするURLが安全なものだとわかっているので、こちらのページに従い「証明書のチェックを行わない」という設定をして、一時的な対処を行いました。ただし、いろいろとセキュリティの問題が出てきそうなので今後はこの設定は使いたくありません。

shinespark.hatenablog.com

import ssl
from urllib import request

ssl._create_default_https_context = ssl._create_unverified_context
request.urlopen('https://xn--u9j460nu9a58aw75c.com')

TODO::

  • urllibライブラリのエラーが出ている箇所のコードをチェックする。
  • バージョンアップでの対処やイシューが出ているかどうかを調べる。