2016年09月26日

AndroidStudio で簡単に KeyStore ファイルを作成する方法

コマンドプロンプトから入力する方法は面倒だと感じていた人には朗報です。

Build メニューから、Generate Signed APK を呼び出し、Create New ボタンを押すだけで、
KeyStore ファイルを作成するダイアログが表示されます。

posted by 開発G at 16:37| Comment(0) | TrackBack(0) | Programming

2016年05月11日

ハイパーバイザが動かないので仮想マシンが起動できなくなった場合

Hyper-V マネージャは動いているが、仮想マシンを選択して起動しようとすると、
「ハイパーバイザが実行されていないので、仮想マシンが起動できない」というメッセージが表示されました。

Hyper-V マネージャを止めたり、起動したりしていたことが関係していると思いますが、なぜか、

hypervisorlaunchtype = no

の状態になっていました。

管理者権限で、dos プロンプトより、
bcdedit.exe /set hypervisorlaunchtype auto

と実行して、パソコンを再起動したら、ハイパーバイザが実行されるようになりました。

hypervisorlaunchtype = auto としておかないとダメなようです。
posted by 開発G at 20:52| Comment(0) | TrackBack(0) | Programming

2016年02月19日

VB6をWin7環境で動かすのに、いろいろ注意が必要でした

VB6アプリは、いまだに根強い人気というか、ニーズがあって、このため、Win7はいまだにアップデイトしていないユーザさんも多いようです。

先日、久しぶりにこうした環境と格闘してしまいました。

  • VB6SP6 ランタイムが、最終の公開版のようですが、これだけでは、空の VB6 アプリ.exe でさえ、動きませんでした。SYSINFO.OCX が足りなかったらしく、それを、探してきてインストールしたら、空の アプリ.exe は起動しました。

  • OLE Automation (なつかしい)アプリと連携させるには、OLE Automation を提供するプログラム側を一度、管理者権限で起動しておく必要があります。そうしないと、C++ 6.0 で作ったアプリの Automation 関係が正しく登録されませんでした。


以上2点を行ったところ、VB6 アプリを Win7 環境で動かすことができました。これが、Win10 でも成立するかわかりませんが、アプリ側も .Net Framework に移植していくことを考えないといけないと思います。
posted by 開発G at 22:11| Comment(0) | TrackBack(0) | Programming

2016年02月12日

Prarallel構文を使ってタスクによる並列化を考える


先日、プログラム高速化の要望があったので、マルチコアCPUを使って、並列処理ができないか検討してみました。

C# で WinForm アプリケーションを書いていると、UI スレッド(フォアグラウンド)から、バックグラウンドスレッドに処理を任せても、バックグラウンドからは直接UIスレッドを触れないという問題に出くわしたりしますが、この別スレッドで動く仕組みを使うと、並列に処理を進めることができます。

このスレッドという仕組みは、同じメモリ空間にありながら、独立したスタックを持つことで並列に動くことができるわけですが、スレッドの生成、消去には、時間がかかります。そこで、あらかじめ用意したスレッド・プールに、小さな並列に動くプログラム断片を放り込んで、順番にスレッドとして動かす仕組みが作られました。(ここの詳しい説明は、スレッドプールとタスク がわかりやすいです。)

この小さなプログラム断片を Task と呼びますが、扱いにくいスレッドを抽象化して、C# から扱いやすくしたものと考えればいいと思います。こうしてスレッドプールをCPUのコア数程度用意すれば、Task を意識してプログラムを作るだけで並列度があげられそうです。従って、今後は、スレッドという用語に惑わされずに、Task で考えていくのがいいのでしょう。。。

この考えにマッチしているのが、Parallel 構文の For, ForEach, Invoke で、割と簡単に並列動作可能なプログラムが作れるようになります。これらの構文では、ラムダ式、関数呼び出しなども組み合わせられます。さらに、Async, Await という、非同期制御が書きやすい構文も追加されているので、これらを組み合わせれば、複数のCPUコアを効率よく使えそうです。いくつか実験的なプログラムを書いてみて気が付いたことですが、、

  • Task 同士が実行途中で共有変数を更新するようなロジックはなるべく考えない方がよい。(ロックが発生して、並列度が下がります。)

  • Task があまりに小さいと、Task 切り替えの時間が無視できないサイズになり、Parallel構文を使わない方が速くなってしまう。いろいろ試行錯誤してみましたが、ある程度以上のサイズにしないと並列化したメリットがでませんでした。

  • スレッドセーフなクラスの使用を優先する。

  • どこを並列化したらいいか考慮しながら設計する。


posted by 開発G at 11:33| Comment(0) | TrackBack(0) | Programming

2015年06月27日

ASP.NET の 名前空間 '???' では不適切ですエラーについて


ASP.NET で開発中に、ユーザコントロール等を、別プロジェクトからコピーしてきたときに、このエラーに遭遇しました。プロジェクトの obj フォルダや、Windows\Microsoft.NET\Framework*\*\Temporary ASP.NET Files\ の下を削除したりすると、一時的に現象は消えるのですが、しばらくすると同じ現象が出ていました。

いろいろ調べると、どうもコンパイラのバグのようです。

web.config に、 のように、batch="false" を入れるとこの不可解な現象は消えます。
posted by 開発G at 23:11| Comment(0) | TrackBack(0) | Programming