ぐるっとぐりっど

日曜プログラマがいろいろ試してみたことを、後の自分のためにまとめておく場所

Androidでマイナス検索を簡単に行うためのアプリ「検索の達人」をリリースしました

はじめに

androidでレシピ検索するときに、某アマチュア投稿サイトばっかり引っかかってうっとうしかったので、マイナス検索をしたかったんだけれども、androidのキーボードで、マイナス検索しようとすると、キーボードの種類を切り替えたり、記号モードに切り替えたりと結構面倒だったので、検索を簡単に行えるようにアプリを作った。

使い方

検索したいキーワード + 除外したいキーワードを「除外ワード」に入力するだけの簡単設定。改行区切りで複数の除外キーワードを設定できる。

f:id:grugrut:20160228144823p:plain

今後

本当は、site検索にも対応させたり、いろいろやろうと思って、大それた名前を付けて開発してたんだけれども、詰め込みすぎるとかえって使いにくいと思い、スモールスタートで行くことにした。site検索は、PCだと時々使うけど、スマホでURLを入力することがそもそも厄介だよなあと思う。androidなら共有でURLが渡せるから、それを使って、site検索もできるようにしてみようかしらん。

以下蛇足

作ろう作ろうと思っていて、何年もほったらかしになってしまっていたので、ついに作れて感無量である。やっぱり個人開発の場合、モチベーションの維持が何よりも大事なので、コーディングが24時間程度で終わるぐらいでないと、途中で飽きてしまう。

最初は、複数の除外キーワードをグルーピングしてプリセットとして呼び出せるようにしようと設計してたんだけれど、説明が書けない→他人には使い方がわからない、ということだよな、と思いシンプルな設計に変更した。

公開するのに、apkファイルだけ作ればいいのかと思ってガシガシ作り、完成したと安堵したら、公開するには、ヘッダ用の画像とスクリーンショットが少なくとも2枚必要と言われて、それを作るのが何よりも面倒だった。

実際作ってみて、ページの作り方だったり、画面レイアウトだったり、いろいろと壊滅的なセンスに呆然としてしまったので、その辺を鍛えつつ、ほかのアイディアも昇華させていきたいね。

emacsのキーバインドが表示されるwhich-keyを導入した

はじめに

この前、メタキープラス何かで使えるキーバインドを調べた。

grugrut.hatenablog.jp

しかし、複数のキーを使うキーバインド(C-x C-cとか)を含めると、キーバインドは無数にある。ためしにscratchバッファで、C-h bして出てきたバッファの行数をカウントしてみると、1282行あった。空白行等キーバインドではない行があるにしても、軽く1000はキーバインドが定義されているだろう。メジャーモードによってはもっともっと多いはず。

そこで便利なマイナーモードにguide-keyがある。キーバインドをもっと覚えるためにカスタマイズしないとな、と思って調べていたら、るびきちさんのところで、which-keyというのが紹介されていたので導入してみた。

emacs which-key.el : 【guide-key改】次のキー操作をよりわかりやすく教えてくれるぞ! | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット | るびきち「日刊Emacs」

which-keyとは

下記に配置されている。package.elで簡単に導入できる。

github.com

which-key started as a rewrite of guide-key-mode, but the feature sets have diverged to a certain extent.

ということなので、guide-keyをもとに作られたものらしい。

ひとまず使うなら、package.elでゲットしたあと、

(require 'which-key)
(which-key-mode)

だけで簡単に使える。

guide-keyとの違い

表示するキーバインドのプリフィックスを指定しなくてよい

guide-keyだと、

(require 'guide-key)
(setq guide-key/guide-key-sequence '("C-c" "C-z" "C-x"))
(guide-key-mode 1)

のように、どのプリフィックスの場合にキーバインドを表示するか指定しておく必要があったけど、which-keyは不要。デフォルトですべてのキーバインドが表示される。例えば、C-xを入力したあと、1秒程度入力しないでいると、下のスクリーンショットのように、ポップアップしてキーバインドが表示される。

f:id:grugrut:20160211113330p:plain

表示方法も、Windowsの分割(デフォルト設定、デフォルトでは上下に分割して、下側に表示されるけれど、設定すれば左右に分割することも可能)、ミニバッファ、新規フレーム、ユーザカスタムの4種類から選ぶことができる。ミニバッファと新規フレームはちょっと触ってみた限り使いにくかったので、最初はデフォルト設定でよいのではないかと。カスタムで設定すれば、auto-complete/companyのように表示することもできるようだ。

複数ページにまたがった表示

例えばC-xから始まるキーバインドなんてめちゃくちゃ多い。guide-keyの説明にも収まらないから絞って設定することをお勧めされている。では、全部表示してしまうwhich-keyはどうしているかというと、複数ページに分けて表示するというある意味暴挙に出ている。上のスクリーンショットでも、(1 of 5)と5ページ中の1ページ目を表示していることがわかる。デフォルトでは、C-hでメニューが表示されて次ページを表示することができる。ただこれはちょっと問題点が個人的にはある。

which-keyの使いにくいところ、今後調べたいところ

複数ページにまたがった場合のページ送りに、C-hを使うんだけれど、C-hは<DEL>に置き換えている人が多いと思う。そうすると、C-hで次のページって表示されているので、C-hを押すと、<DEL>が入力されたことになってしまう。

ためしに、C-xで動作を試していたので、しばしば C-x <DEL> (backward-kill-sentense)が発動してしまい、設定消失、僕呆然。とすることがしばしばあった。

また、C-hだけでページ送りができず、C-h nとしないと次のページが見れない。僕の場合は<F1> nとなる。これはちょっとめんどくさい。

README.mdを見る限り、当たり前だけどこの辺はカスタマイズできそう(which-key-use-C-h-for-pagingやらその辺いじってみたけど、期待する動作とならず)。きちんと設定すれば便利に使えそうなのでもうちょっと調べてみよう。

不良emacsユーザが改めてメタキーを使うキーバインディングを確認した

はじめに

不良といっても、タバコふかしてパラリラパラリラではない。emacsを使うようになってから10年近く立つのに、最近M-sの使い方を知った。これまでメタキーを使う機会といえばM-xM-%M-<M->のみ。あまりにも情けない。これを不良と言わずなんと言おうか(不可とは言わないのが自分への甘えである)。

キーバインドの表示

現在のモードでのキーバインディングを表示するには、describe-bindingsが使える。キーバインド<f1> bもしくはC-h bだ。helmを導入しているのであればhelm-descbindsを使った方が便利だろう。

キーバインドの調査

今回は、M-○とメタキー+何かで使えるものを調べてみた。
なお、scratchバッファで調べた。結構メジャーモードで違う気がするので、本当はよく使うモード(僕の場合はorg-mode)で調べた方が良いかも。そもそもこういうのは既に他の人もまとめてると思うけど、自分でわからないところを確認しながらの方が覚えられるので。

キーバインド 関数 説明
M-1 .. M-9 digit-argument C-u Nの代わり
M-SPC just-one-space カーソルの位置に複数のスペースがある場合に、全部消して一つのスペースに変えてくれるらしい。半角スペースおよびタブ文字(C-q C-i)が反応すること。全角スペースは反応しないことは確認できた
M-! shell-command シェルのコマンドを実行
M-$ ispell-word ispellでスペルチェックができるようだ(未確認)
M-% query-replace 置換
M-& async-shell-command シェルのコマンド実行を非同期で
M-' abbrev-prefix-mark 動的展開用のコマンドっぽい
M-( insert-parentheses リージョンを()でかこむ
M-) move-past-close-and-reindent 次の ) に移動し、その後ろで改行+インデント
M-* pop-tag-mark etags系のコマンドっぽい。詳細不明
M-, tags-loop-continue etags系のコマンドっぽい。詳細不明
M-- negative-argument C-u - Nの代わり
M-. find-tag etags系のコマンドっぽい。詳細不明
M-/ dabbrev-expand 動的展開の実行
M-: eval-expression ミニバッファにLisp式を求め、それを実行する。C-x C-eのミニバッファ版
M-; comment-dwim 賢いコメント化するやつ
M-< beginning-of-buffer バッファの先頭へ
M-= count-words-region ワードカウント
M-> end-of-buffer バッファの末尾へ
M-@ mark-word カーソル直後の単語をリージョン選択するらしい。実行してみたけどうまく動かなかった
M-\ delete-horizontal-space 連続するスペースを全削除。M-SPCのスペース残さない版かな
M-^ delete-indentation その行のインデント化を削除して、前の行と結合
M-` tmm-menubar ミニバッファでメニューバーを操作できる
M-a backward-sentence 文の先頭へ
M-b backward-word 前の単語へ
M-c seq-capitalize-backward-word 単語の先頭を大文字に
M-d kill-word 単語の終わりまで削除
M-e forward-sentence 文の末尾へ
M-f forward-word 次の単語へ
M-g Prefix Command 行移動関係のプリフィックス
M-h mark-paragraph パラグラフをリージョン選択
M-i tab-to-tab-stop タブを入れる
M-j indent-new-comment-line コメント中で実行すると、改行してコメント化してくれる。(C-jだとただの改行)
M-k kill-sentence 文末まで削除
M-l seq-downcase-backward-word 単語の先頭を小文字に
M-m back-to-indentation インデント以外の行の先頭に移動
M-o facemenu-keymap face系のプリフィックス、行の整形もあるのかな
M-q fill-paragraph 段落を整形してくれる
M-r move-to-window-line-top-bottom 今表示されているウィンドウの行頭・中間・末尾に順番に移動する(バッファではない)
M-s Prefix Command 検索系のプリフィックス
M-t transpose-words 単語を入れ替える(C-tの単語版)
M-u seq-upcase-backward-word 単語を大文字化する(M-cが1文字目だけ大文字かするのに対し、M-uはすべて変える
M-v scroll-down-command 上にスクロール(C-vの反対)
M-w kill-ring-save リージョンのコピー
M-x helm-M-x emacsのコマンド実行(helm入れているので、helm-M-xになってるけど)
M-y yank-pop 履歴をたどってyankするものを選択できる
M-z zap-to-char 指定した文字まで削除する
M-{ backward-paragraph パラグラフの先頭まで移動
M-| shell-command-on-region コマンド実行時にリージョンを標準入力として渡せる
M-} forward-paragraph 次のパラグラフまで移動
M-~ not-modified バッファを修正していないと設定できる。何の役に立つのかよくわからない
M-DEL backward-kill-word 単語の先頭まで削除

まとめ

一通り調べると、メタキーを使うコマンドにもいろいろと便利なものが設定されていることがわかった。ただ、日本語だと、単語系や文、パラグラフがうまく解析できるのかよくわからないから、使いどころが難しいんじゃないかと思う。今回調べた中だと、M-yは使いこなすと便利だと思った。マウスでドラッグするだけで、コピーする設定にしているのだけれど、うっかりコピー先をクリックしたときもドラッグしてしまい、コピーしたものをヤンクできない事故が多発しているけど、M-yを使えば、履歴をたどってもともとコピーしたかったものをヤンクできるので。

不良emacsユーザ脱却のため、ほかのコマンドについても調べていこう。

追記(2016-02-10)

M-yはヤンクした履歴をたどれるだけだったから、ヤンクする前に上書きしてしまうと使えなかった。残念

さらば、evernote clearly

2015年9月30日に終了したEvernote foodに引き続き、またも使っていたevernoteファミリーに別れを告げるときが来てしまった。2016年1月22日に、evernote for pebble、evernote clearly、skitchのサポートを終了する、と案内がきたのだ。世間的にはskitchが有名だと思うけど、僕はEvernote clearlyだけは使っていた。webサービス経由で登録した際の受付番号のような、どうせ見返さないけど念のためとっておきたいページを保存しておくのには便利だった。 

最近ホッテントリに人はevernoteの機能のうち5%しか使ってないみたいなのもあったし、ますます削減されていくことだろう(そもそも、もう知ってるファミリー残ってない)。
 
本体機能で十分だから消すって言い分だけど、本体の使いにくさにますますevernoteを敬遠することになりそうだ。
 

2015年の振り返りと最近の興味

はじめに

帰省中の新幹線車内暇なので、2年ぶり2回目の振り返り記事。何回投稿したとかどうでもいいので、技術的な話だけ。
 

2015の個人的トピック

Emacs

5年ほど愛用していたhowmからorg-modeに乗り換えた。それにちなんでadvent calendarに参加したりと飛躍の年だったと思う。欲を言えばもっとコメントをもらって、より良いアイディアなどを学びたい。引き続き与えよさらば授からんの精神で。
 

Elasticsearch,fluentd,kibana

いわゆるefkスタック。今のところログ収集しかしてないけど収集したデータを活用するところまでいきたい
 

今後のトピック

Electron

Javascriptでデスクトップアプリが書けるとはいい時代になったものだ。というか私のJavascript界は「prototype.js vs jquery」の時代で止まってるので、色々と時代遅れ感ある。具体的な実装というよりもJavascriptの構文はまだまだ生き残りそうなので、ここらで押さえておいた方が良さそうだ。
 

終わりに

時々エンジニアは余暇(業務外)も勉強すべきか論が出てくるけど、「仕事で必要なことは業務中に勉強すればいいじゃん。業務外はもっと別の興味あることに取り組もうよ」派なので、その精神で続けていきたい。

スマートフォンでもorg-modeとともに

この記事はEmacs Advent Calendar 2015の19日目の記事です。

18日目の記事は、nasa9084さんによる「org-revealで細かい設定をしたい」でした。

はじめに

org-modeを使っていると当然感じるのが、出かけた先でもTODOリストをチェックしたい、メモを一元管理したい、ということです。
一時期はevernoteと併用とか、スマホのメモ機能とか、いろいろ試しては見たんですが、やはり一か所にまとめておかないとのちのち面倒なんですよね。なかなかマージしようという気にならないし*1

そこで、今回は私が使っているスマホでorg-modeのメモを共有する方法についてご紹介します。

ご連絡

私がandroidユーザで、iOSのデバイスをもっていないので、ほとんどandroidが対象となります。iPhoneユーザの方ごめんなさい!

スマートフォンでもorg-mode

androidアプリでorg-modeを扱える(PCとの同期もできる)ものは、MobileOrgとOrgzlyがあります。どちらも一長一短あるので簡単に使ってみた感想や長所短所と感じているところをご紹介します。

MobileOrg

こちらはiOSandroidと両方のアプリがあります。というかiOS実装のほうが本家で、それを移植したのがandroid版だったはず。

大きな特徴としては、PCのEmacsで編集している.orgなファイルをそのままスマホでも読み書きするのではなく、別の環境に一旦配置したファイル経由でやり取りする、というところにあります。私もはじめはMobileOrgを使っていてなかなか良いなとは思っていたんですが、この別のファイル経由でというところで同期によくつまづいてしまい、後述するOrgzlyに移ってしまいました。機能としてはMobileOrgのほうに軍配が挙がるのですが。。。

長所
  • org-modeのマニュアル本家に説明が書いてある!

マニュアルだけでなくて、本家に必要なメソッドが取り込まれているというのは今後のことを考えると安心できる気がします。昔からあるので困ったときにも比較的知っている人を見つけやすいかも*2

  • 同期手段が豊富

定番のDropboxのほか、WebDAV、SDカード、Ubuntu One、SSHと様々な手段で同期ができます。宗教上やその他の理由でDropboxにはデータを置きたくない!という人でも自鯖WebDAVとかSSH経由で利用できるのはきっと魅力的。私はDropbox経由で同期してました。

  • org-modeの書式にほぼ対応

org-modeだと例えばタグをつけることができますが、そのあたりの書式に完璧に対応しているのは心強いです。もちろんメモを見るときだけでなくて、メモを書くときにタグを設定することも可能です。タグはEmacsのほうで設定したタグがプルダウンで表示されるので、選ぶだけで設定できるのがうれしいところ。

  • その他

設定を見る限りだと、ScheduleやDeadlineの情報を、スマホのカレンダーにも反映できそう(設定したことないのでよくわかりません)。

短所
  • 同期が面倒

MobileOrgの場合、PCのEmacsで、M-x org-mobile-push、MobileOrg側でsyncしないと反映されなません。MobileOrgで編集した内容は、Emacsでorg-mobile-pullしないと反映されない、とかorg-mobile-pullする前にMobileOrgのsyncをしてしまうとMobileOrgで編集していた内容が闇に葬られてしまう、とか、ちょっと不親切かな、と思います*3

  • メモにゴミが付与されてしまう

MobileOrgだと直接.orgファイルを編集するのではなく、別のファイルを用意して、それ経由でやりとりするという都合上(?)、元の.orgファイルにIDやら更新日時やらの情報がタグとして勝手に追加されてしまいます。そこまでたいしたことではないけれども、気になる人は気になるかも。

Orgzly

こちらは残念ながらAndroid版だけとなります(公式FAQにもiOSは今のところ予定はない、と書かれています)。MobileOrgに比べると機能は少ないのですが、一通りの機能はそろっているかな、と思います。詳しくは以下の公式サイトのドキュメントを。
Orgzly | Notes & To-Do Lists

長所
  • 同期が簡単

MobileOrgのように別ファイルを経由しないので、Emacsで読み書きしているorgファイルをDropbox上に配置しておけば、Dropboxが同期作業はしてくれます。なお、OrgzlyからDropboxへの同期は、Orgzlyのsyncボタンを押した際に行われます。EmacsとOrgzly両方で編集した結果、コンフリクトしてしまった場合には、DropboxのデータかOrgzlyのデータかどちらを利用するか選ぶことができます(マージはできないので、どちらかは捨てることになってしまいます)。

  • メモの検索機能が充実

まだ使いこなせていないのですが、スケジュールが○日以内とか、このタグのものとか検索機能が充実しているらしいです。
デフォルトで、こんな感じのorg-agendaチックな検索が可能です。

f:id:grugrut:20151219120704p:plain

短所
  • ノードの折り畳みができない

本文の表示非表示は設定で切り替えができるのですが、見出しの折り畳みができないので、長いファイルだと見出しだけはすべて表示されてしまいます。MobileOrgだと見出しの折り畳みもできたのでそこができるようになるとうれしい。

f:id:grugrut:20151219121034p:plain

こんな感じで、見出しが全部表示されてしまう。

最後に

今はorg-modeにしろOrgzlyにしろ、人が作ったツール、設定を使っているだけなので、自分が改良していけるようにしたい。そのためにはもっともっと使って改善ポイントを見つけていかなくては。


明日20日目は、kiwanamiさんによる「去年の続きか、RPCの紹介など」の予定とのこと。こちらも楽しみですね。

*1:Evernoteなんて特にアプリが重くてメモしたものを見返したためしがない

*2:もともとhowmユーザだった私が1年前にorg-modeに切り替えたのもそんな理由が大きかったりします。 grugrut.hatenablog.jp

*3:1度目は自分のためのsync、2度目はシステムのためのsync、そして3度目は神のためのsyncはここでは通用しない

続・xperia z3 compactが壊れた

の続き

前回までのあらすじ

偶然にも、愛用のSO-02GことXperia Z3 compactのシャッターボタンが壊れてしまった俺たちは、このままではいけないとドコモショップに向かったのだった。

ドコモショップへ来店

近所のドコモショップに行って白ロムというかMVNOなので自費修理になると思うけど、MVNOは修理出すならその間の代替機は自分で用意しないといけないし、修理出すか決断するために、修理費見積もりたい、と正直に伝えたところ、メーカー保証の範囲内なので、無償で治せますよー、とのことだった。僥倖っ・・・・!

機体に傷はついてないし、組み立ての時にちょっとずれやすくなったのかもねー、とのことだった。ありがたし!

ただ問題はMVNOなので、修理中の代替機は自分で用意しないといけないのと、メーカー修理だすとソフトリセットかけられちゃうところ。で、戻ってきたらまた設定しなおしか、と思うとちょっと腰が引けてしまう。

代替機だったら、もうちょっとおもちゃみたいなやつでいいよなーとは思うけど、なんかいいのあるのかな

とりあえずもうちょっと壊れてから修理に出すことにした。(外身に傷つけると無償修理ではなくなってしまうので大事に使おう)

まとめ

物理的な故障であっても無償で修理してもらえるかもしれないので、保証期間内であればダメ元でも聞きにいってみたほうがよいね。信じるか信じないかはあなた次第。。。。