ことさら−古都プログラマーの更級日記

京都でお寺を回りながら御朱印集めをしていたり、LoLをしたり試合を見に行ったりしているエンジニアのブログです。技術的なはなしとか日常的なはなし、カメラやLoLや競馬の話も書きます。右メニューに検索やらカテゴリーやらがあるので、見たい記事だけ見てね!

python 2 で pip を使ってのの PIL(Pillow)のインストール方法とimportの仕方

f:id:yoshiki_utakata:20180125114033j:plain

環境

pillow(PIL)インストール後

$ python --version
Python 2.7.6

$ pip list
...
Pillow (5.0.0)
...

pipによりPILのインストール

$ sudo pip install pil                                                                                                                                                                                  [master]
Password:
The directory '/Users/yoshiyuki_sakamoto/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/Users/yoshiyuki_sakamoto/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting pil
/Library/Python/2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#snimissingwarning.
  SNIMissingWarning
/Library/Python/2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
  Could not find a version that satisfies the requirement pil (from versions: )
No matching distribution found for pil
/Library/Python/2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning

Pillow(PIL)の使い方例

from PIL import Image

...

プログラミングコンテストとかアルゴリズムとかを学びたい人向けの本3選

僕の古いブログの記事を引用していた以下の記事を見たら、こういうことが書いてあった。

任意の整数を扱う問題が出たら基本的にDP使うんか?

syuntoku14.hatenablog.com

確かにDP(動的計画法: Dymanic Programming)をどのような問題に対して使えばいいかは難しい。

この方はアルゴリズムというよりかは、Pythonの練習をしているようだったが、「アルゴリズムの勉強したいが何していいかよーわからん」という人もいるだろうなーと思った。そこで、僕が読んだことあるアルゴリズムプログラミングコンテストに関する以下の本の簡単な内容と難易度を紹介する。

プログラミングコンテストチャレンジブック

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

プログラミングコンテスト」と聞いて一番有名な本がこれだろう。表紙が蟻の柄なので「蟻本」と呼ばれていたりする。特徴としては

どちらかというと、本気でプログラミングコンテストで勝ちたい人向けの本で難易度は高めである。アルゴリズムにあまり触れたことがない人は、後述の「最強最速アルゴリズマー養成講座」のほうをオススメする。

最強最速アルゴリズマー養成講座

高橋直大さんという、AtCoder社の社長さんが書かれた本である。表紙がヒョウ柄(チーター柄?)なので「チーター本」などと呼ばれている。

難易度が易しいので、初心者にはまずこの本をオススメしたいのだが、練習問題にtopcoderというところの問題を使っているのが(個人的には)ちょっとマイナス。AOJ(Aizu Online Judge: http://judge.u-aizu.ac.jp/onlinejudge/)に比べるとtopcoderはちょっと使いづらい印象があるので、個人的にはAOJの方が好きだ。*1

注意点としては、難易度はそこまで高くないので、本気で勉強したい人はこちらより「プログラミングコンテストチャレンジブック」をオススメする。

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

これら3冊の本の中では一番新しい本で、AOJ(Aizu Online Judge: http://judge.u-aizu.ac.jp/onlinejudge/)にも関わっている会津大学の渡辺先生が執筆した本である。秋葉さん(プログラミングコンテストチャレンジブックの著者)も参加している。

  • Aizu Online Judge の問題と対応しているため実践しやすい
  • サンプルコードはCまたはC++
  • 難易度もそこまで高くない。

なんといっても、AOJを使う前提の本なので、本を読んでAOJで実践できるし、AOJの使い方が乗っているのもありがたい。新しい本なだけあって、図も多く内容も分かりやすい。「最強最速アルゴリズマー養成講座」だとどうしてもtopcoderのUIなどに慣れるところから始まってしまうが、こちらはそういう面倒臭さもない。難易度も平易なので、ガチの人向けの本ではないが、アルゴリズムを学びたい人にはぴったりだろう。サンプルコードがCまたはC++しかない点だけがちょっとデメリットか。

まとめ

アルゴリズムの勉強を実践的に(実際にコードを書きながら)したいなら、この3冊のどれかになると思う。

かなと思う。一番のオススメは「プログラミングコンテスト攻略のためのアルゴリズムとデータ構造」である。是非参考にして欲しい。

番外編

番外編で「世界で闘うプログラミング力を鍛える150問」というのも読んだことあるがあまり内容を覚えていないので紹介だけにしておく。この本はサンプルコードとかは豊富ではないので、やはり上記3冊の方が僕は好きかな。

世界で闘うプログラミング力を鍛える150問 ~トップIT企業のプログラマになるための本~

世界で闘うプログラミング力を鍛える150問 ~トップIT企業のプログラマになるための本~

*1:ちなみに、この本はなにかの連載をそのまま本に落としただけなので、高橋直大先生は「書籍用に書き直して第二版を書きたい」という願望があるらしい。ただ、彼は凄く忙しいのでしばらく第二版は出ないきがしている

中山金杯・京都金杯・フェアリーS・シンザン記念は馬連の払い戻しが5%上乗せ

JRAプレミアムについて

JRAプレミアムというキャンペーンがあります。特定のレースの特定の馬券の払い戻しが増えるとぷキャンペーンです。

2018年 JRAプレミアム 対象レース一覧 JRA

金杯馬連に売上の5%相当を上乗せ

まず、中山金杯京都金杯馬連の払い戻しに、売上の5%相当が上乗せされます。

2018年「金杯馬連」 JRA

通常、馬連は払戻率は77.5%です(参考: 勝馬投票法ごとの払戻率)。つまり、1000円分馬券を勝ったら平均775円返ってくるということです。売上の5%相当が上乗せされるということは、この腹戻し率が5%増えるのとほぼ同じです。つまり、払戻率が82.5%になるということです。通常、払戻率が一番よい単勝でも80%ですので、ここは馬連を買いたいです。

中山金杯京都金杯は是非馬連を狙いたいですね。

春の3歳重賞の馬連に売上の5%相当を上乗せ

これも先程の金杯と同じです。2018年1月7日から5月26日の間に開催される3歳重賞の馬連に5%が上乗せされます。対象レースは下記サイトを御覧ください。

2018年「春の3歳重賞馬連」 JRA

桜花賞皐月賞NHKマイル、オークスなどのG1に加えて、1月7日のフェアリーステークス、1月8日のシンザン記念も対象です。フェアリーステークスシンザン記念もぜひ馬連を狙っていきましょう。

f:id:yoshiki_utakata:20180102195856j:plain

noteをはじめました

試しに、noteというブログのようなサービスをはじめました。しばらくは競馬の予想はこちらで公開していく予定です。

note.mu

ニンテンドーeショップの初売りセールとニンテンドープリペイドカードのセール

ニンテンドーeショップで初売りセールをしているのと、セブンイレブンニンテンドープリペイドカードを買うとポイントが追加で貰えるキャンペーンをやっているので、欲しいソフトをまとめておきます。

topics.nintendo.co.jp

ニンテンドーeショップ

ニンテンドーeショップでソフトが20%〜50%オフで販売しています。2018年1月14日までです。

www.nintendo.co.jp

ただし、普通にAmazonの方が安いソフトもあるっていう...まあ、パッケージがあると邪魔なので、ダウンロード版を買痛いって人向けかもしれません。

個人的に欲しいソフト

タイトル 価格 Amazonでの価格
ファイアーエムブレム Echos 5,378円→3764円(30%OFF) 2,997円(パッケージ版)
ドラゴンクエストIII 1,620円→1,296円(20%OFF) なし

ファイアーエムブレム Echos欲しかったけどAmazonでパッケージ版を買ったほうが安く...。タイトルも55タイトルとそこまで多くはありません。

セブンイレブンプリペイドカード

セブンイレブンニンテンドープリペイドカードを買うと、以下のポイントが追加でもら得ます。

  • 3000円→追加100円
  • 4000円→追加300円
  • 5000円→追加500円

初売りで何か買うならセブンイレブンで買うと良いでしょう。初売りでかわなくてもとりあえずチャージしておくのもいいかもしれません。

LINE Developer Meetup in Tokyo #27 -Elastic- メモその2 LINEデリマでのElasticsearchの運用と監視の話

もくじ

LINE Developer Meetup in Tokyo #27 -Elastic-

以下のイベントに参加してきました。

line.connpass.com

3つの発表が行われたのですが、今回はこのうち『LINEデリマでのElasticsearchの運用と監視の話』を聞きながら書いた僕のメモを公開していきます。

資料

発表資料はこちらで公開されています。発表資料と並行して見るのがいいかも。

www.slideshare.net

今回の勉強会で登壇したElasticの大谷さんが書いた本もあるようなので参考にしてみるといいかもしれません。

データ分析基盤構築入門[Fluentd、Elasticsearch、Kibanaによるログ収集と可視化]

データ分析基盤構築入門[Fluentd、Elasticsearch、Kibanaによるログ収集と可視化]

メモ

目的: LINEデリマにおけるelastic searchの監視について説明する

LINEデリマとは

  • フードデリバリーサービス
  • 2017.07.26〜
  • twitter: @linedelima
  • 懇親会のフードはLINEデリマで用意したものではなかった!

リリース当初のelasticの構成

  • master1台、data2台で運用していた
  • これは問題がある(分かる人には分かると思うが、後に説明)
  • LINEデリマのサーバーサイドはJAVA

プレスリリース時の対応について

  • プレスリリース時にElasticsearchサーバーに大量のリクエストが(4000req/s)
  • 急遽2台のサーバーをクラスタに追加(openstackを使っている)
  • クラスタの追加はAnsibleを使って行う
  • master1台、data4台という構成になった

とりあえずこの日の負荷には耐えられるようになった

プレスリリース後

  • masterが1台しかおらず、こいつがダウンするとアカンという問題がある
  • masterはクラスタ管理だけを行い、検索対象にはしないようにする
    • masterに検索要求が来た場合、dataノードからフェッチしてそれを返すような動きをする
    • masterはdataノードの管理だけを行う。こうするとmasterの負荷はすごく少ない

master3台の構成になった!

予めセットアップしていたmasterをクラスタに追加。変更作業は20分程度。

indexingだったっりESのrebalanceなどは止めずに実施したが。とめたほうがいい。Shard Allodation Settingを参考に

Admin(管理ツールとか)からElasticsearchを使いたい

Admin(多分管理ツールとかそういう系)からElasticsearchを使いたい。(Adminからのクエリが重かった場合にサービスに影響が出たらアカンので)サービスで利用しているdataサーバーには影響を与えたくないので、zoneを分けてdataノードを追加。

  • masterは共通のmasterでいい
  • 検索フローなどは同じzoneで閉じるので、AdminはAdminのゾーン内だけで処理できるので、Adminで重いクエリを投げてもサービスに影響はなし!

地上波でサービスが紹介された時

テレビで紹介されて、プレスリリース時以上に負荷がやばなりそう。Threadを使い果たしてQueueが溢れたりしそうなのでチューニングを行った。

  • Thread Poolのサイズの変更
  • Queueのサイズを大きくする(1000→3000)
    • Threadがいっぱいになった時にはQueueに積まれるという挙動する
  • ※Elasticsearch 5の設定なので6では異なっている。注意。

実際に放送されて

  • 放送前: 150prs, 3-4ms search time, Queueは使われていない
  • 放送後: 750rps, 3-4ms search time, Queueは使われていない

結局Queueは使われなかったが、チューニングによって乗り切れたのかなという感じ。

現在

現在は問題なく稼働している

監視

これまでの監視はどうしていたか

  • 内製アラートツール
    • 提供部署に設定変更などは依頼
  • IMON(内製アラートツール)
    • Javaで書かれている

問題: 詳細な監視項目の設定ができなかったり、監視項目の変更などがめんどい。

これからの監視

Prometheus & Graphan & Promgena

Prometheus

  • 設定に応じて、対象のサーバーに定期的にメトリクスを取りに行く
  • 各サーバーにはAgentがいて、そいつにHttpリクエストを行うことでメトリクスを取得
  • 閾値超えたらアラートなどなど

Graphana

  • Prometheusのデータを元にグラフ描写

Promgen

ESとPrometheus

今後

  • Elasticsearch 6系にしたりなどなど(アップデートの検証は完了している状態)
  • 個人的にはElasticsearchの検証記事をPublicに公開していきたい