トラックパッドネイティブがトラックボールに乗り換えました🐭

macbook air 2013年モデルから、macbook pro 2018年モデルに至る今までappleトラックパッドの直感的な操作に虜になっていましたが、この度トラックボールマウスに切り替えました!

マウスからトラックパッドに変更して "感動した!!" というブログはたくさん見かけたのですが、逆のパターンの報告は極端少ないように感じました。 トラックパッドはたしかに使いやすい。

そこで、その逆パターン (トラックパッドトラックボール) の一例として記事を書きます。

f:id:onysuke:20200401182022j:plain
HHKBとトラックボール

どう?

トラックボール最高。

大学生になって初めて自分のパソコン macbook air を買った時、トラックパッドの直感的な操作にとても感動したことを覚えています。"もうマウスなんかに戻ることはない"と去年くらいまでは思ってました。

でも、今両者を比較すると、自分はトラックボールマウスの方が圧倒的に好きです。

トラックボールマウスの触りたさにデスクへ向かう という記事を見た時、"そんなわけ。"と思ってましたが、そんなわけありました。

なぜ変えた?

家での開発環境向上のため、macbook proをラップトップスタンドに乗せてデュアルディスプレイにしました。視線が上がるのでかなり楽に作業できるようになりました。

ここで、ラップトップで作業していた勢が直面する問題が "キーボードとマウス(or トラックパッド)どうするか" です。

macbook proをスタンドに乗せているため、普段使っているキーボードとトラックパッドが使えない状況になります。(斜めでもいい感じなら、そのまま使えますが。)

私自身、この改革でHHKBキーボードデビューしたため、マウス(or トラックパッド)をどうするか悩みました。

選択肢は2つ。

  1. apple純正のトラックパッド(別売り)を購入
  2. マウスを購入

1.はやっている人が多く、特にデザイナーさんのデスクで多いように思いました。トラックパッドネイティブとしては、この選択肢は安パイ。ただ、高価 かつ 広範囲にカーソルを動かす時の不自由さなど、欠点も少し感じていました。

そこで悩みに悩んだ末、2. マウスを購入 を決め logicool m570 のトラックボールマウスを購入しました。

インターン先の社長が愛用していて、マウスにするならこれしかないと決めていました。(ERGO*1は色が好みでしたが、高すぎる。)

良い点は?

慣れるのに少し時間は必要ですが、手首や指の擦れなどの心配なく繊細のカーソル移動が簡単に実現できます。意外と親指って繊細な動きが可能です。

スクロールもトラックパッドジェスチャーよりホイールの方が、手の動かす量が小さくて楽な気がします。(個人差はあるでしょう。)

トラックパッドの直感的な "戻る" もボタン一つで実現できるので、"戻る" も楽です。

ボールを外すのが簡単、こまめに掃除が可能です。

悪い点は?

とはいえ、直感的な操作が可能なのはトラックパッドだと思います。

特に、指3本で全体を俯瞰する操作 はトラックパッドならではです。これがトラックボールではできない… (機種によってはボタンに登録することでできるかも。)

この操作のときだけ、トラックパッドを触ります。macbook proをラップトップスタンドに置いていても、このくらいのタッチ操作なら楽々なので問題はないかと思います。

f:id:onysuke:20200403090445g:plain
未だにトラックパッドで行う操作

Try Trackball!

在宅ワークする機会も増えてきて、自宅のデスク環境を整えようとしている方へ、

使い慣れたトラックパッドもいいですが、トラックボールマウスも是非検討してみてください。

トラックパッド から トラックボールマウスへの乗り換え 十分する価値ありです。

Courseraの "SQL for Data Science" を爆速で修了しました🌸

オンライン学習プラットフォーム Coursera で、SQL for Data Science というコースを2日間で修了しました。 Courseraは何度か挑戦するも離脱してきたので、修了できてホッとしています。

f:id:onysuke:20200328160455j:plain
修了証 (名前は修正しています)

どんな講義?

SQL for Data Science https://www.coursera.org/learn/sql-for-data-science

  • SQLを1から学ぶコース。SQLの概念からSELECT~VIEWSくらいまでを網羅している。

  • 136,932人が登録していて、Courseraで受講者が多い講義の一つ。*1

  • カリフォルニア大学デービス校(University of California, Davis)が提供しています。

  • 講師はアクセンチュアコンサルタントをしているSadie St. Lawrenceさん*2。説明はわかりやすい、英語も聞き取りやすかったです。

    ※3日くらいで全て収録したぽい(服の変わる頻度から)ので、途中疲れている感じありました。

  • 週3~4時間で4週間で修了を想定している。

  • 週単位で進めていく形式 (早期修了可能)で、動画で講義を受けてから練習問題、テストを解いていく。テストが合格点以上かつ最終課題の提出で修了となる。

無料?

頑張れば無料です。具体的には、受講開始から7日間の無料トライアルのサブスクリプションが付与されます。 このシステムにより7日間で終わらせようというモチベーションが生まれ、2日で修了しました。 このコースは修了証発行にかかる$80も無料のようです🎉

なぜ受けた?

強い人(ex. SFのGAFAリサーチャー)も意外とCoursera修了証をもっていて興味を持ちました。 linkedinに資格が貼ってあると、このトピック独学してきたんだ〜 とかその人の興味がわかっておもしろい! そこで、自分のlinkedinの資格欄にCourseraの修了証を貼りたい と思ったからです。(適当な理由すぎます。)

受けてみて、どう?

非エンジニアがSQL学ぶ場合にも使えそう⭕

初級レベルという位置づけですが、後半に近づくにつれて学ぶ量は多いと感じました。インターンSQLは少し触っていたのでスムーズに進めましたが、本当に1から学ぶ場合は7日間修了はきついかもしれません。

クエリの説明以外にも、"やみくもにクエリから書き出しても、時間が溶けるだけだよ。"、"ゆっくり始めろ(データをまず知れ)。" などの、クリティカルで実践的な話題もあっておもしろかったです。

最後の課題は yelpの公開データセットを自分なりに分析して .txtで提出するもので、オンラインながら自由度の高い課題なのが印象的でした。自分の提出後は、他の受講者3人の課題を添削する。という相互学習的な仕組みが取り入れられていて興味深かったです。

過去の受講者がgithubにテストの解答を公開していることがdiscussionで指摘されていたり、MOOCsにおける評価の難しさを実感しました。この辺り改善されるといいですが。

Enjoy MOOCs!

これで、晴れてlinkedinに修了証が貼り付けられるようになりました。今回、SQLという渋い選択だったのでもう少し応用的な講義も受けてみようかなと考えています。

修了証に価値があるかはわかりませんが、オンラインで気軽に学習できるコンテンツが増えていくと嬉しいです。

f:id:onysuke:20200328155057p:plain
成績表

33. Search in Rotated Sorted Array @ LeetCode

インタビュー対策に近いコーディングの鍛錬としてLeetCodeを進めています。

数百に近い問題があり、"何から始めたら…? 1から解こう!→ 3日坊主" の未来が見えたので、新井康平さんの記事 "コーディング面接対策のために解きたいLeetCode 60問" (https://1kohei1.com/leetcode/) の問題を徹底的に理解していくことから始めようと思っています。

今日はその中の1問を取り上げます。

問題

LeetCode 33. Search in Rotated Sorted Array (https://leetcode.com/problems/search-in-rotated-sorted-array/)

昇順にソートされた配列をあらかじめ知らないピボットで
回転させたとします(ex. [0,1,2,4,5,6,7]→[4,5,6,7,0,1,2])。
検索対象の値が与えられます。配列の中に見つかった場合はそのインデックスを返し、
そうでない場合は -1 を返します。
配列の中に重複したものが存在しないと仮定しても構いません。
アルゴリズムの実行時の複雑さは,O(log n) のオーダーでなければなりません。

例1.
入力: nums = [4,5,6,7,0,1,2], target = 0
出力: 4

例2.
入力: nums = [4,5,6,7,0,1,2], target = 3
出力: -1

訳: DeepL(https://www.deepl.com/home)、少し修正

方針

後述するYoutube解説でも配信者が述べていますが、シンプルな問題設定でバイナリサーチへの理解を問う 良問です。

今回の問題設定では、ソート済みリストの一部がピボットしていることから、ソート済みリストを前提としているバイナリサーチをそのまま使うことはできません。

そこで、ピボット位置の特定によりソート済みの部分リストを見つけることで、単純なバイナリサーチに落とし込むことができるという流れになります。

AC解答

情けないことに、初見で単純なバイナリサーチかましてWA連発したため、以下のYoutube解説(Java)を参考に解答しました。(ほぼ写経やないかい)


LeetCode 33. Search in Rotated Sorted Array

丁寧な説明で英語も聞き取りやすかった。


class Solution:
    def search(self, nums: List[int], target: int) -> int:
            # リストが空の場合
        if nums is None or len(nums) == 0:
            return -1
          
        # pivotのindex(=start)を見つける
        left, right = 0, len(nums) - 1
        while left < right:
            mid = (left + right) // 2
            if nums[mid] > nums[right]:
                left = mid + 1
            else:
                right = mid
        start = left
        left, right = 0, len(nums) - 1
        
        # 探索する部分リストの選択
        if nums[start] <= target <= nums[-1]:
            left = start
        else:
            right = start -1
        
        # targetが含まれる(であろう)部分リストへの純粋なバイナリサーチ
        while left <= right:
            mid = (left + right) // 2
            if nums[mid] == target:
                return mid
            if nums[left] <= target < nums[mid]:
                right = mid - 1
            else:
                left = mid + 1
        else:
            return -1

ブログ開設 🎉

CS修士大学院生が学んだ内容や論文についてゆるく書いていく予定です。
研究的な興味は、機械学習を用いた実社会の課題解決 といった応用部分です。

主に以下のトピックを書いていく予定です。

  • 論文紹介📃

    • 画像 / 映像認識
      自身の研究に深く関わる。特に実環境に近い状況下での実験設定に惹かれる…
    • クラウドソーシング関連
      自身の研究に深く関わる。Human-power を機械学習モデルに組み込み、安定した運用や早期運用の実現に興味がある。
    • その他ときめいたもの
      食わず嫌いせず、おもしろそうなものは読んでいく。教師なし、半教師ありなど楽しそう(ざっくり)。 自然言語処理は食わず嫌いしている。
  • 勉強✍

    • AD関連
      就職先に深く関わる。現時点では全く知識なし。機械学習との親和性が高いと感じており、その辺りを就職前に勉強できたら良さそう。
    • 確率統計
      学部2or3年の授業を取ったが、完全に忘れている。なんらかの証明も欲しくなったりするので、統計検定取得を目指すのも良さそう。
  • 競技系🏅

    • データ分析コンペ (kaggle, signate etc...)
      ガッツリ身を削って参加したことがないため、いつの日か身を削りたい。solusion眺めるのは趣味なので、そういう発信もできれば。
    • 競技プログラミング系 (atcoder etc...)
      最近粛々と参加しているatcoder。情報系で競技プログラミングを拒絶し続けてきたが、最近少しずつ楽しくなってきた気がする。
  • プログラミング💻

    • つまずいたところまとめたり系 (Python, Go etc...)
      スマートな書き方や、気づいたことを少しずつ発信できれば。ちなみに、Goは一切触ったことない。(けど興味ある)
    • プロダクト開発
      やはり本番で走るコードが欠けるようになりたいので、何かしら書いていきたい。
  • 趣味⚽
    色々とゆるりと。