2012-09-02
プログラマの勉強会におけるプレゼンテーション手法やツールの考察
このテーマだいぶ前から書きたかったのです、しかし書こうとすると言いたいこといっぱいあって長くなるので、躊躇してたというかタイミング見計らってたのですが、書けそうな気分なので書きます。
昨日、2012年9月1日に
という、かなり大きめの勉強会(という名目のもと女子大に侵入するということでwktkするイベント)が行われました。自分は発表してませんが、ちゃんと10時にお茶の水女子大に到着し、様々な方の発表を聞いてきました。今まで、過去数十回このようなイベントに参加してきてそれなりに多くの発表を聞いてきたし、自分も何度か発表経験もあります。
こういった勉強会で発表する場合、
などでない限り、みんな事前にある程度の時間をかけて資料を作ると思います。そのプレゼンテーション資料の
- 作り方
- どのようなツールを作ってつくるか?
- 作ったあとに、どのように公開するか?
- 公開するタイミング
などの話です。
べつにはっきりした、結論や正解はないというか、
- 勉強会の種類毎に使い分ける
- 人によってそれぞれ個性があっていい
というものでしょう。まぁしかしそういったことについて今まで自分が感じたことについてひたすらだらだらと書いていきます。
分類してみると
- 作るときの便利さ
- 見た目の綺麗さの印象の問題
- 写真の注入(のやりやすさとか)
- 動画とかまで組み込んじゃう?
- 機能的な問題
- webへのリンクがワンクリックで飛べるようにできるか
- 文字も全部画像として変換されてしまって、あとからそれの「コピペ」さえ出来ないフォーマットに落とし込まれてしまう場合
- フォーマットの問題
- 作った後の公開のしやすさ
- どのサイトに公開するか?
- ツール
- プログラマ的には「もとの資料をmarkdownなどのテキスト形式で記述し、なんらかの変換処理を施すことによってpdfを生成」という形式を好む場合とか
- そうすれば git で version 管理がしやすいじゃん
- 公開場所
- http://slideshare.net , https://speakerdeck.com , 自分のホームページ、自分のgithub page 、blogに組み込む、その他いろいろ・・・
- http://slideshare.net や https://speakerdeck.com などは、それ自体がSNSになっており、「いいねボタン」「フォロー機能」がある
- http://slideshare.net , https://speakerdeck.com , 自分のホームページ、自分のgithub page 、blogに組み込む、その他いろいろ・・・
- 公開タイミング
- 事前に読んでもらったほうがよいからweb上に公開などしておく?
- ustreamで生放送で配信する勉強会の場合の考慮事項
- usteram経由の視聴者にとっては、文字が小さくて見れないなどの理由により、事前に公開してくれたほうがありがたい場合が多い
- 事前に公開しないほうがいい場合(公開してしまうとデメリットがある場合)
- ストーリー性がありいい意味で聞き手を驚かせることを意図する発表や、当日アンケートをとって手を上げてもらう発表の場合
- 昨日の関数型プログラミング2012でも、まさにこのパターンの発表がありました
- 勉強会の最中に、他の発表者のプレゼンテーションを受けて、直前に編集する必要に迫られる場合とか
- ある意味、プレゼンテーション資料を発表中に編集しながら作り上げていくというアドリブ性?
- そもそもあとから、公開しないという選択肢
- 様々な事情でオンラインには公開しづらく、"当日に使うだけのもの"という位置づけ
- 「当日のための資料」としての価値と「あとからその資料を見た場合のことを考えた見やすさ」の価値とどちらを重視するか
- 完全に別につくる?
- 全く同じもの?
- ちょっとだけ修正して公開?
自分が考え感じている
「プレゼンテーション作者が考えるべき事項、の分類と列挙」
だけしたら疲れて、それに対する自分の意見をそれぞれ述べるの無理ですね・・・。
個人的な今までの経験上、一番時間かけて気合入れて作ったプレゼンテーションは、Scala会議でのSBTの資料ですが
みなさん、この資料見てどう思いますか?まぁこんなものです、まだまだですね。
作成方法と公開タイミングは
- google docsで作成
- google docsの機能で一旦pdfでローカルにダウンロード
- 詳しく忘れたが、発表直前もしくは発表直後にslideshareにて公開
- あとで細かいところ修正してuploadし直した覚え
- それなりに、数ヶ月たっても見てくれる人いた
- 一部記述が古くなってしまったのでslideshareに自分でコメントして注意事項を追記したり
今まで、それなりに多くの勉強会に参加して、もしくは「勉強会の資料を後からtwitter経由で知り読む」という行為を毎日のようにしてますが、自分より作り方うまい人ばかりで死にたくなりますね。
昨日の函数型プログラミング2012の発表者の方々も、100人以上集まるイベントとあって、みな気合入れてつくったと思いますが、素晴らかったですね。
簡単に何点か挙げますが、あくまで個人的な感想としては
- @tanakh さんの発表で使ってたツール(名前知らない)とか、ああいう「htmlで作成されていて、矢印キーを押すことによってページ移動」って見た目かっこよくていいんですが、ちょっと後からiPadやスマフォで見る場合見づらいし、pdf版が欲しくなることあるし*1個人的にすきじゃないなーとか。
- tanakhさんの件と似たような理由できょんくんの資料の http://prezi.com というサイトもあまり好きではないなー、このエフェクトカッコイイけど、プレゼン資料をみる側としては個人的に微妙だなーとか(作り手として利用したことはないからしらない)
- http://prezi.com/ipad/ prezi.comはipadのことも考えられてるのか?
- これローカルにdownloadできるの?
- 関数型プログラミングの今昔(仮) の場合は、発表の特性上、「事前に資料公開できない(しないほうがよい)典型的なパターンだなぁ」とか
- よんたさんが、"事前に似たような発表があった"、"発表時間がちょっと短くなった" ことにより、当日も修正していたなぁーとか
- 継続開発のススメ Erlang/OTP 編 の場合、gistのみの発表資料って珍しいわけですが
- 見た目のかっこ良さや派手さはない
- あとから読みやすい & 作る本人が簡単につくれるという点ではとてもメリットがある
- ustream視聴者(もしくは後ろのほうの席の人?)から、「文字が小さくて見えない」という声があり、そこは明らかにデメリットだったなぁ
とか。もちろん、発表自体やその内容はみな素晴らしかったわけですが、
「プレゼンテーション資料やツール」という視点を中心にみるとこういう見方ができるなーという話です。
ところでちょっと話変わって、自分は
超簡単にかっこいいSlideを作れるサイトをつくったよぉーー
というエントリーを書いたことがあり、今もこのサイト動いています。
- もともとある picture-show というのを改造
- Google App Engine に載せて、作成にはgistを使うということにより作成時の手軽さ
- それなりなカッコイイ見た目
- ソースコードに簡単にシンタックスハイライトをつけられる(プログラマにとって超重要!
などを実現したものです。しかし欠点として
- pdf出力できない => 変換して slideshare にuploadしたくてもできない
- 一つのファイルとしてそもそもローカルに保存できないから、オフラインで見るの絶望的
- Google App Engineのサイトが落ちたら死
などあります。
自分は何度かこれで発表した経験があります。(Scala会議の際はこのツール発明する前)
ほとんど聞かないですが自分以外には、りりろじさん が、 #rpscala のときに使ってくれていたような。
まぁだいぶ長くなりましたが、こんなかんじです。もっとたくさん勉強会の発表聞いて、自分ももっと発表うまくなりたいです。
似たようなテーマでみなさん思うこととか、「自分はプレゼンの際こういう工夫をしている!」というこだわりがあれば、このblogにトラックバック送ってblog書くなり、twitterで反応くれると有りがたいです。
2012-05-08
Scala の vim や emacs などの、エディタ用のシンタックスハイライトのためのファイル
scala | |
![]()
これも、見つからなくてこまってる人を度々見かけるので。ここ↓にあります
https://github.com/scala/scala-dist/tree/master/tool-support/src
version 2.9.2 くらいから(?) Sbazが消えて、このあたりのファイルも添付されなくなったんでしょうか?(詳しい経緯とか知らない)ファイルはここにあるけれど、自分も現在、これらのファイルの推奨のインストール方法(といっても、大概コピーしてきて所定の場所に置くだけでしょうけれども)知らないので、誰か詳しい事情しってたら教えて下さい・・・(´・ω・`)
あと別に、これらのファイルはそれほど頻繁に更新されてるわけでもないし、*1 2.9.1以前に添付されている古いScalaのディレクトリから引っ張ってきても、ほとんど同じものだと思うので、もし古いScalaがあるならばそこから引っ張ってきてもいいと思います
2012-04-18
sbaz
scala | |
![]()
sbaz はなくなりました!
なんだか、(自分の観測範囲内で) sbaz が添付されていないとか、どこいったんだーとか言っている人が多いので、あえてこれだけのために blog を・・・。
詳しいことは知りません*1 が、 2.9.1-1だか2.9.2あたりから sbaz は入ってません、それが正常らしいですよ!
ちなみに、昔はsbaz使ってAndroidやる方法があったらしいですが、今はこれ
https://github.com/jberkel/android-plugin
使ってください。これ↑でAndroidをやるにしても、sbt自体のversionが古い記事がいっぱいあって、古いやつ参考にしてやってもハマるだけなので注意してください。あと
Scala の vim や emacs などの、エディタ用のシンタックスハイライトのためのファイル
についても、別に書いておきました
2011-12-17
iPadでソースコードを読むためのサイトをつくった
追記:
ダブルクォート3つで囲ったStringのリテラルの部分が崩れるので、最近Scalaだけこれを使って処理変えました
https://github.com/xuwei-k/syntax-highlight/commit/51a775c4bbbefb2af9a018dd2d667ad4986444c1
https://github.com/xuwei-k/syntax-highlight/commit/9744d0cef4d155a39f22e435b5eeaae11a3f62c7
しかし、今度はちょっとコメントの部分の解釈がおかしい(´・ω・`)
このあたりがあやしいような
最初に作ったの、もう1年以上前なんですけどね(´・ω・`)ずっと一人で地味に便利に使っていましたが、なんとなく今更紹介をかいてみるという
http://syntax-highlight.appspot.com/
https://github.com/xuwei-k/syntax-highlight/
iPadってなぜか、自分が知ってる限り現状では、使いやすいgit(hub)クライアントなどがないのでちょっとでもソースコード読みやすくするために、自分で google app engine でつくりました。ところで、iPadって書きましたが、べつにhtmlが開けるものならAndroidタブレットでもなんでもいいです。
簡単に内部の仕組みを説明すると
- ユーザーが入力した、ソースコードのzipのURLを受け取る
- GAEのサーバー側でダウンロード
- それをサーバー内部で解凍
- shjs http://shjs.sourceforge.net/ というシンタックスハイライトのためのJavaScriptライブラリを使って、(可能な拡張子ならば)シンタックスハイライトされたhtmlに変換*1 *2
- それを再びzipに圧縮する
- httpのレスポンスとして返す
という流れです。もちろんScalaで作ってます。zipでソースコードが固まっていれば、githubだろうが、google code だろうが、どこかの知らないサイトのURLだろうがなんでもよいです。対応してる拡張子はこのあたりのソースコード読んでください。あと、もとのzipのサイズが大きすぎると、GAEの30秒(?)の制限に引っかかって、エラーになります
そして、ソースコードのzipのURLを入力の部分ですが、実は自分でzipのファイルをuploadするっていう機能もあります。
あと、httpのレスポンスとして返すというところは、zipファイルを添付したメールとして送信する機能もあります。で、これがなぜかzipの添付ができないという微妙な制限がかけられていたので、拡張子変えて送るという姑息な技を使っています、メールの添付ファイルrenameして解凍してください
自分は主にこれ使ってiPadのgoodreader使ってソースコード読んでます。
あと、結局主に利用するのがgithubなので、ちょっとだけ便利にしたbookmarkletをつくって、iPadのsafariに登録していたりします。
https://github.com/xuwei-k/syntax-highlight/blob/master/bookmarklet1.js
https://github.com/xuwei-k/syntax-highlight/blob/master/bookmarklet1mini.js
https://github.com/xuwei-k/syntax-highlight/blob/master/bookmarklet2.js
https://github.com/xuwei-k/syntax-highlight/blob/master/bookmarklet2mini.js
自分のiPadこんな感じ↓
そして、あとそれに関連して、JavaScriptでgithubのAPI叩いて、watchしているrepositoryの一覧表示して、ついでにそのdownload用のリンクを追加したものをこないだ作りました
http://xuwei-k.github.com/watching_repositories
このあたり で、URL ? 以降をgithubのidとして、githubAPIをたたいているので、たとえば
http://xuwei-k.github.com/watching_repositories?odersky
って入力すれば、自分や他の人がwatchしている人のリポジトリ一覧とそのダウンロードのリンクが表示されるようになります。
フロントのhtmlが全くなんの工夫もなくて酷いとか、ソースコードもかなり昔に作ったので色々汚かったりします(・ω・`)なんか質問とかあれば、 @xuwei_k でも、このblogのコメント欄でも、githubのissueでもいいので聞いてください(質問されたからといって、その質問や要望に答えられるかは別ですが)
っていうか誰かforkしてもっと使いやすい素敵な感じにしてくれないかな・・・。今思えば、REST APIとして綺麗に設計すればよかったのだけれども、formからPOST request送るようなhtmlの画面を最初につくって、bookmarkletなどもそれを利用しているので、なんだかbookmarkletが異様に長くなったりしてェ・・・(´・ω・`)
2011-10-14
HerokuでScalaやろうとしたら、すごくはまったけど、とりあえずHello worldできたっていう話
10日くらい前にHerokuでのScalaのサポート発表されましたよね
http://blog.heroku.com/archives/2011/10/3/scala/
http://devcenter.heroku.com/articles/scala
herokuも無料枠あるわけだし、とにかくやってみよう(・ω・´)というわけで、やろうとした・・・・がしかし!
herokuでScalaやろうとして挫折(´;ω;`)ブワッ Error H14 (No web processes running) っていうのがログに吐かれるだけで、なんかデプロイはできてて、アクセスログも吐かれるのに、ちゃんと動かないんだけど・・・
2011-10-14 18:04:43 via web
そしたらナカーマが
@xuwei_k finagleのサンプルデプロイしたとき同じ結果になりました。何度デプロイしてもだめで途中で投げ出したままです
2011-10-14 18:08:04 via TweetDeck to @xuwei_k
この時点で数時間格闘していたわけですが、悔しくて諦めがつかずその後も頑張る・・・(´・ω・`)
自動生成された、target/startのシェルスクリプトのファイル(?)が target/start: 3: Syntax error: "(" unexpected って文法エラーになってるエラーログががががががががががががが
2011-10-14 18:20:38 via web
なんか原因わかったっぽい?
bash と sh の文法の違いとかそういうあれか?(´・ω・`)
2011-10-14 18:43:14 via web
結論から言うと、(推測があっていれば) sample にある、typesafe の xsbt-start-script-plugin が原因(あとで書くけど、こいつが100%悪いというわけでもなく、heroku側も悪い・・・? )
サンプルには、 xsbt-start-script-plugin という、以下のような*1起動スクリプトを生成*2するプラグインを使えって書いてあります
#!/bin/bash function die() { echo "$*" 1>&2 exit 1 } test -x './target/start' || die "'./target/start' not found, this script must be run from the project base directory" MAINCLASS=Web java $JAVA_OPTS -cp "./target/scala-2.8.1/classes:/home/kenji/.sbt/boot/scala-2.8.1/lib/scala-library.jar:/home/kenji/.ivy2/cache/com.twitter/finagle-core/jars/finagle-core-1.9.0.jar:/home/kenji/.ivy2/cache/com.twitter/util-hashing/jars/util-hashing-1.11.4.jar:/home/kenji/.ivy2/cache/com.twitter/util-core/jars/util-core-1.11.4.jar:/home/kenji/.ivy2/cache/com.twitter/util-collection/jars/util-collection-1.11.4.jar:/home/kenji/.ivy2/cache/com.google.guava/guava/jars/guava-r09.jar:/home/kenji/.ivy2/cache/commons-collections/commons-collections/jars/commons-collections-3.2.1.jar:/home/kenji/.ivy2/cache/org.jboss.netty/netty/bundles/netty-3.2.5.Final.jar:/home/kenji/.ivy2/cache/com.twitter/finagle-http/jars/finagle-http-1.9.0.jar:/home/kenji/.ivy2/cache/com.twitter/util-logging/jars/util-logging-1.11.4.jar:/home/kenji/.ivy2/cache/commons-lang/commons-lang/jars/commons-lang-2.6.jar" "$MAINCLASS" "$@" exit 0
で、twitterでつぶやいたとおり、これの3行目で、シンタックスエラーになってたみたいです(´・ω・`)ェ・・・
(ちゃんと調べてないから推測ですが)、heroku で scala をやる場合は、 ソースコードとsbtのプロジェクトの設定のファイルをgit push するだけで、jarなどを直でデプロイするわけではないようです。おそらく、heroku側のサーバーで、コンパイルして、そちらで生成されたclassファイルや依存ライブラリにパスを通して実行する仕組みになってるようです。*3で、依存ライブラリのパスを通して起動するためのファイルを自動生成するために xsbt-start-script-plugin を使うことを推奨してるってことなのでしょう。
で、こいつが、"#!/bin/bash" となっていたり、 "function die() " と書いてあったりするように bashでないと動かない! みたいですが、どうやらheroku側のサーバーで何らかの原因で bash として実行できなかったようで、そもそも上記の起動スクリプトが動いてなかったようです!
というわけで、 xsbt-start-script-plugin を fork して、とりあえず雑にいらない部分を消して、
https://github.com/xuwei-k/xsbt-start-script-plugin/commit/b1089a09a61ee27a92dc3aa8149f0588c0dfbaac
project/build.sbtは削除し、以下のようなファイルを"project/project/Build.scala" として保存して、自分が変更したversionのxsbt-start-script-pluginを直接参照*4
import sbt._ object PluginDef extends Build{ lazy val root = Project("plugins", file(".")) dependsOn( scriptPlugin ) lazy val scriptPlugin = uri("git://github.com/xuwei-k/xsbt-start-script-plugin") }
すると動きました・・・(´・ω・`)疲れた・・・
typesafeがサンプル作ったときは、heroku上でbashが実行できてたんですかね・・・?xsbt-start-script-plugin自体が100%悪いわけでもないし*5・・・これは、pull request送るべきなのか、送るとしても、今のままじゃ雑に直したというか、無理やり一部消しただけなので、どうしようか・・・
そもそも、最初の方の行で、"test -x './target/start'"とやっていて、自分自身の実行権限調べてる(?)けどなんかおかしくないか・・・?shとbashの違いとか、その他UNIX系のシェルの知識あまりないから、どうすればbestなのかよくわからん(・ω・`)あとxsbt-start-script-plugin自体はwarに対応していたり、ある程度汎用的なものだから、色々理由があるのかもしれないけれど・・・
もうちょっと詳しいこととがわかったり、なにか進展あれば、追記するか、新しくエントリを書きます。
追記:
heroku scale web=1
というように、接続数の設定(?)をやらないと、サンプルの手順の通りやっただけでは動かない気が・・・?その辺の設定の概念とか(無料枠の場合の)上限とか全然把握してないので勉強しないと・・・
なんでyuroyoroさんのやつ普通にサンプル通りでできてるんだろ(´・ω・`)昨日自分が出来なかったのは、設定とか環境のせいで、わざわざpluginをforkして改造する必要はなかったんだろうか?



