「技術」カテゴリーアーカイブ

【デザインパターン】MEMENTOパターン

処理前の内部状態(Memento)を保持し、状態を復元する仕組みです。

package com.example.memento;

public class Memento {
    int protectedInfo;

    Memento(int protectedInfo) {
        this.protectedInfo = protectedInfo;
    }

    int getProtectedInfo() {
        return protectedInfo;
    }

    public int getPublicInfo() {
        return protectedInfo;
    }
}
package com.example.memento;

public class Originator {
    private int info;

    public Originator(int info) {
        this.info = info;
    }

    public Memento createMemento() {
        Memento memento = new Memento(info);
        return memento;
    }

    public void restoreMemento(Memento memento) {
        this.info = memento.protectedInfo;
    }

    public void process() {
        info++;
    }

    public String toString() {
        return Integer.toString(info);
    }
}
package com.example.main;

import com.example.memento.Memento;
import com.example.memento.Originator;

public class Caretaker {
public static void main(String[] args) {
int info = 1;

Originator originator = new Originator(info);
Memento memento = originator.createMemento();

originator.process(); // 更新
originator.toString(); // 出力
originator.restoreMemento(memento); // レストア
originator.toString(); // 出力
}
}

MementoとOriginator は同じパッケージに含まれますが、Caretaker は別のパッケージで構成されます。

Caretaker はMementoを保持し、好きなタイミングで復元することができますが、Caretaker は直接Mementoのデータを書き換えることはできません。

なので、データの一貫性を保持しつつ、データを復元することができるようになります。

AWSを使用することによるメリット・デメリット

今AWSを基本から勉強中です。

UdemyにAWS基礎を学ぶことができるコースが2000円ぐらいで売られていたので、こちらを受講しています。

ちょっと画面が古いですけどね。

公開日が2年前だから仕方が無い。

で、最初の方の講義にAWSの特徴を説明していたのですが、

AWSは複数のサービスで構成されていて、

その数100以上。

もちろん、これらを覚える必要は無いのですが、

全てを使用する必要も無くて、

必要がある物だけを使用すれば良い。

逆に言えば、不要な機能は使用しなくて良いので、

その分コストがかからない。

さらに、AWSのサービスは必要に応じて増やしたりできるので、

機能追加だったり、高負荷に耐えられるように増設したり、といった操作も簡単にできます。

これはクラウドならではのメリットですね。

デメリットとしては、オンプレミスやVPSに比べて自由度が劣る(でも、今のままでも十分細かい設定ができますが)

そして、AWS自体が障害を起こすと手の施しようがないということ。

これはクラウドである以上仕方が無いことですよね。

いやーUdemyは分かりやすいわ。

よく訳の分からないインフルエンサーの紹介するセミナーやサロンよりもお得よぉ。

【eSIM】の入れ替え(Y!mobile)

オイラはスマホのSIMに、回線開通に時間の掛からないeSIMを使用しているのですが、

Y!mobileでeSIMの入れ替え(要はPixel4aからPixel5aに載せ替える)には、

  • Webから機種変更の手続きを行う
  • Pixel4aでQRコードを表示し、Pixel5aで読み取る(eSIMのダウンロード→なのでWi-Fi環境は必須)
  • Pixel4aのQRコードの下にあるボタンを押して手続きを進める→Pixel4aのeSIMが無効化され、Pixel5aのeSIMが有効化になる

物理SIMだったらSIMカード差し替えで済むんだけどねぇ。

意外なeSIMの盲点でした。

ちなみに、Pixel4aには楽天モバイルのeSIMを新規に取得しました。

以前使用していたときは、手続きすると、eSIMダウンロード用のQRコードが郵送で送られてくる、という

🤔eSIMとは・・・

だったのですが、今回は、オンライン本人確認(eKYCと言うらしい)で審査が通れば、QRコードのリンクがメールで送られてくると言う形になっていました。

なので、早ければ当日、遅くても次の日にはeSIMが使用できます。

なかなか良くなってるじゃん。

楽天モバイルはコストの低さだけはダントツなので、サブ機のSIMには最適です。

Pixel5aが着弾しました。

でん。

ででん。

一日かけてセットアップしました。

左がPixel5a、右がPixel4aです。

かなり画面が大型になりました。

ただ、それ以外はほとんど変わらず。

何が変わったんだっけ?

(検索中・・・)

Pixel5aになったことで、5Gに接続できて、防水になりました。

それだけの違いで、Pixel4aより安くなってるなんて、お買い得だよね!

5Gは都心部に行かないと繋がらないので、明日とか、街に出てみるか。

【Linux】スワップファイルを作成する。

sudo dd if=/dev/zero of=/var/swap.1 bs=1M count=4096
sudo mkswap /var/swap.1
sudo chmod 600 /var/swap.1
sudo swapon /var/swap.1

これでスワップファイルが作れるのだが・・・

再起動するたびに作成しなくちゃいけないのがめんどくさい。

起動すると勝手に作ってくれる方法は無いだろうか?

こちらに答えが書いてありました。

https://kazmax.zpp.jp/linux_beginner/mkswap.html#ah_4

sudo vi /etc/fstab

このファイルに、

/var/swap.1                    swap           swap    defaults 0 0

と記入すればOK。

スクラム開発を参考にした簡単仕事整理術

これをやろうと思ったのは、

毎年中途半端のまま終わってしまう大掃除。

少しでも大掃除が進むようにと思って、スクラム開発のやり方を参考にして、大掃除に取り入れてみようと思います。

このやり方は他の事でも応用できると思います。

今回は大掃除を例にしてみたと思って、参考にしてみてください。

タスク出し

まぁ、やることリストですな。

ToDoリストともいう。

まぁ、何であれ、やるべき作業をリストアップして可視化することは、大事な事です。

順位付け

次は、やることリストに順位付けをします。

基本的に上の順位から仕事を実行していくことになるので、

期限が迫っている仕事が上位になります。

今回の場合は、次の燃えないゴミの日が12月22日なので、一番上位にしました。

今回の大掃除の例では、残りの作業は特に期限はありませんが、基本的に期限が近い物から上位に並んでいくと思います。

そして、下位になるほど「できたらやる(最悪やらなくても良い)」ものになります。

こうやって順位をつけることで、何から着手すれば良いのかが可視化されます。

ちなみに、この方式はスクラム開発のプロダクトバックログ(PBI)の手法と同じ方法を取り入れました。

さて、これから大掃除に取りかかります。

ALTERLINUXのメモリを増やす

前回。

Amazonで注文したメモリが届きました。

4GB×2枚です。

装着。

問題無く動きました。

メモリもきちんと8GBになっています。

さて、これで何を作るか・・・

ちなみに、ブラウザ立ち上げると1.2GB、

Eclipse立ち上げると0.6GB使用するので、

まぁ、使い切ることは無いと思うけど、

念のためスワップ領域も用意しておく。

スクラム開発を5週間体験して思ったこと。

前回はこちらに書いたのですが。

新たな気づきを書いていきます。

属人化を防ぐ取り組み

属人化とは、例えば「この作業はこの人にしか出来ない」という状態です。

この状態を作ってしまうと、その人が不在の場合、完全に作業が止まってしまいます。

それを防ぐ取り組みとして、情報を共有する時間を設定したり、ひとつの作業を複数のタスクに分けて複数人で取り組めるようにしたりして属人化しないように工夫しています。

特に、一つのPBIアイテムを一人で作業しないようにあえて他の人にやらせる、というのも、なるほど、と思いました。

プロダクトオーナー(PO)にもスキルが求められる。

POとは、まぁ、プロダクトを発注して、受け入れる側のプレイヤーですが、

POはプロダクトを受け入れる役割があるのと同時に、開発メンバーにプロダクトの内容をきちんと説明できなければなりません。

さらに、スクラム開発の性質上、POと開発メンバーは対等な立場なので、

POの説明が分からないと、「こんなんじゃ作れねーよ!」と、逆に開発メンバーから怒られるという現象が発生します。

いままでの現場では考えられませんよね。お客様の要求は絶対なので。

なので、PO側も開発メンバーにきちんと説明できるだけのスキルが求められます。

スクラムマスターは空気のような存在。

スクラムマスターは常に開発メンバーと一緒にいるのですが、

開発メンバーではないので、開発には参加しません。

開発者どうして、開発について議論するにしても、スクラムマスターは一切口出ししません。

が、開発メンバーの取り組みを常にチェックして、振り返りのネタを作成します。

俺だったら眠くなりそう。

でも、スクラムマスターは、スクラム開発の状態維持の監視と同時に、POや他部門との調整を行う、いわば窓口的な存在なので。

スクラムマスターも大変そうだなぁ。

お、言う感じで。

また気がついたことを書いていきたいと思います。

AlterLinuxのHDDをSSDに換装する。

前回。

まずはケースを開けて換装が可能かどうかを確認します。

手前がDVDドライブ、奥がHDDです。

これ、どうやって取り出せば良いねん。

でもケーブルがSATAなので、SSDも問題無く取り付けられそうです。

装着されていたメモリです。

種類が異なるのはなんでだろう?

まぁ動いているから、まあいいや。

で、早速SSDを購入してきました。およそ6000円。本体と同じ値段です。

装着。

設置するスペースがないからここに固定する。

HDDはケーブルを取り外して取り付けたままの状態です。

そして、AlterLinuxを再インストール。

感触としては、立ち上がりまでの時間が大幅に短縮されました。

この状態で環境構築をしています。

Eclipseの起動も初回は時間が掛かったものの、2回目以降はほぼ瞬間起動できるようになりました。

これは思った以上に快適。

アジャイルのよくある誤解。

アジャイルはよくウォーターフォールと比較されるのですが、

その中で、アジャイルはウォーターフォールより優れているんでしょ?

とよく言われるようです。

その誤解を解いていきたいと思います。

誤解1.アジャイルはウォーターフォールより優れている。

そんなことはないですw

アジャイルでも得意としているケースと得意じゃないケースがあります。

例えば、常にニーズが変化し、それらをプロダクトに取り込んでいかなくちゃいけない、というケースはアジャイルが得意としているケー死ですが、

逆に、作る物があらかじめ決まっていて、変更されることがないケースはアジャイルにするメリットは無く、逆にウォーターフォールが得意とするケースです。

このプロダクトがどちらのケースに当てはまるか、を役考えて開発手法を選ばなければなりません。

誤解2.ジャイルはドキュメントを作成しない。

そんなわけありませんw

ジャイルソフトウェア宣言というのがあるのですが。

https://agilemanifesto.org/iso/ja/manifesto.html

その中に、「包括的なドキュメントよりも動くソフトウェアを、」「左記のことがらに価値があることを
認めながらも、私たちは右記のことがらにより価値をおく。」

とあります。

ドキュメントなんて不要とはどこにも書いてませんよね?

アジャイルでもドキュメントは書きます。でも、それにかける工数はコーディングやテストよりも遙かに少ないです。

誤解3.アジャイル開発という言葉は存在しない。

アジャイルとはソフトウェア開発の状態を表す言葉で、開発手法ではありません。

アジャイルなソフトウェアを実現する開発手法は沢山あるのですが、代表的なのはスクラム開発です。

スクラム開発という手法を取り入れることにより、ソフトウェア開発の状態がアジャイルである、と言うことです。

ま、それを維持するためにスクラム開発とは何か、を関係者全員が理解しないといけませんし、

オイラも今の現場が初めてのスクラム開発ですが、初めて知ることが多く、なかなか面白いな、と思いました。

こちらでも少し書きましたが、

これ以外にも新たな気づきがありました。また別の機会にまとめたいと思います。