開発

JWT 認証のメリットとセキュリティトレードオフの私感

2018/9/25追記: https://gist.github.com/issm/63889b931b8c658f23634070b64f8b23 も参考になるかも。 あと、以下の議論は『セッション』の意味するところに認識違いがあるのかもしれない(認証継続の意味でのセッションと、ステート保持機構としてのセッショ…

Java (JCE) で AES 暗号化するときの PKCS#5 の実態は PKCS#7 なのか?

結論 JCE (Java Cryptography Extension) の AES/CBC/PKCS5Padding のパディングは、実際には PKCS#7 でパディングしている。 (少なくとも Oracle Java8_141 環境下では) 経緯 Java で AES 暗号化を扱う機会があり、ググっていたところ AES/CBC/PKCS5Padding…

XBee 送信ステータス 0x26 の意味

XBee でブロードキャスト送信していると、その送信ステータスで 0x26 が返ることがあるんですよ。公式リファレンス によると、 0x26 = Broadcast source failed to hear a neighbor relay the message ということで、ご近所がリレーしたメッセージが聞こえな…

XBeeの通信チャンネルの指定の仕方

2016/9/12 修正 当初 S2C で ch 26 が使えないとしてましたが対応しているようです。 XBee and XBee-PRO ZigBee RF Modules - Digi International Channels, Zigbee - Digi Developer 元記事 XBee ついでなので、XBee ZB S2C が使う通信チャンネルの指定の仕…

Arduino + XBeeシールド + XBee で勝手にリセット

Arduino + XBee ZB S2C で遊んでて、時々勝手に Arduino がリセットするので何故だ、ということで。結論を先に書くと、XBee のハードフロー制御動作と XBee シールドの回路の影響で、フロー制御がかかるとリセットしますよというお話。 環境は Arduino Uno R…

シーケンス番号の連続性チェックのやりかた

UDP パケットとかドロップが起き得るデータにシーケンス番号を振っておいて、受け側でドロップがないか検査したりすることはよくあると思いますが、そのよくあるはずの検査アルゴリズムの知識がなかったので、頭をひねった結果をメモ。 int[] seq = new int[…

Listen 0.0.0.0 in Java

Java で Socket Listen するときのアドレスを InetAddress.getByName("0.0.0.0") で与えると、 IPv4 の 0.0.0.0 と IPv6 の [::] の両方を Listen しちゃって、v4v6の両方で接続できちゃう ようになるような(今更)

eclipse のデフォルト文字コードの変更

eclipse で開いて文字化け、「ふぁっきんms932!」と叫んだときに。eclipse.ini に -Dfile.encoding=utf-8を追加設定→一般→ワークスペース で変更する手もあるけど、そちらはワークスペース単位なので。「eclipseで開くのは UTF-8 に決まってるだろぉぉぉぉ…

InnerException の再スローには ExceptionDispatchInfo を使おう

単発タスク(Task.WaitAllとかで集約していないタスク)を使った非同期処理を扱うメソッドでの例外を投げる場合、 AggregateException をそのまま出すと、メソッドを呼ぶ側で InnerException をチェックしたりしないといけないので面倒です(面倒ですよね?…

C# の long は読み書き Atomic じゃないから Interlocked 使おう

複数のスレッドから触られる long 変数(64bit変数)の取り扱い。 Java メインの人は引っかかりそうなのでメモ。Java ではできる「volatile long」が C# では未サポート(コンパイルエラーになる)なので、 long 変数への Atomic な読み書きをするには読み書き…

TcpClient#Connect のタイムアウト制御

TcpClient でコネクションを張る際の接続時タイムアウトをユーザコードで任意に指定しようとすると、次のようなコードが今風(C# 5.0 以降風)なのだろうか? try { int timeout = 接続タイムアウト(ms); TcpClient client = new TcpClient(); Task con_task =…

C# 非同期メソッドを作るにあたり、例外が出るタイミングでハマったメモ

通常のメソッドを非同期化しようとしてハマった罠。 普段 C# を使いこんでる人は既知だろうからスルー推奨。次のような感じのコードで hoge を非同期化しようとする場合、 void Main() { try { hoge(); } catch (Exception e) { ※ 例外処理 } ※ 続きの色々な…

Commons CLI でソートせずにオプション一覧を出力する

Commons CLI で設定したオプションをソートせずに help 表示・出力する方法。HelpFormatter#setOptionComparator に null を渡せばソートが無効化される。HelpFormatter のデフォルトでは、 Options に設定したオプションが通常の文字列順序にソートされて出…

JSON の Jackson が勝手に Stream を close してしまう問題

問題 JSON ライブラリ Jackson の ObjectMapper を使ったシリアライズ・デシリアライズで、Stream や Reader/Writer を対象にしたメソッドを使うと、そのStream, Reader/Writer が自動的に close されてしまうので、再び読み書きしようとした際に IOExceptio…

Java InputStreamReader、 Windows でのデフォルト文字コード

Java の InputStreamReader、 Windows 環境ではデフォルト文字コードは UTF-8

Gradle で外部設定ファイルを使ってデフォルト設定を上書きする

build.gradle 内でデフォルト値を設定しておき、 gradle.properties の設定値があればそちらで上書きする。build.gradle の頭のあたりにデフォルト値と gradle.properties からの読み取りコードを以下のように書いておく。 configDir は def なり ext { } な…

Gradle でタスクの途中で中断させる方法

質問『Gradle のビルドスクリプトで、処理環境が整ってないとかでタスク途中で中断するにはどうすればいいの?』答え『例外投げろ』例えば、実行環境は Java8 に移行済みなんだけれど、大人の事情の都合で Java7 環境向けのコードを出さないといけない場合に…

Could not fetch model of type 'EclipseProject' using Gradle distribution 〜 エラー

Could not fetch model of type 'EclipseProject' using Gradle distribution 'http://services.gradle.org/distributions/gradle-2.6-bin.zip'. → \.gradle を削除してみよう eclipse + buildship で、Gradleプロジェクトを新規で作ったりインポートしたり…

Gradle でソースの一部を除外した jar ファイルの作り方

Gradle で Ant の jar タスクで言うところの exclude のやりかた。 task jarTare(type: Jar) { baseName = 'Tare' from sourceSets.main.output exclude('jp/ne/hatena/d/samples/shell/**') } baseName は出力する jar ファイルのファイル名。 src/main/jav…

Eclipse Gradle plugin の Buildship が依存ライブラリを解決してくれない問題

いまさらながら Gradle に手を出しはじめたので、コマンドラインでちょこちょこと弄ってみた後、Eclipse + Buildship plugin な環境でインポートしたところ、依存ライブラリが解決されない。 maven の m2e 環境のように自動的に依存ライブラリダウンロードし…

Ubuntu 14.04 64bit に android NDK r10c を導入する際の問題と対処

android NDK でネイティブなのを android に移植しなければいけなくなったので、 Ubuntu 14.04 64bit を VMware に入れて、 NDK 環境を作ろうとしたんですよ。そうするとね、 $ wget http://dl.google.com/android/ndk/android-ndk-r10c-linux-x86_64.bin $ …

jQuery Mobile のダイアログの閉じるボタンを非表示にする

ダイアログを構成するブロックに data-close-btn="none" をつける <div id="hogehoge" data-role="dialog"> を <div id="hogehoge" data-role="dialog" data-close-btn="none"> こんな感じで。jQuery Mobile 1.4.3 で確認</div></div>

git : 「unable to determine upstream svn information from head history. perhaps the repository is empty」

今日のはまった。git svn でやってきてた trunk ブランチにワークブランチから merge して、Egit経由の commit -amend でコメント直してコミットログを整えていって、を繰り返し。 さて git svn dcommit 。とすると。 unable to determine upstream svn info…

CAKE.js 弄っていたらテキストが描画されないバグに遭遇した

(2012/9/27 追記あり) Canvas 処理ライブラリの CAKE.js 使っていたら、Chrome でテキスト描画されないバグに遭遇したのでメモ。結論:これのComment#4のパッチを当てて回避すべし。 2012/9/25 時点で trunk に置いてある cake.js (r76 by crgodsey on Jul 2…

jQuery 1.7.1 ajax で Component returned failure code: 0x805e0006 エラー

jQuery で Cross-Origin な ajax リクエスト(CORS)をしようとしたところ、 エラーハンドラ(error / function)の errorThrown に Component returned failure code: 0x805e0006 が上がってくる。 結論から言うと Firefox に NoScript の類を入れていたらた…

JavaとXMLと名前空間

XML を DOM で扱う場合、 DocumentBuilderFactory#setNamespaceAware(true) で名前空間が有効になる DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); DocumentBuilder builder = factory.newDocu…

HTML5 File API の挙動メモ

ちょっとさわってみた HTML5 File API の挙動メモ chrome だと file:// スキームで開くと FileReader が動作しない。 error.code == 24が返るらしい。 HTML5で使えるFileReaderでファイルを読み込もうと思ったらChromeで失敗したけどhttpでアクセスしてなか…

Jetty8で作るWebSocketチャット(実行編)

最後は実行編です。まず、サーバを立ち上げます(classpathは先に通しておいてください)。 > java WebSocketTest 2011-10-18 18:29:04.406:INFO:oejs.Server:jetty-8.0.3.v20111011 2011-10-18 18:29:04.517:INFO:oejs.AbstractConnector:Started SelectCha…

Jetty8で作るWebSocketチャット(ブラウザ側編)

前エントリに続いてブラウザ側の実装について。こちらは単純ですね。 WebSocket の有無を確認して、使えるなら WebSocket の URL を指定してコネクションを開く。 後は、メッセージが届いたら div ブロックを追加してメッセージ表示。送信ボタンが押されたら…

Jetty8で作るWebSocketチャット(サーバ側編)

Jettyをサーバに使ったWebSocketベースのチャットサンプルのようなものを作ってみた。ターゲットは Jetty 8 と Firefox7, Chrome14。 WebSocket のバージョンは draft-ietf-hybi-thewebsocketprotocol-10 になるはず。 (WebSocket(Wikipedia) の実装状況参…