<!--親の顔より見た光景-->

日々の発見を残していきます。

Cdsセルの回路

f:id:akagi13213:20170419001245p:plain
こんな回路。
Cdsセルは光量に応じて抵抗値が変化する素子。(暗いほど抵抗値が下がる)
マイコンに入力する電圧を可変にしたいため、分圧する必要がある。
・分圧のためにわざわざもう一つ抵抗が必要。Cdsだけだと5[V]しか選択肢が無い(?)

 Cdsの抵抗値が50kΩのとき、V2は分圧即により、
 V2 = ( 50k / ( 10k + 50k ) ) * 入力電圧( 5V ) = 25 / 6 = 4.166[V]
 マイコンには4.166[V]が入力される。

【メモ】プレゼン技法

最も重要なこと:聴衆に応じた内容のプレゼンをする

例:聴衆がエンジニアだらけ……次世代技術や既存技術の話題を取り入れる

老人にIoTの話をしてもしょうがない。若い世代が多かったらゲームやスマホ関係などが好ましい。

 

他、重要なこと(上から重要度高)

・大きい声でハキハキと

・自身を持つ

・結論→論拠(裏付けるデータなど)→結論

・場合によっては、問題を羅列→対策法

・大きいジャンル分け→箇条書きについて言及(○○視点からのリスクは……、一方**視点からのリスクは……が挙げられます)

・具体的なエピソード、具体例を挙げると聴衆は理解し易い

・心をつかむキーワード(例:「最終決算」、「人生のパートナー」 エンジニアに向けたプレゼンで実際にウケたのは「ニーズを創る」というキーワード。とっさに出るものではないので日々書き留めておくと良い。)

・字、図はキレイに

・適度にカラフルにする(4色?)

・アテンションゲッター(聴衆の心をつかむような言い回し、テンポ)

・最後に「ありがとうございました」

 

一般的にプレゼンの質はDelivery<Contentsで決まる。しかし、第一印象でプレゼンを聞くか聞かないか決まる(こともある)ので、自身をもって、大きい声でハキハキと喋るのは重要。

【宣伝】マインスイーパのAndroidアプリが完成

このブログは自分のメモ用だけど、ユーザーが欲しいので宣伝…

表題の通りマインスイーパアプリが完成しました。
特殊なルールは無く、本当にシンプルなマインスイーパになっています。
是非プレイしてみてください。
↓ダウンロードはこちらから↓
play.google.com

スクリーンショット
f:id:akagi13213:20170324165807p:plain

【C】constのメモ

1. const int *p;

「値を変更できないint」を指すポインタ。アドレス書き換えられるけど、アドレスが指す中身変更できない
【例】

const int *p;
int *temp;

p = temp;    // OK
*p = 5;      // エラー
2. int * const p;

int型への「const修飾された」ポインタ(int *p; は int型へのポインタ)。アドレスが指す中身書き換えられるけど、アドレスそのものは変更できない
【例】

int * const p;
int *temp;

p = temp;    // エラー
*p = 5;      // OK
3. const int * const p;

「値を変更できないint」への「値が変更できないポインタ」。アドレスの中身変更できないアドレス変更できない
【例】

const int * const p;
int *temp;

p = temp;    // エラー
*p = 5;      // エラー

【Android】onLongPressを使わないで長押し判定

背景

View上で長押しを判定したい時、通常はGestureDetectorクラスのOnGestureListenerをimplementsしてonLongPressを実装する。
GestureDetector | Android Developers

参考サイト
Androidプログラミングの館
Android タッチパネルのダブルタップや長押しを検出する方法 | TechBooster

しかしonLongPressは長押し判定の時間を指定できない。

今作ってるマインスイーパアプリでは長押しでフラグを立てる処理にしている。
onLongPressで長押し判定を実装すると、0.8秒程度押し続けないとならない。
0.8秒という時間は長く、ユーザーはスピーディーにフラグを立てることができなくてイライラしてしまう。

解決策

onTouchEventで取得できるMotionEvent.ACTION_DOWNとHandlerクラスを使う。

onTouchEventはViewクラスで画面がタッチされたときに呼び出されるメソッド。
詳しくはこちら
Androidでアプリ画面のタッチイベントを取得する方法 | TechBooster

Handlerクラスは「指定した時間後に処理を行いたい」という時に使い、処理の中身はRunnableクラスのrun()メソッドで実装する。
詳しくはこちら
[Android]指定した時間後にちょっとした処理を行う方法 | Developers.IO

結局長押し判定はこんなコードになる。convertCoordinateToAddress()は現在の座標からマス番号を求めるメソッド。
とりあえずACTION_DOWNが検出されたらhandlerを起動して、0.4秒後にrunメソッドを実行する。
0.4秒を測ってる間に指上げなどの邪魔が入ったらhandlerを中止する。

参考サイト
java - Detecting a long press with Android - Stack Overflow

【MainActivity.java

/*略*/
long LONG_PRESS_TIME = 400;    // 長押し時間(ミリ秒)
Handler long_press_handler = new Handler();
Runnable long_press_receiver = new Runnable() {
    @Override
    public void run()
    {
        // 長押しする
        longClickSquare();
    }
};

/*略*/
@Override
public boolean onTouchEvent( MotionEvent e )
{
    switch ( e.getAction() )
    {
        case MotionEvent.ACTION_DOWN:    // 指が触れたとき
            action_down_square_address = game_view.convertCoordinateToAddress(e.getX(), e.getY());       // 触れたマス番号を記憶
            long_press_handler.postDelayed( long_press_receiver, LONG_PRESS_TIME);       // 長押し判定
            break;

        case MotionEvent.ACTION_UP:     // 指を上げたとき
            long_press_handler.removeCallbacks( long_press_receiver );    // 長押し中に指を上げたらhandlerの処理を中止
            break;

        case MotionEvent.ACTION_MOVE :    // 指でなぞったとき
            // 触れたマスが最初に触れていたマスと違う番号なら
            if ( game_view.convertCoordinateToAddress(e.getX(), e.getY()) != action_down_square_address ) {
                long_press_handler.removeCallbacks( long_press_receiver );    // 最初に触れたマスから離れたらhandlerの処理を中止
            }
            break;

        default:
            break;
        }
        return false;
    }
}

/*略*/

命名で参考になるサイト

関数名によく使われる英単語(動詞)の意味とニュアンス | PHP Archive

Y.A.M の 雑記帳: 「よりよいコードを求めて命名について頭をひねる会」のログ

プログラミングでよく使う英単語のまとめ【随時更新】 - Qiita

【戒め】コピペ厳禁

f:id:akagi13213:20170228194734p:plain

コピペしたせいで275行目以降のif文がおかしい。

バグを生む要因になるので、めんどくさくても手打ちで書くこと。