tag:blogger.com,1999:blog-86241117515096570852024-03-13T16:25:04.425+09:00SOFT yu1row'sいち、プログラマのyu1rowのブログですyu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.comBlogger58125tag:blogger.com,1999:blog-8624111751509657085.post-2717211314122459652015-02-09T20:00:00.000+09:002015-02-09T20:00:13.411+09:00Excelで邪魔な三角のアレを消そうねこんにちは。yu1rowです。<br />
<br />
Excelで三角のアレ(コンボボックスの選択ボタン)だけが出てて邪魔だったんで消す方法を探しました。<br />
<br />
<div class="separator" clear="all" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZbkEnA1pjxfvfL9Eg7KYTUbkAu8JcpgYQMwINm9fTSgTDyJIUPmUHS4SRjSla70KFRZ8PGcEY4OwX7grhGfq72TCsFlJlAS4TGkuqoUg9Xm0kw1iRAv1ihC1dR-dVH2ifn-MovIXOL2ZN/s1600/to_disturb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZbkEnA1pjxfvfL9Eg7KYTUbkAu8JcpgYQMwINm9fTSgTDyJIUPmUHS4SRjSla70KFRZ8PGcEY4OwX7grhGfq72TCsFlJlAS4TGkuqoUg9Xm0kw1iRAv1ihC1dR-dVH2ifn-MovIXOL2ZN/s1600/to_disturb.png" /></a></div>
↑これ邪魔<br />
<br />
<br />
<h3>
正体は "Drop Down"</h3>
<br />
Excel 2013で操作してたのでその方法を。<br />
リボンの [ページ レイアウト] - [オブジェクトの選択と表示] を選択してみてください。<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: left;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeoqwWRHOtFaj_fztB_BC7YOx2amDPZtdsDOkcbI5mn49R8Y4IVbNfgp1InHQ4Q3RWF4aN-Kpv7qzRfIvzwD5ZU0JJgZ7P28x_jPWpxrqvQXZjg45JKGZWkHNLDxkurip-IM8uVJpwLFcE/s1600/select_object.png" height="63" width="400" /><span id="goog_537497863"></span><a href="https://www.blogger.com/"></a><span id="goog_537497864"></span></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<span id="goog_1399978999"></span><span id="goog_1399979000"></span><br />
オブジェクトの一覧に [Drop Down N] が居たら、そいつが犯人の可能性大。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUeurFimqvZO_pG2kVvQt6ngdf0DA0k9CINApqFa2jDFmGKW_oEZcVcg4Ex_mcc1Z3-K8WphA_y8WpM4ZrsUUYN6RZt3Tq-tSRXprukIc-k3b_QYgKpXbLOSV8apVVf4kpVQeo5T5s8Q2x/s1600/bad_drop_down.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUeurFimqvZO_pG2kVvQt6ngdf0DA0k9CINApqFa2jDFmGKW_oEZcVcg4Ex_mcc1Z3-K8WphA_y8WpM4ZrsUUYN6RZt3Tq-tSRXprukIc-k3b_QYgKpXbLOSV8apVVf4kpVQeo5T5s8Q2x/s1600/bad_drop_down.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<h3>
いらない何も捨ててしまおう</h3>
<br />
オブジェクト一覧で犯人の名前がわかりました。<br />
こいつを消すにはコードを書かないとダメっぽいです。<br />
VBAのウインドウを表示(Alt + F11)して、イミディエイトウィンドウ(表示されてなければCtrl + G)に以下のコードを入力&エンターします。
<br />
<pre>ActiveSheet.Shapes("Drop Down N").Delete</pre>
※"Drop Down N" の "N" はちゃんと変えてください<br />
<br />
これで邪魔ものが消えてくれるといいですね。 yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-88655511922676584602014-12-12T21:00:00.000+09:002014-12-15T18:56:54.996+09:00Windows 7 の Android Emulator で HAXM が動かないこんにちは。yu1rowです。<br />
<br />
リリースされたばっかりのAndroid Studio 1.0を使ってみたんですが、その過程でWindows 7(x86)上のエミュレータでHAXM(Intel Hardware Accelerated Execution Manager)が動いてくれませんでした。<br />
なんとか動かせるようになったので記録を残しておきます。<br />
<br />
<h3>
一般的な手順</h3>
Android SDK Managerで"Intel x86 Emulator Accelerator (HAXM installer)をインストールします。<br />
この後、SDKのインストールされたフォルダにダウンロードされたインストーラを実行します。<br />
<pre>{ANDROID_SDK_HOME}/extras/intel/Hardware_Accelerated_Execution_Manager/intelhaxm-android.exe</pre>
<br />
<h3>
HAXMのバージョンが古い?</h3>
インストールが完了してエミュレータを実行してもウンともスンとも言わず、コマンドプロンプトから叩いてみると以下のようなエラーが発生していました。<br />
<pre>emulator: ERROR: x86 emulation currently requires hardware acceleration!
Please ensure Intel HAXM is properly installed and usable.
CPU acceleration status: HAX kernel module is not installed!
</pre>
困ったぞと思って調べていたところ、Intelのサイトから最新版をDLしてきてインストールすれば良いぞという情報が。<br />
<a href="https://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager">[HAXM最新版]</a><br />
一旦元のHAXMをアンインストールして、ダウンロードしたほうをインストールします。 <br />
で、これでOK!とはならなかったです。<br />
※うまくいったって報告例もありました<br />
<br />
<h3>
Failed to configure driver</h3>
Intelのサイトから最新版(調査時点で"haxm-windows_r05")をインストールしていたら、以下のようなメッセージが表示されました。<br />
<pre>Failed to configure driver: unknown error. Failed to open driver
</pre>
インストール完了後に"intelhaxm"というサービスが起動しているはずらしいんですが、以下のコマンドを叩いて確認してみます。<br />
<pre class="brush: batch; gutter: false;">> sc query intelhaxm
</pre>
しかし結果は"指定されたサービスはインストールされたサービスとして存在しません。"とのこと。<br />
またまた困ったぞと思って調べていたところ、Intelの開発者フォーラムに[Workaround Patch for HAXM Installation Error "Failed to configure driver: unknown error. Failed to open driver"]などというドンピシャっぽいエントリを発見。<br />
<a href="https://software.intel.com/en-us/blogs/2013/04/25/workaround-patch-for-haxm-installation-error-failed-to-configure-driver-unknown">[パッチのページ]</a><br />
ページ内に書いてある手順に従います。<br />
<ol>
<li>ページ内のリンクからzipを落としてくる</li>
<li>適当なフォルダに解凍する</li>
<li>解凍されたファイルの"hax_extract.cmd"を、HAXMインストーラのあるフォルダにコピーする</li>
<li>コピーした"hax_extract.cmd"を右クリックして「管理者として実行」する</li>
<li>権限についてのダイアログがでたら「はい」を選んで実行</li>
</ol>
これでうまくいくそうです。実際うまくいきました。<br />
コマンドプロンプトで"sc query intelhaxm"を叩いてみて"STATE:RUNNING"って出てたら多分成功。<br />
<br />
まぁ実は上記手順で最初はうまくいきませんでした。 <br />
コマンドプロンプトを管理者として実行して再度"hax_extract.cmd"を叩いてみると、実行結果に「まずは再起動してくれ」って書いてました。<br />
再起動後に上記手順を行うと、今度は無事成功しました。めでたし。yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-48253409984636284082014-09-10T14:24:00.001+09:002014-09-10T14:35:15.673+09:00iOS 8 と Wi-Fiこんにちは。yu1row です。<br />
<br />
iPhone 6 が発表されて、iOS 8 も提供されます。<br />
iOS 8 の情報が頻出する中で、「MAC アドレスがランダム生成される」ってキーワードが出てきて「えっ?」って思ったんで調べてみました。<br />
<br />
どうやら Wi-Fi のスキャニングに行う「Probe request」及び「Probe response」に含まれる MAC アドレスがランダム化するようです。<br />
街中の 野良 AP が勝手に個人情報を集めるみたいな動作を忌避しての対策なんでしょうか。<br />
<br />
この変更による影響として、Wi-Fi の親機で MAC アドレスフィルタリングを行っているような場合、問題になるのではないかと思いました。<br />
ただ、実際の接続要求に行う「Association Request」でランダムな MAC アドレスを使うとは書かれていませんでした。<br />
親機が「Probe request」ではなく、「Association Request」でフィルタリングする仕様なら問題ないのかも?<br />
問題が出ても、ファームアップデートされるかもですが。 <br />
<br />
Wi-Fi ネットワーク接続後の DHCP サーバへのブロードキャスト時には固定(universal)アドレスが用いられるので、MAC アドレス毎に IP 固定をしている環境は問題にはならないでしょう。<br />
<br />
結論。<br />
「iOS 8 にすると、Wi-Fi で MAC アドレス制限をしているネットワークに繋げられなくなる問題」が起こる(かも)。
yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-60123615551986950422014-06-06T19:00:00.000+09:002014-06-06T19:00:02.526+09:00OpenSSLの脆弱性が再度発見されたそうですこんにちは。yu1row です。 <br />
<br />
少し前にOpenSSLの脆弱性が発見されちょっとした騒ぎになっていましたが、昨日もまた新たな脆弱性が発見されました。<br />
ニュースによると、どうやら日本人が発見したとのことですが、それはどうでもよろしいと思っています。<br />それよりも引き起こされる問題と解決方法について知りたいのですが、不明な点が多いです。<br />以前の"HeartBleed"と、今回の"CCS Injection"、併せて記録しておきます。<br /><br />
<ul>
<li>CVE-2014-0160:HeartBleed:2014/04/07<br />読み取りオーバーランにより、不適切なコードを実行&SSLの秘密鍵が取得できてしまうなどの諸問題が発生する。<br />OpenSSLを使用している各種ディストリビューションではパッチが発行され、一応の事態収束に向かっている。<br />個人的には DebianやFedora、RedHatなどのサーバにパッチを当てて問題がなくなることを確認した。<br /><ul>
<li>NISTの脆弱性情報データベース:CVSS v2 Base Score: 5.0 (MEDIUM)<br /><a href="http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-0160" target="_blank">http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-0160</a><br /> </li>
<li>自身の(Web)サーバに問題がないかは以下で確認可能<br />("All good"って出たら大丈夫)<br /><a href="https://filippo.io/Heartbleed/" target="_blank">https://filippo.io/Heartbleed/</a>CVE-2014-0224:CCS Injection:2014/06/05</li>
</ul>
</li>
<li>CVE-2014-0224:CCS Injection:2014/06/05<br />脆弱性の存在するOpenSSLを使用したサーバ、脆弱性の存在するOpenSSLを使用したクライアント間で通信を行う際に、長さ0の情報をChangeCipherSpecメッセージに不適切なタイミングで紛れ込ませることによりセッションを奪い取ったり、機密情報の入手が可能になる。とのこと。<br />サーバ、クライアントのどちらかが対策されれば問題は発生しなくなる。<br />ただしパッチが発行されたかどうかは現時点(2014/6/6)で定かではない。<br />またハートブリードに比べてどの程度深刻なのかは不明。<br />※拾い集めた情報を要約したので説明に不備がある可能性があります<br />追加/訂正情報をお持ちの方は是非教えてください。<br /><ul>
<li>NISTの脆弱性情報データベース:※現在分析中とのこと<br /><a href="http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-0224" target="_blank">http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-0224</a></li>
</ul>
</li>
</ul>
<br />
※上記脆弱性情報データベースの各種スコア値は下記IPAの情報を参照してください<br /><a href="http://www.ipa.go.jp/security/vuln/CVSS.html" target="_blank">http://www.ipa.go.jp/security/vuln/CVSS.html</a>yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-48964078029584263072014-05-30T08:00:00.000+09:002014-05-30T08:00:02.704+09:00Jenkins で VSS プラグイン を使うこんにちは。yu1row です。<br />
<br />
ソースコード管理に VSS を使用しているプロジェクトを Jenkins で CI しようとすると、「Visual SourceSafe Plugin」ってのがありまして、これを使用することにしたんです。<br />
紆余曲折ありまして、なんとか使用できるようになったんで備忘録として書き留めておきます。<br />
そうそう、当該の「VSS を使用しているプロジェクト」の VSS のバージョン、6.0d なんです。<br />
2005 でもないんです。こんなプロジェクト、他の会社とかでもまだまだあるんですかね?<br />
<br />
<h3>
前提条件</h3>
<ul>
<li>Jenkins サーバマシン (Windows) には VSS のインストールが必要</li>
<li>たぶん Linux では動かない(※com4j ってので COM に動的バインドしてるみたい)</li>
<li>VSS のデータベース初期化ファイル (srcsafe.ini) は Windows 共有フォルダにアクセスしますので、このファイルにアクセス権がないと Jenkins のビルド時にソースを落としてくることができません</li>
<ul>
<li>Jenkins のプロセスを Windows のサービスとして起動している場合は、起動するユーザを共有フォルダにアクセスできるものに変更しておきます<br />(たぶん初期状態では起動するユーザは「Local System」になっていると思います)</li>
<li>Jenkins をサービスとして起動していない場合は、プロセス起動時のユーザが共有フォルダにアクセスできるようにしておきます<br /><br />※ユーザID/パスワードが共有フォルダへのアクセスに使用するものとまったく同じものを作っておくか、「Windows資格情報コンテナー」をいじってアクセスするID/パスワードを適切なものにしておきます</li>
</ul>
</ul>
<br />
<br />
<h3>
VSSへのチェックインをしていないのに「変更あり」とされ続けてしまう問題</h3>
「SCM をポーリング」にチェックを入れて設定していたら、ソースを変更していないのにポーリングの時間毎に毎回以下のような「変更あり」の状態になってしまい、ビルドがいっぱい走っていました。<br />
<blockquote class="tr_bq">
<pre>Started on 201X/XX/XX 10:00:00
Polling SCM changes on master
[poll] No previous build, so forcing an initial build.
Done. Took 0 ms
Changes found
</pre>
</blockquote>
<br />
なんでやろー?って思ってたら、VSS プラグインのバグのようです。<br />
issues に挙がってました。<br />
<br />
<ul>
<li>言及のあったエントリ(パッチもアップしてくれている)<br /><a href="https://issues.jenkins-ci.org/browse/JENKINS-10730">https://issues.jenkins-ci.org/browse/JENKINS-10730</a><br /></li>
<li>バグ対応のパッチ<br /><a href="https://issues.jenkins-ci.org/secure/attachment/20758/0001-fixed-incremental-build-in-checkout-inverting-check-.patch">https://issues.jenkins-ci.org/secure/attachment/20758/0001-fixed-incremental-build-in-checkout-inverting-check-.patch</a><br /></li>
<li>VSS プラグインのソース<br /><a href="https://github.com/jenkinsci/vss-plugin">https://github.com/jenkinsci/vss-plugin</a></li>
</ul>
<br />
しかし VSS プラグインはしばらく更新されていませんし、自分でパッチ当ててビルドするしかなさそうです。<br />
<br />
<h3>
自前でパッチ当て&ビルドする</h3>
<br />
プラグインを開発するための手順ページとして以下を参考にしました。 <br />
[Jenkins プラグインを開発する] <a href="http://qiita.com/kazuqqfp/items/ded99eb8d7bd967b9d2a">http://qiita.com/kazuqqfp/items/ded99eb8d7bd967b9d2a</a><br />
<br />
<ol>
<li>上記ページの1の手順、maven をインストールします<br />※maven のインストールは以下の URL でアーカイブをダウンロードして「Windows 2000/XP」の所よく読んでインストールして下さい。<br /><a href="http://maven.apache.org/download.cgi">http://maven.apache.org/download.cgi</a></li>
<li>2~4の手順の代わりに、上記の VSS プラグインのソースを落としてきて、さらにパッチを当てます<br />※1行だけ、if 文の「==」を「!=」に変更するだけなんで、手で修正してもいいですけどね</li>
<li>5の手順どおり、ソースのルートフォルダで「mvn install」します</li>
<li>hpi ファイルが完成したら Jenkins に手動でインストールします</li>
</ol>
何度も何度もビルドされちゃう問題はこれで回避できました。<br />
これで幸せになれる人がいれば嬉しいです。yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-52510292952241321442014-05-29T08:00:00.000+09:002014-05-29T08:00:00.476+09:00Visual Studio、MSBuild での Clean で特定フォルダを削除するこんにちは。yu1row です。<br />
<br />
タイトルの通りです。備忘録として残します。<br />
ビルドの際 Clean で特定のフォルダを削除する方法です。<br />
<br />
*.csproj や *.vbproj を直接開いて、<Target> タグに <RemoveDir> を追加して、削除するフォルダを記述しておきます。<br />
<br />
以下記述例<br />
<pre><Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
<Target Name="Clean" Condition=" '$(Configuration)' == 'Release' ">
<RemoveDir Directories="$(TargetDir)" />
</Target>
...
</Project>
</pre>
<br />
<ul>
<li>上記の例では Release の時だけ出力先フォルダが削除されるが、"Condition" を書かなければ Release のときも Debug の時も削除される</li>
<li>Directories の削除対象フォルダは";"で区切れば複数指定可能。</li>
<li>.vshost.exe や .pdb が邪魔して削除できない場合があるが、その場合は以下を参照<br />.vshost.exeファイルと.pdbファイルが生成されないようにするには?[VS 2008、VS 2005]<br /><a href="http://www.atmarkit.co.jp/fdotnet/dotnettips/831stoppdbfile/stoppdbfile.html">http://www.atmarkit.co.jp/fdotnet/dotnettips/831stoppdbfile/stoppdbfile.html</a></li>
</ul>
以上であります。yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-10324703094398554152014-05-28T08:00:00.000+09:002014-05-28T08:00:01.050+09:00GetWindowText のデッドロックこんにちは。yu1rowです。<br />
<br />
GetWindowText(SendMessage で WM_GETTEXT を使用した場合も同じ) でハマったので、その情報を備忘録として残します。<br />
※回避コードだけ見るなら、一番下までスクロール。<br />
<br />
マルチスレッドで EnumWindows で列挙した全 Window の文字列を GetWindowText やSendMessage を使って調べる処理を DLL に記述。<br />
そしてこの DLL の関数を Excel VBA から呼び出すというケースで、スレッドがブロックしてしまっていつまでも終了しないことがある。<br />
<br />
SendMessage を MSDN で確認すると、以下のように記述されていた。<br />
<br />
<blockquote class="tr_bq">
複数のスレッド間で送信されたメッセージが処理されるのは、受信側スレッドがメッセージ取得コードを実行したときだけです。送信側スレッドは、受信側スレッドがメッセージの処理を終えるまで、ブロックされます(待機状態になります)。</blockquote>
<br />
しかし、日本語版に無い情報を英語版の MSDN で発見。<br />
<blockquote class="tr_bq">
To prevent this, use <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms644952%28v=vs.85%29.aspx"><b>SendMessageTimeout</b></a> with SMTO_BLOCK set.For more information on nonqueued messages, see <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms644927%28v=vs.85%29.aspx#nonqueued_messages">Nonqueued Messages</a>.</blockquote>
MSDN に限ったことではないけれど、API リファレンスの英語版には日本語訳では見つけられない重要な文章がサラッと書かれている場合が見受けられる。英語版もたまには読んでみたほうがいい。<br />
<br />
全ウィンドウの文字列を GetWindowText(SendMessage) で取得する処理を別スレッドで起動・終了待ちをする処理をExcel VBA で行うときに問題が発生した。<br />
その別スレッドから Excel のウインドウ自体にも SendMessage することになるんだけど、そうするとずっと返ってこない。ブロックしちゃうってことらしい。<br />
<br />
SendMessage でブロックされていてスレッドが終了しない場合、SendMessage の代わりにSendMessageTimeout を使用して、適切なタイムアウト時間を指定すれば良いとのこと。<br />
以下コード例。 <br />
<pre class="brush: c++;">SendMessageTimeout(hWnd, WM_GETTEXT, 1024, (LPARAM)text, SMTO_BLOCK, 100, &dwRet);
</pre>
<ul>
<li>上記 100 となっている値は適切なタイムアウト時間を設定すること</li>
<li>SMTO_NORMAL、SMTO_BLOCK|、MTO_ABORTIFHUNG を必要に応じて組み合わせて使用すると良いと思う(オプションの詳細は MSDN 見てね)</li>
</ul>
<br />
ただし上記を使用すると、スレッド終了後の待機(WaitForSingleObject とか)でなんかちょっとだけ待機時間が発生して遅くなる。<br />
上記の例であれば、「100msec×スレッド数」ぐらい? <br />
<br />
これが気になる場合、「呼出元プロセスのウインドウに対して SendMessage するから止まる」 というデッドロックが元々の原因であるとすれば、上記の SendMessageTimeout を使用する前に、GetWindowThreadProcessId と GetCurrentProcessId を使用して呼出元プロセスのウインドウを回避するチェックを組み合わせるともっと良いかもしれない。<br />
こうすると、ぅぉっなんか遅いってならない。ピュッピュッって終了してくれる。 <br />
<br />
以下上記を実装した例。呼出元プロセスのウィンドウは回避、ブロックしても 100ms で終わるようにしている。<br />
<pre class="brush: c++;">DWORD pID;
GetWindowThreadProcessId(hWnd, &pID);
if (GetCurrentProcessId() == pID)
{
return 0;
}
DWORD dwRet;
if (SendMessageTimeout(hWnd, WM_GETTEXT, 1024, (LPARAM)text, SMTO_BLOCK, 100, &dwRet) == 0)
{
return 0;
}
</pre>
<br />
ハマった。こんときゃ辛かった。yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-49088332168525219272014-05-27T08:00:00.000+09:002014-05-27T08:00:00.273+09:00C# の配列変換こんにちは。yu1row です。<br />
<br />
配列変換の方法を備忘録として書いておきます。 <br />
int[] arr みたいな配列があったとして、これから string[] を得る場合、どしたらいいんでしょうか?<br />
<br />
当然、これはダメです。<br />
<pre class="brush: c#;">int[] arr = new int[] { 1, 2, 3 };
string[] dest = (string[])arr; // Can't compile
</pre>
<br />
以下のように単純にループで回せば、まぁいけますよね。<br />
<pre class="brush: c#;">int[] arr = new int[] { 1, 2, 3 };
string[] dest = new string[arr.Length];
for (int i = 0; i < arr.Length; i++)
{
dest[i] = arr[i].ToString();
} </pre>
<br />
Array.CovertAll() を使えばなんかすっきりした感じになる気がします。<br />
<pre class="brush: c#;">int[] arr = new int[] { 1, 2, 3 };
string[] dest = Array.ConvertAll<int string="">(arr, delegate(int i) { return i.ToString(); });
</int></pre>
<br />
ラムダ式が使える(C# 3.0以降)のであれば、もっとすっきりした感じになる気がします。<br />
<pre class="brush: c#;">int[] arr = new int[] { 1, 2, 3 };
string[] dest = Array.ConvertAll(arr, i => i.ToString());
</pre>
<br />
これだけです。
もっとカッコイイくて短くてジェネリックで、特殊条件にも対応できるコードにできる方法があれば、誰か教えてください。yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-28151055894583703192014-05-26T21:00:00.000+09:002014-05-26T21:00:07.120+09:00なんてステキなString.Join()こんにちは。yu1rowです。<br />
<br />
区切り文字を使った文字列連結に便利な String.Join() のご紹介です。<br />
C# に限らず、区切り文字を使った文字列の連結はちょっと面倒に感じることがあります。<br />
たとえば、以下の例のような{"A","B","C"}のような配列を"A - B - C"みたいに繋げたいとき、どうしますか?<br />
<br />
<table class="tdescription">
<tbody>
<tr><th>入力配列</th><th>出力値</th></tr>
<tr><td>{"A","B","C"}</td><td>"A - B - C"</td>
</tr>
<tr><td>{"A"}</td><td>"A"</td>
</tr>
<tr><td>{}</td><td>""</td>
</tr>
</tbody></table>
<br />
.NET では、String に String.Join(String, String[]) というメソッドがありまして、これで上記を実現してくれます。<br />
<br />
コード例<br />
<pre class="brush: c#;">string[] arr = new string[]{ "A", "B", "C" };
Console.WriteLine(String.Join(" - ", arr)); // Output: "A - B - C"
</pre>
<br />
便利。使わない理由はないと思う。<br />
<br />
ただ、これ入力が String の配列なんで、int 型とか、他の型の配列はいちいち変換しなきゃいけない。<br />
ただし、.NET Framework 4 以降は String.Join(String, Object[]) なんてオーバーロードが追加されまして、これが便利なんですわ。<br />
<br />
一応コード例<br />
<pre class="brush: c#;">int[] arr = new int[] { 1, 2, 3 };
// For C# 2.0
Console.WriteLine(String.Join(" - ", Array.ConvertAll(arr, delegate(int n) { return n.ToString(); })));
// For C# 3.0 or later
Console.WriteLine(String.Join(" - ", Array.ConvertAll(arr, n => n.ToString())));
// For .NET Framework 4.0 or later
Console.WriteLine(String.Join(" - ", arr));
</pre>
<br />
<br />
使わんテはありまへんな!
今日のネタはこれだけ。それでは!yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-29547260092311985592014-04-30T19:00:00.000+09:002014-05-07T19:11:21.457+09:00IME と Windows8こんにちは。yu1rowです。<br />
<br />
Windows 8 や Windows 8.1 が登場してしばらくが経ちましたが、アプリケーションによってはIMEの制御に問題が出ることがあり、調査を行いましたのでメモを残します。<br />
<br />
デスクトップなアプリケーションでは、テキストボックスにカーソルが移動した場合、日本語入力を自動的に切り替えたりするなんてことをする場合があります。<br />
Windows 8 より以前では、他のウィンドウに切り替えて入力方法を切り替えても、元のウィンドウには何の影響もありませんでした。<br />
Windows 8 以降では、インストールした直後の設定では、日本語入力モードはユーザ(セッション)毎に共通で、一つのウィンドウでの変更が他のウィンドウに影響してしまうという現象が起こる可能性があります。<br />
※ちなみに Windows Server 2012 でも Windows 8 と同じことが起こります。<br />
<br />
Windows 7 までの動作と同じにしたい場合、コントロールパネルから切り替えることが出来ます。<br />
<ul>
<li>(jp) - [言語] - [詳細設定] - [アプリ ウィンドウごとに異なる入力方式を設定する]</li>
<li>(en) - [language] - [advanced settings] - [Let me set a different input method for each app window]</li>
</ul>
<br />
この操作をわざわざ顧客にさせるようなベンダーはあまり居ないと思いますけどね。<br />
<br />
アプリケーションの開発者が現在の設定を確認するには SystemParametersInfo という API を使用します。<br />
IDE 立ち上げるのも面倒だったので Excel VBA の標準モジュールで関数を書いてみました。<br />
<pre class="brush: vb;">Option Explicit
#If VBA7 Then
Declare PtrSafe Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uparam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
#Else
Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uparam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
#End If
Const SPI_GETTHREADLOCALINPUTSETTINGS As Long = &H104E
' ------------------------------------------------------------
' [Description]
' IMEの入力モードがセッション毎/スレッド毎どちらで
' 保持されるかの設定状況を返します。
' ------------------------------------------------------------
' [Returns]
' 0 : セッション毎(Windows 8以降のみ)
' 1 : スレッド毎
' ------------------------------------------------------------
' [Author]
' yu1row
' ------------------------------------------------------------
Public Function GetThreadLocalInputSettings() As Integer
Dim ret As Long
Dim data As Long
ret = SystemParametersInfo(SPI_GETTHREADLOCALINPUTSETTINGS, 0, data, 0)
If ret <> 0 Then
GetThreadLocalInputSettings = IIf(data = 0, 0, 1)
Else
GetThreadLocalInputSettings = 1
End If
End Function
</pre>
<br />
SPI_GETTHREADLOCALINPUTSETTINGS(0x104E) は Windows 8 から追加されています。また、SPI_SETTHREADLOCALINPUTSETTINGS(0x104F) も追加されており、これでアプリケーションから設定の変更も可能です。<br />
<br />
さて、「コントロールパネルの設定を変えずに、他のウィンドウに影響させずに入力モードを切り替えたい」というワガママソリューションは存在するのでしょうか?<br />
未検証ですが、以下の手順でうまくいくかもしれません。保証できませんけど。<br />
<br />
<ol>
<li>Windows 8 で、かつ入力モードがアプリ毎保持ではない場合、アプリ毎保持に変更する(SPI_GETTHREADLOCALINPUTSETTINGS / SPI_SETTHREADLOCALINPUTSETTINGS)</li>
<li>IME の制御を行う (ImmSetConversionStatus とか)</li>
<li>1 でアプリ毎保持に変更を行っていた場合、設定を元に戻す(SPI_SETTHREADLOCALINPUTSETTINGS)</li>
</ol>
どうなんでしょうかね。やってみた人、結果教えてくれると嬉しいですw<br />
<br />
それでは。yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-88579309800745629482013-09-14T16:36:00.000+09:002014-12-15T18:50:42.886+09:00Windows 資格情報コンテナを編集する<h3>
Windows 資格情報コンテナを変更する方法</h3>
<br />
Windowsの共有フォルダにアクセスする際、パスワードを保存しておき、次からは入力をしなくていいうように資格情報を保存してある場合があります。<br />
これを修正する方法です。<br />
<br />
※全てWindows 7 Professionalでの確認のみ行っています<br />
<br />
<ol>
<li>[コントロールパネル] - [ユーザーアカウント] - [資格情報の管理]<br /> </li>
<li>ファイル名を指定して実行([Windows]キー+R)<br />> rundll32 keymgr.dll,KRShowKeyMgr<br /> </li>
<li>(コマンドプロンプトから) "cmdkey"<br />
<pre class="brush: bat; gutter: false;">rem 資格情報一覧を表示
cmdkey /list
rem 資格情報を削除する例
cmdkey /delete:192.168.0.100
rem 資格情報を追加する例(パスワードが尋ねられる)
cmdkey /add:192.168.0.100 /user:userid /pass</pre>
</li>
</ol>
<br />
<br />
<h3>
一時的に保存された資格情報を削除する</h3>
<br />
<br />
上記の資格情報とは別に一時的に資格情報が保存されます。<br />
「一時的」 とは言うものの、いつまで残っているのかは未検証です。<br />
<br />
これはコマンドで削除が可能です。 <br />
<br />
ネットワークドライブの割り当てなどで「現在、指定されたネットワークフォルダーは異なるユーザー名とパスワードを使って割り当てられています。」というメッセージが表示されたときなどに削除すると解決するかもしれません。<br />
<br />
※削除されるまで少し間があるようです(1分程度のタイムラグ?)<br />
<br />
<pre class="brush: bat; gutter: false;">rem 現在の資格情報の割り当てを確認
net use
rem いらないものを /delete で削除。
net use \\192.168.100.NNN\folder /delete
rem 全部消すなら以下でもOK(消してもいいなら)
net use * /delete /y</pre>
<br />
<br />yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-8578589452283185212013-02-19T20:00:00.000+09:002014-12-15T18:49:07.869+09:00Excelで正規表現を使いたくて<h3>
Excelシート上で正規表現検索ってできたっけ?</h3>
<br />
どうも。yu1row です。<br />
<br />
ふつーは正規表現での検索はできないみたいです。<br />
それを可能にするプラグインを入れて試してみます。<br />
<br />
<h3>
ダウンロード</h3>
<br />
[<a href="http://srcedit.pekori.jp/" target="_blank">SEのためのExcelツール</a>] - [<a href="http://srcedit.pekori.jp/tool/excelre.html" target="_blank">正規表現検索 Excel用正規表現検索ダイアログアドイン</a>] <br />
<br />
<h3>
インストール</h3>
<br />
ダウンロードしたZIPファイルを展開してできたexcelreフォルダ内のexcelre.xlaをダブルクリック。<br />
この際、マクロを有効にして下さい。 <br />
言語選択するダイアログが出たら「はい」で英語、「いいえ」で日本語になります。<br />
<br />
<h3>
基本的な使い方</h3>
<br />
<ul>
<li>検索ダイアログを表示する<br />Ctrl+R</li>
</ul>
これだけw<br />
<br />
<h3>
オレオレトラブルシューティング</h3>
<br />
<ul>
<li><b>ESC → 「コードの実行が中断されました。」</b><br /><br />→「継続」とすると大体大丈夫<br /><br /></li>
<li><b>検索に引っかからない</b><br /><br />→検索条件を見直してみる<br /><br />→ダメな場合、セルを選択している場合は選択を解除してみる<br /><br /> </li>
<li><b>「実行時エラー'5': プロシージャの呼び出し、または引数が不正です。」</b> <br /><br />→[検索]-[検索する文字列] のテキストボックス内で Ctrl+Z や Ctrl+X を押すと起きるので、以下の方法を試す<br /> <br /></li>
<li><b>「実行時エラー'13': 型が一致しません。」</b><br /><br />→Excelの再起動、もしくは以下の方法<br /><br /><ol>
<li>[ツール] - [アドイン] - [Excelre]のチェックOFF - [OK]</li>
<li>「実行時エラー'75': パス名が無効です。」が出たら[終了]</li>
<li>もういちど[ツール] - [アドイン] - [Excelre]のチェックON - [OK]</li>
</ol>
</li>
</ul>
Word用のもあるっぽい。<br />
こんど試してみます。<br />
<br />
以上です。 yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-33066953018784074412013-02-06T21:35:00.000+09:002014-12-15T18:47:56.124+09:00PukiWiki の WikiName を解除したいyu1row です。<br />
今回のネタはタイトルのまんま。<br />
<br />
<h3>
勝手にリンクされてしまう</h3>
<br />
PukiWiki でページ編集してて勝手にリンクされちゃうのがイヤやなって思って調べたんです。<br />
勝手にリンクされちゃうのは例えば<br />
<ul>
<li>NullPointerException </li>
<li>ValueName</li>
</ul>
みたいな。<br />
「大文字で始まる単語が2つ以上続く文字列」が勝手にリンクされるみたいです。<br />
正規表現的には<br />
<pre class="brush: plain; gutter: false;">\b([A-Z][a-z]+){2,}\b</pre>
みたいな。<br />
<br />
特定の場所だけリンクされたくないって場合どうするのか?って話です。<br />
<br />
解決方法は大文字を"&#xNN;"みたいな数値文字参照で置き換えるってことらしい。面倒。<br />
<br />
<h3>
とりあえずツール作るのは自己満足の極み</h3>
<br />
変換ツールを作ったんで使いたい人は使ってね(投げやり)<br />
[<a href="http://yu1row.com/esc_wikiname.html" target="_blank">Escape the WikiName</a>]<br />
<br />
需要、あるかなぁ?<br />
今回はここまでー!yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-6031707423730026642012-12-26T22:15:00.000+09:002012-12-26T22:15:00.029+09:00WordPressの検索を表示させないyu1rowです。<br />
<br />
タイトルのとおりです。タダのメモです。<br />
<br />
WordPress 3.4jaのTwenty Elevenでのみ確認しています。<br />
で、「検索」って何かって?<br />
<br />
↓これです。これを消したいだけです。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilQVopGcI_4D95xrMGnIy0ZbHv8gVUWnveieguKblyyc2hVeC5rKBFdtOy3YYSBhkoTG7T-_ndNF4_UCL_evvccdTYkqYVm3BbMKWpWQ1vh1PdZ81uJhtkbnOc18spS7w7uWtg2ITuxgBz/s1600/search_window_twenty_eleven.png" imageanchor="1" style="margin-left: 0px; margin-right: 1em;"><img border="0" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilQVopGcI_4D95xrMGnIy0ZbHv8gVUWnveieguKblyyc2hVeC5rKBFdtOy3YYSBhkoTG7T-_ndNF4_UCL_evvccdTYkqYVm3BbMKWpWQ1vh1PdZ81uJhtkbnOc18spS7w7uWtg2ITuxgBz/s400/search_window_twenty_eleven.png" width="400" /></a></div>
<br />
google先生に尋ねてみると、function.phpをいぢれだとか書いてました。<br />
<br />
でも、なんとなくイヤです。<br />
外観に因る部分はcssで済ましちゃいたいプログラマさん。<br />
<br />
結局style.cssに一行追加するだけでした。 <br />
<br />
■Twenty Eleven: スタイルシート (style.css)<br />
<pre class="brush: css; gutter: false; highlight: 2;">#branding .only-search #searchform {
visibility: hidden; /* 追記:サーチバーを表示しない */
top: 5px;
z-index: 1;
}</pre>
<br />
これだけです。以上!yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-52154988709833282622012-12-26T21:00:00.000+09:002012-12-26T21:06:22.720+09:00ドメイン取得後に届いた「Domain Purchase」っていう迷惑メールこんにちは。yu1rowです。<br />
<br />
ドメインをとったら、ちょっとしてから「Domain Purchase」とする迷惑メールが届きまんた。<br />
日本語で情報が見つからなかったので調べた結果を載せときます。 <br />
<br />
※以下メールの内容。ちょっと書き換えてあります。(http→ttp、****.***→取得したドメイン、***@***.***→whoisに登録されているメールアドレス)<br />
<span style="color: red;"><b>※以下の本文に書いてあるURLのサイトはマルウェアが仕込まれている可能性がある。踏んじゃダメ。絶対。</b></span><br />
<pre class="brush: plain; gutter: false; highlight: [1, 4, 7];">[From]
Domain Purchase (domainpurchase@domainpurchase.co)
[Subject]
Purchase of ****.***
[Body]
Congratulations on your purchase of ****.***.
Your domain's value has been estimated on our domain appraisal service.
You can read your custom report here:
ttp://domainestimator.com/results/?domain=****.***. (Domain Estimator Report)
There is a large portfolio of domains related to your keywords.
The current list of premium domains can be viewed here:
ttp://domainclosing.com/?phrase=****.*** (Related Premium Domains)
Cordially,
Stefanie Shay
If you would prefer not to receive email notifications of your estimated values in the future,
you need to visit: ttp://unsubscribe.domainingalerts.com/?email=***@***.***
</pre>
<br />
<br />
で、誰やねんステファニーって。 フルハウスなら知ってる。<br />
差出人アドレスのTLD、"co"は別に珍しいものではないです。どうせ機械送信なんやしどうでもいいです。<br />
まぁ確かにね、ドメインは買いました。 今回はWhoisを代行してもらうのを忘れてて、<span style="color: red;"><b>自分のメアドとか載せてたら来た</b></span>んやと思います。<br />
<br />
で、これらのURLは大丈夫なんかい?って思ってCleanMXで調べてみたところ、メールに記載されていた2つのドメインの<span style="color: red;"><b>URLは</b><b>マルウェアを踏む可能性がある</b><b>模様。クリックしちゃダメ。</b></span><br />
どんなマルウェアかは詳しく調べてないけど、トロイです。<br />
<br />
<span style="color: blue;">↓はCleanMXでメールに書いてあったドメインを検索した結果。クリックしても大丈夫</span><br />
<a href="http://support.clean-mx.de/clean-mx/viruses.php?domain=domainestimator.com">http://support.clean-mx.de/clean-mx/viruses.php?domain=domainestimator.com</a><br />
<a href="http://support.clean-mx.de/clean-mx/viruses.php?domain=domainclosing.com">http://support.clean-mx.de/clean-mx/viruses.php?domain=domainclosing.com</a><br />
<br />
メール送って欲しくない方はコチラとばかりに、"not to receive email notifications"に続けてURLが書いてありました。<br />
こっちはマルウェアの検出はなかったけどきっとただの生存確認だと思います。<span style="color: red;"><b>何にせよ</b><b>クリックしないほうがいい。</b></span><br />
ドメイン取ってWhoisに自分の情報載っけてる人、気をつけて下さいね。<br />
<br />
以上です。 yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-62540295163177505482012-11-19T23:12:00.000+09:002014-12-15T18:46:23.947+09:00続・Jenkins のビルドで SVN のチェックアウトに失敗する<h3>
またSVNでエラー</h3>
<br />
yu1rowです。<br />
<br />
以前「<a href="http://yu1rows.blogspot.jp/2012/09/jenkins-svn.html" target="_blank">Jenkins のビルドで SVN のチェックアウトに失敗する</a>」という記事を投稿しましたが、現象が再現しましたので、その内容と解消方法について記録します。<br />
<br />
<h3>
Microsoft と ESET どっちが悪いの?</h3>
<br />
結論から言うと以下の状況で現象が発生する可能性があります。<br />
<ul>
<li>Windows 7 に「ESET Smart Security」や「ESET NOD32 Antivirus」がインストールされている</li>
<li>Microsoft の更新プログラム「KB2735855」や「KB2750841」がインストールされている</li>
</ul>
<br />
現象には以下のようなものがあります<br />
<ul>
<li>SVN(Subversion)のチェックアウトに失敗する</li>
<li>ニコニコ動画やYoutube再生中に緑画面になる</li>
</ul>
<br />
以前同じ現象が発生した時に原因となった更新プログラム(KB2735855)でいくつかのファイルが Windows にインストールされましたが、今回の更新プログラム(KB2750841)でも同じファイルが更新されています。<br />
[<a href="http://support.microsoft.com/kb/2750841" target="_blank">KB2750841</a>]<br />
[<a href="http://www.microsoft.com/ja-jp/download/details.aspx?id=35617" target="_blank">ダウンロード:Windows7(x86)</a>]<br />
[<a href="http://www.microsoft.com/ja-jp/download/details.aspx?id=35668" target="_blank">ダウンロード:Windows7(x64)</a>]<br />
<br />
解決方法には Windows の更新プログラム (KB2750841) をアンインストールする方法と、ESET のセキュリティソフトウェアの設定を変更する方法の2通りありますが、個人的には後者はセキュリティ上やらないほうがいいんじゃないかと思います。参考程度に留めておいて下さい。<br />
以下それぞれの解決(設定)方法について説明します。<br />
<br />
<h3>
解決方法1:Windows の更新プログラムをアンインストールする</h3>
<br />
<ol>
<li>[コントロール パネル\すべてのコントロール パネル項目\プログラムと機能] を開く</li>
<li>[インストールされた更新プログラム] を選択</li>
<li>[Microsoft Windows (KB2750841) の更新プログラム] を探し、アンインストール</li>
<li>Windows を再起動</li>
<li>[コントロール パネル\すべてのコントロール パネル項目\Windows Update]を開く</li>
<li>[n 個の重要な更新プログラムが利用可能です] のリンクをクリック<br />※リンクがなければ [更新プログラムの確認] を行う</li>
<li>[Windows 7 用更新プログラム (KB2750841)] を右クリックして [更新プログラムの非表示] を選択</li>
</ol>
<br />
<h3>
解決方法2:ESET 製セキュリティソフトウェアの設定を変更する</h3>
<br />
<span style="color: red;">何度も言いますが、以下の方法ではセキュリティのレベルが落ちてしまうためお勧めしません。</span><br />
<span style="color: red;">参考程度に留めておいて下さい。</span><br />
<ol>
<li>「ESET Smart Security」または「ESET NOD32 Antivirus」の詳細設定を開く<br /><div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikGOR62fROLQxxGLQ12fBTejzAuwEMrik4lhkGuggP0sDNcd_AIJdfXhABCATw6rajQ4_WcM3y45WSy7vjHMSuhm_i12vgdLSIiU5U1cRAodtU47-0Qj_rLjRBHJ5J1d5lrTZW4rLmK31n/s1600/open_eset_details.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" height="227" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikGOR62fROLQxxGLQ12fBTejzAuwEMrik4lhkGuggP0sDNcd_AIJdfXhABCATw6rajQ4_WcM3y45WSy7vjHMSuhm_i12vgdLSIiU5U1cRAodtU47-0Qj_rLjRBHJ5J1d5lrTZW4rLmK31n/s320/open_eset_details.png" width="320" /></a></div>
※写真は「NOD32 Antivirus」のもの<br /><br />
</li>
<li>詳細設定の「Webアクセス保護」で「HTTPのチェックを有効にする」のチェックをはずす<br /><div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5c31sTlwMdzcLJBPCQplqSAP8sPEnQ9H8h-kyJ4Rr5tte0dJIHU_0jIhe708WtcWNRewpG0uFlnjsXsZ4Z8YjaDYusira9FlmNacDS2bnhB_LGxp0AIfgWx4iBuPukQ7EB0_r2Wxi-SFJ/s1600/eset_details_dialog.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5c31sTlwMdzcLJBPCQplqSAP8sPEnQ9H8h-kyJ4Rr5tte0dJIHU_0jIhe708WtcWNRewpG0uFlnjsXsZ4Z8YjaDYusira9FlmNacDS2bnhB_LGxp0AIfgWx4iBuPukQ7EB0_r2Wxi-SFJ/s320/eset_details_dialog.png" width="320" /></a></div>
</li>
</ol>
<br />
以上です。yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-51070235803320837812012-09-25T16:59:00.003+09:002014-12-15T18:45:28.452+09:00Jenkins のビルドで SVN のチェックアウトに失敗する<h3>
Jenkins スレーブが悪い子</h3>
<br />
yu1rowです。<br />
Jenkins のスレーブで最近以下のようなエラーが出てビルドできなくなってました(※ちょっと編集してます)。<br />
<pre class="brush: plain; gutter: false;">ERROR: Failed to check out http://192.168.1.1/svn/moduleX/trunk
org.tmatesoft.svn.core.SVNException: svn: E175002: REPORT /svn/moduleX/!svn/vcc/default failed
</pre>
SVNサーバーのログ(apache error log)ではこんな感じ(※ちょっと編集してます)。
<br />
<pre class="brush: plain; gutter: false;">[error] [client 192.168.1.2] Provider encountered an error while streaming a REPORT response. [500, #0]
[error] [client 192.168.1.2] A failure occurred while driving the update report editor [500, #103]
[error] [client 192.168.1.2] Error writing base64 data: Software caused connection abort [500, #103]
</pre>
<br />
Windows Server 2008 R2 では大丈夫で、何でかなー?って思いながら調べてまして。<br />
一応解決しましたのでここに解決法を記します。<br />
<br />
<h3>
原因:HotFix でした</h3>
<br />
SVN のフォーラムにて Windows Update したら SVN の Checkout/Commit ができなくなったヨ!って言ってる人がいました。<br />
[<a href="http://bit.ly/NOiXBX" target="_blank">Windows 7 Update KB2735855 Causing Checkout/Commit Problems (Chunk Delimiter)</a>] <br />
<br />
以下KBの情報です。<br />
[<a href="http://bit.ly/QgTsti" target="_blank">KB2735855</a>]<br />
[<a href="http://bit.ly/SPc6VG" target="_blank">ダウンロード(日本語)</a>]<br />
<br />
このKBはセキュリティパッチではないので、アンインストールして無効にしておくことで Windows 7 での現象が解決しました。<br />
※日本語ページに「Windows 7 for x64-Based Systems 用更新プログラム」って書いてますけど、x86 にも適用されます。っていうか今回 x86 の Windows 7 で発生しましたし。<br />
<br />
<h3>
対処方法</h3>
<br />
<ol>
<li>[コントロール パネル\すべてのコントロール パネル項目\プログラムと機能] を開く</li>
<li>[インストールされた更新プログラム] を選択</li>
<li>[Microsoft Windows (KB2735855) の更新プログラム] を探し、アンインストール</li>
<li>Windows を再起動</li>
<li>[コントロール パネル\すべてのコントロール パネル項目\Windows Update]を開く</li>
<li>[n 個の重要な更新プログラムが利用可能です] のリンクをクリック<br />※リンクがなければ [更新プログラムの確認] を行う</li>
<li>[Windows 7 用更新プログラム (KB2735855)] を右クリックして [更新プログラムの非表示] を選択 </li>
</ol>
余談ですが、このKBで<span class="st">ニコニコ動画やYoutubeで緑色の画面になってしまう原因の一つもコレだそうです。</span><br />
<span class="st">多分この対処方法を行うとこれも直ります。<br /> </span><br />
<br />
以上です。 yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-49656354034152099652012-09-01T00:29:00.000+09:002014-12-15T18:42:57.670+09:00犬を飼うと家計が浮く!?<h3>
落ちていくんです</h3>
<br />
どうも。イチ、プログラマのyu1rowです。<br />
最近黒い柴犬を飼いました。まだ4ヶ月の女の子、「ぐり」っていう名前です。<br />
<br />
予防接種も終わって、ようやく外に一緒に散歩行けるようになってうれしい限りなんですが、予想外に自分の体重がガンガン落ちていくんです。<br />
体重が落ちると食費も落ちてエンゲル係数的になんか良いんじゃね?ってことで強引にまとめてみました。<br />
<br />
<h3>
アタクシは1日どれくらいカロリーが必要なの?</h3>
<br />
成人が1日に必要とするカロリー量は<br />
<br />
体重(kg)×25~30(kcal)<br />
<br />
だそうです。<br />
<br />
ぐりと散歩に行くようになっていきなり 5kg 落ちまして。<br />
そうすると、1日に必要なカロリー量は 125~150 (kcal) 減ったことになります。<br />
<br />
<h3>
5kg ってナンボなん?</h3>
<br />
経済の分野でたまに話題に出るビッグマック指数、これから強引に倣ってみます。<br />
ググってみると <br />
<table class="tdescription">
<tbody>
<tr>
<th>ビッグマックのカロリー量</th><td>556 (kcal)</td>
</tr>
<tr>
<th>ビッグマックの金額</th><td>320 (円)</td>
</tr>
</tbody></table>
だそうです。<br />
じゃあ125~150 (kcal)ってビッグマック的にはナンボなん?<br />
<br />
125 (kcal) / 556 (kcal) × 320 (円) ≒ 72 (円)<br />
150 (kcal) / 556 (kcal) × 320 (円) ≒ 86 (円)<br />
<br />
ということで、ビッグマック換算で1日あたり、72~86円節約できることになります。<br />
年間にして、26280~31390円節約。<br />
<br />
これは大きいです!大きいように感じます!<br />
<br />
<h3>
この試算の前提には虚構が含まれますw</h3>
<br />
まぁ計算しましたけど、前提の「家計が浮く」って件、ホントはぐりちゃんがやってきてから色々と購入したりとか、別に節約にはなっていません。すんませんw <br />
まあ試算って夢がありますよね。<br />
あとウェイトコントロールはきっと健康にもつながりますしね!<br />
<br />
以上です。<br />
<br />
P.S. きょうは階段をのぼったりおりたりできました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXCZy6aAyu1pxgaYfcyhpqaaK2cZfdkxDV_vrXaoI6SpHyeqvscUT9USSftMak8AOac1voLmxgZPINiJST71XIqJKJcexCTPlaW0c0ygHpKkUNRCGbgKcsLFIDTDUQHYT5O2UkRZcsmRmm/s1600/guri.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXCZy6aAyu1pxgaYfcyhpqaaK2cZfdkxDV_vrXaoI6SpHyeqvscUT9USSftMak8AOac1voLmxgZPINiJST71XIqJKJcexCTPlaW0c0ygHpKkUNRCGbgKcsLFIDTDUQHYT5O2UkRZcsmRmm/s320/guri.JPG" width="320" /></a></div>
yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-62059175533027376722012-07-20T01:47:00.001+09:002014-12-15T18:39:01.618+09:00こんなん作りたいシリーズ - Incrementalist<h3>
ゲーム:Incrementalist</h3>
<br />
こんにちは。イチ、プログラマのyu1rowです。<br />
<br />
↓こんなん作りたいってのをまずはjQueryとかで実装。たぶんスマホでも動きます。<br />
[<a href="http://yu1row.com/incrementalist.html">Incrementalist(仮)</a>]<br />
※ルール:全部のパネルを3にしたらクリア、それだけです<br />
<br />
Androidで実装してみたいなぁ。<br />
...今日はそれだけの記事です。yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-62204832054541160272012-07-07T09:38:00.000+09:002014-12-15T18:33:29.868+09:00JNIと汎用テキストマッピング<h3>
Corresponding of Generic-Text Mappings for JNI programming</h3>
<br />
こんにちは。イチ、プログラマのyu1rowです。<br />
<br />
Javaで業務アプリなんかを作っていると、どうしてもネイティブの機能を使う必要が出てくるケースがあります。<br />
そんなときにJNIが役に立つんですが、Windowsネイティブでの実装をする場合は文字列の変換が必要になる場合があります。<br />
※Unicode/マルチバイトコード両対応にする必要性とか、説明が長くなるんで詳しくはグーグルにお任せするとします。<br />
<br />
汎用文字列を使用してUnicode/マルチバイトコード両対応にしようとして変換のコードを毎回書くのが面倒なので備忘録としてソースコードを作ってみた&公開して凹ってもらおうってのが今回の趣旨です。<br />
<br />
<h3>
Source code</h3>
<br />
公開するコードは以下の2つです。両方使います。<br />
ヘッダファイル(<a href="https://sites.google.com/site/yu1rows/store/jniutil.h">jniutil.h</a>)<br />
C++ソースコード(<a href="https://sites.google.com/site/yu1rows/store/jniutil.cpp">jniutil.cpp</a>)<br />
<br />
<h3>
注意事項</h3>
<br />
<ul>
<li>プリコンパイル済みヘッダーを使用する場合、jniutil.cppでstdafx.hをインクルードするか、またはjniutil.hからはプロトタイプ宣言だけ残してinclude/define/typedefの記述をstdafx.hに移動してしまってください。</li>
<li>jniutil.hではjni.hをインクルードしていますが、VisualStudioの設定などで、Javaのインストール先にあるインクルードファイルのフォルダパスを参照するようにしておいてください。<br />よくわからないという方は、詳しいWEBページが沢山あるので続きはその他WEBで。</li>
<li>STLを使用していますので、STLがNGな現場では当然NGとなりますのでご注意ください。<br />MFC使いたいよーって人は...読み替えて勝手に改造しちゃってください。</li>
</ul>
<br />
<h3>
使用方法</h3>
<br />
[tcout] Hello Worldとか<br />
<pre class="brush: cpp; gutter: false; class-name: 'zero_margin';">#include "jniutil.h"
void _tmain()
{
tcout << _T("Hello World.") << std::endl;
}</pre>
ミソは"tcout"("tcin"ってのもtypedefしてある)。<br />
jniutil.hのdefineを読めば何しているかわかると思います。<br />
<br />
[tstring] findとか<br />
<pre class="brush: cpp; gutter: false; class-name: 'zero_margin';">#include "jniutil.h"
void _tmain()
{
std::setlocale(LC_ALL, "");
tstring text = _T("我輩は猫である");
tcout << _T("\"") << text << _T("\"");
if (text.find(_T("猫")) != tstring::npos)
{
tcout << _T("には猫が出てくる") << std::endl;
}
else
{
tcout << _T("には猫が出てこない") << std::endl;
}
}</pre>
setlocaleしとかないとコンソールに正しく日本語が出力されない...場合があります。<br />
std::basic_stringのテンプレート引数に_TCHARを与えて一般化したものをtypedefしてtstringとしています。<br />
それだけなんですけど、とっても便利だと思いますし、JNIとか関係なく使えるんで他で使っても損は無いと思います。<br />
<br />
実はここまではJNIとは関係ありません。関係あるのは以下の例です。<br />
<br />
[JstringToTstring, TstringToJstring] : C++のコード例<br />
<pre class="brush: cpp; gutter: false; class-name: 'zero_margin'; highlight: [7, 9];">#include "com_yu1row_blog_JniSample.h"
#include "jniutil.h"
JNIEXPORT jstring JNICALL Java_com_yu1row_blog_JniSample_ExecSample
(JNIEnv *env, jobject obj, jstring str)
{
tstring tstr = JstringToTstring(env, str);
tstr += tstr;
return TstringToJstring(env, tstr);
}
</pre>
JstringToTstringでJavaから渡されたjstringをtstringに、TstringToJstringで逆にtstringからjstringに変換できます。
<br />
[JNI] : 上記を使用するJavaの実装例<br />
<pre class="brush: java; gutter: false; class-name: 'zero_margin';">package com.yu1row.blog;
public class JniSample {
static {
System.loadLibrary("JniSample");
}
public native String ExecSample(String str);
public static void main(String[] args) {
JniSample sample = new JniSample();
System.out.println(sample.ExecSample("あいうえお"));
}
}
</pre>
<br />
<h3>
注意とお願い</h3>
<br />
今回公開したコードはバグがあるかもしれません。<br />
バグのせいで何か迷惑を被ったと言われても責任は取れませんが、当エントリにて指摘いただければ(気が向けば)修正しますので気付いた点などあればどんどん凹って下さい。yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-8910293872008693462012-07-06T01:03:00.000+09:002014-12-15T18:30:59.519+09:00Windows 7 Home Premium と RDP<h3>
Windows 7 Home Premiumでリモートデスクトップしたいよう</h3>
<br />
こんにちは。イチ、プログラマのyu1rowです。<br />
<br />
メインの開発用に買ったZENBOOKですが、OSがWindows 7 Home Premium(x64)なので、リモートデスクトップ(ホスティング)が使えません。<br />
あ、もちろんクライアントは使えますよ。<br />
そんなとき、リモートデスクトップを使えるようにRDPのモジュールにパッチを当てる方法を見つけたのでご紹介です。<br />
※勿論、これを実施するか否かは個人の判断の元、自己責任でお願いします<br />
<br />
<h3>
リモートデスクトップぅ?</h3>
<br />
そもそもリモートデスクトップは知ってますか?<br />
<br />
要はWindowsをネットワーク経由で遠隔操作するサーバー/クライアント/プロトコルのことです。<br />
クライアントは「Windowsキー」+「R」で出てくる「ファイル名を指定して実行」で「mstsc」と入力するとすぐ起動できます。れっつとらい。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDk3RRdTHHBjh4Rp6H4VEU3nAjXC_w1mR_YHU-WjeGX1MCNIThd9i28mjZYZmIFX4cDdRZdVMDMwi38HpZVpZGfLYJeuHz3DPpJIXD5BfkU1v3ZB9tzAmwrZ7f44PI2XnRv4R1Rwi6QwYE/s1600/mstsc.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDk3RRdTHHBjh4Rp6H4VEU3nAjXC_w1mR_YHU-WjeGX1MCNIThd9i28mjZYZmIFX4cDdRZdVMDMwi38HpZVpZGfLYJeuHz3DPpJIXD5BfkU1v3ZB9tzAmwrZ7f44PI2XnRv4R1Rwi6QwYE/s320/mstsc.png" height="191" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIJIXRBTiYhT9EPcpDfjbWwZxKb74vzqp9TCrxeUuiPh0GFpE7V-VRNGNJCHK0UIQflT8hrjCvpGU4rfQ5s7SIms4bVhDKRP1agZuWxx86YtBtteqMCvAqjd9cCVEmVoP-sg6yHzBAidIW/s1600/mstsc_booted.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIJIXRBTiYhT9EPcpDfjbWwZxKb74vzqp9TCrxeUuiPh0GFpE7V-VRNGNJCHK0UIQflT8hrjCvpGU4rfQ5s7SIms4bVhDKRP1agZuWxx86YtBtteqMCvAqjd9cCVEmVoP-sg6yHzBAidIW/s320/mstsc_booted.png" height="162" width="320" /></a></div>
<br />
<br />
あと、MicrosoftさんはMac用のクライアントも無料で公開してるんです。マカーな人は使ってみて下さいな。<br />
<a href="https://www.microsoft.com/japan/mac/remote-desktop-client">Microsoft Remote Desktop Connection Client for Mac</a><br />
<br />
<h3>
他のイイコト</h3>
<br />
以下でパッチの紹介をするんですが、多分UltimateやProfessional、Enterpriseにも適用できるんです。<br />
で、使っているOSがHome Premiumであるかどうかに関係なく、パッチ当てると当てる前に比べてちょっとイイコトがあるんです。<br />
<br />
恒常的にRDPを使用している方なら知っていると思うんですが、現在のWindowsはマルチユーザログインできるのに対して、リモートデスクトップでWindowsに接続しようとすると既にログインしているアカウントはログオフしなくちゃいけません。<br />
しかしこのパッチで"Enable multiple logons per user"というオプションを有効にすることで、ユーザごとに別々のセッションを割り当てることができるためこれを解消できます。<br />
これは便利やでぇ・・・!<br />
<br />
<h3>
パッチのご紹介</h3>
<br />
まずダウンロードリンクからZIPファイルをダウンロードして解凍してください。<br />
<br />
[For Windows 7 SP1 (x86/x64)]<br />
<a href="http://www.mediafire.com/?xgj71fgh8jmtrdu">Concurrent_RDP_patcher</a><br />
<br />
解凍して出てくるexeを実行すると以下のようなウインドウが表示されます。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy4Ml77JthyphenhyphenbnNknHr3ExLkndyZyTTyEo8BrBoe-RuD8nEv-20CYg8dpacnlk2I35zIdhwDEcXG8g1IaCQInnk-kxw8fh4yAY6OFk15L-j3-3vvaTwQGhyphenhyphenQCByFafziWkwBfA9m0HGpTr7/s1600/Concurrent_RDP_patcher.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy4Ml77JthyphenhyphenbnNknHr3ExLkndyZyTTyEo8BrBoe-RuD8nEv-20CYg8dpacnlk2I35zIdhwDEcXG8g1IaCQInnk-kxw8fh4yAY6OFk15L-j3-3vvaTwQGhyphenhyphenQCByFafziWkwBfA9m0HGpTr7/s400/Concurrent_RDP_patcher.png" height="233" width="300" /></a></div>
適切なオプションにチェックを入れて[Patch]ボタンを押すと、もう完了です。アラ簡単!<br />
オプションの説明も書いときましょう。yu1rowって親切!<br />
<br />
<table class="tdescription">
<tbody>
<tr>
<th>オプション</th><th>説明</th>
</tr>
<tr>
<td>Enable multiple logons per user</td><td>前述の通り、ユーザ毎に別々のセッションでログオンできるようにします。<br />
既にログオンしているユーザがログオフにされることは無くなります。<br />
ただし、マシンパワーが無いとすごくPCが遅くなるかもしれません...よ?</td>
</tr>
<tr>
<td>Enable blank password logons</td><td>パスワード無しのログオンを有効にします。<br />
ただしセキュリティ的に如何なものかと思いますので、これを有効にする人は少ないでしょう。</td>
</tr>
</tbody></table>
<br />
<h3>
注意点</h3>
<br />
<ol>
<li>前述のパッチが当たらないよー!って場合、DLLのバージョンが変わってたりすることが考えられます<br />2012/07/06時点では上記パッチが使用できましたが、今後のWindowsアップデート次第ではどうなるかわかりませんのでご注意下さい</li>
<li> RDPのサーバ側はTCP/UDPの3389番を待ち受けポートとして使用しますファイアーウォールやルータのNAT設定などで受信ポートを空ける設定をしないと接続できない場合がありますのでご注意下さい<br />設定方法は...環境によっていろいろなんで、各自で調べて下さい</li>
</ol>
以上です!yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-23010373470067090562012-07-05T23:57:00.000+09:002014-12-15T18:28:42.594+09:00JNIお急ぎ作成レシピ<h3>
JNIる</h3>
<br />
こんにちは。イチ、プログラマのyu1rowです。<br />
JavaでOSネイティブの機能を使用する際に使用するJNIってものがあります。<br />
何それウマイの?って人は立ち去って頂いても結構です。<br />
<br />
JNIは使おうとするとやり方を忘れちゃったりしてたりするんで、足がかりになるくらいの備忘録を残しておきます。<br />
<br />
<h3>
前提条件として必要な環境</h3>
<br />
<table class="tdescription">
<tbody>
<tr>
<th>OS</th><td>Windows<br />
(今回はWindows 7 Professional x86を使用)</td>
</tr>
<tr>
<th>IDE(Java)</th><td>Eclipse<br />
(今回は3.6 Helios SR2 x86を使用)</td>
</tr>
<tr>
<th>IDE(C/C++)</th><td>Visual Studio<br />
(今回は2005 Professionalを使用)</td>
</tr>
<tr>
<th>JDK</th><td>今回はjdk1.6.0_24を使用</td>
</tr>
<tr>
<th>環境変数</th><td>上記JDKにパスが通っていること<br />
(上記のデフォルトならC:\Program Files\Java\jdk1.6.0_24\bin;とか)</td>
</tr>
</tbody></table>
<br />
それでは、以下つらつらと流れを書いていきます<br />
<br />
<h3>
Step 1 : JNI呼出用クラスの作成~ヘッダファイルの生成</h3>
<br />
まずはEclipseを起動してクラスを作成します。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7E9DPrLtrgCeMzCG2K2GF3uCL-dO7piD81dxBL8hHfs6gvTopLC3gCp7wLKGHsAq8g8TMENi3bGrMnPC8rWX44mU42Aq3OmV4w45_uGvmNpdj9AStBn3US2jMP-2K5QyXcqjR_1_a6aA5/s1600/001.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7E9DPrLtrgCeMzCG2K2GF3uCL-dO7piD81dxBL8hHfs6gvTopLC3gCp7wLKGHsAq8g8TMENi3bGrMnPC8rWX44mU42Aq3OmV4w45_uGvmNpdj9AStBn3US2jMP-2K5QyXcqjR_1_a6aA5/s320/001.png" height="134" width="320" /></a></div>
<br />
今回はクラス名を"JniSample"としています。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7S1B6A5GezLMbQGt28MrDyNRw3eO7gdxcVYVhPpAu0PVkHHKbXHDNrHZVj3UzfHpIU9CgF379gy9wb5A0it92M5anbLgtUBJRxXKJhSQ0C4VZzqZdiadC7Qi0zTswvhBgDnfj0KQQHcVR/s1600/002.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7S1B6A5GezLMbQGt28MrDyNRw3eO7gdxcVYVhPpAu0PVkHHKbXHDNrHZVj3UzfHpIU9CgF379gy9wb5A0it92M5anbLgtUBJRxXKJhSQ0C4VZzqZdiadC7Qi0zTswvhBgDnfj0KQQHcVR/s320/002.png" height="232" width="320" /></a></div>
後でDLLを作成するとして、DLL名称は"JniSampleImpl.dll"とでもしましょうか。<br />
int型の引数を渡せる戻り値voidの"ExecSample"というメソッドを作ることにします。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKCvctokrUR8eqU84_787TPANCWl0rqP6ScrNDj2y9xIIKiQ1rcOwFIK23HPWNRTH4I8iKzBij7f6mrRecNELia5VYl5lpkSaNxrUIcZDly2ES26VzExKyEwEFVv9lsn_Hufxj66QM875A/s1600/003.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKCvctokrUR8eqU84_787TPANCWl0rqP6ScrNDj2y9xIIKiQ1rcOwFIK23HPWNRTH4I8iKzBij7f6mrRecNELia5VYl5lpkSaNxrUIcZDly2ES26VzExKyEwEFVv9lsn_Hufxj66QM875A/s400/003.png" height="215" width="328" /></a></div>
<a href="http://sites.google.com/site/yu1rows/store/JniSample.java">ソースコードのダウンロード</a><br />
<br />
classファイルからヘッダファイルを生成します。<br />
コマンドプロンプトを起動してeclipseで使用しているworkspaceの中の、作成したプロジェクトのフォルダの中にbinフォルダがあると思いますので、このフォルダに移動します。<br />
ここでjavahコマンドに-jniオプション、先ほど作成したクラスの装飾名をフルで指定するとヘッダファイルが作成されるはずです。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv4QSpw4A-2kOv9w0q2mRmj-s4KyCO8JPZ-pgRbVJqYBmRtVohpWTRx_zimm4jhWsVbkCJaBtFsVsr2xisfXHV0AFoTAfySG4QkTEOxwKZtVrc2zK4vPJQRViDls9Vt43di5QGj01929Xk/s1600/004.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv4QSpw4A-2kOv9w0q2mRmj-s4KyCO8JPZ-pgRbVJqYBmRtVohpWTRx_zimm4jhWsVbkCJaBtFsVsr2xisfXHV0AFoTAfySG4QkTEOxwKZtVrc2zK4vPJQRViDls9Vt43di5QGj01929Xk/s320/004.png" height="233" width="320" /></a></div>
前述のとおり、環境変数でJDKのインストール先にパスを指定していないとjavahコマンドが失敗します。<br />
<br />
コマンドが成功するとこんな風にhファイルができているはずです。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSlu-tCUUl16f1vUN9CrqpNCb3-1hzdcIRi-cRB9cGqsrItDG7Bsd0hy_8FLVqmaL14uFdiO8eeGg8qh8fKt4xyKG0CAG60E0M6qJJrlzBPjCNUwZpptX7D2zEf_tq3ujXg-Mtzx_Uc_CH/s1600/005.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSlu-tCUUl16f1vUN9CrqpNCb3-1hzdcIRi-cRB9cGqsrItDG7Bsd0hy_8FLVqmaL14uFdiO8eeGg8qh8fKt4xyKG0CAG60E0M6qJJrlzBPjCNUwZpptX7D2zEf_tq3ujXg-Mtzx_Uc_CH/s320/005.png" height="212" width="320" /></a></div>
<br />
<h3>
Step 2 : DLLの作成 - プロジェクトの作成~ヘッダファイルの追加</h3>
<br />
Visual Studioを起動して新しいプロジェクトを作成します。<br />
今回は"JniSampleImpl"という名前でWin32プロジェクトを作成しました。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUNR4kmOXWsN1vt-ToVSE_y7t3vWOvQSzxgqWCROY0QoMEaJT8BDBvOWJoCzMbtULz4BF281q8vQELciZpIAssSAFrWukuQXZuJpEKamkB3mxh9ClehwEIoQFYrkMz5xAManJZoiLqHT-v/s1600/006.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUNR4kmOXWsN1vt-ToVSE_y7t3vWOvQSzxgqWCROY0QoMEaJT8BDBvOWJoCzMbtULz4BF281q8vQELciZpIAssSAFrWukuQXZuJpEKamkB3mxh9ClehwEIoQFYrkMz5xAManJZoiLqHT-v/s320/006.png" height="256" width="320" /></a></div>
アプリケーション設定で、「アプリケーションの種類」を「DLL」に、「追加のオプション」で「空のプロジェクト」を指定します。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheCNLMmFdmAK0TVEvC4eblfNiabANf79d7WtqsWBTHMyk0OyOBWzYPHCdmhkzmiWkO0Ewx4oa6LgaYzjnFV5eed_pXb0Sa1Qk44G7i1XNnZ10ViFtTxLQGlwdrxYTV0jU1x2ZOyYqCGgHK/s1600/007.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheCNLMmFdmAK0TVEvC4eblfNiabANf79d7WtqsWBTHMyk0OyOBWzYPHCdmhkzmiWkO0Ewx4oa6LgaYzjnFV5eed_pXb0Sa1Qk44G7i1XNnZ10ViFtTxLQGlwdrxYTV0jU1x2ZOyYqCGgHK/s200/007.png" height="123" width="200" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt1e5389bM5BAXvbNzvmemHE4sk6kEuFvgEzo3kMLHarzG-pfrM_8-FsERCgPIbSLo2Y9UemuSiDElY_r-zhI2yB22kGyA7JA95xTAfDezfdytoqGlBwbboNlP0U9cgtxxz2DLkb67F9vb/s1600/008.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt1e5389bM5BAXvbNzvmemHE4sk6kEuFvgEzo3kMLHarzG-pfrM_8-FsERCgPIbSLo2Y9UemuSiDElY_r-zhI2yB22kGyA7JA95xTAfDezfdytoqGlBwbboNlP0U9cgtxxz2DLkb67F9vb/s200/008.png" height="123" width="200" /></a></div>
<br />
プロジェクトのフォルダが作成されるので、Step 1で生成されたヘッダファイルをココへ移動します。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaeC9vBWUmp7CAgURAGA-Bbq9L67O9ddFvZ52qmrMy-IYRqQ-Unz9HnEk8O3Dgj12HglxYSFsnbt2SXfUueJQCLNGsdNY2Aaz0fhLPlq2IPlY59WcMS63onMEcV8GFMswubvxLeO-mQzAg/s1600/009.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaeC9vBWUmp7CAgURAGA-Bbq9L67O9ddFvZ52qmrMy-IYRqQ-Unz9HnEk8O3Dgj12HglxYSFsnbt2SXfUueJQCLNGsdNY2Aaz0fhLPlq2IPlY59WcMS63onMEcV8GFMswubvxLeO-mQzAg/s320/009.png" height="166" width="320" /></a></div>
フォルダに移動したヘッダファイルをプロジェクトに追加します。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz57BzZ5z4ZxzxHtULYu_WcXQ_FfsnFGZ0IRrUWfsOGDDcu3GbbdxVckpwmsxoQNI7rGCbbwKTLFk2e3K9gyvWGs7Br3vMMrRJjrVh4JcZSeOblGnKvVyXD6dwSSJ7LX2sRKrZB8w2M38s/s1600/010.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz57BzZ5z4ZxzxHtULYu_WcXQ_FfsnFGZ0IRrUWfsOGDDcu3GbbdxVckpwmsxoQNI7rGCbbwKTLFk2e3K9gyvWGs7Br3vMMrRJjrVh4JcZSeOblGnKvVyXD6dwSSJ7LX2sRKrZB8w2M38s/s320/010.png" height="298" width="320" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-nyQ-Z1Q4274XJeBhsY1BJoEeF2bnNJbP6i45ceqSb-kzBD_JtD9oGbEstn6qN8Zok5VoE5LU7PqNzgXCtHDjt8xODeECZxCpXWQFM9Epgb4-vZ5p6K1wLSEvPYm5X7SI99BTd5seYsFm/s1600/011.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-nyQ-Z1Q4274XJeBhsY1BJoEeF2bnNJbP6i45ceqSb-kzBD_JtD9oGbEstn6qN8Zok5VoE5LU7PqNzgXCtHDjt8xODeECZxCpXWQFM9Epgb4-vZ5p6K1wLSEvPYm5X7SI99BTd5seYsFm/s320/011.png" height="320" width="235" /></a></div>
<br />
<h3>
Step 3 : DLLの作成 - ネイティブコードの実装</h3>
<br />
実装を行うため、cppファイルを作成します。<br />
今回は"JniSampleImpl.cpp"という名前でファイルを追加しました。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNKALZndfRKHtNHB-JUbrx71LwVpNsc1J0xIr2imPVeYNvnZQwDm_vAZDo_sFXIH_AGq5-znrXyfavDwsUMToLD9-GuxyLUNuz7Md_4X4HxI2pOpHVNnHLEouh7KUiAaeOAVBYTq2ODIns/s1600/012.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNKALZndfRKHtNHB-JUbrx71LwVpNsc1J0xIr2imPVeYNvnZQwDm_vAZDo_sFXIH_AGq5-znrXyfavDwsUMToLD9-GuxyLUNuz7Md_4X4HxI2pOpHVNnHLEouh7KUiAaeOAVBYTq2ODIns/s320/012.png" height="320" width="290" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinX1oegPwpgtD8bRVA4JNTJi6lsgYti7gLI288quWYbSKguqlliVVwJm_1hgR_334ynnqvpHG4-oBC7QZRtp7Jj5iTC2FwDAYnwe5PWKyWAYjRFsMlPW3VDbb7MuR0xYK1uhAtO29SB-Bv/s1600/013.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinX1oegPwpgtD8bRVA4JNTJi6lsgYti7gLI288quWYbSKguqlliVVwJm_1hgR_334ynnqvpHG4-oBC7QZRtp7Jj5iTC2FwDAYnwe5PWKyWAYjRFsMlPW3VDbb7MuR0xYK1uhAtO29SB-Bv/s320/013.png" height="242" width="320" /></a></div>
<br />
cppファイルでは生成したヘッダファイルのインクルードを記述し、ヘッダファイルの定義に従って関数を記述します。<br />
以下の例では引数に1が渡されたらメッセージボックスを表示するように実装しています。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSLqHNUIJU8Wc0W8_YA6T6B_Xg3vkgSkhvWPZBlGSQ7ny_G9ry0o74IqT0RiayePmyi9UELo6mqpxnJl4KhcYBgR2aLDg6uTo2wopBcCQPm39CtRBBd3suh5baXDcgpjmJCcN6BlMUkvas/s1600/014.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSLqHNUIJU8Wc0W8_YA6T6B_Xg3vkgSkhvWPZBlGSQ7ny_G9ry0o74IqT0RiayePmyi9UELo6mqpxnJl4KhcYBgR2aLDg6uTo2wopBcCQPm39CtRBBd3suh5baXDcgpjmJCcN6BlMUkvas/s640/014.png" height="286" width="640" /></a></div>
<a href="http://sites.google.com/site/yu1rows/store/JniSampleImpl.cpp">ソースコードのダウンロード</a>
<br />
<br />
<h3>
Step 4 : DLLの作成 - JNI用ヘッダファイルのインクルードパス設定</h3>
<br />
※Visual Studioで1度設定しておけば以後はもう一度行う必要はありません<br />
JDKをインストールしたフォルダのincludeフォルダと、さらにその中のwin32フォルダをインクルードする対象のフォルダに設定しておきます。<br />
「ツール」メニューの「オプション」で開くダイアログから「プロジェクトおよびソリューション」の「VC++ディレクトリ」を選択すると設定を行う画面になります。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcKrvemmbZnoVOhhO7IFniub_jn9d0siCl-euTmnsDFLVYVxeWdk0n_wqYAa9ZyoymrWNbdDNK-JMjknS3pNuU6dvgijXCo-z_pt6gKYknwstk_fFF1Bpejc1T570rUwy-tZKIDNNaydjn/s1600/015.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcKrvemmbZnoVOhhO7IFniub_jn9d0siCl-euTmnsDFLVYVxeWdk0n_wqYAa9ZyoymrWNbdDNK-JMjknS3pNuU6dvgijXCo-z_pt6gKYknwstk_fFF1Bpejc1T570rUwy-tZKIDNNaydjn/s320/015.png" height="224" width="320" /></a></div>
ここで2つのフォルダを追加しておきます。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3wVuLm0mLnfUsq-5PqGOBZVhYBtlQmvLi0aC8HYBiG-Y1cKny3Fv0XBy37LNwKiGp0xJi7I2bhcFZo-c0MwTqP0y89vfhB7rkJsRdLYNv8b-CkoT6XXcuDuC4d_4uJkwx-zWQsICuPC4I/s1600/016.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3wVuLm0mLnfUsq-5PqGOBZVhYBtlQmvLi0aC8HYBiG-Y1cKny3Fv0XBy37LNwKiGp0xJi7I2bhcFZo-c0MwTqP0y89vfhB7rkJsRdLYNv8b-CkoT6XXcuDuC4d_4uJkwx-zWQsICuPC4I/s320/016.png" height="219" width="320" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjv42yxF0tc-zgjsuP4brhYee2TkxbdT9iHbsquCvXJ0EVYzNyH0AQ2dWQc0G3okl5sYXSxee2859gRj1Dl12Ozgi_psc7gK52fdfpD1xteKg8OQEndUMrbUbsP1P3nOFA4Yr9ID59yTtO/s1600/017.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjv42yxF0tc-zgjsuP4brhYee2TkxbdT9iHbsquCvXJ0EVYzNyH0AQ2dWQc0G3okl5sYXSxee2859gRj1Dl12Ozgi_psc7gK52fdfpD1xteKg8OQEndUMrbUbsP1P3nOFA4Yr9ID59yTtO/s320/017.png" height="219" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfqby7leygCqL2doZUTfccnJPMwGwCR5Co8W2OkZqm1GG5uQAvbj3ILHPxMGuZSF5p4bZseRS7go_2j3hsfJ3tUFUMmSMm1bZwmo-HdazRXOYm8oGK13tnH92BndbPPg8S7hf799X_EHXg/s1600/018.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfqby7leygCqL2doZUTfccnJPMwGwCR5Co8W2OkZqm1GG5uQAvbj3ILHPxMGuZSF5p4bZseRS7go_2j3hsfJ3tUFUMmSMm1bZwmo-HdazRXOYm8oGK13tnH92BndbPPg8S7hf799X_EHXg/s320/018.png" height="154" width="320" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYwRNdvgWY_dRVelMFMf4ScnVHlUNj-IkIrJsqAL-hhaYzTBSgI05YHbm9hyBC2LDAaxye2A5jvu90r4EAe7tpUlp0dfqZ3ZkYlYsnnln8twnN4vr9-zpq7sL4u02KN5_tTTAjoEz_WK7d/s1600/019.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYwRNdvgWY_dRVelMFMf4ScnVHlUNj-IkIrJsqAL-hhaYzTBSgI05YHbm9hyBC2LDAaxye2A5jvu90r4EAe7tpUlp0dfqZ3ZkYlYsnnln8twnN4vr9-zpq7sL4u02KN5_tTTAjoEz_WK7d/s320/019.png" height="154" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicTHdDkutRuDH1TDUzAflWr1BWm6uW75OW3QOHj4amOlF1TbUv9uahEH_UagBhucj-GvNPxIz3CUHr29a3x64ot6gFFgLnnB1PdzIdXGWSE6jCWvRnB37oall3G5bV_Sd8t9y9KMnAcKXA/s1600/020.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicTHdDkutRuDH1TDUzAflWr1BWm6uW75OW3QOHj4amOlF1TbUv9uahEH_UagBhucj-GvNPxIz3CUHr29a3x64ot6gFFgLnnB1PdzIdXGWSE6jCWvRnB37oall3G5bV_Sd8t9y9KMnAcKXA/s400/020.png" height="274" width="400" /></a></div>
<br />
<h3>
Step 5 : DLLの作成 - ビルド前の設定~ビルド</h3>
<br />
プロジェクトの設定でランタイムライブラリの設定を行っておきます。<br />
共通DLL設定でDLLを作成した場合、作成されるDLLのファイルは小さなサイズにすることができますが、ランタイムライブラリがインストールされていない環境では実行することができません。<br />
設定を変更してランタイムライブラリをDLLに埋め込むようにしておきます。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiB9IN3hU_xM4Am8cx2ECcN26E-2n0vBsoauqUR1YQ9UNu0gr7hPozZJQ02qh3co3iSNf-ANbFzCWPg-23S_wE0odBKzqU4aB10rdPVJIJy2b3feOwNRXEkzO4Y2D4Yro9E5z9sQDK6hlr/s1600/021.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiB9IN3hU_xM4Am8cx2ECcN26E-2n0vBsoauqUR1YQ9UNu0gr7hPozZJQ02qh3co3iSNf-ANbFzCWPg-23S_wE0odBKzqU4aB10rdPVJIJy2b3feOwNRXEkzO4Y2D4Yro9E5z9sQDK6hlr/s400/021.png" height="123" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWYLOgflC3GwTE5dXXcH2jKLupCMhBW_yJZRLT7Gcy1JHTseWcTZSZ_XHviyYkYZc1SUGbJlf1j-5urnFaq7KgEq5cDqR7_PovgBShyWU022YkUISov7gVRiPN-WHBkOoBFhodPVdyV4AB/s1600/022.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWYLOgflC3GwTE5dXXcH2jKLupCMhBW_yJZRLT7Gcy1JHTseWcTZSZ_XHviyYkYZc1SUGbJlf1j-5urnFaq7KgEq5cDqR7_PovgBShyWU022YkUISov7gVRiPN-WHBkOoBFhodPVdyV4AB/s400/022.png" height="315" width="400" /></a></div>
左側のペインの「構成プロパティ」→「C/C++」→「コード生成」を選択し、右側の「ランタイムライブラリ」で「マルチスレッドDLL(/MD)」を「マルチスレッド(/MT)」に変更します。<br />
※Debugの場合、「マルチスレッドデバッグDLL(/MDd)」を「マルチスレッドデバッグ(/MTd)」に変更します<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW2XbDr_dYb6VZs0JX1SCPF-D51EBYY_cL3Uk7oM7jhjW7zO-skGjfdryxMhR1IJ1q2h1INghR8baIVphuw4DIejVBEGj83AVdrNMoNlfYqHmM9Wf-JAPOoAWA4qbdt3N0cZ1WFz6RxTT-/s1600/023.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW2XbDr_dYb6VZs0JX1SCPF-D51EBYY_cL3Uk7oM7jhjW7zO-skGjfdryxMhR1IJ1q2h1INghR8baIVphuw4DIejVBEGj83AVdrNMoNlfYqHmM9Wf-JAPOoAWA4qbdt3N0cZ1WFz6RxTT-/s400/023.png" height="264" width="400" /></a></div>
設定が完了したら「ソリューションのビルド」を行います。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibkWc13RVhEiQtOmL27YV-twcIj0jfYE4v0Pz8o_PuztmxdK7poS_8PjvYUMKbVsqsp6h2YzBvxTrgMCFLUHzFiMI9HlVKsj_QDOrcoKbzTZNMNAzRg6UhhTxcvvegn5ijEsJvkytLkDEo/s1600/024.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibkWc13RVhEiQtOmL27YV-twcIj0jfYE4v0Pz8o_PuztmxdK7poS_8PjvYUMKbVsqsp6h2YzBvxTrgMCFLUHzFiMI9HlVKsj_QDOrcoKbzTZNMNAzRg6UhhTxcvvegn5ijEsJvkytLkDEo/s400/024.png" height="199" width="400" /></a></div>
正常終了した場合、"JniSampleImpl.dll"が出来上がるはずです。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiDr8oqA_zfDykdCfsAkvwCufV2C_0xprlRMCOE6p1dSVsbzou2gLgMQzuc54VazsiJzvAD0xqzbWhAA5C81lX_aAOSkTBmZjAkM9KONgKnqtYbHVLLW0modW2SWCpeqCgslvrmx5O08eG/s1600/025.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiDr8oqA_zfDykdCfsAkvwCufV2C_0xprlRMCOE6p1dSVsbzou2gLgMQzuc54VazsiJzvAD0xqzbWhAA5C81lX_aAOSkTBmZjAkM9KONgKnqtYbHVLLW0modW2SWCpeqCgslvrmx5O08eG/s400/025.png" height="166" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinLeGMX7RsUkYtd1pNTBZ8qbGRF0Yja5lWN_867ez8K5R_NhPRGBg8I8R9Jhx5vedPIYPt5YP7iwlqVjhz-O3gDH1IriCnLru7Yx_2sr4FUFUXu9aDkbhZ0DFZrv29q9lX3nSW0-z-j0so/s1600/026.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinLeGMX7RsUkYtd1pNTBZ8qbGRF0Yja5lWN_867ez8K5R_NhPRGBg8I8R9Jhx5vedPIYPt5YP7iwlqVjhz-O3gDH1IriCnLru7Yx_2sr4FUFUXu9aDkbhZ0DFZrv29q9lX3nSW0-z-j0so/s400/026.png" height="395" width="400" /></a></div>
<br />
<h3>
Step 6 : EclipseでのDLL指定~実行</h3>
<br />
Eclipseに戻り、先ほど作成したDLLをプロジェクトにインポートします。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIYlND4V1F5dt31ANLst5eAFs8GZ5bdCo4M7vKfSvN37GkFZfCbrWzwLu49GtXCMXx2BiDwJqt9sjJKsE1K-NZ6lFUzZooLcI4xawIyVHhmh_PCHDa9OVCr8BcVHK5cxJytK0mRwcEMBxC/s1600/027.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIYlND4V1F5dt31ANLst5eAFs8GZ5bdCo4M7vKfSvN37GkFZfCbrWzwLu49GtXCMXx2BiDwJqt9sjJKsE1K-NZ6lFUzZooLcI4xawIyVHhmh_PCHDa9OVCr8BcVHK5cxJytK0mRwcEMBxC/s400/027.png" height="356" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik9slFBOsZfWSq6hbebGeEXm5qbYuQ5JvP3uoGtae-yGaq-Rq2uOWgYk0HkHiqp40vGjB06So2SCqbtp_HF2nOMqE1TRLwQ5UYGsYj0eSLX4haMW3K0YX4O6tPCq0iON_zJuTLuACQtqUS/s1600/028.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik9slFBOsZfWSq6hbebGeEXm5qbYuQ5JvP3uoGtae-yGaq-Rq2uOWgYk0HkHiqp40vGjB06So2SCqbtp_HF2nOMqE1TRLwQ5UYGsYj0eSLX4haMW3K0YX4O6tPCq0iON_zJuTLuACQtqUS/s400/028.png" height="228" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4bdd79hhEwIuXFuMqvxHZSBRTQmQHwRKikCKboODi6RvSTg9n1i1Em8Da3qUIQgAOgL1SldPodFkI-NHsjxbOT7oB8xFe_rJ8L7THrquKtto-WEYTn1US01-TRHXCveRvJ9y1GN2_2SOh/s1600/029.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4bdd79hhEwIuXFuMqvxHZSBRTQmQHwRKikCKboODi6RvSTg9n1i1Em8Da3qUIQgAOgL1SldPodFkI-NHsjxbOT7oB8xFe_rJ8L7THrquKtto-WEYTn1US01-TRHXCveRvJ9y1GN2_2SOh/s400/029.png" height="243" width="400" /></a></div>
<br />
「実行構成」からDLLを追加した場所を環境変数に追加します。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1v7VxoT68YrHKHgcGIpum2zWDXQBJVx4AB_fQLCkNCXDi-TKCYn9IXgmiILpZBAROMcbaRBeBbzNKHHcFw2n5UOTdgSYaJ0ONKEImO0wyEVIidBrlLm75PNnFEpVXlzpdnoSSh8sLJ64L/s1600/030.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1v7VxoT68YrHKHgcGIpum2zWDXQBJVx4AB_fQLCkNCXDi-TKCYn9IXgmiILpZBAROMcbaRBeBbzNKHHcFw2n5UOTdgSYaJ0ONKEImO0wyEVIidBrlLm75PNnFEpVXlzpdnoSSh8sLJ64L/s400/030.png" height="400" width="343" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9eMDxBuEbGrLbNeIU7PCLijMNKRsE64SMS0wnJw_T3JU33oqcI4PZfRkFU84pQKvZzqQO4s4Iwq73tcyOivOZ-iDpQorLT7sMUH6TH4lwCwvrMpgeERnNX-7t9dUsXrGBr5RUiauMZdne/s1600/031.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9eMDxBuEbGrLbNeIU7PCLijMNKRsE64SMS0wnJw_T3JU33oqcI4PZfRkFU84pQKvZzqQO4s4Iwq73tcyOivOZ-iDpQorLT7sMUH6TH4lwCwvrMpgeERnNX-7t9dUsXrGBr5RUiauMZdne/s400/031.png" height="320" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHeReKtyVPKUNN2UKscg4krsVHsxwVS256OCtyA6U71XPl32XccIkNyOu1EGNSpaFQu-rBOHWghdhJIHVlwOnTk6jLcD_J-QknTxFG6p_WxXPofIE7iikUzgXCDqSkxPBqkW0ZthtjjTdY/s1600/032.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHeReKtyVPKUNN2UKscg4krsVHsxwVS256OCtyA6U71XPl32XccIkNyOu1EGNSpaFQu-rBOHWghdhJIHVlwOnTk6jLcD_J-QknTxFG6p_WxXPofIE7iikUzgXCDqSkxPBqkW0ZthtjjTdY/s400/032.png" height="98" width="400" /></a></div>
「実行」をクリックでアプリケーションが開始されます。<br />
うまくいけば先ほどのDLLが呼び出され、ダイアログが表示されるはずです。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOlHeyhxF8uG5uoyyT3OUsFyCiSm326oC8C0-FVeX790_iEIHI1U7xmKHnxua0ooYyEI-XqweZ9idfpi4p-KmkXlHW2F7DKtXhW1Wkjtxg9ko2dISRFB8SXdvWMPasqI1RMXNITZjsHyz-/s1600/033.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOlHeyhxF8uG5uoyyT3OUsFyCiSm326oC8C0-FVeX790_iEIHI1U7xmKHnxua0ooYyEI-XqweZ9idfpi4p-KmkXlHW2F7DKtXhW1Wkjtxg9ko2dISRFB8SXdvWMPasqI1RMXNITZjsHyz-/s400/033.png" height="178" width="154" /></a></div>
<br />
<br />
<h3>
お疲れ様でした</h3>
<br />
手順は以上となります。<br />
ねっ?簡単でしょ!?とまでは言いませんが、慣れれば何てことはないと思います。yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-34941228092400270172012-04-30T14:28:00.001+09:002014-12-15T18:23:44.265+09:00VMのゲストOSがインターネットに接続できない<h3>
VMware Player 4.0.2で接続不能</h3>
<br />
こんにちは。yu1rowです。<br />
Windows 8 Consumer PreviewをVMware Playerにインストールしましたが、インターネットにつながらなくてちょっと困りまして、解決方法の備忘録です。<br />
<br />
<h3>
対象の環境</h3>
<br />
<table class="tdescription">
<tbody>
<tr><th>VMware Playerのバージョン
</th><td>4.0.2 build-591240<br />
※他のバージョンでも起こるかもしれません</td></tr>
<tr><th>ネットワークカード</th><td>複数存在する<br />
※仮想NICや物理的に複数のNICがある場合</td></tr>
</tbody></table>
<br />
<h3>
確認と設定変更手順</h3>
<br />
<ol>
<li>ネットワークアダプタのプロパティを一つ一つ見ていってください。 </li>
<li>「VMware Bridge Protocol」のチェックを確認します<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjetKQPujO7g776suXQXvWR5e6txb5arMIvrLPPhcz90rL3KUctsMZUwyyuNr2L5lQ6weezaQE6nccnFGYY0HSVaqAqrutUKum2OmXibDVvn22UZk6HFod0Cnx2b8_J4De48spjHmyIH8jz/s1600/dialog.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjetKQPujO7g776suXQXvWR5e6txb5arMIvrLPPhcz90rL3KUctsMZUwyyuNr2L5lQ6weezaQE6nccnFGYY0HSVaqAqrutUKum2OmXibDVvn22UZk6HFod0Cnx2b8_J4De48spjHmyIH8jz/s320/dialog.png" height="320" width="314" /></a></div>
インターネット接続に使っているアダプタの場合チェックを付けます<br />
それ以外のアダプタはチェックを外します
</li>
</ol>
<br />
作業はこれだけです。<br />
VMwareのアップデート時などに急につながらなくなた時などに有効かもしれません。<br />
アップデートの時などに全部のアダプタの「VMware Bridge Protocol」を有効にするようなのですが、複数有効になってしまうとゲストOSがインターネットに接続できなくなってしまうみたいです。 <br />
<br />
これでもブリッジ接続がうまくいかない場合はまた別の問題でしょう。<br />
すみませんが他をググってください。yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-24664836939318747342012-04-21T11:00:00.001+09:002014-12-15T18:22:22.081+09:00JenkinsのビルドをWindowsコマンドプロンプトから即時で走らせる<div class="p">
<h3>
Jenkinsで今すぐビルドをしたいとき</h3>
</div>
<br />
Jenkinsでは一定時間毎にポーリングを行い、資源に変更のあった ジョブに対してビルドを行います。<br />
※「一定期間」とはLinuxではcronで設定するみたいです <br />
※Windowsではどうするのか知りません。タスクスケジューラとか?<br />
<br />
今回、ポーリングを待たずにスグにビルドするにはどーしたらいいの!?ってことで、優しいikikkoさんが教えてくれました。<br />
↓ikikkoさんの棲家↓<br />
<a href="http://d.hatena.ne.jp/ikikko/" target="_blank">http://d.hatena.ne.jp/ikikko/</a><br />
<br />
実際に試してみたらうまくいきました。ありがとうikikkoさん!<br />
というわけで備忘録を残しておきます。<br />
<br />
<div class="p">
<h3>
手順</h3>
</div>
<br />
<b>* 前提</b><br />
<table class="tdescription">
<tbody>
<tr><th>JenkinsへのアクセスURL</th><td>http://myhost/jenkins/</td></tr>
<tr><th>java.exeへのパス</th><td>あらかじめ通してあること</td></tr>
</tbody></table>
<br />
<ol>
<li>ブラウザから以下のURL(自分の環境に読み替えてね!)にアクセスして、jenkins-cli.jarをダウンロードする
<pre class="brush: bat; gutter: false; class-name: 'zero_margin';">http://myhost/jenkins/cli</pre>
※Dドライブ直下にダウンロードしたと仮定して以下の作業を進めます<br />
</li>
<li>コマンドプロンプトから以下のようにビルドを実行
<pre class="brush: bat; gutter: false; class-name: 'zero_margin';">C:\Users\Hoge>D:
D:\>java -jar jenkins-cli.jar -s http://myhost/jenkins/ build -c <JobName> --username myUsername --password myPassword</pre>
※前提条件の通り、java.exeにパスを通しておいて下さい<br />
※<JobName>は実際には山括弧で囲みません<br />
※ユーザ名とパスワードは制限がかかっている場合に必要です<br />
※ユーザ名とパスワードに記号とか使っていたらダブルクオーテーションで囲むといいかもしれません <br />
</li>
</ol>
これでビルドがすぐに開始されることを確認できました。<br />
ねっ?カンタンでしょ!?yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0tag:blogger.com,1999:blog-8624111751509657085.post-61810915016952498922012-03-15T02:14:00.001+09:002014-12-15T18:14:40.636+09:00CraftLaunch - 僕のイチオシランチャー<h3>
CraftLaunch</h3>
<br />
こんにちは。<br />
イチ技術者、yu1rowの時間です。<br />
<br />
プログラムを書くワタクシとしては、どれだけ速くアプリを起動できるかって事にもこだわりがあって、良いランチャーを色々探していました。<br />
<br />
今回ご紹介するのは「CraftLaunch」!<br />
キーボードからアプリを起動する、コマンド型ランチャーです。<br />
↓[CapsLock]キーを押すだけでランチャーを呼び出せます。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuoB6dGZqwW-4XRhx9D1PVP-3s1TURZ1iHdgoXQB08xZWiN1R2XpqadocDKDWDHqsZFDExKI6wYnkgdosZ8rc4MM8-Pd4Pl6-SNjw9ByeV1lo5tLbzHZWfwQ7GHmoOxnDIOVw1kECi4JWb/s1600/capslock.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuoB6dGZqwW-4XRhx9D1PVP-3s1TURZ1iHdgoXQB08xZWiN1R2XpqadocDKDWDHqsZFDExKI6wYnkgdosZ8rc4MM8-Pd4Pl6-SNjw9ByeV1lo5tLbzHZWfwQ7GHmoOxnDIOVw1kECi4JWb/s200/capslock.png" height="139" width="200" /></a></div>
<br />
<br />
↓[CapsLock]キーを押すとこんなんが出ます<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih1bn9jk4_y4A7I06xIW34VTzqGAJzrdeXHoCsmE_5rTTPlOeHZ5jNkaSymTPw_jXqpizwLNWSBYtxi0oYsdEuNqZe2m_P3OjjBnZ0Cz8MWvJVQdt46CLjF8_p0nIuimMyQL-iGbwMvCW4/s1600/craftlaunch.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih1bn9jk4_y4A7I06xIW34VTzqGAJzrdeXHoCsmE_5rTTPlOeHZ5jNkaSymTPw_jXqpizwLNWSBYtxi0oYsdEuNqZe2m_P3OjjBnZ0Cz8MWvJVQdt46CLjF8_p0nIuimMyQL-iGbwMvCW4/s1600/craftlaunch.png" /></a></div>
<br />
<h3>
ダウンロード&インストール</h3>
<br />
↓ここで配布されてます。<br />
<a href="http://sites.google.com/site/craftware/clnch">CraftLaunch - craftware</a><br />
<br />
インストール方法は、ダウンロードしたZIPファイルを解凍。<br />
出てきたフォルダを任意の場所に置く。だけ。<br />
※Windows Vista, 7の人は諸々の理由からProgram Filesとかには置かないほうが良いかも。<br />
マイドキュメントの中とかがお勧め。<br />
<br />
フォルダの中の「clnch.exe」をダブルクリックすると起動します。 <br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX9Ts2BA8Gwuw1YU6foFuIPIq0eoSpzDMw6OjP0CwEYNWouzi1TPWfcaXJcLVZ1t0KQEIT-Df1iHutMxPGR8xnFx6hgzcmFksDaPkDoxsohqf-zDUzhSsjER_aMCZiJGMu7CgWL-BiaBvd/s1600/execute.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX9Ts2BA8Gwuw1YU6foFuIPIq0eoSpzDMw6OjP0CwEYNWouzi1TPWfcaXJcLVZ1t0KQEIT-Df1iHutMxPGR8xnFx6hgzcmFksDaPkDoxsohqf-zDUzhSsjER_aMCZiJGMu7CgWL-BiaBvd/s320/execute.png" height="320" width="304" /></a></div>
<br />
Windows起動時に自動的に起動させたいって人は、スタートアップにショートカットを入れときましょう。<br />
↓俺はそうしてます<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhszZ_jQQklb4Yafmc1BScmhT1rFs9eiCSkLSfkA1PN2YloiSmpI7dphLM0sgmh1HeTL6lc3xAi9klPR5wHFvT-j1kGmhfBHXTkXEaBTosd_BOnLHmNh976j9GVrmc1ZZ__Hsju87CzOUU/s1600/startup.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhszZ_jQQklb4Yafmc1BScmhT1rFs9eiCSkLSfkA1PN2YloiSmpI7dphLM0sgmh1HeTL6lc3xAi9klPR5wHFvT-j1kGmhfBHXTkXEaBTosd_BOnLHmNh976j9GVrmc1ZZ__Hsju87CzOUU/s320/startup.png" height="149" width="320" /></a></div>
<br />
<h3>
設定</h3>
<br />
別に使わないときは画面から消えてて欲しいので、その設定をします。<br />
俺はそうしてます。<br />
<br />
設定方法:<br />
[CapsLock]押す → "Config"と入力 → [非アクティブ時の動作] → [非表示]<br />
<br />
<h3>
使い方1:ドラッグ&ドロップでランチャーにプログラムを登録する</h3>
<br />
[ファイルやフォルダをドラッグ] → [CapsLock]押す → CraftLaunchの窓にドロップ<br />
<br />
↓こんなんが出るんで、Enter押すと登録できます<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8cc64ddRSi8Dh_JZpsmC1z_tyg5PEa4g0qddrqLhQSHfi8NGcELf5TYutE7oi__WoAekfcYP0_Ha2Uie0Y74NWiAQ6OFA9Ri8bPqCHOg4yUpYlD-2zx8hI_1ny7epMwb2aYX3rHKgnq_u/s1600/regist1.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8cc64ddRSi8Dh_JZpsmC1z_tyg5PEa4g0qddrqLhQSHfi8NGcELf5TYutE7oi__WoAekfcYP0_Ha2Uie0Y74NWiAQ6OFA9Ri8bPqCHOg4yUpYlD-2zx8hI_1ny7epMwb2aYX3rHKgnq_u/s320/regist1.png" height="105" width="320" /></a></div>
<br />
<h3>
使い方2:直接入力でランチャーにプログラムを登録する</h3>
<br />
[CapsLock]押す → "Command"と入力 → [Shift+E]押す<br />
<br />
↓したらこんなん出ます<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvzYb-bbd_2t7rrdjAm70CCJoj9QKs_ciqbAVRPWbT3a3SieQHuugWR07LhSVAFIidPhPtSuDczV7fsvnfFXbzae8p2x4UxhVz9Bo9wMs7679lAJvdMhcWZ0n3IzHLab9er6w3HP-IWQjJ/s1600/regist_wnd1.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvzYb-bbd_2t7rrdjAm70CCJoj9QKs_ciqbAVRPWbT3a3SieQHuugWR07LhSVAFIidPhPtSuDczV7fsvnfFXbzae8p2x4UxhVz9Bo9wMs7679lAJvdMhcWZ0n3IzHLab9er6w3HP-IWQjJ/s320/regist_wnd1.png" height="104" width="320" /></a></div>
<table class="tdescription">
<tbody>
<tr><th>入力項目</th><th>説明</th></tr>
<tr><td>名前</td><td>コマンド ※ここに入力したものが実行コマンドになります</td></tr>
<tr><td>ファイル</td><td>ファイルやフォルダ、URL</td></tr>
<tr><td>パラメタ</td><td>コマンド実行時に渡すパラメータ</td></tr>
<tr><td>ディレクトリ</td><td>コマンド実行時の作業ディレクトリ</td></tr>
</tbody></table>
<br />
<ul>
<li>例1:"y"でヤフーのトップページを表示させたい!
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJfvpx0rubIjraNXgaHsWZO7CkGq0DE8KsozJ-dcJuHat_xKX-d0ZWrv8TKyriDnihFsG70ErF3zXLOi3LgZeETE5WvH4PLOg0oH-WN3VrH9abMwVWEkKgOGI0bXX7WS2IV5CoIIUoTUUZ/s1600/regist_wnd2.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJfvpx0rubIjraNXgaHsWZO7CkGq0DE8KsozJ-dcJuHat_xKX-d0ZWrv8TKyriDnihFsG70ErF3zXLOi3LgZeETE5WvH4PLOg0oH-WN3VrH9abMwVWEkKgOGI0bXX7WS2IV5CoIIUoTUUZ/s320/regist_wnd2.png" height="104" width="320" /></a></div>
<table class="tdescription">
<tbody>
<tr><th>名前</th><td>y</td></tr>
<tr><th>ファイル</th><td>http://www.yahoo.co.jp/</td></tr>
</tbody></table>
</li>
<br />
<br />
<li>例2:"c"でCドライブを表示したい!
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ3MWNc1jzsnUZ4rGkv06qzc8KB48-Ci5d9XS94OdRinakELQT1R6FYM7M6jgxogrNTZU2WpOlvnsPxCyXIJ6rHaFW8jhz5Vvxcu3jjGSzeGfdgDhoH_oWMwT9k5LTy4T5iPL1YZz-aJQV/s1600/regist_wnd3.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ3MWNc1jzsnUZ4rGkv06qzc8KB48-Ci5d9XS94OdRinakELQT1R6FYM7M6jgxogrNTZU2WpOlvnsPxCyXIJ6rHaFW8jhz5Vvxcu3jjGSzeGfdgDhoH_oWMwT9k5LTy4T5iPL1YZz-aJQV/s320/regist_wnd3.png" height="104" width="320" /></a></div>
<table class="tdescription">
<tbody>
<tr><th>名前</th><td>c</td></tr>
<tr><th>ファイル</th><td>C:\</td></tr>
</tbody></table>
</li>
</ul>
<br />
<h3>
登録してあるコマンドを削除する</h3>
<br />
[CapsLock]押す → "Command"と入力 → 消したいコマンドを選んで[Del]押す<br />
<br />
↓確認ダイアログで「はい」を選ぶと削除できます<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGdt0uqy0WvESqiLSV85AyaLD0_v6RcK-QJXHyTujgOoLoJFDKAEKEPHRJGN6niG1DXGeqnF6OXY1-WposOePx45BztmOdNnI-5CzSD0GPEAJnMBVG6RxP5HrCMGGcNBpUWnnmiB9v4Pda/s1600/confirm_remove.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGdt0uqy0WvESqiLSV85AyaLD0_v6RcK-QJXHyTujgOoLoJFDKAEKEPHRJGN6niG1DXGeqnF6OXY1-WposOePx45BztmOdNnI-5CzSD0GPEAJnMBVG6RxP5HrCMGGcNBpUWnnmiB9v4Pda/s1600/confirm_remove.png" /></a></div>
<br />
<h3>
番外編:BMIを計算しよう</h3>
<br />
数値が22くらいだったら「標準体重」ですよーとかいうアレです。<br />
CraftLaunchは簡単な電卓になるので、ちょっと計算して遊んでみましょう。<br />
<ul>
<li>BMIの計算式<br />
<br />
体重(kg)÷身長(m)の2乗
</li>
</ul>
<br />
<ul>
<li>計算方法 ※50kgで160cm(=1.6m)の人の例<br />
<br />
[CapsLock]押す → "50/pow(1.6,2)"を入力
</li>
</ul>
<br />
<ul>
<li>結果の確認<br />
<br />
[Enter]で結果が即座に表示されます。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieKu_rx7ZIRObCdc-6CrUY-VdrY4lYAGuU7p3leIGKoszSjJCSYgeswS1tMwXgAaMVWdcEL6iFo3242EiPUoogimrt-tlfYmuRn7V8uR4I-h_gxECKQNSfOJzs__vSDq2ElrHtULykH_PQ/s1600/calc.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieKu_rx7ZIRObCdc-6CrUY-VdrY4lYAGuU7p3leIGKoszSjJCSYgeswS1tMwXgAaMVWdcEL6iFo3242EiPUoogimrt-tlfYmuRn7V8uR4I-h_gxECKQNSfOJzs__vSDq2ElrHtULykH_PQ/s320/calc.png" height="269" width="320" /></a></div>
19.531250ですって。<br />
この人「やせ気味」ですよ!
</li>
</ul>
<br />
<ul>
<li>履歴の削除<br />
<br />
実はCraftLaunchは前に入力したコマンドを覚えています。<br />
上記の例だと、"5"を入れると前に入力した"50/pow(1.6,2)"が出てきます。<br />
け、消してくださいー!!(*/∇\*)<br />
って人は、すかさず[Ctrl+K]を押すと消せますよ!
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-sajrXSPMRknUzCfymBhj62ecPTY8mXMsGVHqVzDV_CjwhivP4G81xzFu97ZYf5xRP7a1AIW4-8HrQogteuSaSgn0YfHVcRMwIiysBq4ytinCjecwJE0ZTyZJzOKfFd-eLaQYVdWvDZ-M/s1600/clear_history.png" imageanchor="1" style="margin-left: 0; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-sajrXSPMRknUzCfymBhj62ecPTY8mXMsGVHqVzDV_CjwhivP4G81xzFu97ZYf5xRP7a1AIW4-8HrQogteuSaSgn0YfHVcRMwIiysBq4ytinCjecwJE0ZTyZJzOKfFd-eLaQYVdWvDZ-M/s1600/clear_history.png" /></a></div>
↑ここで[Ctrl+K]!
</li>
</ul>
<br />
<h3>
色々カスタマイズできて面白いよ!</h3>
<br />
プログラマならもちろん、ちょっとプログラムも書けるよって人はpython知らなくても、少し勉強するだけでCraftLaunchを色々カスタマイズできます。<br />
時間のある時に遊んでみると面白いかもしれませんよ?yu1rowhttp://www.blogger.com/profile/02602795098545825866noreply@blogger.com0