人生がRPGだったら

ふと思いついたのでメモしておく。 パラメータ 体力(HP) 体力の原資。時間経過・行動・外部からの刺激などにより変動する。0になると死ぬ。上限は体質改善で可能だが通常の肉体は年齢の影響を大きく受ける。 精神力(MP) 精神的な原資。時間経過・行動・外部…

java や kotlin でもポインタを扱いたい件

多角的に検証してないけどとりあえず思い付きをメモしてみた。状態を持つ Session オブジェクトを UI から操作する場合を考えてみる。Session が単一の interface を持つ場合は、特定状態では実行不可能なメソッドを叩くと実行時例外がスローされるように作…

Database Answers

Database Answers というサイトがあった。50以上の業界と1500以上のデータモデルが含まれているらしい。特定業界向けのシステム開発をする際のデータ構造や命名の参考になるかもですね。

interface 仕様をコードで記述する

とりあえず絵の餅を描いてみるwinterface 上に定義されている関数について、document に仕様を記述し、実装クラスに実装するというのは結構普通に行われるが、その仕様がほぼ純粋に複雑なロジックだった場合、以下のような問題がある。 ドキュメント中に書…

疑似コード(pseudocode)について

ふと思ったのでメモ。疑似コードをプロジェクトで正式に採用したことはないんだけど、要求開発のツールとしてドメインモデリングを採用する際に、インタフェース設計の後に一段階入れても面白いかも。予想されるメリットは以下: インタフェース設計のみより…

英語勉強法について

思ったことをとりあえずメモするプレイスホルダー。思い付きやネイティブのESL教師に聞いた方法など。 あらゆる学習法に共通する学習効果の法則。 最も効果が高いのは、学習前にできなかったことが学習後にできるようなるという学習。*1 感覚的に腑に落ちて…

validation と sanitization

ふと思ったのでメモ。validation/sanitization 済みであることを示す interface が結構便利。*11か所でも validation/sanitization を行う個所があるならオブジェクトとして扱う方向を考えたほうがいいかも。なぜなら validation/sanitization のロジックを…

robustness と correctness

robustness は要件として検討されるもので、robustness を要件に含めるという文脈でのみ correctness を検討する必要が出てくるんじゃないかと思う。また、基本的には robustness を要件に含めると複雑さや保守コストがかなり増す*1ので、よほど特殊な事情で…

The Wise Developers’ Guide to Static Code Analysis featuring FindBugs, Checkstyle, PMD, Coverity and SonarQube

zeroturnaround.com ちょっと古い記事だけどよくまとまっているのと彼ら自身の経験談でもあるのでメモしておくw ZeroTurnaround uses SonarQube for our Java projects JRebel and LiveRebel, as we find that it gives us the best combination of usefuln…

kotlin における例外について

ふと思ったのでメモ。 例外なくアーキテクチャレベルでの扱いとなり、アーキテクチャ設計書で解説されるべきとか。 java で言うところの検査例外は sealed class の戻り値で扱うとか。 検査例外のバケツリレーが発生するような場所はアーキテクチャレベルで…

kotlin における検査例外的なものについて

ふと思ったのでメモ。おいらは java では検査例外を結構気に入って使っていたが、kotlin では実行時例外しかないので微妙に困った。しかし、そもそも検査例外に満足していたわけでもない。基本的にはインタフェースメソッドの仕様はユースケースに近い考え方…

preconditions, postconditions and assertions

とりあえず思い付きをメモ。前提として、ゲームやツールアプリ開発にて、バグが発生しても動き続けるよりバグの発生自体を防ぐという方向性を想定。事前条件と事後条件チェックの面倒な点は、条件が満たせなかった場合に理想的には全部実行時エラーで落とせ…

AssertJ

近いうちに使ってみよう(`・ω・´) AssertJ / Fluent assertions for java

引数について

ふと思ったのでメモ。要約:インタフェースメソッドの引数はインタフェース設計の視点で決定されるべきであり実装の都合を持ち込んではいけないかもしれないしそうでないかもしれないがおいらはそう思うw。※サンプルを見やすくするため getter/setter は使…

package private についてふと思ったこと。

ふと思ったので自分用にメモしておく。思い付きなので深く考えずにとりあえず殴り書きするだけっす。あるオブジェクト内部の情報を外部に開示したくない場合に、情報隠蔽は有効な方法だと思われる。しかし、特定の相手には開示したいという場合もあり、その…

小規模システム開発の最終成果物とプロセス

小規模システム開発の最終成果物は、以下の2つだけ*1でいい気がするという妄想をメモしてみた。 チェックリスト形式の Prerequisites(Problem Definition, Requirements, Architecture) リリース直前にチェックリストを全てチェックすることにより、ソースコ…

Some programmers do know how to perform upstream activities, but they don't prepare because they can't resist the urge to begin coding as soon as possible. Code Complete: A Practical Handbook of Software Construction, Second Edition: Steve…

kotlin tips: 自己を参照される可能性のあるコールバックとか単一処理を複数のコールバックで扱うことについて

※とりあえず五月雨式にメモしておく。結論はまだない。 戻り値方式とクロージャ方式の例 下記の returnValue1.kt は、Model の関数が結果を戻り値で返しています。 // // returnValue1.kt // package returnValue1 import returnValue1.AppendResult.Correct…

AndroidでUIメソッド呼び出しの共通時刻を取得する

概要 UIスレッドから呼び出される処理全体で初期化やバケツリレー無しで共通時刻を用意したいなーという話。 下記のメソッド1~Nすべてでボタン押下時刻を共通時間として取得するとか。 ボタン押下 → onClick()実行 → メソッド1呼び出し → メソッド2呼び出し…

kotlin tips:extension function reference

kotlin のドキュメントに拡張関数参照の方法がさらっと書かれている。 あまりにもさらっと書かれすぎていて一度スルーしてしまったので、例を交えてメモしておくw If we need to use a member of a class, or an extension function, it needs to be qualif…

kotlin小ネタ:Handler#postDelayed()のextension function化

普通に Handler#postDelayed() を利用すると以下のようになり、結構見づらい。 mHandler.postDelayed( { println("postDelayed()") }, 2000) kotlinでは、関数の最終引数が関数の場合には、ラムダ式を括弧の外側に記述できる。 Higher-Order Functions and L…

やる気とかいろいろ

五月雨式なメモ。※『やる気』と『動機』は違う。以降、『やる気』という言葉は気分的な意味合いで使用する。 やる気という考え方がそもそもおかしい。『やる気が無いのでやらなかった』と『実力不足でできなかった』は同じこと。『やる気さえあればできる』…

kotlin小ネタ:Activity 関連の試行錯誤

Activity を扱う際の実験コード。とりあえず思い付きで作ってみた。 ユニットテスト重視版。 たぶんおいらのプロジェクトではこんなことやらんだろうけどw /** * Activity を扱う際のいろんなネタを詰め込んでみた実験コード。 * ※書式だけまとめたもので、…

kotlin小ネタ:initializer block や property initializer は可能な限り避ける

※あまり深く考えてないのでまだアイデアレベルのメモ。ちゃんと考えないと一般化はできないと思われる。initializer block や property initializer を利用する状況というのは、インスタンスが生成された状態、つまり this が参照できる状態で val/var の初…

kotlin小ネタ:クラス分割メモ

実用性未検証だけどとりあえずメモ。 平面上にメソッドとバッキングフィールドを持つメンバを点として配置する。 メソッドからバッキングフィールドを持つメンバへの参照関係を線として表現する。 相互に到達し得るパスが存在しないグラフ毎に別クラス化を検…

kotlin小ネタ:coding conventions メモ

実際のコーディングで考察した内容を五月雨式にメモ。おいら自身が理解できればOKという最低限の記述。出そろってきたら整理しましょう。 kotlin とか coding conventions とか無関係なメモになってるっすね、、、(´・ω・`) 演算子の優先順位を等価とみなし…

kotlin小ネタ:code arrangement rule メモ

kotlin の code arrangement に関するおいらの独自ルールメモ。IntelliJ IDEA の kotlin の rearrange code 機能については中の人が 2016-11-21付で以下のような回答をしてるので、実装は気長に待つのが良さそうですね。stackoverflow.com以下おいら独自ルー…

kotlin小ネタ:forEach から break っぽいことを行う

このようなコードを無理やり forEach でやろうと思った場合、 for (v in 0..1) { println(v) break } こんな感じになる。 // forEach からの break っぽいことを行う例 fun main(args: Array<String>) { fun foo() { // label は expression に設定する必要があるの</string>…

kotlin小ネタ:elvis operator から return する際ににまとまった処理を書きたい場合

// elvis operator, return, closure の実行値, という組み合わせ。 // この例では return で f2() の値が返る。 val value = next() ?: return run { f1(); f2() } // これでも大丈夫。 val value = next() ?: return { f1(); f2() }()

kotlin小ネタ:expression の値が null の場合のみ expression の値を変えずに処理を行う例

// オリジナル val currentValue = nextValue() if (currentValue == null) finish() // 等価コード1 val currentValue = nextValue().apply { if (this == null) finish() } // 等価コード2 val currentValue = nextValue() ?: { finish(); null }() elvis …

kotlin小ネタ:ある値が null の場合は null を、そうでない場合にはその値を用いて初期化された値を取得するサンプル

class Sample { private var mStringBuilder: StringBuilder? = null // letters が null の場合は null を、そうでない場合は letters.length で初期化された StringBuilder を生成する fun init(letters: String?) { mStringBuilder = letters?.let { Stri…

jsvc経由でTomcatを起動する際のタイムアウト設定

tomcat を jsvc 経由で起動する際に、コンテナ起動時にエラーが発生していなくても exit status が 1 になる現象に遭遇したのでメモ。 原因 tomcat の起動(全warの起動含む)が、jsvc 内部で SERVICE_START_WAIT_TIME 変数として指定された時間内に完了してい…

三項演算子のような if-then-else 処理

三項演算子のような if-then-else 処理 [ testの評価式 ] && 真の場合の処理 || 偽の場合の処理真の場合の例 $ [ "a" = "a" ] && echo "OK" || echo "NG" OK偽の場合の例 $ [ 1 -eq 2 ] && echo "OK" || echo "NG" NG

サブシェル内部の変数を参照しようとして失敗する例とその対策

6つのランダム値を作成し、その中の最大値を得るというスクリプトの例 失敗例 #!/bin/bash # このシェルでランダムな値を6つ作成して、パイプラインで while 文に渡し、 # while 文内部で最大数を取得する。 printf "%s\n" ${RANDOM}{,,,,,} | while read nu…

Muninメモ

参考情報 Munin Guide Munin 2系の本家情報。 Munin Wiki 本家Wiki。もともとはこのWikiがベースで、Munin Guide はここから派生したも。Munin Guide からもこちらへのリンクがそれなりにある。 Instant Munin Plugin Starter プラグイン作成系の書籍。おい…

なんでもメモ

2015-03-08 critical と warning を同時に扱う場合の munin のメール送信用コマンドwarning と critical でメール送信を分けると、両方が混在した場合に2通メールが来て煩わしいので、力技で1通にまとめてみた。munin.conf contact.alert.command mail -s "[…

Android開発用gradle環境 on debian

Windows 環境で NDK を扱うのはめんどくさいので、debian 上に gradle 環境を作成してみました。 OSのインストール OSのインストールは X60sとDebian - Be an Idealistic Realist 等を参考に適当にやりましょう。 javaのインストール java7のインストールを…

先祖クラスのコンストラクタでインスタンスを生成する方法

先祖クラスのコンストラクタでインスタンスを生成するサンプルプログラム import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; public class ConstructorForSerializationExample …

How to manage SQLite's database file names

SQLite の名前空間に関する問題 Android で SQLite を扱う場合、SQLiteOpenHelper を利用するのが一般的だと思いますが、その際にデータベースファイル名を指定する必要があります。*1*2データベースファイル名は同一アプリケーション内部で共有されるため、…

maven central に存在しない 3rd party 製 jar の扱い方

概要 ビルドシステムとして maven を使用している場合に、maven central に存在しない 3rd party 製 jar を扱う方法をいくつか考察してみました。 3rd party に頼んで jar を central repository にアップしてもらう 社内リポジトリに jar を deploy する ロ…

linux-x64用MySQLのインストール

参考情報 最新のディストリビューションはここからチェック http://www.mysql.com/downloads/mysql/ 今回の対象は mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz になります。 mysqlユーザーとグループの作成 groupadd mysql useradd -r -g mysql mysql 設定フ…

linux-x64用Javaのインストール

インストール対象のJavaを確認する http://www.oracle.com/technetwork/java/javase/index.html からダウンロード用のURLを取得する。 今回は http://download.oracle.com/otn-pub/java/jdk/7u71-b14/jdk-7u71-linux-x64.tar.gz を対象とする。 ダウンロード…

さくらのVPSへのDebianのインストール

概要 さくらのVPSにDebianをインストールし、最低限の設定を行います。 OSは Debian 7.0(Wheezy) を使用します。 参考情報 さくらのVPSへのカスタムOS(Debian)のインストール方法 Q:さくらのVPSで「Debian」を利用していますが、回線速度が遅くアクセスに…

MySQLでテーブルとカラムの文字コードを一括変更する

既存のデータベースの文字コードを異なる文字コードに変換した際のメモです。 留意すべき点 CONVERT TO CHARACTER SET を用いれば、比較的容易に DB と DB 内の全テーブルの全カラムの文字コードを変換できます。ただし、いくつか留意すべき点があります。 …

gmaven-pluginの日本語設定

私の手元で軽く動かした限りでは sourceEncoding の設定がうまく効かないようです。JIRAのステータスを見る限りは sourceEndoding 指定はバグ登録されていて既に fixed。${project.build.sourceEncoding} からの設定も対応されているようなのですが、、、。…

DebianとTomcat

Debian に Tomcat7 をインストールする。 事前準備 ビルドする必要があるので、事前にビルドに必要なパッケージを導入しておく。 yes | apt-get install build-essential インストール # 作業ディレクトリの作成 mkdir /tmp/tomcat-installation-working-dir…

X60sとDebianとJava

X60s 上の Debian に Java7 をインストールする。 # 作業ディレクトリの作成 mkdir /tmp/java7-installation-working-dir cd /tmp/java7-installation-working-dir # jdk-7u10-linux-i586.tar.gz のダウンロード wget --no-cookies --header "Cookie: gpw_e2…

X60sとDebianとMySQL

X60s 上の Debian に MySQL をインストールする。 32ビットなので MySQL は mysql-5.5.29-linux2.6-i686 を採用する。 参考情報 最新のディストリビューションはここからチェック http://www.mysql.com/downloads/mysql/ 設定ファイルの配置 /etc/my.cnf を…

Debianインストール直後

X60sとDebianとDebianとWPA-PSKとwpa_supplicantと固定IPに引き続き、インストール後の設定。 Debianのアップデート # resynchronize the package index files from their sources apt-get update # install the newest versions of all packages currently …

DebianとWPA-PSKとwpa_supplicantと固定IP

前回 X60sとDebian では無線 LAN を WEP で接続した。その時は出先で作業を行っていたのだが、仕事場に戻ってみたら無線 LAN が WPA-PSK 方式というオチ o...rzということで、今回は WPA-PSK 方式で設定してみる。 wpa_supplicant のインストール 今回は wpa…