- 投稿日:2021-01-11T22:37:10+09:00
備忘録:Anaconda起動してPythonの仮想環境入ってMongoDBにローカル接続
※備忘録
開発中アプリに移動
terminal
にてcd
とかでディレクトリ内に入る。
Anaconda
を起動↓
base
(現在の場所)から、仮想環境(私の場合は作成した名前がpy3_aaaa
)へ移動する為、下記を入力$ (base) lancai@oja % source activate py3_aaaa #py3_aaa:作成した仮想環境名↓今回の開発環境が
API
なので
uvicorn prog:app --reload --host 0.0.0.0 --port 8100
の
prog
をapi
に置き換えたもの(下記)を入力$ (base) lancai@oja % uvicorn api:app --reload --host 0.0.0.0 --port 8000これで接続完了となる!
MongoDBにローカル接続できない時に確認すること
開発中のアプリディレクトリ
..>src>db>connect.py
内に、
設定したusername
とpassword
が記述されているか確認。なければ追記する。pythonfrom pymongo import MongoClient # DB接続 def get_connect(): # mongoDBローカル接続 client = MongoClient("mongodb://(※ここにusername):(ここにpassword)@localhost:27017/") # 使用DB (DBを指定) db = client.(※ここにDB名が入る) return dbterminalにて下記コマンド入力
terminal$ uvicorn api:app --reload --host 0.0.0.0 --port 8000【補足】MongoDBに設定したusernameなどの情報を確認する方法
①terminalにて開発中アプリの
docker-composer.yml
ファイルが置いてある場所へ移動②↓terminalにてcat”で参照する。
terminal$ cat docker-compose.yml③↓
environment:
部分に記載してある^^terminalenvironment: MONGODB_USERNAME: ***** MONGODB_PASSWORD: ***** MONGODB_HOSTNAME: *****db # VIRTUAL_HOST: "" # LETSENCRYPT_HOST: "" # LETSENCRYPT_EMAIL: "*********@gmail.com"
- 投稿日:2021-01-11T21:44:23+09:00
備忘録:【Docker】起動&終了方法
備忘録φ(..)メモメモ
【起動方法】
アプリ起動
Dockerの置いてる場所で下記を入力
※私の場合”dev”というディレクトリ内に入って入力
terminallancai@oja dev % docker-compose up -d↓下記のように返ってきたらOK
terminalCreating network "proxy-net" with driver "bridge" Creating rootp-db ... done↓RUNNINGとなっていたらOK
終了方法
Dockerの置いてる場所で下記を入力
※私の場合”dev”というディレクトリ内に入って入力
terminal$ lancai@oja dev % docker-compose down↓下記のように返ってきたらOK
terminalStopping ※DBの名前 ... done Removing ※DBの名前 ... done Removing network proxy-net
- 投稿日:2021-01-11T19:31:41+09:00
Visual Studio Code ( VS Code ) で jupyter notebook 環境を構築 Mac版
Visual Studio Code ( VS Code ) で jupyter notebook 環境を構築 Mac版
目的
Python開発環境の作業メモとして記載。
ANACONDAのライセンスが変わり、当面は問題無いのですが、ANACONDAを使わないPythonのローカル開発環境へ移行してみました。
jupyter notebookは Visual Studio Code ( VS Code ) とそのJupyter Extension for Visual Studio Code (Jupyter 拡張)を使うことにしてみました。
手順は簡単ですが使い方のメモとしても記載しておくことにしました。
Pythonの開発環境としては、pyenvとpyenv-virtualenvを利用しています。(別記事)Mac環境
OS : Mac OS Big Sur(11.1)
Xcode : App StoreではインストールしていないVisual Studio Code ( VS Code ) をインストール
Visual Studio Codeサイトからダウンロードし、インストール
Visual Studio Code Insidersをインストール
Visual Studio Codeサイト Insidersからダウンロードし、インストール!
Jupyter Extension for Visual Studio Code (Jupyter 拡張)をインストール
https://marketplace.visualstudio.com/items?itemName=ms-toolsai.jupyter
Jupyter Extension for Visual Studio Codeサイト Insidersからダウンロードし、インストール!
Visual Studio Code.appを開くようにポップアップが出ます
Visual Studio Code が起動し、そのウインドウ内でJupyterが開かれます
使い方
Visual Studio Code を起動します
全てのコマンドを表示 commandキー+shiftキー+pキー を押します
jupyter: Create New Blank Jupyter Notebook を選びます
インストールが必要なものがあれば、ポップアップ表示されますので、インストールしてください
Visual Studio Code 内にJupyter Notebookが起動します
右上に利用しているPython環境が表示されており、こちらをクリックすると、実行するPython環境を切り替えることができます
- 投稿日:2021-01-11T17:34:25+09:00
ANACONDAやめました MacにPython開発環境構築 pyenvとpyenv-virtualenvのインストール
ANACONDAやめました MacにPython開発環境構築 pyenvとpyenv-virtualenvのインストール
目的
Python開発環境の作業メモとして記載。
ANACONDAのライセンスが変わり、当面は問題無いのですが、ANACONDAを使わないPythonのローカル開発環境へ移行してみました。
Pythonの開発環境としては、pyenvとpyenv-virtualenvを利用、pythonのバージョンが切替可能とする方法を選択しました。
pyenvとpyenv-virtualenvのインストールは、楽なのでhomebrewを使います。Mac環境
OS : Mac OS Big Sur(11.1)
Xcode : App Storeではインストールしていないインストール
homebrewのアップデート
taguchi@MasamacAir ~ % brew update Updated 2 taps (homebrew/core and homebrew/cask). ==> New Formulae acl2 grpcui ocaml-zarith act gtkmm4 oci-cli aerc guile@2 odin aida-header gulp-cli oha airshare h2spec omake 省略 iphoney yandexradio java yourkit-java-profiler jeromelebel-mongohub zoom-in jing zoomus-outlook-plugin kekadefaultapppyenvのインストール
taguchi@MasamacAir ~ % brew install pyenv Error: homebrew-core is a shallow clone. homebrew-cask is a shallow clone. 省略 ==> readline readline is keg-only, which means it was not symlinked into /usr/local, because macOS provides BSD libedit. For compilers to find readline you may need to set: export LDFLAGS="-L/usr/local/opt/readline/lib" export CPPFLAGS="-I/usr/local/opt/readline/include" For pkg-config to find readline you may need to set: export PKG_CONFIG_PATH="/usr/local/opt/readline/lib/pkgconfig"pyenv-virtualenvのインストール
taguchi@MasamacAir ~ % brew install pyenv-virtualenv Error: Your CLT does not support macOS 11. It is either outdated or was modified. Please update your CLT or delete it if no updates are available. Update them from Software Update in System Preferences or run: softwareupdate --all --install --force If that doesn't show you an update run: sudo rm -rf /Library/Developer/CommandLineTools sudo xcode-select --install Alternatively, manually download them from: https://developer.apple.com/download/more/. Error: An exception occurred within a child process: SystemExit: exitpyenv-virtualenvをインストールしようとしたが、エラーになった、対応
taguchi@MasamacAir ~ % softwareupdate --all --install --force sudo rm -rf /Library/Developer/CommandLineTools sudo xcode-select --install taguchi@MasamacAir ~ % sudo rm -rf /Library/Developer/CommandLineTools Password: taguchi@MasamacAir ~ % sudo xcode-select --install 省略リトライ pyenv-virtualenvをインストール
taguchi@MasamacAir ~ % brew install pyenv-virtualenv Error: homebrew-core is a shallow clone. homebrew-cask is a shallow clone. To `brew update`, first run: 省略 ==> ./install.sh ==> Caveats To enable auto-activation add to your profile: if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi ==> Summary ? /usr/local/Cellar/pyenv-virtualenv/1.1.5: 22 files, 65.6KB, built in 5 secondspyenvの設定
taguchi@MasamacAir ~ % echo 'export PYENV_ROOT="${HOME}/.pyenv"' >> ~/.zprofile taguchi@MasamacAir ~ % echo 'export PATH="${PYENV_ROOT}/bin:$PATH"' >> ~/.zprofile taguchi@MasamacAir ~ % echo 'eval "$(pyenv init -)"' >> ~/.zprofile taguchi@MasamacAir ~ % echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zprofilepyenv環境設定
使えるバージョンを確認
taguchi@MasamacAir ~ % pyenv install --list Available versions: 2.1.3 2.2.3 2.3.7 2.4.0 省略Python 3.9.1 と 2.7.18 をインストール
Python 3.9.1
taguchi@MasamacAir ~ % pyenv install 3.9.1 python-build: use openssl@1.1 from homebrew python-build: use readline from homebrew Downloading Python-3.9.1.tar.xz... -> https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tar.xz Installing Python-3.9.1... python-build: use readline from homebrew python-build: use zlib from xcode sdk Installed Python-3.9.1 to /Users/taguchi/.pyenv/versions/3.9.1Python 2.7.18
taguchi@MasamacAir ~ % pyenv install 2.7.18 python-build: use openssl from homebrew python-build: use readline from homebrew Downloading Python-2.7.18.tar.xz... -> https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tar.xz Installing Python-2.7.18... python-build: use readline from homebrew python-build: use zlib from xcode sdk Installed Python-2.7.18 to /Users/taguchi/.pyenv/versions/2.7.18Pythonのバージョン切替方法
開発用のディレクトリ毎に利用するPythonのバージョンを変える(localコマンド)
使い方
cd <開発用ディレクトリ> pyenv local <この開発用ディレクトリで利用するPythonのバージョン>実行例
デフォルトはPython 2.7.16 だが 開発ディレクトリpy2で利用するPythonのバージョンを 2.7.18 に変更するtaguchi@MasamacAir ~ % cd ~/test/py2 taguchi@MasamacAir py2 % python --version Python 2.7.16 taguchi@MasamacAir py2 % pyenv local 2.7.18 taguchi@MasamacAir py2 % python --version Python 2.7.18python --version の表示が変わらないとき
1)よくある 他のディレクトリに移動してから再度戻る、ログアウトしてログインし直してから再度確認してみてください
2).zprofileや/etc/paths でパス/usr/local/binが/usr/binより優先されているかを確認してくださいシステム全体で利用するPythonのバージョンを変える(globalコマンド)
pyenv global <システム全体で利用するPythonのバージョン>実行例
デフォルトはPython 2.7.16 だが システム全体で利用するPythonのバージョンを 3.9.1 に変更するtaguchi@MasamacAir ~ % python --version Python 2.7.16 taguchi@MasamacAir ~ % pyenv global 3.9.1 taguchi@MasamacAir ~ % python --version Python 3.9.1pyenv-virtualenv環境設定
pyenv-virtualenvを使うと、開発環境が分けられます。
ライブラリ等が異なるなどの際に便利です。
私は、色々試したい場合にはpyenv-virtualenv、開発環境の構成が複雑な場合や開発環境を共有する場合はDocker(ローカルPCやクラウド上)やVirtualBox(ローカルPC)と使い分けています。使い方
pyenv virtualenv <利用するPythonのバージョン> <Python開発環境の名前、自分でわかるように付ける>実行例
Pythonのバージョン 2.7.18 の開発環境 GANtest1 を作る、開発ディレクトリは ~/test/GANtest1taguchi@MasamacAir ~ % mkdir ~/test/GANtest1 taguchi@MasamacAir ~ % cd ~/test/GANtest1 taguchi@MasamacAir GANtest1 % pyenv virtualenv 2.7.18 GANtest1 taguchi@MasamacAir GANtest1 % pyenv local GANtest1 taguchi@MasamacAir GANtest1 % python --version Python 2.7.18作成した開発環境が不要になったら、以下で消すことができます
使い方pyenv uninstall <Python開発環境の名前>実行例
taguchi@MasamacAir ~ % pyenv uninstall GANtest1 taguchi@MasamacAir ~ % rm -r ~/test/GANtest1
- 投稿日:2021-01-11T16:13:46+09:00
Mac上でPython+OpenCVを利用した動画処理
Mac上のOpenCVで動画処理のプログラムを作成する際に、いくつかハマった点があったので、その備忘録です。
初めに
作成したプログラムは、入力した動画の、1フレームごとの画像に対して任意の画像処理を行い、処理後の画像を再び動画として保存するもの。動画処理の流れは、以下のようになっている。
- ローカルに保存されている動画を読み込む
- 1フレームずつ画像処理
- 動画ファイルとして書き込み
実行環境
- macOS Catalina(ver 10.15.3)
- python 3.8
opencv-pythonのインストールは、以下コマンドで行う。
pip install opencv-python
ソースコードの全体像
作成したソースコードの全体像は以下の通り。動画に対する処理は、67行目の
processed_frame = cv2.flip(frame, -1)
にある、上下左右の反転を行うもの。こちらのプログラムを実行することで、入力した動画を上下左右反転させた動画を作成できる。上下左右の反転処理を、任意の画像処理に置き換えることで、Pythonで様々な動画処理ができるようになる。
./main.pyimport os import cv2 import argparse class MovieIter(object): """ 動画のIterator """ def __init__(self, moviefile, inter_method=cv2.INTER_AREA): if os.path.isfile(moviefile): # mp4ファイルが存在するとき print("[Loading]\tLoading Movie") self.org = cv2.VideoCapture(moviefile) self.framecnt = 0 self.inter_method = inter_method def __iter__(self): return self def __next__(self): self.end_flg, self.frame = self.org.read() if not self.end_flg: # 動画の最後に到達したらループを終了する raise StopIteration() self.framecnt += 1 return self.frame def __del__(self): self.org.release() def get_size(self) -> (int, int): """動画の解像度を返す Returns: (int, int): (w, h) """ return ( int(self.org.get(cv2.CAP_PROP_FRAME_WIDTH)), int(self.org.get(cv2.CAP_PROP_FRAME_HEIGHT)), ) def get_fps(self) -> float: """動画のFpsを返す Returns: float: fps """ return self.org.get(cv2.CAP_PROP_FPS) def main(movie_path, save_path): # 入力する動画を定義 input_movie = MovieIter(movie_path) input_moveie_size = input_movie.get_size() # 出力する動画ファイルの定義 fourcc = cv2.VideoWriter_fourcc(*"mp4v") output_movie = cv2.VideoWriter( os.path.join(save_path, "output.mp4"), # 保存するパス fourcc, # コ-ディック input_movie.get_fps(), # 動画のfps input_moveie_size, # 動画の解像度 ) for frame in input_movie: processed_frame = cv2.flip(frame, -1) # 上下左右反転 # 動画の解像度が異なると保存できないので確認する assert processed_frame.shape[:2][::-1] == input_moveie_size output_movie.write(processed_frame) # リリースして動画を保存 output_movie.release() if __name__ == "__main__": parser = argparse.ArgumentParser(description="動画を処理するプウログラム") parser.add_argument("movie_path", help="処理を行う動画のURL") parser.add_argument("--save_path", default="results", help="生成した画像を保存するディレクトリのパス") args = parser.parse_args() main(args.movie_path, args.save_path)実行時のコマンドは以下の通り。処理に成功すると、
${処理する動画のパス}
の上下左右が反転した動画が作成され、--save_path
に指定したフォルダに保存される。python main.py ${処理する動画のパス} --save_path ${処理後の動画を保存するパス}ハマったところ
動画に書き込む画像サイズの指定
ハマりポイントの1つ目は、ソースコード57行目の
cv2.VideoWriter()
に指定する画像のサイズと、71行目のoutput_movie.write(processed_frame)
で書き込む画像のサイズが異なると、動画の書き出しに失敗する点である。~~~省略~~~~ output_movie = cv2.VideoWriter( os.path.join(save_path, "output.mp4"), # 保存するパス fourcc, # コ-ディック input_movie.get_fps(), # 動画のfps input_moveie_size, # 動画の解像度 ← ココ! ) ~~~省略~~~~一般的にopencvの画像サイズは、
(height, width, chnnel)
の順で定義されている。しかし一方でcv2.VideoWriter()
で指定する画像のサイズは(width, height)
の順で定義する必要がある。なので、普段のノリで「画像サイズは(height, width)
の順だね〜」と思って指定すると、定義時と書き込み時の画像サイズの違いにより、動画の書き出しに失敗する現象が発生する。しかも困ることに、上記のような、サイズの違いによる動画の書き出しに失敗する現象が起きても、opencvはエラーやワーニングを返してこない。それにより、「プログラムは正常なのに、なぜ保存できないんだろう..」と無駄に時間を浪費してしまい、画像サイズの指定ミスに気づくのにかなり時間がかかってしまった。
解決策として、以下のようにassertで確認する処理を入れておいた。
~~~省略~~~~ # 動画の解像度が異なると保存できないので確認する assert processed_frame.shape[:2][::-1] == input_moveie_size ~~~省略~~~~グレースケールの動画を作成する場合
作成する動画の形式がグレースケールの場合は、
cv2.VideoWriter()
の5つ目の引数に、0を指定する必要がある。これも指定し忘れると、上記の件と同様に、エラー・ワーニングなしで、ただ動画の書き出しに失敗する現象が起きる。~~~省略~~~~ output_movie = cv2.VideoWriter( os.path.join(save_path, "output.mp4"), # 保存するパス fourcc, # コ-ディック input_movie.get_fps(), # 動画のfps input_moveie_size, # 動画の解像度 ← ココ! 0 # ← ココ! ) ~~~省略~~~~動画のコーデックの指定
2つ目は、ソースコード58行目の動画のコーデック形式に、実行環境に応じた対応している形式を指定する必要がある点である。
~~~省略~~~~ # 出力する動画ファイルの定義 fourcc = cv2.VideoWriter_fourcc(*"mp4v") # ← ココ! ~~~省略~~~~「opencv python 動画」などで検索して上位に出てくる記事だと、
cv2.VideoWriter_fourcc(*'XVID')
と指定されていることが多く、筆者もそれに倣ってそのまま.avi
形式で保存を試したが、うまく書き出しが行われなかった。バージョンによっては、MacOS上で.avi
形式で保存することもできるようだが、mp4
形式で保存をするのが最も安定すると思われる。Mac上での各形式の動作状況が、有志により以下のリンクにまとめられている。プログラムを書く前に、自分の使いたい形式がMac上でうまく動作するかを確認した方が良い。
- OpenCV Video Writer on Mac OS X · GitHub終わりに
形式違いやサイズ違いで保存に失敗してるなら、ワーニングくらい出して欲しいですね...
参考
- 投稿日:2021-01-11T16:07:45+09:00
MacでNASや外付けドライブを使用せずにTimeMachineを設定する
Macには「TimeMachine」というバックアップ機能が標準搭載されている。
Windowsでいうところの「ファイルの履歴」機能と同様。
基本的にはこの機能はNASや外付けHDDなど外部デバイスにバックアップをとることを想定しているっぽいが、昨今のリモートワークの状況もあり、ネットワークや外部デバイスに接続しない状況で使う場合でもMac単体でTimeMachineを使用する設定をメモしておく。
OSはmacOS 11.1 big sur。
(注)Macのディスク上にバックアップをとるので最低でもバックアップ容量と同程度以上の空きが必要。1. パーテーションを分割する。
Macのディスクのパーテーションをディスクユーティリティを使用して分割する。
ディスクユーティリティはアプリケーション>ユーティリティにある。
ディスクユーティリティを起動するとMacのディスクの管理画面が表示される。ボリュームを追加ボタンとパーテーションを作成ボタンが表示されるのでパーテーション作成ボタンを押す。
デバイスとパーテーションの情報が表示される。
+ボタンでパーテーションを追加する。
パーテーションの名前とサイズを設定して適用すればパーテーション作成は完了。
2. TimeMachineを設定する。
バックアップ用パーテーションを用意したらあとは普通にTimeMachineを設定する。
TimeMachineはシステム環境設定から設定できる。
バックアップを自動生成にチェックを入れてディスクを選択ボタンからバックアップ用パーテーションを指定。
TimeMachineをメニューバーに表示にチェックを入れておけばメニューバーからTimeMachineに入ってファイルの復旧もできる。
- 投稿日:2021-01-11T14:29:26+09:00
【徹底検証】Outlook for Macのバックアップ及び復元
メーラーはMicrosoft365のOutlook for Macを利用しています。筆者はWindows時代からOutlookをメーラーとして利用してきました。ところが、Mac版のOutlookに乗り換えて気付いたことはメールの仕分けルールや受信拒否リストなどをインポート・エクスポートする機能が搭載されていない1ことです。これでは苦労して仕分けルールなどを作っても、いざという時に環境を復元できなくなってしまいます。そこで本記事ではMac版Outlookにおける各種データのバックアップ方法を検証し、別途用意したmacOSのVM上でバックアップデータから復旧出来るかの検証も行いたいと思います。
検証環境
- macOS 11.1 Big Sur
- Microsoft Outlook for Mac 16.44
データの格納先の探索
参考より、以下のPathにOutlook関連のファイルが格納されていることが分かりました。
/Users/$USER/Library/Group\ Containers/UBF8T346G9.Office/Outlook/Outlook\ 15\ Profiles/Main\ Profile/Data/
実際に覗いてみる
ls
コマンドでディレクトリ内を覗いてみます。$ ls /Users/$USER/Library/Group\ Containers/UBF8T346G9.Office/Outlook/Outlook\ 15\ Profiles/Main\ Profile/Data/ BlockLocks.sqlite Contacts Message Attachments Outlook.sqlite-shm RecordLocks.sqlite-shm Signatures BlockLocks.sqlite-shm Folders Message Sources Outlook.sqlite-wal RecordLocks.sqlite-wal UIDs BlockLocks.sqlite-wal Mail Accounts Messages Recent Addresses Rules Categories Main Outlook.sqlite RecordLocks.sqlite Saved Searchesバックアップの作成
tar
コマンドでアーカイブファイルを作成し、Outlookの各種ファイルをバックアップします。作成したtarファイルを外付けHDなどに移動させます。cd /Users/$USER/Library/Group\ Containers/UBF8T346G9.Office/Outlook/Outlook\ 15\ Profiles/Main\ Profile/ tar cvzf backup.tgz Dataバックアップの復元
tarファイルを展開してOutlookの環境が復元できるか試みます。実験のためにMacのVMをFusionで作成し、実験しました。結果は以下の様になりました。
復元が成功した内容
- メール(署名付きのメールも復元可)2
- メールフォルダ
- 仕分けルール
- 署名
復元出来なかった内容
- 受信拒否リスト
- 並べ替えルール
復元を試みていない内容
- 予定表
- アドレス帳
- タスク
まとめ
今回Outlook for Macのバックアップ方法について検討しました。一部復元出来なかったものも有りますが、再度作成するのが大変な仕分けルールや作り直しが面倒な署名については復元が出来ました。メールについてもフォルダ分けした状態で復元出来たのでもしもの時の復旧が楽になりそうです。但し、受信拒否リストなど一部復元出来なかったものは今後も調査を続けたいと思います。
Reference
- Outlook2011/2016のメールデータの保存場所はどこですか?
- tar.xz・tar.gzコマンドメモ
- 新版zsh&bash対応 macOSxコマンド入門(西村めぐみ著;2020年;技術評論社)
- 投稿日:2021-01-11T13:37:56+09:00
Apache 設定後、PHPが動作しない時の対処法
PHPが動作しなくなった時の解決方法をメモで記載しました。
環境
macOS Catalina
Apache 2.4.43 (Unix)
PHP バージョン7.2背景
macにデフォルトであるApacheを停止し、
Homebrew で新たに Apache httpd をインストールして環境を構築したかった。Apache の設定ファイルをいぢった後、PHPのバージョンを確認したら以下のエラー文で怒られました。
$ php -v dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib下記URLの記事を参考にして、コマンドを実行しても解決しなかったので別の方法を試しました。
Calling `brew switch` is disabled! Use `brew link` @-versioned formulae instead.解決方法
先ずは Homebrewに悪いところがないか お医者さんに見てもらう。
$ brew doctorそうすると以下の文章が表示されました。
Some installed formulae are deprecated or disabled. ・・・ php@7.2インストールしたformulae(パッケージ)が非推奨もしくは無効らしい。
私の場合、php@7.2 を下記コマンドでアンインストール。$ brew uninstall php@7.2インストールするPHPを検索
$ brew search phpそしてインストール
$ brew install php@7.2インストールしたらパスを通し、紐付ける。
$ export PATH="/usr/local/opt/php@7.2/bin:$PATH $ brew link php72意図したバージョンが表示されるか確認
$ php -vApache を再起動
$ sudo apachectl restartターミナルを再起動すると、動きました。
- 投稿日:2021-01-11T12:39:46+09:00
TimeMachineからのデータ移行・復元がエラーになった場合のデータ救済方法
Mac miniが故障?したのでバックアップ→復旧したかった
- Mac mini (2018)から出力していたLGのモニタがブラックアウトを繰返していた。
- LGモニタ以外(我が家にあったのはナナオのモニタ)でも発生した。
- ブラックアウトは常に繰返すわけではなく長時間使用しているとたまに発生、一度発生すると何度か短時間に発生。
- ケーブルもHDMIやThunderbolt3のケーブルを家にあったものから新品購入したものまで試してみたけど直らず。
- Appleのサポートチャットで修理という流れになった。
- 今回はその修理時に行ったTimeMachineへのバックアップ、TimeMachineからの復元でトラブルが発生したのでそれをまとめたいと思う。
TimeMachineのバックアップ先として使用したストレージ
- Drobo5N(https://www.drobo-jp.com/products/pdr5n.html)
- 購入して4年くらいほぼ放置していた(試しに使った程度)
- 改めて今回セットアップしてストレージとして利用可能であることを確認
- 修理に出す前にDrobo5Nをバックアップ先としてTimeMachineを設定。
- バックアップ容量はおよそ1TB(990GBくらいだった)
- 初回バックアップ時は20時間かかった
- 夕方バックアップ開始、一晩放置して翌日の昼間に終わっていることを確認してシャットダウン
- 回収に来たクロネコヤマトにMac miniを裸で渡して回収完了。修理を待つ。
Mac mini帰還後のトラブル
- 中1日で無事に戻ってきたMac miniだが、ロジックボードが交換されたので、当然オンボードになっているSSDも交換された。つまりデータはなくなりました。
- BigSurがクリーンインストールされている状態。からの復旧
- BigSur初回起動時に表示されるデータ移行の画面でTimeMachineから復元するを選択して進めるも、エラー発生。
- どうにもできなくなったので、復元は諦めて一旦初回起動時のウィザード的なのを終わらせる
- データ移行アシスタンスを起動して復元を試みるも、Drobo5Nがリストに出てこない
- smb://Drobo5N/sharefolder を入力してバックアップされた時点データの閲覧まではできた
- 移行するデータの種別はすべて選択した状態でデータ移行を開始
- これは何度か行ったが、何度やっても移行するデータのカウント中に止まってしまって実際にコピーが始まらない
- たまに始まるときもあるが途中でエラー、もしくは完了じゃないのに完了ステータスになってしまいデータ移行が不完全。
- 直接TimeMachineのバックアップデータ(*.sparsebundle)をマウントしてTimeMachineから見てみた
- 現在しかデータがなく、過去に遡れない。
- マウントしたデータを直接見てみると、
2021-01-08-140145.inprogress
というフォルダだけが見えていて他に何もない。
- .inprogressフォルダはTimeMachineで何かエラーが起きて中断したりしたときに生成されるもののようで、基本消すことができない。(消せばいいという記事がいくつか出てきたが。)
- .inprogressフォルダはTimeMachineが正常に動作すれば解消されるので一度バックアップ先をきれいにしてから再度バックアップするといいです、という記事を見かけたが、今回そんなことは物理的に不可能(バックアップ元はもうない)なので.inprogressフォルダをどうにかする方法は諦める
mount
コマンドでマウントしているストレージを改めてみてみると、TimeMachine
としてマウントしたsparsebundleと共有フォルダとしてマウントしたTimeMachineのフォルダが/Volumes
の下に存在していた。
- 何度かmountとunmountを繰り返していたので気が付かなかったが、
/Volumes/.timemachine/UUID
的なフォルダがマウントされていた.timemachine
フォルダの下に実際にバックアップを取得した時のデータがあったので必要なものをここから手動コピーしてサルベージ完了した。まとめ
- TimeMachineのバックアップを初めて行うときはちゃんと復元できるか試しておこう。
- 今回は時間がなかったので確認までできなかったが時間ある人は絶対にやっておいたほうがいい。
- 仮に復元でコケてもバックアップされたデータが消えていることはないので落ち着いて探せばデータは見つかる。
- 今回の.timemachineフォルダが/Volumesにマウントされていたのが何がトリガーだったのかはまだ追えていないが、同じトラブルに見舞われてしまった人の参考になれば幸い。
- Macが修理されて戻ってくる場合、新品でない場合でも中身が別物になっていて、厳密には同一機体ではなくなっていることがある(?)ので注意しておこう。
- 投稿日:2021-01-11T10:51:43+09:00
mac miniでmountコマンドが見つからない(mount: command not found)
sudo mount -uw /
を実行したら、sudo: mount: command not found
って出た。環境
- M1 Mac mini
- Big Sur 11.1
対応
/sbin
を見るとmount
が存在したので、.zshrc
に以下の変更をした。PATH=/bin:/usr/bin:/usr/local/bin:${PATH} ↓に変更 PATH=/bin:/usr/bin:/usr/local/bin:/sbin:${PATH}雑談
うーん、この辺の知識の乏しさを感じる。。。
こんなのはlinuxの学習でどうにかなるのだろうか。参考記事:https://www.reddit.com/r/MacOSBeta/comments/dg0mst/command_not_found_mount_since_update_to_catalina/
- 投稿日:2021-01-11T06:13:03+09:00
Webサイトに使う画像のサイズ変換+容量圧縮を1クリックでやる
はてなブログやWordPressなどでユーザのために読みやすいWebサイトを作るためには、使用する画像の横幅を720pxにする必要があります。また、重くならないためには画像の容量圧縮も必須ですよね。
今回はそんな画像のサイズ変換+容量圧縮を1クリック(正確にはダブルクリックですがw)でやるシェルスクリプトを作成しました。複数の画像でも1回シェルを動かすだけで一気にサイズ変換+容量圧縮が可能です。
容量圧縮は画像の拡張子を「.jpeg」に変えることで行います。多くの画像は拡張子を.jpegに変えるだけでかなり容量が小さくなるのです。
普段からブログなどで画像を投稿する機会がある方には、かなり時間の節約になるはず!これからシェルの内容と使い方を解説をしていくので、ぜひ読んでみてください。
目次
1.画像サイズ変換・容量圧縮シェルの内容
2.使うための準備1. 画像サイズ変換・容量圧縮シェルの概要
まず、Webサイトで使いたい画像をデスクトップに作成した「画像リサイズ」というフォルダに入れます。
今回はUnslashというフリー画像のサイトから適当に2枚の画像をダウンロードしてきました。シェルを使う前の状態で画像の容量はそれぞれ2.9MB、1.2MBです。シェル使用前の状態の画像を以下に貼っておきます。
2.9MB画像
1.2MB画像
そして画像サイズ変換・容量圧縮シェルをダブルクリックして実行したあとの画像が以下です。元2.9MB画像
元1.2MB画像
どうでしょうか、画質はシェル使用前後でそれほど大差ないですよね。ですが、画像の容量は2.9MB→40KB、1.2MB→47KBと大幅圧縮されています!画像の横幅もちゃんと720pxに調整されていますね。ちなみにシェルを実行すると、画像リサイズフォルダに入っている画像を更新日が古いものから順に「1,2,3...」とリネームしていきます。
内容が細かい画像の場合は、圧縮によって画質が落ちて見づらくなることがあります。画像リサイズフォルダに入っていた元画像はシェル実行と同時に削除されてしまうので、バックアップをとっておくことをおすすめします。シェルの内容がわかったところで、ここからこのシェルを使うための準備について解説していきます。一度やってしまえば、あとは画像リサイズフォルダに画像を入れる→シェルをダブルクリック、これだけで画像のリサイズと容量圧縮が一瞬でできるようになりますよ!
2. 使うための準備
画像サイズ変換・容量圧縮シェルを使える環境について解説していきます。
①シェルスクリプトが実行可能な環境
私のPCがMacなので、Macでしか動作を確認していません。
②ImageMagicのインストール
ImageMagicとは、シェルで画像のサイズ変換などを行えるようにするソフトです。ターミナルから以下のコマンドでインストールしてきましょう。
ターミナルbrew install imagemagick
brewコマンドが使えない方は、まずこちらのサイトを参考に、Homebrewをインストールしてください。HomebrewとはMacでよく使われているパッケージ管理ソフトです。
③画像サイズ変換・容量圧縮シェルの作成
好きなテキストエディタを開き、以下のシェルをコピペします。
resizeConvert.command#!/bin/bash files="{画像リサイズフォルダのパス}/*" savePath="{画像リサイズフォルダのパス}/" fileNo=1 kakuchoshi=.jpg #圧縮する画像が置いてあるフォルダへ移動 cd {画像リサイズフォルダのパス}/ #画像ファイル名に半角スペースが含まれるとうまくいかない #なので半角スペースを_に置き換える find . -depth -name "* *" -execdir rename 's/ /_/g' "{}" \; #フォルダの中身を全てリサイズ→jpeg変換 for filepath in $files; do mogrify -resize 720x720 $filepath convert $filepath $savePath$fileNo$kakuchoshi rm $filepath #圧縮前の画像は削除 fileNo=$((fileNo+1)) done #圧縮した画像が入っているフォルダを開く open {画像リサイズフォルダのパス} #処理終了 exit 0ファイル名を「resizeConvert.command」として保存してください。拡張子を.commandとすることで、そのファイルをダブルクリックするだけでシェルが実行できるようになります。
デスクトップなど、好きな場所に「画像リサイズ」という名前のフォルダを作成します。その後、作成したフォルダのパスをコピーしてresizeConvert.commandファイルの中の{画像リサイズフォルダのパス}と記載してある部分を全て置換してください。
これで準備完了です。あとはサイズ変換・容量圧縮をしたい画像を画像リサイズフォルダに入れて、resizeConvert.commandファイルをダブルクリックするだけで画像のサイズ変換・容量圧縮ができます。
- 投稿日:2021-01-11T00:26:09+09:00
Mac VisualStudioCode ターミナル系ショートカットまとめ
目的
- 便利そうなVisualStudioCode(以後、VScode)のターミナル系のショートカットをまとめる
ショートカット
- ターミナルではそこまで複雑な作業はしないためよく使うものだけまとめておく
動作 キー ターミナルを開く 「shift」 + 「control」 + 「@」 ターミナルウインドウを分割する 「shift」 + 「control」 + 「5」 ターミナルウインドウの幅を変える 「control」 + 「command」 + 「↑」もしくは「↓」 分割したターミナルウインドウの幅を変える 「control」 + 「command」 + 「←」もしくは「→」 分割したターミナルウインドウ間でアクティブなウインドウを切り替える 「option」 + 「command」 + 「←」もしくは「→」 ターミナルタブを切り替える こちらの方法を使って設定→VisualStudioCode ターミナルタブを切り替えるショートカットを設定する