rabbit-dev

現役スマフォプログラマーが適当にプログラム関係の記事を放り込むブログ

XamarinFormsとiOSのログだしサンプル

System.Diagnosticsに揃ってます。 iOSはSystemにあります。FormsもSystemにあると思っていたので、、、少し手間取りました。

コード

Formsでのログだし方法

https://gist.github.com/yuzoh/ffc51f4106eda3ea8cd879647279be79

using System;
using Xamarin.Forms;
using System.Diagnostics;

namespace sample
{
    public partial class SamplePage : ContentPage
    {
        public SamplePage()
        {
            InitializeComponent();
        }

        protected override void OnAppearing()
        {
            base.OnAppearing();
            Debug.WriteLine("ここログ出る");
        }
    }
}

iOSでのログだし方法

https://gist.github.com/6e9545261590ea5f3e9543af66812f69

using System;
using System.Linq;
using AVFoundation;
using CoreGraphics;
using Foundation;
using UIKit;
using CoreMedia;
using CoreFoundation;

namespace sample.iOS
{
    public class SampleClass : UIView
    {
        public SampleClass()
        {
            Console.WriteLine("ログ出しサンプル");
        }
    }
}

マイクの音量を検出する方法

http://blog.koogawa.com/entry/2013/11/24/121807
このサイトのXamarin版です。

コード

https://gist.github.com/c2084778f54ebd07864180aea7f78040

private InputAudioQueue mAudioQueue;
private NSTimer mAudioTimer;

public void autoStart(){
    AudioStreamBasicDescription basic = new AudioStreamBasicDescription();
    basic.SampleRate = 44100.00;
    basic.Format = AudioFormatType.LinearPCM;
    basic.FormatFlags = AudioFormatFlags.LinearPCMIsBigEndian |
        AudioFormatFlags.LinearPCMIsSignedInteger |
        AudioFormatFlags.LinearPCMIsPacked;
    basic.BytesPerPacket = 2;
    basic.BytesPerFrame = 2;
    basic.FramesPerPacket = 1;
    basic.ChannelsPerFrame = 1;
    basic.BitsPerChannel = 16;

    mAudioQueue = new InputAudioQueue(basic);
    mAudioQueue.Start();
    mAudioQueue.EnableLevelMetering = true;

    mAudioTimer = NSTimer.CreateRepeatingTimer(0.5,(obj) => {
        workVolume();
    });
    NSRunLoop.Current.AddTimer(mAudioTimer, NSRunLoopMode.Default);
}

void workVolume(){
    int channel = 0;
    AudioQueueLevelMeterState [] levels = mAudioQueue.CurrentLevelMeterDB;
    Console.WriteLine("{0} {1}", levels[channel].AveragePower, levels[channel].PeakPower);
}

ログ

2017-04-21 01:11:34.869 .iOS[6469:2200702] -32.36877 -21.62641
2017-04-21 01:11:35.370 .iOS[6469:2200702] -29.79558 -20.17148
2017-04-21 01:11:35.870 .iOS[6469:2200702] -22.81933 -16.18644
2017-04-21 01:11:36.369 .iOS[6469:2200702] -25.22222 -16.18644
2017-04-21 01:11:36.870 .iOS[6469:2200702] -28.65407 -21.20195

ポイント

EnableLevelMeteringを有効にするタイミングが重要です。mAudioQueue.Start()の後じゃないと駄目です。 AveragePowerとPeakPowerの差が○○だったら何かを行うととかってコードを書くと色々できそう。

error: Failed to load AOT module '(null)' while running in aot-only mode: doesn't match assembly.の回避方法

原因は何かよくわからないが、、、

error: Failed to load AOT module '(null)' while running in aot-only mode: doesn't match assembly.

というエラー

が出た。(いつもの環境とは別の環境で作業したのでその影響かもしれない)

 

回避策

・アプリ削除

・リビルド

・再インストール

私はコレで解決した。(原因は不明・・・)

 

参考サイト

http://stackoverflow.com/questions/17995263/cannot-launch-xamarin-ios-app-on-device

 

The "XamlCTask" task failed unexpectedlyの回避方法

macのVisualStudio更新してビルドしたらThe "XamlCTask" task failed unexpectedlyのエラーが発生した。

f:id:rabbittan:20170412005014p:plain

回避方法

Xamarin.Formsのパッケージを更新+古いパッケージを手動で削除で回避

パッケージの更新は、それぞれのパッケージを右クリックして「更新」を押下すると更新されます。

f:id:rabbittan:20170412005207p:plain

 

古いパッケージの削除はプロジェクトフォルダ/packages/Xamarin.Forms.古いバージョンの削除を行えばOKです。

f:id:rabbittan:20170412010153p:plain

 

参考サイト

https://forums.xamarin.com/discussion/54790/the-xamlctask-task-failed-unexpectedly

http://stackoverflow.com/questions/30117056/the-xamlctask-task-failed-unexpectedly-on-visual-studio-for-xamarin

ErgoDoxEZのキーマップを変更してみた

Githubでベースとなるプロジェクトが公開されています。

https://github.com/jackhumbert/qmk_firmware

 

このプロジェクトには複数のキーマップが存在しており、それをベースに改良していけばいいかと思います。

私はmacEmacsを使っているので中にあるemacs_osx_dkを焼いてみました。

 

ErgoDoxのFWをビルド

ビルド環境のインストールは以下のサイトを参考にしてください。

qiita.com

予約すると

brew tap osx-cross/avr

brew install avr-libc

で大丈夫です。

 

Githubからコードをダウンロードして以下のコマンドを実行するとqmk_firmware/keyboards/ergodox/keymapsにあるキーマップすべてがビルドされます。

cd qmk_firmware/keyboards/ergodox

make

生成されるディレクトリはqmk_firmware以下に生成される

 

ErgoDoxに焼き込む

以下から焼き込みのためのツールをダウンロードして実行する

https://www.pjrc.com/teensy/loader_mac.html

必要なバイナリをロードする。

f:id:rabbittan:20170108184221p:plain

 

押しピンとかで焼きかえができるモードに変更する。

f:id:rabbittan:20170108193614j:plain

 

正常にモードに入ると、以下の画面に切り替わる

f:id:rabbittan:20170108184235p:plain

 

左上のボタンからダウンロードを開始します。

f:id:rabbittan:20170108184249p:plain

 

ダウンロード後は隣ボタンからリブートさせます。

f:id:rabbittan:20170108184304p:plain

 

完了!

NetBeansで戻るショートカットが聞かない場合

macNetBeans使ったときに起きた現象。

原因はCtrl-Leftにショートカットキーを割り当ててたため

これを外せば聞くようになった。

 

f:id:rabbittan:20170103210900p:plain

 

ErgoDox EZ買ってみた。(Vプリカで購入)

最近流行り(?)のPCキーボードErgoDox買ってみました。

ちなみにまだ手元に届いてないです。

ergodox-ez.com

購入方法をまとめておきます。

 

費用

Subtotal : $295.00 USD
Shipping : $30.00 USD
Total : $325.00 USD

ということで4万円程度あれば買えます。

 

購入方法

欲しいタイプを選択

以下のページから欲しいタイプを選択します。

https://ergodox-ez.com/collections/keyboard-bundles

 

①:ErgoDox EZ Bundle with Blank Keycaps 

  → キーボードの印字がされていない版

②:ErgoDox EZ Bundle with No Keycaps

  → キーがないタイプ。購入後に自分でキーをつける版?

③:ErgoDox EZ Bundle with Printed Keycaps 

  → ①に印字有り版

④:ErgoDox EZ White Bundle: Snow and Shine

  → ③の白版。Shineはキーボードの裏にLEDが付いており光る版?

 

自分は①を選択しました。

 

キースイッチの選択

https://ergodox-ez.com/collections/keyboard-bundles/products/ergodox-ez-bundle-with-blank-keycaps

Gateronキースイッチ選択をします。白・赤・茶とか色々な種類があります。それぞれキーの押した感覚や音が違います。以下のページで紹介されてるので参考にしてみてください。

http://qiita.com/moutend/items/dd3ac2b8cffd69809928

 

ちなみに自分は白にしました。白はRealForceやHHKBに近いみたいです。

http://blog.restartr.com/2016/02/17/ergodox-ez/

http://r-log.hatenablog.com/entry/2016/06/01/232021

http://blog.restartr.com/2016/03/31/got-my-ergodox-ez/

 

確認後にチェックアウトボタンを押下

内容を確認後にチェックアウトボタンを押下

f:id:rabbittan:20161206003809p:plain

 

必要な個人情報入力

以下の情報を入力

Email
First Name
Address
City
Country
Postal code
Phone

入力が終われば「Continue to Shipping method」を押下。

 

クレジットカード情報入力

Name on Cardの箇所はスペースがないと次に進めません。Vプリカはニックネームを登録するようになります。ニックネームにはスペースが入れれないためここで止まってしまいます。

私はここで諦めかけたのですが、、、Vプリカのページを見たらスペースが必要な場合は適当な場所でスペースを入れればいいと書かれてました。(http://vpc.lifecard.co.jp/attention/

例えばニックネーム「ABCDEF」だとしたらABC DEFでいいみたいです。

私もこの方法で入力して次に進めました。

 

購入時の参考までに、、、