レポジトリ内のファイルに含まれる文字列を全て置換するコマンド

特定の文字列を全て置換するコマンド

環境

  • OSX (Yosemite)

他OSだとsed の引数の扱いが微妙に違うので、ご注意ください。Ubuntuなどで検証したら、更新します。

例では dir ディレクトリに含まれる coincheck.jpcoincheck.com に置換

% grep -irl coincheck.jp dir | xargs -I {} sed -i '' 's/coincheck.jp/coincheck.com/g' {}

結果

結果はgit diff とかで確認してください。

% git diff 

参考

sedコマンドで覚えておきたい使い方12個(+1個) | 俺的備忘録 〜なんかいろいろ〜

Linuxコマンド集 - 【xargs】標準入力から生成したコマンドラインを実行する:ITpro

python3 でyyyymmddhhmmss形式をdatetime形式に変換する

python で byte 型のyyyymmddhhmmss形式をdatetime形式に変換します

native なdatetime形式

datetime パッケージを用いてdatetime型にします。

>>> from datetime import datetime
>>> _time=b"20161229122800Z"
>>> td = datetime.strptime( _time.decode('utf-8'), '%Y%m%d%H%M%SZ')
>>> td
datetime.datetime(2016, 12, 29, 12, 28)

これだとnative (UTCオンリー) となり、マルチリージョン対応が困難。

aware なdatetime形式

以下のようにして、aware な形式(オブジェクトの中にタイムゾーンの情報を思っている形式) にするにはpytz を用いる。

pytz は標準パッケージではないものの、準公式パッケージ相当の信頼性があるもよう。

// pytz のインストール
% pip install pytz

awareなdateime形式を得る。

>>> from datetime import datetime
>>> import pytz
>>> _time=b"20161229122800Z"
>>> td = datetime.strptime( _time.decode('utf-8'), '%Y%m%d%H%M%SZ').replace(tzinfo=pytz.utc)
>>> td
datetime.datetime(2016, 12, 29, 12, 28, tzinfo=<UTC>)

参考

Pythonの日付処理とTimeZone | Nekoya Press

systemd を利用してプロセスをデーモン化する

systemdを利用すれば、プロセスのデーモン化を簡単に行うことができます。

環境

  • ubuntu 16.04
  • ( systemd のシステムであれば使えるはず。)
    • CentOS7 など

デーモン化前

次のようなコマンドをバックグラウンドで実行しているとします。

% cd /var/lib/nem/0.6.79/package/nis
% java -Xms512M -Xmx1G -cp ".:./*:../libs/*" org.nem.deploy.CommonStarter > /var/log/nis.log 2>/var/log/nis.error.log &

これをsystemd でデーモン化します。

systemd でデーモン化する

systemd に必要なファイルを作成します。

/etc/systemd/system/nis-0.6.79.service

[Unit]
Description=NIS
After=syslog.target network.target

[Service]
Type=forking
EnvironmentFile=-/etc/default/nis-0.6.79
WorkingDirectory=/var/lib/nem/
ExecStart=/usr/local/bin/nis-0.6.79-start.sh
ExecStop=/usr/local/bin/nis-0.6.79-stop.sh
User=nem
Group=nem
KillMode=none
Restart = always

[Install]
WantedBy=multi-user.target

Restart = always によって、プロセスが停止したら、自動的に再起動します。

ただ、この段階ではファイルが不足しているので動きません。

  • /etc/default/nis-0.6.79
  • /usr/local/bin/nis-0.6.79-start.sh
  • /usr/local/bin/nis-0.6.79-stop.sh

必要なファイルを作成する

環境変数のためのファイルを作成しておきます。

/etc/default/nis-0.6.79

LOG="/var/log/nem/nis.log"
ERROR_LOG="/var/log/nem/nis.error_log"
RUN_DIR="/var/lib/nem/run/nem"
LOCK_FILE=/var/lib/nem/nis.lock
PID_FILE=/var/lib/nem/run/nem/nis-0.6.79.pid

このファイルに記載した変数はこのサービス内のスクリプトで利用することができます。

起動スクリプトや停止スクリプトで利用します。

起動スクリプトを作成

起動スクリプトを作成します。

/usr/local/bin/nis-0.6.79-start.sh

#!/bin/bash
[ -d $RUN_DIR ] || mkdir -p ${RUN_DIR}
cd /var/lib/nem/0.6.79/package/nis
java -Xms512M -Xmx1G -cp ".:./*:../libs/*" org.nem.deploy.CommonStarter > $LOG 2>$ERROR_LOG &
echo $! > ${PID_FILE}

実行権限・所有権を変更しておきます。

% sudo chown nem. /usr/local/bin/nis-0.6.79-start.sh
% sudo chmod +x /usr/local/bin/nis-0.6.79-start.sh

停止スクリプトを作成

停止スクリプトを作成します。

/usr/local/bin/nis-0.6.79-stop.sh

#!/bin/bash
[ -f ${PID_FILE} ] && kill -9 $(cat ${PID_FILE})
[ -f ${LOCK_FILE} ] && rm ${LOCK_FILE}
[ -f ${PID_FILE} ] && rm ${PID_FILE}

実行権限・所有権を変更しておきます。

$ sudo chown nem. /usr/local/bin/nis-0.6.79-stop.sh
$ sudo chmod +x /usr/local/bin/nis-0.6.79-stop.sh

Serviceとして認識されたか確認する

systemd にservice として認識されたか確認します。

% systemctl list-unit-files --type=service | grep nis
nis-0.6.79.service                         disabled

ここに表示されたら、認識されていることがわかります。

もし表示されなかったら、なにかおかしいのでエラー文などを参考に修正してみてください。

サーバ起動時に自動起動する

サーバ起動時に自動起動するようにします。

# 自動起動on
$ sudo systemctl enable nis-0.6.79
$ systemctl list-unit-files --type=service | grep nis
nis-0.6.79.service                         enabled

起動 / 確認 / 停止

#  起動
$ sudo systemctl start nis-0.6.79

# 確認
$ sudo systemctl status nis-0.6.79

● nis-0.6.79.service - NIS
   Loaded: loaded (/etc/systemd/system/nis-0.6.79.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2016-10-17 06:25:05 JST; 1 day 5h ago
  Process: 30714 ExecStop=/usr/local/bin/nis-0.6.79-stop.sh (code=exited, status=0/SUCCESS)
  Process: 30720 ExecStart=/usr/local/bin/nis-0.6.79-start.sh (code=exited, status=0/SUCCESS)
 Main PID: 13771
    Tasks: 43
   Memory: 1.1G
      CPU: 19min 49.692s
   CGroup: /system.slice/nis-0.6.79.service
           └─30721 java -Xms512M -Xmx1G -cp .:./*:../libs/* org.nem.deploy.CommonStarter

#  起動
$ sudo systemctl stop nis-0.6.79

OSを再起動して、サービスが自動起動するか確認

もしサービスインする前でしたら、OS を再起動して、サービスが自動起動するか確認します。

# 再起動
$ reboot

起動していたらokです

# 確認
$ sudo systemctl status nis-0.6.79

以上です。

参考

Systemd入門(1) - Unitの概念を理解する - めもめも

いまさらだけどsystemdに入門した - 雑なメモ

Systemdを使ってさくっと自作コマンドをサービス化してみる - Qiita

djangoの管理者パスワードを再設定する

django の管理者パスワードを忘れてしまったときに、コマンドラインから再設定する方法の備忘録

stackoverflow によると幾つか方法が提案されているので主要な2つを紹介します。

環境

  • django 1.9

方法

changepassword コマンドを使う方法

% manage.py changepassword USERNAME

django shell を利用する方法

標準のUserモデルを使っているときは次の通り。

from django.contrib.auth.models import User
// superuser の一覧を取得する
User.objects.filter(is_superuser=True) 
u = User.objects.get(username='your username')
u.set_password('raw password')
u.save()

独自のモデル(たとえば、CustomUser.models に MyUser クラスを作っているとする)を利用するときは次の通り

from CustomUser.models import MyUser as User
usr = User.objects.get(username='your username')
usr.set_password('raw password')
from django.contrib.auth.models import User
// superuser の一覧を取得する
User.objects.filter(is_superuser=True)
u = User.objects.get(username='your username')
// パスワードリセット 
u.set_password('raw password')
// 保存
u.save()

参考

stackoverflow.com

Using the Django authentication system | Django documentation | Django

スタートアップのための資料 - 随時更新版

VC

知られざるVCのビジネスモデル、その全貌!

ピッチ

www.slideshare.net

しかし、重要なトラクションを出す前に、調達しようとするのなら話は別です。
データの代わりに、仮説や逸話、確信が求められます。
このステージで投資家とやりあうには、巨大な市場を追求することや、
以下の3つの質問に対する強い答えを持っている必要があります。

1)なぜこのビジネスなのか 
2)なぜ今なのか 
3)なぜあなたなのか 

出典
シードステージのスタートアップが資金調達で聞かれる、3つの重要な質問 
http://500startups.jp/why/ 

シードステージのスタートアップが資金調達で聞かれる、3つの重要な質問 | 500 Startups Japan

心構え・失敗することについて

// 「成功している人」が共通して持っているマインドセット7つ より
- 成功者は失敗を真剣に受け止めすぎない
- 成功者は自分がありのままの自分を受け入れる
- 成功者はゴールを設定し、達成のために努力する
- 成功者はチャンスを待たない
- 成功者は問題が起こっても脇道に逸れない
- 成功者は決断力がある
- 成功者は常に学ぶ

引用元 「成功している人」が共通して持っているマインドセット7つ | ライフハッカー[日本版]


  • 2016/10/19 「成功している人」が共通して持っているマインドセット7つ を追加
  • 2016/10/31 ベンチャー関係者必読「スタートアップが急成長を目指すべき理由 を追加
  • 2016/11/01 シードステージのスタートアップが資金調達で聞かれる、3つの重要な質問 を追加

django パスワードリセットのcss をadmin 画面CSSからカスタムCSSに変更する

  • django : 1.8
  • python 2.7.10

django のパスワードリセット(password reset) とかパスワード忘れた(password forget)のCSSがadmin画面のCSS を呼んでしまうので、カスタマイズしたい。

// project/settings.py

 INSTALLED_APPS = (
-    'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'your_app',
     :
+    'django.contrib.admin',
 )

django.contrib.admin をyour_app よりも下に書くことで変更できた。やった!

と思ったら、admin画面が表示されなくなった

Reverse for 'app_list' with arguments '()' and keyword arguments '{'app_label': 'default'}' not found. 0 pattern(s) tried: []

sha512 でハッシュ化されたパスワードを生成するワンライナー

sha512 でパスワードをハッシュ化する

  • python 2.7 で動作実績あり
  • python3 系は未検証
  • Mac, Ubuntu , Debian, CentOS
% pip install passlib
% python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.encrypt(getpass.getpass()))"