20200820のMacに関する記事は8件です。

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.sh

2. ~/.bashrcの編集

下記を追記する。
ファイルが存在しない場合は新規に作成する。

~/.bashrc
source $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_profile
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

4. ターミナルを再起動

これで、gitの各種コマンドのタブ補完と、プロンプトにリポジトリの状態が表示されるようになる。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macでネットワーク機能のみ再起動する

はじめに

Dockerの不具合などでたまにWi-Fiにつながらなくなることがあるので、その時に使う。

コマンド

以下がコマンド
ifconfigコマンドで停止と起動が行える。

sudo ifconfig en0 down
sudo ifconfig en0 up

cf.

https://apple.stackexchange.com/questions/284251/how-to-restart-network-services-on-sierra

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

VScode(Visual Studio Code)の日本語切替

この記事でわかること

VScodeを使用していて、表示が英語設定になってしまった時
日本語設定に切り替える方法。

:thinking:「japanese language pack for visual studio code」をインストトールしている前提で説明していきますので注意ください。
 
  
  
  

手順

<はじめに>
※本来は英語で表示されていると思いますが、今回は日本語表示の画像で説明しています。特に分かり難さはないと思うので不安な方はご自身のわからない部分を和訳するとマッチすると思います。
 
  

①VScodeを開いて、メニューバーの「表示」をクリックする
スクリーンショット 2020-08-20 17.44.13.png
  
  
  
②コマンドパレットを選択、もしくは「Shiftキー」+「command」+「P」でショートカットしてもオッケー。この場合①を飛ばしても良い。
スクリーンショット 2020-08-20 17.46.32.png
  
  
 
③コマンドパレットが開いたところで、「language」と打ち込む。
 すると、候補が下に現れるので「Configure Display Language」を選択。
スクリーンショット 2020-08-20 17.51.15.png
  
  
  
④表示言語の選択というインプット欄が表示され、その下に候補が現れるので「ja」を選択。
スクリーンショット 2020-08-20 17.53.43.png
  
  
  
⑤再起動が必要だと表記したアラートが出るので「再起動」を選択。
スクリーンショット 2020-08-20 17.59.04.png
  
  
  
これでVScodeが再起動するのでその際には日本語になっていると思います:blush::crown:
お疲れ様でした!!

ひとことMemo

自分の場合、VScodeを開いた時に突然英語表示に戻っていることがあり
毎回毎回調べて直すのが手間だったのでこの記事を書きました。
なぜ突然日本語設定が解除されてしまうのかは不明です。

参考サイト

https://www.atmarkit.co.jp/ait/articles/1805/18/news032.html

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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

参考

これから学ぶmacOSターミナル

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macOS Big Sur beta 5 で日本語入力への切替ができなくなった場合の対応方法

はじめに

macOS Big Sur beta 5 にアップデートしたところ、日本語入力への切替ができなくなったので、対応方法についてまとめました。

原因

なぜか、macOS Big Sur beta 5 にアップデートした際に、キーボード設定の入力ソースから日本語が削除されていました。
まだbeta版ですし、キーボード周りの変更がいくつかあったみたいなので、その辺りにバグが残っているのかもしれません。
利用しているキーボードがUS配列なので、それも関係あるかも :thinking: 日本語キーボードでも同様の現象が起きることが確認できました。)

対応方法

キーボード設定入力ソース日本語を追加することで、無事に日本語入力へ切替できるようになりました :thumbsup:

最後に

macOS Big Surでキー入力をリマップする記事も書いたので、よかったらこちらも見てください :raised_hand:

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

HDDをWindowsとMacで使えるようにする【exFAT】

はじめに

空のHDDが家から出てきたので、写真保存用に使用することにしました。
ちょうど、Windowsに保存してある写真をMacで編集したいな(Google Driveでやりとりしようとするととても時間がかかる&すぐに15GB超えてしまう…)と思っていたので、両方で使えるように設定しました。
spacedog.png
↑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側でのフォーマット手順に沿って「exFATでフォーマットすればWindows/Mac両方で使用できる!」と書いてあるのを見たのですが、その手順で実施したらWindows側でHDDが認識されない状態になりました…

逆に、WindowsでフォーマットすればMacでも認識されました。上記サイト一覧の記事でも同様の現象は確認されているようです。

以下に、Windows側からのフォーマット方法を記載します。

① Windowsの「スタート」を右クリック > 「ディスクの管理」押下。

スクリーンショット (51).png

② 該当ボリュームをいったん「ボリュームの削除」で削除し、同じ場所で「新しいシンプルボリューム」を押下。
なお、「ボリュームの削除」を押した場合は、データがすべて消えるので、何か入っている場合はあらかじめ退避しておいてください。

スクリーンショット (52).png

③ 「新しいシンプルボリュームウィザード」が起動するので、ひととおりデフォルトで「次へ」を押下。「パーティションのフォーマット」でファイルシステムを「NTFS」から「exFAT」に変更。

win10_strage_plus15.png

上記手順でフォーマットしたHDDに写真を入れ、Macに差すと…
やったー!写真見れるし消せるし追加できました!

スクリーンショット 2020-08-17 20.33.11.png

おわりに

今回はexFATを選択しましたが、映像作品などは動作が安定しない1という記事も見かけました。記憶媒体の用途によりますが、納品などより確実にデータのやり取りを行うためには、もっと堅牢なNTFSやHFS+の使用やネットワーク経由のデータ移動方法を検討した方が良いかもしれません。

お読みいただき、ありがとうございました!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【備忘録】忘れがちなVSCodeのショートカットキー

自分がちょっと忘れがちなVSCodeのショーカットをまとめます。

表記について
  • [A] + [B] : A、Bキーを同時に入力
  • [B] → [B] : Aキーを入力後、Bキーを入力

Markdownのプレビュー

  • プレビューをサイドエディターに表示: [command] + [k] → [v]
  • プレビューを同一エディターに表示: [command] + [shift] → [v]

いずれのコマンドもmdファイルを開いている状態で入力します。
そのmdファイルのプレビューが表示されます。

コマンドパレッド開く

  • [command] + [shift] + [p]

あとは好きなコマンドを探して実行するだけです。

ちなみに入力フォームの>を削除するとコマンド検索ではなく、ファイル検索ができます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

C++とRubyで処理速度比較してみた 第一回

はじめに

C++の処理速度が速い、Ruby生産性が高いと巷でよく聞くので、
実際に処理速度を比較してみたいと思いました。
それぞれで1000万までの素数生成プログラムを作り比べてみようと思います。

どちらもまだまだチューニングや測定方法などの改善の余地があると思うので、
こうやってみたら速くなるのでは:point_up_tone2::point_up_tone2::point_up_tone2:
と気づいた方はコメントいただけるとすごく嬉しいです:stuck_out_tongue_closed_eyes:

そんな感じで改善していければ面白いかもと思い「第一回」としてます。

アルゴリズムは「エラトステネスのふるい」を使用してます。
自然数を何回かふるいにかけていって素数でない数を消していくと言うやり方です。
詳細で正確な解説は下記参照下さい。
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.3p62

Ruby編:コードと測定結果

prime_number.rb
def 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 end

Ruby編:気づいたこと

・破壊的メソッドでふるいにかけようとするとすごく遅くなりました。

prime_number.rb
terms.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.406918

C++編:気づいたこと

・最適化オプション(-O3)を付けずにコンパイルすると10秒ちょっと遅くなりました。

% clang++ eratosthenes.cpp -o eratosthenes

・listをヒープ領域からスタック領域に変更してもそんなに変わらなかった。

eratosthenes.cpp
list<unsigned long> num_ls;

終わりに

今回はC++の方がRubyよりもおよそ1秒ほど早かった形になります。
C++の方はiteratorループ内のeraseのやり方を誤ったせいで「segmentation fault」でしばらくハマりましたし、時間計測に使ったgettimeofday関数を後で調べてみると非推奨になっていたりしました(chronoを使うと良いらしい)。
やはり生産性はRubyの方が高かった印象です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む