repository の settings を変更する
デフォルトで
Read repository contents permission
になっているが、
Read and write permissions
に変更して Save する
repository の settings を変更する
デフォルトで
Read repository contents permission
になっているが、
Read and write permissions
に変更して Save する
今後もつかそうなのでメモ
aws ecr describe-images --repository-name $REPOSITORY --query "reverse(sort_by(imageDetails[*], &imagePushedAt))" | jq '.[] | select(.imagePushedAt > "2022-12-01T00:00:00+09:00")'
REPOSITORY
に pushされた image を取得することができる
よく使うので tips として書き留めておく。
以下のコマンドで取得可能
aws ecr describe-repositories --output json | jq -re ".repositories[].repositoryName"
結果は、ECR のリポジトリが表示される
ecr-test-repo1
ecr-test-repo2
概要
sharepoint に 大容量(1G)のファイルをアップロードする方法を紹介
CURL コマンドでやると、以下の記事で紹介のあるように認証周りに骨が折れる。
そこで、認証周りを包括しつつ非常に簡単にアップロードできるライブラリを紹介。
pip install Office365-REST-Python-Client
以下のコードはサンプルとしてユーザー認証をしている。
アプリケーションを登録して利用することが望ましい。
sharepoint_url と、UserCredential の部分を適宜修正することでそのまま利用可能。
from office365.runtime.auth.user_credential import UserCredential
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.files.creation_information import FileCreationInformation
import os
def get_sharepoint_context_using_user():
sharepoint_url = 'https://xxxxxxxxxx.sharepoint.com/sites/upload-test'
user_credentials = UserCredential('xxxxxxxxxx@sumito.jp', 'password')
ctx = ClientContext(sharepoint_url).with_credentials(user_credentials)
return ctx
def create_sharepoint_directory(dir_name: str):
"""
Creates a folder in the sharepoint directory.
"""
if dir_name:
ctx = get_sharepoint_context_using_user()
result = ctx.web.folders.add(f'Shared Documents/{dir_name}').execute_query()
if result:
# documents is titled as Shared Documents for relative URL in SP
relative_url = f'Shared Documents/{dir_name}'
return relative_url
target_url = "/sites/upload-test/Shared Documents/test-tsukada-dir-hoge"
ctx = get_sharepoint_context_using_user()
target_folder = ctx.web.get_folder_by_server_relative_url(target_url)
size_chunk = 1000000
local_path = "1G.csv"
def print_upload_progress(offset):
file_size = os.path.getsize(local_path)
print("Uploaded '{0}' bytes from '{1}'...[{2}%]".format(offset, file_size, round(offset / file_size * 100, 2)))
create_sharepoint_directory('test-tsukada-dir-hoge')
with open(local_path, 'rb') as f:
uploaded_file = target_folder.files.create_upload_session(f, size_chunk,print_upload_progress).execute_query()
golangci-lint run ./...
実行時、
File is not `goimports`-ed with -local github.com/xxx/xxx (goimports)
というエラーが発生することがあったのでその対処法を紹介
(さらに…)何かと
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
と確認されることがあるが、 -Confirm:$false
オプション を使うことでこの確認をスキップすることが可能だ
例えばデフォルトでは
Remove-DistributionGroup 'tsukada@sumito.jp' -BypassSecurityGroupManagerCheck
Confirm
Are you sure you want to perform this action?
Removing distribution group Identity:"tsukada@sumito.jp" will remove the Active Directory group object.
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
以下のようにすることで確認を飛ばして削除することが可能
Remove-DistributionGroup 'tsukada@sumito.jp' -BypassSecurityGroupManagerCheck -Confirm:$false
SA1019: "io/ioutil" has been deprecated since Go 1.16: As of Go 1.16
と引っかかるようになった場合の対処として、旧Version (左)で記載していた書き方を、現時点での推奨(右)に書き換える必要がある。
非推奨(deprecated) | 推奨 |
ioutil.Discard | io.Discard |
ioutil.NopCloser() | io.NopCloser() |
ioutil.ReadAll() | io.ReadAll() |
ioutil.ReadDir() | os.ReadDir() |
ioutil.ReadFile() | os.ReadFile() |
ioutil.TempDir() | os.MkdirTemp() |
ioutil.TempFile() | os.CreateTemp() |
ioutil.WriteFile() | os.WriteFile() |
参考情報
人にお願いしてシステムを作ってもらう事があるが、お願いした事と微妙に違うものができあがってしまう事があった。このような体験があってから、依頼の仕方が悪かったのかと仮説を立て本書を読むことにした。
さまざまなパターンがある事がわかった
これの解決策として、Why -> How -> What の順番で考えよ
ということがあった。これは、The Golden Circle で有名なこの話と同じだ
https://www.smartinsights.com/digital-marketing-strategy/online-value-proposition/start-with-why-creating-a-value-proposition-with-the-golden-circle-model/
つまりは解きたいゴールを明らかにする。ゴールが明確でなければ稼働まで辿り着けない。
を明確にする。問題になるのは、現場が理解しない(できない)のではなく、各関係部署が共に目指せるプロジェクトゴールを明確にする必要がある。
プロジェクトが共有できてないと気づいた時には、手を止めて共有することが先決となる。
良いプロジェクトゴール作りにするためには
システム機能を具体化する前に「システムが変わったらどういう絵姿になっているか」という将来像を描く
業務フローを中心に書くのがポイント
要求定義、要件定義と同義。特に機能要求定義。
まずは言葉の整理
要求定義とは、「システムはこんな風であって欲しい」とシステムに求めることを明確にする作業
利害関係者の意見をまとめて、実現すること・実現しないことを揺るぎなく決めること
要件定義とはシステムを作る人が、システムに必要な性能や実装すべき機能などを明確にする作業
システム要求を作る上での障壁
必要な要求を見極め、納得と合意を得られる優先順位を決める
絞り込みには説得ずくめのコンセンサスが必要不可欠
システムを使いこなし業務を良くして利益を出さなければ構築する意味がない。
どれも大事に見える、比較できないということに陥りがち。
もっとミクロで観ていくと「今回のゴールに必要」「現場のITスキルだと使いこなせない」「先進的すぎて本当に実現できるのか」という項目も出てくる。
以下の3つの基準を、3段階評価する(あくまでも一例)
これらの基準は関係者を巻き込んで決める。自分達で基準を決めてもらうことで、プロジェクトの見方になってもらう。
本書は 400ページ弱ほどの本なので、ごっそり自分に最も関係しそうなところだけ雑にまとめるとこんな感じだ。
M2 mac に移行した後、今まで動いていたアプリケーションで以下のようなエラーが出るようになった
xcrun: error: unable to load libxcrun (dlopen(/Library/Developer/CommandLineTools/usr/lib/libxcrun.dylib, 0x0005): tried: '/Library/Developer/CommandLineTools/usr/lib/libxcrun.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e'))).
原因は 今まで使っていたコマンドラインが intel版のまま移行されてしまったため、これが動かないためにエラーになってしまっているようだ。
対処法としては以下の通り
sudo mv /Library/Developer/CommandLineTools /tmp/.
上記コマンドでとりあえず退避
その後、再度実行すると、自動で ComamndLinetTools をインストールしてくる
xcode-select: note: no developer tools were found at '/Applications/Xcode.app', requesting install. Choose an option in the dialog to download the command line developer tools.
m1 mac で terraform を動かすと、
Error: rpc error: code = Unavailable desc = transport is closing
というエラーが出ることがある。
その際の対処法を紹介
以下の環境変数を追加するだけ
export GODEBUG=asyncpreemptoff=1
~/.zshrc
などに追記するなど行う。