Skip to content

Instantly share code, notes, and snippets.

@kaakaa
Last active March 8, 2016 03:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kaakaa/6fb1de02ecef9f275bb1 to your computer and use it in GitHub Desktop.
Save kaakaa/6fb1de02ecef9f275bb1 to your computer and use it in GitHub Desktop.

ppt-museum



What's the ppt-museum?

  • PPTGalleryの再発明
  • パワポ資料のアップローダー
  • Web上でスライド資料を見ることができる

Why Do I need ppt-museum

  • 添付資料をダウンロードしてファイルを開くのが手間

    • 資料が閲覧されない機会損失
    • 参照されない資料作成へのモチベーション低下
  • PPTGalleryの問題点

    • LibbrrOffice, ImageMagick, GhostScriptなどの重目のミドル依存により環境構築が辛い
    • 稚拙なRuby, jsコードが辛い

Requirement for ppt-museum


あーきてくちゃ-(全体)


structure


Docker / Docker-compose

  • なしこぎさんが楽しそうだったので
  • コンテナ作って壊してが高速なので、マジ便利
    • 普通に開発のDBサーバとかで使っても良いと思う
  • docker-compose.ymlも直感的で書きやすい
    • ENTRYPOINT / COMMAND 辺りはちょっと難しかった

soffice / jodconverter

  • ppt/pptx -> pdf 変換用

  • sofficeはOpenOfficeとかLibreOfficeをインストールすると入るlinuxでのofficeツール管理プロセス?

  • --accept="socket,port=8100;urp;" オプションを付けて起動すると、UNO(Universal Network Objects) Remote Protocolで通信できるようになる

    • OpenOfficeのSDKを使うと、URP通信使ったプログラムが組めるようになるらしいけど、情報少なめで結構辛そう
    • OpenOffice UNO | hiro345
  • JODConverterはurp経由でドキュメントの変換をしてくれるJavaツール

    • python版のPyODConverterもある
  • JODConverter2系ならスタンドアロンのWebアプリもあるので、今回はそれを使っている

  • sofficeとjodconverterのコンテナを分けたかったけど、sofficeで開放したportがホストから接続できなかったので、soffice起動時になんか設定が必要なのかも



あーきてくちゃー(WebApp)


webapp


Spark / jade4j

  • Sinatra/haml文化が染み付いてるのでSpark/jade4j (分散処理の方では無い)
  • ハマった記憶もないけど、jadeでどうしても納得できないことが…
each w,i in whiskeys
  if i % 3 == 0
    .row
  .col-md-4 #{w}
  • SwaggerでAPIドキュメント生成してみたいので、Jerseyで書きなおすのもアリ

Morphia / MongoDB

  • DB周り何使おうかだいぶ悩んだ
    • 最初はDockerHubでダウンロード数がそこそこ高かったRethinkDB使おうとしたけど、ORM(ODM)なくて面倒だったので、Monogにシフト
    • 今後のcontributeを考えて国産のDoma(MySQL or Postgresも考えたけど、SQL書けねぇwww
  • Morphia使うとMongoにpackage名含めたclass名まで含まれるので、リファクタリングすると大惨事の危険ががが
    • 回避するオプションとかありそうな気もするけど…
  • あらかたDB構造決まったらMySQLとかに移行したほうが良いのかなぁ…
    • DB設計してくれる人募集

Redis

  • 必要無かったけど、負荷分散とかこうやんのかなー?と思いつつ、サムネイル配信用として実験
    • => DB複数使うとトランザクションがメンドイので排除しました

Apache PDFBox

  • PDFファイルから1ページ目をサムネ化するために使用
  • 1.x系だと日本語が文字化け…。2系にしたら直りました。

pdf.js-controller


etc

  • akihyro/yaml-resource-bundle: Java ResourceBundle for YAML format.
    • ResourceBundleをyamlでかける
    • 階層構造も表現できるようなので、ちょっと便利かも
    • ResourceBundle.Controlというのを初めて知った
  • multipartでファイルを受け取ってbyte[]化するとき、commons-ioのIOUtilが必要そうだったけど、SparkがIOUtil持ってた
    • Sparkさん、なかなか便利だなぁ
  • テスト書き始めて、EqualsBuilder的なのが欲しいがためだけにlombokを入れてみたりしている

でぷろい


structure


  • Travis最強説
    • DockerHubへのPushが成功しているように見えて、Pushできてないのは何故なんだぜ?
travis_time:end:1644641c:start=1457195427271991090,finish=1457195427292576144,duration=20585054
�[0Ktravis_fold:end:after_deploy.6
�[0Ktravis_fold:start:after_deploy.7
�[0Ktravis_time:start:00d480dc
�[0K$ docker push $REPO
The push refers to a repository [docker.io/kaakaa/ppt-museum-web] (len: 3)

PPTGalleryからの追加機能


PPTGalleryからの移行

  • PPTGalleryはDBとか使わず、ディレクトリとファイルで管理してます
    • アップロードしたファイルはpublic/uploads/yyyyMMDDhhmmss_${title} のディレクトリに格納される
    • .metaファイルに資料の情報を書き出している
      • {"filename":"mongodb_tsurugi_20160223","ext":"pptx","created_at":"20160223140735"}
  • public/uploads ディレクトリ内からコマンド叩くと、一括でppt-museumにアップロードしてくれるバッチを作成(予定)

コメント

  • 雑多。
    • jquery.ajaxを使ってPOST/GET
    • コメント付けれるようにすると、ログインシステム作りたくなるけど、まだそこは我慢
  • イイネボタンも付けたいなぁ

ロードマップ(というか課題、というかやりたいこと)


DB設計

  • DB設計が雑多なので辛い
    • スライド削除する時にSlide / Document / Comments / Thumbnail のすべてを削除しなきゃいけない
    • サムネイルをnginxに配信するようにすると、DBとファイルでトランザクション組まなきゃいけない
  • DB設計してくれる人募集
    • 今はMongoDB & Morphiaでやってるけど、特にこだわりは無い
    • Dockerなのでイメージ名書き直すだけで、DB環境構築気にしなくていい。すごい。

Web周りの整備

  • コメントとかスライドが追加された時にWebSocketでNotificationしたりできると良いなぁ
  • スライド画面で全画面プレビューとかうさ亀とか
    • 全画面ビューはslideshareにも無いけど、あった方が嬉しいんだよなぁ
  • コメント画面の改良とかLikeボタンとか
    • ログインシステムも作るべきな気がしている

デプロイ周りの整備

  • webappをTravisCIからGithubのリリースページにコミットするのはできた
    • さらにDockerイメージ作ってDockerHubにコミットできるようにする
  • 以下が課題
    • docker-composeのプロジェクトに機能テスト追加する(Capybara/turnipを施行中)
    • docker-composeのプロジェクトにコミットするとPaaSにデプロイして、sandbox(お試し)環境立ち上げてくれるもの(無料でお願いします)

おわりに


時間をください

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment