JSP_Blog

ジェイエスピー社員が綴る日替わりブログ

スーパーで買える幸せ

2022-04-21 09:00:00 | 日記
やっと暖かく過ごしやすくなってきたと思いましたが、三寒四温の三寒がやってきた気がしますね。
引き出しの奥にしまったヒートテックをまた手前に戻したYYです。

私が良く行うストレス発散方法なのですが、
好きなものを食べる!
…という食べることが幸せで食べると元気が出るタイプの人間なのですが、スーパーで気軽に買える幸せがあるんです。今回はそのお話です。スーパーで買える幸せはそれはもう沢山あるんですが、その中でも最大級のものです。

多分なんですが、少し大きめのスーパーであれば絶対どこのお店でも売っていると思います。それは『お肉』です。基本的には苦手な人の少ないお肉です。ただのこま切れ肉やしゃぶしゃぶ肉ではありません。
『ステーキ肉』です。
もうステーキというだけで心躍りませんか。最高じゃないですか。スーパーでも売ってるんですよ。ステーキ肉。なんなら部位ごとに売られています。
産地も部位も特にこだわれなければ、1000円強出せばアメリカ産やカナダ産のステーキ肉なんて2枚付いてきます。
それを買って帰って、家でお肉をたたき、筋を切り、下味を付けた後にフライパンで焼く。好みの焼き加減で好きな味付けで調理し、炊き立てのご飯で炊きこむ…これこそ最高の幸せじゃないですか。

ファミレスであれば2000円前後かかるステーキもおうちであれば1000円ほどで楽しめます。やはり、専門店特有の手間暇や専用の鉄板やグリルで焼いたこだわりのお肉と比べるとクオリティに差がありますが、安く、おいしく、楽しく食事ができます。

この楽しみ方は、小学生のころに父から教わりました。
私は当時水泳をしていたのですが、水泳の帰りの時間にはもう夜で、泳ぎ疲れた体がお腹がもうペコペコだと訴えます。おばあちゃんはお家で煮物とお味噌汁を作ってくれている。でもやっぱりお肉が食べたい。そんなある日、父が「ステーキを家で食べよう!」と帰りにスーパーに寄って大きなステーキ肉を買ってくれました。父と二人で下ごしらえをし、父が豪快に焼いて食べさせてくれたステーキ肉。
こんな大きなステーキをお家で食べられるなんて!と父を改めてすごいと再認識した記憶があります。

スーパーでステーキ肉を買って食べる。思い出補正もあり、当時のおいしさを超えることはできませんが、スーパーで買える最大級の幸せです。

最近のお気に入りの食べ方としては、カセットコンロでとろ火でステーキ肉が冷めるのを防ぎつつ、いろいろな味付けを楽しみながら食事をするのが贅沢で最高だと思っています。
(YY)

シンプル入退室管理
  限りなくシンプルなタイムカードシステム

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

moni-stock
  一括スキャンで入出庫・棚卸作業にかかる時間を短縮
  お客様も現場も笑顔にする在庫管理システム

moni-meter
  脱・手書き!点検データをデジタル化して誤検針削減
  ローコストで導入しやすい設備点検支援システム

Smart mat
  重さセンサIoTで在庫管理に革新を。
  自動発注&メールアラートで欠品・発注ミスを防ぎます

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(moniシリーズ)、それに農業も手がけるIT企業
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

【Android】LiveData で値を監視する

2022-04-20 10:00:00 | 日記

Android アプリ開発において、LiveData で値を監視する方法を解説します。

なお、ここに掲載しているソースコードは以下の環境で動作確認しています。

  • Android Studio Bumblebee | 2021.1.1 Patch 2
  • JDK 11.0.11
  • Android Gradle Plugin 7.1.2
  • Kotlin 1.6.10
  • Gradle 7.4.1

LiveData とは?

LiveData は、データホルダークラスであり、内部に値を保持します。そして、LiveData は保持する値の変更を監視し、その変更を外部にコールバックで通知します。

よって、LiveData を使用することで、値の変更に追従できるようになります。

また、LiveData は Activity や Fragment などのライフサイクルを考慮して値の変更を通知する機能も持ちます。具体的には、Activity や Fragment がフォアグラウンドに表示されているときだけ通知を行い、バックグラウンドにいるときは通知を行わない、といったことが可能です。これにより、メモリリークやクラッシュを回避できます。

LiveData を使う

実際に LiveData を試してみます。

Button をクリックした回数を ViewModel に保持し、その回数を Activity の TextView に表示してみます。

このとき、Button のクリック回数を素の Int 型で保持するのではなくて、LiveData で保持します。

ライブラリのインポート

LiveData を使えるようにするために、アプリの build.gradle ファイルに次の依存関係を追加します。


dependencies {
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1"
}

lifecycle-livedata-ktx をインポートすることにより、LiveData が使えるようになります。また、以降のサンプルでは LiveData を ViewModel に保持するため、lifecycle-viewmodel-ktx もインポートします。

ViewModel で値を保持する

まず、ViewModel を以下のように実装します。


class MainViewModel : ViewModel() {

    /** Button のクリック回数 */
    private val _count = MutableLiveData(0)
    val count: LiveData<Int> get() = _count

    /** クリック回数をカウントアップする。 */
    fun countUp() {
        _count.value = count.value!! + 1
    }
}

最初に、LiveData で値を保持する箇所を見ていきます。


/** Button のクリック回数 */
private val _count = MutableLiveData(0)
val count: LiveData<Int> get() = _count

LiveData には大きく分けて MutableLiveData と LiveData の 2 つのクラスが存在します。この 2 つは以下のような違いがあります。

  • MutableLiveData → 値を変更できる
  • LiveData → 値を変更できない

LiveData を扱う場合、値の変更は ViewModel 内部に留めて、値の変更通知を受け取る Activity や Fragment などではその値を変更できないようにします。

よって、値そのものは private が付与された MutableLiveData で保持して、それを LiveData に変換したものを ViewModel の外部に公開します。

次に、クリック回数をカウントアップするメソッドを見ていきます。


/** クリック回数をカウントアップする。 */
fun countUp() {
    val value = count.value!!
    _count.value = value + 1
}

LiveData で保持する値をカウントアップするためには、LiveData からの値の取得と LiveData への値の設定が必要です。これらは以下の 2 つで実現します。

  • 値の取得 → LiveData#getValue
  • 値の設定 → MutableLiveData#setValue

また、LiveData を扱うときの注意点として、LiveData は値を null 許容型で保持する、というものがあります。よって、LiveData から取得した値を扱う場合、その値を null 安全な型にアンラップする必要があります。

以上により、クリック回数のカウントアップメソッドでは、以下のような流れでクリック回数をカウントアップします。

  1. count からクリック回数を取得して、null 安全な型にアンラップする。
  2. クリック回数を +1 加算して、_count に設定する。

Activity で値の変更通知を受け取る

そして、Activity を以下のように実装します。


class MainActivity : AppCompatActivity(R.layout.main_activity) {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val viewModel =
            ViewModelProvider(this)[MainViewModel::class.java]

        // ボタンがクリックされるたびに、クリック回数をカウントアップする。
        findViewById<Button>(R.id.button)
            .setOnClickListener {
                viewModel.countUp()
            }

        // クリック回数が変更されたら、TextView を更新する。
        viewModel.count.observe(this) {
            findViewById<TextView>(R.id.text).text = it.toString()
        }
    }
}

まず、Button がクリックされたら ViewModel のカウントアップメソッドを呼びます。

そして、ViewModel のクリック回数の変更通知を監視します。変更通知を監視するために、以下の LiveData#obseve メソッドを呼びます。


@MainThread
public void observe(@NonNull LifecycleOwner owner,
                    @NonNull Observer<? super T> observer)

このメソッドに、監視を行う owner と変更通知を受け取ったときに呼び出す observer コールバックを渡します。

owner には、LifecycleOwner インターフェースを継承しているインスタンスを渡します。今回の場合、監視を行うのは Activity であり、MainActivity は LifecycleOwner インターフェースを継承しているので、owner には this を渡します。この owner を渡すことにより、LiveData は owner がアクティブなとき、つまり MainActivity がフォアグラウンドに表示されているときだけ、変更を通知するようになります。

observer コールバックは、変更後のクリック回数を受け取ります。コールバックでは、受け取ったクリック回数を TextView に設定します。(さ)


シンプル入退室管理
  限りなくシンプルなタイムカードシステム

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

moni-stock
  一括スキャンで入出庫・棚卸作業にかかる時間を短縮
  お客様も現場も笑顔にする在庫管理システム

moni-meter
  脱・手書き!点検データをデジタル化して誤検針削減
  ローコストで導入しやすい設備点検支援システム

Smart mat
  重さセンサIoTで在庫管理に革新を。
  自動発注&メールアラートで欠品・発注ミスを防ぎます

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(moniシリーズ)、それに農業も手がけるIT企業
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ファンを作ろう

2022-04-19 07:00:00 | 日記
こんにちは。パンダさんです。
4月も半ばを過ぎてスギ花粉がだいぶ落ち着いてきました。ヒノキ花粉はまだみたいですね。春の花粉症のみなさま、辛抱強く頑張りましょう。終わりはもうすぐです。

先日、横浜市のイベント「里山ガーデンフェスタ」に行ってきました(トップの写真はその時のものです)。
5年ほど前から毎年春と秋に期間限定で開かれている入場無料の催しで、季節の花々が咲き誇る大花壇が有名。今年の春は3/26から5/8まで開催されており、まさに春を体感できます。場所はよこはま動物園ズーラシアの隣です。

私が行った日は前日雨でまだ肌寒かったのですが、着いたら日差しが出てきてお天気に恵まれました。新型コロナの影響かそこまで混んでおらず、少人数で散策されているご家族やお友達グループを多く見かけました。前述のとおりGWにも開催されていますので、お時間ある方行ってみてはいかがでしょうか。

さて本題。皆さんはモノを買うときや何かをするとき、何を「きっかけ」にすることが多いでしょうか。「偶然」「気分」「ジャケ買い」「雑誌や動画でオススメされていたから」など理由は様々だと思います。

私は「作者やブランド、会社のファンだから」が多い気がします。感動した作品や美味しかった食べ物についてはクリエイターを探る癖がついていて、「次は何をするのだろう」と動向を観察するようになってしまう。つまりファンになってしまうわけです。

最近面白いと感じるのはスマホの充電器やモバイルバッテリーで有名なAnkerですね。ワイヤレスイヤホンやロボット掃除機、ポータブル電源なんかも出しています。何が気に入ってるかというと、「そうそう、これに困っていたのよ。」や「あれとこれをくっつけたら最高じゃん。」な感じの一味違う製品が多いから。ユーザの視点からモノ作りをデザイン・企画している姿勢を強く感じます。

Anker製品はネット通販が主で、今まで店頭で触れる機会が少なかったのですが、楽天モバイルと組んで店頭に触れるモノがあるお店が増えてきました。私が行った所では、ららぽーと横浜の楽天モバイルに併設されている直営ショップが一番品揃えがよかったです。新製品が続々出てるので、気になる方はららぽーと横浜に足を運ぶのをお勧めします。

あと最近気になっているのはPanasonic。うまく言えないのですが、「お!?」と目を引くものがこの数年増えてきた気がする。まだ発売されていないけど苔ロボとか。

とまぁこんな感じで、同じモノづくりをする人間としてファンが着くような仕事ができたらいいなーと思っています。任務を確実に全うしたうえでプラスアルファの個性を入れる。「君に頼んでよかったよ」と言われるのを目標に、若い方々一緒にお仕事頑張りましょう。まずは自分が楽しんで取り組むところから始めるのがいいと思います。
それでは皆さま、今年度もよろしくお願いします。

パンダさん

シンプル入退室管理
  限りなくシンプルなタイムカードシステム

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

moni-stock
  一括スキャンで入出庫・棚卸作業にかかる時間を短縮
  お客様も現場も笑顔にする在庫管理システム

moni-meter
  脱・手書き!点検データをデジタル化して誤検針削減
  ローコストで導入しやすい設備点検支援システム

Smart mat
  重さセンサIoTで在庫管理に革新を。
  自動発注&メールアラートで欠品・発注ミスを防ぎます

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(moniシリーズ)、それに農業も手がけるIT企業
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

棚が足りない!

2022-04-18 10:00:00 | 日記
どうも前回こたつ布団を片そうと思っているとか言っていたくせに未だにこたつが現役で動いているなかです。おかしいな……

こたつが片付かなかったからではないですが、棚を新調しました。
というのも使っていた棚が一人暮らしを始めるときに買った棚で、いい加減ガタがきていたのです。
なので新しい棚を購入して古い棚を処分しようと思い、古い棚からすべてのものを出したらもちろんこうなりました。





捨てるまで置いとかなきゃいけないからいいんだけど……と思いながら棚を組み立て(もちろん組み立て中にも邪魔をされ)、
組み立て終わった棚に今まで飾っていたものを戻し、いい出来!と自画自賛したものの、これ以上は入らないなぁ……悩んでいた翌週悲劇が。



頼んでたー!忘れてたー!
箱を開けるとそこには大量のグッズたち。可愛い。
そして翌日もグッズが届くという悲劇が続く続く。悲劇は続くよどこまでも。
棚が足りない!でも棚があったところで置く場所もない!でも飾りたい!
ということで折衷案で綺麗に飾ったものの隙間を縫うようにして飾りました。



可愛い。世界の可愛いがここに詰まってる気さえしてくる。
とりあえず急場はこれでいいにしろ、どこかでちゃんと飾る棚を増やさねばと思ったものの先述の通り棚を置く場所がない。
どうにかしなきゃなぁ……と頭を抱えながらやっとこたつ布団を片付ける算段をし始めたなかなのでした。(中)


シンプル入退室管理
  限りなくシンプルなタイムカードシステム

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

moni-stock
  一括スキャンで入出庫・棚卸作業にかかる時間を短縮
  お客様も現場も笑顔にする在庫管理システム

moni-meter
  脱・手書き!点検データをデジタル化して誤検針削減
  ローコストで導入しやすい設備点検支援システム

Smart mat
  重さセンサIoTで在庫管理に革新を。
  自動発注&メールアラートで欠品・発注ミスを防ぎます

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(moniシリーズ)、それに農業も手がけるIT企業
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

何回行っても楽しい!

2022-04-15 09:00:00 | 日記
実はカワスイの年パスを手に入れているあざらしです。

カワスイという単語が出た時点でもしかして今回はカワスイ話?と思った方。そうです。カワスイ話です。
(※カワスイは川崎にある水族館のことです。)

といっても、稀に「何回も同じ水族館に行って楽しいの?」と聞かれることもあるので楽しい理由を考えながらカワスイ巡りをしましょう。

その前にカワスイの年パス自慢!

アプリ版もあるのですが、形に残るものが欲しかったので今回はカードにしました。
3種類の柄から、赤が好きなのでオニオオハシを選びました。
(お昼に行くと実際にオニオオハシが見られますよ)

これで割引特典なども利用できますね!
裏側には作ったときにその場で撮られた顔写真、生年月日、QRコードがあります。
裏側のQRコードを読み取ってもらっていざ中へ

早速いつもと違う箇所を発見!
夜桜です!!!!(ちょっとブレてますね……!!)


ちなみに別アングルで分かりづらいですが、普段はこうです。


水族館によりますが大抵の場合季節のイベントや特別展示をやっているのです。こういうイベントがある時期の水族館は雰囲気がガラッと変わって魅力的です。
「何回も行って楽しいのか?」の個人的理由の一部だと思います。

そしてお腹が空いていたので館内にあるこもれびカフェに入りました。店内も少し桜っぽさが!!


桜クリームソーダといちごとクロワッサンワッフルをいただきました。




とってもかわいいです。カピバラクッキーも美味しいです。
水族館オリジナルな食べ物があったり、季節で変わったり、食でも楽しめます。
これも「何回も行って楽しいのか?」の個人的理由の一部かもしれないですね!

カフェをでて、気がついたら18:00近くに…。

カワスイは昼と夜の顔があります。
昼のイキイキとした感じから夜は一気にジャングルな感じで独特な静けさがあります……。

よし、夜の館内を巡ろうと思ったらちょうど18:00から「アマゾンナイト」というプログラムがありました。

好きな色のランタンを借りて、アマゾンコーナーをまわったり、ナマケモノを近くで見るというもの。18:00にはもう照明が落とされて辺りは暗いのでプチアマゾンジャングル探検気分。


ランタンを持つだけでウキウキが止まりません。
写真だとナマケモノは木と同化してみえてよくわからなかったので載せませんが、ぜひ体験してみてほしいです。

後で調べたのですが、このプログラムは昨年の11月からスタートしたとか……。それは知らなかったですね!
水族館のプログラムも変化があるところがとても良いですね。
これまた「何回も行って楽しいのか?」の個人的理由の一部かも!

さて、
・季節にちなんだイベント
・食べ物
・毎日ある水族館のプログラム
の3つで「何回も行って楽しいのか?」の個人的理由の一部が見つかりました。

最後に私が水族館に何回も行く一番の理由は、水槽をぼーっと眺めるだけでとても癒やされるからです。
よく考えたら同じ生き物たちがその水族館で待っていますが、毎回違った表情を見せてくれます。眺めていて飽きないのです。

もしかしたら、何回行っても楽しいと思える理由は「変化」があるところなのかもしれないですね。

水族館は何回行っても楽しいですよ!!

(あざらし)

シンプル入退室管理
  限りなくシンプルなタイムカードシステム

monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

moni-stock
  一括スキャンで入出庫・棚卸作業にかかる時間を短縮
  お客様も現場も笑顔にする在庫管理システム

moni-meter
  脱・手書き!点検データをデジタル化して誤検針削減
  ローコストで導入しやすい設備点検支援システム

Smart mat
  重さセンサIoTで在庫管理に革新を。
  自動発注&メールアラートで欠品・発注ミスを防ぎます

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(moniシリーズ)、それに農業も手がけるIT企業
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする