大町公園に散歩へ行った

千葉に引っ越してから定番の散歩コースになりつつある大町公園に行ってきた。 海も良いけど緑も同じくらい良いと思える場所。

goo.gl

池を眺めてたら鯉?が集まってきて口パクパクさせてた。

一部のルートが閉鎖されてた。
野生の狸に餌付けしてる人がいるらしく、そのせいで餌を貰おうと人を襲う可能性があるので危険らしい。
竹柵にしてるあたりが自然公園っぽい。そういえば前行ったときに職員ぽい人が竹切ってた。

iPhone13 miniで撮ったけど、こういう風景写真撮るなら一眼レフのカメラの方がいいのかな。
オリジナルを画像拡大すると粗くなってしまう。ただ初心者のおすすめモデルでも10万くらいするのがキツイ...

また馬堀海岸に散歩へ行った

前回行ったときに見納めしたつもりだったけど、快晴だったのでまた行ってきた。

f:id:hikeshiya:20211030211619j:plain

f:id:hikeshiya:20211030211636j:plain

f:id:hikeshiya:20211030211653j:plain

遠目に見ると海は青色だけど、近くで見ると透明感無いし濁った緑色だよなぁ。

ちょっと調べてみたら神奈川県が海水浴場の水質調査結果*1を出してて、馬堀海岸に海水浴場は無いから調査結果にも無い。ただ一番近い海の公園がBなのでやっぱ東京湾は汚いんだろうな、泳げなくは無いんだろうけど。 あと湘南あたりも汚そうなのにA~AAになってる。ホントか?

f:id:hikeshiya:20211030211722j:plain

電車乗ってここまで来るのもしんどいけど、湯楽の里はもう一回行きたい。どうしようかな。

f:id:hikeshiya:20211030211746j:plain

馬堀海岸に散歩へ行った

神奈川から千葉に引っ越すので見納めしてきた、先月だけど。

goo.gl

青色の景色と潮風がとても心地よかった。

f:id:hikeshiya:20211028212617j:plain


猿島が見える。

f:id:hikeshiya:20211028212922j:plain

引っ越し先にこういう癒しスポットが近くにないのが非常に残念。海も遠いし。

耐えられなかったらまた神奈川に戻ってくるかも。もし戻るなら次は歩いて海まで行ける横須賀か湘南あたりがいいな。

【Android】Realmのモデルクラスを変更後、アプリを再インストールして起動するとRealmMigrationNeededExceptionが発生する

3時間ハマった

事象

Realmのモデルクラスを変更後(カラム名のリネームをしただけ)、アプリの再インストールを行って起動すると RealmMigrationNeededExceptionを吐いてアプリがクラッシュしてしまう。

原因

RealmMigrationNeededException reinstallでググったらissueに挙がっていた・・

github.com

Android6.0からアプリの自動バックアップ機能が実装されたらしく、GoogleDriveに保存するのだとか。
これが原因で、新旧realmファイルがぶつかってMigrationNeddedExceptionを起こしているっぽい。

おそらく再インストール時には以下のようになっている?
アプリのインストール

GoogleDriveからバックアップを取得

バックアップしたアプリに対して更新
(新旧realmファイルがこんにちは)

MigrationNeddedException

対策

公式ドキュメントを見る限り、以下の手順を実施すればよい。
Back up user data with Auto Backup  |  Android Developers

手順1.GoogleDriveからバックアップを削除する

f:id:hikeshiya:20180727221844p:plain
犯人
削除後にアプリを再インストールすると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/backup.xml

<?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

f:id:hikeshiya:20180322130348p:plain

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っていうらしい。