TIL

Today I Learned. 知ったこと、学んだことを書いていく

lnコマンド - Linux

ln -sを使うとシンボリックリンクが作成できる

$ ln -s シンボリックを作成したいフォルダの完全パス 作成するシンボリックのパス

/Users/username/Document/programs/Pythonシンボリックリンク/Users/Document/Python に作成する

$ ln -s /Users/username/Document/programs/Python /Users/Document/Python

これでOK

-fオプション

作成しようとしたシンボリックリンクがあっても強制的に作成する

リンクファイルと同じ名前のファイルがあっても強制的に上書きする

http://www.atmarkit.co.jp/ait/articles/1605/30/news022.html

$ ln -sf from.txt to.txt

シンボリックリンクについては以下の記事でざっくりと解説している。

tmg0525.hatenadiary.jp



参考文献

datatimeモジュール - Python

入門 Python 3 に記載されていた日付と時刻の扱いについてまとめてみた。忘れてもいいようにメモとして残しておく。


Pythonで日時や時刻を扱うときの一つの方法として、標準モジュールのdatetimeモジュールがある。このモジュールには主なオブジェクト(クラス?)が4つある。

  • date...年月日を扱う
  • time...時分秒を扱う
  • datetime...日付と時刻を扱う
  • timedelta...日付と時刻の間隔を扱う

まずはdateオブジェクトから。

date

dateオブジェクトは年月日を指定することで生成できる。年月日はぞれぞれ属性として取り出せる。

>>> from datetime import date
>>> birthday = date(1998, 3, 24)
>>> birthday
datetime.date(1998, 3, 24)
>>> birthday.year
1998
>>> birthday.month
3
>>> birthday.day
24
>>> birthday.isoformat()
'1998-03-24'

birthday.isoformat()で日付の文字列を取得できる。ISOとは日時表現の国際標準でISO 8601のこと。

また、dateオブジェクトの範囲は以下のようになっているため紀元前の日付や天文学的な時間の計算(?)ではdateオブジェクトは使えない。

>>> date.min
datetime.date(1, 1, 1)
>>> date.max
datetime.date(9999, 12, 31)


次は、日付と時刻の間隔を扱えるtimedeltaオブジェクト。

timedelta

次のソースではtoday()メソッドを使って今日の日付を取得している。

>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2017, 10, 9)

次に、timedeltaオブジェクトを使い、今日の1日後、7日後、1日前の日付を取得する。

>>> from datetime import timedelta
>>> one_day = timedelta(days=1)
>>> tomorrow = now + one_day
>>> tomorrow
datetime.date(2017, 10, 10)
>>> now + (7 * one_day)
datetime.date(2017, 10, 16)
>>> yesterday = now - one_day
>>> yesterday
datetime.date(2017, 10, 8)

timedeltaオブジェクトを使い、演算ができるのは直感的でいいと思った。

次は、時刻を扱うためのtimeオブジェクト。

time

>>> from datetime import time
>>> noon = time(12, 0)
>>> noon
datetime.time(12, 0)
>>> noon.hour
12
>>> noon.minute
0
>>> noon.second
0
>>> noon.microsecond
0

timeオブジェクトを生成するときには大きな単位から順に指定する(時, 分, 秒, マイクロ秒)。すべての引数の値は0がデフォルトとなっているため、省略された場合には0になる。

また、時、分、秒、マイクロ秒のそれぞれはプロパティで定義されているため、簡単に取得できる。※ マイクロ秒の値はコンピュータの内と全く同じ値にはなっていないことに注意すること。


次は、日時と時刻を扱うためのdatetimeオブジェクト。

datetime

次のようにしてdatetimeオブジェクトを作成できる。この例では2017年1月2日3時4分5秒6μ秒のdatetimeオブジェクトを作っている。

>>> from datetime import datetime
>>> some_day = datetime(2017, 1, 2, 3, 4, 5, 6)
>>> some_day
datetime.datetime(2017, 1, 2, 3, 4, 5, 6)
>>> some_day.isoformat()
'2017-01-02T03:04:05.000006'

datetime.isoformat()メソッドでISOの書式の文字列が取得できる。Tが日付と時刻の境目となっている。

現在の日時と時刻を取得するためにはnow()メソッドを使う。

>>> from datetime import datetime
>>> now = datetime.now()
>>> now
datetime.datetime(2017, 10, 9, 23, 17, 23, 376254)

また、年、月、日、時、分、秒、マイクロ秒はプロパティとして定義されているため簡単に取得できる。

>>> now.year
2017
>>> now.month
10
>>> now.day
9
>>> now.hour
23
>>> now.minute
17
>>> now.second
23
>>> now.microsecond
376254


datetime.combine()メソッドを使うことでdateオブジェクトとtimeオブジェクトを結合してdatetimeオブジェクトを生成できる。

>>> from datetime import datetime , time, date
>>> t = time(23, 30)
>>> this_day = date.today()
>>> dt = datetime.combine(this_day, noon)
>>> dt
datetime.datetime(2017, 10, 9, 23, 30)
>>> dt.isoformat()
'2017-10-09T23:30:00'

この例ではマイクロ秒を指定していないため、datetime.isoformat()メソッドで取得できる値もマイクロ秒は含まれていない。

逆に、date()time()メソッドを使えばdatetimeからdate、timeをちゅうしゅつできる。

>>> dt.date()
datetime.date(2017, 10, 9)
>>> dt.time()
datetime.time(23, 30)

週番号を取得 (2017/10/13 追記)

datetimeオブジェクトで週番号を取得するにはdatetime.weekday()メソッドを使う。(datetime.weekday)

>>> from datetime import datetime
>>> dt = datetime.now()
>>> dt
datetime.datetime(2017, 10, 13, 8, 0, 25, 26142)
>>> dt.weekday()
4

weekday()で取得できる週番号は「0が月曜日」、「6が日曜日」となっている。4ということは金曜日ということになる。



参考文献

github.com

入門 Python 3

入門 Python 3

GitHubのリポジトリ内のファイル単体をダウンロードする

ファイルを表示したときのRawボタンを押した後に表示されるページのURLをwgetコマンドに渡せばダウンロードできる。

$ wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh



参考文献

GitHub - githubからファイル単体をclone(DL)できる?(14124)|teratail

リモートブランチの状態を巻き戻す

手順としては

  1. リモートブランチと同じ状態にする
  2. 巻き戻すリモートブランチのバックアップ用のブランチを作成
  3. ローカルブランチを巻き戻したいところまで戻す
  4. 巻き戻すリモートブランチを削除
  5. ローカルブランチをリモートにプッシュ(ブランチを作成)
  6. バックアップ用のブランチを削除

今回はmasterブランチを巻き戻したいとする。

リモートブランチと同じ状態にする

$ git pull origin master

リモートブランチのバックアップ作成

$ git push origin master:master_bak

ローカルブランチを巻き戻したいところまで戻す

2つ前に戻したいとする。

$ git reset HEAD~2

巻き戻す対象のリモードブランチを削除

$ git push origin :master

ここで、次のようなエラーが出た場合、そのリモートブランチがGitHubなどでデフォルトのブランチに設定されている可能性がある。GitHubでデフォルトをバックアップ用ブランチにして、再度コマンドを実行する。

ローカルブランチをリモートにプッシュ(ブランチを作成)

$ git push origin master

バックアップ用のブランチを削除

$ git push origin :master_bak

以上



参考文献

2つ以上前のコミットのメッセージを修正する

1つ前のコミットのメッセージを修正

$ git commit --amend

2つ以上前のコミットのメッセージを修正

rebase -iを使う。

以下のような履歴になっているとする。

$ git log
commit c2f0fceb7ef52e5155fea67c7370bd318597ec30 (HEAD -> master)
Author: t-ohsaka <t-ohsaka@plus-bm.jp>
Date:   Thu Oct 12 17:56:35 2017 +0900

    update あにょはせよ 追加

commit 6e66b1b05561438535344fd310b8ec1fac95ee3c
Author: t-ohsaka <t-ohsaka@plus-bm.jp>
Date:   Thu Oct 12 17:55:28 2017 +0900

    update こんにちは 追加

commit 7c27b02aebf1579518a35373e1f772b0411eede8
Author: t-ohsaka <t-ohsaka@plus-bm.jp>
Date:   Thu Oct 12 17:54:41 2017 +0900

    add hello.txt

2つ目のコミットのメッセージを"こんにちは!"にしたいとする。

rebase -iでどのコミットのメッセージを変更するかを指定する。

$ git rebase -i HEAD~2

すると、エディタが起動する

pick 6e66b1b update こんにちは 追加
pick c2f0fce update あにょはせよ 追加

...

メッセージを修正したいコミットのpick部分をeditに変える。

edit 6e66b1b update こんにちは 追加
pick c2f0fce update あにょはせよ 追加

...

変更したら、保存して終了する。

次に、いつものように以下のコマンドを実行して、メッセージを修正する。

$ git commit --amend 

変更を確定させる。

$ git rebase --continue

これで、コミットメッセージが変わったはず。



参考文献

Gitのコミットメッセージを後から変更する方法をわかりやすく書いてみた | 株式会社グランフェアズ

iTerm2を入れてみた

ここからダウンロードしてインストールする。

無音にする

Preferences > Terminal > Notifications > Silence bell にチェックする

カラースキーマを変更する

ここgit cloneし、好きなカラースキーマを適用する。

$ git clone https://github.com/mbadolato/iTerm2-Color-Schemes.git

今回はGruvboxを適用してみる。

iterm2 > schemes > Gruvbox Dark.itermcolorsをダブルクリックしてiTerm2にインポートする。

Preferences > Profiles > Colors > Color Presets > Gruvbox Dark を選択。

コマンドラインの色を設定する。

$ echo export CLICOLOR=1 > ~/.bash_profile

zshを使っている場合には.zshrcにする。

すごい見やすくなった!!

ターミナルの $ より前の表示を変更する。

t_MBP:~ tamago324$ ls
Python Go

t_MBP:~ tamago324の部分の表示を変更する。この設定は環境変数PS1に設定されている。

デフォルトでは

$ echo $PS1
\h:\W \u\$

となっている。

\hはホスト名を表している。

\Wカレントディレクトリを表している。これは必須。

\uは現在ログインしているユーザー名。

自分はシンプルに以下のようにした。.bash_profileに追記する。

export $PS1=':D \W $'

このように表示される。

:D ~ $

新規タブのディレクトリをカレントディレクトリのままで表示

Preferences > General > Reuse previous session's directoryにチェックする。


  • 2017/10/12 追記

Gitのブランチ情報を表示

こちらを参考にさせていただきました。

git-promptというものがあるらしい。ここからダウンロードして、.bash_profileに少し記述するだけで表示されるようになる。

まずは、git-prompt.shをダウンロードする

~/.bash $ wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh

~/.bashに配置した。

次に~/.bash_profileを編集する。

source ~/.bash/git-prompt.sh
GIT_PS1_SHOWDIRTYSTATE=true

export PS1=':D \W\[\033[1;31m\]$(__git_ps1)\[\033[00m\] \$'

GIT_PS1_SHOWDIRTYSTATEでaddされてない変更(unstaged)があったとき"*"を表示する、addされているがcommitされていない変更(staged)があったとき"+"を表示する。

\[\033[1;31m\]$(__git_ps1)\[\033[00m\]で赤色でブランチの情報が表示される。

これでブランチが表示された!



参考文献