SublimeText3で快適にプログラミングする
Lockdef です
今日は大好きなSublime Textを紹介します
Sublime Textとは
最小限の構成で作られているプログラマ向けのGUIテキストエディタです
ライセンスを取得するには支払いが必要ですが、ライセンスを取得していなくても利用出来るので無料で使用することができます
人気が高いエディタなのでコミュニティが活発です、そのためパッケージ(拡張機能)開発も盛んに行われており、カスタマイズして自分好みの開発環境を構築することができます
動作が軽いのでマシンスペックが低いPCでも動作します
インストール
公式ページが分かりやすいので下記URLを参照してください
package control のインストール
本体のインストールが完了したら、パッケージ(拡張機能)の管理が行える環境を構築します
これについても下記URLが分かりやすいので参照してください
Installation - Package Control
[日本語訳]
最も簡単なインストール方法は、Sublime Textコンソールを使用することです。
コンソールはView > Show Console
からアクセスできます。
開いたら、下記のPythonコードをコンソールに貼り付けます。
import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedcf1dcaee' + 'ebe013ee18cced0ef93d5f746d80ef60'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)
おすすめのパッケージ
とりあえず入れておくと良いパッケージを紹介します
BracketHighlighter
括弧やダブルクォーツを見やすくします
ConvertToUTF8
ファイルを開いた時に自動的にUTF-8に変換します
Side Bar Enhancements
サイドバーのコンテキストメニューを強化します
A File Icon
サイドバーにファイルアイコンを表示します
SublimeLinter
コードのLinter(コードの間違いを検出してくれるパッケージ)を使用するときに必要になります
Molokai Pro
テーマを追加します
テーマを変更することでSublimeTextの見た目を大きく変えることが出来ます
インストール後にCrtl + Shift + P
を押してMolokai Pro
を選択するといくつかのテーマを選ぶことができます
もとに戻したい時はCrtl + Shift + P
を押してSelect Theme
を選択してください
Terminal View
エディタ内でTerminalを開くことが出来ます
Terminal
編集中のファイルが存在しているディレクトリでTerminalを開いてくれます
Pythonistaにおすすめのパッケージ
Pythonコードを書く人は入れておくと良いパッケージを紹介します
AutoPEP8
コードをコーディング規約PEP8に従ったコードに変換してくれます
PEP8のインストールが必要になるので、pip install pep8
インストールしておいてください
SublimeLinter PyLint
Pylintに従ったコード規約に違反している部分とコードの誤りを検出してくれます
動作にはSublimeLinter
が必要になるのでインストールしておいてください
また、Pylintのインストールが必要になるので、pip install pylint
でインストールしておいてください
Kite
Pythonの補完機能を強化してくれます
同様の補完機能を持ったJediとの違いはAIが補完候補を予測してくれることです
AIの予測により、import tensorflow as tf
などが補完候補に上がることになります
Kiteのインストール方法はこれまでとは異なります
下記URLからインストールしてください
Kite
Kiteのインストール完了後は自動でSublimeにパッケージがインストールされます
設定
Pythonのインデントは4スペースが推奨されているので、設定を書き換えます
Preference > Setting - User
を開いて
"tab_size": 4, "translate_tabs_to_spaces": true,
を追加してください
終わり
SublimeTextで快適なプログラミングをしてほしいです
ここに書いてある以外のパッケージも優れたものばかりなので、Sublimeへの不満が見つかったらパッケージで解決出来ないのか調べてみてください
パッケージを自分で作ることも出来ます、Pythonで作ることが出来るので興味があれば試してみると良いです
Pythonリストの展開
lockdefです
昨日に続いて競プロで得た知見を紹介します
アンパッキング
リストやタプルを展開したいときに使える技です。
Q. ['a', 'b']
から値を得てb a
を出力したい
普通の書き方
x = ['a', 'b'] print('{0} {1}'.format(x[1], x[0]))
良い書き方
x = ['a', 'b'] print(*x[::-1])
アスタリスクを前につけるだけでアンパッキングされます
Pythonのmax,min関数で使う引数keyについて
lockdefです
競プロをやっていて知ったPythonの書き方を紹介します
文字列の長さの最大、最小
Q 2つの文字列のうち、文字列の長さが最も大きいものを出力せよ
最大、最小ではmax
, min
を使います。
普通の書き方
A = input() B = input() print(A if len(A) > len(B) else B)
良い書き方
print(max(input(), input(), key=len))
max
,min
関数は引数にkeyを取ります、keyには関数が入って引数に渡された関数の返り値をもとにmax
,min
関数の値を返します
並列処理でPythonの処理速度を上げる方法
lockdefです
Pythonでの高速化テクニックはいくつかありますが、今回は並列処理について紹介します
並列処理とは
同時に複数の処理を行うことです。
同時に多くのタスクをこなすことで処理時間を短くすることができます。
前準備
必要ライブラリをインストールします
pip install joblib
コード
検証用の関数を用意します
def f(x): x = [i*x for i in range(2000)] x = [i**2 for i in x] x = sum(x) return x
普通の処理です
[f(x) for x in range(1000)]
並列処理です 普通の処理と比べてみてください
from joblib import Parallel, delayed Parallel(n_jobs=-1)([delayed(f)(x) for x in range(1000)])
結果
並列処理のほうが早いです。 Pythonを使っていて高速化をしたいときはぜひ使ってみてください
OpenCVでQRログイン
lockdefです
継続日数のために過去を持ち出して5分で書きます
コード
大事なところ
qr = cv2.QRCodeDetector() data, points, straight_qrcode = qr.detectAndDecode(frame)
ここでQRを認識して読み込む処理をしてます
あとはif文とかでユーザー確認してます
以上です
Flask / Django でグラフを書く
lockdefです
データサイエンスでお世話になってるmatplotlibのグラフをそのままウェブに出したいなと思いつきました
統計データから利用者の使用ブラウザや閲覧時間などをグラフで可視化するときに使えそうです
Flaskでグラフ出力 pic.twitter.com/W8Qa9SrEZW
— lock@JK (@LockDef) 2019年5月5日
主にFlaskでの実装で説明しますが、Djangoの実装も最後のあたりに書いてあります。
必要なライブラリ
pip install flask pip install matplotlib pip install numpy pip install seaborn
実装
タイトルにあまり関係ない部分は説明せずコードのみの紹介になります
from io import BytesIO import base64 from flask import Flask, render_template import numpy as np import matplotlib.pyplot as plt import seaborn as sns app = Flask(__name__)
今回はグラフを画像データに変換してHTMLで描写するので、imgタグのsrcで読み込める形にフォーマットします。
def img_format(byte): byte = base64.b64encode(byte.getvalue()).decode("utf-8") img = "data:image/png;base64,{}".format(byte) return img
Flaskのルート設定です。
plt.savefig
でメモリ上に画像を保存してimg_format
でHTMLで読み込める形に変換しています。
@app.route('/') def index(): byte = BytesIO() x = np.random.randn(1000) y = np.random.randn(1000) sns.jointplot(x, y) plt.savefig(byte) graph = img_format(byte) return render_template('index.html', graph=graph)
HTMLでは特別な部分はありません。
{{graph}}
をimgタグのsrcに渡してあげるだけです。
<!DOCTYPE html> <html> <head> <title>Web Graph</title> </head> <body> <img src="{{ graph }}"> </body> </html>
以上でグラフの描写は完了です。
全体コード
Djangoでの実装
HTMLは同じなのでviews.py
の紹介だけ行います。
コード内容はほとんど同じなので解説はFlaskのほうを参考にしてください。
from io import BytesIO import base64 import django.shortcuts import render import numpy as np import matplotlib.pyplot as plt import seaborn as sns def img_format(byte): byte = base64.b64encode(byte.getvalue()).decode("utf-8") img = "data:image/png;base64,{}".format(byte) return img def index(request): byte = BytesIO() x = np.random.randn(1000) y = np.random.randn(1000) sns.jointplot(x, y) plt.savefig(byte) graph = img_format(byte) return render(request, 'index.html', {'graph': graph})
ボクのモチベーションの保ち方
lockdefです
今日は何もしてないので適当なことを書いて継続日数を保持します
お気持ち
独学で技術を学びエンジニアを目指している人はたくさんいます
その人たちが社会に認められるためには成果が必要となるのでほとんどの人が進捗を出さなくてはという思いになります
独学で高い技術力を持つには相当の学習量が必要となりますが、そのためにはモチベーションを持たなくては続きません
モチベーションを保てない人は大勢います、なぜなら本来やる必要がない、つまり強制力がないからです
そこで人々はモチベーションの保ち方を思考し始めます
モチベーションの保ち方
ここではボクなりの保ちかたを紹介するのでよければ参考にしてください
行動開始
まずモチベ以前に行動の始め方です
- 目標または夢を設定する
- 実現のために必要な技術を知る
- 技術を取得するため勉強を始める
ボクの場合だと
- 彼女がほしい
- DeepLearning (AIを支える技術) を使えば実現出来る
- 本を買って独学を始める
保ち方
次にモチベの保ち方です
- 学習自体に飽きてきたとき
- 気分転換をする
- 学習内容が嫌になってきたとき
- 目標実現後の自分を想像する
- 何をすればいいか分からなくなってしまったとき
- 他分野に触れてみる
連休中や長期的な休みのときは定期的な気分転換が必要になります、気分転換は友達や恋人と遊びに出かけたり、音ゲー等の娯楽施設でストレス発散したりするといいです。
ボクが大抵するのは最先端の技術を見て「ボクはこれを超えるものを作りたい」と自分を奮い立たせることです。上のリストだと「目標実現後の自分を想像する」にあたります。
何をするかわからない状態になってしまったときは他に自分が興味を持ってることに手を出してみてください、今は一つの分野の知識に長けた人間よりも多くの分野に長けた視野の広い人間が必要とされています、行動が止まってしまったときはその時間を無駄にしないようにうまく利用することが大切です
おわり
ここに書いてあることが人々に推奨出来るかの保証はできませんが、独学でエンジニアを目指してる人の参考になるといいです。