Translate

BTemplates.com

Powered by Blogger.

2017年10月31日火曜日

2017-10-31 到達点メモ


Timer関数はJavaで元々用意されているが、Kotlinではそれを拡張された関数がある
参考サイト:Extensions for java.util.Timer

昔、Timerを使っていたような気がしてふと過去の日記を見直してみたのだが
2017-09-05 到達点メモによると、CountDownTimerを採用していただけであって
そもそもTimerを使っていなかった。

また、2017-09-06 到達点メモによると、そもそも公式ドキュメントに
タイムアウトのような通常のタイミング操作ではHandlerの方が楽だと書いてあったので
多分そっちを採用したのだと思われる。

ざっと、Kotlinの公式リファレンスを見た限りだとそこまでTimerを使うのは難しくなさそうなので、これから使うのであれば下手にHandlerを使うよりはこっちのほうが楽かもしれない。

落とし穴がありそうなのが少し怖い所だ。

高階関数というのがあるらしい。
関数を引数とする関数のことだそうだ。

で、色々調べたところ、部分適応やカリー化という概念があるらしい。
読んでみたがいまいち必要性と理解がしきれない。
とりあえず、部分適応とカリー化は混同されやすい。
そして、そういう言葉があったという事がだけ認識しておこう
参考サイト:食べられないほうのカリー化入門
参考サイト:JavaScriptのカリー化について味見してみる
参考サイト:カリー化、部分適用、クロージャという間違いやすい三種についての簡単なメモ書き

途中で集中が切れたので今日はここまで

2017年10月30日月曜日

ApplivでVoiceTimerのアプリレビューが掲載されました。



ApplivへVoiceTimerのアプリレビューの依頼をしまして、無事掲載されましたので
レビュー内容を紹介します。
よかったら、ぜひ読んでみて下さい。

https://android.app-liv.jp/004620518/

今回レビューを依頼するのは初めてですが
依頼した時に返事がすぐに帰ってきたので
返事を貰った時は結構うれしかったです。

また、レビューの内容も聞き忘れないように音量は最大化にしておこう
ぐらいにしか思っていなかったので
それが原因で家以外では使いにくいという部分は
自分の視点では抜け落ちていた部分がでした。
そういう部分でも大変参考になりました。

Appliv様、レビューの掲載ありがとうございました。
また機会があればよろしくお願いします。


2017年10月28日土曜日

2017-10-28 到達点メモ


AndroidStudioを2.3から3.0にアップデートした際に本来フォルダ名がresのところをresourceになっている時がある。その場合はGradle自体が古い可能性があるので、それをアップデートすること。

選択して Ctrl + / で選択した部分をコメントアウトすることができる。
参考サイト:Android Studioでのコメントアウトの方法を知りたい
参考サイト:Android Studioでの選択範囲のコメント化とコメント化解除方法

nullableで呼び出した場合、3通りの対応をすることができる

一つは、安全呼び出し

val num: Int? = 1
println(num?.toString())

また、以下のような書き方でもコンパイルが通る。

val num: Int? = 1
println("aaa" + num?.toString())

また、以下のように変数がnullの場合でも、コンパイルは通るが
結果は、『aaanull』になるため、多分良い書き方ではない。

 val num: Int? = null
 println("aaa" + num?.toString())

また、単純に変数の後ろに?をつけてもnullableが解除されるわけではないらしいので
以下のような書き方だと普通にコンパイルエラーが出る

  val num: Int? = 1
  val result: Int = 1 + num?
  println(result.toString())

二つ目は、エルビス演算子です。
nullの時に返す値を指定できます。

変数のみで判別したい場合は以下のように書きます
この際に括弧を忘れると、AAA:nullと表示されるため注意が必要です。
val test: String? = null
val result_string = "AAA:"+ (test ?: "null_string")
println(result_string)


また、変数に付属する関数の返り値がnullかどうかを見たい場合は、以下のように書きます
val num: Int? = null
val result: Int = 1 + (num?.toString() ?: "666").toInt()
println(result.toString())

エルビス演算子は、左側の変数がnullableであることを前提にしてあるので
それ以外の場合だとwarningが出ます

nullを出すこと自体が推奨されないことを考えると
基本はエルビス演算子でnullの値を明示的に指定するべきだと思います。


三つ目は、!!演算子です。

nullableの後ろに!!を付けます。
具体例は以下の通りです

   val num: Int? = 1
   val result: Int = 1 + num!!
   println(result.toString())

これを使うと一番楽ではあるのですが、
そもそもの目的を考えると基本は避けたほうがいいと思います。


参考サイト:Kotlin Null Safetyについて知ろう
参考サイト:【学習kotlinシリーズ】安全呼び出し
参考サイト:最初に押さえておきたいKotlin言語仕様

Runをしようとして以下のようなエラー文が出た場合、
AndroidStudioを一度落として再度立ち上げて、Build->Clean Project
Build->Rebuild Projectをして再度Runをすればうまくいく
*再度立ち上げた後は、Build->Rebuild Projectだけでいいかもしれない

Error:Could not read path (中略)\app\build\intermediates\transforms\instantRunSlicer\debug\(以下省略)

参考サイト:Error:Execution failed for task ':app:processDebugResources'. > java.io.IOException: Could not delete folder “” in android studio

AndroidStudio3.0から、Gradleでapply plugin: 'kotlin-android-extensions'と宣言し、Activiyを使用するktファイルでimport kotlinx.android.synthetic.main.activity_main.*という風な宣言をする必要がなくなった。ただし、自動で生成しないと書かれないのでそこは注意すること

疲れたので今日はここまで


リーチ数が1千万以上の言語一覧


前回の記事で、リーチ数と言語使用者の割合みたいなのも調査したい。と書きましたが、冷静に考えてどちらかというと割合よりは実数を知ったほうが有効なのではと思ったので、そちらに調べる事にしました。

ちなみにリーチ数が1千万以上と定義したのは、1000人に1人に受け入れられるものを作れば1万になります。それを踏まえて10か国に受けられれば、10万ダウンロードはいけるのではと思ったからです。

リーチ数はAdwordsの広告表示を参考にし、Wikiの各国の公用語と
ネイティブスピーカーの数が多い言語の一覧 を基に算出しました。
なお、この際に全部の国のリーチ数を調べている訳でもなく(特に英語)
また、二つ以上ある公用語がある国は一部懇意的に一つに選択しているため、
厳密な値が出ているわけではないことを予め断っておきます。

順位言語名リーチ数
1英語405,406,779
2ヒンディー語179,093,278
3スペイン語135,585,871
4ポルトガル語119,309,849
5インドネシア語79,228,530
6日本語57,860,698
7ロシア語57,027,569
8ドイツ語55,144,370
9フランス語53,828,930
10トルコ語42,278,733
11イタリア語41,684,223
12タイ語34,290,479
13ベトナム語31,000,711
14オランダ語27,874,513
15朝鮮語26,954,362
16中国語24,495,896
17アラビア語24,388,117
18ポーランド語20,747,390
19フィリピン語(タガログ語)19,903,314
20マレー語19,878,128
21ウクライナ語13,588,617
22ルーマニア語10,697,576

大体こんな感じになります。
*2017/11/03修正。フィリピン語を追加。
参照元のwikiではフィリピン語がなく、タガログ語になっていた。
言語コードのISO 639-1では、どちらも同じtlになっていたので
少なくともAndroid上では同じ言語として扱ってよいと思う。

今回は範囲外ですが、100万台も含めるのであれば、この後にギリシア語、ベンガル語、チェコ語、タミル語、ネパール語、アゼルバイジャン語、ラーオ語となっています。
自分にとって意外にリーチ数が多いと感じたのは、スペイン語、ポルトガル語、インドネシア語だったりします。

また、自分が調査した範囲内でのリーチ数の合計が15億弱(実際はもっといると思われる。あと、一億ぐらい増えるかも)だったので、世界の人口が70億という事を考えると、5人に1人は利用していることになるので結構利用者はいると感じました。

ネイティブスピーカーの数が多い言語を基にリーチ数の実数の調査結果を書きました

2017年10月23日月曜日

人口数トップ30の国別Androidのリーチ数


AdWordsで宣伝用の広告の設定をしていたら、
国によってリーチの数が違う事に気が付いたので自身のメモ用にまとめ。
自分もリーチの意味はいまいちよくわかっていないのですが
高ければ高いほどユーザーが多いため、広告の効果が上がりやすい位に考えています。

まずは、人口の多い順をもとに実際のリーチ数と比べてみたいと思います
*2017年10月23日現在
参考サイト:国の人口順リスト(wiki)


順位国名言語人口数リーチ数
中華人民共和国中国語1,349,335,1526,395,268
インドヒンディー語1,224,514,327179,093,278
アメリカ合衆国英語314,551,246270,727,941
インドネシアインドネシア語239,870,93779,228,530
ブラジルポルトガル語194,946,470119,309,849
パキスタン国語はウルドゥー語。
公用語は英語
173,593,38314,426,031
ナイジェリア英語158,423,1826,104,373
バングラデシュベンガル語148,692,1316,432,421
ロシアロシア語142,958,16457,027,569
10日本日本語126,535,92057,860,698
11メキシコ事実上スペイン語113,423,04762,234,671
12フィリピンフィリピン語、英語92,337,85219,903,314
13ベトナムベトナム語87,848,44531,000,711
14エチオピア 事実上アムハラ語82,949,541410,810
15ドイツドイツ語82,302,46555,144,370
16エジプト アラビア語82,121,07717,311,778
17イランペルシア語73,973,630不明
18トルコトルコ語72,752,32542,278,733
19タイタイ語69,122,23434,290,479
20コンゴ民主共和国フランス語65,965,795310,105
21フランスフランス語65,476,48647,156,968
22イギリス英語62,512,23250,667,416
23イタリアイタリア語60,550,84841,684,223
24南アフリカ共和国アフリカーンス語、
英語、
バントゥー諸語9言語
50,132,81712,309,907
25大韓民国韓国語48,183,58426,954,362
26ミャンマービルマ語47,963,0121,865,287
27コロンビアスペイン語46,294,84122,534,86
28スペインスペイン語46,076,98939,517,024
29ウクライナウクライナ語45,448,32913,588,617
30タンザニアスワヒリ語44,841,2261,622,913
番外
34ポーランドポーランド語38,276,66020,747,390
36カナダ英語、フランス語34,016,59328,287,336
50中華民国(台湾)中華民国国語23,440,27818,100,628
52オーストラリア英語22,268,38415,855,218
73ギリシャギリシャ語11,359,3467,166,961
94スイスドイツ語(スイスドイツ語)、
フランス語、イタリア語、
ロマンシュ語
7,664,3186,361,857

中国語は、GooglePlayを現在サポートしていないのでリーチ数が低いのは
想定していましたが、他の国でも極端に低い国が多いので
人口は目安程度で参考にした方がよさそうです。

じっと数字を見ていたら、ブラジルが1億で日本が5000万で怪しく思えたのでちょっとググってみたところ、MM総研によると2015年3月末のスマートフォンの契約数が6,850万件との事でしたので、会社携帯や二台持ちや契約数にiPhoneも含まれていることを考えるとそんなにおかしい数字ではないようです。
下手すると日本語でリリースするよりポルトガル語でリリースしたほうがダウンロードされるかも……。


人口から調べるのではなく、主要言語一覧から該当する国を調べていった方が早かったかもしれないですが、例を挙げると主要言語では中国語と書かれていても、実際は複数の言語が公用語だったり、別の言語だったりするのであまり鵜呑みには出来ません。

まぁ、wikiの内容をそもそも鵜呑みにするものではないと言われればそれまでですが……

ありきたりな結論ですが、なんだかんだ言って中国語を除けば英語が一番多いので迷ったらとりあえず英語で記述するのはありだと思います。
ただ、なんだかんだ言って下手な英語と下手な母国語なら、母国語を選ぶ人が多いと私は思っているので、労力と費用対効果を相談しつつ基本は母国語で対応したほうがいいと思っています。

そのうち、リーチ数と言語使用者の割合みたいなのも調査したい。

些細な話ですが、日本は法令によって公用語が規定されていないらしいので
日本に公用語はなく、日本語は飽くまで事実上の公用語らしいです。


2017年10月22日日曜日

2017-10-22 到達点メモ


以前の続き
【Kotlin】ゼロからはじめる一番やさしいAndroidアプリ開発入門<初めてのアプリ作成からリリースまで>[初級]

◆Kotlin

・Kotlinにおいてget/setter/イニシャライズは必須ではない。プロパティを呼び出して受け取る。
恐らく、変数だけの呼び出しや引数が10以上は0を代入するというようなメソッドを作って呼び出すことは想定していない。それはおそらくget/setterを使うべき
参考サイト:プロパティとフィールド

・nullは基本許容しない。そのため、nullが発生する可能性が有る場合、Kotlinで用意された関数の返り値でnullを許容する型で返る場合がある。また、nullを許容する型とnullを許容しない型は同じように見えて違う型の為、代入するとエラーになる。(例:Int,Int?は同じ整数を扱うが、代入するとエラーになる。)
そういえば、swiftでも似たような(というかほぼ同じ?)のがあったな
参考サイト:基本の型
参考サイト:【!ってなんだ】KotlinとJava、nullとPlatformType【NullableにNotNull】
参考サイト:JavaプログラマがKotlinでつまづきがちなところ#Null Safety

・kotlinにswitch文はない。代わりにwhen文が使われ、且つ、最後にelseを使う必要がある。*勘違いでした。書かなくてもエラーになりません。
参考サイト:逆引きKotlin-switchみたいな条件分岐がしたい

力尽きたので今日はここまで

AQUOS eaでアプリのタイトルの文字数の表示制限を調べてみた


とあるudemyの講座でアプリ一覧なら全角七文字は表示されるという話が
あったのですが(実際に表示されているのは動画で確認している)、
自分のスマホだと省略されたのでまず自分のスマホでは
どうなるのかと思い検証してみました。

検証端末:AQUOS ea(バージョン:Android7.0)

調査した画面は、アプリ一覧、Home画面、フォルダの三つです。
全角と半角でそれぞれ調べました。

◆全角
文字数とタイトル名フォルダHome画面アプリ一覧
全角五文字:あいうえお
全角五文字+半角一文字:あいうえおa×(あいうえ..)
全角六文字:あいうえおか×(あいうえ..)×(あいうえお..)
全角六文字+半角一文字:あいうえおかa×(あいうえ..)×(あいうえお..)×(あいうえお..)
全角七文字:あいうえおかき×(あいうえ..)×(あいうえお..)×(あいうえお..)

◆半角
文字数とタイトル名フォルダHome画面アプリ一覧
半角10文字:AbcdeFghij
半角11文字:AbcdeFghijK×(AbcdeFghi..)
半角12文字:AbcdeFghijKl×(AbcdeFghi..)
半角13文字:AbcdeFghijKlm×(AbcdeFghi..)×(AbcdeFghij..)×(AbcdeFghij..)

結論としては、AQUOS ea(バージョン:Android7.0)に限って言えば
全角は5文字。半角は10文字でアプリのタイトル名を抑えると省略されないので
一目でわかりやすくなるのではないでしょうか?