ネット回線をNURO光に移してから問題無く使っているんですがどうせだったらその速さをもっと味わいたいということでルータのある部屋から作業部屋まで有線で繋いてみました。

Image from Gyazo

Image from Gyazo

俺の配線の苦労の跡を見よ!

Image from Gyazo

ウェーイ!

NURO光の僕のプランとしては普通ぐらいの速さが出ているようです。

先月までは90Mbpsぐらいで生活していましたが安定はしていたし作業用のmacを使っている限り大した違いは感じないです。

明日以降のビデオ会議での活躍に期待したいと思います。

厳密には昇降デスクの脚であるFlexiSpot E3を書いました。

元々の机は作業部屋に妻と並べてぴったりのサイズになるように天板を発注して、脚はIKEAのOLOVを使っていました。

Image from Gyazo

教えてリモートワーク komagataさんの場合

その脚だけを変えた感じです。

座った状態

Image from Gyazo

スタンディング状態

Image from Gyazo

(高さが変わってくときでも猫は意外と動じない)

使い心地

まず、スタンディング状態だと座った状態のように作業に入るときに、

「さて、作業するか…」

みたいな心理的なハードルが低いです。

フラッと立ち寄れる作業場所みたいな感じなのでこまめに気楽に作業できる気がします。

また、やはり座った状態もスタンディングも同じ状態だと疲れますが、体の使ってる場所が違うので切り替えると引き続き作業できるようになって休まず作業できる時間が長くなりました。

数日使ってますがかなり気に入りました。

電動+メモリ機能付きを買え

そして強く感じているのが、「電動+メモリ機能(設定を覚えておいてくれて1ボタンでその高さになる)」がなかったら動かさなくなるだろうなということです。

まず自分のしっくりくる高さに合わせるのはかなりシビアなので、切り替えるたびにそんなことする必要があったらストレスが溜まります。(微妙にずれたまま作業するのもすごいストレス)

1日の中で何度も切り替えるものなので手動でやるのも高さの変更が少しでもダルかったら使わなくなると思います。

ポチッと押したら自分のベストの高さにピッタリ合うようになってると楽しいし気持ちいいです。

気になる点

それでも唯一気になっている点が、座ってる状態とスタンディング状態ではベストなカメラの角度が違う点です。

ビデオ会議で使うカメラの調整がいちいち必要になるのが少し面倒ですね。

今の家に3月に引っ越してから約5ヶ月。途中やりとりで何度もブチギレそうになりながらやっとNURO光が開通しました〜🎉

前の回線(NTTフレッツ光マンションタイプ)

Image from Gyazo

NURO光

Image from Gyazo

「わーわー」

84Mbpsから560Mbpsと約6倍も速くなって大満足です・・・と言いたいところですが・・・。

ルーターのメーカー問題

Image from Gyazo

いや、全然問題ないんですがなんかちょっと・・・

回線のせいではなかった説問題

元々Google Nest Hubを使ってメッシュネットワークを組んでいました。(本体+拡張ポイント2個)

NURO光のルーターは無線LAN機能が付いていたのでそれを使ったら560Mbpsでした。もちろん回線がNUROになったのでNUROの回線+Google Nest WiFiのメッシュネットワークで速くなるぞ〜と思ったんですが、NUROのルーターの無線LAN機能を切ってGoogle Nest WiFiの無線LANを使うことにしたところ、以前と同じ80Mbpsしか出ませんでした。

これはもしや、元々回線のせいで遅かったのではなく、Google Nest WiFiが問題だった説が・・・。

まとめ

結局NUROのルーターに付いてる無線LANで家中どこでも速かったので嬉しいは嬉しいのですが、Google Nest WiFiが無駄になったのが微妙です。

Google Nest WiFiの無線LAN機能をPCやスマホからは使ってないですが、妻がキッチンでGoogleアシスタントとして使うので一応残してあります。(Nest Hubが一個あれば良かった説)

ここ最近で一番感動したサービスきました。(rono23に教わったサービス)

ビデオ会議のブッキング面倒問題

コロナでビデオ会議が増えてます。でもビデオ会議のブッキングはクッソだるい。

「私達の可能な日時を調整して3つほど候補日をお伝えします。」(本当はもっと大丈夫な時間あるけどキリがないので3点だけ伝える)

(社内の参加者で調整…)

  • 08月3日(月) 10:00〜12:00、13:00〜15:00
  • 08月5日(水) 13:00〜15:00
  • 08月6日(木) 10:00〜12:00

上記いずれかでご都合の良い時間帯があればお知らせください。

「私どもも社内で調整して折り返します」

(お客さん側の参加者間で調整…)

08月5日(水) 13:00〜15:00

こちらでお願い致します。

では当日、宜しくお願い致します。

コレ。

何ターンもやりとりが発生してやってられない。

気軽にビデオ会議ができない。もっと楽だったらテキストよりビデオで話せばすぐ解決することも多いのに。

神サービス

それを解決してくれる神サービスがyou can book me

こういうブッキングがURLを1つ送るだけで完了する。

Googleカレンダーと連携できて、スケジュールが入ってる場所は選べないようにしてくれる。 (自分がアクセスできてる社内の他の人のカレンダーもまとめて考慮してくれる)

Image from Gyazo

お客さん側は自分の都合のいい時間を選んで、

Image from Gyazo

このように登録すると、俺のGoogleカレンダーに予定が入る。(申し込んだ方のカレンダーにも簡単な手順で登録できる)

Image from Gyazo

zoomの場所も自動で決まっている。

もちろん登録されたタイミングで俺にメールでの通知も来る。

神だわ。

ちょっと気になったのでタックスヘイブンのマレーシアのラブアン法人設立のオンラインセミナーに出てみました。

まとめ

  • 法人所得税は3%。
  • 最近いろいろ厳しくなって、その要件をクリアするには年200万ぐらい経費が必要だよ。(それ以上の節税メリットのある規模じゃないと意味ないよ)
    • ラブアン島で2人以上雇用していくら以上使うべしってルールがあるけど、それをクリアするためのパッケージを現地の会社と作成中だよ。
  • MM2Hビザはリニューアル予定なので来年ぐらいまで今はストップしてるよ。
  • 就労ビザのために設立するのはおすすめしないよ。(MM2Hビザの復活を待った方がいいよ)
    • 月給25万以上ぐらいの人にしかビザがおりないよ。
  • 日本で利益が出た仮想通貨を換金するために海外法人を作るのはかなり難しい(日本の国税庁がかなり動きを把握しちゃってるから)ので諦めた方がいいよ。
    • 財団法人を作るって方法があるけど要相談だよ。

法人については事前に謎に思ってた部分は解決しました。

個人は?

今度は個人の税金について気になってきました。

例えば、日本の法人に所属してマレーシアに移住した人への下記の税金はどうなるんだろう?

  • 個人所得税
  • 住民税(マレーシアでは無し)
  • 年金
  • 健康保険
  • 雇用保険

オンラインセミナー

zoomで基本は聞くだけ。(マイク・カメラは全員強制OFF)

付属のチャットでリアルタイムで質問できるって型式でした。

技術以外のオンラインセミナーって初めて出ましたが、複数持ってた謎が1時間で解決したので自分で延々と調べるよりコスパいいなと思いました。今後ライトにいろんなのに参加しようかなと思います。(怪しいの多いので注意しながら…)

フィヨルドブートキャンプのレビューでいつも書いてることシリーズ。

基本的にはこちらのrisacanさんの内容と同じです。

コミットメッセージの書き方. 適切な情報を残そう | by risacan | Medium

この内容から下記の二つを引いた感じです。

  • 先頭を必ず絵文字ってのは基本の考えとしてはない方が良さそう(プロジェクトで決めてこれを採用するのは全く問題ない)
  • 最初だけ英語ってのは全体を英語か日本語に統一した方が良さそう。

ずっと残るものだからあまり流行に左右される書き方はしない方がいいかなと思います。

また、あまりシステマチックなルールにするとコミットメッセージの基本である「何を考えて書いたのをわかりやすく説明する」という姿勢が弱まっちゃいそうだなという思いもあります。

フィヨルドブートキャンプの「自分で考えたWebサービスを作る」のカリキュラムでいつも言ってることまとめ。

「作ってみました」と「リリースしました」は違う

「作ってみました」と言うつもりで作ったWebサービスと「リリースしました」と言うつもりで作ったWebサービスは大きく違います。

「作ってみました」はお試し・実験のような意味合いで、自分の実力イコールではないことになります。下記のようないろいろな言い訳のできる余地がある言い方です。

  • 技術の実験なのでデザインは本気ではない。
  • 自分以外の誰かに使ってもらおうとは思ってない。
  • ターゲットは考えてない。
  • マネタイズは考えてない。
  • 本気で作ってない。

それに対して「リリースしました」は下記のように色々と突っ込まれることが予想されるので、それに対して「現時点での全力である」と言えるように作ることになります。

  • 「使いづらいんじゃない?」
  • 「デザインがダサいんじゃない?」
  • 「コンセプトが悪いんじゃない?」
  • 「名前(サービス名)がダサいんじゃない?」
  • 「誰が使うの?」
  • 「これがあなたの作品?」

Webサービスはネットにアクセスできる誰もが1タップで見れるので、業界人だけが見るわけじゃありません。かなりの確率でSNS経由で学生時代の友達や家族も見ます。そう言った視線を想定して全力で作ったモノと「作ってみた」モノはとてつもなく違います。

マンガでいえば「大学ノートに鉛筆で書いたマンガ」と「漫画原稿用紙にペン入れしてトーンを貼った18ページのマンガ」ぐらい違います。

逆に言えば「リリースした」人はそれだけやりきった人なのですごいです。

業界人の見方

Webサービスを作ったことがある人の目も「作ってみた」ことがある人と「リリースした」ことがある人では違います。経験者はその二つがどれだけ違うか分かっているので、「作ってみました」ではなく「リリースしました」と言い切っている人に対する態度は非常に優しいです。

「リリースした」だけで内容よりまず先に「すごい」「おめでとう」です。内容に対する意見はその後です。

就職面接での面接官の見方も違います。「リリースした」人は作り上げる技術だけでなく、サービスのコンセプトやデザイン、UIなどとことん考えたことがある人であると期待できます。

実際に業務でWebサービスを作る時にはそれぞれの専門職の人と協力しながら作りますが、その時にも自分なりに考えて、大変さを分かっていることは生きるはずです。

mentionable gemで簡単にmentionが実装できます。(こういうやつ → @komagata)

komagata/mentionable

インストール

gem 'mentionable'
$ bundle install

使い方

app/models/comment.rb:

class Comment
  mentionable_as :body

  def after_save_mention(new_mentions)
    p new_mentions # => ["@komagata", "@machida"]
  end
end

Commentモデルのbodyにmentionが含まれる文章が保存される場合、mentionable_asでそのカラムを指定したらデフォルトでafter_save_mentionメソッドが呼ばれるので実装して置けばOK。

そのカラムにメンションが含まれていた場合、そのメソッドがコールバックされます。

class Comment
  mentionable_as :body, on_mention: :on_mentioned, regexp: /:\w+:/

  def on_mentioned(new_mentions)
    p new_mentions # => [":komagata:", ":machida:"]
  end
end

コールバックメソッドの名前とメンションを抽出するための正規表現は独自のものが指定できる。

便利メソッド

comment = Comment.create(body: '@nobunaga @hideyosi Hi guys.')
comment.mentions # => ["@nobunaga", "@hideyosi"]
comment.new_mentions? # => true

comment.update(body: '@nobunaga @hideyosi @ieyasu Hi guys.')
comment.mentions # => ["@nobunaga", "@hideyosi", "@ieyasu"]
comment.mentions_were # => ["@nobunaga", "@hideyosi"]
comment.new_mentions # => ["@ieyasu"]
comment.new_mentions? # => true

#mentionsでメンションが取れる。

メンションを自分で実装するときの面倒な仕様として、

「メンションを含むテキストがupdateされた場合に増えた分のメンションだけ欲しい。(updateされるたびに通知が行くとうざい)」

というのがありますが、mentionable gemでは最初から新しく増えた分のメンションだけがコールバックメソッドに渡ってくるので楽です。

それらを自分で取る各種メソッドもあります。

  • #mentions: メンション全部
  • #mentions?: メンションある?
  • #new_mentions: 新しいメンション
  • #new_mentions: 新しいメンションある?
  • #mentions_were: 古いメンション

実際のサービスではコールバックメソッドの中でサイト内通知や通知メールを送ったりすればOK。

BasecampHEYがリリースされましたね。

見れば見るほどBasecamp社のWebアプリの作り方をまとめた本であるGetting Realの内容に従って作られてるアプリだなとGetting RealをバイブルにしてWebアプリ作成を仕事にしてきた我々としては嬉しくなってしまいます。(2007年の本なのに!)

ただ、業界内で「Getting Real良いですよね、私もすごく好きです。」という人は多いですが「え?あんたの作ってるアプリ全然Getting Real的じゃなくない?」ということがしばしばあります。

フィヨルドブートキャンプの最終課題の「自分で考えたWebサービスを作る」ではGetting Realを読んでからどういうサービスなのかを表現するエレベーターピッチを作ることになっています。

しかし「これってGetting Realに書いてあることと真逆じゃない?ホントに読んだ?」ということが頻繁にあります。

そこでわかりやすいようにWebアプリ作成に絞って(組織論などは除外)Getting Realの中から「Getting Real的なもの」と「Getting Real的でないもの」を僕の理解で抜き出してみました。

Getting Real的でないもの VS Getting Real的なもの

シンプルさ

  • 「競合より多い機能」VS「競合より少ない機能」
  • 「多くのコード」VS「より少ないコード」
  • 「様々なケースに対応できるように作る」VS「一般的なケースにのみ対応したものを作る」

オープンさ

  • 「失敗の許されない厳格な雰囲気」VS「失敗を認めやすいオープンな雰囲気」
  • 「クローズドなソフトウェア」VS「オープンなソフトウェア」

機能の選択

  • 「ユーザーの機能提案をなるべく採用する」VS「ユーザーの機能提案にまずNOという」
  • 「ユーザーに何が必要か尋ねる」VS「ユーザーに何が要らないか尋ねる」
  • 「ユーザーが柔軟に設定できるようにする」VS「サービス側で考えた一番良い設定を提供する」

段階的な開発

  • 「長いリリーススケジュール」VS「短いリリーススケジュール」
  • 「最初から大規模なシステムを作る」VS「システムを段階的に大きくしていく」
  • 「ユーザー拡大に備えてあらかじめ人員を揃える」VS「ユーザーが増えてから人員を増やす」
  • 「新たな機能を完璧にしてからリリースする」VS「新たな機能はベータ版として使ってもらって改良する」

ユーザーの声

  • 「自分以外が製品のターゲット・ユーザー」VS「自分自身が製品のターゲット・ユーザー」
  • 「ユーザーサポート専門のスタッフ」VS「開発者自身でやるユーザーサポート」

インターフェースデザイン

  • 「何でもできるインターフェース」VS「切り詰めたインターフェース」
  • 「システムを作ってからデザインを入れる」VS「インターフェースをデザインしてからシステムを入れる」
  • 「アウトラインができる前にディティールに固執する」VS「動くものを自分で使ってみてから必要な部分のディティールを調整する」
  • 「一貫性のあるデザイン」VS「一貫性よりもコンテクストに合わせたデザイン」
  • 「デザインにダミーテキストを使う」VS「デザインに本物の言葉を使う」
  • 「文言はインターフェースとは別」VS「文言はインターフェースの一部」
  • 「ユーザーが使う画面と管理画面を分ける」VS「ユーザーの画面に管理機能を組み込む」

その他

  • 「精巧な仕様書を書く」VS「仕様書を書かない」
  • 「初期費用・長期割引・解約料金を設定する」VS「初期費用・長期割引・解約費用を設定しない」
  • 「最初のアイデアを守り抜く」VS「最初のアイデアが悪ければ方向転換する」 

Getting Realの良さ

Getting Realが衝撃的だったのは多くの点でそれまで良いとされていたことと逆のことを言ったからです。毒にも薬にもならない耳触りの良いあるべき論ではなく「え、そんなこと言い切っちゃって良いの?」というような割り切りと実際にそれを実行してる点に当時の僕らはシビれたわけです。

と僕らが勝手に思ってるので話が食い違うことがあるんでしょうね…。

自分の会社で作ってるサービスや使ってるサービスに対して「ここがGetting Real的」「ここがGetting Real的じゃない」など考えてみるのも楽しいかもしれません。

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 list --paths` 2>/dev/null"

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

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

2020年07月06日修正:bundle showはDEPRECATEDなのでbundle listに修正。(これが原因でtagが読めなくなってた)