2018年2月25日日曜日

JavaServlet で日本語が「?」で表示されたときの直し方

How to fix the Garbled characters in Java Servlet

Eclipse で JavaServlet を作って実行したら文字化けしてしまいました。
そのときの文字化けの原因と直し方をまとめました。


環境

  • Windows 7
  • Internet Explorer 11
  • Eclipse Luna


JavaServlet で文字エンコードを指定する方法

JavaServlet で文字化けを起こさないためには文字エンコードを指定します。
文字エンコードの指定は Web ブラウザーに文字エンコードなどを伝える「ヘッダー」や、画面に表示する「本文」の meta タグなどで出来ます。
ヘッダーの文字エンコードは response.setCharacterEncoding や response.setContentType で指定します。


文字化けが起きた JavaServlet

ヘッダーと本文の両方に文字エンコードを指定したのに文字化けが起きた JavaServlet のソースは次の通りです。


UTF-8 で出力したいのでヘッダーには setCharacterEncoding と setContentType で、本文には meta タグで 指定したつもりですが実行すると下の画像のように日本語が文字化けしました。

blog.fujiu.jp JavaServlet で日本語が ?? で表示されたときの直し方


原因と直し方

原因は doGet メソッドで文字エンコードを指定する前に本文を出力していたためでした。

文字化けした JabavServlert は文字のエンコードを指定する response.setCharacterEncoding や response.setContentType を実行するよりも先に
response.getWriter().append("Served at: ").append(request.getContextPath());
を実行していますが、この response.getWriter() ... が 文字エンコードの指定前に HTML の本文を出力してしまい文字化けの原因となっていました。
response.getWriter() ... の行は Eclipse のウィザードで新規に JSP ファイルを作成するとはじめから記入されているのですが、消さずにコーディングを続けたために残ってしまいました。

response.getWriter() ... の行を response.setContentType ... の次の行に移動して実行した結果が次の通りです。

今回の文字化けは doGet や doPost で最初に response.setCharacterEncoding や response.setContentType で文字エンコードを指定することで直りました。


ブラウザーはどう解釈してるのか確かめる

文字化けするときとしないときとで Internet Explorer の F12 開発者ツールで応答ヘッダーがどう変わるのか見てみました。
文字化けしたときの応答ヘッダーは charset=ISO-8859-1 となっていました。
JavaServlet で本文を先に出力してしまうとヘッダーを正常に出力出来ないようです。
また、文字エンコードを meta タグに指定しても、今回のケースは効果がなかったうようです。

文字化けが直った方法で応答ヘッダーを確認すると charset が指定した通りに変わりました。


関連ブログ

JavaScript でグラフを作る方法 (Chart.js)
JavaScriptをWebコンテンツを見ながらデバッグする [Intenet Explorer] [firefox]
HTMLソースのミスやエラーを素早くチェックする


2018年2月10日土曜日

[Blender] レンダリングの背景を変更する方法

How to change the render background

3次元CG編集ソフト Blender はデフォルトではレンダリングの背景色はグレーです。
この背景色を変更したり画像に差し替えたりする方法を調べてまとめました。
blog.fujiu.jp [Blender] レンダリングの背景を変更する方法


環境

  • Windows 10
  • Blender 2.78


色を変更する場合

Properties エリアの World をクリックし、Horizon Color をクリックするとカラーピッカーで背景色を変更できます。



背景に画像を指定する場合

背景に画像を指定するには、以下の手順でコンポジットノードを追加し Render の設定を変更します。

コンポジットノードの追加は次の通りです。
どのエディターでもいいので Node Editor に切り替えます。

ノードツリータイプを Compositing に設定し、Use Node を選択します。

Alpha Orver と Image のノードを追加し、下の図のように接続します。

Image ノードの Open をクリックして背景に表示したい画像ファイルを選択します。

以上がコンポジットノードの追加です。

Render の設定変更は次の通りです。
Properties ウィンドウの
Render - Shading - Alpha
を Transparent に変更します。
この設定でレンダリングすると Image ノードで設定した画像が背景に表示されます。


参考にしたコンテンツ

3d view - Background image is not displaying in rendered mode - Blender Stack Exchange
https://blender.stackexchange.com/questions/28772/background-image-is-not-displaying-in-rendered-mode


関連ブログ

BlenderのモデルデータをMMDに変換する方法
ゲームのグラフィックや音声を吸い出す方法 (Unity Assets Bundle Extractor)
[Blender] ManuelbastioniLAB でCLIP STUDIO用キャラクターを作る方法
[Blender] マテリアルのテクスチャ画像をまとめてUVに割り当てるスクリプト

2018年1月28日日曜日

Windows が瞬間的に遅くなる症状を直す方法 (SSDのプチフリ)

How to fix Windows short time freezing

数年前に Windows 8 の PC を購入し Windows 8.1、Windows 10 とアップデートして今も使ってます。
Windows 8 の頃は快適だったのですが 8.1 にアップデートしてから一瞬だけ操作を受け付けず画面の動きが固まるような症状が出るようになりました。
最新の 10 でも同じ症状が出ます。
ずっと原因が不明でしたが設定を変更したら症状がなくなったのでその内容をまとめました。


環境

  • SATA 規格の内蔵ハードディスクを SSD に換装した Lenovo ThinkPad


症状

  • スタートボタンをクリックするとスタートメニューが表示されるまで 0.1秒ほどかかることがある。その間マウスを動かしてもポインターが動かない。その後再起動するまではスタートボタンのクリックはすぐに反応する。
  • デスクトップの壁紙に設定したスライドショーが切り替わるタイミングで 0.1秒ほど画面の表示が固まる。その間マウスを動かしてもポインターが動かない。
  • DirectX を使用するゲームで 0.1秒ほどのフレーム飛びが不定期に起きる。


解決方法

症状が「プチフリーズ」と呼ばれる現象に似ていることとハードディスクを SSD に換装しているため、SSD のプチフリーズの解決手段を試しました。
いろいろな手段があるようですが、SSD の名前をレジストリに登録するという手段で解決したようです。


設定方法

レジストリに SSD の名前を手入力すると入力ミスする可能性がありますが、次の操作で正確な名前を調べて入力することができます。
コマンドプロンプトを起動して
msinfo32
と入力して Enter キーを押します。
blog.fujiu.jp Windows が瞬間的に遅くなる症状を直す方法 (SSDのプチフリ)

システム情報が起動するので
コンポーネント - 記憶域 - ディスク
と開くと右側に「モデル」が表示されます。この値が今回必要な名前です。
SSD を2台以上接続している場合は接続している台数だけ表示されると思います。

モデルの行をクリックしてメニューの
編集 - コピー
でコピーします。

次にコマンドプロンプト
regedit
と Enter キーを入力して レジストリエディターを管理者権限で起動します。

¥HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Service¥storahci¥Parameters¥Device
と開き、右側の NoLPM をダブルクリックします。

「複数文字列の編集」が表示されるので「値のデータ」を右クリックして 貼り付け (または Ctrl + V) でディスクの名前を貼り付けします。名前の最後に「*」をつけて OK をクリックします。

PC を再起動して設定完了です。
この設定以降は症状が現れてません。


試したけど解決しなかったこと

  • 最新のデバイスドライバーをインストールする
  • Lenovo Update で推奨のアップデートをインストールする
  • Windows 10 をクリーンインストールする
  • 電源オプションの AHCI Link Power Management-HIPM/DIPM を Active に設定する


参考にしたコンテンツ

Windows 8 ssd freeze "Reset to device, \Device\RaidPort0, was issued."
https://social.technet.microsoft.com/Forums/windows/en-US/fa9f69d6-ba08-4895-a2bb-4741c05d5fbf/windows-8-ssd-freeze-reset-to-device-deviceraidport0-was-issued?forum=w8itproperf
レジストリの NoLPM に SSD の名前を登録するとその SSD に LPM のコマンドが発行されなくなるようです。
つまり特定の SSD をWindows のシステムドライブにすると LPM (省電力管理)に問題が起きてプチフリーズが起こるようです。



関連ブログ

Windows 10 Creators Update をクリーンインストールする方法
[ThinkPad] ノートPCのハードディスクをSSDに交換する方法
フリーズ(文鎮化)したCrucialのSSDが復旧するまで

2018年1月13日土曜日

[Unity3D] オリジナルキャラクターにユニティちゃんのスクリプトを設定する方法

How to attach UnityChan assets to original charactors

Unity3D ゲームエンジン(以下 Unity)にオリジナキャラクターをインポートして「ユニティちゃん」と同じように操作できる方法をまとめました。
応用すれば MikuMikuDance 用のモデルにも適用できます。(下の画像)
blog.fujiu.jp  [Unity3D] オリジナルキャラクターにユニティちゃんの動作を設定する方法
アイティオール株式会社が公開したモデルを MMD4Mechanim で Unity にインポートしました


環境

  • Windows 10
  • MakeHuman 1.1.1
  • Unity 2017.3.0f3


オリジナルの人物モデルを作る

手っ取り早くオリジナルキャラクターを作るため人物のモデリングに特化した無料の MakeHuman を使いました。
MakeHuman のライセンスは AGPL3 ですが作ったモデルのライセンスは CC0 で利用できるようです。
キャラクターのデザインは自由ですが次の設定をしておくと Unity にインポートした後の不具合が少ないと思います。
  • Pose/Animate - Skelton は Cmu mb に設定する
  • Pose/Animate - Pose は Tpose に設定する
特に Skelton は Game engine に設定したら Unity にインポートした後「Required human bone 'Hips' not found」のエラーでリギングできなかったので要注意です。

キャラクターが完成したら
File - Export
で Filmbox (fbx) を選択して名前をつけて FBX ファイルにエクスポートします。


Unity にオリジナルモデルをインポートする

MakeHuman でエクスポートした FBX ファイルをサブフォルダーごと Unity の Project ウィンドウにインポートします。

Project ウィンドウの先ほどインポートした FBX ファイルを選択して Inspector の Rig の Animation Type を Humanoid に変更し Apply をクリックします。


Unity に "Unity-chan!" Model をインポートする

Asset Store から無料でダウンロード出来る "Unity-chan!" Model をインポートします。
このアセットのアニメーションやスクリプトをオリジナルキャラクターで動作させます。


オリジナルキャラクターに "Unity-chan!" のスクリプトを適用する

Project ウィンドウのオリジナルキャラクターを Hierarchy にドラッグ&ドロップします。

Hierarchy ウィンドウのオリジナルキャラクターに Project ウィンドウの
Assets - UnityChan - Prefabs - for Locomotion
の以下の3つのプレファブを追加します。
  • CamPos
  • FrontPos
  • JumpPos

オリジナルキャラクターの Inspector に Project ウィンドウの
Assets - UnityChan - Scripts
の UnityChanControlScriptWithRgidBody というスクリプトを追加します。
RgidBody と Capsule Collider が自動で追加されます。
RgidBody の Freeze Rotation の X・Y・Z をすべてオンにします。
Capsule Collider はキャラクターに合わせて大きさと位置を調整します。

オリジナルキャラクターの Inspector の Animator の Controller を UnityChanLocomotions に設定します。

Hierarchy の Main Camera に Project ウィンドウの
Assets - UnityChan - Scripts
の ThirdPersonCamera を追加します。

これで完了です。
地面がないと落下し続けるので Plane を追加して Mesh Corider をつけて地面として設置しました。
実行するとユニティちゃんと同じ動作をします。
カーソルキーで移動、走っている最中にスペースキーでジャンプします。


関連ブログ

MakeHumanでCLIP STUDIO用3Dキャラクターを作る方法
ゲームのグラフィックや音声を吸い出す方法 (Unity Assets Bundle Extractor)
[Blender] ManuelbastioniLAB でCLIP STUDIO用キャラクターを作る方法
Unity3D のC#スクリプトを Visual Studio Code で編集する方法



2018年1月7日日曜日

ゲームのグラフィックや音声を吸い出す方法 (Unity Assets Bundle Extractor)

How to rip Unity games to graphics and audio clips

Unity Assets Bundle Extractor というツールを使って Unity3D (以下 Unity) 製ゲームのグラフィックや音声を吸い出して
ファイルに復元する方法を試してみました。

※ FBX ファイルに復元したい場合は ゲームのグラフィックを FBX ファイルに吸い出す方法 (AssetStudio) をご覧ください。


環境

  • Windows 10
  • Unity 5.6.5
  • Unity Assets Bundle Extractor 2.1
このブログを書いている時点の Unity の最新バージョンは 2017.3.0 ですが、Unity Assets Bundle Extractor 2.1 では最新の Unity でビルドしたゲームの吸い出しが出来なかったため Unity をバージョンダウンして検証しました。


吸い出す対象のゲームを作る

メッシュオブジェクトがシンプルな「クエリちゃん SD版」を使って吸い出し方法を説明します。
「クエリちゃん SD版」は Asset Store から無料でダウンロード出来ます。
blog.fujiu.jp ゲームのグラフィックや音声を吸い出す方法

このアセットのプレファブを追加しただけの Scene を作り、キャラクターを吸い出すことを目標とします。

exe ファイルにビルドします。
今回は uabe_sample.exe というファイル名でビルドしました。


Unity Assets Bundle Extractor をダウンロードする

Unity Assets Bundle Extractor (以下、UABE) は Unity でビルドしたファイルからグラフィックや音声を吸い出すツールです。
機能はシンプルですが無料で公式サイトからダウンロードできます。
https://7daystodie.com/forums/showthread.php?22675-Unity-Assets-Bundle-Extractor

ダウンロードした zip ファイルを展開して AssetBundleExtractor.exe をダブルクリックすると起動します。


UABE で吸い出す

exe ファイルをビルドした場所に ○○_Data というフォルダーがあります。
uabe_sample.exe をというファイルにビルドしたらフォルダー名は uabe_sample_Data です。
UABE のメニュー
File - Open
でそのフォルダーの中の sharedassets0.assets というファイルを開きます。
ビルドした Unity が新しすぎると下のような画面が表示されるので選択肢のうち最も新しいバージョンを選択します。

UABE の 解析が正常に出来ると Assets info という画面が表示されます。

Type が Texture2D なら画像、Mesh ならメッシュオブジェクト、AudioClip なら音声です。
Mesh を吸い出すなら メッシュオブジェクトを選択して 右の Plugins をクリックして Export to obj を選んで OK をクリックします。
画像を吸い出すなら Texture2D オブジェクトを選択して Plugins をクリックして Export to .tga または Export to .pngを選んで OK をクリックします。
音声を吸い出すなら AudioClip オブジェクトを選択して Plugins をクリックして Export sound を選んで OK をクリックします。

下は Body のメッシュオブジェクトを吸い出してペイント3Dで開いた結果です。
胴体が吸い出せました。

Texture2D と Mesh を全部吸い出して Blender で復元してみました。
UV座標が保持されているのでテクスチャが正確に再現出来ました。


市販のゲームも吸い出し出来る

プライエタリーなゲームでもUnity製なら吸い出し出来ることがあります。
ただしほとんどのゲームは著作権やエンドユーザーライセンス契約などで保護されています。


AUBE の限界

AUBE で吸い出したメッシュオブジェクトはリギングが失われ親子関係も保たれません。
ほかのゲームに使い回すのは難しいと思います。
大事なアセットはバックアップすることをおすすめします。

関連ブログ

Unity3D のC#スクリプトを Visual Studio Code で編集する方法
Live2D を Unity3D で動作させる方法
[Unity3D] ユニティちゃんたちのアニメーションを分離するスクリプト


2017年12月23日土曜日

[セキュリティ] パソコン の Web カメラの盗撮や警告を防ぐ方法

How to stop web camera warnings of security software

2017年11月頃から Windows PC のセキュリティソフトが「Web カメラへのアクセスをブロックしました」という警告を出すようになりました。
blog.fujiu.jp [セキュリティ] パソコン の Web カメラの盗撮や警告を防ぐ方法

盗撮防止機能のようですが1時間に1回くらいの頻度で警告されます。
Web カメラにアクセスしているのは svchost.exeなので危険はないようでが警告のたびにプチフリーズすします。
Web カメラの動作を停止すると警告を出さずに済むのでその方法をまとめました。

環境

  • Windows 10


Web カメラの動作を停止する方法

スタートボタンを右クリックしてデバイスマネージャーを開きます。

デバイスマネージャーのイメージングデバイスの階層からWeb カメラを探します。
この PC のWeb カメラは Integrated Camera という名前でした。

Webカメラのアイコンを右クリックして デバイスを無効にする をクリックします。

これで Web カメラの警告が表示されることはなくなりました。
動作を再開するまで盗撮されることもありません。


Web カメラを利用する場合

Web カメラの動作を停止してる間はWeb カメラが利用できません。
Web カメラを動作させるにはデバイスマネージャーで Web カメラを右クリックして デバイスを有効にする をクリックします。



関連ブログ

[セキュリティ] Twitterの「このリンクは安全ではない」「このリクエストを保留しています」の対策2015年版
[セキュリティ] bitly.com にスパムサイトと誤認されたら
[セキュリティ] Twitterに「スパム、または安全でない」と誤認されたら
[インターネット] Googleストリートビューにプライバシー情報が公開されてしまったら

2017年12月16日土曜日

JavaScript でグラフを作る方法 (Chart.js)

meta name='twitter:description' content='JavaScript で Webブラウザーにグラフを描けるChart.jsを使ってみました。多機能で便利です。' />

How to draw charts on web browsers with Chrat.js

Chart.js はWebブラウザーにグラフを描画できるMITライセンスのオープンソースJavaScriptライブラリーです。
グラフはWebブラウザーのcanvasタグで描画するため、普及率の高いWebブラウザーに対応できます。
この Chart.js を使ってWebブラウザー用のグラフを作ってみました。
blog.fujiu.jp JavaScript でグラフを作る方法 (Chart.js)


環境

  • Windows 7、Internet Explorer 11
  • Windows 10、Edge


固定データの棒グラフを表示する

Chart.js でグラフを表示するには、グラフ化したいデータを JSON 化し、 Chart.js のクラスを呼び出すだけです。
気象庁が公開しているCSVファイルから一部抜粋して簡単な棒グラフを作ってみました。

これをEdgeで表示するとこうなります。

14~19行目のJSONデータを表示したい内容に合わせて変更すればグラフを変更出来ます。


公開データをグラフ化する

一般公開されているCSVファイルの内容をJSONに変換してグラフ化してみました。
気象庁が定期的に更新しているCSVファイルをリアルタイムに棒グラフ化します。
ただし、 このブログを書いている時点では気象庁のWebサイトはクロスドメインアクセス (Access-Control-Allow-Origin) を開放していないため Windows 7 のInternet Explorer 11 でしか動作確認出来ませんでした。



参考にしたコンテンツ

Chart.js は棒グラフのほかにも折れ線グラフ・レーダーチャート・円グラフ・バブルチャート・散布図などがあり、棒と折れ線を重ねることもできます。
そのほか色やアニメーションなど多彩な機能を備えています。
ただし公式サイトは英語のみ。
http://www.chartjs.org/docs/latest/


関連ブログ

Windows10 で古い Internet Explorer を使う方法
Visual Studio Code で Angular の開発環境を構築する方法