Android Studio3.0でError:All flavors must now belong to a named flavor dimension.というエラーが出た場合の対処方法

flavorDimensions "versionCode"

の1行を追加して解消しました。

android { 
       compileSdkVersion XX
       .....
       flavorDimensions "versionCode" ← これを追加
} 


参考:https://stackoverflow.com/questions/44105127/android-studio-3-0-flavor-dimension-issue

AndroidでTextViewの上下の空白を消す方法

のように、
android:includeFontPadding="false"
でできます。
layout_marginTop="-8dp"とか使って調整してたんですが、ギリギリまでやると一部端末でテキストが表示されなくなることがあり調整が難しかったんですが、こんな指定方法あったんですね。

SSL証明書

iOSアプリは年明け以降基本SSL通信しか使えなくなりますが、以前テストサーバー等でも使っていたhttp://www.rapid-ssl.jp/が値上がりして年間4300円になっていました。
他にないか探してみたところ、国内だとフジSSL(https://www.ssl-store.jp/fujissl/)が年間1,080円でしたが、管理画面でエラーが起きて証明書取得ができませんでした。
海外だと、https://www.gogetssl.com/が年間4ドル(3年だと年間3.22ドル)で、試しに使ってみたところ証明書取得まで数分でできて問題なく使えています。
無料でSSLを発行するLet's Encryptというのもあるみたいですが、有効期限が90日で、発足して間もないのでテストサーバーならありかもしれないというくらいでしょうか。しばらくして知名度と実績があがれば格安SSLより安定して使えるようになるかもしれないですね。

Android Studioで使用するJDK変更方法

$ export STUDIO_JDK=/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk
$ open /Applications/Android\ Studio.app

これで上手くいった。


Android Studioアプリを右クリック→パッケージの内容を表示 から、info.plistを編集して

JVMVersion
1.8

とするという情報があったがAndroid Studio2.1だとこの項目自体がなかった

古いAndroidのWebViewサポート終了と、Chrome版WebViewの使用方法

Google、古いAndroidのサポート終了か 9億台で脆弱性放置の恐れ
http://www.itmedia.co.jp/enterprise/articles/1501/13/news113.html

 これから打ち切るのではなく既に打ち切ったというのと、まだ4.4以降が40%以下の普及率だと、いくらなんでも早過ぎのような気がします。

 アプリ開発時にアプリ内にブラウザ機能を持たせる場合は通常WebViewを使いますが、4.4からはChrome実装のWebViewですが、4.3までは旧ブラウザ実装のWebViewが使われます。4.3まではアプリ内ブラウザで脆弱性が対応されない状態のものを使うことになる、ということだと思います。

 せめて4.0〜4.3のAPIChrome版WebViewを使う方法を公式でサポートして、4.4のようにChrome版WebViewを使えるようにしていればいいんですけどね。

 以下は、Android4.0〜4.3でChrome実装のWebViewを使う方法です。JavaScriptの処理速度が旧ブラウザからChromeになるので、パフォーマンスの向上にもなるかと。

Android標準のWebViewの代わりにChromeViewを使ってみた
http://kadoppe.com/archives/2014/01/android-webview-chromeview.html

 旧バージョンのサポートは、MS>>>Google=Appleのイメージだったんですが、MS>>>Apple>Googleになりそうです。このイメージを避けるためにも、サポートした方がいいと思うんですけどね。
 アップルは、新バージョンのiOSでたらバージョンアップしないほうが面倒にしてるのでまだいいけど、Androidはそうじゃないからなぁ。それとも、これを皮切りにiOSみたいに最新バージョンを徹底していくスタンスの宣言なんですかね。さすがに大きい脆弱性は対応する気がしてるけど、どうなるか気になります。

vimの設定(カラー設定と、編集中のファイル実行できるように設定)

カラーテーマを追加

好みのカラーテーマを設置

$ wget -O ~/.vim/colors/molokai.vim http://www.vim.org/scripts/download_script.php?src_id=9750
$ wget -O ~/.vim/colors/pyte.vim http://www.vim.org/scripts/download_script.php?src_id=13283

カラー設定を追記
$ vim ~/.vimrc

" シンタックスハイライト
syntax on
colorscheme pyte
colorscheme molokai

編集中のファイルを実行できるようにするプラグインquickrun.vimを追加

プラグインを設置
$ wget -O ~/.vim/plugin/quickrun.vim http://www.vim.org/scripts/download_script.php?src_id=11077
編集中のファイルタイプを認識してる必要があるので、例えば~/.vimrcに下記のように追加する

" ファイルタイプ設定
au BufRead,BufNewFile *.php            set filetype=php

viにて、[バックスラッシュ]→[r]で編集中のプログラムを実行できるようになります。[q]で実行結果を閉じます。

偏差値計算

偏差値を計算するプログラムを実装してみた。

実行結果

[実験1:スコア (0,10,20,30,40,50,60,70,80,90,100)]
[平均点]50
[標準偏差]31.622776601684
[30点の偏差値]43.675444679663
[100点の偏差値]65.811388300842
[実験2:スコア (0,30,31,32,33,34,35,36,37,38,39,40,100)]
[平均点]37.307692307692
[標準偏差]20.551565972094
[30点の偏差値]46.444216310516
[100点の偏差値]80.504881125572

プログラム

<?php
test();
exit;

// テスト
function test() {
	$hensachi = new Hensachi();
	$score_list = array(0,10,20,30,40,50,60,70,80,90,100);
	d("実験1:スコア (0,10,20,30,40,50,60,70,80,90,100)");
	$hensachi->setScoreList($score_list);
	d('平均点', $hensachi->avg);
	d('標準偏差', $hensachi->hensa);
	d('30点の偏差値', $hensachi->get(30));
	d('100点の偏差値', $hensachi->get(100));

	$hensachi = new Hensachi();
	$score_list = array(0,30,31,32,33,34,35,36,37,38,39,40,100);
	d("実験2:スコア (0,30,31,32,33,34,35,36,37,38,39,40,100)");
	$hensachi->setScoreList($score_list);
	d('平均点', $hensachi->avg);
	d('標準偏差', $hensachi->hensa);
	d('30点の偏差値', $hensachi->get(30));
	d('100点の偏差値', $hensachi->get(100));
}

/**
 * 偏差値を計算するクラス
 *ex)
 $hensachi = new Hensachi();
 $score_list = array(0,10,20,30,40,50,60,70,80,90,100);
 d("実験1:スコア (0,10,20,30,40,50,60,70,80,90,100)");
 $hensachi->setScoreList($score_list);
 d('平均点', $hensachi->avg);
 d('標準偏差', $hensachi->hensa);
 d('30点の偏差値', $hensachi->get(30));
 d('100点の偏差値', $hensachi->get(100));
 */
class Hensachi {
	/** 平均点 */
	var $avg;
	/** 標準偏差 */
	var $hensa;
	/**
	 * 偏差値を取得
	 *@param score 点数
	 *@return float 偏差値
	 */
	function get($score) {
		$hensachi = 10 * ($score - $this->avg) / $this->hensa + 50;
		return $hensachi;
	}
	/**
	 * 点数リストをセット
	 *@param array(int) score_list 点数の配列
	 */
	function setScoreList($score_list) {
		$this->avg = $this->calcAvarage($score_list);
		$this->hensa = $this->calcHensa($score_list, $this->avg);
	}
	/**
	 * 平均点を計算
	 *@param array(int) score_list 点数の配列
	 */
	function calcAvarage($score_list) {
		$sum = 0;
		for ($i=0; $i < count($score_list); $i++) {
			$sum += $score_list[$i];
		}
		$avg = $sum / count($score_list);
		return $avg;
	}
	/**
	 * 標準偏差を計算
	 *@param array(int) score_list 点数の配列
	 *@param int avg 平均点
	 */
	function calcHensa($score_list, $avg) {
		$sum = 0;
		for ($i=0; $i < count($score_list); $i++) {
			$sum += pow($score_list[$i] - $avg, 2);
		}
		$hensa = sqrt($sum / count($score_list));
		return $hensa;
	}
}

// debug
function d($name, $s="") {
	if (is_array($s)) {
		$s = preg_replace("/[\r\n]/", "", print_r($s, true));
	}
	echo '[' . $name . ']' . $s . "\n";
}