kojiko-android’s blog

開発中にハマった時の解決策や、忘れがちなことを残しておきます。

ハムスターに自作の地下型巣箱をあげてみた

〜はじめに〜

 もしあなたが、 ”ハムスター 地下型巣箱” と検索してここに飛んでこられたのなら、
現在ハムスターを飼っていて、地下型の巣箱というものに興味がある、もしくは自作してみようかなと
お考えかと思います。

 ハムスターの姿がよく見えて、床材の上に木でできた小さな巣箱を置いて、かわいいミニチュアワールドの中で
愛ハムが楽しそうに生活する♪・・・といった従来の飼育スタイルではなく、
ハムスターにとって健康的で、本能に従った行動ができて、ストレスの無い、ハム目線で幸せになってもらいたい、
という飼育スタイルを目指すのであれば、地下型の巣箱を導入する価値はあります。

 今回は、私が実際にあり合わせの材料で地下型の巣箱を自作し、ハムスターにプレゼントした過程をご紹介します。
( ´θ`)ノ


 地下型の巣箱は、入澤二郎さんが考案されました。
ハムスターへの慈愛に満ちたお方です。
本稿では詳細には解説いたしておりませんので、
(というかとても解説しきれない)
ぜひ入澤さんのホームページからご確認ください。
ham-ham-ham.com

お金をかけずにいざ自作

 地下型の巣箱の設計図が存在します。
私はこれには従っていません(笑)
しかし絶対に守るべき大切なことがあります。
それは、

・ハムスターがギリギリ通れる幅の ”通路” があること
・部屋が5つあること
・すきま風が入らないこと

以上を踏まえて、さっそく作っていきます!

f:id:kentaro198477:20180131204345j:plain

 はい(^-^;

 正月に親戚からもらったお菓子の紙箱に、ダンボールを切ったのを使って仕切りにしました(笑)
ダンボールがズレないように、割り箸で床と接着しています。
木工用ボンドなんて何年ぶりに買っただろう(笑)
洗濯バサミは、ボンドが乾くまで固定しておくためです。

 大事なのは、クオリティーではなく愛情です(`・∀・´)

 真ん中の細い道が通路です。
ハムスターは、体全体が何かに触れていると安心するそうなので、この通路の幅はとても重要です。

 推奨の寸法や部屋の役割などは、考案された入澤二郎さんのホームページに詳細が記載されています。
文頭文末にリンクを張っているのでご参照ください。

完成したのでご入居してもらう

f:id:kentaro198477:20180131204406j:plain

 奥の大部屋を寝室にしてくれると思うので、コットンとティッシュを少し入れておきました。
一応トイレ室候補の部屋には、固まるトイレ砂的なものを敷いておきます。
 これだけです、巣箱内部はこの状態でスタートしました。
あとはハム君が好きにやってくれます。
人間も自分で自分の部屋を快適にするのと一緒です♪

 巣箱の外には巣材となるコットンとティッシュをたっぷり置き、
巣箱の上に透明の板を置き、その上から遮光布をかけます。
 透明の板は、100均で買った透明の下敷きをハサミで切り、
遮光布は、これまたダンボールを切ったものを使いました(笑)。
すきま風に注意。

一週間後

 ハム君を一旦隔離し、トイレ砂補給のために巣箱を開けます!

 パカっ。

f:id:kentaro198477:20180131204433j:plain

 このようになっておりましたm(._.)m

 奥の大部屋は寝室に決まったようで、わかりづらいですがコットンが細かく引き裂かれて床から天井までを満たすように
ふかふかになっています。
 真ん中上が貯蔵庫、下がトイレ室になったようです。
いろんな所にひまわりのタネの殻が。
自分の家のように自由気ままに食べてくれてるんですかね♪

 何者かが侵入したと思うと安心できなくなるので、トイレ砂だけちょっと足して元どおり戻しておきます。
私は、完全に黒子に徹しています(笑)

徐々に仲良くなろう

 ハムスターは帰るべき場所ができて安心すると、心にゆとりができて、いろんなことに興味を持ちます。
このあたりから、ちょっとずつコミュニケーションをとっていきます。

 まずは乾燥状態のパスタ。

f:id:kentaro198477:20180131204448j:plain

 左に見えているのが巣箱です。
巣箱を与えて間もない時は、私の気配を感じるとサーチモード(立ち上がって周囲を警戒)に入ったり、
一目散に巣穴に逃げ込んだりしていましたが、
写真のようにいつでも逃げ込める位置から、パスタを掴もうとしています。

 入澤二郎さんのホームページに記載の通りです。

 この頃に、巣箱を作って良かったー!と思えました( ´ ▽ ` )

まとめ

 私の愛ハムスターを見る限り、とても嬉しそうなのは気のせいでしょうか?笑
活動時間になると巣穴から出てきて、まず砂風呂で「ぅおっしゃーーー」という感じで激しくゴロゴロしてから、
私の手のひらからひまわりのタネを5〜6個受け取り、巣箱に持ち帰る、というのが最近のルーティンです。
巣箱から、頬袋からエサを出すときの「ばらばら〜」という音が聞こえてきます。

 結論は、自作で上記のようなクオリティーでも全く問題ありませんでした。
掃除は大変なのかなと思いましたが、ほとんどの時間を巣箱の中で過ごすので、
外にはあまりフンが落ちません。
フンはハムスターに取って非常食になるので、巣箱の中にあるフンはそれほど神経質に掃除しなくて良いのです。
トイレ砂の掃除がメインです。
逆に可愛いミニチュアケージで飼育していると、見た目的にフンが気になってしまうと思います。
 その巣箱の住人が、(考えたくはありませんが)その生涯を終えたとき、巣箱は捨ててしまおうと思います。
また作ればいい、これも自作のメリットです。

 ただ一点、巣箱プレゼントから2週間後くらいのときに、下敷きがズレて大部屋側に3ミリくらいのすき間ができてしまいました。
その次の日には、寝室だった大部屋の巣材はほとんど全て、入口側の空き部屋に移され、新たな寝室となっていました。
 すき間風が気になっただけなのか、侵入されたと思ったのかわ分かりませんが、
自作の際には注意が必要かなと思います。
信頼できない巣ですとハム君もなかなか落ち着けなくてストレスになってしまうかもしれません。


 ご心配な方は、入澤さんのホームページから完成品の地下型巣箱を購入することができます。
すきま風の心配もなく、購入された方によれば、それは工芸品のように美しい巣箱だそうです。

 
 自作の巣箱を愛ハムスターが使ってくれるのも嬉しいですし、
久しぶりに工作したので、作る過程も楽しかったですよ!


 Let's D I Y !


 地下型の巣箱については、考案された入澤二郎さんのホームページに詳細が記載されています。
ハムスターへの慈愛に満ちた内容で、「巣穴の三大習性」や「環境エンリッチメント」など、
ハムスターの関する重要な情報が網羅されています。
私にとってのハムスター百科事典として何度も読みました(@_@)
メールでご質問した際も丁寧にご返答くださりました。
ハムスターへの理解が深まります。ぜひご覧ください。
ham-ham-ham.com

電卓に使えるNumberFormatまとめ

数値をカンマ付きのテキストに変換する、
小数点以下の最大桁数を指定する、
端数処理をする、
末尾が"0"の場合は自動的に取り除く、など、
電卓のようなアプリにピッタリのNumberFormat。

NumberFormat nf = NumberFormat.getNumberInstance();

//    小数点以下の最大桁数
nf.setMaximumFractionDigits(3);

//    切捨て
nf.setRoundingMode(RoundingMode.DOWN);
      
//    切り上げ
nf.setRoundingMode(RoundingMode.UP);
      
//    四捨五入  
nf.setRoundingMode(RoundingMode.HALF_UP);
      
//    五捨六入
nf.setRoundingMode(RoundingMode.HALF_DOWN);
 
//    doubleなどの値を渡して文字列を取得          
String string = nf.format(value);


小数点以下最大桁数を指定すると、第○位まで表示されますが、
末尾の0は削除されます。
答えが整数の時はピリオド以下は表示されません。

NumberFormatは他にも様々なメソッドがありますが、
簡単な電卓なら上記の機能で十分実用利用できそうです。

Shapeで真円のボタンをコードで生成する

ボタンの背景に真円を使いたい時、とりあえず簡単に実装したい時に。

f:id:kentaro198477:20171017182545p:plain
iOSの電卓風のボタンです

Buttonを継承したカスタムButtonクラスを作り、以下のメソッドを追加し、onLayout等で呼び出します。

    public void setSolidColor(final int color){

        int w = getWidth();
        int h = getHeight();

        final int r = Math.min(w,h) / 2;

        final int cX = w / 2;
        final int cY = h / 2;

        Shape s = new Shape() {
            @Override
            public void draw(Canvas canvas, Paint paint) {
                paint.setColor(color);
                paint.setAntiAlias(true);
                canvas.drawCircle(cX,cY,r ,paint);
            }
        };

        ShapeDrawable sd = new ShapeDrawable(s);
        RippleDrawable rd = new RippleDrawable(ColorStateList.valueOf(Color.WHITE),sd,sd);
        setBackgroundDrawable(rd);
    }

xmlでリソースを書くことも無く、とりあえず簡単に実装できます。
リップルエフェクトも実装しているので、マテリアル的なタッチフィードバックも実現できています。
また、動的に色を変えたい時も上記のメソッドを呼べばいいので、色のカスタマイズ機能を実装する時も
ドロワーブルを取り出してカラーフィルターをかけて…としなくても良いので簡単だと思います。
等間隔に配置するなど工夫するとよりキレイなデザインになると思うので、いろいろやってみてください。



楕円のボタンなど古臭くて使わないと思うので、真ん丸のリソースくらい簡単に書けるようになってほしいですねぇ。

Apple ID を忘れてしまった。サポートに電話しないで思い出す方法【iPhone】

iPhoneiCloudのバックアップから復元しようとしたが、AppleIDを忘れてしまった」
公式サイトで検索したがヒットしない、サポートに電話をかけるも、
「結論から申し上げて自力で思い起こして頂く他ありません」と言われてしまう。
あの親切丁寧なアップルのオペレーターさんでも、打つ手が無いという状況。
AppleIDは、公の情報のようでありながら、実はとてもパーソナルで重要な情報です。


このページを読まれている方は、IDを思い起こすために既に様々な方法を試されたのではないでしょうか?


ここでは、私が実際に、丸一日苦悩した末に、新規Apple ID作成の一歩手前で思い出した方法を紹介します。
(全ての方に結果が出るかはわかりません、あくまで自分の行った例です)

他のSNSサービスの登録情報から探す


公式サイトから、「Apple ID をお忘れですか?」は、試されましたか?
性と名を入力し、メールアドレスを入力します。
しかし、このメールアドレスがiCloudのアドレスだと、Apple IDと同じ物なので、
ここで詰みます。
それが分かれば苦労していませんね。

逆を言うと、iCloudのメールアドレスが分かれば、Apple IDが分かります。

iPhone純正の”メール”アプリがありますね。
届いたメールは、iCloudGmail、Yahooメールなど、アカウントごとに分類されています。
iCloudの受信箱を見たときのことを、よーく思い出して下さい。
だいたいは、Appleからのお知らせやiTunesのメールがほとんどだと思いますが、
Apple以外からのメールはありませんでしたか?

私の場合は、Twitterからのメールが来ていたのを覚えていました。
本文には「最後のステップです・・・」とあったので、
初めはiCloudのアドレスを狙った迷惑メールかなと思っていましたが、
SafariからTwitterにログインし、
「設定とプライバシー」、「アカウント」と進むと、
「メール」の項目のところに、バッチリとiCloudのメールアドレスが入っていました!

これこそ探していたApple IDです!


私の場合は、このTwitterからのメールが決め手でしたが、
他のSNSサービスからのメールが入っていたのを思い起こせたのなら、
当該SNSにログインすれば、登録情報からiCloudのメールアドレスを発見できるかもしれません。


これを機に私は、Apple IDの表示された画面のスクショを撮り(Googleドライブなど別のアカウントにも保存)、
紙に書いて物理的に保管することを決めました笑。


その他、最終手段

Appleのサポートに電話をし、サポートの「スペシャリスト」に繋いでもらいます。
Apple IDアカウント作成の際に、使用したと思われる語句を思い出せる限り伝えて、
あらゆる組み合わせの可能性も伝えます。
検索してもらう際に、誤字を含んだIDの候補も教えてくれることもあるので、
(おそらく、スペシャリストさんには、Appleに登録されているIDのリストが見えている)
それらの候補を片っ端から打ち込んで試してみるという方法です。

ただしこの方法は、オペレーターの方に大変な負荷がかかってしまううえ、
こちらから提示した語句が正しいとは限りません。

私の思い出せる限り、
「名前 + 苗字のイニシャル + 生年月日 @icloud.com」
と登録したと思っていたのが、
実際に登録していたものは、
「あだ名 + 誕生日 @icloud.com」
でした。

人間の記憶はあいまいです。
もし私がオペレーターに上記の方法をお願いしていたら、
何時間かけようが解決しなかったでしょう。
たいへんなご迷惑をかけてしまうところでした。


普段、親身になって相談に乗ってくださるAppleのサポートチームの方々には、迷惑はかけたくないものです。



以上、私が試して解決できた方法です。
同じような悩みを抱えている方の問題解決を祈っております!

【日記】電卓アプリ製作中・・・【進捗状況】

私も電卓アプリでポルシェを買いたい!と思って電卓アプリを作っています笑

といってもなかなかダウンロードは伸びず、ポルシェを買えるようになるには100年はかかりそうですね。

そのまえにキーストアの有効期限の25年を過ぎそう・・・


でも電卓って、基本的な機能を抑えてプラスアルファの機能を付けたり、デザインで勝負したり、

付加価値を生み出せれば、それにヒットする方には使って頂けそう。


そういう意味では夢があるテーマではあると思うのである。


ではどうするか。

まずはターゲティング?

万人受けにするか、ニッチな感じにするか。

既に10万ダウンロード以上されているアプリを見ても、

シンプルなもの、実物のようにリアルなもの、単位変換なども計算できる多機能なもの、

関数電卓・・・これは、層が狭そうだし、私には到底作れない。

あとは、キャラものだったり、テーマが豊富なものだったり。

ただ、どれも自分にはしっくり来ないんですよね。


なんかで読んだ、ターゲティングはアバウトにしないで、

現実世界の一人にまで絞る(もしくは、実在するかのごとく詳細まで設定する)といいらしい。

じゃあ、ターゲットを自分にして、自分が最も使いたい電卓を作ろうと思う。

これってありなのかな?

自分だと客観的になれないとか、

なんか作ったけど、既製品とは違う手作り感がでてしまう。

ボタンの余白とか、色とか、既製品は全てうまいことまとまっている感があるが、

自作のだとどこか不安定な感じがするのですが。


いや、それより大元の部分をしっかりするべきなのか。

電卓という、それでできることはほぼ一緒という、

なにか感動を与えるものではないということがネックになっている気がします。

誰もが使ったことのある、ごく身近なツールの一つなので、

使い慣れた電卓(電卓アプリ)から乗り換えてくれるような、

もしくはダウンロード済みのアプリに並べてインストールしてもいいよってくらいの

クオリティと、狭い意味でのポテンシャルがないと厳しいのかな。


ターゲティング自分だと完壁主義に陥りなかなか完成しなさそうなので、

ターゲットは身近な家族にします笑

プレゼントするつもりで作ってみます。



今日はメモリー機能を付けました。

頑張ります。

Viewを指に追従させる方法

ボタン等のViewをタッチし、そのまま指をスライドさせたときに、
指にくっついて来るようにViewを動かす方法です。

サンプルでは横移動のみに制限し、指を離すとゴムのように元の位置に戻る動きをします。
iOSの”スライドでロック解除”のイメージ)

Viewのタッチリスナーに以下のように記述します。

movableButton.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        v.setTag(event.getX());
                        break;
                    case MotionEvent.ACTION_MOVE:
                        float f = event.getRawX();
                        v.setTranslationX(f - (float)v.getTag());
                        break;
                    case MotionEvent.ACTION_UP:
                        ObjectAnimator.ofFloat(v, "translationX", v.getTranslationX(), 0f)
                                .setDuration(100l)
                                .start();

                }
                
                return false;
            }

        });


getRawX()では、スマホの画面に対する絶対位置を取得できます。
getX()は、Viewに対する相対的な位置を取得するので、
指を動かしたときにViewを移動させると、その都度、相対位置が変わってしまいます。


アクションダウンで、移動開始時のX値を取得しておきます。
フィールドを使わずシンプルにするため、Viewのタグを利用しました。
v.setTag(event.getX());


アクションムーブで移動量を求め、
その値の分だけViewを移動します。

float f = event.getRawX();
v.setTranslationX(f - (float)v.getTag());


指を離したときに、元の位置に戻るアニメーションです。
移動後の現在位置から元々設置されていた位置まで戻る動きをします。

Ollieを導入する

簡単にデータベースを扱うことができるOllieの導入方法です。
build.gradle(app)に、以下の青色文字の部分を追加します。


apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'


dependencies {

  ・・・

compile 'com.michaelpardo:ollie:0.3.1'
provided 'com.michaelpardo:ollie-compiler:0.3.1'

}


build.gradle(プロジェクト)に、以下の青色文字の部分を追加します。



buildscript {
repositories {
・・・
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

}
}

以上備忘録。