2013/12/06

最近はもっぱらXamarinを使っている。

Xamarinといえば。
iOSやAndroidのアプリをC#で作れる、というものです。

どうやら理屈的には「C#のコードをネイティブに変換し、それをコンパイルする」ということで。
なにやらApple Storeの申請も通るらしいです。
恐ろしいですね。

けど、本当に恐ろしいのはコードの手数の少なさとネットワーク関連のバックグラウンドのやりやすさです。
なんと、最近のバージョンはasync~awaitが使えてしまいます。
そのおかげでコーディングが楽で楽で。

2013/11/19

WindowsのJNI経由でcliのオブジェクトを操作する

先日から続けているJNI経由何とかする話の続きです。

C#.exe → win32.dll → Java.jar → c++/cli.dllときまして。
cliのオブジェクトを操作する段階まで来ました。
ところが、cliのオブジェクトってC++のポインタみたいに数値で記憶しておく、ってことができないのですね。

最初の目論見ではJavaのクラスにネイティブのポインタを保存するint型のフィールドでも作って管理しておけばいいんじゃね?
くらいに考えていたのですが。
見事にその目論見は達成できなくなってしまったのです orz

2013/11/18

WindowsでC#とC++とJNI。

少し前に「WindowsでJNI」ってブログ書いたんですけど。
ここ数日またJNIやってました。

一番時間がかかるのは各々のインターフェイスがちゃんとつながったかテストするのに時間かかってて。
というのもちゃんと動いてくれないからなんですが。
で、やっと動くようになってきまして。

2013/11/16

MVC4とMVC5。

今まで気づかなかった自分が悪いのですが。
Visual Studio 2013のWebのプロジェクト、普通に作るとMVC5で、Visual Studio 2012を選ぶとMVC4のプロジェクトになるんですね。
気づかなかったですw

というわけで、先日書いたOWINのネタは、MVC4で作っていた様です。

2013/11/13

Windows8.1でInternetに繋がっているか?

Windows8.1のストアアプリでInternetに繋がっているか判定するには、以下の判定を行う。

ConnectionProfile cProf =
NetworkInformation.GetInternetConnectionProfile();
if (cProf != null &&
cProf.GetNetworkConnectivityLevel() == NetworkConnectivityLevel.InternetAccess) {
    Debug.WriteLine(“Connecting internet”);
}
else
{
    Debug.WriteLine(“Disconnected internet”);
}

GetInternetConnectionProfileで有効な接続を取得し、InternetAccessと比べることで接続しているか調べる。
Hyper-Vやら動かしてたら、GetInternetConnectionProfile() != nullだけでは調べられなくて、InternetAccessも見ないと正しい状態がわからないのです。


この辺りをしっかり調べてユーザーへ警告しないとStoreでは落とされちゃうので注意。

2013/11/12

失敗失敗。

別Blogの方にOWINの記事を書いたら、大間違いでした。
そういえばローカルのデバッグ環境だけでテストしていたような。

物書くときはちゃんとデプロイしてから書きましょう。

すみませんでした。

2013/11/06

JadeとjQuery UIでアラート表示

jQuery UIを使用できるようにした状態のJadeファイルに

#error_message.ui-widget
    .ui-state-error.ui-corner-all
        p(style='white-space: nowrap;')
            span.ui-icon.ui-icon-alert(style='float: left;')
            span#error_message_text

こう書いておいて、JavaScriptで

$(‘#error_message_text’).html(‘内部エラーです’);
$(‘#error_message’).show(‘blind’);

とかするわけです。

Windows8.1用ストアアプリのAppBarにカスタムコントロールを入れる

Windows8.1ストアアプリのAppBarの中身はCommandBarってビューになってます。
つまり、こう。

<Page.BottomAppBar>
  <CommandBar>
    <CommandBar.PrimaryCommands>
      <AppBarButton Icon=”Home” Label=”Home”/>
    </CommandBar.PrimaryCommands>
  </CommandBar>
</Page.ButtomAppBar>

んで、このAppBar中にカスタムなコントロールを入れるには、ICommandBarElementを継承したコントロールを作ればいいんですね。
これは簡単で、UserControlを作って、ICommandBarElementも継承させればよかったりします。
つまり、こう。

namespace TestApp
{
  public sealed partial class TestControl : UserControl, ICommandBarElement
  {

こんな感じでUserControl継承のコントロール作って、後ろに付け加えれば。
CommandBar.[Primary|Secondary]Commandsの中に入れられるコントロールになりますですよ。

2013/11/05

WindowsでJNI。

ちょっとした事情でWindowsでJNIやってみました。

またこれがクセもので。
というか、やろうとしたことが、クセ球な方法だったのですが。

ファイルを読み込んで既存のJavaライブラリ(Android用のw)に食わせて結果を受ける、という。
…全部Javaでやれよ、という話もありますが。
しがらみで、呼び元はC#なのです。

てなわけで。
C#→Win32→Java→C++→C#
という呼び出し順。
…出力先がAzureのStorageなので。
で、今日は前半、Javaまで。

ところが、JNI_CreateVM呼ぶとアプリもろとも落ちるわ、読み込むJarの指定方法ははっきりしないわで。
(Jarファイルが複数ある場合)

CreateVMの方はLoadLibrary経由にすることで回避、Jarは再度Jarする事で一本に。

そうして何とかJavaまで呼び出す事ができる様になりました。

ああ、もちろんAndroid Frameworkの部分は偽物クラス作って動かすのです。
JNIでC#にまで処理をもっていくのですね。
そこは明日以降ということに。

まあでも、これできれば開発スピード上がるわ。

2013/11/03

jQuery uiをやっている。

楽でいいね。jQuery ui。
Node.jsとjadeとjQuery uiで組み合わせるとかなり楽で。

Jadeで
#progress
ってやって、JavaScriptで
$('#progress').progressbar({value:false}).show('blind');
ってやるだけでプログレスバーがグリグリ動いてくれるんだから。

もうなんだか手抜きしまくりになってしまいそうです。

2013/11/02

試しに書いてみる。

前に書いたのが作った時の2004年だというw
新しくタブレット買ったので、雑記用に使用しようかな、と。

でも、日記っていつも3日ボーズなんだよ。
困ったもんだ。