ミニバッファにElispの対応する括弧を表示

はじめに

Elispを書いているときに、括弧が多すぎて何に対応しているか分からなくなることがありました。
そのため、閉じ括弧の上にカーソルを置くと対応する括弧の関数名がミニバッファに表示する関数を作りました。
ruby-modeの「end」の上にカーソルを追いたときに対応するdefun部分がミニバッファに表示されていた機能を真似て作ってみました。


利用方法

Gistからコードをコピペして評価したら利用できます。
デフォルトで起動するので、止めるときには以下の関数を使います。
M-x toggle-display-couple-parenthesis-process

表示タイプには、対応する括弧の「関数表示」と「行表示」があります。
デフォルトでは、関数名の表示にしています。以下の関数で切り替えすることができます。

関数表示

関数表示 M-x switch-display-couple-parenthesis-token

行表示

行表示 M-x switch-display-couple-parenthesis-line

課題

現状では、以下のような問題があります。
根本的な実装方法を間違えていたり、もっと良い方法があると思います。

  • コメントや文字列中に"("や")"があると正しく認識できない。
  • ruby-modeの関数と違って、行番号が表示できない。
  • 行表示で)があると表示を打ち切る
  • 行表示でシンタックスハイライトがされない

emacs-lisp-mode中に")"を入力したときの挙動を理解できれば・・・

おわりに

まだ機能的に足りない部分がありながらも暫定版として公開しました。
emacs-lisp-modeでは閉じ括弧を入力したときに、対応する開き括弧が画面外にあると関数が表示される機能があります。その部分の処理を理解できれば、もっと綺麗な実装になるのではないかと考えています。
ご指摘がありましたら、よろしくお願いします。

Elispで正規表現プログラムの効率的な開発の方法

はじめに

re-search-forwardやre-search-backwardを使って開発をしていると
開発正規表現にマッチするかどうかを確認するのに非常に難儀していました。
最近、以下の2つの方法を実践して非常に効率があがったので、メモを残しておきます。

正規表現に色を付けて確認する

M-x re-builder

マッチした文字の色が付くのに加えて、
\\(と\\)で囲まれてる部分には、それぞれ該当する

色を付けています。

バッファに対してS式を評価する

M-: (eval-expression)

M-x (execute-extended-command)だとinteractiveな関数を作らないと動作を試せないですが、M-: (eval-expression)を使うとS式を評価して動作確認することができます。
re-search-forwardなどのバッファ内で移動する関数の挙動を確認するのが楽になります。

M-: (eval-expression)することで、ミニバッファ部分にS式を入力できる状態になります。

入力し終わったらRET

結果が返ってくる式の場合は、通常の評価と同様に結果がミニバッファに表示できます。

複数行に渡るS式も入力することができますが、ミニバッファではemacs-lisp-modeが有効になってないです。
別のバッファで作成したものを貼り付けて実行すればよいかと思います。

Elispでの文字列操作方法

ここを常に確認しながら進めています。
Emacs Lisp の文字列操作まとめ - はてなグループEmacs@kiwanami - Emacsグループ

基本的な文字列操作の方法

基本的な文字列操作の方法は、"Ruby との文字列操作対応表"の章にあります。
Rubyで行う処理と比較しながらの説明があります。非常に分かりやすいです。

複雑な文字列処理の方法

複雑な文字列処理の方法は、"文字列内の複雑な検索、置換など"の章に書かれています。
(while (re-search-forward REGEXP nil t))での処理は複雑な処理に役立ちます。

おわりに

Elispを書きはじめたばかりなので、間違いもあるかと思いますので、ご指摘などありましたらよろしくおねがいします。

PHPで複数文字からなる区切り記号から最長と最短を取得する

はじめに

複数文字からなる区切り文字から最短と切り出す場合に少しだけつまったので、最長と最短の場合の正規表現を記録しておきます。

続きを読む

関西 Emacs#8に参加/発表してきました。

関西Emacsへの思い

関西Emacsは、初回開催から参加していて、一番楽しみにしている分野の勉強会であり、多くの人と出会えた思い入れもあります。今までは参加者としての聴講だけだったのですが、今回は自分の作っている拡張について少しだけ発表してきました。
http://atnd.org/events/44155
http://peccu.sytes.net/ke/

自分の発表

制作中の拡張である「get-reference(仮)」の紹介(ご意見求め)してきました。この拡張は、関数や変数の定義箇所に付けられたコメントを取得するものです。制作中のものだったため、利用するケースを考えてのアドバイスだったり、実装方法に対するアドバイスを頂くことができました。

本拡張は、コメントとして説明があるが、関数名や変数名だけでは利用方法が分からないので、関数のコメントを頻繁に見る状況を想定しています。現状では、gtagsを持ちいて、定義元までコメントを見に行くことが多いので、もっと手軽に関数の説明を見ることが目的です。

他の発表

Emacsでテストする(shibayu36さん)

http://shibayu36.hatenablog.com/entry/2013/10/26/220956

Emacsでテストする方法の紹介でした。mechairoiさんの拡張を、改良して使っているとのことでした。会場では、Emacsで行うときのテストの速度の問題にも議論を行なっていました。自分は、Emacs上でテストをせず、ターミナルから行っていたので、試してみたいと思います。

ac-mozc(igjitさん)

http://www.slideshare.net/igjit/acmozc
http://www.youtube.com/watch?v=O3XpDx8iCKo

作成したauto-completeとmozcを使ったモードレス変換ac-mozcの紹介でした。京都人はLispエイリアンになりたいというジョーク?を挟みながら、ac-mozcの使い方についてデモを行っていました。モードレスのため、1つだけ特殊な動きがあるとのことでしたが、スムーズに使えていました。

自分は、mozcが出たころに使い勝手にあまり馴染めず、SKKに移ってしまったので、Emacs上のIMについて検討中であれば使ってみるべきものではないかと思います。面白そうなので自分も、
試しに使ってみようと思います。

Recent Emacs Work(syohexさん)

http://d.hatena.ne.jp/syohex/20131026/1382801432

Recent Emacs Workということで、syohexさんの最近のEmacs活動についての紹介がありました。go-direxやanzuなどをデモを行いながら作成の経緯の紹介を行っていました。syohexさんは、自分の使うものでなくても作ったり、プルリクを送るそうです。相当ELispを書いているのではないしょうか。

紹介されているものは、anzuやdirexなど知らない拡張ばかりだったので、自分の作業効率を上げられるものは、取り込んでいきたいと思います。最近、やっと他の拡張のELispを読むようになったので、それも活かして良いコードを書けるよう学びたいと思います。

制作中の拡張の紹介(三流)

時間に余裕があるとのことだったので、制作中の拡張に関して紹介させていただきました。ユーザとしての意見と、実装のアドバイスを頂けて大変励みになりました。

Emacsを高速起動せよ #kansaiemacs(なおたさん)

http://d.hatena.ne.jp/meech/20131030/1383109296

新しいカーネルの機能を使ったEmacsの高速起動の紹介でした。Elispを読み込んだあとのプロセスの状態をディスクにダンプしておいて、ダンプデータからプロセスを再開するのらしいです。X上で動くEmacsは、ダンプできないようです。Emacs以外も、高速起動できるようです。

使いこなせると、Emacsの起動時間×起動回数分の仕事時間が短縮できるのではないでしょうか。あまり低レイヤーに詳しくないので、試すことも無いと思いますが、見ている分には楽しいです。

漢直の話(kozo2さん)

漢直の話として、T-Codeの紹介と練習法についてのお話でした。関西Emacs#1でT-Codeを教えてもらってから使うようになったとのことで、自分の名前の入力を見せていました。徐々に使えるようにする方法もあるとのことで、練習法についても紹介していました。

自分は、覚えるのが苦手なので、キーを覚えないといけないT-Codeは向いてないと思い、ずっと挑戦していません。自分も、関西Emacs#1で教えてもらったSKKを使うようになったので、
これを使い続けていこうと思います。

懇親会

懇親会は、1次会をはてな社内、2次会を飲み屋で行いました。1、2次会共、としぁさんと話をしていた時間が一番長かったように思います。社内の周りの考え方と、自分の考え方に近いものがあり、社内での振舞い方やチームの導き方?などアドバイスしていただきました。
2次会は、「gitのステータスをプロンプト出すのは、リポジトリが大きくなるまでだよねー」など、gitの扱いに関して話していたり、スパコンFortranについてお話を聞いたりしました。
2次会は、ぺっくさんと、なおたさんが、終電を逃して帰れなくなるほど盛り上がり、大盛況で幕を閉じました。

関東Emacsについての予告?

関西Emacsの場で関東Emacsの話題が出ていたので開催検討中です。
次の関西Emacsまでに開催することを目標に会場確保から動いています。

ちょっとセキュアな「思い出せる」パスワード

はじめに

同じパスワード使うのは危険だからやめましょうっ事を書いている
ちょっとセキュアな「いつもの」パスワード - ぼくはまちちゃん!
題材に知人と話をしていたところ、もう少し手間をかけて
思い出せるパスワードが考えないかって話になりました。
そこで挙がった、いくつかアイデアをまとめます。

『ちょっとセキュアな「いつもの」パスワード』について

同じパスワード使いまわすのは危険なので、いつものパスワードを、
ちょっとセキュアにして使いましょうって話。
8文字のパスワードを用意して、サイト名の頭文字を1文字入れたり、
アルファベットをずらすと覚えていられるし、手軽にセキュアにできますよってありました。

もっとセキュアにする方法

最初に用意する8文字のパスワードを「W1kze8Gp」として説明していきます。

使う文字数を増やす

ドメイン名から数文字をパスワードに組み込むとします。
twitterから文字を使うなら
W1twkze8Gp
W1twi8Gp
などにします。
記憶する負担もあまり大きくならないでしょう。

ドメインから使う文字を選ぶ

毎回先頭の文字列を使うと分かりやすので、
使う文字を変更します。
twitterなら頭文字のtでなく、2文字目のwや3文字目のiなど。
覚えやすく、負担も少ないと思います。

文字を逆順にずらす

人が見るときには、順方向にずらすよりも、逆方向にずらした方が分かりにくくなります。
効果は薄いかもしれませんが、順方向よりも分かりにくなるかもしれません。
もちろん、自分がパスワードを思いだすときにも影響が大きいかも。

t→u→v
t→s→r

ずらす文字数を変える(2文字以上変更する場合)

パスワードが漏れたときには、文字を文字をずらして攻撃されることがあるそうです。
そのため、変更する文字数を統一しない方法をあげます。
1文字目は2文字ずらして、2文字目は3文字ずらすと以下のようになります。

twitter
t→u→v
w→x→y→z
パスワード:W1kvz8Gp

元のパスワードから変更箇所を変える

毎回同じ場所を変更すると、複数のパスワードが漏れたときに規則性が
分りやすいので、文字数を変更する方法もあります。

twitterだと7文字なので7番目の文字を「t」に変更する。
W1kzt8Gp
googleだと6文字なので6番目の文字を「g」変更する。
W1kzegGp

まとめ

思い出せるパスワードの生成方法について、いくつか紹介しました。
個人的には、自分で思い出すコストと、攻撃されるときの分かりにくさを考えると
2文字変更し、ずらす文字数を変更するのが良いかと思いました。

twitter

w→x→y
i→j→k→l

「W1yle8Gp」

しかし、結局複数のパスワードが漏れた場合には、元のパスワードに対して
変更箇所を変えないと、すぐに分かっちゃうんですよね。だからといって
変更していくと、思い出すときのコストが大きくなるんですよね。

英字をそのまま使うのではなく、記号に置き換えてはどうか、との意見も
あったのですが、コストの大きさを考えて現実的に難しいかと思いました。

そこまでするなら、パスワード管理ソフト使おうってことになっちゃうのかも
しれませんね。

プレゼンの基本に関して学んだこと -内容編-

はじめに

最近、プレゼンのノウハウに関して書いている良書に出会ったので、
自分なりの理解をまとめておきます。見つけた本は、
「図解まるわかり 会話術の基本」です。
得に、中野俊宏 氏の執筆した「プレゼンテーションの基本」の部分が、
勉強になりました。そこで、「プレゼンテーションの基本」の節について、
プレゼンの内容編伝え方編に分けて、
自分なりに理解したことの整理します。
(重要な部分を抜き出して、自分で構成しなおしたので、本の章節構成とは異なります。)

プレゼンテーションにおけるスキル

プレゼンテーションに必要な3つの能力は、プレゼンスシナリオスキルデリバリースキルである。

プレゼンスは、プレゼンする人そのものの能力である。具体的には、身体的な魅力である人相や存在感、
精神的な魅力である主体性・責任感・希望がある。
シナリオスキルは、相手に伝わりやすいように、プレゼン内容をシナリオ化することである。
具体的には、ロジックの通ったシナリオや、プレゼン作成ソフトでの作業がこれにあたる。
デリバリースキルは、プレゼンターの見た目や声のスキルである。スクリーンの使い方や時間配分なども
これにあたる。
本書では、シナリオスキルとデリバリースキルについてのノウハウが紹介されていたので、
それぞれに分類して記述する。


シナリオスキル

シナリオ作成の事前準備

シナリオ作成の事前準備として、以下の5つの項目を考える。


1. 具体的な提案目的
2. 相手
3. 心をつかむ言葉
4. 根拠・事実
5. 根拠・事実の組立て


例として、ダイエット食品の販売プレゼンを例に説明する。


具体的な提案目的

プレゼンの開始から終了まで、常に意識する軸として、具体的な提案目的を考える。
無料サンプルを使ってもらうことなのか、定期購入者になって欲しいのか。
それによって、アピールすることが違ってくる。

相手

提案をする相手を考える。受けいれてもらう必要があるのは、日本国民全員なのか、
食生活の乱れているサラリーマンなのか、ダイエットをしている主婦なのか。
効果的なアプーチをするためにも、ターゲットを定める必要がある。

心をつかむ言葉(キラーメッセージ)

心をつかむ言葉を考える。これを考える際には、相手をよく研究することが重要である。
たとえば、食生活の乱れているサラリーマンなら「食事で不足しているビタミンを摂取」、
ダイエットをしている主婦なら「ダイエットの効果が2倍に」などとする。相手の
立場になって、心をつかむ言葉を考える。


キラーメッセージを導きだすためには、次の4つのステップで考える。

  1. 一言で言うと
  2. 受け入れるメリット
  3. 他との違い
  4. 結論

根拠・事実

次に、心をつかむ言葉を補足するための、根拠・事実を考える。
「食事で不足しているビタミンを摂取」というなら、
「ビタミン不足で太る」や「1日に必要なビタミンを100%摂取できます」などが入る。

根拠・事実の組立て

成功するシナリオに求められる3つの要素について説明する。
1つめは、相手の立場に立っている内容である。
2つめは、提案の特徴・優位性が分りやすい内容である。
3つめは、一環しな流れで納得できる内容である。

プレゼンで大切なのは、相手が何を欲しているかをつかむことである。そのために、
相手をよく研究することが有効である。

ワンポイントアドバイス -簡潔に-

人は、思っている以上に人の言うことを聞かない。
すべて聞かなくても、だいたい理解できるようにすることが大切である。
具体的なテクニックを以下に示す。

  1. 1スライド毎に主張するのはのは1つだけにする
  2. 一文を短くする
  3. 具体的な表現を入れる
シナリオの構成要素

プレゼンの構成要素は、「総論」「各論」「結論」の3つである。
聞き手が構成をイメージできるように、ツリー構造(右図)で話すように意識する。
すべての話を、「総論」「各論」「結論」の三層構造にするとよい。

総論

総論では、プレゼンの背景、目的、テーマなどを話す。
そして、これから話す内容のだいたいの構成を説明する。
自分が一番話したいことを明確にする。

各論

各論では、総論で伸べたことを具体的な数値や方法で肉付けする。
各論の中も、「総論」「各論」「結論」になっていると分かりやすい。

結論

結論では、最終的に「だから、どうするのか」を述べる。
全体のまとめに加えて、今後の展望を話す。

シナリオ・パターンの紹介 -4W1H-

プレゼンで最も大切な_説得力_をつけるための手法を4W1Hの紹介する。

4W1Hは、次の5つに分けて考える。


Who 誰が相手か

Whoでは、プレゼンをする相手をA社のBさんというように特定のだれかを選択する。
そして、その人がぐっとくるメッセージを作る。

What 提案は何か

Whatでは、プレゼンの内容を一言でズバリと説明する。

Why 提案の理由

Whyでは、聞き手に必要だと思ってもらうために、納得させる理由を考える。

Which 提案の選択

Whichでは、いくつかの解決策を提示した上でひとつを選ぶと説得力が増す。

How 具体的な方法

Howでは、将来のビジョンを仮説で良いので、どんどん相手に投げかける。

避けるべき5つのポイント

プレゼンで避けるべき5つのポイントを以下に示す。

  1. 難しい表現 (四字熟語、専門用語)
  2. 曖昧な表現 (と思われます)
  3. 否定的な表現
  4. 不快感を与える表現 (差別用語、カタカナ言葉、上から目線)
  5. 長い表現 (一文が長い)

おわりに

書籍の感想については、書いてある内容は、どれも素晴しいものだったのですが、
ノウハウ同士の相互の位置付けが、よく理解できずに、まとめるのに
非常に時間をかけてしまいました。


もともと、シナリオ部分に関しては、ある程度自身がありました。
研究の発表では、自然に4W1Hに近づいていたのですが、
Whichが完全に抜けていたと思います。他にできていないと
思ったのは、簡潔に伝えることです。人は思ったよりも、ずっと
話を聞かないので、それを意識してプレゼンしたいと思います。