2012年1月30日月曜日

SQLiteでアタッチした複数のデータベースに対してアトミックなトランザクションができるらしい

SQLiteについてチマチマ勉強中。 ホントに遅々として進まないですがね。 で、1データベースにつき1ファイルのSQLiteなんですが、ATTACH DATABASEで複数のデータベースを1度に扱えるらしい。 でもその場合アトミックなトランザクションではないよとの記述がありました。

で、「ちょっと古いドキュメントだな~」と思ってオフィシャルの方に行ったら自身ありげに「When multiple database files are modified within a single transaction, all files are updated atomically.」と書いてました。

斜め読みと言うか、そこしか読んでないですが、多分バージョンアップが繰り返される中で改善されたんでしょうねぇ。

検索結果の上位サイトに「アトミックなトランザクションではない」という記述がでてきたので、一応の投稿でした。 ちなみに、そのサイトの情報が古いままなのは、中の人が他のデータベースに興味を持ったからっぽいです。 よく読んでないけど多分そんな感じで。

java : 鍵の長さ256bitのAESを使う

2017年11月追記)

この投稿の内容は古い情報となっています。最新のjava9だとデフォルトのままでもAESの鍵の長さに制限はありません。 このページのサンプルコードもデフォルトのまま実行することができました。

また、java8の場合は古いバージョンはこの投稿の通りにjceが必要になります。 新しいバージョンのjava8の場合、jceに当たるファイルはインストール済みのようです。 設定ファイルの書き換えのみで鍵の長さの制限を撤廃できるのだそうです。

もし鍵の長さに制限がかかっていたのなら、java.securityというファイルで『crypto.policy』という項目を検索してみてください。 『crypto.policy=limited』と書かれていたのなら limited を unlimitedに変更、項目自体が無い場合は『crypto.policy=unlimited』と追加してみてください。 この辺かな?

  • java9 jre : ~\jre-9.?.?\conf\security\java.security
  • java9 jdk : ~\jdk-9.?.?\conf\security\java.security
  • java8 jre : ~\jre1.8.?_?\lib\security\java.security
  • java8 jdk : ~\jdk1.8.?_?\jre\lib\security\java.security

ただし、日米以外の国は場合によっては暗号化技術が違法になることがあるようです。 そのような国向けの環境では関連ファイルがインストールされない事でしょう。 一通り試してみて動かない場合は法律のチェックなども必要になるかもしれません。

以下、以前の投稿内容です。 そちらについては特に修正していません。


javax.crypto.Cipherを使ってAESの暗号/複合化をするにあたり、デフォルトのままだとAESの鍵の長さは128bitしか使えません。 256bitの鍵を使うとInvalidKeyExceptionで怒られてしまいます。

java.security.InvalidKeyException: Invalid AES key length: 32 bytes

256bitの鍵を使うにはポリシーファイルが必要になります。

java7の場合は下の方にある「Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 7」をダウンロード。 ファイル名は「UnlimitedJCEPolicyJDK7.zip」でした。 これを解凍すると「local_policy.jar」と「US_export_policy.jar」が出てきます。 jreのフォルダ(jre7\lib\security)に同じ名前のファイルがあるので置き換えます。

2012年1月29日日曜日

firefoxの不具合、ハードウェアアクセラレーションをOFFにしたら再発せず

以前、「Firefoxを使用中にモニタが数秒間真っ暗になる不具合がある」と嘆いてfirefoxを敬遠していました。

で、よく考えたら「不具合の原因がハードウェアアクセラレーションにある」と当たりが付いてるんだし、OFFにすればよかったんですよね。 何で気付かなかったんでしょう?

とりあえず「about:config」で「gfx.direct2d.disabled」と「webgl.disabled」をtrueにして様子見中。 それで全部のハードウェアアクセラレーションがOFFになったのか確認はしていませんが、今のところ不具合は再発していません。 「about:support」で「グラフィックス/GPU描画支援のウィンドウ」も(0/1)になってるし、これでいいのかな?

まぁ不具合と言ってもクラッシュするわけではないので、再発したらそれから考えましょう。 って「不具合の原因はGPUの電圧がどうこう」って記述もどっかで見たし、PCの寿命を延ばすためにも「再発、絶対ダメ」って考えた方がいいのかなぁ?

...とりあえず不具合回避で使っていたChromeは若干肌に合わなかったのでfirefoxに戻れてちょっと落ち着きました。 そしてなんだかんだ言って「グラフィックドライバやFirefoxの新バージョンが出たときにまた試して、またガッカリ」というパターンは繰り返す気がします。

ちなみに、「about:support/グラフィックス/GPU描画支援のウィンドウ」の意味は(ハードウェアアクセラレーションが効いているウィンドウ数/firefoxのウィンドウ総数)だそうです。 私の場合はウィンドウ1つでタブだけ増やす使い方なので(1/1)になったら要注意。

java : HttpServerでimgを出したりpostを読んだり

私のPCの中には色んなデータが入っています。 APNGとかSVGとかに手を出してるんで、まぁ色々です。 全部簡単にチェックできればいいんですが、まず全部表示できるようなヴューアが少ないです。 全部表示して整理できるようなソフトとかって、あるんでしょうかね? 作るわけには行かないしなぁ。

で、ふと気付いたのがブラウザ、これは万能ビューアですよね。 APNGでもSVGでも見れますし、音でも動画でもOK。 しかしローカルのファイルをチェックするには使い勝手が良くありません。 「何とか使えないかなぁ」と適当に検索してみたら、ちょっと気になるネタがありました。 「http 簡易サーバ」で検索するとC#でもjavaでもけっこう簡単にhttpのサーバが作れるようなんですよ。 もちろんインターネットに公開するようなサーバーを作るのは簡単ではないでしょうけど、ヴューアの部分をブラウザに頼った「ローカルファイル整理ツール」を作るハードルはかなり下がりそうです。

C#だと「System.Net.HttpListener」が、javaだと「com.sun.net.httpserver.HttpServer」が使えるようですね。 「データ整理ツールを作るんなら環境依存は少ない方がいいだろう」ってことでjavaの方を試してみました。 とりあえず考えながら作ったら、

2012年1月22日日曜日

フリーソフトウェア「オイラは意思が弱いから」を公開

フリーソフトウェアの「オイラは意思が弱いから」を公開しました。

ソフトの説明は、

『「オイラは意思が弱いから」は「この時間帯にこれはやらないでおこう」というあなたの決意をサポートする注意喚起ソフトです。 このソフトは動作中、指定した時間帯に対象プログラム(ゲームとか)が動いているのを発見したら全画面、最前面で「注意画像」を表示します。 あくまでも注意喚起をするだけのソフトなので注意画像はボタンクリックですぐに消えます。 注意画像が表示されたら、あなたの意思で遊ぶのを止めましょう。』

自分の夜更かし防止に作ったジャンクソフトです。 自分が使う部分だけならパラメータ即値固定で2日くらいで出来たんですが、「フリーソフトにしよう!」と思い立ってからGUIとか設定ファイルのIO記述とかやってたら1週間くらいの作業になってしまいました。 まぁそれでもまともにデバッグしてないんですけどね。

注意画像は好きに描き換えられます。 wpf(Visual studio 2010 Express)のソースファイルも付いているのでカスタマイズとかデバッグとかでより使いやすくできますよ? 気が向いた人はどうぞ。

...何気にこのブログに書いたTipsをチマチマ使っていたりします。 作業時間が1週間で済んだのは実は僥倖かも?

2012年1月18日水曜日

wpf : ToolTipの改行

xamlでToolTipの改行をする場合はLineBreakを使います。

<Button>
    <Button.ToolTip>
        <TextBlock>
            test。<LineBreak/>
            test。<LineBreak/>
            test
        </TextBlock>
    </Button.ToolTip>
</Button>

C#のコードから設定する場合は\nでいいみたいです。

Button btn = なんたら;
btn.ToolTip = "test。\ntest。\ntest";

ついでに、ToolTipの表示時間は各コントロールのToolTipService.ShowDurationで設定します。

<Button ToolTipService.ShowDuration="50000"/>

単位はミリ秒、既定値は5000ミリ秒(5秒)です。 ToolTipのテキスト量で自動で変わるとかっていうんだったら楽だったんですけどね。 現状は長いToolTipを付けてしまったら自前で表示時間を設定しなければなりません。

=======

2013/05/19 追記) 幅の上限を設定して自動で折り返す方法を投稿しました。

wpf : タスクマネージャで表示される「プロセスの説明」を設定

wpfプロジェクトで、タスクマネージャで表示される「プロセスの説明」にあたる項目を設定するにはAssemblyInfo.csのAssemblyTitleを書き換えます。 AssemblyDescriptionではないので注意。 AssemblyInfo.csはPropertiesフォルダの中にあります。

2012年1月12日木曜日

Windows7 64bitではIntel製のCPUを使っていてもAMD用のDevConを使う

私のPCは起動時にUSBマウスが正常に動かないことがあります。 ボタンは認識しているけどカーソルが動かない状態。 USBケーブルを抜き差しすれば直ります。 今までそうしてました。 しかし、PC本体を机の下に置いてるので「PC起動→マウス不具合→抜き差し」が微妙に面倒でした。

「何とかならんかなぁ」と色々やってみたらデバイスマネージャで「無効→有効」とすれば直るのを発見。 さらにコマンドラインでデバイスマネージャの一部機能を扱えるDevConというソフトも発見しました。

「これでバッチファイル1発でマウスの誤認識を直せる」と喜んでたらこのアーカイブにはi386版とIA-64版しか入っていない模様。 Core i7などのx64 CPUを積んだPCでこの2つの実行ファイルは正常に動きません。