Hatena::ブログ(Diary)

scalaとか・・・ このページをアンテナに追加 RSSフィード

2012-09-02

プログラマの勉強会におけるプレゼンテーション手法やツールの考察

08:46 |  プログラマの勉強会におけるプレゼンテーション手法やツールの考察 - scalaとか・・・ を含むブックマーク  プログラマの勉強会におけるプレゼンテーション手法やツールの考察 - scalaとか・・・ のブックマークコメント

このテーマだいぶ前から書きたかったのです、しかし書こうとすると言いたいこといっぱいあって長くなるので、躊躇してたというかタイミング見計らってたのですが、書けそうな気分なので書きます。


昨日、2012年9月1日に

函数プログラミングの集い 2012

という、かなり大きめの勉強会(という名目のもと女子大に侵入するということでwktkするイベント)が行われました。自分は発表してませんが、ちゃんと10時にお茶の水女子大に到着し、様々な方の発表を聞いてきました。今まで、過去数十回このようなイベントに参加してきてそれなりに多くの発表を聞いてきたし、自分も何度か発表経験もあります。


こういった勉強会で発表する場合、

などでない限り、みんな事前にある程度の時間をかけて資料を作ると思います。そのプレゼンテーション資料の

  • 作り方
  • どのようなツールを作ってつくるか?
  • 作ったあとに、どのように公開するか?
  • 公開するタイミング

などの話です。

べつにはっきりした、結論や正解はないというか、

  • 勉強会の種類毎に使い分ける
  • 人によってそれぞれ個性があっていい

というものでしょう。まぁしかしそういったことについて今まで自分が感じたことについてひたすらだらだらと書いていきます。


分類してみると

  • 作るときの便利さ
    • いつでもどこでも簡単に作れる?
    • webブラウザから操作できて、ネット上でつくる(google docsなど?)
    • ローカルのアプリでつくる?(power point や keynote ?)
    • windowsでもmacでもlinuxでも同じようなソフトでつくれる?
    • iPad上で作れるやつとか最近ある?
  • 見た目の綺麗さの印象の問題
  • 写真の注入(のやりやすさとか)
  • 動画とかまで組み込んじゃう?
  • 機能的な問題
    • webへのリンクがワンクリックで飛べるようにできるか
    • 文字も全部画像として変換されてしまって、あとからそれの「コピペ」さえ出来ないフォーマットに落とし込まれてしまう場合
  • フォーマットの問題
    • pdf ?
    • html ?
    • 複数形式で出力?
    • それぞれのフォーマットのメリット・デメリット
  • 作った後の公開のしやすさ
  • どのサイトに公開するか?
  • ツール
    • そもそもツールによって「作成と公開がある程度一体になってるケース」
    • vimemacs 使って作成?
  • プログラマ的には「もとの資料をmarkdownなどのテキスト形式で記述し、なんらかの変換処理を施すことによってpdfを生成」という形式を好む場合とか
    • そうすれば git で version 管理がしやすいじゃん
  • 公開場所
  • 公開タイミング
    • 事前に読んでもらったほうがよいから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 というサイトもあまり好きではないなー、このエフェクトカッコイイけど、プレゼン資料をみる側としては個人的に微妙だなーとか(作り手として利用したことはないからしらない)
  • 関数型プログラミングの今昔(仮) の場合は、発表の特性上、「事前に資料公開できない(しないほうがよい)典型的なパターンだなぁ」とか
  • よんたさんが、"事前に似たような発表があった"、"発表時間がちょっと短くなった" ことにより、当日も修正していたなぁーとか
  • 継続開発のススメ Erlang/OTP 編 の場合、gistのみの発表資料って珍しいわけですが
    • 見た目のかっこ良さや派手さはない
    • あとから読みやすい & 作る本人が簡単につくれるという点ではとてもメリットがある
    • ustream視聴者(もしくは後ろのほうの席の人?)から、「文字が小さくて見えない」という声があり、そこは明らかにデメリットだったなぁ

とか。もちろん、発表自体やその内容はみな素晴らしかったわけですが、

プレゼンテーション資料やツール」という視点を中心にみるとこういう見方ができるなーという話です。




ところでちょっと話変わって、自分は

超簡単にかっこいいSlideを作れるサイトをつくったよぉーー

というエントリーを書いたことがあり、今もこのサイト動いています。

などを実現したものです。しかし欠点として

  • pdf出力できない => 変換して slideshare にuploadしたくてもできない
  • 一つのファイルとしてそもそもローカルに保存できないから、オフラインで見るの絶望的
  • Google App Engineのサイトが落ちたら死

などあります。

自分は何度かこれで発表した経験があります。(Scala会議の際はこのツール発明する前)

ほとんど聞かないですが自分以外には、りりろじさん が、 #rpscala のときに使ってくれていたような。



まぁだいぶ長くなりましたが、こんなかんじです。もっとたくさん勉強会の発表聞いて、自分ももっと発表うまくなりたいです。

似たようなテーマでみなさん思うこととか、「自分はプレゼンの際こういう工夫をしている!」というこだわりがあれば、このblogトラックバック送ってblog書くなり、twitterで反応くれると有りがたいです。

*1:あのツールってpdfも生成できるの

2012-05-08

Scala の vim や emacs などの、エディタ用のシンタックスハイライトのためのファイル

| 05:54 |  Scala の vim や emacs などの、エディタ用のシンタックスハイライトのためのファイル - scalaとか・・・ を含むブックマーク  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があるならばそこから引っ張ってきてもいいと思います

*1: それと、例えばvim用のものなどは自分がみる限りでも、そこまで色々よしなしにやってくれるわけではなく、カスタマイズのやりようがあるし

2012-04-18

sbaz

| 00:05 |  sbaz - scalaとか・・・ を含むブックマーク  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 などの、エディタ用のシンタックスハイライトのためのファイル

についても、別に書いておきました

*1:誰か説明書いて・・・。まぁおそらく、sbazが使われてないし必要ないというのが原因ですが、そういう結論に至った詳しい経緯は知りません

2011-12-17

iPadでソースコードを読むためのサイトをつくった

| 00:32 | iPadでソースコードを読むためのサイトをつくった - scalaとか・・・ を含むブックマーク iPadでソースコードを読むためのサイトをつくった - scalaとか・・・ のブックマークコメント

追記:

ダブルクォート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タブレットでもなんでもいいです。

簡単に内部の仕組みを説明すると

  1. ユーザーが入力した、ソースコードのzipのURLを受け取る
  2. GAEのサーバー側でダウンロード
  3. それをサーバー内部で解凍
  4. shjs http://shjs.sourceforge.net/ というシンタックスハイライトのためのJavaScriptライブラリを使って、(可能な拡張子ならば)シンタックスハイライトされたhtmlに変換*1 *2
  5. それを再びzipに圧縮する
  6. 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こんな感じ↓

f:id:xuwei:20111218002212j:image

f:id:xuwei:20111218002211j:image

そして、あとそれに関連して、JavaScriptでgithubのAPI叩いて、watchしているrepositoryの一覧表示して、ついでにそのdownload用のリンクを追加したものをこないだ作りました

http://xuwei-k.github.com/watching_repositories

https://github.com/xuwei-k/xuwei-k.github.com/blob/79dc57ac5dff628538e0b698bc4cf3ff1dba42f7/watching_repositories.html

このあたり で、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が異様に長くなったりしてェ・・・(´・ω・`)

*1: ついでに行番号を雑にくっつけている

*2: このとき、明らかに大きすぎるファイルとかバイナリっぽいファイルはフィルターして勝手に除いてしまっている

2011-10-14

HerokuでScalaやろうとしたら、すごくはまったけど、とりあえずHello worldできたっていう話

| 20:09 | HerokuでScalaやろうとしたら、すごくはまったけど、とりあえずHello worldできたっていう話 - scalaとか・・・ を含むブックマーク HerokuでScalaやろうとしたら、すごくはまったけど、とりあえずHello worldできたっていう話 - scalaとか・・・ のブックマークコメント

10日くらい前にHerokuでのScalaのサポート発表されましたよね

http://blog.heroku.com/archives/2011/10/3/scala/

http://devcenter.heroku.com/articles/scala

herokuも無料枠あるわけだし、とにかくやってみよう(・ω・´)というわけで、やろうとした・・・・がしかし!

そしたらナカーマが

この時点で数時間格闘していたわけですが、悔しくて諦めがつかずその後も頑張る・・・(´・ω・`)

なんか原因わかったっぽい?

結論から言うと、(推測があっていれば) 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

というように、接続数の設定(?)をやらないと、サンプルの手順の通りやっただけでは動かない気が・・・?その辺の設定の概念とか(無料枠の場合の)上限とか全然把握してないので勉強しないと・・・

*1:これ実際にローカルに吐かれていたファイル

*2:targetの下にstartというファイル名で生成される

*3:もしくは、git pushのときの、gitのhookでなにかやってる?

*4:sbtには、以下のように、uriというメソッドによって、github上のプロジェクトを直接参照できる機能がある

*5:いやしかしこれ色々作りが雑なきがしなくもないがががが