macデフォルトは古いのでbrewで入れる。

% brew install ctags

vim-tagsを入れる。

.vimrc:

Plug 'szw/vim-tags'

let g:vim_tags_project_tags_command = "/usr/local/bin/ctags -R {OPTIONS} {DIRECTORY} 2>/dev/null"
let g:vim_tags_gems_tags_command = "/usr/local/bin/ctags -R {OPTIONS} `bundle show --paths` 2>/dev/null"

:TagsGenerateする。(.gitがあると.git/tagsに作られるみたい便利)

  • C-]: 定義にとぶ
  • C-o: 前のバッファに戻る
  • C-i: C-oの逆

Lily58 Proの家用の2台目ができました。(1台目は会社)

Image from Gyazo

今回は遊舎工房さんの組み立てサービスを使いました。

Image from Gyazo

「自作キーボードの 概念が 乱れる!」

ケーブル自作キットはまだ届いてないので仮のケーブルです。

やっぱり馴染んだキーボードはめっちゃ使い易い・・・天国のような使い心地です。

プログラミングスクールのフィヨルドブートキャンプの提出物のレビューでよく指摘するシリーズ。

独自の構造や単語を考える前に、組み込みライブラリ標準添付ライブラリでよく使われている構造や単語(クラス名・メソッド名)で表現できないか考えよう。

独自の構造・単語は作っている人にとってはわかりやすいかもしれないが、それを使う他人にとってはわかりづらい。rubyプログラマーにおなじみの構造・単語でなるべく作ろう。

Bad:

class Status
  def self.make_stat(file)
    {
      username: self.username(file),
      size: self.size(file),
      basename: File.basename(file)
    }
  end

  def self.username(file)
    # ...
  end

  def self.size(file)
    # ...
  end
end

puts Status.make_stat(file) # => {username => 'komagata', :size => 1234, basename: 'ls.rb'}

Good:

class Status
  def initialize(file)
    @file = file
  end

  def to_h
    {
      username: username, 
      size: size, 
      basename: File.basename(@file)
    }
  end

  def username
    # ...
  end

  def size
    # ...
  end
end

puts Status.new(file).to_h # => {username => 'komagata', :size => 1234, basename: 'ls.rb'}

プログラミングスクールのフィヨルドブートキャンプでは毎月オフラインでミートアップという名の飲み会イベントをやっていたんですが、コロナの影響でオンライでのミートアップに移行しました。そのオンラインミートアップにリモートカンファレンスサービスのRemoを使ってみました。

Image from Gyazo

(イベント中の座席画像は撮り忘れたのでイベント終わった後の画像です)

Image from Gyazo

どんなツール?

Remoの特徴はテーブル毎に別れたビデオチャットルームがあり、Wクリックすることで自由にテーブルを移動するように他のルームに移動できるところです。

「あの人と話したいからあっちのテーブルに移ろう」

とか

「他の話題で話したいから別のテーブルに移ろう」

などができるってことですね。

1つの共通の大きなルームだけだと1つの話題しか話せないので全員参加の雑談はしづらいです。要は立食パーティーみたいなフリートークができます。

これが今まで立食で飲み食いするオフラインミートアップをやっていた僕らにはぴったりハマりました。

また、主催者は強制的に全員に見せるプレゼンテーションを開始することができます。立食パーティーで言えば、主催者が「皆さんご注目ください」と言って話すみたいなシュチュエーションです。

そのプレゼンテーションでは、みている人はアイコンをクリックすると挙手することができます。主催者は挙手しているユーザーを選んで壇上にあげることができます。(全員が見ている場に登場することができる)

この辺りはカンファレンスの質疑応答のためにあるイメージですね。

どんな流れでやったか

今回は下記のような流れでミートアップを行いました。(合計2時間30分)

  1. 開始の挨拶・乾杯
  2. 自己紹介タイム
  3. フィヨルドトーーク!によるテーマトーク
  4. 卒業式
  5. フリートトーク

今回の主催・司会進行は私 @komagata と @machida の二名で行いました。

まず全員強制参加のプレゼンテーションを使って、Keynoteを画面共有しての趣旨説明と乾杯。それから一人づつ壇上に呼んでの自己紹介タイム。司会進行の僕らも同じく映っているので、リアクションを取ったり拍手したりできるので進めやすいです。

フィヨルドトーーク!については別のエントリーで紹介したいと思いますが、事前に募集した質問事項を「卒業生の方」とか「メンターの方」などを対象にした質問がくるので読み上げて、対象の人を壇上に読んで聞いていく形です。

フィヨルドトーーク! - komagataのブログ

卒業式は今月卒業された方への卒業証書授与です。壇上に一人づつ読んで僕が証書を読み上げる形です。(実物と卒業記念Tシャツを後ほど郵送します。)

残った時間は本来の各テーブルに分かれてのフリートークを行いました。テーブルを見ているだけでもいくつかのテーブルに有機的に集まっていく姿が面白いです。

主催者・メンターはなるべく各テーブルに分散して、特に初めて参加した方が一人ぼっちにならないようにサポートしていく感じでした。

契約している月150ドルのプランだとイベントは2時間30分までなのでそれを過ぎると強制的に終了します。これはだらだらせずできるのでよかったですが、10分前通知などがあるとよかったですね。今回は手動でアナウンスしました。(全員に強制的にメッセージダイアログを表示させられる)

イマイチな点

非常に満足しているんですが、いくつかいまいちに感じた点も。

全体的にWebアプリとして急いで作った感

他のサービスと比べて動作の怪しい部分やUIのわかりづらさなど最低限のMVP感があります。

プランの縛り

50ドルのプランだと1時間15分までのイベントしかできません。僕らはオフラインのイベントでは軽食・飲み物などを用意してたので150ドルのプランでも全然こっちの方が安いですが、100ドルを超えるとちょっと敷居の高さを感じますね。

録画ファイルがでかい

普段はWherebyを使っていて、Wherebyではwebp形式でものすごく小さく圧縮して保存しておいてくれるので、ダウンロードしてからYoutubeやVimeoにアップするのは早いのですが、数GBとかになるのでちょっとしんどい。

感想

ぴったりくるユースケースは限られるとは思いますが、僕らの用途にはぴったりでした。参加者の皆さんの評判も良く、来月もこれでやってほしいという方が多かったです。今までオフラインでやっていたミートアップは実際に行ける人にとってはいいですが、リモート参加の仕組みを用意してもやはりかなり非対称なコミュニケーションになっていて、特にお酒を飲んでの飲み会でローカルとリモートが混在するのはなかなかうまくできませんでした。

リモートの方が人数が多いですし、ローカルとの不公平感をなくすためにも今後全部これでいいんじゃないかと感じましたね。

先日のフィヨルドブートキャンプのオンラインミートアップにフィヨルドトーーク!を初めて使ってみました。

フィヨルドトーーク!は以前フィヨルドブートキャンプにエンジニア研修で来られたGMOペパボの@akhtさんが卒業制作で作ったペパトーーク!(旧Super Cool Web App)を@akht_ikdさんの許可を得てforkして@komagata@machidaがミートアップ用に改造したサービスです。(「誰に」という項目を追加してデザインを変えただけ)

フィヨルドトーーク!はイベントの時のトークテーマを募集してランダムで表示するアプリです。

Image from Gyazo

Image from Gyazo

匿名で質問やトークテーマを応募できます。この画面を見ればなんとなくわかると思います。

Image from Gyazo

事前に募集しておいたものからランダムで一つづつ表示されます。矢印キーの←→で前と次に話題を移れます。

以前オフラインでミートアップを開いていた時はfork元のペパトーーク!を使わせていただいていました。アプリとしての機能は少ないですが、初対面の人やシャイボーイ・シャイガールが多い場ではフリートーク前のアイスブレイクとしてとても便利でした。

オンラインミートアップでも大活躍でした。スクールという性質上、テーマは質問が中心となりますので、「誰に聞きたい」という項目が増えたことで、聞く相手も明確になって進めやすくなりました。1日ぐらいしかないのに@machida さんがデザインや派手なアニメーションも入れてくれました😍

元のペパトーーク!からオープンソースなのでもちろんこちらもオープンソースです。

サービス自体の方もどなたでも使えますので、オンラインイベントなどでぜひ使ってみてください〜。

プログラミングスクールのフィヨルドブートキャンプの提出物のレビューでよく指摘するシリーズ。

原則、クラス名は名詞、メソッド名は動詞です。例外は下記。

[RubyTips] 変数のように見えるメソッド - komagataのブログ

単純に英語の文章としておかしいメソッド名も多いので注意です。

プログラミングスクールのフィヨルドブートキャンプの提出物のレビューでよく指摘するシリーズ。

メソッド名に同じ名詞が頻出する場合、その名詞をクラス名として抜き出すとスッキリすることが多い。特にそれらのメソッドが同じインスタンス変数を使ってる場合は尚更。

Bad:

class File
  attr_accessor :permission

  def open
    # ...
  end

  def check_permission
    # ...
  end

  def fetch_permission
    # ...
  end

  def permission_characters
    # ...
  end
end

Good:

class File
  def open(path)
    # ...
    @permission = Permission.new(file)
  end
end

class Permission
  def initialize(file)
    @file = file
  end

  def check
    # ...
  end

  def fetch
    # ...
  end

  def characters
    # ...
  end
end

こんにちは、タイトルは昨今の流行を取り入れた自虐です😭

MacBook Pro 13inch 2020が来たので設定しつつ、いつもやっている設定を書きます。

キーボードや入力設定をする

まずはこれ。

  • CapsLockをControlにする。
  • キーリピートを最速に、リピート入力認識を最短にする。

App Storeからアプリをインストール

すでにインストールしてたやつをまた入れる。

  • CotEditor
  • Slack
    • みんな大好き。
  • Simplenote
    • 自分用のテキストはここに置いてます。
  • Kindle
    • PCで使うことは意外と多い。
  • TweetDeck by Twitter
    • こういうツールでホームのタイムラインは視界に入れないようにすると精神衛生上良い。
  • Xcode
    • 一応。

Homebrewをインストール

CLI系のアプリをインストール。

  • ghq
  • fzf
  • git
    • 新しい版を使いたい。
  • postgresql
    • 大好き。
  • mysql
    • 嫌いではない。
  • the_silver_searcher
    • 主にvimから全文検索するために使っています。もっといいものが最近はあるけど、vimgrepに比べたら超速いので満足してます。
  • tig
    • Unity+C#をやった時に大量のファイルをaddするのが辛くて使い始めました。
  • node
    • node-gypが憎い。
  • yarn
    • railsで必須だから以外に思い入れは無い。
  • pwgen
    • 手元でサッとランダムなパスワードを作りたい時のために。
  • screen
    • いい加減にtmuxに移りたいが同じ設定がtmuxでできず放置中。
  • go
    • あんまり書いてませんが、プログラムのディレクトリ構成はgoに合わせたままです。
  • rbenv
    • ~/.zshrcに設定を追記するのを忘れてスクールの生徒の方がいつもハマるやつ。
  • ruby-build
    • 最近色々オプションつけなくても良くなった気がする。
  • vim
  • hugo
  • imagemagick
    • 昔は荒ぶっていたが最近は大人しいヤツ。
  • ffmpeg
    • とっつき辛いが覚えれば一番ちゃんと動いてくれるやつ。
  • zsh
  • direnv
    • 特に無し。
  • hub
    • 特に無し。

Homebrew CaskでGUIアプリをインストール。

  • google-chrome
    • メインのブラウザです。
  • chromedriver
  • cyberduck
    • 滅多に出番はないけど慣れてるので使っちゃう。
  • fluid
  • messenger-native
  • sequel-pro
    • 最近不安定。
  • dbeaver-community
    • 使い辛いけど、Sequel Proが落ちる時に。
  • postico
    • 一番使うDBはPostgreSQLなのでお世話になってます。問題が起きたこと無し。
  • macdown
    • ブログなどの長文はこれで書いてます。
  • gyazo
    • いまだに神アプリ
  • discord
    • 自作キーボードのチャンネルに入る時に使ってます。
  • deepl
    • 翻訳すごいですね。
  • libreoffice
    • 主に他の会社の方のドキュメント編集用。Numbersは大抵崩れる。更に互換性が必要な場合はオンラインのOfficeを使う。
  • docker
    • メモリ喰い。
  • openemu
    • 最近中華ポータブルゲーム機にハマってるので。
  • steam
    • Windowsのゲーム用PCでは大活躍中だけど、macは仕事用なのでアンインストールした方がいいかもしれない。僕がやりたいゲームは大抵macでも動くのが困る。
  • sketch
    • 図を書く時に使う。以前Photoshopから移行してきた。
  • visual-studio-code
    • プログラミングスクールとしてはこれを前提としてるのでカリキュラムを作ったり、スクショを撮ったりする時に使います。
  • dropbox
    • 会社のドキュメントを共有してます。
  • 1password
    • 会社のパスワードを共有してます。

手動でアプリを入れる

App Storeにもhomebrewにも無いやつ。

  • zoom
    • 特に競合に対して優位性はないような気がする。

sshの鍵を入れる

USBメモリに入れてるsshの鍵をmacにコピー。

colinux上で作った鍵を使い回していて、セキュリティ的にまずいので作り直した方がよさそう。(今自分のブログを検索したところ2005年頃作った鍵のようだ)

dotfileをダウンロード

bitbucketで管理してたdotfileはgithubのprivateも無料になったのでgithubに移行しました。

シンボリックリンクを貼るsymlink.rbって昔書いたscriptをずっと使ってるけどずっと動いてる。

dotfilesを管理しよう - Qiita

仕事のプロジェクトを動かしてみる

いくつか動かしてみて動いたらOK。

ファイル共有

ドキュメントや画像なんかはicloud driveが安いのでほとんど入れてます。写真はGoogle Photos。

昔に比べるとクラウドで同期されるものが増えて、macを買った時の設定は楽になりました。

Mac設定の自動化

かっちりスクリプト or ツールで自動化しても、実行する機会が滅多に無いので、実行するたびに時代が変わっていてメンテナンスが必要になるのであまり楽にならないというあるある。(会社など複数人で使う自動化は意味がある)

最近のハードウェア・OSのアップデート戦略

以前は、

「毎年旧正月には禊として身を清めてから下ろしたての下着を履きクリーンインストールすべし。1年の垢と厄とキャッシュファイルをきれいにするのだ。」

などと言っていたのですが、

「OSアップデートもクリーンインストールもしない。2年に一度MacBookを買い換えれば良い」

という怠惰な戦略になっています。(最近はMacBookの進化が鈍化してるので買い替え頻度も落ちている)

ただ、上記に書いたように買い換えたときはTime Machineからリストアせず、まっさらから手動で設定しています。

フィヨルドブートキャンプでメンターとしてレビューしているときに、rubocopのカリキュラム以降は提出するコードをrubocopを通してから提出するようにお願いしています。

しかし、デフォルトのrubocopだと不便なところがあったのでfjordとしての設定を作りました。

方針は下記の2点です。

  • なるべくrubocopのデフォルトに従う。
  • rails newしたコードで指摘されまくるなど、流石にこれは厳しいという点のみ外す。

gistに置いたので下記のように書けば使えます。

.rubocop.yml:

inherit_from:
  - https://gist.github.com/komagata/9ad19373b9f9059ca52e727fbb7f2944/raw/e3a9bf5db5459a8172f634a677f7dccae66df060/ruby.yml
  - https://gist.github.com/komagata/9ad19373b9f9059ca52e727fbb7f2944/raw/e3a9bf5db5459a8172f634a677f7dccae66df060/rails.yml

require:
  - rubocop-minitest

Fjord rubocop configuration.

ruby用とrails用に分かれているのでrailsを使わない場合はそちらを読み込む必要は無いです。

それぞれgistのrevisionでURLが変わるので更新するには最新のURLを見に行って書き換える必要があります。

.vimrc:

let NERDTreeShowHidden = 1

なんで今までやってなかったんだろう?