あしあと

自分自身のログ(足跡)となります。ソフトウェアエンジニアです。ブログはテック系の内容が少し多めです。

Python2.7/3.6/3.7でCGIが動くDockerを作成した

気づいたら少しForkされていたので、ご紹介。
サクッとwebアプリを動かしたい人がいればどうぞ。

概要

PythonCGIが動くDockerfileです。リポジトリは以下。

github.com

Docker imageもアップしています。こちらは時間ができれば、説明とか追記します。

hub.docker.com

詳細

READMEにも書いていますが、

  • Python2.7 / 3.6 / 3.7 がインストールされている
  • Ubuntu18.04
  • CGIが動く

環境となっています。

使い方

Dockerが入っている環境なら直ぐに動かせます。

# リポジトリ取得
git clone https://github.com/pyohei/docker-cgi-python.git
cd docker-cgi-python/

# イメージ作成(pycgiは任意の名前でOKです)
docker build -t pycgi .

# 起動
HASH=`docker run -p 8883:80 -d pycgi`

# コンテナ内に入りたい場合は
docker exec -it $HASH /bin/bash

これで、

にアクセスすると、web画面にアクセスできます

f:id:pyo_hei:20190323091217p:plain

他にも、 py36.cgi / py37.cgi / sh.cgi でアクセスもできます。

実際にプログラムを修正したい

上記ディレクトリのcgi-bin内にPythonスクリプトがあるので、修正して、再度buildすると確認できます。
libディレクトリも用意しており、ライブラリなどは、libに置くことも可能です。
apacheの設定でPYTHONPATHを通しています)

コンテナに入って修正したい場合

docker exec -it $HASH /bin/bashでコンテナに入った後、

cd /production/www/cgi-bin

で移動すればファイルがあるので、適宜修正してもらえれば良いかと。

その他

CGIは毛嫌いしている人も一部でいる印象ですが、サクッとwebアプリが動くので、個人的には好きです。
私自身は、エンジニアになったのが2013年末で、既に枯れた技術になっていたのですが、ライトに動くので魅力に感じました。

とは、書いたものの、本当にサクッと動かしたい時はBottleを使うのですが...😜

Ubuntu MATE 16.04@Raspberry pi 3 Model B+ でログイン画面がループする対応

Raspberry PiUbuntu MATEをインストールして、サーバー代わりに遊んでいます。

基本はSSH経由で接続しています。しかし、一応GUIでログインもできるようにもしています。
今回、移動をする際にシャットダウン-->起動をすると、GUIでログインできなくなったので対応方法です。

環境

状況

ログインしようとすると、パスワードがあっているにも関わらず、何度もログイン画面になります。

対応

やったことと結果としては、右上にある歯車のマークを押して、

Shutdown -> 起動

2回程、繰り返したのですが、うまくいかず。

Restart

再起動すると、ログインできるようになりました。

備考

私の中で理屈のある対応ではないので、確証はないですが、もし、うまくいかない人がいればお試しください。
根本的な対応としては、CUIでログインして、設定ファイル消す対応が必要だと思います。

marbles.hatenablog.com

過去に2度ほど発生して、その時はCUIに切り替えて作業したのですが、ダメ元でRestartしたらうまくいきました。

AppleWatchはアイススケートも運動としてカウントしてくれた

当たり前なのですが、気になっていたので試してみました。

スペック

私自身は学生時代に数年スケートをしていました。
軽くやっていた程度で、一般の人が滑れるようになったレベルです。

スケート自体は数年していなかったので、久しぶりです。

やったこと

長らくスケートをしていなかったので、リンクを滑るだけです。
学生の時にしていた練習を体が覚えていたので、同じ練習はしましたが、激しい練習はしませんでした。
軽いランニング程度に体を動かした、というところです。

結果

大体、45分程度スケートをした結果です。

Before

f:id:pyo_hei:20190318171154j:plain

After

ぼやけてしまった...

f:id:pyo_hei:20190318171226j:plain

ちゃんと運動扱いしてくれました(当たり前)。
定量的には分からないですが、ランニング45分くらいと同等の扱いっぽいです。

その他

学生の頃には、こういうデバイスなかったので、今の人は羨ましいですねー。

Pythonでファイル操作の取り扱い記載場所(公式ドキュメントの歩き方)

私は、Pythonがメインのプログラミング言語です。
とはいえ、まだ未熟なので、調べながら書きます。

GooglePythonの内容を検索すると、日本語だと、Qiitaやはてなブログなど出てくるのですが、どうしても断片的だったり、情報が曖昧で、モヤモヤすることが多いです。

ちゃんと公式ドキュメントで調べるようにしているのですが、例えば、ファイルの取り扱いはなかなかドキュメントの場所を見つけにくかったりします。

なので、自分の辿り方をまとめました。
Pythonの関数の検索に困っている方の参考になればと。

何に困るか

今回各きっかけとなったのは、ファイルオブジェクトの扱い方です。
基本的には覚えているのですが、ファイルをopenした後、readしようかreadlineしようか、readlinesしようかなと思った時に、戻り値を忘れていることが時折あります。
その際に、どこに書いているか、分からなくなることあります(自分だけかな?)

手っ取り早く知りたい方

チュートリアルに記載があります。

docs.python.org

詳細なドキュメントを見つける

今回はPython3(2019.03.17時点ではPython3.7.3)のドキュメントを使います。
知りたい(思い出したい)のは、openして、ファイル内容を読み込む際の挙動を知りたいとします。
今回は日本語ドキュメントです。

公式ドキュメントを開く

公式ドキュメントは以下です。

docs.python.org

右上の「クイック検索」でopenと入力

検索結果は以下となりました。

f:id:pyo_hei:20190317122155p:plain

今回必要なのは組み込み関数なので、(Python の関数, in 組み込み関数)openを押す。

open

docs.python.org

結局はここが大切なのですが、説明は読みましょう。
後半部分に以下の記載があります。

open() 関数が返す file object の型はモードに依存します。 open() をファイルをテキストモード ('w', 'r', 'wt', 'rt', など) で開くのに使ったときは io.TextIOBase (特に io.TextIOWrapper) のサブクラスを返します。

戻り値はio.TextIOWrapperということなので、リンクへ飛ぶ。

TextIOWrapper

ここには、特に関数が書いておらず、

BufferedIOBase バイナリストリーム上のバッファ付きテキストストリーム。 TextIOBase を継承します。

と書いているので、TextIOBaseへ飛ぶ。

TextIOBase

docs.python.org

TextIOBase には、

read(size=-1)
最大 size 文字をストリームから読み込み、一つの str にして返します。 size が負の値または None ならば、 EOF まで読みます。

readline(size=-1)
改行または EOF まで読み込み、一つの str を返します。ストリームが既に EOF に到達している場合、空文字列が返されます。

size が指定された場合、最大 size 文字が読み込まれます。

があるので、見つけました。
ただ、readlinesもあったなと思い、クラスの記載を読むと

IOBase から継承した属性とメソッドに加えて、 TextIOBase は以下のデータ属性とメソッドを提供しています:

なので、IOBaseへ飛ぶ。

IOBase

docs.python.org

readlines(hint=-1)
ストリームから行のリストを読み込んで返します。 hint を指定することで、読み込む行数を制御できます。もし読み込んだすべての行のサイズ (バイト数、もしくは文字数) が hint の値を超えた場合、読み込みをそこで終了します。

ただし、 file.readlines() を呼びださなくても for line in file: ... のように file オブジェクトを直接イテレートすることができます。

ということで見つけました。
仕方ないとはいえ、長い...

ここまで読むとPythonのテキストオブジェクトの仕組みも、改めてわかってきますねー。

最後に

ドキュメントがわかりにくくて困るなーと思って、改めて書いたのですが、
単純にちゃんと公式ドキュメントを読め、ということに尽きますね。

ただ、プログラミング初学者には、わかりにくい箇所かもしれないですね。
ということで、備忘として書きました。

夏野総研のススメ

気付いたら「夏野総研」を、2014年10月から4年半ほど購読してたので、自分の活用方法をまとめてみます。
気になっている方は参考にしてください。

夏野総研とは

ドワンゴ代表取締役(2019.03.13時点)の夏野剛さんによる、ブロマガです。
iモードの立て役者としても、有名な方です。

sp.ch.nicovideo.jp

なぜ購読したか?

ニコニコ動画とかで夏野さんのことを知り、面白い方だなと思って、チャンネルを見始めました。
ちょくちょく見てて、自分にはない発想で勉強になることがあるので、購読を開始しました。

最初は生放送も見ていましたが、ここ2年以上は、ほとんどブロマガしか見ていないです。
ほぼ、最初から見ています。

内容

内容はサンプルを見てもらえれば分かりますが、以下の構成が多いです。

01.時事ネタキュレーション
02.Biz Competition
03.Q&A
04.Best Of Q&A
05.Product Lab
06.Good Food Good Life
07.ビジネスモデル分析のバックナンバーを振り返ってみた
08.スケジュール
09.編集後記

サンプル見て思ったのですが、01.時事ネタキュレーション は無料で見れるんですね。。 知らなかった...ここだけ読むのも、オススメです。

自分の読み方を振り返るついでに簡単にまとめてみます。
書いてみると、01/02/03/09が私のメインですね。

01.時事ネタキュレーション

サンプルの通り、時事ネタのキュレーションです。
気になった分をかいつまんで読んでいます。

知らない記事も多いので、話のネタにもなります。
テック系の話もネタも多いので、個人的には嬉しいです。

02.Biz Competition

最近の流行り毎や、問題をビジネス目線で深堀をするコーナー。
最近だと個人的には以下が面白かったです。

  • 絶対に「コケない」映画の作り方
  • auの寿命を5年にした、「KDDI×楽天」悪魔の契約
  • 反対派大多数のサマータイム。実は日本こそ導入したほうがいい理由

経営者目線で、現状把握と課題の指摘、解決方法が書かれています。
仕事をする上でも、考え方の参考になることが多いです。

03.Q&A / 04.Best Of Q&A

ざっと読んでいます。
最近はツアーガイドとして、旅行先のオススメも紹介されてて、楽しく読んでいます。

たまーに雑な回答もありますが、人情溢れる回答もあって、良いです。

05.Product Lab

新しい/便利な商品の紹介。
個人的には知っているのものもあるのですが、へぇーと思うこともしばしば。

06.Good Food Good Life

夏野さんがオススメのレストランや食べ物紹介。
一人で行ける麺系の紹介も多く、首都圏に住んでいない自分としては、東京に行った時の昼食とかに使わせてもらっています。

07.ビジネスモデル分析のバックナンバーを振り返ってみた

これは読んでないですが、過去のBiz Competitionを振り返った内容。

08.スケジュール

読んでないです。

09.編集後記

ここは結構面白いので、読んでいます。
編集、加藤さんの後記なのですが、結構面白くて、楽しんで読んでいます。
生放送では、よく夏野さんにいじられていました(今は知らないですが)。

いつ読んでいるか

基本は通勤の間に読んでいます。だいたい10分くらいで読めるかなと。

どんな人におすすめか

私は普段ITエンジニアとして働いているので、その視点で書くと、

  • エンジニアでビジネスにも興味ある人
  • 今後、流行るであろうビジネスモデルに興味ある人
  • 経営者の発想を知りたい人

とか、かなと。どうやって、良いビジネスを作っていくかが好きにな人にオススメです。
なかなか経営者目線での発想を知る機会はないと思うので興味のある人には良いです。

逆に、技術的な内容が好きで、経営戦略とか興味ない人には、オススメできないかなと。

その他

月4回程度のメルマガが500円で高いか安いかは、その人次第ですね。
生放送も見ると、割とお得感は感じますが、働いていると、なかなか見る機会はないですね。

私自身も継続するのか(今も)幾度と悩みましたが、毎週ビジネス視点での発想を学べるので継続しています。
ドワンゴ代表取締役になったので、今後の内容も気になっています。

と、書いたものの、いつ解約するかはわからないですが...

devドメインを取得した

概要

devドメインを取得したので簡単なメモです。
今回はドメイン(正しくはTLD)を理解している人向けの内容となります。

目的

自分用ツールやリンク、紹介をまとめたサイトを作りたい(用意したい)と思ったためです。
このブログも同様ですが、ちゃんと自分の学んだことや作ったものを残すことって大切だなと、最近感じてきたためです。

devドメインとは

Google Domainsで、2/28から提供を開始したドメインです。

domains.google

日本語の記事としては、下記が良いかと。

www.publickey1.jp

個人的には、mozaic.fmというWeb技術の動向を話しているPodcastで以前から聞いていたので、気になっていました。

mozaic.fm

そういえば、.dev を開発環境で使っている人って結構いるのだろうか...🤔

なぜdevドメインにしたか?

個人サイトなので、 自分の名前.net が欲しかったのですが、既に取られていて、

で迷っていました。
最初は自分自身の生活に寄り添うものなので、 自分の名前.life にしようかなと考えていたのですが、

  • 自分自身は開発者だし、dev もありかも
  • .life.dev よりも少し高い(4,600円 vs 1,200円)
  • .dev が、ちょうど提供開始される

ということだったので、思い切って(?) .devにしてみました。

取得方法

取得方法はGmailのアカウントを持っていたら、何一つ難しくはなく、Google Domains

domains.google.com

で欲しいドメインを検索したら取得できます。
個人的に購入までしかしていないので、設定方法は別途する予定です。

その他

サイトは自分についてまとめたサイトなので、GitHub Pages にする予定です。

pages.github.com

二、三年前は、よくお名前.comで無意味に安いドメイン買いまくっていたけど、結局使わないことが多かったので、ドメイン取得は必要な時に必要なドメインを取得するのが一番ですね(自戒)。

はてなブックマークで気をつけていること(2019)

はてなスター」が気づいたら1000を超えていたので、個人的に気をつけていることで書いてみます。

f:id:pyo_hei:20190224174728p:plain

それほどスターは意識していないですが、まぁ考えていることを残しておきます。

前提

繰り返しですが、基本スターをもらうために頑張ってはいません。
以下のブログで書いたツールを使うためにブックマークをしています。

pyohei.hatenablog.com

↑のツールを簡単に説明すると、
自分と同じブックマークしている人たちの傾向から、自分向けにキュレーションするツールです。
エンジニア(Python動かせる人)で興味があれば使ってみてください。

また、ちゃんと読んでからブックマークするために、コメントを書くようにしています。

使ってない期間もあるのですが、気づいたら3年くらい使っています。

スターが付きやすいもの

個人的に感じたのは、

  • 人気が出そうな記事を、
  • いち早くブックマークし、
  • 共感されやすい内容で書く

という条件が一致すれば、割とスターが付きます(当たり前ですが)。
で、どうやれば対象の記事が見つかるかというと、「ブックマークアプリ」の「新着エントリー」をウォッチしていると見つかりやすいです。

下図の赤で囲った部分です。

f:id:pyo_hei:20190224174715p:plain

また、書く内容としては、他の人が共感できる内容や、確かに、と思わせるような内容が良さそうな感じがします。

個人的には、否定的な意見は(論理的に飛躍した内容でない限り)書かないようにしていますが、否定的な内容だとスターが付きやすい印象があります。

気を付けていること

当たり前のことですが、以下の事に気を付けています。
たまに守れてない時もありますが...

  • 最後まで読んだものしかコメント(ブックマーク)しない
    ⇨ コメントはログとして残すため、基本はコメントしています
  • 一つのブックマークにたくさんスターを付けない(付けたとしても2~3個)
  • 個人に対する攻撃はしない
  • なるべく否定的なコメントはしない
  • はてな匿名ダイアリーにはブックマークをあまりしない
    ⇨ 書いた人が不明で、信憑性が低い時もあり、不確かな情報にコメントしてもなぁと感じ、あまりコメントしないようにしています

コメントを見ていると、この人大丈夫?と思うくらい批判ばっかり書いている人がいるので、、、反面教師としています。

要望

ブックマーク自体は自分のログになり、他の人の意見も読めて良いツールと思いますが、「はてなブックマーク」自体に対する要望は以下かなーと。
内部にいる人は、既に問題として捉えてそうな気もしますが。

  • 読んでないでコメントしている
  • 文句ばっかり書いている

上記のようなコメントは出ないようにして欲しいですね。
例えば「通報」機能を付けて、通報の多いアカウントのコメントは実は他人に見えない、とかなると良いなとは要望しています。

その他

自分のブックマークを改めて見直すと、読み直してみようと思う記事が多々ありました。
今後も定期的に見返そうかなと思います。
割とブコメをたくさん残している人にはオススメです。

スターは気にしていないですが、なんだかんだ、スター貰うと嬉しいですよね。
とはいえ、他にこういう他人と共有できてAPI使えるブックマークサイトがあれば、乗り換えても良いかなと思ったりもしています。