- 投稿日:2020-08-20T22:48:47+09:00
Homebrewを使わずにMacへgit-completionとgit-prompを設定してみた
背景
Macで
git-completionを使いたくなって設定方法を調べてみたが、Homebrewを使ってGitをインストールした前提での説明ばかりがヒットする。
私はひねくれ者だったらしく、GitのインストールにはHomebrewを使っていなかった。Homebrewを使わずにGitをインストールした場合でも、
git-completionを使えるようにする手順をまとめる。
ついでに、git-promptも設定した。手順
1. 本体をダウンロード
# git-completion curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash # git-prompt curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -o ~/.git-prompt.sh2.
~/.bashrcの編集下記を追記する。
ファイルが存在しない場合は新規に作成する。~/.bashrcsource $HOME/.git-completion.bash source $HOME/.git-prompt.sh GIT_PS1_SHOWDIRTYSTATE=true export PS1='\h\[\033[00m\]:\W\[\033[31m\]$(__git_ps1 [%s])\[\033[00m\]\$ '3.
~/.bash_profileの編集ターミナル起動時に
~/.bashrcが読み込まれるように、下記を追記する。
ファイルが存在しない場合は新規に作成する。~/.bash_profileif [ -f ~/.bashrc ]; then . ~/.bashrc fi4. ターミナルを再起動
これで、gitの各種コマンドのタブ補完と、プロンプトにリポジトリの状態が表示されるようになる。
- 投稿日:2020-08-20T20:38:15+09:00
Macでネットワーク機能のみ再起動する
はじめに
Dockerの不具合などでたまにWi-Fiにつながらなくなることがあるので、その時に使う。
コマンド
以下がコマンド
ifconfigコマンドで停止と起動が行える。sudo ifconfig en0 down sudo ifconfig en0 upcf.
https://apple.stackexchange.com/questions/284251/how-to-restart-network-services-on-sierra
- 投稿日:2020-08-20T18:08:47+09:00
VScode(Visual Studio Code)の日本語切替
この記事でわかること
VScodeを使用していて、表示が英語設定になってしまった時
日本語設定に切り替える方法。
「japanese language pack for visual studio code」をインストトールしている前提で説明していきますので注意ください。
手順
<はじめに>
※本来は英語で表示されていると思いますが、今回は日本語表示の画像で説明しています。特に分かり難さはないと思うので不安な方はご自身のわからない部分を和訳するとマッチすると思います。
①VScodeを開いて、メニューバーの「表示」をクリックする
②コマンドパレットを選択、もしくは「Shiftキー」+「command」+「P」でショートカットしてもオッケー。この場合①を飛ばしても良い。
③コマンドパレットが開いたところで、「language」と打ち込む。
すると、候補が下に現れるので「Configure Display Language」を選択。
④表示言語の選択というインプット欄が表示され、その下に候補が現れるので「ja」を選択。
⑤再起動が必要だと表記したアラートが出るので「再起動」を選択。
これでVScodeが再起動するのでその際には日本語になっていると思います
お疲れ様でした!!ひとことMemo
自分の場合、VScodeを開いた時に突然英語表示に戻っていることがあり
毎回毎回調べて直すのが手間だったのでこの記事を書きました。
なぜ突然日本語設定が解除されてしまうのかは不明です。参考サイト
https://www.atmarkit.co.jp/ait/articles/1805/18/news032.html
- 投稿日:2020-08-20T13:48:25+09:00
UNIX(mac)のシンボリックリンクとlnコマンド
UNIXのリンクとは
UNIXのリンクはファイルやディレクトリに別名をつけることができる仕組み。
つまりmacOSにおける「エイリアス(別名)」、Windowsでいう「ショートカット」はUNIXでは「リンク」と呼ぶ。リンクは2種類
・ハードリンク
・シンボリックリンク(多くの場合はこっちを使う)シンボリックリンクがよく使われる理由
・リンク先がわかりやすい
・ディレクトリへのリンクが作成できる
・異なるディスクボリュームへのリンクが作成できるlnコマンドでシンボリックリンクを作成する
構文
ln [オプション] 元のファイルパス リンクのファイルパス
オプションに「-s」を指定することでシンボリックリンクを作成する。
(-sがない場合はハードリンクの作成になる。)ファイルに対してシンボリックリンクを作成する例
ln -s first.txt second.txt
ln -s first.txt third
ファイルの順番はcpコマンドと同様「元」「作成先」の順。ディレクトリに対してシンボリックリンクを作成する例
ln -s src/app01/db myDB参考
- 投稿日:2020-08-20T12:48:15+09:00
macOS Big Sur beta 5 で日本語入力への切替ができなくなった場合の対応方法
はじめに
macOS Big Sur beta 5 にアップデートしたところ、日本語入力への切替ができなくなったので、対応方法についてまとめました。
原因
なぜか、macOS Big Sur beta 5 にアップデートした際に、キーボード設定の入力ソースから日本語が削除されていました。
まだbeta版ですし、キーボード周りの変更がいくつかあったみたいなので、その辺りにバグが残っているのかもしれません。
(利用しているキーボードがUS配列なので、それも関係あるかも日本語キーボードでも同様の現象が起きることが確認できました。)対応方法
キーボード設定の入力ソースに日本語を追加することで、無事に日本語入力へ切替できるようになりました
最後に
macOS Big Surでキー入力をリマップする記事も書いたので、よかったらこちらも見てください
![]()
- 投稿日:2020-08-20T12:03:51+09:00
HDDをWindowsとMacで使えるようにする【exFAT】
はじめに
空のHDDが家から出てきたので、写真保存用に使用することにしました。
ちょうど、Windowsに保存してある写真をMacで編集したいな(Google Driveでやりとりしようとするととても時間がかかる&すぐに15GB超えてしまう…)と思っていたので、両方で使えるように設定しました。
↑Google DriveでRAW+JPEGデータを送ろうとして2,3時間この状態になってしまった図使用環境とバージョン
- PC:dynabook (Windows 10)
- PC2:MacBook Pro (macOS Catalina)
- HDD:Z5K320-250 (250GB SATA 3.0Gb/s)
ポイント
- フォーマット形式:exFAT
- Windows側でフォーマット推奨!
フォーマット形式:exFAT
HDDやSSDなどの記憶媒体を使用する前に、フォーマット(初期化)が必要です。
HDDはいくつかのフォーマット形式が存在します。
中にはWindowsでしか読み書きできない形式、Macでしか読み書きできない形式が存在するので、注意が必要です。主なフォーマット形式一覧
フォーマット形式 Windows Mac アクセス制限付与 詳細 FAT32 読○書○ 読○書○ 不可 ファイルひとつあたりのサイズ最大4GBまで、全体容量も2TBまでの上限あり。市販HDDやUSBフラッシュドライブは特別明記されてない限りこの形式でフォーマットされている。 exFAT 読○書○ 読○書○ 不可 FAT32のようなファイルサイズの制限なし。全体容量は16EB(エクスビバイト、およそ100万TB)。2019年に仕様が初めて公開されたため、デジタル家電では認識しない機種もあったりとちょっと不安定。 NTFS 読○書○ 読○書× ファイルごとに可能 Windows系OSで主流のフォーマット形式。全体容量は約256TB。 HFS+(Mac OS拡張) アクセス不可 読○書○ ファイルごとに可能 macOSで主流のフォーマット形式。巨大ファイル容量を扱うことに長けており、全体容量は約8EB。 調べたところ、NTFSやHFS+は信頼性が高い代わりに互換性が低く、FAT32やexFATが互換性の高い形式のようでした。
今回はWindows-Mac間で写真のやりとりをする用途だったので、exFATにしました。そもそもHDD自体古いもので250GBしか容量なく、写真も1つせいぜい20MB程度だったので、FAT32でも特に問題なかったかもです。参考にしたサイト一覧:
- WindowsパソコンとMacで同じ外付けハードディスクを利用したい-Buffalo
- NTFS の概要-Microsoft
- MacとWindowsのハードディスク共有はexFATフォーマットがベスト
- 外付けHDDはどのフォーマットがベストか?
- USBメモリの「フォーマットする」とは初期化をすること
- USBメモリ、どの方式でフォーマットしたらいい?
Windows側でフォーマット推奨!
いくつかの記事でMac側でのフォーマット手順に沿って「exFATでフォーマットすればWindows/Mac両方で使用できる!」と書いてあるのを見たのですが、その手順で実施したらWindows側でHDDが認識されない状態になりました…
逆に、WindowsでフォーマットすればMacでも認識されました。上記サイト一覧の記事でも同様の現象は確認されているようです。
以下に、Windows側からのフォーマット方法を記載します。
① Windowsの「スタート」を右クリック > 「ディスクの管理」押下。
② 該当ボリュームをいったん「ボリュームの削除」で削除し、同じ場所で「新しいシンプルボリューム」を押下。
なお、「ボリュームの削除」を押した場合は、データがすべて消えるので、何か入っている場合はあらかじめ退避しておいてください。③ 「新しいシンプルボリュームウィザード」が起動するので、ひととおりデフォルトで「次へ」を押下。「パーティションのフォーマット」でファイルシステムを「NTFS」から「exFAT」に変更。
上記手順でフォーマットしたHDDに写真を入れ、Macに差すと…
やったー!写真見れるし消せるし追加できました!おわりに
今回はexFATを選択しましたが、映像作品などは動作が安定しない1という記事も見かけました。記憶媒体の用途によりますが、納品などより確実にデータのやり取りを行うためには、もっと堅牢なNTFSやHFS+の使用やネットワーク経由のデータ移動方法を検討した方が良いかもしれません。
お読みいただき、ありがとうございました!
- 投稿日:2020-08-20T10:51:24+09:00
【備忘録】忘れがちなVSCodeのショートカットキー
自分がちょっと忘れがちなVSCodeのショーカットをまとめます。
表記について
- [A] + [B] : A、Bキーを同時に入力
- [B] → [B] : Aキーを入力後、Bキーを入力
Markdownのプレビュー
- プレビューをサイドエディターに表示:
[command] + [k] → [v]- プレビューを同一エディターに表示:
[command] + [shift] → [v]いずれのコマンドもmdファイルを開いている状態で入力します。
そのmdファイルのプレビューが表示されます。コマンドパレッド開く
[command] + [shift] + [p]あとは好きなコマンドを探して実行するだけです。
ちなみに入力フォームの
>を削除するとコマンド検索ではなく、ファイル検索ができます。
- 投稿日:2020-08-20T01:15:02+09:00
C++とRubyで処理速度比較してみた 第一回
はじめに
C++の処理速度が速い、Ruby生産性が高いと巷でよく聞くので、
実際に処理速度を比較してみたいと思いました。
それぞれで1000万までの素数生成プログラムを作り比べてみようと思います。どちらもまだまだチューニングや測定方法などの改善の余地があると思うので、
こうやってみたら速くなるのでは
と気づいた方はコメントいただけるとすごく嬉しいですそんな感じで改善していければ面白いかもと思い「第一回」としてます。
アルゴリズムは「エラトステネスのふるい」を使用してます。
自然数を何回かふるいにかけていって素数でない数を消していくと言うやり方です。
詳細で正確な解説は下記参照下さい。
https://ja.wikipedia.org/wiki/エラトステネスの篩環境は下記になります。
macOS Catalina 10.15.6 [メモリ:8GB/CPU:Intel Core i5]
zsh
Apple clang version 12.0.0
ruby 2.6.3p62Ruby編:コードと測定結果
prime_number.rbdef create_prime_number(max_number) terms = Array.new puts(Time.now.strftime("%H:%M:%S.%N hurui start")) max_number.times {|x| terms.push x + 1} # natural number terms.shift # reject 1 last_number = Math.sqrt(max_number).floor # end of hurui puts(Time.now.strftime("%H:%M:%S.%N hurui start")) i = 0 current_number = terms[i] while current_number <= last_number do ary = terms.reject {|x| x % current_number == 0 && x != current_number} terms = ary i += 1 current_number = terms[i] end puts(Time.now.strftime("%H:%M:%S.%N hurui end")) # result # p terms end create_prime_number(10000000)実行結果は下記になります。
% ruby prime_number.rb 23:57:23.813912000 hurui start 23:57:24.487299000 hurui start 23:57:49.403797000 hurui endRuby編:気づいたこと
・破壊的メソッドでふるいにかけようとするとすごく遅くなりました。
prime_number.rbterms.reject! {|x| x % current_number == 0 && x != current_number}C++編:コードと測定結果
eratosthenes.cpp#include<iostream> #include <math.h> #include <list> #include <sys/time.h> #define MAX_NUMBER 10000000 using namespace std; int main() { unsigned long last_num = (unsigned long)sqrt(MAX_NUMBER); unsigned long cur_num; struct timeval tv; struct tm *time_fmt; list<unsigned long> *num_ls = new list<unsigned long>; list<unsigned long>::iterator num_ls_itr; unsigned long itr_skip; unsigned long i; /* ======== measurement ======== */ gettimeofday(&tv, NULL); time_fmt = localtime(&tv.tv_sec); cout << time_fmt->tm_hour << ":" << time_fmt->tm_min << ":" << time_fmt->tm_sec << "." << tv.tv_usec << endl; /* ======== measurement ======== */ /* create natural number */ for (unsigned long ntrl_num = 2; ntrl_num <= MAX_NUMBER; ntrl_num++) { num_ls->push_back(ntrl_num); } /* ======== measurement ======== */ gettimeofday(&tv, NULL); time_fmt = localtime(&tv.tv_sec); cout << time_fmt->tm_hour << ":" << time_fmt->tm_min << ":" << time_fmt->tm_sec << "." << tv.tv_usec << endl; /* ======== measurement ======== */ /* hurui */ itr_skip = 0; num_ls_itr = num_ls->begin(); cur_num = *num_ls_itr; while (cur_num <= last_num) { for (; num_ls_itr != num_ls->end();) { if ( (*num_ls_itr % cur_num == 0) && (*num_ls_itr != cur_num) ) { num_ls_itr = num_ls->erase(num_ls_itr); } else { num_ls_itr++; } } num_ls_itr = num_ls->begin(); itr_skip++; for (i = 0; i < itr_skip; i++) { num_ls_itr++; } cur_num = *num_ls_itr; } /* ======== measurement ======== */ gettimeofday(&tv, NULL); time_fmt = localtime(&tv.tv_sec); cout << time_fmt->tm_hour << ":" << time_fmt->tm_min << ":" << time_fmt->tm_sec << "." << tv.tv_usec << endl; /* ======== measurement ======== */ /* result */ #if (0) cout << "["; for (num_ls_itr = num_ls->begin(); num_ls_itr != num_ls->end(); num_ls_itr++) { cout << *num_ls_itr << ","; } cout << "]" << endl; #endif delete num_ls; return 0; }コンパイルと実行結果は下記になります。
% clang++ eratosthenes.cpp -o eratosthenes -O3 % ./eratosthenes 23:56:12.820103 23:56:13.458872 23:56:37.406918C++編:気づいたこと
・最適化オプション(-O3)を付けずにコンパイルすると10秒ちょっと遅くなりました。
% clang++ eratosthenes.cpp -o eratosthenes・listをヒープ領域からスタック領域に変更してもそんなに変わらなかった。
eratosthenes.cpplist<unsigned long> num_ls;終わりに
今回はC++の方がRubyよりもおよそ1秒ほど早かった形になります。
C++の方はiteratorループ内のeraseのやり方を誤ったせいで「segmentation fault」でしばらくハマりましたし、時間計測に使ったgettimeofday関数を後で調べてみると非推奨になっていたりしました(chronoを使うと良いらしい)。
やはり生産性はRubyの方が高かった印象です。










