リモートでgit commitしてからリモート(github)へpushする方法
リモートでgit commitしてからリモート(github)へpushする方法
普通は、githubでnewRepositoryを押して、git init @hogeをターミナルで実行する。
しかし、今回はローカルで
git init git commit -m "" git push
したことによりエラーが出た。
エラー
要はRepositoryを作れというエラー
git push [master] fatal: No configured push destination. Either specify the URL from the command-line or configure a remote repository using git remote add <name> <url> and then push using the remote name git push <name>
解決策
git remote add origin git@github.com:alexpchin/<reponame>.git git push -u origin master
gitのみで完結できないかと調べたけど面倒なので終わり。
Dropboxにファイルを置きたい。手元にも置きたい。複製することなく。
シンボリックリンクを使う
macOSにはエイリアスとシンボリックリンクという2つの選択肢がある。
windowsはまた違うらしいのでwinユーザーの方は参考になりません。
どっちを使うべきなのか
Mac OS Xの10.2より前のバージョンでは、エイリアスはファイルやフォルダを特定する際に、最初にそのユニークIDを用いて、次にパス名を用いました。Mac OS X 10.2で始める際には、エイリアスはこの検索順を逆転し、パス名は最初に用いて、ユニークIDを二番目に用いるようにしました。
これが意味しているのは、もしあなたがファイルを移動し、全く同じ名前のファイルで置き換えた場合、元のファイルへのエイリアスは、今度は新しいファイルを指すということです。
エイリアスは最初にファイルの位置を決定するためにファイルシステムパスを使用するため、今ではシンボリックリンクと同様の振る舞いを提供するようになっています。
シンボリックリンクはファイルを特定するために、完全にパス情報のみに依存しています。
もしあなたが、ファイルを置き換えずに同一ボリューム上のどこかに移動したら、エイリアスは追従するのに対して、そのファイルへのシンボリックリンクは壊れてしまいます。
シンボリックリンクを修復する唯一の方法は、削除してから新しく作るしかありません。
違い
エイリアスは、ファイル固有のIDを持ち、OS側がIDを追跡することで、エイリアス先ファイルを移動しても、リンクが壊れないらしい。驚き。
結論エイリアスを使う
ファイルを選択して、GUIで実行可能。 もしあなたが、ファイルを置き換えずに同一ボリューム上のどこかに移動したら、エイリアスは追従するのに対して、そのファイルへのシンボリックリンクは壊れてしまいます。
シンボリックリンクの方法
むしろ余計なID追跡とかが嫌な人向けに。
ln -s シンボリックリンク元絶対パス リンク先絶対パス
参考文献
チームでのwikiの作成手段
gitでいいのでは
チームで議事録、ログ、憲章などを書くときのツール HackMD https://hackmd.io/
キーバインド
エクストリームリーディング
チームで輪読する手段の一つ。
プロジェクト開始時に、プロジェクトマネジメントの本を皆でエクストリームリーディングすることにより、 同時にマネジメント手法の検討ができる。
pythonのリストの記法,参照と配列操作
スライス記法の復習¶
list[start:end] マイナスをつければ、終わりから0スタートでカウントした順番を示す [-5:-2]なら終わりから5番目から3番目と思いきや、終わりから4番目から2番目
lt1 = [10,20,30,40,50,60]
print(lt1[-5:-2])
lt1[2:5] = [200, 300, 400]
print(lt1)
a = np.arange(10)
a
# ビューオブジェクト
a_slice = a[3:6]
a_slice
a_slice[0] = 100
a_slice
a
ビューは元の配列を参照しているだけなので、ビューの要素に代入すると元の配列が変更される。
ビューではなくコピーが作りたいときは、copyメソッドを使ってa[:5, 3:].copy()などとする
b = np.arange(10)
b_slice = b[3:5].copy()
b_slice[0] = 100
print(b_slice)
print(b)
## ファンシーインデックス
これは配列の参照を配列で指定するというようなイメージ
a = np.arange(12).reshape(3, 4)
a
a[[0,2,1],[3,2,0]]
配列[a[0][3],a[2][3],a[1][0]]が返ってきている。
イメージは
a[[n行目],[m列目]] array([n1m2 , n2m2 , n3*m3])
a[:, [3, 2, 1, 0, 3]]
このように列で操作することもできる。これは便利。
同じことを複数の行、例えば2行目1行目について行いたい場合は、ネストする。
c = np.arange(12).reshape(3, 4)
print(c)
c[[1, 0]] [:, [3, 2, 1]]
# スライス記号が入ってわけわからないコード
import numpy as np
lt = [[10,11,12,13,14,15,16,17,18,19,],[20,21,22],[30,31,32,33,34,35]]
seq_len = 3
features = np.zeros((len(lt),seq_len), dtype=int) #0埋め
for i , row in enumerate(lt):
features[i, -len(row):] = np.array(row)[:seq_len]
# numpy.arrayは、組み込みのlistとは違い、スライスを使った記法がある
# a[][] と a[,,] は等価
# features[i][ltの途中row分から最後まで]
features
np.array(row)#元データ全体
np.array(row)[:seq_len]#元データから制限文字数までを取り出す。
</div>
pythonのイテレータとイテラブルについて enumerate()のドキュメントを参照した際の備忘録
イテレータとイテラブルとは
イテラブルとは反復可能であるということ。 イテレータはnextメソッドを持つ。 イテレータは、処理の状態をもっている。よって順番に取り出すときにリストより便利な場合がある。
enumerate()
ドキュメント参照
enumerate(iterable, start=0) Return an enumerate object. iterable must be a sequence, an iterator, or some other object which supports iteration. The next() method of the iterator returned by enumerate() returns a tuple containing a count (from start which defaults to 0) and the values obtained from iterating over iterable.
seasons = ['Spring', 'Summer', 'Fall', 'Winter'] list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
next(seasons)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-9-a76fcce3fb20> in <module>()
----> 1 next(seasons)
TypeError: 'list' object is not an iterator
iter()
iter()によってコンテナをイテレータにすることができる。
seasons_iter = iter(seasons) next(seasons_iter)
'Spring'
next(seasons_iter)
'Summer'
next(seasons_iter)
'Fall'
next(seasons_iter)
'Winter'
next(seasons_iter)
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-20-f2e6da853580> in <module>()
----> 1 next(seasons_iter)
StopIteration:
参照元
http://www.bokupy.com/detail/29
https://docs.python.jp/3/library/functions.html#enumerate
pythonのタプルとイミュータブルについて
タプルはイミュータブルとは
「イミュータブル」というのはあくまでも「オブジェクト id を変えずに要素を追加・変更・削除をすることができないこと」のみを表します
イミュータブルでも可能なこと
- タプルを参照している変数に再代入すること
- タプルの中の要素がミュータブルな場合にその要素そのものを変更すること
a. タプルを参照している変数に再代入すること
# タプルは += の結果新しいタプルが生成される t2 = t1 = ('みかん', 'りんご') print(id(t1)) t1 += ('バナナ', 'パイナップル') print(id(t1)) print(t1 is t2) # => False print(t1) print(t2)
4511412168
4506233176
False
('みかん', 'りんご', 'バナナ', 'パイナップル')
('みかん', 'りんご')
# 一方、リストは += で元のリストが維持される l2 = l1 = ['みかん', 'りんご'] print(id(l1)) l1 += ['バナナ', 'パイナップル'] print(id(l1)) print(l1 is l2) # => True print(l1) print(l2)
4506173256
4506173256
True
['みかん', 'りんご', 'バナナ', 'パイナップル']
['みかん', 'りんご', 'バナナ', 'パイナップル']
b. タプルの中の要素がミュータブルな場合にその要素そのものを変更すること
「タプルが持つ参照」を変更することと「タプルが参照するオブジェクトの中身」を変更することは別であって、タプルが禁止しているのは前者のみです。
参照されたオブジェクトが dict 等のミュータブルなオブジェクトであれば当然そのオブジェクトの中身は更新することができます。
# 第 1 要素に dict を持つタプルを定義する # (要素数が 1 のタプルを定義するときは () 内の末尾に , を入れる必要あり) t1 = ({'mark': 'ハート', 'number': '7'}, ) print(id(t1)) # dict を変更する t1[0]['mark'] = 'スペード' print(id(t1)) print(t1) # => ({'mark': 'スペード', 'number': '7'}, )
4511897808
4511897808
({'mark': 'スペード', 'number': '7'},)
参照文献
https://www.lifewithpython.com/2017/12/python-tuple-list-difference.html