おかゆ++

IT業界の片隅で生き残るブログ

もしかして筋トレって流行ってるんですか?

筋トレって、流行ってるんでしょうか?

最近Twitterやら何やらで筋トレの話をよく見ます。 あと近所にも新しくジムがオープンしたり、プライベートジムなんかも増えてきたように思います。

流行しているのか、自分の関心が高まって目に付くようになっただけなのか……

でも筋トレが流行ると、みんな健康になって、みんなハッピーですね! 流行れ!

筋トレで元気になれました

  • 短期的:筋トレする→なんか脳内物質出る→元気!
  • 長期的:筋トレする→代謝が良くなって痩せる→元気!
  • さらに:筋トレする→痩せる→スタイルが良くなる→自分に自信がつく→精神的にも元気!

ブロガーとかYouTuberとか企業の偉い人とかがこぞって筋トレしている理由がわかりました。 でもこれはやってみないとわからないですね。ということで流行れ!

筋トレ系YouTuber

っていう方がいるんですね! サイヤマングレートとかぷろたんはたまに見てます。

そういえばお盆の時期にサイヤマングレートが愛媛のイベントに来てたみたいです。行けばよかった!

ダイエットのために筋トレをしています

筋トレの目的はダイエットなんですが、これ確実に効くと思います。 むしろ筋トレせずにダイエットすると、筋肉も同時になくなっていってヒョロヒョロに…… なんてこともあるそうです。

「筋トレなんてしんどいこと、やってらんねー」という方は、とりあえずこれを読もう!

筋トレが最強のソリューションである マッチョ社長が教える究極の悩み解決法

筋トレが最強のソリューションである マッチョ社長が教える究極の悩み解決法

筋トレの仕方はほぼ書いてないですが、筋トレへのモチベーションは超上がります。

自宅でダンベルを使っています

自宅でダンベルを使って筋トレしてますが、以下の本を参考にしています!

『自宅で、30分でできるダンベルトレーニング』

『自宅で、30分でできるダンベルトレーニング』

自己流でトレーニングしていると怪我をしてしまうことも多いようですので、しっかり勉強したほうが良さげです!

Flask製アプリケーションをCentOS7+Apache+WSGIで動かす

想定環境

Pythonの導入(pyenv)

pyenvを利用したPythonの導入については過去記事を参照。

okayu-moka.hatenablog.com

今回はPython 3.6.2が導入された状態からスタートします。

Apacheの導入

Apache HTTPサーバについてはyumでインストールした状態だとします。 普通に yum install httpd としてインストールします。

WSGIについて

Wikipediaいわく、WSGIは、WebサーバとPython製Webアプリを接続するためのインターフェース定義らしいです。

JavaでいうところのAJPみたいなものでしょうか。

mod_wsgiの導入

ApacheWSGIするためのモジュールが mod_wsgi です。 普通にyumでインストールすることもできますが、 その場合使用されるPythonyumでインストールしているもの(Python 2.7.x)になってしまうみたいです。

ですので今回はソースからコンパイルして導入します。

まずは公式サイトから最新版を落としてきます。今回は mod_wsgi-4.5.18.tar.gz をダウンロードしました。

pypi.python.org

今回は /usr/local/mod_wsgi-4.5.18 に展開して、ディレクトリに入ります。

$ tar mod_wsgi-4.5.18.tar.gz
$ mv mod_wsgi-4.5.18 /usr/local/
$ cd /usr/local/mod_wsgi-4.5.18

Pythonのパス等を設定し、コンパイルします。

./configure --with-python=/usr/local/pyenv/shims/python
make
make install

これでとりあえずmod_wsgiが手に入りました。ファイルは /usr/lib64/httpd/modules/mod_wsgi.so に作られています。

しかしApacheで読み込むようになっていないので、設定を追加します。 CentOS 7では /etc/conf.module.d の下にモジュール関係の設定ファイルを置くっぽいです。

vim /etc/conf.module.d/10-python.py
# 10-python.pyでmod_wsgi.soを読み込むようにする
LoadModule wsgi_module /etc/httpd/modules/mod_wsgi.so

これでApacheWSGIをする用意ができました。

WSGI用のファイルを作成する

WSGI用のファイルを作成します。 /var/www/html にhtmlファイルがあるとして、Flask製のアプリケーションは /var/www/flask_test_app に配置します。

WSGIのファイルとして、 /var/www/flask_test_app/adapter.wsgi を作成します。

$ vim /var/www/flask_test_app/adapter.wsgi
# adapter.wsgiは以下のように編集

# coding: utf-8

import sys
sys.path.insert(0, '/var/www/flask_test_app')

#from flask_test import app as application
from [Flaskアプリの*.pyファイル] import app as application

[Flaskアプリの*.pyファイル] については、 たとえば作成したFlaskアプリのエントリポイントが flask_test_app.py だった場合は flask_test_app となります。

ApacheWSGIを設定する

作成した adapter.wsgiApacheに設定します。

$ vim /etc/httpd/conf.d/flask_test_app.conf
# flask_test_app.confを以下のように編集
WSGIScriptAlias /flask_test_app /var/www/flask_test_app/adapter.wsgi
<Directory "/var/www/flask_test_app">
  order deny,allow
  Allow from all
</Directory>

これで動くはず

最後はかなり雑でしたがこれで動くはずです。 うまくいかない場合は大体 /var/log/httpd/error_log を見れば大体出ているハズ。

CentOS 7に最新版Pythonを導入する(pyenv)

想定環境

pyenvについて

CentOS 7.xに最初から入っているPythonは2.x系です。 できれば新しめのPythonを使いたいので、pyenvを使って導入します。

pyenvはRubyで言うところのrbenvで、複数バージョンのPythonをインストール・切り替えできるようにするツールのようです。

github.com

This project was forked from rbenv and ruby-build, and modified for Python.

rbenvからフォークしたって書いてますね。そりゃ似てるわけです。というわけで、rbenvを使っている方はそれとほぼ同じなので、さらっと流し読みしてください。

依存関係をインストールしておく

おそらくこのあたりを入れておけば問題ないはずです。

$ sudo yum -y groupinstall "Development Tools"
$ sudo yum -y install readline-devel zlib-devel bzip2-devel sqlite-devel openssl-devel libXext.x86_64 
libSM.x86_64 libXrender.x86_64 gcc gcc-c++ libffi-devel python-devel

pyenvのインストール

今回は全ユーザに対して導入したいので、pyenv自体の配置場所は /usr/local/pyenv にします。

まずはGitHubからpyenvをクローンしてきます。

$ git clone https://github.com/yyuu/pyenv.git /usr/local/pyenv

シェルの起動時にpyenvを初期化するように設定します。 /etc/profile とかでもいいですが、CentOS 7では /etc/profile.d/ 配下のスクリプトが自動実行されるようになってるようなので、ここに新しく /etc/profile.d/pyenv.sh を作ります。

$ vim /etc/profile.d/pyenv.sh
# pyenv.shの中身には以下のように記載
export PYENV_ROOT="/usr/local/pyenv"
export PATH="${PYENV_ROOT}/bin:${PATH}"
eval "$(pyenv init -)"

$ source /etc/profile.d/pyenv.sh

これでログイン時に自動読み込みするようになります。今は再ログインも面倒なので、source で実行しておきます。

以上でpyenvの導入は完了です。

pyenvでPythonを導入する

pyenvを用いて最新版のPythonを導入します。

最初に現状のPythonのバージョンを確認してみます。

$ python --version
Python 2.7.x

最終目的はここで最新版のPythonが表示されることです。

まずはpyenvで導入可能なPythonのバージョン一覧を確認します。

$ pyenv install --list
Available versions:
  2.1.3
  2.2.3
  2.3.7
  ...
  3.6.1
  3.6.2
  3.7-dev
  anaconda-1.4.0
  anaconda-1.5.0
  ...

anacondaやpypyなども表示されますが、ただの数字だけのものが通常のPython(CPythonとか呼ぶんだったでしょうか)になります。 3.7の開発版か3.6.2が候補になりそうですね。今回は3.6.2を導入することにします。

以下のコマンドで、Python 3.6.2のダウンロードとインストールが実施されます。ちょっと時間がかかるかもしれません。(コンパイルとかしてるんですかね)

$ pyenv install 3.6.2
Cloning https://github.com/python/cpython...

Installing Python-3.6.2...
Installed Python-3.6.2 to /usr/local/pyenv/versions/3.6.2

バージョンの切り替え

Pythonのインストールまでは完了しましたが、利用するPythonのバージョンを指定していないので、まだ切り替わっていません。

以下の操作で、Python 3.6.2 を利用するように指定します。

$ pyenv global 3.6.2
$ pyenv rehash

Pythonのバージョンを確認します。

$ python --version
Python 3.6.2

めでたく最新版のPythonを利用できる環境になりました。

他のバージョンに切り替えるには

今はPython 3.6.2しかインストールしていませんが、pyenv install 3.7-dev のようにして別バージョンのインストールも可能です。

その状態で pyenv global 3.7-devpyenv rehash すれば、Python 3.7.0a が利用できるようになります。

すみません、やっぱりVivaldiが最強のブラウザでした

f:id:okayu-moka:20170520155728j:plain

FirefoxVivaldiに乗り換えました

最近、メインブラウザとしてVivaldiを使用していますので、使用感とか乗り換えた理由などを。

少し前に「Vivaldiはメインブラウザにできない」という記事を書きました。

okayu-moka.hatenablog.com

その時は、以下のような理由でメインにできないという話をしました。

で、結局その後どうなったかというと、Vivaldiがメインブラウザになりました。

まだ不満点は残ったまま

最初に挙げた2つの不満点(≒不足機能)については、まだ解決されていません。 が、試しにVivaldiに全面移行してみたところ、 そこまで不便を感じず、むしろ快適性向上のメリットのほうが上だと感じました。

①パスワード・ブックマーク共有は別サービスで代用

パスワード、ブックマーク共有の機能は、ともに別サービスやアプリケーションを利用すれば解決できます。 自分の場合、パスワードは共有をせずちゃんと自分で覚えるようにしました。 ブックマークについては、Evernoteはてなブックマーク等を併用するようにしました。

そもそも最近、あまりブックマークというものを利用していません。 気になるページや記事はEvernoteにクリップしておくし、 後で読む場合ははてなブックマークに放り込んでおけばOK。

あ、もちろんそれぞれの拡張機能は導入しています!

chrome.google.com

chrome.google.com

ツールバーからポチっとするだけでクリップ/ブックマーク追加できるので超便利。

スマホ版との共有はそもそも必要なかった

FirefoxChromeだと、PC版でブックマークしたものをスマホで見れたりして、便利。

ですが私の場合、そもそもスマホとPCで同じサイトを見てないことに気づきました。 スマホはあくまでもモバイル端末。ガッツリ調べ物をしたりするときはふつうにPCで作業します。

はてなブックマークであればスマホからも見られるし、何も問題なかったです。

ということで

現状は、タブ縦置き可能、ページを開くときはサクサク、Chrome拡張も入れられるVivaldiが最強でした。

もちろん人が違えば答えも違うでしょうし、「PCとスマホで同じページ見るし!」とか「タブレットはどうなってんだ!」というような方には、FirefoxChromeが合っているでしょう。私の場合は、Vivaldiが最強だったというだけです。

ただ、今ある機能が本当に必要かどうかよく考えて、食わず嫌いをせずにベストな選択をしたいものです!

一つのエディタに縛られる人たち

VimEmacsに魂を縛られた人間

Vimに魂を半分くらい縛られています。

がっつりテキスト編集するときやコードを書くときはVimを、 クリップボードの一時退避などの作業場的な使い方をするときは秀丸エディタを使っています。

よくやってしまうのが、秀丸を使っているときに Ctrl + [ を押してしまい、 「対応する括弧が見つかりませんでした」とエディタに怒られるやつ。 懲りずに何度もやってしまいます。

キーバインドが自由に変更できるエディタが増えてうれしい限りです

VimユーザーやEmacsユーザーがよくやるやつで、なんでもかんでもVim/Emacsキーバインドにするというのがあります。 もちろん私もやります。なぜならそのほうが作業効率がグンと上がるからです。 逆に言うとそれ以外のキーバインドだと効率がガクッと落ちるからです。 それが良いことなのか悪いことなのかはわかりませんが、少なくともデフォルトのキーバインドよりも効率よく作業できることは間違いありません。

だけど日本のIT業界のよくわからない現場では

仕事でPCを使う場合などに、環境を自由にさせてもらえないときがあります。 そういう時は本当に困ります。

ではいわゆる普通のエディタ操作に戻すべきかというと、そういう気にもなりません。 矢印キーを押すのは面倒だし、思った位置にカーソル移動したいし、サクッと検索したい。

IT業界を変えるか、人間が道具に合わせるしかない

明日からいきなりすべての現場で自由なエディタが選択できるようにはなりません。 当面の対処として、エディタごとに脳味噌を切り替えられるよう、訓練が必要です。 現実としてそれ以外選択肢がないのだからしょうがない…… 「弘法筆を選ばず」とも言いますし、なんでも使いこなせる人が一番すごいハズ。

だけど体に染みついた Ctrl + [ を意識して止めるのは本当にむずかしい。 むしろ無意識レベルまで昇華できているからこそ、Vimで効率よく作業できるわけで……

そして今日も秀丸に怒られる

そんなわけで、今日も私は秀丸に「対応する括弧が見つかりませんでした」と怒られながらテキストを書いています。

JavaScriptのapplyとcallの違い

まずはMDNから引用。

developer.mozilla.org

this の値と、個々にあたえた引数をわたして、関数を呼び出します。

NOTE: このメソッドは apply() メソッドに似ていますが、呼び出し先関数に渡す引数の指定方法が異なります。 apply() メソッドは、呼び出し先関数に渡す引数のリストを単一の配列として受けとります。

callとapplyはやっぱり似ているんですね。

developer.mozilla.org

apply() メソッドは与えられた this 参照値と、配列(もしくは配列風のオブジェクト)の形で与えられた引数を用いて関数を呼び出します。

NOTE: 関数の構文は call() メソッドとほぼ同じですが、根本的な違いは apply() メソッドが引数の配列を一つだけ受け取るのに対して、 call() メソッドは連続した引数のリストを受け取るという点です。

違いは引数の渡し方のみ

MDNにそのものズバリ答えが書いてありました。

callの時は、hoge.call(piyo, arg1, arg2) という風に引数を渡しますが、 applyでは hoge.apply(piyo, [arg1, arg2])と配列で引数を渡します。

そのほか、thisを指定できるところなんかはどちらも同じ。

配列のほうが取り回しができて便利なので、とりあえずapplyを覚えておけばいい気がしますが、 名前的にはcallのほうがしっくりきますね。

結論

好きなほうを使えばいいと思います。

アマゾンからコンビニ受け取りのメールが来なかった

amazonで買い物したとき、どうやって荷物を受け取りますか?

私はプライム会員なので時間指定も利用するんですが、時間指定だと「家にいなくちゃ」というプレッシャーがあるんですよね。 なので、ちょっとした買い物ならコンビニ受け取りを利用しています。

で、この前コンビニ受け取りで買い物をすると、予定の日付になっても配達完了のメールが来なくて、商品が受け取れない状況になりました。 幸いその時は急いでいなかったので、特に気にしてなかったんですが、後日こんなメールが来ました。

f:id:okayu-moka:20170520155733j:plain

データ反映のエラーとな。そんなこともあるんですね。

そんなわけで、どうしても指定の日に受け取りたいなら、日付指定して自宅で待ち構えているほうが確実かもしれませんね。