読者です 読者をやめる 読者になる 読者になる

謎言語使いの徒然

適当に気になった技術や言語を流すブログ。

Playframework 2.4.x でセキュリティヘッダの設定など

まず前提として、Playframework にはフィルタという機能がある。 Playframework 2.3.x 以下の場合は、Global オブジェクトにミックスインする形式をとっていた。 ScalaHttpFilters だが、Playframework 2.4.x 以降は、DI も含めて形式が変更となり、root パ…

AmazonEC2 上に、Redmine 2.6.5 を構築したメモ(AMI有)

AMI 好きに使って 下記で作った AMI を共有しました。好きに使って。 当たり前ですが、バージョンアップとか色々あっても保証しないっすよー ami-4001ac40 メールサーバは立ててないので、ご自分で立てて運用してください。 こいつは何よ? 普通に入れても発…

HTMLページをgithubに移したという話

ちまちまと自分の欲しくなったコンポーネントだけ作ってた az_ui ライブラリなんだけども、なんだかんだと更新が面倒になってきてた。 coffee/less コンパイルが手動 わざわざ手動デプロイ で、とうとうキレたので、github pages に移動したというお話。 git…

Playframework2.3、RequireJS と AngularJS を同時に運用してみる

それぞれがなんなのかは下記参照 AngularJS の入門をしてみる - 謎言語使いの徒然 Playframework2.3 で RequireJS 弄ってみる - 謎言語使いの徒然 で、特に難しい話とかはなくて。 build.sbt で Angular 読んで libraryDependencies ++= Seq( jdbc, anorm, c…

Playframework 2.2, 2.3 現状のおさらい。

まず最初に断っておく。現状(2014/08/25) 2.4 が RC 状態にある。 そして、2.4 には触れない事を断っておく。 Playframework2.2 おさらい 仕事で Playframework 2.2.3 を延々使ってると、新しいバージョンアップに疎くなるので、とりあえず乗り換えも視野に…

Webアプリで役立つセキュリティヘッダ

ということで片っ端から列挙 Cache-Control:no-cache を指定する。中途半端にキャッシュサーバにキャッシュされた挙句、関係ない人に漏洩する可能性があるので、キャッシュは禁止しておく。 X-Frame-Options HTML の frame を禁止する。デザイン上禁止すると…

Facebook 認証の設定

Facebook 設定ミス編 実際に本番環境にデプロイして、Facebook 認証をしようとすると、「指定されたURLは、アプリケーションの設定で許可されていません。」で散々エラー吐かれた。 これは、Facebook developers サイトの、下記項目を修正した。 AppDomains …

サーバに色々デプロイしようとしてハマった記録

Chef でローカル仮想マシン上に目的のサービスがデプロイできるようになったので、リモートサーバへのデプロイを実行してみた。 その時、かなり色々つまづいたのでメモ。 iptables は一時的でも切るしかない ssh ポート以外にも何かのポートを使っているらし…

Chef で CentOS に Playframework2.2.x アプリをデプロイする

CentOS5.10 で動作確認。多分 CentOS 6.x もそんな変わらない筈。 段階を踏もうか。 Play アプリをリリース用にコンパイルする Chef を使ってJavaを突っ込む Chef でデプロイ用 Cookbook を作って配置する 起動スクリプトを書いてデプロイする knife solo co…

CentOS5.10 の Vagrant box を作り直し

https://dl.dropboxusercontent.com/u/717203/centos5.10-final.box これ。 名称は変わってない。 キチンと halt とかその他が走るようになってる。 6/23 追記:メンテナンスだるいので削除しました

サービスデプロイのテスト環境を作るか

そろそろアプリをデプロイしようかと思ったのだけど、実はここで一つ問題が発生。 いや、問題と言うほどの問題ではないのかもしれないが、どうせ試行錯誤してセキュリティ的にアレな状態がそこそこ長く続きそうなので、仮想環境できちっと手段を確立してから…

Playframework へのアクセス全部に共通のセキュリティヘッダを食わせる

まぁやってる事は ServletFilter とあんまり変わらない。 まずは適当にフィルタを作る。 コピペで安心はモットーです(2.2.1 で確認他のバージョンは知らん) package utils import play.api.mvc.{RequestHeader, Filter} import scala.concurrent.Future impo…

WebStorageの使い方

OfflineStorage が HTML5 に入ってきて、色々できるようになっていて、一番多くのプラットフォームで扱えるのが KVS のようで、これを早速使ってみる。 http://www.html5rocks.com/ja/features/storage 対応できないデバイス?あきらめてくださいw storage =…

ログイン必須のアクション定義

ログインしてなかったら…という処理は皆書く筈。 Playframework 2.1 あたりから Security クラスが出来たらしい。 当然 2.2 でも使えるのでメモ。 package controllers.helpers import play.api.mvc._ import controllers.routes trait LoginController { se…

JavaでActorを書く

並列で処理させるには複数のインスタンスを作る必要がありますが、ざっくりActorを実装。 Actor ってなんぞや? http://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%AF%E3%82%BF%E3%83%BC%E3%83%A2%E3%83%87%E3%83%AB アクターモデルのこと。 Simla とか Smallta…

暗号化を利用する

といってもハッシュを作るだけですが、Playにはcryptが存在する ライブラリは play.api.libs.Crypto で、基本的に下記の定義がある 不可逆(ハッシュ化) sign(String):String sign(String, Array[Byte]):String 可逆 encryptAES(String):String encryptAES(St…

定期実行処理を書く

一番手っ取り早いのは Global の onStart に仕掛ける方法 import play.api.libs.concurrent.Akka import play.api.{Application, GlobalSettings} import scala.concurrent.duration.DurationLong object Global extends GlobalSettings { override def onSt…

TwitterBootstrap3 の概要を見てみる

というかいつ出たのか、、、気づきませんでした。 ということで早速弄ってみる。 URL 現状は厳密にはRC1のようでした。 目についた変更点 mobile first (モバイル優先、わーい) IE8以上必須, Firefox3系はサポート打ち切り CSS は responsive もひとまとめ…

テンプレート配置を階層構造化する

公式では view 直下にしか配置されていないが、複数階層を用意すると、下記の様なクラスにコンパイルされる。 import views.html.path.to.class.templateName

Ubuntu上にPPTPでVPN鯖をざっくり設定

昨日 IPSec over L2TP やろうとして設定で詰まったのでPPTPでごまかした。 こちらは比較的楽でした。 sudo apt-get install pptpd で鯖インストール /etc/ppp/pptpd-options を弄ってネットワークの設定を済ませる ms-dns にルータのIPでも突っ込むだけでも…

Scala で markdown パースするだけではなく、出力を少しいじる

前回 knockoff なるライブラリを紹介したのですが、ちょこっと内容を変更してみます。 knockoff でパースした型というのは def knockoff( source : java.lang.CharSequence ) : Seq[Block] = { なんて定義になっており、要は Block と呼ばれる解析データのシ…

markdown をざっくり

というか正直量が少なすぎて、書くべきか迷った。 まずはいつぞや書いた Play 記事を markdown で用意。 SBT の libraryDependencies に "com.tristanhunt" %% "knockoff" % "0.8.1" 突っ込む 下記のコードを突っ込む import java.io.PrintWriter import sca…

evolutionsを利用する

conf/evolutions/defaults ディレクトリに「(数字).sql」ファイルを配置します。 この数字順に実行されますので、テーブルの作成等をここに記述していきます。 尚、コメントで特別なもので、下記があります。 # --- !Ups # --- !Downs Ups : 新規にアップデ…

RSS フィードを拾う

使うのは ROME というライブラリ。http://mvnrepository.com/artifact/rome/rome/1.0そのまま sbt に "rome" % "rome" % "1.0" としておけば利用可能。 コード的に難しいものはなく、 import com.sun.syndication.io.SyndFeedInput import com.sun.syndicati…

WS API でWeb上のデータを引っ張る

HTTP なコマンドで拾えるものは大概拾える。 import play.api.libs.concurrent.Execution.Implicits._ import play.api.libs.ws.{Response, WS} import scala.util.{Failure, Success} object RssLoader extends Logger { def firstUri(uri:String) = { def …

フォームエラーをまとめて表示したい

Playframework2.1.1 のフォームに値をバインドし、エラーを表示する際に、エラーのみを一覧表示で取得したい場合がある。 その方法を探してみた。(そのまま今作ってるやつ) val userCreateForm = Form( tuple( "account" -> nonEmptyText(6, 16).verifying(M…

Form をテンプレート上でバインドする

先ずはフォームヘルパーを使用します。 @helper.form(action = controllers.routes.User.create, 'id -> "user") { @* any contents here */ }ここにフォームをバインド下HTMLコンポーネントを配置していきます。テンプレートヘルパーは /framework/src/play…

Playプロジェクトを作成する

作成したいディレクトリまで移動し、下記のコマンドを実行する。 play new [プロジェクト名]するとウィザードが起動しますので、順に回答していきます。 この例では、デフォルトディレクトリに Sample というアプリケーションを作成しています。 azalea@samp…

Form を使う

Playframework にはPOSTデータ等を簡単にバリデーション、及びオブジェクトマップする方法があります。先ずは簡単にフォームを使いましょう。 import play.api.data._ import play.api.data.Forms._ val loginForm = Form( tuple( "email" -> text, "passwor…

Playframework の Form メッセージ多言語化

この Forms を使用した時のバリデーションエラーメッセージや、画面にバインドしたときのメッセージを多言語化する場合の方法。 まず、このフォームバリデーション定義がどこにあるかというと、 ディレクトリ : play-2.1.1/framework/src/play/src/main/scal…

Playframework の Akka 設定を読み解く

※ Play2.0.3 時代の古いやつです Playframework は Akka を利用しており、性能に直結してる。 もし、CPUやメモリに余裕があり、更に大規模なアクセスに対応したい場合は、設定を上書きできる。application.conf で設定可能だが、Playのデフォルト設定は下記…

PlayFramework をインストールする

Playframework 2.1.1 をインストールする手順です Java6 以上を入れます(この詳細はJavaの物を探してください) Play Framework - Build Modern & Scalable Web Apps with Java and Scalaから2.1.1 をダウンロードしてきます 適当なディレクトリへ解凍し、パ…

Playframework 2.1.1 ビルドとテストを非同期に

Playframework でそれなりにプロジェクトの規模が大きくなると無視できなくなるのがビルド時間、、、。 特にUT走らせるとなると、ビルド時間が指数関数的に増えること請け合いです。 しかもコンパイル中はソースの改修もなにもできないという、、、、。後IDE…

Playframework2.1.0 で ComboBox のテンプレートを使ってみる

無いかなーと思ってソースコード読んでて見つけた。 公式ドキュメントに乗ってない(まだ書いてないだけ?)のでこれはみんな難儀するだろうなーということで共有。 /play-2.1.0/framework/src/play/src/main/scala/views/helper この辺開くとテンプレートヘ…

Akkaの勉強をやってみる 2

うん、Scala2.10あんま関係ないのでタイトル変更。午後やるって言って遊んじゃった(主にPSO2)ので遅かった。 先ずコードはこんなん import akka.actor.{Props, Actor, ActorSystem} import java.util.Date import org.slf4j.LoggerFactory class SampleActor…

Akkaの勉強をScala2.10で行ってみる

先ずはsbtでscala2.10を設定。 依存とバージョン番号指定すればよさそう organization := "net.azalea" name := "Alla-sample" version := "0.1.0" scalaVersion := "2.10.0" description := "An JSON schema(http://json-schema.org/) access helper for sc…

Akkaの勉強をやってみる3

始めに断わっておきますが英語圏のネイティブじゃないんでドキュメント読んで拾った内容だけど間違ってるかもしれない。 Akka は動作階層を持っているらしい。 ActorRef MessageDispatcher MailBox(with MessageQueue) Actor(プログラマが実際に処理を記述す…

PlayFramework2.0x でファイルをストリーム転送する

実装そのものは大した問題ではなく、http://scala.playframework.org/documentation/2.0.4/ScalaStreamなわけなのだが、どれだけ速度が出るものなのか確認してみる。設定をこう書いて、 directory.path="C:/Users/XXXX/Pictures" directory.extension="jpg"…

VOICEROID+でSkypeメッセージ喋らせる(9)

http://www.white-azalea.net/VoiceroidRunner.zip何気にアップデート+ プラグインの動的ロードに対応SourcePlugins.dll 参照に入れて abstract class SourcePluginBase を継承して作る。 (コンストラクタはデフォルトコンストラクタのみだが、、、) でき…

VOICEROID+でSkypeメッセージ喋らせる(7)

http://www.white-azalea.net/VoiceroidRunner.zipちょこっちょことUpdateしました。 メッセージの再生待ち時間を調整できるようになりました Voiceroid の再生完了をどう待てばいいのか分からなかったので、文字数×N+固定ディレイで計算しています。この係…

VOICEROID+でSkypeメッセージ喋らせる(8)

多分Blogで直接どうこうするのはこれが最後な気がする。http://www.white-azalea.net/VoiceroidRunner.zip細々とバグフィックス 置換定義が削除できない問題の修正 2 キャラ同時に走らせると片方が喋らなくなったりする問題の修正 上手くSkypeのメッセージを…

VOICEROID+でSkypeメッセージ喋らせる(6)

需要がどんだけあるか不明だけど取り敢えず晒してみる。http://www.white-azalea.net/VocaloidRunner.zipファイル名がVOICEROIDじゃなくてVocaloidなのはご愛嬌。 SkypeとVoiceroid(結月ゆかりor東北ずん子)が起動している状態で起動し、チェックボックス入…

VOICEROID+でSkypeメッセージ喋らせる(5)

それぞれのVOICEROIDをスレッド化して、相互に干渉なしで喋れるようActor作った。 namespace net.azworks.actor { abstract class ActorBase<T> { public T State { get; set; } public void SendMessage(T message) { this.allMessages.Enqueue(message); lock</t>…

VOICEROID+でSkypeメッセージ喋らせる(4)

さて、今度はSkypeだ。 Skype 自体にCOMインターフェースがあるようだがSkype4COMというライブラリもあるらしい。 勝手知ったるC#で使うなら使っといたほうがそらええわってことでSkype4COMを弄ってみる。 使いにくければCOM叩くよ。メッセージの受信 namesp…

VOICEROID+でSkypeメッセージ喋らせる(3)

無事東北ずん子もしゃべるものを作成。 喋ってる間に次の命令来たらどう対処すんべ、、、、ずん子はUIのステータスチャックで拾えるけど、結月ゆかりはどうしようかな using System; using System.Collections.Generic; using System.Linq; using System.Tex…

VOICEROID+でSkypeメッセージ喋らせる(2)

昨日の続き。SendMessage 先までは問題なくできたのだが、送るメッセージの問題で、273(WM_COMMAND)でコピペしかできなかった件。 キーボードイベントで操作しようとすると、ウィンドウをアクティブ化した上でイベント送信せざるを得ない、、、、とはいえ、…

VOICEROID+でSkypeメッセージ喋らせる(1)

注意:Windows8 以降だと、他のウィンドウへのアタッチはセキュリティモデルの仕様上できない場合があります。うん。棒読みちゃんにこれ入れればいいのは知っているのですが、Clipboardが何かあるたびに上書きされてしまって嫌だったので、自作してみる。 で…

Play でどうでもいいところでハマる箇所

Playframework http://www.playframework.org を使っているのだが、異様なまでにハマる箇所を一つ。 キャッシュが残って悪さする問題。特にテンプレート周りで良く発生する。コンパイル時にどうにも前回キャッシュが削除されず残って、CompileErrorを連発す…

Play2.0 で一部ハマったのでメモ

忘れると色々ヒーヒー言いそうなのでメモ WS.irl("http://localhost/sample/xxxx").withHeader("Content-Type" -> "text/plain").post(byteArray) でバイナリを自身のサービスにファイルを送りつけてもコントローラ側で val sendedBytes = sample.body.asRaw…

Actor と RemoteActor

アクターは基本的にはメッセージの受信に対してどう動くかという、Objective-CやSmalltalk的なオブジェクトの振る舞いをするスレッド。 内部的には、メッセージを「receive」で受け取り、処理をする。処理中に他のメッセージが来れば、そのまま「receive」可…