なんとなく興味を持って耳コピー支援ソフトWaveToneを使ってみました。
適当な曲を解析して、気になるところをクリック。 「へぇ、この音はCなんだねぇ。Cってドレミ表記でなんだっけ?」みたいな風にポチポチさわりながらヘルプに書いてあることを確認していきました。
なんとなく興味を持って耳コピー支援ソフトWaveToneを使ってみました。
適当な曲を解析して、気になるところをクリック。 「へぇ、この音はCなんだねぇ。Cってドレミ表記でなんだっけ?」みたいな風にポチポチさわりながらヘルプに書いてあることを確認していきました。
英語も読めないのにyahoo.comのニュースを眺めてました。 ロイターの北京支社からのニュース、でいいのかな?
中国の漁船を海上保安庁が拿捕したらしいです。 日時はDecember 29, 2012のSunday eveningとあります。 日本のニュースサイトでそれっぽい記事は...これか
C#ではワイルドカードを使用して文字列検索をするためのクラスが無いようなので作ってみました。 次のようにして使うことができます。
var m = new WildCardMatcher("test_*.html"); if(m.IsMatch(filename) ) { なんたら }
使用できるワイルドカードの記号は次の2つです。
コードはこんな風になりました。
少し前にこういう本が出てたようですね。
私は料理はしないんですが、それは後片付けが面倒だからなんですよね。 料理自体は楽しいんで時間がかかってもかまいません。 でも後片付けが面倒でテンションが下がるので結局料理しないという...
「5分で誰でもできる簡単料理」みたいなのでも調理器具をたくさん使っているとやってみる気にはなりません。 その点ポリ袋料理なら後片付けが楽なレシピも有りそうだし、やってみてもいいかな? やっぱり皿洗いが少ないのが重要です。
ってことで↑の本は読まずに適当にやってみようと思いました。 まずはポリ袋の調達。
小学校での銃の乱射事件があったアメリカで「暴力的なシーンのあるゲームを捨てよう!」と呼び掛けている子供がいるそうです。
日本では、そのニュースを見て「ゲームより先に銃を捨てろ」などと言っている人が多いです。 中には米ライフル協会が「残虐な事件はゲームのせい」と言ったのと混ぜて考えている人もいるようです。
「残虐なゲームを捨てる人」と「銃を所持する人」を同じカテゴリーで考えるのはちょっと乱暴ですね。 全てのアメリカ人が残虐なゲームを捨てて銃は手元に残しているとかっていうのは不自然でしょう。 中にはそういう人も居るかもしれませんが、アメリカ人全体を一括りにするのは間違いです。 その子がそういう事を呼びかけるのは間違ってないのでしょうから、変なケチの付け方にならないような配慮が必要ですね。
でもまぁ、自分だったら銃を回収してゲームを渡すキャンペーンとかを提案するかな。 「暴力は架空の世界の中だけにしよう!」とか「ゲームをしながら強盗はできない!」とかっていうキャッチコピーで。
以前のbloggerは画像のリンクのurlを変えるとサムネイルのサイズを変えられました。 それで原寸表示とかもできたんですよね。 しかし、今は仕様変更でできなくなっています。
今は画像のサムネイルをクリックしないと原寸表示されません。 それはちょっとした手間になってしまいます。 データURIスキームを使って画像を投稿したらそれが回避できるかもしれません。 自由にレイアウトできるかも?
とりあえず、確かめるために画像を1つ貼ってみましょう。 ファイルサイズが大きいものを貼っても誰も幸せになれないので、サンプル画像は白黒2階調の幅だけ大きいものにします。
色んなデータをデータURIスキームで埋め込んでみました。 データURIスキームというのは「htmlやcssでuriの変わりにデータを埋め込む」というアレです。
データURIスキームの書式は、
data:[<MIME-type>][;charset=<encoding>][;base64],<data>
<a href="uri">説明</a>や<img src="uri"/>などのuriの代わりにコレを書きます。 <data>に書ける文字は通常のuriと同じです。 uriで使用できない文字を書くときにはエンコードが必要になります。 ファイルの種類に合ったMIME-typeを指定して、バイナリファイルならcharsetなしでbase64エンコードで記述。 テキストファイルならcharsetを指定して、必要に応じてURLエンコードまたはbase64エンコードをして記述します。
ここで試したデータのエンコードにはこちらのプログラムを使用しています。
URLエンコードをする小さなプログラムです。 どこにでも載ってそうなモノですが、次のネタ(データURIスキーム)で使うので一応掲載。 リダイレクトして使う事を想定しています。
java SimpleUrlEncoder utf8.txt > res.txt
以下、コードです。
udpのパケットなど、ネットに流れているデータはネットワークバイトオーダ(ビックエンディアン)になっています。 それに対してx86系のシステムはリトルエンディアンです。 相互にやり取りするにはビックエンディアン⇔リトルエンディアンの変換が必要になります。
ネットワークバイトオーダ → クライアントマシンのバイトオーダの変換にはBitConverter.ToInt16などとIPAddress.NetworkToHostOrderを組み合わせるようです。 (BitConverterの代わりにMemoryStream+BinaryReaderを使うやり方もあり。) まず、エンディアンがあっていようがいまいがBitConverterで得たい型の変数に読み込み、その後NetworkToHostOrderで変換という流れです。
1年半前に買ったPC(ツクモのエアロストリーム)からまた異音が発生するようになりました。 前の異音と同じもののようです。
「面倒だけど仕方がない」ってことで前と同じように掃除。
...ってあまり汚れてないぞ?
電源ファンとグラフィックカードまわりを念入りに掃除してからPC起動。 音は変わりません。 「静音がウリ」ってのも買った理由の1つなんだけどなぁ。
まぁ、なっちゃったものは仕方がないかな。 遅きに失した感はありますが、少しでも悪化を防ぐために対策をしましょう。
firefox17でのお話。 firefoxでタブをピン留めすると、タブからタイトルが消えてアイコンだけになります。 これだと意外に不便です。 例えば、Yahooの天気予報とニューストピックをピン留めした場合、両方同じアイコンになって判別できません。 最初の何文字かは表示したい。
そんなときは、userChrome.cssやアドオンのstylishなどでこう書きます。
Base64でエンコードするコードです。 どこにでも載ってそうなモノですが、次のネタ(データURIスキームがちょっと出てくる)で使うので一応掲載。 リダイレクトして使う事を想定。
java SimpleBase64Encoder pin.png > res.txt
お約束的なことですが、sun.misc.BASE64Encoderはいつ消えるか分からないので注意。 そういうわけでコンパイル時に警告も出ます。
DNSについて、漠然と「port53を使うんだなぁ」くらいしか知らなかったのでちょっとだけ調べてみました。 通信プログラム自体あまり触らない方だとはいえ、udpのサワリとか全然知りませんでした。 ちょっと反省。
まずはDNSサーバの種類から。 wikipediaなどの定番の解説を読んだ後、こんなページを発見。
これを全部実感コミで飲み込むのは、運用している人でないと無理ですね。 端末でコードを書く人はとりあえずリゾルバ(スタブリゾルバ)⇔キャッシュサーバ、キャッシュサーバ⇔コンテンツサーバの通信の概要を知っていれば良さそうです。 まぁ、上澄みをサラッと理解したくらいで次へ。
Yahooニュースを見ていたらこんな記事がありました。
その中で?となった文言。
「店舗内から先は光ファイバー回線でいろいろなネットにインターネット接続する。」
意味が分かりません。
普通は「店舗内から先は光ファイバー回線を通してインターネット上の様々なサービスに接続できる」とかって表現じゃないですかね? もしくは、「通常のインターネット端末からは接続できない専用サービスに接続できる」とか?
ともかく、「いろいろなネット」という表現が曖昧すぎます。
...つっこんだら負けなのか? 普段の日本語がおかしい私の言うことでもないですしねぇ。
svg画像にはtextタグで文字列を書く事ができます。 でもこれって環境によって意外と見え方が違うんですよね。 吹き出しに収まるようにセリフを入れたつもりでも、別の環境で見たらはみ出したり、変な余白が空いてたり...
この問題は、文字をパスに変換すればある程度解決できます。 例えば、inkscapeならtextを選んでメインメニューから「パス/オブジェクトをパスへ」を選択すればok。 これで環境で見え方が変わる問題は軽減されます。 (svgのどの要素でも、レンダリングエンジンによって多少は描画が変わるので完璧ではないです。 見え方の差は誤差の範囲ですが。)
ただ、このやり方は万能薬ではありません。 次のような欠点があります。
ustreamの配信を見ていると動画の下の方に広告が表示されることがあります。 字幕とかぶったりして非常に邪魔です。 視聴者のストレスになりそうな所を選んで表示しているような気がしてなりません。 広告が溢れているネットでイチイチ広告を気にしてたらやってられませんが、これは我慢不可。 消すことにします。
ネットで検索したところ、hostsファイルの書き換えをするのが定石のようです。 で、hostsの内容をそのまま表示しているページばかりで、そこに書く内容の調べ方は書いてませんでした。 仕方がないので自分で広告抑制対象の調べ方を模索してみました。
調べた結果とネット検索で得た情報を元にhostsファイルを作りました。 投稿の最後に載せておきます。 自分で調べるのが面倒な人はそれを使ってください。
注)
インターネット広告業は新しい業種であり、日々変化しています。 この手法で調べた広告抑制対象も当然変化しており、いつまで通用するかは不明です。 この手法が通用する間は、ブロックしたはずの広告が表示されるようになったなら、また抑制対象を調べ直せば対応できます。 この手法が使えなくなったら別の手法を考える必要があります。
お決まりの注釈を書いたところで、以下説明。
アメリカでMicrosoftのタブレット端末「Surface RT」を買い、虚偽広告の訴訟を起こした人がいるようです。
「Surfaceの32GBモデルを買ったが、そのストレージの半分がOSとプリインストールソフトで使われていてユーザーが使える容量が少ない。 仕様に32GBモデルって書くのは虚偽広告だ。」
との訴え。 損害賠償を求めてはいるわけではないそうな。
前の投稿で書いた「Greasemonkeyで広告を消去できないケース」を再現する例です。 広告消去のアドオンを作りたい人にとっては、簡易サーバとかログの確認とかがテストの参考になるかもしれません。
次の環境で確認。
まずはGreasemonkeyでimgタグを消すコードを書きます。 このコードはlocalhostでのみ有効です。
とりあえず、次の環境ではそういうケースがあるようです。
firefoxのアドオン「Greasemonkey」を使うと、ウェブページを表示した直後にユーザーの記述したjavascriptを動かすことができます。 その用途でありがちなのが「広告の非表示」です。 これは多くの場合ちゃんと動作しますが、回線次第で上手く動かないケースがあります。
動かないケースとは、「閲覧対象のhtmlファイルの転送が途中で止まった場合」です。 多くのブラウザはページを表示するとき、受信中のhtmlファイルをパースしながら、リソース(css,外部javascript,画像など)を並行してダウンロードします。 通常ですと次のような手順になるでしょう。
ネットニュースの見出しを適当に眺めていると、おんせん県の文字がありました。
「大分県がおんせん県の名称の商標登録を特許庁に申請した」との事。
私は大分県民ではないし、大分に観光に行く予定もないのでどうでもいいんです。 でも、今は平仮名で「おんせん県」って書くのは止めた方がよいでしょう。 温泉県っていうキャッチフレーズの是非はともかく、漢字で書くべきです。 10年後ならどっちでもいいかもしれないけど、今は漢字で書かないとダメ。
気が付くと、自宅近くの店に使い捨てのアルミ皿が並ばなくなりました。 いつも使っているスーパー、100円ショップ、ドラッグストアなどの店から皿消失。 何ででしょうね?
それっぽい理由を想像してみました。
アルミの輸入についてそれっぽい数字を探してみました。 とりあえず検索でこんなページを発見。
テレビショッピングの日本直販が民事再生法を申請したそうです。
ネット通販との競争に飲み込まれたんでしょうか? 家電量販店で価格.comを見るとかよくあるらしいですよね。
家でもそういう傾向はあって当然かと。 TV通販のメインターゲットは高齢者などネットに弱い人で影響は少なそうに思えるかもしれませんが、少なくとも高齢者で普通にネットを使う人は増えているようです。
高齢者以外ならいくらネットに弱い人でも携帯くらいは使うでしょうし、パイを食われるのは順当な流れに見えます。
なんか、yahooニュースに「病院の丸ごと輸出」って記事がありました。
「日本のサービスを売りにしよう!」ってネタらしいですけど、不安ですよね。 なにしろ日本の病院って労働条件が悪そうなイメージがあります。 最近はこんな記事まで出てきたり。
日本の医療関係者の労働条件を外国に輸出するのって不可能な気がします。
ちょっとCMを見ていて気になった物がありました。 3DS版のゲーム「とびだせ どうぶつの森」です。 気になったのはCM最後の1フレーズ。
「いつも一緒でなくさないダウンロード版もあります」
目から鱗っていうのとはちょっと違うかな? でもまぁ、効果がありそうな一言に思えました。
ゲームのダウンロード販売って、当たり前になった今でも敬遠する人は居ますよね。 なぜかっていうと、ゲームを買った人はこんな懸念を持つからです。
なんかITmediaを見たら「まんべくんTwitterが終了」などというニュースがありました。
私はゆるキャラも興味ないしツイッターもやってません。 まんべくんもたまにネットニュースで出たら見るくらい。 「そんなんいたなぁ」って感じです。
でもまぁ過去のニュースで興味なくてもなぜか覚えているものってありますよね? まんべくんのニュースもそれでして、なぜか懐かしくなって過去読んだ記事にアクセスしてしまいました。
自分のPCに個人情報が入っていなかったとしても、セキュリティには気を使わなければなりません。 でないと、あなたのPCが犯罪者の踏み台にされ、犯行の片棒を担ぐことになる可能性があります。
PCに興味がある人なら10年以上前からちょくちょく見かける文面ですね。 IT系の雑誌やネットニュースは定期的にセキュリティの特集が組まれることが多く、ITに興味がある人なら何度も読んだことでしょう。 そういう雑誌などを見ない人だとしても、こんなときに目にしているかもしれません。
次のような注意事項を書く部分のためのcssを考えました。
注1)
とてもとても重要な注意事項。とてもとても重要な注意事項。とてもとても重要な注意事項。とてもとても重要な注意事項。とてもとても重要な注意事項。とてもとても重要な注意事項。
注1024)
たいして重要でもない注意事項。たいして重要でもない注意事項。たいして重要でもない注意事項。たいして重要でもない注意事項。たいして重要でもない注意事項。たいして重要でもない注意事項。
[注意事項]
注意事項のフリをして注意事項ではない。注意事項のフリをして注意事項ではない。注意事項のフリをして注意事項ではない。注意事項のフリをして注意事項ではない。注意事項のフリをして注意事項ではない。
ポイントは
バイオハザード6は全世界で450万本売れたそうですね。
バイオハザード1をビビッて途中で止めた私としては、6も全く買う気はないんですが、絵がどれくらいキレイなのか気になって体験版をやってみました。 バイオ1以来のバイオです。 すごく酔いました。 3D酔いです。
Play Station Storeを見て、ゲームアーカイブスに『海腹川背・旬 セカンドエディション』があるのを発見しました。 昔よくやったゲームです。
以前ゲームをあまりしなくなった時に持っているゲーム数十本を売り払った事があるんですが、面白いゲームは何本かとって置いたんですよね。 このゲームもそのうちの1本です。
というわけで手元にあるので「すぐにゲームアーカイブスから買おう」みたいにはなりません。 でも、CDの寿命の問題もあります。 ディスクの当たりハズレと保存状態の悪さが重なると10年程度で読めなくなってしまうとか。 私の場合、ゲームは普通に本棚に置いているだけなので、場合によってはそういう可能性もありそうなんですよね。
だからといって厳重に保管する気も無く。 まぁ、「好きなゲームがゲームアーカイブスに並んでてくれるのは安心かな?」ってことです。
スマホが普及し、タブレットが流通してからだいぶ経ちました。 新聞の記事がそのまま読める公式サイトとか公式アプリとかが増えてますよね。
それに応じて紙新聞の信者のお話をあまり聞かなくなりました。 そもそも紙新聞の信者ってのは新聞社と仲がいい人達です。 新聞社がネットを敵視しているときはそれに迎合してネット上のニュースサイトを叩き、紙の方がいいと騒いでいました。 しかし、新聞社が「紙だけじゃダメだ、ネットでも集客しなければ」と方向転換するとそういう騒ぎができなくなります。 お友達の商売を邪魔することになりますからね。
まぁそんなこんなで、ずいぶん前からネットで紙と同じ新聞記事を読めるようになっています。 が、それだけ読んでいてはダメです。 ネットニュースは読まざるを得ません。
これは「読むニュースは偏っちゃダメだ」みたいなお話ではありません。 ITセキュリティのお話です。
play station storeに体験版があったのでPS3の「ジョジョの奇妙な冒険 未来への遺産 HD Ver.」をやりました。 ゲーム内容は、オンライン対戦が付いた以外は10年以上前のオリジナル版と同じです。 う~ん、買う気が起きない。
まず絵について、「HD ver.」となっているのに画質は良くありません。 対戦時以外の場面で使われている絵はオリジナル版を流用しただけのようですね。 リマスターされておらずガッカリ画質です。 肝心の対戦時の絵はジャギーがあるドット絵を引き伸ばしたような粗悪感。 スト3 3rdよりはだいぶマシですけど、わざわざ「HD ver.」って付けたんならそれなりの絵にすべきじゃないかなぁ?
ずいぶん前、多分Windows98SEのころだと思うんですが、javaで簡単なシューティングゲームを作ろうとして取っ掛かりで躓いた苦い思い出があります。 躓いた理由はFULL GCです。 当時のjavaはシューティングゲームやアクションゲームを動かす事を全く想定されていませんでした。 けっこうな頻度でFULL GCが動き、そのたびにガクッと止まってゲームになりませんでした。 シューティングゲームを作るのは絶望的な状況。 それ以来自分の中に「javaでゲームを作るのは無理」という固定観念がありました。
その後javaでゲームを作ろうなどとは考えることも無かったのでそのままの知識を持って今まで来ました。 しかし、ちょっと思い立って「当時と今とは当然状況は違うはず」ということで、簡単なサンプルコードを作って「今でも邪魔なFULL GCはあるのか?」についてのみ調べてみました。
結論から言えば、無茶な弾幕シューティングですら普通に作れそうです。
Internet Watchの記事を見てJava7 Update6がリリースされたのを知りました。 いわく、「米Oracleは15日、Javaの最新版のアップデートとなる「Java7 Update6」と、「Java6 Update34」の提供を開始した。」
ん? 15日提供開始? 記事のURLは20120820になってるけど?
ああ、お盆休みか。 セキュリティに関わる記事でこういうのは恐ろしいですね。
まぁ、javaは自作ツールを動かすときしか使ってないんで多少アップデートが遅れても大丈夫なんですけどね。 一応気付いちゃったらアップデートしないと。
ソフトウェア・ダウンロードのJava SEのページから入手できます。
それにしても、最後にアプレットを触ったのっていつだったかなぁ...
今更ながらImageIO.readの不具合を踏みました。 「jpgファイルのフォーマットによっては正常に読み込めない場合がある」というアレです。 ずいぶん前からあるネタのようですが、ぜんぜん知らなかったのでビックリ。 直らないもんなんですかね?
きっかけは、サムネイルを作るコードを書こうとしたことでした。 まずは検索でサラッと
というのを確認。
で、RenderingHintsの設定でどの程度違いが出るのかを確認したくて簡単なテストコードを書きました。 たいして時間もかからずに完成。 「楽でいいなぁ」などと思いつつサンプル画像を変えて試してみたら出力画像が真っ赤 → ナンダコレハという流れです。
C#のusingやjavaのtry-with-resourcesなど、closeを省略できる構文はあります。 その場で使ってその場でcloseするときには大変便利です。 しかし、そんなオブジェクトばかりではありませんよね? 「ファイルを開いてユーザーが編集→アプリ終了時にclose」とかの場合、↑の構文でのcloseの省略は使えません。 closeのときに毎回決まったコードを書かなくてはなりません。
ありがちなコードのはずなのにネットで検索してもすぐ出てこなかったのでComparatorを作って見ました。 車輪の再発明ですな。
仕様は、
ちょいと謎な仕様もありますが、まぁ自分用コードということでこんな感じです。
明日の「NHK高校講座」に漫画家の荒木飛呂彦さんが出るようです。
美術(8)の枠で講師をされるそうです。
放送されるのは7月26日昼の14時20分から。 でも、NHK高校講座ってネットで無料で視聴できるんですよね。 ネットに接続ができれば、昼に見れなくても録画とかする必要はありません。 放送直後に見れるかどうかは分かりませんが、少なくともその日の夜には見れるはず。 いつでも見れるしアカウントとかも必要ありません。
明日の晩、見ようかな? 明日だけNHKのサイト混んでたりして?
まぁ、今年度の講座は全部公式サイトに載っているようですし、すぐに見なくてもいいかも。 今週中には見るかなぁ?
---------------- 7/28追記
見ました。 ここのページから「映像を見る」を選べば見れます。
20分ならこんなもんかな?
引き出し付きのベッドを10年以上使っています。 ベッドの下を掃除するたびに、面倒なのを思い知らされますね。 普段の掃除のときはベッドの下まではやらないんですが、たまに掃除するときは大変です。
ベッドの引き出しにはけっこうな量の衣類が入ります。 それなりの重さ。 衣類が入ったままの引き出しを取り出して、下を掃除して、戻してというのは困難です。 引き出しの衣類を全部出してから掃除することになります。 そして、掃除が大変なのでたまにしか掃除しない → たまにベッドの下をのぞくと...
ってことで、下に何も無いパイプベッド+キャスター付きの収納ケースの組み合わせが一番いいのかも? コロコロさえ入れば酷いことにはならないでしょう。 次、もしベッドを買い換えることになったらそれで。
ちなみに、背の高いベッド(ロフトベッドなど)はお勧めしません。 風邪を引いたときに上り下りとかカンベンです。 省スペースのためにとロフトベッドを買うくらいなら折り畳みで。
ハンドソープの詰め替えを買うとき、2つほど間違いをしたことがあります。
まずは良くある間違い。 使っているハンドソープは泡で出るタイプなんですが、間違って泡タイプではなく通常の液体タイプの詰め替えを買ってしまいました。 詰め替えるときに気付きました。
泡タイプのハンドソープはサラッとした石鹸水です。 それに対して液体タイプのハンドソープはドロッとしていて、泡用のポンプを通ってくれないんですよね。 で、「泡タイプと同じくらいサラッとするまで水で薄めたらどうだろう?」と考えてやってみました。
ここしばらくjavaとC#+wpfを使っています。 どちらもGUIはメインスレッドで動いており、
などにはイベントキューに処理を登録します。
javaとwpfのイベントキューを扱うメソッドは次の通りです。
似てるっていえば、似てるんでしょうか?
そういえば、win32sdkのときはPostMessageとか使ってましたっけ。 そしてWindowsの次期開発環境WinRTは非同期がどうたらこうたら...
地上波のアナログ放送が停止された今でも、たま~に劣化したアナログテープを思わせるようなノイズが演出で使われているのを見ますよね? コレを見て、デジタル動画のノイズもエフェクトとして使えそうだと考えてみました。
PVとか動物の動画とかでチラッ、チラッとブロックノイズが出てくるんですよ。 見てる人がそれを認識して「回線が悪いのかなぁ?」と思い始めるようなタイミングで、ブロックノイズが登場人物の視線の先やネコパンチの先に出始めるんですね。 気付いて「アレッ」ってなったところで、ブロックノイズが集まってきてブロックノイズを使った文字やドット絵を表示。 そこで「あ、最初のブロックノイズも演出だったんだ」と分かるんです。 あとはノイズと動画がよく合うように散りばめていけばOK。
最近良くニュースで聞く「東電」という単語、アクセントに違和感を持つ人が多いようです。 「灯台」と同じように読むか「当代」と同じように読むかがニュースによって違います。 私は「灯台」の読みかたの方がしっくりしますね。 「当代」の方だと違和感。
略称なので「どっちの方が正しい」ってこともないんでしょうけど、灯台派の人がこんなことを言っているのを聞きました。
曰く、「東電を灯台読みすると盗電と同じアクセントになる。それではイメージが悪くなるので、東電に配慮して当代読みをする。あ゛~っ!」
それなりの説得力がありました。
最近PS3を立ち上げていないんですよね。 たま~に体験版をやるくらいにしか使っていません。 今日もちょっとだけ体験版でもやろうかとPlay Station Storeにアクセスしてみました。 で、普段は気にも留めていないゲームアーカイブスのランキングが目に入りました。
どういう基準のランキングかは未確認ですが、偏ったラインナップですね。 スクウェア製品と、ちょっとバイオハザード。
コレを見て閉塞感を感じるのは私のとらえ方なんでしょうね。 ゲームを1番やっていた時期からゲームをやる時間が減り始めた頃にかけて「リメイク作品ばかりで食傷気味」みたいな言葉をよく耳にしてました。 多分そのせいでしょう。 「過去の名作ゲーム」みたいなのを見るとやや距離を置いてしまいます。
新しいゲームのランキングに目を向ければ良いだけなんですけど、他にやることがあるしなぁ。
とか言いながら、タマタマ目に入ったゲームアーカイブスのランキングを見て閉塞感って表現するのも変な話ですよね。
デフォルトでは「firefoxボタン」の右側は空白です。 そこにページのタイトルを表示したいというだけのお話。 ホント「何を今更」なお話。
まずはちょこっと検索。 アドオンで実現する方法はすぐに見つかりました。 でも、firefoxはアドオンが増えると起動が遅くなるらしいんですよね。 そこまでして表示したいわけでもないなぁ。
検索した情報とか実際に試すとかで分かったことは、
ということ。 firefoxボタンが消えるのは問題ありません。 メニューバーはたまーに要るけどたまにしか使わない。 メニューバーとタイトルが別々に切り替えられればいいんですけどね。 なんでセットにするかな?
この前歯科医院に行ってきました。 そのときの治療のついでになんですが、歯茎がやせて下がっているのが気になっていたのでどうすればいいか聞いてみました。
歯医者さんのお話だと、歯並びが悪くて1本の歯に負担が集中していると、その歯の根元にある歯茎がやせていくのだそうです。 歯並びを矯正して噛むときの圧力を正しく分散すれば進行は防げるけど、やせた歯茎が戻ることはないとか。 意外と取り返しはつかないみたいですね。 そして、適当な話の流れで聞いたので矯正以外の対処法は聞けませんでした。
歯磨きのブラシ圧が強すぎたのかと心配してたんですが、私の場合はそれは関係無さそうだと言われました。
昔からあるちょっとしたマナーのようなものです。 チャットやメールなどを書くときには語尾に注意しなければなりません。 「~だしね」とか「~ですしね」とかって言うのは避けた方が良いです。 微妙にニュアンスが変わったとしても「~だよね」とか「~ですよね」とか、別の語尾にしましょう。
その理由は、伏字にしてみれば明らかです。
特に、動画の生配信のチャットに参加しているときとか、読み上げソフトの音声しか聞いてない人とかがいる場合に注意です。 もちろんみんな分かっている状態でわざとやってる人もたくさんいますが...
今までVisual C# 2010 Expressを使用していて単体テストツールは入っていませんでした。 「ちょっとは触っておいた方がいいかなぁ」と思ったので試しにVisual Studioで外部ツールとして使えるNUnitを入れてみました。
環境は、
まずはNUnitをオフィシャルサイトから落としてきて普通にインストール。 次に、Visual Studioのツールメニューから「外部ツール」をクリック。 NUnitを登録します。 取りあえずx86版だけ使えればいいのでこんな感じで登録。
ちょっとした覚書。 TemplateからNameを元にコントロールを探すにはControlTemplate.FindNameメソッドまたはFrameworkElement.GetTemplateChildメソッドを使うようです。 FrameworkElement.FindNameメソッドはTemplateの中までは探してくれないらしい。 参考サイトはこちら。
1つのTemplateが複数のコントロールに適用された場合、同じNameのコントロールがその数だけ作成されます。 なのでNameでコントロールを探すときはVisualTreeHelperを使うのではなく、名前スコープを考慮したこれらのメソッドを使うものなんだそうです。 気付くのに遅れて無駄足を踏んでしまった...
メソッドということでxamlからは使用できません。
Adornerを継承したクラスを作りました。
public class TabMoveCursor : Adorner { protected override int VisualChildrenCount {get{return _cursorCanvas == null ? 0 : 1;}} protected override Visual GetVisualChild(int index) { if (_cursorCanvas == null) throw new IndexOutOfRangeException("子要素はない"); if (index != 0) throw new IndexOutOfRangeException("子要素は1つのみ"); return _cursorCanvas; } ~色々略~ private Canvas _cursorCanvas = null; protected override Size ArrangeOverride(Size finalSize) { Debug.Assert(_cursorCanvas != null); _cursorCanvas.Arrange(new Rect()); return finalSize; } }
ちょっと前にカスタムコントロール.Resourcesが使えないという状況を発見したので、リソースをC#で読み込んでxamlで使う方法について調べてみました。 カスタムコントロール.Resourcesが使えない状況というのはこちらのネタでのお話です。
普通にやってたら気にしなくてもいいような内容ですね。 まぁ、カスタムコントロールの方は置いとくとして、リソースの読み込み方は他に役に立つこともあるかもしれないので投稿します。
xamlでResourcesプロパティに書くことができるリソースは、
と呼ぶのだそうです。
ItemsControl系のカスタムコントロールにイベントを登録するため、コンテナ作成を検出する方法を調べてみました。 ItemsControlというのはListBox、TabControl、TreeViewなどです。 コンテナというのはそれぞれの項目を表示するための、???Itemという名前が付いたコントロール(ListBoxItem、TabItem、TreeViewItemなど)です。 wpfではItemsControlに様々な型のコンテンツを登録できます。 例えばListBoxに対して、
listBox.ItemsSource = new ObservableCollection<string>() { "文字列1", "文字列2", "文字列3" };
という風に文字列のコンテンツを登録できます。 その場合、登録したコンテンツは当然GUIコントロールではありません。 コンテンツを表示するためのコントロールが別に必要になります。 それがコンテナ(ItemContainer)です。
前の投稿の続きです。 前の投稿では「TabItemのヘッダで使えるマウスイベントはPreviewが付くトンネルイベントだけ」ということを書きました。 それだけ使えれば十分だとは思いますが、今回はなぜか、TabItemのヘッダにClickイベントを登録する方法を試してみました。
やり方は簡単で、TabItemのTemplateにButtonを登録するだけです。 ヘッダーに関するTemplateはTabItem.Template(ControlTemplate)とTabItem.HeaderTemplate(DataTemplate)の2種類あります。 TabItem.Templateの方には枠線などタブの外観を設定します。 TabItem.HeaderTemplateは、DataTemplate型とあるとおり、関連付けられたデータのGUI表現を設定します。 例えば「アイコンとテキストで表現するデータ」があった場合、それをどういう構成にするかの設定がDataTemplateです。 まず、タブの外観がTabItem.Templateを元に作られ、その中にHeaderTemplateを元に作ったデータが収められます。 わざわざ2つに分かれているのは、DataTemplateをメニューやリストボックスなど様々なコントロールで共有できるようにするためでしょう。
TabItemのヘッダにマウスイベントを登録する場合について考えます。 xamlで全部のTabItemにイベントを書く場合には特に考える必要はありません。 普通にこんなふうに書きます。
<TabItem Header="ささ" PreviewMouseLeftButtonDown="OnPreviewMouseLeftButtonDown" > パンダ </TabItem>
でも、全部のTabItemに同じイベントを登録するときはイチイチ書くのは面倒ですよね? そして、ItemsSourceを使う場合はイベントを直書きすることもできません。 こういう場合はItemContainerStyleでイベントを登録します。
このItemContainerStyleの「ItemContainer」というのはTabItemのことです。 「TabControlに登録された各項目(Item)をTabControl上で表示するためのコンテナ」のことを表しています。 TabControlに限らず、ItemsControl系のコントロールにはこの様なItemContainerが用意されています。 ListBoxならListBoxItem、TreeViewにはTreeViewItemといった具合です。
普通、カスタムコントロールを作成するときはソリューションエクスプローラーから新しい項目を追加しますよね? その方法で追加すると「Themes/Generic.xaml」と「カスタムコントロール名.cs」のファイルが追加されます。 これを編集していくのが普通のやり方です。
ですが、コレだとやりたい事ができないケースもあるようです。 今回は、Generic.xamlのStyleにEventSetterを追加したらx:Classが無いとダメだと怒られてしまいました。 それをキッカケに「x:Classの設定ってどう書くの?」と色々検索して試してみたらカスタムコントロールを追加するもう1つの方法が見つかりました。 この方法なら問題なくEventSetterも使えます。
その方法はこんな感じ。
タイトルどおりのものを作りました。 リソースのスタイルに書いておけばいっぺんに適用できます。 アプリケーション全体で使うリソースディクショナリとかを用意しておけば楽。
Expanderのカスタムコントロールを作りたくて検索してみたら次のページが見つかりました。
これを元にシンプルなカスタムExpanderを作るとこうなります。 Themes/Generic.xamlは、
VBでコレをやる方法は検索で見つかりました。
C#でのやり方が書いてなかったので書き換えてみました。 System.Managementの参照を追加して、
ちょっとだけ特殊な用途ですが、ListBoxItemにContextMenuを登録して、左クリックで選択の変更、右クリックでは選択を変更せずにContextMenuを表示という振る舞いにしたくなりました。 ListBox.ItemTemplateでMouseRightButtonDownイベントを登録し、握りつぶすだけで実現できました。
<Window x:Class="ListBoxItemEventTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="ListBoxItemEventTest" Height="128" Width="256"> <Window.Resources> <ContextMenu x:Key="contextMenu"> <MenuItem Header="テストメニュー" Click="OnMenuItemClick"/> </ContextMenu> </Window.Resources> <ListBox Name="listBox"> <ListBox.ItemTemplate> <DataTemplate> <Label Content="{Binding}" ContextMenu="{DynamicResource contextMenu}" MouseRightButtonDown="OnListBoxMouseRightButtonDown" /> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </Window>
wpfで独自のコントロールを作るには3通りのやり方があります。
今回はユーザーコントロールについてのお話。
ユーザーコントロールでDataContextを使うとき、
public partial class TestControl : UserControl { public TestControl() { InitializeComponent(); this.DataContext = new TestData(); } }
というようにthis.DataContextにインスタンスを設定してはいけません。 ユーザーコントロールを使う側にDataContextを変更されると挙動が変わってしまいます。
上に書いたとおり、ユーザーコントロールは複数のコントロールを組み合わせて作ります。 そのため必ずGridやStackPanelのようなコンテナとなるコントロールが含まれます。
TextBoxなどの入力値検証でValidationRuleを継承したクラスを作ることが多いですよね。 たいていの場合はxamlで追加します。
<TextBox>
<TextBox.Text>
<Binding>
<Binding.ValidationRules>
<local:なんたらValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
xamlでValidationRuleを追加するコードを書いた場合、自作ValidationRuleはどこかで勝手にインスタンス化されます。 このインスタンスにアクセスできれば、次のようなことが可能になります。
タブを扱うアプリケーションで、タブの左右にコントロールを置きたいケースは多々あります。 例えば、タブの操作をするボタンを付けたり、省スペースのためタブの右側にツールバーを置いたりです。
実際にそういうレイアウトのアプリケーションは多くありますが、wpfのデフォルトのTabControlではそういうふうにはできません。 ですがstyleを書けば簡単に実現可能です。 というわけで試しに作ってみました。 こんな見た目になります。
MainWindow全体にstyle設定をしたTabControlを載せています。 そしてデフォルトではタブしか表示されない場所にボタン1~4を追加してみました。 タブの左右にパネルを追加できるように改造し、左側にはDockPanelとボタン1を、右側にはStackPanelとボタン2~4を追加しています。
ListBoxのItemsPanelにテンプレートを設定すれば、項目のレイアウトを大きく変えることができます。 ItemsPanelにはPanel系のコンテナを指定することが可能です。 当然、WrapPanelも使えます。
本来、WrapPanelは子コントロールを左から右へ順に配置し、ボックスの端で折り返します。 (javaでいうところのFlowLayoutですね。) しかし、ListBox.ItemsPanelにWrapPanelを使うとちょっと表示がおかしくなってしまいます。 スクロールバーが表示されて折り返しが効かなくなるのです。
次のような場合に、どのコントロールItemがクリックされてContextMenuが表示されたかを探す方法です。
ちなみに、TabControlの場合はアクティブなタブがクリックされたとは限らないし、ListBoxの場合は複数選択されているかもしれません。 よってTabControl.SelectedItemは使用不可。
とりあえずxamlのサンプルコードを載せます。 MainWindow.xamlです。
以前投稿した英語のインターネットラジオをBGMにするやつ、今もたま~にやっています。 相変わらず何を言っているのか全く分かりません。 「ちょっとは聞ける様にならないかなぁ」と思っていなかったといえば嘘になりますが、やっぱりと言うか当然と言うか、分からないものは分からないままですね。 まぁ、他に英語の勉強を全くやってないので当然ですが。
そんなこんなで、今日も聞いてたんですが、たまたま「寿司」をテーマに話していたらしく、その単語は聞き取れました。 そして「umami」なる単語も聞こえてきます。
え? 旨み?
そんな訳ないよなぁ。 なんの聞き間違いでしょう? あれ? そういえば、「旨み」を発見したのは日本人だって言うのは美味しんぼで読んだような...
半信半疑で検索したら、英和辞典にも英語版wikipediaにも「umami」が載っていました。
一般的な単語かどうかは分かりませんが、どうやら「うま味」はそのまま英語になっていたようですね。
ユーザーがJTableの列をドラッグしてサイズ変更するときの振る舞いについて。 最終列だけに調整を適用するにはAutoResizeModeプロパティにAUTO_RESIZE_LAST_COLUMNを設定すればOK。 ただ、これだけではこちらの望んだ振る舞いにはなりませんでした。 JTableのサイズが変更された場合、全部の列が拡大縮小されてしまうんですよね。 なんでこんな仕様になっているのやら...
仕方がないのでJTableを継承してホントにAUTO_RESIZE_LAST_COLUMNになるコンポーネントを作成しました。 基本方針は、
列幅の固定は、TableColumnのMinWidthとMaxWidthを現在の幅にすることで実現です。 で、↑の様なコードだけだとTableHeaderからマウスが離れた瞬間に列幅が変更できなくなってしまいました。 ドラッグ中のマウスの扱いについても考えなくてはならないようですね。
wpfでテキスト編集可のComboBoxを使っていて次の2通りのタイミングで処理がしたくなりました。
エンターキーはKeyBindingで検出するとして、問題はポップアップメニューの方です。 最初はSelectionChangedイベントを使えばいいのかと思ってたんですが、このイベント、けっこう色んなタイミングで発行されるんですよね。 具体的には次のタイミングで発行されるのを確認しました。
TextBoxの書き換えのときはスルーして、エンターキーとポップアップメニュークリックにだけ反応させたかったのですが、そのようなイベントは用意されていませんでした。 自分で実装です。
以前に書いたとおり、インスタント麺の替え玉にゆで蕎麦をよく使っています。 ゆで蕎麦は日持ちしないので「そろそろインスタント麺が食べたいなぁ」と思ったときにスーパーで買います。
で、そんな気分だったのでスーパーの蕎麦コーナーをのぞいてみたら、ゆで蕎麦が売り切れてました。 普段は山になって置いてあるのに、珍しい。
例えば、javaで「public void testMethod(List
試したコードはこちら。
だいぶ前のコードを漁っていたら、Look&feelの設定を変えてGUI全体のフォントサイズを指定する方法が見つかりました。
import java.awt.Component; import javax.swing.JComponent; import javax.swing.UIDefaults; import javax.swing.UIManager; import javax.swing.plaf.FontUIResource; public class UiCustomizer { public static void setFontSize(final int fontSize) { UIDefaults defaultTable = UIManager.getLookAndFeelDefaults(); for(Object o: defaultTable.keySet() ) { if(o.toString().toLowerCase().endsWith("font") ) { FontUIResource font = (FontUIResource)UIManager.get(o); font = new FontUIResource(font.getName(), font.getStyle(), fontSize); UIManager.put(o, font); } } } public static void setScrollBarWidth(final int width) { UIManager.put("ScrollBar.width", width); } public static void updateUiAll(JComponent component) { for(Component child : component.getComponents() ) { if(child instanceof JComponent) { JComponent updateComp = (JComponent)child; updateComp.updateUI(); updateUiAll(updateComp); } } } }
恥ずかしながら、この記事を見て初めてRLtrapの存在を知りました。
アダルトサイト詐欺6億円 エスカレートする手口RLtrapの説明はこちら。
INTERNET Watch - Unicodeの制御文字を使いファイル名偽装、ウイルス「RLTrap」検出報告5万件防ぎ方はこちらにあります。
float32の日記: これで安心してXPHomeが使えるのでACう~ん、これを見ると、ずいぶん前からあったもののようですね。
javaで次のSQLiteJDBCを使ったときの話。
このSQLiteJDBCを使っていて発生したSQLExceptionは次のようになります。
「例外の種類」というのはSQLiteJDBCのorg.sqlite.SQLiteErrorCode列挙体の文字列表現が入るようです。 SQLiteErrorCodeについてはSQLiteJDBCのjavadocに書いてあります。
ErrorCodeやSQLStateはないのでMessageの文字列を見てふるい分けをしなければなりません。
前のネタでSQLite + SQLiteJDBCでは重いselect文を実行してしまったときにStatement.cancelメソッドが効かず、途中で止められないことが判明しました。
しかし今回使っているSQLiteJDBCではユーザー定義関数を作ることができます。
これをうまく使えばselectの途中で例外を投げてクエリーを止めることができます。 というわけでこんなクラスを作ってみました。
jdkのドキュメントを見ると、Statement.cancelメソッドで実行中のSQL文を停止できるようです。 ただし、apiリファレンスには「DBMSおよびドライバの両方がSQL文の終了をサポートする場合に、このStatementオブジェクトを取り消します。」との記述があります。 サポートしていない場合はSQLFeatureNotSupportedExceptionが投げられる模様。
SQLite + SQLiteJDBCでcancelができるか試してみました。 SQLiteJDBCの入手先は、
試したコードはこんな感じです。 まずはデータベースを扱うクラス。 Statement.cancelメソッドは別スレッドから停止させるためのものなので、Runnableを実装しています。 メインスレッド以外にデータベース処理用のスレッドを作り、selectが動いたらメインスレッドから停止させます。
前回の投稿でSQLiteにjdbcで接続したときにユーザー定義関数を使う方法について書きました。 今回はユーザー定義関数の簡単な例を投稿します。 ネタはorder byで使うことを念頭に置いた、乱数を返す関数です。
SQLiteにはsqlite3_create_functionなどの関数があり、ユーザー定義関数が登録できるようになっています。 ユーザー定義関数というのは、
select count(id) from テーブル
のcountに当たるようなsql文で使う関数を自作したものです。 count等の元からある関数の置き換えもできるとか。
これは↓のjdbcドライバを使えばjavaでも可能です。
SQLiteJDBCはネイティブで書かれた各環境向けのSQLite本体をjarファイル内に持っていて、それに対してjniでアクセス、jdbcドライバとして動作するようにしたものです。 sqlite3_create_functionの部分もラッピングされています。
最近、昨年7月に買ったPCから変な音が出るようになりました。 音量は「PCから出る」って事でそれなりですが、車のアイドリングのような音です。 どっかのファンの軸がホコリでズレたとかかな?
起動後しばらくはアイドリング音。 気がついたころにはおさまって、「え? なんかの弾みで直った?」と思ったら次の起動時もアイドリング音。
「ガワを開けて掃除するのは年に1度で言いかなぁ?」とかって思ってたんですが、今ちゃんと確認しといた方が良さそうですね。 ってことで電源コードを外してガワオープン。
...ホコリが。
久しぶりにVirtualBoxを立ち上げたらアップデートが出てました。 VirtualBox本体のアップデートをした後、バーチャルのUbuntuを立ち上げたらこちらはディストリビューションのアップデートがあるとか。 面倒くさいと思いつつ、この機会にアップデートしてみました。 するとHDDの空き容量が足りないとのメッセージが。 「最近Ubuntu使ってないんだよなぁ」とちょっと迷って、惰性で仮想HDDイメージサイズの拡張 → ディストリビューションのアップデートをやりました。
手順は間違っていたっぽいけど最終的にOKな状況になりました。 そしてやはり面倒くさかった...
sqliteに画像を登録して、com.sun.net.httpserver.HttpServerで送信、ブラウザで画像を見る簡単なサンプルプログラムを作りました。 sqliteにはjdbcで接続。 jdbcはこちらで配布しているものを使いました。
以前の投稿をふまえて、
作ったら大体こんな感じになりました。
「test0~2.png」の画像ファイルをclassと同じディレクトリに用意してコマンドプロンプトで実行。 sqliteに画像を登録した後、HttpServerが動きます。 コマンドプロンプトの表示は「なんたらかんたら ... Push enter to stop.」となって待機。 ブラウザで「http://localhost/」にアクセスすると「画像選択アンカー」のついたhtmlが表示されます。 アンカークリックで画像の切り替え。 画像はsqliteからselectして送信です。 uriの受け取り方が適当なので、適当なコンテキストにアクセスすると表示が崩れます。 雑なサンプルコードということでlocalhostから接続されたときしか反応しないようにしました。 コマンドプロンプトでenterキーを押したらサーバの停止です。
コードはこんな感じ。
wpfでローカルの画像ファイルを読み込むときの話。 BitmapFrameを使うと次のようになります。
try { // xamlでImageを記述 → imgLock imgLock.Source = BitmapFrame.Create(new Uri(path, UriKind.Absolute)); } catch (Exception exc) { // thisはMainWindow MessageBox.Show(this, "[" + exc.Message + "]\n" + exc.StackTrace, this.Title); }
このやり方だと画像ファイルはロックされてしまい、更新、移動、削除ができません。 ロックされないようにするには次のように書きます。
実行ファイルのディレクトリってC#(.net framework)なら
FileInfo fileInfo = new FileInfo(Environment.GetCommandLineArgs()[0]); string dir = fileInfo.Directory.FullName;
で簡単に取れますよね。
javaだと「OSの違い」とか「jarパッケージかclassか」とかでもう少し長いコードが必要なようです。
前の投稿で「アタッチがアトミックでどうこう」って書いたので、一応アタッチの小さなサンプルコードを書きました。 アトミックかどうかはノータッチで。
jdbcはこちらで配布しているものを使いました。
以下コード。
SQLiteについてチマチマ勉強中。 ホントに遅々として進まないですがね。 で、1データベースにつき1ファイルのSQLiteなんですが、ATTACH DATABASEで複数のデータベースを1度に扱えるらしい。 でもその場合アトミックなトランザクションではないよとの記述がありました。
で、「ちょっと古いドキュメントだな~」と思ってオフィシャルの方に行ったら自身ありげに「When multiple database files are modified within a single transaction, all files are updated atomically.」と書いてました。
斜め読みと言うか、そこしか読んでないですが、多分バージョンアップが繰り返される中で改善されたんでしょうねぇ。
検索結果の上位サイトに「アトミックなトランザクションではない」という記述がでてきたので、一応の投稿でした。 ちなみに、そのサイトの情報が古いままなのは、中の人が他のデータベースに興味を持ったからっぽいです。 よく読んでないけど多分そんな感じで。
2017年11月追記)
この投稿の内容は古い情報となっています。最新のjava9だとデフォルトのままでもAESの鍵の長さに制限はありません。 このページのサンプルコードもデフォルトのまま実行することができました。
また、java8の場合は古いバージョンはこの投稿の通りにjceが必要になります。 新しいバージョンのjava8の場合、jceに当たるファイルはインストール済みのようです。 設定ファイルの書き換えのみで鍵の長さの制限を撤廃できるのだそうです。
もし鍵の長さに制限がかかっていたのなら、java.securityというファイルで『crypto.policy』という項目を検索してみてください。 『crypto.policy=limited』と書かれていたのなら limited を unlimitedに変更、項目自体が無い場合は『crypto.policy=unlimited』と追加してみてください。 この辺かな?
ただし、日米以外の国は場合によっては暗号化技術が違法になることがあるようです。 そのような国向けの環境では関連ファイルがインストールされない事でしょう。 一通り試してみて動かない場合は法律のチェックなども必要になるかもしれません。
以下、以前の投稿内容です。 そちらについては特に修正していません。
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)に同じ名前のファイルがあるので置き換えます。
以前、「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)になったら要注意。
私のPCの中には色んなデータが入っています。 APNGとかSVGとかに手を出してるんで、まぁ色々です。 全部簡単にチェックできればいいんですが、まず全部表示できるようなヴューアが少ないです。 全部表示して整理できるようなソフトとかって、あるんでしょうかね? 作るわけには行かないしなぁ。
で、ふと気付いたのがブラウザ、これは万能ビューアですよね。 APNGでもSVGでも見れますし、音でも動画でもOK。 しかしローカルのファイルをチェックするには使い勝手が良くありません。 「何とか使えないかなぁ」と適当に検索してみたら、ちょっと気になるネタがありました。 「http 簡易サーバ」で検索するとC#でもjavaでもけっこう簡単にhttpのサーバが作れるようなんですよ。 もちろんインターネットに公開するようなサーバーを作るのは簡単ではないでしょうけど、ヴューアの部分をブラウザに頼った「ローカルファイル整理ツール」を作るハードルはかなり下がりそうです。
C#だと「System.Net.HttpListener」が、javaだと「com.sun.net.httpserver.HttpServer」が使えるようですね。 「データ整理ツールを作るんなら環境依存は少ない方がいいだろう」ってことでjavaの方を試してみました。 とりあえず考えながら作ったら、
フリーソフトウェアの「オイラは意思が弱いから」を公開しました。
ソフトの説明は、
『「オイラは意思が弱いから」は「この時間帯にこれはやらないでおこう」というあなたの決意をサポートする注意喚起ソフトです。 このソフトは動作中、指定した時間帯に対象プログラム(ゲームとか)が動いているのを発見したら全画面、最前面で「注意画像」を表示します。 あくまでも注意喚起をするだけのソフトなので注意画像はボタンクリックですぐに消えます。 注意画像が表示されたら、あなたの意思で遊ぶのを止めましょう。』
自分の夜更かし防止に作ったジャンクソフトです。 自分が使う部分だけならパラメータ即値固定で2日くらいで出来たんですが、「フリーソフトにしよう!」と思い立ってからGUIとか設定ファイルのIO記述とかやってたら1週間くらいの作業になってしまいました。 まぁそれでもまともにデバッグしてないんですけどね。
注意画像は好きに描き換えられます。 wpf(Visual studio 2010 Express)のソースファイルも付いているのでカスタマイズとかデバッグとかでより使いやすくできますよ? 気が向いた人はどうぞ。
...何気にこのブログに書いたTipsをチマチマ使っていたりします。 作業時間が1週間で済んだのは実は僥倖かも?
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プロジェクトで、タスクマネージャで表示される「プロセスの説明」にあたる項目を設定するにはAssemblyInfo.csのAssemblyTitleを書き換えます。 AssemblyDescriptionではないので注意。 AssemblyInfo.csはPropertiesフォルダの中にあります。
私のPCは起動時にUSBマウスが正常に動かないことがあります。 ボタンは認識しているけどカーソルが動かない状態。 USBケーブルを抜き差しすれば直ります。 今までそうしてました。 しかし、PC本体を机の下に置いてるので「PC起動→マウス不具合→抜き差し」が微妙に面倒でした。
「何とかならんかなぁ」と色々やってみたらデバイスマネージャで「無効→有効」とすれば直るのを発見。 さらにコマンドラインでデバイスマネージャの一部機能を扱えるDevConというソフトも発見しました。
「これでバッチファイル1発でマウスの誤認識を直せる」と喜んでたらこのアーカイブにはi386版とIA-64版しか入っていない模様。 Core i7などのx64 CPUを積んだPCでこの2つの実行ファイルは正常に動きません。