M1 MacBook Proの初期設定

概要

久しぶりにMacを買ったので作業ログを残しておく。

基本設定

スタックを使用

  • デスクトップで右クリック => スタックを使用

ロック画面

  • 設定 => ロック画面
    • 使用していない場合はスクリーンセーバーを開始 => しない

キーボード

  • 設定 => キーボード
    • キーのリピート速度 => 速い
    • リピート入力認識までの時間 => 短い

ホットコーナー

マウスを角に持っていった際にデスクトップが表示されるので地味に便利。

  • 設定 => デスクトップとDock
    • ホットコーナー => 左上と右上をデスクトップ

マウス

  • 設定 => マウス => 軌跡の速さ

Night Shift

日の出から日の入りまでほのかに赤みがかる設定にしている。

  • 設定 => ディスプレイ => Night Shift

Karabiner-Elements

  • Karabiner-Elements をインストール
  • Microsoft Ergonomicキーボードを使っているのでこんな感じ
  • Macデフォルトのキー置き換えは利用しないようにしている

Chrome

デフォルトブラウザをChromeに変更 https://www.google.com/intl/ja/chrome/gsem/download/

少し専門的な設定

Rosetta

Astahで必要

Command Line Developer Tools

iTerm2で必要

iTerm2

  • フルディスクアクセスを許可
  • icebergテーマを適用
curl -O https://raw.githubusercontent.com/Arc0re/Iceberg-iTerm2/master/iceberg.itermcolors

Oh-My-Zsh

$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
  • autosuggestions

私の場合は、fzfとasdfも設定しているが、これはcoreに含まれているため特にライブラリの取得は不要。 (fzfのみbrewでインストールが必要だが、この後に出てくる)

$ git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions
$ vim .zshrc
...
plugins=(git fzf asdf zsh-autosuggestions)
...

astah* professional

UMLの各種図を書くために利用する。 https://astah.change-vision.com/ja/product/astah-professional.html

1Password

これがないと生きていけないくらい最高のツール。 https://1password.com/jp/

sshのキーまで管理してくれるので commit から push までとても楽。

Slack

なんだかんだで利用している。 https://slack.com/intl/ja-jp/downloads/mac

Discord

ゲーム関連の友人たちと利用している。 https://discord.com/download

AppCleaner

言わずと知れた老舗ソフト。 App Store以外からインストールしたソフトをアンインストールする際はこれの利用をお薦めるする。 関連するディレクトリまで検索して一緒に削除してくれる。

https://freemacsoft.net/appcleaner/

Raycast

多機能なランチャーアプリ。 私は clip board history としてのみ利用している、Alt 2連打で呼び出しの設定で利用。

Homebrew

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Docker Desktop

https://www.docker.com/products/docker-desktop/

asdf

言語のバージョン管理ソフトウェア、anyenvと似たようなもの。最近はasdfがナウイらしい。

$ brew install asdf
$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.11.1
$ vim ~/.zshrc
plugins=(git fzf asdf zsh-autosuggestions)

Ruby

asdfを使ってバージョン管理している。

$ asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git
$ asdf install ruby latest

fzf

Terminalでコマンドの検索履歴を見やすくしたい。

$ brew install fzf
$ vim ~/.zshrc
$ vim ~/.zprofile
plugins=(git zsh-autosuggestions asdf fzf)
...
# fzf options
export FZF_DEFAULT_OPTS='--height 100% --reverse'

Visual Studio Code

Devcontainer使いたいのでインストール。

https://code.visualstudio.com/

ghq

リポジトリ管理ツール

$ brew install ghq

下記のようなディレクトリ構造でcloneしてくれる、fork多様する場合など自分のドメイン名のディレクトリ配下になるのでわかりやすい。

$ ghq get git@github.com:rails/rails.git
$ ls /Users/yourname/ghq/github.com/rails/

Sequel Ace

DBの中身をGUIで表示したい人向け、Sequel ProがMySQL8系に対応しないのでこちらへ乗り換え。

https://sequel-ace.com/

Miro

オンラインホワイトボードはMiroが最高、iPad版はApple Pencil対応しているかつWebとの同時ログインOK。

https://miro.com/

家のネットワーク構成図もこちらを利用して記載した、こんな感じの図がサクッと作れる。

IntelliJ IDEA

Javaに限らずRubyなども利用できるが、RubyMineやWebStormの方が安価ではある。

https://www.jetbrains.com/ja-jp/idea/

参考リンク

https://zenn.dev/toono_f/articles/fa4d68857b7d36

Source

Transcribed from Qiita.

Miroの小技集

Miro

miro.com

ボードの移動

いずれかの動作でボード内を移動可能

  • スペース押下しながら左クリック
  • 右クリック
  • トラックパッド

絵文字の利用

左にある「他のアプリ」から利用可能

コードブロック

左にある「他のアプリ」から利用可能

フレームの活用

複数人で操作する際に、領域を明示できる。 フレーム作成後に載せたオブジェクトはフレーム毎移動できる。

選択

ドラッグで選択できる、選択中にCmd+クリックで部分的に選択を解除できる。

複雑な選択

オブジェクトが幾つにも重なった状態で、最上部だけ選択したい場合の手順。

  1. escで全てのフォーカスを外す
  2. 左クリックを長押しする
  3. 最上部にあるオブジェクトだけが選択できる

他の人の視点を追従する

複数人以上が参加している場合、右上のユーザーアイコンをクリックすることでその人の視点に切り替えることができます。 研修などでMiroを利用する際は、講師の方が今どこをみているか把握しやすい機能です。 ホイール操作マウス操作などですぐに解除できて、相手に影響することはありません。

Source

Transcribed from Qiita.

何がわからないかわからないとの付き合い方

何がわからないかわからないとの付き合い方

この記事は雑食系エンジニアサロン Advent Calendar 202120日目の記事です。

こんにちは、chibiccoです。 今回は、自分が「何がわからないかわからない」に陥った時に何を意識したか、をかいていければと思います。

わからないを書き出す

わからない事を付箋のように書き出し、一つづつ解決していく事を目指しましょう。 問題を紐付けていくと、思わぬところで知識が線で繋がることがあります。

例えば、「Railsを使っていて、コードを途中で止めたい!」と思ったとき、前提知識が足りない状況ではそのゴールに到達するのは中々難しいです。

まずは知っていることを書き出します。

実際に「Rails コード 途中で止めたい」Googleで検索してみます。 debugやbinding.pryという単語が出てきました。

これらの単語を使って調べてみたら、もしかしたらもう少し何かわかるかもしれません。 「Rails debug binding.pry」で検索してみると、関連してそうな記事が出てきました。

qiita.com

でも、実際にRailsを使っている状態で何をどうすれば良いかわかりませんでした。 ただ、この記事から新しい単語を見つけました。

Rails pry-byebug」

お、どうやらpry-byebugというのはgemらしい、Railsへの適用方法もなんとなくわかりそうです。

qiita.com

そして、binding.pryという単語はpry-byebugが提供する機能を呼び出すため書くものだ、ということもわかりました。 つまりこんな感じで付箋が繋がった状況になります。

あくまで例なのでスムーズに記載しましたが、初めて調べる内容であれば上記のステップでゴールに辿り着くまで数日かかります、地道に1つづつ調べていく忍耐強さが大事です。

下記で紹介されている図が直感的にイメージしやすく、「わからない事」同士が結びつき、線の知識として解決するタイミングが訪れます。

専門性の話

「何がわからないかわからない」状態はゴールたどり着くために必要な基本知識や単語がわからず、調べるきっかけすらも掴めない、というパターンがあります。

ただ、なぜか私生活で上記の問題で困ることはなかなかないとは思いませんか?

これは、すでにゴールまで手順が確立されていたり、それまでの道順を示したものが資料として多く存在するためです。

「何がわからないかわからない」に入り込んでいるのは、何かの「専門性」が求められる領域に入った証拠です。

「英語が学びたいけど何から始めれば良いかわからない」と「Javaが学びたいけど何から始めれば良いかわからない」では、知識に対するユーザー数と、資料の母数が異なるのです。

つまり、「何がわからないかわからない」で凹んだり悩む必要はないのです!わかるために前進するのみ!

質問の方法

地図の読めない人が、電話であなたに道案内のお願いをしてきたとします。

あなたは、まず状況を把握して目安となるものを探すと思います、いきなり目的地の話はしないでしょう。

これはある専門性のある質問にも適用できます。

道を聞かれている側は、あなたが今どこで迷っているか、距離感も方角もわかりません。

まず、見えている範囲の景色を正確に伝えるだけで、質問されている人がなんとなく汲み取ってくれるでしょう。

先ほどの例で「Railsを使っていて、コードを途中で止めたい!」という話がありました。

これを質問したい場合、そのまま言えばいいのです。

Railsを使っていて、コードを途中で止めたいです!」

回答者は、「コードを途中で止める」という表現を汲み取って、いきなりdebugという表現で返すのはどうだろうか...gemの話は伝わるかな?と少し考え、いくつか認識合わせの問いかけをしてきます。

(お互い人間なので、ここで上手く噛み合わない場合もありますが、下記のような丁寧に返してくれる回答者であることを願います!)

「コードを途中で止めたい、の例がわかるサイトなどはありますか」「gemの追加方法はわかりますか?」

ここまで進めば、あとは目の前の標識を少しづつ前進すれば良いでしょう。

回答者の心構え

自分が同じ状態の時に、何て聞くだろう?をイメージしながら対応し、質問者の方が今見えている景色を引き出す事を最優先に考えることが大事です。

  • ゴールまで導ける時間がある
  • 質問に対する自分の知識レベルを相手に共有する

回答者が十分に時間を確保できず、途中で手放してしまう状況は避けた方が良いでしょう。

「XXXを調べればわかるよ」では、道の途中で投げ出され、質問者はまたその景色を他の方へ伝えるとこから始まってしまいます。

また、質問の中には回答者も即答できない、自信がないものも存在すると思いますが、それは質問者へ正直に伝えてしまいましょう。

「私も調べながらになりますが、一緒に解決しましょう」

さいごに

最近、コード設計周りの学習を始めましたが初めの方は「何がわからないかわからない」状態でてんやわんや...

本を読む+色んな勉強会に参加する、という動きを一年ほど続けたところ、どうやら少しは話せるレベルになってきたかもしれない、という2021年でした。

何年経っても「何がわからないかわからない」から抜け出せませんが、これからも諦めずインプットを続けていこうと思います!

この記事が少しでも参考になれば嬉しいです。

Source

Transcribed from Qiita.

MacOS Catalinaでroot直下にディレクトリをシンボリックリンク

下記を設定後に再起動

~ » sudo mkdir -p /System/Volumes/Data/sample
~ » sudo chown -R $USER:admin /System/Volumes/Data/sample
~ » echo -e 'sample\tSystem/Volumes/Data/sample' | sudo tee -a /etc/synthetic.conf

区切りはタブの必要がある

~ » cat /etc/synthetic.conf
sample  System/Volumes/Data/sample

Source

Transcribed from Qiita.

ActiveSupportのsymbolize_keys!が挙動不審だった件

はじめに

StringとSymbolで同一名のKeyを持つHashはやめよう

{'id' => 10, :id => 11, 'name' => 'AAA', :name => 'BBB'}

遭遇

ruby2.4+rails Hash.transform_keys!が特定の状況でsymbolize_keys(非破壊)と互換のない挙動をする

ruby2.5.2+rails ruby2.5で同関数が実装された事で正常に動作する

確認

ruby2.4+rails

symbolが先の場合

[1] pry(main)> {:id => 10, 'id' => 11, :name => 'AAA', 'name' => 'BBB'}.symbolize_keys
=> {:id=>11, :name=>"BBB"}
[2] pry(main)> {:id => 10, 'id' => 11, :name => 'AAA', 'name' => 'BBB'}.symbolize_keys!
=> {:id=>11, :name=>"BBB"}

symbolが後の場合

[1] pry(main)> {'id' => 10, :id => 11, 'name' => 'AAA', :name => 'BBB'}.symbolize_keys
=> {:id=>11, :name=>"BBB"}
[2] pry(main)> {'id' => 10, :id => 11, 'name' => 'AAA', :name => 'BBB'}.symbolize_keys!
=> {:id=>10, :name=>"AAA"}

ruby2.5.2+rails

symbolが先の場合

[1] pry(main)> {:id => 10, 'id' => 11, :name => 'AAA', 'name' => 'BBB'}.symbolize_keys
=> {:id=>11, :name=>"BBB"}
[2] pry(main)> {:id => 10, 'id' => 11, :name => 'AAA', 'name' => 'BBB'}.symbolize_keys!
=> {:id=>11, :name=>"BBB"}

symbolが後の場合

[1] pry(main)> {'id' => 10, :id => 11, 'name' => 'AAA', :name => 'BBB'}.symbolize_keys
=> {:id=>11, :name=>"BBB"}
[2] pry(main)> {'id' => 10, :id => 11, 'name' => 'AAA', :name => 'BBB'}.symbolize_keys!
=> {:id=>11, :name=>"BBB"}

原因

該当箇所はここ self[yield(key)] = delete(key)の部分、 'id'で取得した物を:idに対して代入し、symbolで保持していた値が失われている為。

def transform_keys!
  return enum_for(:transform_keys!) { size } unless block_given?
  keys.each do |key|
    self[yield(key)] = delete(key)
  end
  self
end

def symbolize_keys!
  transform_keys! { |key| key.to_sym rescue key }
end

おわりに

StringとSymbolで同一名のKeyを持つHashはやめよう

Source

Transcribed from Qiita.