This support library should not use a different vesion than the compileSdkVersion

Android supportライブラリなどで利用するべきバージョンについて(サンプル有)

Androidのgradleのdependenciesのimplementation(旧 compile)でよく出るこのWarning。

StackOverflowとかで見て、このエラーでビルドできないからこれ、と闇雲にライブラリのバージョンを指定していると、こうなりますよねw

ほっといてもビルドできる時もありますが、時にできなくなって、できない時は本当にカオスでわけわかめになります。

なので、ちゃんとやった方がいいです。

じゃあ、どのバージョンを指定したらいいのー??ってなりますが、その方法を書いておきます。

下記のようにアプリケーションのbuild.gradleファイルを作ったとすると

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'


android {
    compileSdkVersion 27
    buildToolsVersion '28.0.3'
    defaultConfig {
        applicationId "hogehoge"
        minSdkVersion 14
        targetSdkVersion 27
        javaCompileOptions {
            annotationProcessorOptions {
                includeCompileClasspath false
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    useLibrary 'org.apache.http.legacy'
    productFlavors {
    }
}

dependencies {
    compile project(':rateThisApp')
    compile 'com.android.support:support-v4:27.1.1'
    compile 'com.google.android.gms:play-services-location:16.0.0'
    compile files('lib/osmbonuspack_v4.2.9.jar')
    compile files('lib/osmdroid-android-4.1.jar')
    compile files('lib/osmdroid-third-party-4.1.jar')
    compile files('lib/slf4j-android-1.6.1-RC1.jar')
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:design:27.1.1'
    implementation 'com.google.firebase:firebase-messaging:17.3.4'
    implementation 'com.google.android.gms:play-services-maps:16.0.0'  // GoogleMapを使うために追加する

}

compileSdkVersion 27のこの数字にサポートライブラリのバージョンの最初の数字を合わせます。

サポートライブラリとは、

'com.android.support:support-v4:27.1.1'

いたいなやつのことです。上記の意味は、com.android.support:support-v4というライブラリのバージョン27.1.1ですよ!ってことです。

つまり、compileSdkVersion が27だから、ライブラリのバージョンの最初の数字は27です。

後のやつはどうやって決めるの?というと、下記のサイトで探します。

Recent Support Library Revisions

https://developer.android.com/topic/libraries/support-library/revisions?hl=ja

例えば、上記のサイトを見ると、バージョン27だと、現在(2018/12/04)で
Revision 27.1.1
が最新ということになります。

なので、

'com.android.support:support-v4:27.1.1'

として、27.1.1を指定します。

Python Byteで表現されるFloatをFloatで見る

なんのこっちゃって言われるかもですが。

結構よく使うし、よくググるので(>_<) メモしておきます。

import struct

print(struct.unpack('f',b'\xdc\x8a\xc39'))
#(0.00037296756636351347,)と出力されます

私がよく使うシチュエーションとしては、バイト列の中身を見たいな~とか、ログ取りたいな~って時に使います。

Keras metrics=[‘accuracy’]とは厳密にはどんな評価関数なのか

Kerasでディープラーニングの開発を進めていますが、よく

model = Sequential()
model.add(Dense(512, activation='relu', input_shape=(784,)))
model.add(Dropout(0.2))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(10, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer=RMSprop(),
              metrics=['accuracy'])

ってやってました。

しかし、ある時

metrics=['accuracy']

ってなんだ??という疑問にブチ当たりました。(´・ω・)

metrics=['acc']

も同様です。

Kerasの本家サイトによると

https://keras.io/ja/metrics/

accuracyって名前のmetricsないんですよね (;^ω^)

幸いなことに、下記のStack Overflowさんに答えがありましたー!

https://stackoverflow.com/questions/41531695/how-does-keras-define-accuracy-and-loss

デフォルトはcategorical_accuracyだそうです。

下記のKerasのソースコードを見ると、損失関数のタイプとか、出力のシェイプっぽいのを見て、binary_accuracy にしてくれることもあるようです。

https://github.com/keras-team/keras/blob/d8b226f26b35348d934edb1213061993e7e5a1fa/keras/engine/training.py#L651

しかし!はっきりしていた方がいいですから、自分で指定しておいた方が私は好きですね~。

ちなみに、勉強している元ネタ本はこちら。

PythonとKerasによるディープラーニング

無駄にややこしい部分があるので、オススメ本ではありませんw

Flashで取り込んだ動画の自動再生を無効にする

Flash

Adobe Flash CS3 professional

新しいFlashだとavi, mpeg, dv, mov などの動画(ビデオファイル)を、Flashに取り込んで、再生ボタン・停止ボタンなどのスキンをつけて作成することができます。
FLVPlayback コンポーネントという機能のようです。
その際、普通に取り込んでいるとHTMLファイルを開いたときに自動再生されてしまいます。

パブリッシュ設定に、「自動再生」という項目があり、ここで変更できるように思いますが、実際はできません。

自動再生をOFFにするには、次の手順で行います。

  1. Flashドキュメント上で、ビデオコンポーネントを選択する。
  2. プロパティタブの隣の隣「パラメータ」タブを開くと、コンポーネントのパラメータがあります。そこで、「autoplay」という項目を、「false」にします。

自作でムービークリップなどを作った場合の、最初から再生させたくない方法は
ムービークリップを最初から再生しない
を見てください。

ScrollView can host only one direct child

Android 画面がスクロールしない

ScrollView can host only one direct child

Androidの画面をスクロールさせる、ScrollViewを利用すると、上記のエラーが発生してしまうことがあります。
ScrollViewの中には、子要素を一つしか入れられないのです。

でも、TextViewとかLinearLayoutとか、いっぱい子要素あるじゃん…とか思いますが、要は一つのLinearLayoutで囲んであげれば解決です。

 例)
 <ScrollView
        android:id="@+id/ScrollView01"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
 
     <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:baselineAligned="false"
            android:gravity="center_horizontal"
            android:orientation="vertical" >
             <TextView
                android:id="@+id/explanation"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:text="@string/account_explanation"
                android:textColor="@color/green_text" >
            </TextView>
           …以下中身
      </LinearLayout>
 </ScrollView>