SublimeText3で快適にプログラミングする

Lockdef です

今日は大好きなSublime Textを紹介します

Sublime Textとは

最小限の構成で作られているプログラマ向けのGUIテキストエディタです
ライセンスを取得するには支払いが必要ですが、ライセンスを取得していなくても利用出来るので無料で使用することができます
人気が高いエディタなのでコミュニティが活発です、そのためパッケージ(拡張機能)開発も盛んに行われており、カスタマイズして自分好みの開発環境を構築することができます
動作が軽いのでマシンスペックが低いPCでも動作します

インストール

公式ページが分かりやすいので下記URLを参照してください

Download - Sublime Text

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)])

結果

f:id:lockdef:20190507235244p:plain
処理時間の比較(ms)

並列処理のほうが早いです。 Pythonを使っていて高速化をしたいときはぜひ使ってみてください

OpenCVでQRログイン

lockdefです

継続日数のために過去を持ち出して5分で書きます

コード

github.com

大事なところ

qr = cv2.QRCodeDetector()
data, points, straight_qrcode = qr.detectAndDecode(frame)

ここでQRを認識して読み込む処理をしてます

あとはif文とかでユーザー確認してます

以上です

Flask / Django でグラフを書く

lockdefです

データサイエンスでお世話になってるmatplotlibのグラフをそのままウェブに出したいなと思いつきました
統計データから利用者の使用ブラウザや閲覧時間などをグラフで可視化するときに使えそうです

主に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>

以上でグラフの描写は完了です。

全体コード

github.com

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です

今日は何もしてないので適当なことを書いて継続日数を保持します

お気持ち

独学で技術を学びエンジニアを目指している人はたくさんいます
その人たちが社会に認められるためには成果が必要となるのでほとんどの人が進捗を出さなくてはという思いになります
独学で高い技術力を持つには相当の学習量が必要となりますが、そのためにはモチベーションを持たなくては続きません
モチベーションを保てない人は大勢います、なぜなら本来やる必要がない、つまり強制力がないからです
そこで人々はモチベーションの保ち方を思考し始めます

モチベーションの保ち方

ここではボクなりの保ちかたを紹介するのでよければ参考にしてください

行動開始

まずモチベ以前に行動の始め方です

  1. 目標または夢を設定する
  2. 実現のために必要な技術を知る
  3. 技術を取得するため勉強を始める

ボクの場合だと

  1. 彼女がほしい
  2. DeepLearning (AIを支える技術) を使えば実現出来る
  3. 本を買って独学を始める

保ち方

次にモチベの保ち方です

  • 学習自体に飽きてきたとき
    • 気分転換をする
  • 学習内容が嫌になってきたとき
    • 目標実現後の自分を想像する
  • 何をすればいいか分からなくなってしまったとき
    • 他分野に触れてみる

連休中や長期的な休みのときは定期的な気分転換が必要になります、気分転換は友達や恋人と遊びに出かけたり、音ゲー等の娯楽施設でストレス発散したりするといいです。

ボクが大抵するのは最先端の技術を見て「ボクはこれを超えるものを作りたい」と自分を奮い立たせることです。上のリストだと「目標実現後の自分を想像する」にあたります。

何をするかわからない状態になってしまったときは他に自分が興味を持ってることに手を出してみてください、今は一つの分野の知識に長けた人間よりも多くの分野に長けた視野の広い人間が必要とされています、行動が止まってしまったときはその時間を無駄にしないようにうまく利用することが大切です

おわり

ここに書いてあることが人々に推奨出来るかの保証はできませんが、独学でエンジニアを目指してる人の参考になるといいです。