生涯未熟

生涯未熟

プログラミングをちょこちょこと。

未来を感じるキーボード「Tap」を触ってみた

tapとは?

こんな感じのキーボードです。

はい、見て分かるように一般的なキーボードとは全く異なる形状をしています。

#どうやって使うの?

パッと見では全く使い方が分からないと思いますので、こちらのコンセプトムービーをご覧ください。

 

こういった近未来っぽい感じのキーボードなのですが、この動画のように指にtapを装着し、指を動かすだけでキー入力することが可能です。

どのように入力の振り分けをしているかというと、タップする時の指の組み合わせで振り分けています
例えば、「a」を入力したい場合は親指でタップ、「w」を入力したい場合には親指と中指と小指でタップします。

開封の儀

さて、それではよくありがちな開封の儀をやっていきます

まずは外装

結構長細いです

パコッとな

左がtap本体とケース

右が説明書と充電ケーブルになっています

充電する時は、こんな風にケースに充電ケーブルを挿す感じですね

あとは、設定用アプリや練習用アプリが用意されています

 

で、実際使ってみてどうなの?

プロモーションビデオを最初見たときは「こんなもん使えるようになるのかよ…」と不安に感じたが、何だかんだキーボードと同じで使えば使うほど手に馴染む感じがある。
最初のうちは入力に時間がかかるが、何日か使えば結構早く入力出来るようになる。

また、何処でも打鍵出来るという感覚は非常にユニーク。
いま、この文章も筆者の豊満な腹の上で書いている。
こういうタイプするところを選ばないことだって出来るのだ、そうtapならね。

さらに、tapを両手で扱うことも可能だ。
日本語を入力するのであれば両手装備にすれば、もしかすると効率がいいのかもしれない(金はかかるが…

あと面白いなと感じたのが、タップ入力からtapのオン・オフが出来るという点。
こんなことが出来ると思っていなかったので、これは非常に嬉しかったです。

けど問題点もあるんでしょ?

勿論あります。

一番の問題点としては、日本語入力との親和性の無さが挙げられます。
英語と違い、単純にタイプ数が多いため、短い文章を書くだけでもかなりの時間がかかる。
たしかに、キーボードのように手で入力出来る感覚は素晴らしいものがあるが、サッとフリック入力でいいのでは?となる場面が多い。

あとは、入力精度の問題がある。
どういうことかというと、固いものの上での入力なら、なかなかのタイプ精度を保ってくれるのだが、柔らかいものの上だとかなり精度は落ちる感じだ。
果たしてプロモーションビデオのように太ももの上で華麗に文章を打つことが出来るのか甚だ疑問である

またこれは些細なミスではあるのだが、マニュアルに書いていないタップ入力が存在したりした。

問題点はあるものの…

かなり気に入っています。

フリック入力ではノータイムで脊椎反射的に入力してしまい、脳みそを経由した正常なアウトプットがなかなか難しい感じがしています。
tapを使って入力する場合には、まず入力する段階で一度思考するターンが入るため、どうしても脳みそを経由しなければいけません。
これがミソで、思考するターンが入ると何故か文章が浮かんでくるのです。
寝転びながら好きな所でタイプすると、最高に文章が湧いてきます、良さみです。

あとがき

といえわけでいかがでしたでしょうか?
自分としては、久々にオッとなるガジェットでした。
暫くハードユーズしてみて、最適な利用法を模索していきたいと思います。

追記

書き忘れていたのですが、tapにはマウス機能があります。 この機能がまた秀逸で寝転びながらPCをいじるにもってこいです。 コーディング利用には厳しいものがありますが、ネットサーフィンとはかなり親和性が高いと感じています。

TebataというGoライブラリを作りました

最近色々とPubSubのプログラムをGoで書いていて、「こんなライブラリほしいなぁ」と思って生まれたのが、このTebataです。

github.com

どういうライブラリ?

Tebataは一言で言うと「シグナルハンドラ」です。

Subscriberを作っている時に、よくこういう処理を書いていました。

こういう感じの「シグナルを受け取ってホニャララな処理」を簡単に書くためのライブラリです。

既存ライブラリを調べる

作る前に既存ライブラリを調べたのですが、近いのがこちらのライブラリでした。

github.com

「おっ、これいいじゃん」と思ったものの、わざわざ構造体拵えて、TearDownを表す構造体メソッドを拵えて・・・ってのが面倒でした。
個人的に、実行したいfunctionを流し込んでそれを実行してくれる、くらいの感じが欲しかったのです。

あと、シグナルをキャッチしてTearDownが実行されたらプログラムが終了するのも汎用性が無くて勿体無い、という気持ちもありました。

で、作った

で、出来上がったのがTebataです。

使い方は簡単で、 tebata.New() の引数にキャッチしたいシグナルを指定して、

で、実行したいfunctionを流し込んでいきます。

これで、設定したシグナルを受け取った時にfunctionが動き出します。

書き直してみる

さて、最後に例として出したsubscriberをTebataで書き直してみます。

なんかあまり変わってない感じですが、もうちょっと複雑な処理だと効果が実感できるような気がします。

おわりに

というわけで、良かったら使ってみて下さい。
どんなご意見でも良いのでIssueやらPRやら送って頂けると嬉しいです。

Audibleは果たしてどこまで使えるのか?

AmazonにはAudibleと呼ばれるオーディオブックサービスがあり、以前見かけた時に気になっていたので今回どこまで使えるのか試してみました。

f:id:syossan:20180217130245p:plain

オーディオブックとは?

オーディオブックとは、書籍を朗読したコンテンツのことで、国内ではAudibleの他にFeBehontoなどの配信サービスが存在します。

スキマ時間を使って本を聴くことが出来、手が塞がる単純作業の合間を有効活用することが可能となります。

Audibleの使用感

早速、Audibleの使用感についてなのですが、主に以下が挙げられます。

  • 聴いていて違和感の無い朗読
  • 豊富な書籍ラインナップ、だが・・・
  • 声優さんもナレーション

聴いていて違和感の無い朗読

聴き始める前はあまり朗読の質に期待はしていなかったのですが、聴いてみると朗読家の皆さんのレベルが高く、
一部英語になっている箇所については別途外国の方が朗読していたり、特殊な形態の本(単語帳など)はそれぞれの特色に合わせてカスタマイズされていたりします。

また機能として、朗読スピードを0.75倍〜3倍まで調節することが出来ます。
ただ、人間が聴き取れる範囲は2倍が限界な感じがしていて、「2.5倍や3倍を聴き取れる人はいるのだろうか?」と思ったりしたのですが、一応そういったハイスピード朗読も存在します。

f:id:syossan:20180217133728j:plain:w300

豊富な書籍ラインナップ、だが・・・

Audibleにある書籍のラインナップですが、これがなかなか豊富にあります。

f:id:syossan:20180217133805j:plain:w300

特に小説は古いものから新しいものまで種々様々揃っている印象を受けました。

アニメ化もされた柳広司先生のジョーカー・ゲームがあったのですが、この本を渋い声で朗読されるとたまらないものがありました。
ちなみに、こちらは続編のダブル・ジョーカーや、パラダイス・ロスト、ラスト・ワルツもあります。

また、全体を眺めるとラノベや英語に関する書籍も豊富に存在します。

あとは、意外な所でアダルトカテゴリーが豊富です。
男性向け・女性向けともにコンテンツが用意しており、驚きました。

f:id:syossan:20180217133830j:plain:w300

ただし、問題点として一部カテゴリーが機能していないという面もあります。
一例として、「科学・テクノロジー」というカテゴリーがあるのですが、あまり書籍数が無いように見受けられます。

声優さんもナレーション

書籍を探していてビックリしたのですが、一部の本では声優さんがナレーションしているものもあります。
数は決して多くはないのですが、釘宮 理恵さんや大塚 明夫さんなどの大御所もナレーションしているものもあります。

f:id:syossan:20180217134036p:plain

声優さんの聞き慣れた声で体験するオーディオブックは、また格別なものがありますのでファンの方は一ヶ月のお試し期間中に試してみるのもいいかもしれません。

まとめ

このような感じの使用感になります。

書籍のラインナップに偏りがある感じがしますので、人によっては使えると言えるかもしれません。
英語学習者や、小説・ラノベ好きな方はAudibleがフィットする可能性は大のような気がします。

というわけで、以上ザッと試してみた感想でした。

【Go】Unixドメインソケットでのinterruptを使った終了処理

GoでUnixドメインソケットを組んでいる時に、掲題が疑問だったので調べてみました。

Why?

最初このようなListenerのコードを書いていました。

単純に net.Listen/tmp/connection.sock をlistenして、 listener.Accept でコネクションを待ち受けているという非常に簡単なコードです。

で、このプログラムを普通に動かしてSIGINT Signal で割り込みすると、本来削除されるべきsocketファイルが存在したままとなり、再度プログラムを動かすとエラーとなります。

これをどうにかしたかったのですが、 listener.Accept で待ち受けている状態で、どうやったら signal.Notify で受け取ったシグナルを元にプログラムを終了させるのか、パッと考えつきませんでした。

How

インターネットをふらついていると、以下のようなコード片を発見しました。

golang unix domain socket · GitHub

このコード片の server.go にお目当てのコードがありました。

どういうことかというと、メインのスレッドは listener.Accept で待ち受けておいて、goroutineで作った新しいスレッドでSIGINT Signalをキャッチして、プログラムを終了させるという流れです。

goroutineのスレッド側でSignalをキャッチする、というのがちょっと思いつきませんでした。