ミニバッファにElispの対応する括弧を表示
はじめに
Elispを書いているときに、括弧が多すぎて何に対応しているか分からなくなることがありました。
そのため、閉じ括弧の上にカーソルを置くと対応する括弧の関数名がミニバッファに表示する関数を作りました。
ruby-modeの「end」の上にカーソルを追いたときに対応するdefun部分がミニバッファに表示されていた機能を真似て作ってみました。
利用方法
Gistからコードをコピペして評価したら利用できます。
デフォルトで起動するので、止めるときには以下の関数を使います。
M-x toggle-display-couple-parenthesis-process
表示タイプには、対応する括弧の「関数表示」と「行表示」があります。
デフォルトでは、関数名の表示にしています。以下の関数で切り替えすることができます。
課題
現状では、以下のような問題があります。
根本的な実装方法を間違えていたり、もっと良い方法があると思います。
Elispで正規表現プログラムの効率的な開発の方法
はじめに
re-search-forwardやre-search-backwardを使って開発をしていると
開発正規表現にマッチするかどうかを確認するのに非常に難儀していました。
最近、以下の2つの方法を実践して非常に効率があがったので、メモを残しておきます。
バッファに対して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グループ
おわりに
Elispを書きはじめたばかりなので、間違いもあるかと思いますので、ご指摘などありましたらよろしくおねがいします。
関西 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の起動時間×起動回数分の仕事時間が短縮できるのではないでしょうか。あまり低レイヤーに詳しくないので、試すことも無いと思いますが、見ている分には楽しいです。
ちょっとセキュアな「思い出せる」パスワード
はじめに
同じパスワード使うのは危険だからやめましょうっ事を書いている
ちょっとセキュアな「いつもの」パスワード - ぼくはまちちゃん!を
題材に知人と話をしていたところ、もう少し手間をかけて
思い出せるパスワードが考えないかって話になりました。
そこで挙がった、いくつかアイデアをまとめます。
『ちょっとセキュアな「いつもの」パスワード』について
同じパスワード使いまわすのは危険なので、いつものパスワードを、
ちょっとセキュアにして使いましょうって話。
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
まとめ
思い出せるパスワードの生成方法について、いくつか紹介しました。
個人的には、自分で思い出すコストと、攻撃されるときの分かりにくさを考えると
2文字変更し、ずらす文字数を変更するのが良いかと思いました。
w→x→y
i→j→k→l
「W1yle8Gp」
しかし、結局複数のパスワードが漏れた場合には、元のパスワードに対して
変更箇所を変えないと、すぐに分かっちゃうんですよね。だからといって
変更していくと、思い出すときのコストが大きくなるんですよね。
英字をそのまま使うのではなく、記号に置き換えてはどうか、との意見も
あったのですが、コストの大きさを考えて現実的に難しいかと思いました。
そこまでするなら、パスワード管理ソフト使おうってことになっちゃうのかも
しれませんね。
プレゼンの基本に関して学んだこと -内容編-
はじめに
最近、プレゼンのノウハウに関して書いている良書に出会ったので、
自分なりの理解をまとめておきます。見つけた本は、
「図解まるわかり 会話術の基本」です。
得に、中野俊宏 氏の執筆した「プレゼンテーションの基本」の部分が、
勉強になりました。そこで、「プレゼンテーションの基本」の節について、
プレゼンの内容編と伝え方編に分けて、
自分なりに理解したことの整理します。
(重要な部分を抜き出して、自分で構成しなおしたので、本の章節構成とは異なります。)
プレゼンテーションにおけるスキル
プレゼンテーションに必要な3つの能力は、プレゼンス、シナリオスキル、デリバリースキルである。
プレゼンスは、プレゼンする人そのものの能力である。具体的には、身体的な魅力である人相や存在感、
精神的な魅力である主体性・責任感・希望がある。
シナリオスキルは、相手に伝わりやすいように、プレゼン内容をシナリオ化することである。
具体的には、ロジックの通ったシナリオや、プレゼン作成ソフトでの作業がこれにあたる。
デリバリースキルは、プレゼンターの見た目や声のスキルである。スクリーンの使い方や時間配分なども
これにあたる。
本書では、シナリオスキルとデリバリースキルについてのノウハウが紹介されていたので、
それぞれに分類して記述する。
シナリオスキル
シナリオ作成の事前準備
シナリオ作成の事前準備として、以下の5つの項目を考える。
1. 具体的な提案目的
2. 相手
3. 心をつかむ言葉
4. 根拠・事実
5. 根拠・事実の組立て
例として、ダイエット食品の販売プレゼンを例に説明する。
具体的な提案目的
プレゼンの開始から終了まで、常に意識する軸として、具体的な提案目的を考える。
無料サンプルを使ってもらうことなのか、定期購入者になって欲しいのか。
それによって、アピールすることが違ってくる。
相手
提案をする相手を考える。受けいれてもらう必要があるのは、日本国民全員なのか、
食生活の乱れているサラリーマンなのか、ダイエットをしている主婦なのか。
効果的なアプーチをするためにも、ターゲットを定める必要がある。
心をつかむ言葉(キラーメッセージ)
心をつかむ言葉を考える。これを考える際には、相手をよく研究することが重要である。
たとえば、食生活の乱れているサラリーマンなら「食事で不足しているビタミンを摂取」、
ダイエットをしている主婦なら「ダイエットの効果が2倍に」などとする。相手の
立場になって、心をつかむ言葉を考える。
キラーメッセージを導きだすためには、次の4つのステップで考える。
- 一言で言うと
- 受け入れるメリット
- 他との違い
- 結論
根拠・事実
次に、心をつかむ言葉を補足するための、根拠・事実を考える。
「食事で不足しているビタミンを摂取」というなら、
「ビタミン不足で太る」や「1日に必要なビタミンを100%摂取できます」などが入る。
根拠・事実の組立て
成功するシナリオに求められる3つの要素について説明する。
1つめは、相手の立場に立っている内容である。
2つめは、提案の特徴・優位性が分りやすい内容である。
3つめは、一環しな流れで納得できる内容である。
プレゼンで大切なのは、相手が何を欲しているかをつかむことである。そのために、
相手をよく研究することが有効である。
ワンポイントアドバイス -簡潔に-
人は、思っている以上に人の言うことを聞かない。
すべて聞かなくても、だいたい理解できるようにすることが大切である。
具体的なテクニックを以下に示す。
- 1スライド毎に主張するのはのは1つだけにする
- 一文を短くする
- 具体的な表現を入れる
シナリオの構成要素
プレゼンの構成要素は、「総論」「各論」「結論」の3つである。
聞き手が構成をイメージできるように、ツリー構造(右図)で話すように意識する。
すべての話を、「総論」「各論」「結論」の三層構造にするとよい。
総論
総論では、プレゼンの背景、目的、テーマなどを話す。
そして、これから話す内容のだいたいの構成を説明する。
自分が一番話したいことを明確にする。
各論
各論では、総論で伸べたことを具体的な数値や方法で肉付けする。
各論の中も、「総論」「各論」「結論」になっていると分かりやすい。
結論
結論では、最終的に「だから、どうするのか」を述べる。
全体のまとめに加えて、今後の展望を話す。
シナリオ・パターンの紹介 -4W1H-
プレゼンで最も大切な_説得力_をつけるための手法を4W1Hの紹介する。
4W1Hは、次の5つに分けて考える。
Who 誰が相手か
Whoでは、プレゼンをする相手をA社のBさんというように特定のだれかを選択する。
そして、その人がぐっとくるメッセージを作る。
What 提案は何か
Whatでは、プレゼンの内容を一言でズバリと説明する。
Why 提案の理由
Whyでは、聞き手に必要だと思ってもらうために、納得させる理由を考える。
Which 提案の選択
Whichでは、いくつかの解決策を提示した上でひとつを選ぶと説得力が増す。
How 具体的な方法
Howでは、将来のビジョンを仮説で良いので、どんどん相手に投げかける。
避けるべき5つのポイント
プレゼンで避けるべき5つのポイントを以下に示す。
- 難しい表現 (四字熟語、専門用語)
- 曖昧な表現 (と思われます)
- 否定的な表現
- 不快感を与える表現 (差別用語、カタカナ言葉、上から目線)
- 長い表現 (一文が長い)
おわりに
書籍の感想については、書いてある内容は、どれも素晴しいものだったのですが、
ノウハウ同士の相互の位置付けが、よく理解できずに、まとめるのに
非常に時間をかけてしまいました。
もともと、シナリオ部分に関しては、ある程度自身がありました。
研究の発表では、自然に4W1Hに近づいていたのですが、
Whichが完全に抜けていたと思います。他にできていないと
思ったのは、簡潔に伝えることです。人は思ったよりも、ずっと
話を聞かないので、それを意識してプレゼンしたいと思います。