謎言語使いの徒然

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

Tips

DI 入門者向けの話(DI が生まれる背景)

[日記][Tips]DI 入門者向けの話(DI が生まれる背景) Dependency Injection 日本語訳で、外部依存注入の話をする。 前提知識 オブジェクト指向には多態性なるものがある。 これは、Java でいうところのインターフェースに依存する作りをすることで、その実…

MyBatis の定義がクソ面倒なので、生成を狙う

A5:SQL Mk-2 - フリーの汎用SQL開発ツール/ER図ツール .. 松原正和 使って作ったテーブルのマッピングを書くのがだるくなったので、自動生成を狙った。 まずはこんな感じの ER を書いて、CSV でエクスポートする。 一応設定は UTF-8 で吐く。 そうすると、a5…

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でも突っ込むだけでも…