謎言語使いの徒然

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

Tips

Java8 の Stream が物足りない人たちへ

www.vavr.io 言ってみれば、Scala 並の Collection を Java で提供するライブラリ。 何がいいって、Tuple とか Either 型もあるから、クソッタレな null や throw とおさらばできる。 その昔 javaslang (java.lang があるなら俗語があってもいいよね)と名…

引数パースライブラリの SCOPT(3.6.0) 使ってみた

紹介するのはこれ github.com 依存はこれだけ libraryDependencies ++= Seq( "com.github.scopt" %% "scopt" % "3.6.0" ) で、引数を格納するクラスをこんな風に用意して import java.io.File case class Config(javaDocXml: File, junitResultDir: File) パ…

JavaDoc を XML で吐き出すメモ

やりたい事が何かと言うと、外部プログラムにおいて、Java クラスのリスト取得と、そのドキュメントを引き抜きたいと考えた。 しかしながら、単純に javadoc のコマンドだけ実行すると、HTML ファイルが出てくる。 これは JavaDoc コマンドの仕様であり、基…

くたばれカーゴ・カルト・プログラミング

何? Wikipedia によると。 実際の目的には役に立たないコードやプログラム構造を儀式的に含めておくプログラミングのスタイルである。カーゴ・カルト・プログラミングは主に、プログラマが解決しようとしているバグか解決策のいずれかかまたは両方を理解し…

1 クラス 1 機能、1 メソッド 1 処理の徹底

どういう事? 名前の通り、クラス設計において、1つの機能は1クラスとして用意します。 また、1機能の実現もまた手続きがありますので、それら手続きも基本的にクラス、メソッドとします。 さらに、手続きの中でもループして書き換えるとか、なんらかの値…

オブジェクトの状態は作らない

ここで言う状態とは、クラス変数と振る舞いの状態を意味します。 例えば、クラス内の特定のフラグが true となったらメソッドの挙動が変わるなどです。 状態とは? Java で例えれば、Closable インターフェース実装クラスなんかがそれに当たります。 リソー…

設計はトップダウンとボトムアップ

設計のトップダウン コードが設計だとしても、全ての設計が不要になるわけではない。 もちろん、Excel 方眼紙に書いた誰も読まないコード書いた方が早い設計書ではない。 まずは機能設計までと名前空間(パッケージやディレクトリ構成)だ。 何の事はない、…

車輪の再発明は避ける

プログラマなら何度も聞いた筈。 でも、実際に車輪の再発明って結構やってるのでは? 車輪の再発明とは? 何のことはない、同じようなものを何回も書く事をいう。 例えば、AJAX API を作るという場合なら、XML/JSON でシリアライズ/デシリアライズの環境を整…

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

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

AmazonEC2 上に、Redmine 2.6.5 を構築したメモ

2017/6/15 : 流石に陳腐化したので 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東北ずん子)が起動している状態で起動し、チェックボックス入…