大町公園に散歩へ行った
千葉に引っ越してから定番の散歩コースになりつつある大町公園に行ってきた。 海も良いけど緑も同じくらい良いと思える場所。
池を眺めてたら鯉?が集まってきて口パクパクさせてた。
一部のルートが閉鎖されてた。
野生の狸に餌付けしてる人がいるらしく、そのせいで餌を貰おうと人を襲う可能性があるので危険らしい。
竹柵にしてるあたりが自然公園っぽい。そういえば前行ったときに職員ぽい人が竹切ってた。
iPhone13 miniで撮ったけど、こういう風景写真撮るなら一眼レフのカメラの方がいいのかな。
オリジナルを画像拡大すると粗くなってしまう。ただ初心者のおすすめモデルでも10万くらいするのがキツイ...
また馬堀海岸に散歩へ行った
【Android】Realmのモデルクラスを変更後、アプリを再インストールして起動するとRealmMigrationNeededExceptionが発生する
3時間ハマった
事象
Realmのモデルクラスを変更後(カラム名のリネームをしただけ)、アプリの再インストールを行って起動すると RealmMigrationNeededExceptionを吐いてアプリがクラッシュしてしまう。
原因
RealmMigrationNeededException reinstallでググったらissueに挙がっていた・・
Android6.0からアプリの自動バックアップ機能が実装されたらしく、GoogleDriveに保存するのだとか。
これが原因で、新旧realmファイルがぶつかってMigrationNeddedExceptionを起こしているっぽい。
おそらく再インストール時には以下のようになっている?
アプリのインストール
↓
GoogleDriveからバックアップを取得
↓
バックアップしたアプリに対して更新
(新旧realmファイルがこんにちは)
↓
MigrationNeddedException
対策
公式ドキュメントを見る限り、以下の手順を実施すればよい。
Back up user data with Auto Backup | Android Developers
手順1.GoogleDriveからバックアップを削除する
削除後にアプリを再インストールするとMigrationNeddedExceptionは起こらなかった。
手順2.realmファイルをバックアップ対象から外す
バックアップの設定ファイル(backup.xml)を作成し、AndroidManifest.xmlのapplication要素内にandroid:fullBackupContentを追加する。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hoge"> <application android:fullBackupContent="@xml/backup"
<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <exclude domain="file" path="default.realm"/> <exclude domain="file" path="default.realm.lock"/> </full-backup-content>
【Laravel】Oracleへの接続設定の方法(Windows版)
普段はMySQLだけど、どうしてもOracleを参照しないといけなくなったときのTODO
2018/03/27 手順修正
環境
Windows7
Laravel 5.5(PHP7.1)
Oracle9i Database Release 2 (9.2.0)
XAMPP 7.1.7
接続設定の方法
1.オラクルインスタントクライアントを公式サイトからダウンロードする
Link:http://www.oracle.com/technetwork/jp/topics/index-099943-ja.html
オラクルインスタントクライアントとは、OracleDBに接続するためのものを最小限にまとめたライブラリ
ここでは都合により最新バージョンの12.2(2018/03時点)ではなく11.2をダウンロードする
・instantclient-basic-nt-11.2.0.4.0.zip
→フォルダを解凍後、instantclient_11_2にリネームしてCドライブ直下に設置する
2.環境変数を以下の通りに変更する
変数名:PATH 値:C:\instantclient_11_2;<元々の設定値> 変数名:NLS_LANG 値:Japanese_Japan.AL32UTF8
3.コマンドプロンプトから環境変数が設定されているか確認する
C:\Users\hoge>set ...省略... NLS_LANG=Japanese_Japan.AL32UTF8 Path=C:\instantclient_11_2;C:\Program Files (x86)~・・・ ...省略...
4.C:\xampp\php\php.iniの末尾に追記する
extension=php_oci8_11g.dll extension=php_pdo_oci.dll
★注意
PHP: 要件 - Manual より
OCI8 が 9iR2 のクライアントライブラリを使っている場合は、PHP から Oracle Database 8i, 9iR2, 10g あるいは 11g に接続することができます。 OCI8 が 10gR2 のクライアントライブラリを使っている場合は、接続できるデータベースは 9iR2, 10g, 11g あるいは 12c です。 OCI8 が 11g のクライアントライブラリを使っている場合は、接続できるデータベースは 9iR2, 10g, 11g あるいは 12c です。 OCI8 が 12c のクライアントライブラリを使っている場合は、接続できるデータベースは 10gR2, 11g あるいは 12c です。
まとめると、
php_oci8_11g.dll: 9iR2、10g、11g、12cのDBに接続できる(9i以前かつ10gR2は接続できない)
php_oci8_12c.dll: 10gR2、11g、12cのDBに接続できる(10g以前は接続できない)
extensionで指定したファイルはC:\xampp\php\extに格納されているが、XAMPP 7.1.7ではphp_oci8_11g.dllがデフォルトで入っておらず、php_oci8_12c.dllのみ設置されている。
9iR2に接続するためにはphp_oci8_11g.dllが必要なため、自力で入手する。(XAMPP5.5.19に発見したのでZIPから取得するとよい)
入手後、php_oci8_11g.dlをC:/xampp/php/extに設置する。
※もしphp_oci8_12c.dll適用したい場合、手順1のオラクルインスタントクライアントのバージョンを12してやり直す
5.C:\xampp\xampp-control.exeを起動し、STARTを押してApacheを起動する
起動時に「OCI.dllが見つかりません」的なエラーが出た場合、オラクルインスタントクライアントを参照できていないので環境変数を見直すこと ユーザー環境変数に定義していた場合はシステム環境変数に設定してみる
6.ブラウザからhttp://localhost/dashboard/phpinfo.phpにアクセスし、以下の通りOCI8のブロックが表示されていればOK
7.C:\xampp\xampp-control.exeからSTOPを押してApacheを終了する
8.Laravel-oci8をcomposerでインストールする
composer require yajra/laravel-oci8:"5.5.*"
LaravelというフレームワークにはIlluminate/DatabaseにDB操作を行うモジュールが実装されていて、Laravel-oci8はこれをOracle向けに拡張したもの。
Laravel-oci8とLaravelのバージョンと統一しないといけないため、Laravelのバージョンが5.6の場合は"5.6.*"と指定しないといけない。
github.com
手順6でOCI8のブロックが表示されていない場合、インストール時に以下のエラーが発生する
yajra/laravel-oci8 v5.5.5 requires ext-oci8 >=2.0.0 -> the requested PHP extension oci8 is missing from your system.
9.Laravelのプロジェクトフォルダを開き、以下の内容で各ファイルを編集する
config/app.php(Laravel 5.5以上の場合のみ追記する)
Yajra\Oci8\Oci8ServiceProvider::class,
config/database.php
...省略... 'connections' => [ 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), ... 省略 ... ], 'oracle' => [ 'driver' => 'oracle', 'host' => env('DB_HOST2', '127.0.0.1'), 'port' => env('DB_PORT2', '3306'), 'database' => env('DB_DATABASE2', 'forge'), 'username' => env('DB_USERNAME2', 'forge'), 'password' => env('DB_PASSWORD2', ''), 'unix_socket' => env('DB_SOCKET2', ''), 'charset' => env('DB_CHARSET2', 'AL32UTF8'), 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => false, 'engine' => null, ], ...省略...
.env
# mysql DB_HOST=192.168.xxx.xxx ... 省略 ... # oracle DB_HOST2=192.168.xxx.xxx DB_PORT2=8000 DB_DATABASE2=hoge_db DB_USERNAME2=hoge DB_PASSWORD2=hoge DB_CHARSET2=AL32UTF8
10.コマンドプロンプトからローカルサーバーを起動する
php artisan serv
11. プロジェクト内の適当なファイルに以下のコードを記載し、OracleDBを参照できていれば接続設定完了
$rows = \DB::connection('oracle')->select('SELECT * FROM TEST_TABLE');
dd($rows);
【Android】ボタンを押した時に波紋状のエフェクトを出す(Ripple Effect)
ボタンの背景色を変更するためにbackgroudで色指定をするとRipple Effectが表示されなくなる。
backgroudを変更するとRipple Effectの設定が上書きされて無くなってしまうため、自分で設定しないといけない。
Ripple Effectとは
ボタンを押したときに出る波紋状のエフェクトのこと。
Andoroid5.0ではRippleDrawableが導入され、実装が楽になった。
実装方法
ここではAndoroid5.0以降を対象に、RippleDrawableを利用して実装する。
やり方としては単純で、RippleDrawableを記述したXML(button_ripple.xml)を作成しておき、ボタンのbackground(activity_main.xml)からそれを呼び出すだけ。
(XMLじゃなくてJavaからでも実装できるが、ここではXMLからで実装する)
/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/btn1" android:layout_width="match_parent" android:layout_height="20dp" android:background="@drawable/button_ripple" android:text="リップル!" /> </RelativeLayout>
/drawable/button_ripple.xml
<?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/button_highlight_color"> <item android:drawable="@color/button_color" /> </ripple>
/values/colors.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="button_color">#ffffaab3</color> <color name="button_highlight_color">#ff4081</color> </resources>
【Android】backgroundで背景色を指定するとクリックエフェクトが出なくなる理由
備忘録
詳細は以下のページを参考に
独自のBackgroundでRipple Effectを使用する - Firespeed
▼理由
・そもそもクリックエフェクト(※1)はbackgroundに実装されている。
・だからbackgroundに背景色を指定するとクリックエフェクトが無効になる。
▼対策
・backgroundに背景色を指定するとき、一緒にクリックエフェクトも明示的に実装しないといけない。
※1 クリックしたときに波紋状に広がるエフェクト。Ripple Effectっていうらしい。