Emacs実践入門 出版記念イベントに参加してきた

Emacs実践入門 出版記念イベント に参加してきた.

5年前に出たEmacs実践入門の改訂版が出たことによる出版記念イベントで, 内容としては著者の 大竹智也 さんの基調講演や, 自分のエディタさばきを披露する『エディタの鉄人』, 様々な発表者の方の発表などがあった. 暗黒美無王でおなじみの@ShougoMatsuさんの実況・解説があって, ときどき「Vimだとこうですね」と間にはさんでいて面白かった.

盛り上がったのが『エディタの鉄人』で, https://www.gnu.org/software/emacs/history.html のページからEmacsのリリースリストをコピペしてきて, これに対して

  1. - を タブに変換する
  2. <li></li> で各行を囲む
  3. Markdownのテーブルにする

という操作を前で披露してもらうというもの.

操作一つをとっても一人一人でやり方が違っていて, - を複数選択してマルチカーソルでタブにする人や, replace-regex で置換する人, <li> は矩形選択して </li> は置換を使う人, マルチカーソルで <li></li> を挿入する人と様々だった.

ただMarkdownのテーブルに直す操作では, それぞれの方法で | を挿入してから見た目を整えるときにorg-modeの機能の一部をMarkdownの編集に利用する, といったものが共通していてorg-modeを全然利用していない自分としては目から鱗だった.

他にもorg-modeの凄さを感じる瞬間が多く, 他人と共有するMarkdownやPDF, docxをorg-modeで書いてから変換させたり, 発表スライドをorg-modeで作ってきている方もいてorg-mode万能説を感じた.

他人がEmacsを使う様子を見ていると自分はまだまだEmacsを活用しきれていないなと思ったけど, 今後どんな風にEmacsを拡張していくかの参考になったので他人の使う様子を見れたのは良かった.

またこのような機会があれば是非参加したいし, 今度は自分のエディタを披露できるくらいになりたいと思った良いイベントだった.

当日の様子はこちらをどうぞ. twitter.com

IntelliJでScalaパッケージをインポート時にブレースの囲みにスペースを入れる方法

Version 2017.2.3で確認.

IntelliJのデフォルト設定だと, Scalaで一つのパッケージから複数のクラスをインポートするとき, ブレースの囲みにスペースが入っていない.

つまりこうなっているのを

import akka.http.scaladsl.model.{HttpRequest, HttpResponse}

こうする方法.

import akka.http.scaladsl.model.{ HttpRequest, HttpResponse }

Scala Code Style的にはどっちでも良さそうだけど, 今書いてるプロジェクトはスペースが入っている方で, Auto Import機能でインポートすると勝手に既存のコードをスペース無しにフォーマットしてウザい. このままだとフォーマットに気づかずコミットしかねないので設定でなんとかする.

設定は簡単で, File -> Settings... -> Code Style -> Scala の Space タブで以下の設定をする.

  • Spaces after open and before close braces in imports にチェック

gyazo.com

これでコミットに不必要な差分が紛れ込むことがなくて快適になります.

Python用Emacsの設定を書いた

大学4年生になり研究でPythonを使う必要が出てきたので, EmacsPython用の設定を追加した. 普段なら他の人の設定をコピペするだけなのだが, 今回利用したパッケージを使った例が少なかったのでまとめることにした.

前提条件

Python2系が必要なときはvirtualenvを使うけど, 3系前提ならvenvだけで良さそう*1.

前提と同じPython3 + venvを入れるには以下の記事が参考になる.

pyenv + venvでPython3環境を構築する - $shibayu36->blog;

利用したパッケージ

elpyはEmacsPythonIDE化するパッケージ.

書いた設定

(el-get-bundle! python-mode)
(setq auto-mode-alist (cons '("\\.py\\'" . python-mode) auto-mode-alist))

(el-get-bundle! elpy
  (elpy-enable)
  (setq elpy-rpc-backend "jedi")
  (add-hook 'elpy-mode-hook
    '(lambda ()
       (auto-complete-mode -1)
       (define-key company-active-map (kbd "C-n") 'company-select-next)
       (define-key company-active-map (kbd "C-p") 'company-select-previous)
       (define-key company-active-map (kbd "<tab>") 'company-complete))))

使い方

  • プロジェクト環境に依存パッケージをインストール.
$ source bin/activate
$ pip install jedi もしくは rope
$ pip install flake8 importmagic autopep8 yapf
  • Emacsでプロジェクトディレクトリを開いて M-x pyvenv-activate をする. どの仮想環境を利用するか選択するので, プロジェクトディレクトリを指定して選択.
    • プロジェクトの環境が有効になり補完やLintが効くようになる.
  • 完了
    • 何かおかしかったら M-x elpy-config で設定を確認できるのでそれを見ながら修正する.

補完のバックエンドをjediropeで選択できる. どっちを選べばいいかはelpyの公式のWikiに書いてある.

雑感

よくあるブログエントリだとjediを入れて補完が出来るようにするのが多いけど, Python仮想環境のことを考えていなかったりvirtualenvを使っていたりで千差万別なので, 今回自分用でまとめてみた.

Pythonは書き始めたばかりなので, IDEの機能や周辺のLint・リファクタリングツールを全然使いこなせていない. 手持ち無沙汰感は否めないけどよしとする.

設定に関してだと el-get-bundle! の辺りは各自の使っているパッケージ管理ツールに適宜読み換えればいいと思う.

elpy-mode-hook にくっついている設定はAuto-Completeを無効にし, Company-Modeのキーバインドを最低限設定するもの. 普段からCompany-Modeを使っている人必要なさそうだけど, 自分は普段Auto-Completeを使っているのでPythonを書くときだけCompany-Mode を有効にするという形を取った.

Auto-Completeを使う方法もあるのかもしれないけどそこまで調べていないのでひとまずは現状でいいかという気持ち.

より詳しく, 正確にEmacsPythonの設定をするならEmacsWikiを見ると良さそう.

EmacsWiki: Python Programming In Emacs

参考記事

*1:むしろvenvのみの方が余計なものを考えなくて良いと思う. 止むに止まれぬ事情があるときはvirtualenvを入れよう

株式会社はてなに入社しました

株式会社はてなに入社しました

株式会社はてなに入社しました - hitode909の日記

【未完】PHPで普通のWebサイトの作り方

これはUEC Advent Calendar 201622日目の記事です。 www.adventar.org

21日はid:etheldreda-33rさんで「勤労学生と言う選択肢[UEC 2016]」でした。 etheldreda-33r.hatenablog.com

大遅刻をかましてしまいすみませんでした。まだ完成していなくてどうしようという気持ちですが、流石にそろそろ公開しないと良くない気がしてきたのでひとまずこのエントリに関連した発表のスライドをのせておきます。いずれ追記をするので、その時に気づいた方は見ていただけると幸いです。

今回書くのは電通大総合情報学科3年前期に行われた、メディアネットワークという授業で僕が作ったものについてです。

はじめに

今回のタイトルには多分に語弊が含まれます。わーるどわいどうぇぶに公開できるレベルのサイトの作り方は書きません。それを期待した人はごめんなさい………

メディアネットワークという授業は僕の所属する電気通信大学総合情報学科の3年生向けに開講される授業です。内容を簡単に言うと、PHPを使って動的にコンテンツを生成するホームページを作るという授業です。PHPを使ったアプリケーションを作ることでWebの基本的な事項を学習するわけです*1。当然ネットワークに関する知識やHTTP、PHP自体の知識やWebアプリケーションを作る上での簡単なセキュリティの話が出てきます。授業の評価は、各個人で好きなサイトを作り、共用サーバ上で公開された作品で決まります。

さて、僕が作ったものはSlideShareSpeaker Deckのようなスライドを投稿して、サイト上で見れるようにするアプリケーションでした。せっかくの機会だったので、色々と実験をしようとしたのですが、時間が足りず中途半端な形になってしまいました*2

このアプリケーションを作る上で一番の工夫点はRESTfulなURIの実現です。以下ではRESTなURIを実現するために行ったことについて書いていきます。

今はこのスライドを見てください

speakerdeck.com github.com

おわりに

重ねて大遅刻をかましたことをお詫びします。id:knium君にはとても迷惑をかけました…… 2014年からUEC Advent Calendarを書いていて、これで3度目になりました。今年はギリギリまでAdventarに作られなかったのでどうしようかと思っていたのですが、後輩の手で作成されたのでもう何年かは続きそうですね。

話は変わって、12月22日は僕の所属する総合情報学科の卒研配属の1次配属者発表の日でした。幸いにも僕の配属先は決定し、何の因果か仮配属先はこのメディアネットワークを担当していた先生でした。授業を受けている時にはこの先生の研究室を志望するとは全く考えていませんでしたが、ある程度まともなものを作っておいて良かったかなと思います。授業の結果が直接、配属の理由になったというわけではないですが、自分が本当にやる気を出そうと思ったところで出せるといい事があるのかもしれません。

良い報告ができたところで、この辺りで締めようと思います。 UEC Advent Calendar2016, 24日目はアムザさんで[UECAC2016]電通大のプロデューサーとD@NPENを作った話です。

alevam.me

参考

*1:資料を見返してみると、コミュニケーションツールとしてのWebだとか他にも色々書いてありました

*2:実はインターン期間中も完成しておらず、提出日までインターンの課題と平行して作り続けていました

聖夜の夜にDentoo.LT

これはMMA Advent Calendar 201623日目の記事です。

今朝ユーリ!!! on ICEの最終話をみて ガチ泣きしてしまったid:miki_beneです。

昨日はid:mizdra君でMMAに入って1年でやったことでした。今の2年生も積極的ですが今年の1年生もかなり積極的で、前回のDentoo.LTでは飛入り枠で登壇してくれました。 優秀で活動的な後輩が多いと自分もやってやらないとなという気持ちになり刺激的です。

実は僕は22日の分のUEC Advent Calendar 2016を書いていないのでこれから書かないといけないのですが、こっちの方がシュっと書けそうなのでこちらを先に書こうと思います。id:Knium君ごめん。

さて聖夜の夜にDentoo.LTというタイトルですが、特別クリスマスとからめるようなネタも思いつかないので、Dentoo.LTについて僕の思っていることをつらつらつらと書いていきます。正直このエントリ*1であらかた書いてしまった感がありますが頑張って書こうと思います。

※追記

書いていると自分のDentoo.LTに対する勝手な思いを列挙するものになりました。独り善がりなことばかり書いてありますが、読んでもらえれば幸いです。

見てほしい

Dentoo.LTでは毎回YouTube Liveを使った生配信を行っています。配信を見ている人は割といて、僕自身も初回Dentoo.LTのUst配信を見ていた人間です。しかし割といるとはいえ、その内訳はMMAやその周囲の人が多い印象を受けます。もちろんゼロというわけではなく、#detooltハッシュタグを追っていると、ちらほら電通大以外と思われる方のツイートも見かけます。そう言った方々は本当にありがたいです。

最近は自分達の周囲の範囲だけではなく、学内の他の層にも知ってほしいと思っていたりします*2。Dentoo.LTは学内の人だけではく、他大や社会人の方も参加し、登壇しているイベントです。そういった方々の話を聞いたりする機会はせまい大学の中ではなかなかあるものだとは思いません。是非配信を見てほしいと思います。

来てほしい

生配信をしているとはいえ、もっと会場に来る参加者が増えてほしいです。これについては登壇者、運営側両方の思いがあります。

登壇者としては聴衆が多い方が緊張もしますが張り合いも出ます。配信では多くの方が見てくれているのかもしれないけれど、やっぱり顔が見れた方が反応もあってやりやすいです。

そして運営側としては、人が多い方が盛り上がります。拍手やガヤの音も大きいですし、人が多い方がそれだけ質問をしてくれる人も多くなるかもしれません*3

こういう言い方をすると押し付けがましいですが、やっぱり会場で発表を聞いている方が楽しいと思います。その場の空気感は会場でないと感じることはできないし、そしてこの空気感にあてられてあわよくば飛び入り登壇をしてほしいとも思っています。

登壇してほしい

これはかなり切実な思いです。周りの人に「登壇してよ」「何か話してみない?」と誘ってみると、返ってくる言葉はたいてい「話すネタが無い」です。確かにいきなり登壇をしてくれというのはハードルが高く感じてしまい難しいかもしれません。しかし、話すネタが無いということはないはずです。これは僕の思い込みなのかもしれませんが、どんな人でも自分が話したい、語りたい、みんなに伝えたいと考えてることがあるはずです。Dentoo.LTのテーマは特別決まっていません。技術的な内容でなければいけないという決まりもありません。話したいこと話せば、それで十分なんです。

YAPC::Asiaという大きいイベントを開催していた人のツイートを貼っておきます。

Dentoo.LTの登壇希望は早い者順なので選考はしていませんが、登壇希望を出そうか迷っている人は思い出してみてください。

「自分は人の前で話すのが苦手」

そうかもしれません。でもそれを人に話したいと思ったのなら話してみるべきです。失敗が恐いかもしれませんが、それは僕も同じです。ここだけの話、僕は毎回の発表で中途半端な準備で中途半端なネタを仕込んでいるのですが、毎回狙った部分はすべってます。 上手く話せないことが心配なのかもしれません。大丈夫です。所詮10分間なので、たとえ上手くしゃべることができなくても10分後には自分の席に戻っています。

LTを考案した人の文書をのせておきます。

Shibuya Perl Mongers : What are Lightning Talks?

あとこれは僕の思い過ごしだと思いますが、下を向いている人がいるときは誰も自分の話を聞いていないのではと考えてしまいます。でもこれはきっと余計な心配です。下を向いている人はみんなTwitterで実況をしているか自分のスライドを作っています。

最後に運営側としての思いですが、毎回登壇者の募集に死苦八苦しているので、是非登壇をしましょう。

これから

次回のDentoo.LTは年明け2月末を予定しております。Dentoo.LTでは皆様の参加をお待ちしております。

www.youtube.com

atnd.org

Dentoo.LT

おわりに

僕のDentoo.LTについて思っていることをいろいろ書きつらねていきました。ここまでお付き合いいただきありがとうございます。

明日はid:hyr3kの記事です。彼が始めたMMA Advent Calendar。絶対に何も考えず勢いで作っただろうけどなんとかここまでつながって来ました。どう落し前をつけるのか最終日にどんな素晴しいエントリを書いてくれるだろかと楽しみです。期待しましょう。

*1:http://benevolent0505.hatenablog.com/entry/2016/12/05/140755

*2:と言う割にこれといった広報はしていませんが

*3:これも登壇者目線ですが、質問をしてくれた方が発表の時に言い忘れたことを補足できるきっかけになったり、なにより反応を直接もらえることが嬉しいです。

広告を非表示にする

テキストエディタの話

これはMMA Advent Calendar 20167日目の記事です。昨日はsu_zu君で、PowerShellでぐいぐいでした。

www.adventar.org

僕はブルーレイプレイヤーを使う時くらいしかWindowsは使わないのですが、PowerShellから.NETが使えたり、最近だとWSLとかあったりして面白そうですよね *1。 他にもsu_zu君はffmpegOpenGL, OpenCV, 3Dモデリングだったりのグラフィックや画像処理系について明るくて、MMAの中でもめずらしいタイプの人で面白いです。


今回はテキストエディタについて書こうと思います。内容は先月部内でEmacsについて発表したときの内容を元にしたものになります。そのときは準備不足で発表がグダグダになってしまったのですが、今回はふわっとした事をつらつらと書こうと思います。

テキストエディタは何を使っていますか?

僕はEmacsを使っています。使い始めた理由はRubyのmatzとかの有名な人はみんなEmacsを使っていた印象があったからです。他にもLispを書くことに謎の憧れを持っていたとかそんな動機だった気がします。あと高校頃の部活の友達がvimを使っていました。

そんなたわいもない理由ですが僕はEmacsを使い始めましたし、使い続けています。皆さんはどんな理由があって、今使っているエディタを使っているでしょうか。

何がいいんですか?

大学に入り、MMAに入部し、気づけば3年生になっていました。その過程で、「テキストエディタ何使えばいいの?」と聞かれたことが何度かあります*2

ここで面白いグラフを見てみましょう。下のグラフはGoogleトレンドでみた過去5年分のEmacs, Vim, Sublime Text, Atom, Visual Studio Codeの各エディタの検索回数の推移です。

最新のデータを見ているのでもしかしたら異なるかもしれませんが、vimSublime Textの人気が圧倒的ですね。AtomVisual Studio Codeは最近ユーザが増えてきた為かまだ少ないですが、それでも確実にのびてきています。一方Emacsは下がりつづけていて下火ですね………かなしい。

また、2004年からの推移を見るとEmacsの検索件数の減少が目に見えてわかります。

単純に検索数 = 人気/利用率と捉えることは難しいでしょうが、自分がエディタ選びに迷ったときに参考になると思います。エディタもプログラミングをするときの道具の一つでしかないので、コミュニティがどれくらいしっかりしているか、ユーザは多いのか、新しいエディタに関しては、この先も開発が続いていくのかなどが気になるポイントかと思います。

僕がEmacsを始めたときにはこのようなことは考えていませんでしたが、昔から人気のあるエディタはユーザも多く、知見や便利にする拡張もそろっており、今もなお開発が継続されているというお墨付きで、外れのない選択だったのかなと思います。

エディタを選ぶときの基準は当然人に依りますが、一般的にコミュニティの規模やユーザ数、パッケージの多さや検索したときすぐにtipsが出てくるか。あとは周りに使っている人がいるかどうかが大事だと思います。このあたりはプログラミング言語の選び方と似たところがあります。

結局何がいいんですか?

Emacsがいいと思います!!!!

最新版の25.1だとXWidgetといって、Emacsのバッファにネイティブウィジェットを埋め込める機能も追加されています!*3 www.softantenna.com 他にも便利なパッケージが色々そろっているだとか、有名なあの人もEmacsユーザだとかEmacs上でだいたい全てが完結させることができるとか色々いい事があります!!!

半分冗談はさておき、本当にEmacsはいいと思いますが、今年入ってきた1年生にはAtomを勧めました。理由としては、始めのリリースから2年弱経っていてある程度利用の実績が出て来たこと、拡張がそろってきたこと、僕自身が触ったことがあることなどが理由になります。VS Codeが良いという話も聞きますが、やはり自分が触ったことのないものは勧めにくいです。

Emacsを勧めなかった理由はキーバインドなど多少の慣れが必要だったり、Windowsで使う知見が無かったりなど色々あげられますが、一番の理由はプログラムを書く前にエディタの慣れが必要になるのは本質的ではないからです。

布教は1年生の方から質問が来たとき、喜んで布教をしようと思います。


つらつらとテキストエディタについて書いてきましたが、この辺りで終わろうと思います。皆さんも自分に合ったテキストエディタを選んで、最高のプログラミングライフを過ごしてください。

明日はid:suwagi6さんで、MMA会則です。

46m44s.hatenablog.jp

*1:他の部員の話ですが、WSLを使ってGentoo on Windows10をやった人もいます

*2:「なんでEmacs使ってるの?キーバインドわかんなくない??」も

*3:だから何だと言われるとつらい