7月2日、1時間の間に打たれた2つのタグ。1.7、そして1.8です。ログの誤りではありません。 1.7が機能のリリース — リモートデスクトップが「見るもの」をやめて、 実際に作業できる場所になったリリース — で、1.8は1.7にひとつ足したものです。 1.7が送り始めたばかりの音声の下に、本物のオーディオコーデックを敷きました。 Mac側では、それぞれSharkTTY Desk 0.7.0と0.8.0が対になります。
ちゃんとキーボードであるキーボード
iOSのキーボードでiPadからMacを操作するのは、忍耐の訓練のようなものです。 Escapeがありません。Controlもありません。ファンクションキーもありません。 macOSが押していることを前提にするキーは、iOSにはひとつも見当たりません。
そこで1.7は自前のキーボードを育てました。最初はiPadのリモートデスクトップに浮かぶ QWERTYのパネルでしたが、十数回のコミットを経て、誰が見てもキーボードと分かるものになりました。 記号、TabとReturn。⌃、⌥、⌘は本物の修飾キーとして、幅の広いShiftとともに。 2行にまたがるISO風のL字型Returnは、親指が実際にどこへ着地するかを確かめたうえで、 ホーム段と最下段へ下ろし、2セル幅のShiftとfnキーを添えました。
ただ「ある」だけでなく実際に使えるものにしたのは、2つの設定です。サイズを変えられること、 そして不透明度をスライダーで決められること — 向こう側のデスクトップが透けるのが 嫌なら、完全な不透明まで上げられます。iPadの下3分の1を覆うキーボードは、その下に何があるか 見えるかどうかでまったく別物になります。そして、競合する2つのボタンの代わりに、 モード選択の付いたキーボードボタンがひとつになりました。フローティングのパネルか、 ショートカットのツールバーを備えたシステムキーボードかを選べます。
指で1ピクセルを指す
指先はだいたい、macOSのウインドウにある3つの信号機ボタン全体を覆ってしまいます。 仮想マウスがあるのはこの算数のためで、1.7はそこにルーペを足しました — 指の下の領域をMacのネイティブ解像度で見せるルーペです。おかげでチェックボックスの 近くではなく、チェックボックスそのものに着地できます。ポインタもルーペも、単一の ディスプレイの中だけでなく、集約された画面レイアウト全体で働くように広げました。
この領域の修正をひとつ、はっきり書いておく価値があります。使ってみて初めて出てくる類の ものだからです。ルーペのタイルは本体の映像とは別のピクセルの流れで、わずかに遅れて届きます。 つまりカーソルが動いているあいだ、拡大された映像はカーソルがいた場所を映しています。 古いままのルーペを見せるくらいなら、何も見せない方がましです。そこで今は、カーソルが動いているあいだは 隠れ、落ち着いたところで戻ってきます。
並べ替えられる、1枚の絵としての画面
1.6はすべてのディスプレイを画面に出しました。1.7はそれを並べ替えられるようにしました。 画面をまとめるドロップダウンと、移動・リサイズできる表示領域です。この最後の部分には ハンドルが必要でした。理由はこうです。同じドラッグの動作が、意図によって2つの別のことを 意味します — この映像を動かすのか、それとも映像の中でMacのポインタを動かすのか。 どちらなのかを推測すると、どちらに転んでも体験が悪くなります。そこで移動とリサイズは ハンドル付きの明示的な調整モードの内側に置き、ピンチによる拡大縮小もそこだけに限りました。
右クリックにも、小さいながら同じ問題がありました。場所によってやり方が違っていたのです。 1.7では、タイル表示でもフォーカス表示でも、どこでも2本指タップに統一しました。 単一ディスプレイの表示も、上部バーと下端から内側に寄せたので、映像がアプリ自身の 枠に隠れることはなくなりました。
決めつけではなく、ネゴシエーションされる画質
画質は今や会話です。Macのエージェントが自分にエンコードできる段階を提示し、ビューアが ひとつを選んで描画します。そして上限 — xHD、Macのネイティブピクセル — は 端末側から要求できます。これは1.6で入ったケイパビリティビットの仕組みの上に乗っており、 新しいアプリが古いエージェントに何かを求めたとき、壊れた映像ではなく明確な「できません」が 返ってくるのはそのおかげです。
双方向の音
1.7はMacから端末へのシステム音声と、その逆向きのマイクのアップリンクを追加しました。 これでiPhoneが、どこか別の場所にあるMacのマイクになれます。両方そろって初めて、 Macにかかってきた通話が、実際に出られる通話になります。
そこで1.8の出番です。その時点の音声はデータチャンネル上の生のPCMでした。正しくはありますが、 音に必要な帯域よりはるかに多くを使います。1.8はOpusを追加しました — プロトコルに コーデックの語彙と専用のケイパビリティビットを設け、libopus 1.5.2を安全なラッパー付きで ビルドに取り込み、ビューア側のデコードをFFI経由でつなぎました。大事なのはケイパビリティ ビットの側です。エージェントとビューアの両方がOpusを話せない場合は、失敗する代わりに 共通して話せるものへ戻ります。この経路の残り — 任意のPCMを20 msのOpusフレームに 変えるバッファ付きエンコーダと、ビューアでの再生 — は次のビルドで仕上がりました。
その一方、ターミナルでは
1.7では注目の大半をリモートデスクトップが持っていきましたが、ターミナルにも ありがたいものが3つ入りました。
- キーボード補助バーからそのままファイルをアップロード。設定ファイルが、ファイルマネージャを経由する回り道なしにサーバーへ届きます。
- キーボードを隠すボタン。画面のほとんどがキーボードのスマートフォンで出力を読むために。
- マウスレポートの切り替え。オンにすると、接続したトラックパッドやマウスのクリックとドラッグが、それを理解するプログラムへ送られます — vim、tmux、htop、less。オフにすると、ポインタは代わりにテキストを選択します。どちらの挙動も正しく、今どちらが欲しいかを知っているのはあなただけです。
フローティングキーボードは、ターミナル側でも記号・Tab・Returnを備えるようになり、 「それっぽい配列」ではなく標準的なUSキーボードに合わせて並べ直されました — 次のビルドで届く6種類の本物の配列に向けた地ならしです。
他の言語で読む: English · 中文 · 日本語 · Español · Français · 한국어 · Українська
アプリそのものについてはSharkTTY ガイド、利用者向けの短い更新情報は新着情報をご覧ください。ご連絡はフィードバックボードがいちばん早い方法です。開発ブログへ戻る。