調べ物した結果

現役SEが仕事と直接関係ないことを調べた結果を。

令和2年のIPA問題に挑む~安全確保支援士 PM1①~

目的

勉強のやり直し(すーぱー忘れてる)
回答例が欲しい人は回れ右です。

問1 スマートフォンを用いた決済について

とりあえずざっくり問題をよんでいきました。どうも認証まわりが胡散臭いですね。
HMACってなにかしら。とかそんな状態。ずいぶん長いこと解いてないからか午後1の問題でもつらく感じます。
ざっと問題文に目を通したら設問にうつります。

設問1-1 なりすましの手段と問題

この決済アプリは「なりすまし」を容易にさせるポインツがあります。ということで手段と問題点を答えようという設問。
なりすましといえば
中間者攻撃
cybersecurity-jp.com
とか
セッションハイジャック
cybersecurity-jp.com
とかまさしくずばりなものもありますが、今回の場合は決済に使うバーコードがよろしくありません。

決済用のバーコードは通常ログインしてからしか生成できませんが、
16桁の会員番号をそのままバーコードとして利用し、そのまま決済している。というのが問題文から読み取れます。
会員番号がそとに漏れ出したりは問題文から読み取れませんでしたが、決済用のバーコードがずっと同じ。ということになります。これはまずいですね。

ということで
手段:他者の会員番号でログインせずにバーコードを生成して利用する(29文字)
問題:決済用のバーコードが第三者で容易に復元可能なこと(24文字)
こんな感じでいかがかな。とおもう。

設問1-2 HMAC

穴埋め問題。問題文を読む限り、暗号鍵とハッシュでどうにかするかんじで。
HMAC値αとHMAC値βがおんなじであるとか。そんなことかなーと思います。
いまいち読み取れませんでしたが、QRには「会員番号、時刻、乱数、HMAC値α」が含まれているので、
「会員番号、時刻、乱数」とWEBサーバが抱えている秘密鍵KをつかってHMAC値を生成(β)したものは、
同じルールで作ったαと同じになるはず。というようなことがしたいのだろう。

www.ipa.go.jp

設問2-1 無線ルータの設定

攻撃者のサーバーにつながせるときの問題。よくあるやつ。だいたいDNSなんだけど。
今回はルータの設定を直にいじれるパティーンということで「い」のDNSプロキシ。を選択。
DNSサーバのIPアドレスを攻撃者が用意したDNSサーバにしてしまえば、あとはやりたい放題だろう。そして気付かない(正常に名前解決しているようにしかみえない)

設問2-2 証明書の問題

あきらめます。頭が回りません。

設問3-1 攻撃者にうれしいシステムの挙動。

これは問題文を読んでる時点からあやしんでいた。なにせよくあるやつ。アンチパターンに該当するんじゃないかと思うが、何か名前がついてるのだろうか。
と思ったらいい感じにまとめてくださっている方がいた
www.ipa.go.jp
まーもろに。これということで。

IPアドレスのアラート通知の仕様もまずいような気がするけど(同一のIDじゃないと異常検知できない)
Yさんの指摘として「会員登録機能」は攻撃者が悪用すると・・・と問題文中にあるので、こっちを答えるのがよいだろう。
文字数が60文字とかあれば、両方こたえてもよかったかもしれない。

以上。

「全力でC#の好きなところをお話しするので聞いてください」というので聞いてみました。

nrs-seminar.connpass.com
とても楽しそうな会なので、youtubeみてみました。本当は当日参加したかったんだけどね。
これもINPUTではあるとおもうのでOUTPUTしてきます。

ざーっと触れていった内容に対して感想とか思ったことを書いていく。

まず全体

終始なごやかな感じで。とてもよかったです。C#やってみようかな。って人は増えたんじゃないかな。
初めて触る人もざーっとみて。雰囲気をつかめる(それはいいすぎかな)そんな感じ。
とにかくタイトル通り。C#への愛が溢れる感じの内容でした。いいですね。こーゆーの。
Microsoftを信じろ。
ぼくはもともと仕事でVB.NETを使ってたから比較するような感じで覚えているんだけど、
C#ってVBと違って厳密に書かないといけないんだよね。自由度が少ない(表現幅は広いのに)
これがすごい好きなとこではある。SQLとかもそうだけど。めちゃくちゃな自由度なので。そのあたりのつらみがC#は出にくくてすごくよいな。
と思う。VBだとね。ちょっといろんなこと省略できちゃうから。そうすると省略するべきなのかどうなのかってこと悩んでしまうんだよね。
それがない。そーゆーとこが次の話にも影響してると思います。

メソッドのデフォルトオーバーライド可否

いきなり重いんだ。基底のクラス側で子クラスをコントロールできるってね。
つまり基底でちゃんと設計しないと辛い思いしたりするので。僕は主に辛い思いする方ですね。
基底の担当チームに話つけるのが面倒なんだなーこれが。

VisualStudioめっちゃ便利でっせ?

いや。ほんとね。めちゃくちゃ便利。なにがどう便利かって本編をぜひぜひというか。
めちゃくちゃ万能。まさしく統合開発環境。それがVisualStudio。
そしてWindowsForms。最高。
今でもさっと。さらっと作ろうと思うとついついWindowsFormsでプロジェクト作ってしまったりする。
(個人的にはWPFも同じようにかけるようになりたいな)
それぐらい楽。真面目にビジネスユースでアプリを作ろうと思うと辛いとこが出てきたりはするんだけど。
簡単すぎてたくさん悪魔がうまれる的なことを動画内でも言われますが。悪魔と語り合ってた私からすると本当にその通りでね。。。

NULL合体演算子

こいつに出会ったのは最近ではあったりする。とてもよい。すごく綺麗。無茶な使い方も(やればできるけど)できない。
いろんな機能はあるんだけど、便利な機能は使い方が限定的だったりするんだけど、わりと限定せずに使えたりするのね。
そうすると悪魔が生まれるんだけど。NULL合体演算子については悪魔が生まれにくい。そこが好き。

NULL許容型

便利なんだけど。便利なんだけど悪魔が生まれやすいから避けてはいるが。
好きなとこだっつってんのに「あんまり好きではない」ってのずるい。笑う。

Linq

Linqは最高なのです。最高ではあるんだけどね。
まー思うところもあるんだけど。過去の記事(主旨は別件という)でざーっと書いてた。
couraeg.hatenablog.com

どうなんだろうな。そもそもコレクションを直接つかわずにちゃんとクラス設計すればLinq書く機会って減るんじゃないかな。
とか最近はそう思います。
速度に関しては気になるレベルで書くようなことは少ないかもしれないなーと思った。
Linqは自由度高いです。メソッドチェーンでめちゃくちゃできます。その結果悪魔が生まれます。

var

最高。型推論はめちゃくちゃに最高です。メモ帳でデバッグするときに困るから明示してほしいというようなこと言われたり言われなかったり(そこは環境合わせましょう)
ただなんでもかんでも。ではなくて個人的には右辺から型が推測できる場合につかってます。あと動画中のEnumerableシリーズ。いちいち書いてらんないからね。(かけって言われた時はvarってかいてVisualStudioに認識させてそれメモってる始末だし)

型が書いてあっても、書いてなくても可読性は変わらない。ってのはちょっとどうなんじゃらほい。
という気持ちはなくもないが。まーこれvarかけるとこは型も推測できるから。明示する必要ないなーとも思いますた。
あーということは「書いてあっても、書いてなくても。。。」ってことでこの記事書いてる最中に「あ。別にいっか。全部varでいいや。」
みたいに気持ちが傾いた。

イベント構文

これは。C#の特徴だったのか・・・しらなかった。
とくに全然。まるっきり意識してなかったから気にしてなかったけど。他の言語だともしかしてものすごくめんどくさいのか?
どこまでがC#のあれなのか。

Using最強

usingは最強よ。IDisposableさえサポートしてればいいからね。vbのWithはちょっとね。デバッグが地獄になる。

Jsonのクラス定義を作ってくれる。

しらなんだー。。。なるほど。。。C#って開発環境がVisualStudioになるから、最強IDEの恩恵をもろにうけんだなぁ。

アクセス修飾子がまぁまぁ

うん。パッケージプライベートがほしくなるんだよなぁ。名前空間で制御したい。

ギルティクラス

名前がずるい。こんなん笑ってまう。拡張メソッドはほんとね。自由度が高い。つまり悪魔が生まれる。
どうしても。どうしても既存の型を変えられないときに使う。それ以外は「ギルティ」でいってる通りだと思う。最後の方に差し込まれててめっちゃ笑った。基本的にはラップした方がいいんじゃないかーな。と思ったりする。
ただ、完成前のざっと作る時はこれでいいんだよ。完成品として出すときに。あるいは出したとにずっとこれが残ってるのはまずいと思う。
リファクタリングしていけばいいんじゃないかな。使うなっていうより使えるタイミング(プロダクトの成熟度)とかが限定的かなって思う。思うだけ。
プログラムは成熟度あるからなぁ。早期に用いたりプロトタイプしたりするようなものだったりするのかなーと認識してる。

おわり。

楽しかった。何かが「好きだ」とかそーゆーのなんか感覚がわからなかったんだけど、わかった気がした。
それなら僕もC#好きかなー。好きだと思うなー。という感じ。もともと80点ぐらい好きだったんだろうけど。再認識できた感じで。よき。
よい動画ありがとうございました。


勝手にリファクタリング~Captura①~


久々に人のソースをリファクタリングする。
①というのは1回で全然できなかったことを示す。続くかわからないけど。

LICENSE

LICENSEはMITです。リンクと著作者を張っておく。

Copyright (c) 2020 Mathew Sachin

github.com

作成者には敬意を払い。作成物を公開してくれていることに感謝して作業します。

環境

OS:Windows10
IDEMicrosoft Visual Studio Community 2017 ⇒ Microsoft Visual Studio Community 2019
※ビルドできなかったからバージョンアップした。

準備

Gitから拾ってくれば基本的に完了なのだけど、環境の更新が必要だったので残す。
久しく見ず知らずのソースみてないから大分フレームワーク等おいていかれてる感。案のじょう使っている2017ComunityだとFreameworkが追いついておらず。
ということで2019Communityをぶち込んで再度ビルドトライで無事完了。なぜかテストの一部が通らないようだけどこのまますすめる。
ちゃんと調べていないが、Fakesをつかっているのでそこの問題だと思う。

4.7.2 の適用、VisualStudioの更新

gyazo.com
C# 8.0以降を使っているようなのでさらにビルドできず。下ということで、VisualStudio 2019を拾ってくる。
dotnet.microsoft.com

対象の選定

毎度のことながら全部はできないので(する必要がないところも多数あり。)

保守容易性インデックス高すぎ問題。

さーてどこリファクタリングするかなーってなったときに、いつもコードメトリクスをつかっているのだけれど
gyazo.com

と軒並み高スコア。現状、保守面で言えばリファクタリングは不要なレベルに思える。
プロジェクトレベルでは大した差がないので、もう少し掘ってみる。
gyazo.com
なんとか50台のNamespaceを見つけたので、今回はこの辺りにしようと思う。
Drawメソッドがいい具合に複雑らしい。といっても49行。だから手の入れようがないかもしれないが。
とりあえず今回はここに決まり。

リファクタリング

さーということでそろそろリファクタしていきましょう。

テストがねぇんです

ブレイクはってテスト流してみるも止まらず。プロジェクトの数に対してテストが少ないからもしやとは思ったけど、
どうやら今回手を入れる場所のテストコードはない様子。
テストかかなきゃ。。。なんでこの辺で全体像を見ていこう

Doxygenに喰わした結果がこちら。
gyazo.com
被参照がない・・・そんなぁ・・・

原因はよくわからず。VisualStudioの参照たぐっても「え?おまちがくね?」みたいな経路になって理解が追い付かず。
厳しい。
ということで参照はあきらめてメソッドの中を見ていく。

public override void Draw(IEditableFrame Editor, Func<Point, Point> PointTransform = null)
        {
            var curPos = Args.Location;

            if (PointTransform != null)
                curPos = PointTransform(curPos);

            float clickRadius = _settings.Radius;

            var d = clickRadius * 2;

            var x = curPos.X - clickRadius;
            var y = curPos.Y - clickRadius;

            var color = GetClickCircleColor();

            Editor.FillEllipse(color, new RectangleF(x, y, d, d));

            var border = _settings.BorderThickness;

            if (border > 0)
            {
                x -= border / 2f;
                y -= border / 2f;
                d += border;

                var borderColor = _settings.BorderColor;

                Editor.DrawEllipse(borderColor, border, new RectangleF(x, y, d, d));
            }

            if (Args.Clicks > 1)
            {
                var font = Editor.GetFont("Arial", 15);
                Editor.DrawString(Args.Clicks.ToString(), font, Color.Black, new RectangleF(x + 10, y + 10, d, d));
            }

            base.Draw(Editor, PointTransform);
        }

うーん。Drawとはいったもののこいつ自身は組み立てがメインに見える。しかし書く。テストを書くのだ。

voidのテスト面倒。

何かしら引数が返ってくれるほうが嬉しい。なにせメソッド実行前後の期待する動作読めないからさぁ・・・
最終的にはBase.DrawでBaseクラスを実行するので、これはなかなかにつらい。どうかけばいいのだ。

とりあえずやってることを整理してコメントだけ入れよう。改行も問題ないはずだ。

        public override void Draw(IEditableFrame Editor, Func<Point, Point> PointTransform = null)
        {
            // 楕円を書く
            var curPos = Args.Location;
            if (PointTransform != null) curPos = PointTransform(curPos);
            float clickRadius = _settings.Radius;
            var d = clickRadius * 2;
            var x = curPos.X - clickRadius;
            var y = curPos.Y - clickRadius;
            var color = GetClickCircleColor();
            Editor.FillEllipse(color, new RectangleF(x, y, d, d));

            // 枠線いるなら書く
            var border = _settings.BorderThickness;
            if (border > 0)
            {
                x -= border / 2f;
                y -= border / 2f;
                d += border;
                var borderColor = _settings.BorderColor;
                Editor.DrawEllipse(borderColor, border, new RectangleF(x, y, d, d));
            }

            // 文字を書く
            if (Args.Clicks > 1)
            {
                var font = Editor.GetFont("Arial", 15);
                Editor.DrawString(Args.Clicks.ToString(), font, Color.Black, new RectangleF(x + 10, y + 10, d, d));
            }
           
            base.Draw(Editor, PointTransform);
        }

少し解像度が上がった気がする。
前半。ArgsのLocationに対して、何かしらフォーマットをかけるにしてもクラス名から考えてマウス位置にでも円を書くのではないかと思う。
後半。ダブルクリックだろうか。わからんが、Clicksの数が2以上なら文字描画。
最後。既定のDraw処理を呼ぶ。
ということで大きく3個に分けられそうではある。xydを使いまわしてるのがちょっといやらしさを感じる。たぶんここの読み込みが肝になると思う。
ぐぬぐぬしてきたけどだいぶ見えてきたので少しテストがかけそう。塊の細部を抽出していく
とりあえずざっくり書いて、Failされることを確認。

    [Collection(nameof(Tests))]
    public class MouseClickStepTests
    {
        /* TODO 
            // 楕円を書く
            var curPos = Args.Location;
            if (PointTransform != null) curPos = PointTransform(curPos);
            float clickRadius = _settings.Radius;
            var d = clickRadius * 2;
            var x = curPos.X - clickRadius;
            var y = curPos.Y - clickRadius;
            var color = GetClickCircleColor();
            Editor.FillEllipse(color, new RectangleF(x, y, d, d));
        */
        [Fact]
        public void aaa()
        {
            Assert.True(false, "");
        }            
    }

gyazo.com
テスト実行すると無事に?エラーということでモリモリテストがかける。

楕円を書くところ。のテストをかく

もう少し詳細に行くと
①ArgsのロケーションからPositionをとる。
②TransformがあるならTransする。
③_SettingsのRadiusをつかって、描画サイズを決める。
④GetClickCircleColor()の結果で円の色を決める。
⑤上の設定でレッツトライ。
の流れ。

対象クラスがPrivateであることに気付く。AssemlyInfoがあれば無理やり公開できるのだけれども。
www.nuits.jp
こちらの通りにやったらうまく公開できたのでこれでいいと思う。

とりあえずということで、FillEllipseで受け取った中身をみて動作を確認する。Moqつかえばよい気がする。というかMoqつかえ案件(記事かいてる最中にきづいた)
テストの内容はひとまずちょっとずつ・・・ということでざっと作ってみた。

        public class _SettingsとArgsのLocationで楕円を書く
        {
            [Fact]
            public void Radiusが10の時はWidthとHeightは20になる()
            {
                var obj = new MouseClickStep(null, null, null, null);
                var actual = new FakeEditor();
                obj.Draw(actual, null);

                Assert.Equal(20, actual.Width);
                Assert.Equal(20, actual.Height);
            }
        }

    public class FakeEditor : IEditableFrame
    {
        public List<object> FillEllipseArguments;
        public void FillEllipse(Color Color, RectangleF Rectangle)
        {
            this.FillEllipseArguments = new List<object> { Color, Rectangle };
        }

んで、ざっと流すとこの調子でエラーをつぶしていけば後はごりっとテスト書いていけると思う・・・先は長そうだ。
gyazo.com


Siliverlightから乗り換えるとしたらなにがいいんだろうか


なにがいいんだろうかいったものの。。。大して結論がでるわけでもないんだけど。
いい加減考えないといけない時期になってしまったので(だいぶ遅いんだけど)

Silverlightのサポート状況

こーゆー時は公式ですね。
support.microsoft.com

Microsoft Silverlight は、2021 年 10 月 12 日でサポートが終了します。Silverlight 開発フレームワークは現在、Internet Explorer 10 および Internet Explorer 11 のみでサポートされており、Internet Explorer 10 向けのサポートは 2020 年 1 月 31 日で終了します。Chrome および Firefox のほか、Mac オペレーティングシステムを使用するブラウザー向けのサポートは終了しています。

てなもんで。いよいよサポート終了です。

どう移行しようか。

上のページの下のほうにQAがありました。

Silverlight からアプリケーションを移行する場合に推奨されるテクノロジ/開発フレームワークを教えてください。

Silverlight からアプリケーションを移行するには、さまざまなオプションがあります。
移行するアプリケーションの要件を評価し、そのアプリケーションに最も適したテクノロジを決定するようお勧めします。

ブラウザーに依存していないアプリケーションを Windows デスクトップ アプリケーションに移行する場合は、.NET Core の UWP または WPF にアプリケーションを移行するようお勧めします。

アプリケーションが Web ベースの場合は、.NET Silverlight コードの再利用が可能な Blazor の検討をお勧めします。
Blazor を使用すると、JavaScript ではなく C# を使用して、対話型の Web UI を構築できます。Blazor アプリは、C#、HTML、CSS を使用して実装された再利用可能な Web UI コンポーネントで構成されます。クライアント コードとサーバー コードは C# で記述されているため、コードとライブラリの共有が可能です。

つーことで

実行環境 移行先
非ブラウザ依存 .Net Core UWP(or WPF)
ブラウザ依存 Blazor

こんな感じでござんすかね。前置きで「移行するアプリケーションの要件を評価し、そのアプリケーションに最も適したテクノロジを決定するようお勧めします」
とあるので、もちろん他も検討がいるのかなーと思う。はてさて。

Blazor・・・はて?

ざっくりググってみると、どこどこでてきますね。
wpteq.org
Siliverlightのソリューションファイルから直接移行できないかちょこっとやってみます。
gyazo.com
gyazo.com
適当にプロジェクトをつくって、サクサクのサクーでできるのがいいとこっすね。
できあがったSlnをためしに2019で読み込んでみる。(Siliverlight自体は2015までしかサポートされていない)
gyazo.com
適当にポチポチ押したのでインストールが走りました。移行がいるとのことで。どこかポチポチしたらいけないか。
gyazo.com
プロジェクト再読
gyazo.com
んで。ここ。やはり2015つかってくだしぃ。となる。
docs.microsoft.com
うまくいかないっぽい。ぽいので次はBlazorの方に読み込む形でやってみます。とりあえず新規に作成
gyazo.com
えぇ・・・これどっちなんじゃ・・・とりあえず上のほうを選ぶ
gyazo.com
できたプロジェクトをながめる。どこかで見たような(.Net COREだったか・・・)
gyazo.com
XAMLのところはやっぱり書き換えがいりそうですね。さいしょからHTML+・・・とかってかいてるからそりゃそうかもしれない。

実行環境 移行先 View部分
非ブラウザ依存 .Net Core UWP(or WPF) Xaml(たしか)
ブラウザ依存 Blazor Razor

で移行元のViewの依存度も考えないとまずそうですね。

生涯学習の理論―新たなパースペクティブ 第3章の感想


こんばんみ。たまには読書の感想でもと思って書く。ほぼ解釈ふくめて自分用のメモ

読んだ本

これでござい。これの3章のところがいい感じに刺さるというか、記事にできそうだったからここにした。
https://www.amazon.co.jp/dp/4571101562/ref=cm_sw_r_tw_dp_x_pC0AFbV9CJFMJ @amazonJP
※まだ読んでる途中なんだ。

であった経緯

どの記事だったか忘れてしまったが適当巡回している
www.igaku-shoin.co.jp
に「生涯学習」なるフレーズを目にして「学習の学習」ってのも当たり前のように体系化してたりするんだなー
とおもって適当にグーグル先生で検索して簡単そうな本ということでゲットした。

3章のぽいんと

キー・コンピテンシー。これに尽きる。つきるんだけどこれがとてもよいと思った。
いわゆる「読み・書き・計算」とは異なる能力で人生を成功に導く重要な能力のセット。ということ
ここだけ聞くと胡散臭いんだけど。
そのまま抜粋すると

特定の問題状況に対応するため、知識や技能,態度を含む多様な資源を活用し、動員して、複雑なニーズにこたえる力
※引用元:生涯学習の理論―新たなパースペクティブ P55より抜粋

ばっちりと仕事の内容にささるわけです。SEなんて問題解決がメインなんでね。

3つの力

キー・コンピテンシーの核となるものは「考える力」だそうで。どうやらこの分野は適当に切り抜くと怪しげになる傾向があるように思える。
考える力を中心に3つの分類がある(3つの分類を総合して「考える力」とするわけだ。と解釈)

・相互作用的に道具を用いる
・異質な集団で交流する
・自律的に活動する
の3つ。よくわかるんだかよくわからないんだか。本の中ではこの3つが「必要な理由」及び「具体的な能力」について書かれている。

相互作用的に道具を用いる

ここでの「道具」は対話のための。とついてくる。相互作用的というとちょっとふわっとするんだけど。
ようは読み書きも「対話」のためのツールだしそれを自覚して使えること。知識や情報、技術なんかも「対話」の道具として取り入れて使えること。
伝達もそうだけど情報を正しく整理する(情報源の信頼性とか。そういったことが判断できる)とかそういう話。なるほど合点「考える力」だね。という感じ。
雑にいうとコミュニケーション力。とかいう奴になると思う。なるとおもうけどあの言葉は範囲が広すぎる。本書ではもう少し具体的にこーゆうことができること。ってのが書いてあってよいな。と思った。
けど最終的な解釈がコミュニケーション力になってしまってこの記事を書いてる最中に結びついてしまったので、もう他の人と会話をするときに「コミュニケーション」がさす言葉が僕と他の人で食い違ってしまうと思う。

異質な集団で交流する

まぁ、これに関してはそのままといえばそのままで。相手の立場に立ったものの考え方や共感力なんかを発揮して他社とのかかわりからも学習できるようになるといいね。
という風に解釈した。個人的に具体例に挙がっている「基本方針に従う力」が若干あやういな。と反省したりもした。まーあとは争いをしずめたり、いい感じに落としどころを見つけたりとか。
もしかしたらこれもコミュニケーション力なんじゃ・・・万能すぎてあぶないですね。

自律的に活動する

自分のやるべきこと。を客観的に評価してうごけること。というように解釈している。成人学習については学習を通したアイデンティティの確立。というのも目的にあるので、まーそーゆーこと。
先の二つに比べると僕はこの力が弱い傾向にあるなと思う。自己認識やビジョンが甘いな。といったところ。

計測とかできないの?

PIAACなるものがある。あるにはあるし、実際に使われているらしいが本書が2011年発刊ということもあり今現在の主流ちょっとわからない。
またどうやってこの「考える力」を強化するのかは本書ではPIAACの結果を受けてから考えるっぽいことを書いてあるのでなし。最新の情報を漁るとあるかもしれない。

さいごに

キー・コンピテンシーでうたってる

特定の問題状況に対応するため、知識や技能,態度を含む多様な資源を活用し、動員して、複雑なニーズにこたえる力
※引用元:生涯学習の理論―新たなパースペクティブ P55より抜粋

はSEの必須技能というか。もちろん他の技能もいるけどこのベースの上に立っていると思う。僕がパッケージ開発ばっかりやってるからというのも大いにあると思うけど。
この辺は何となくでやっていたけど、ある程度方向というか指針があってよいと思った。自己判断および周りのプロファイルにも使えそうな内容で読んでよかったなぁ。と感じている。
とりあえず最後まで読んでみようと思う。キー・コンピテンシーはもうちょっと掘り下げてみてみたいなーなど。

あとは僕はこの2020年にこーゆー考え方をしったのだけど。みんなこれ知ってて動いてたのか・・・?というなんか知っといて当然間のある内容でもあったので、
ようやくスタートというか追いつけたというか2011年にもどったというか。というところでおわり。

JupyterLab初めてつかった


WEB+DB PRESSにPythonを使ったデータの可視化が乗ってたので
COVID−19のCSVの可視化のところを本の通りに動かしてみた

環境

古のMacBookAir

読んでもそのまま動かなかったところ

SSLCertVerificationError でうごかねぇ。

ほぼ。最初。まるっきり最初でインターネッツからCSVをダウンロードするところでつまづいた。
最初に答え
qiita.com
まぁ、ここの通り。Python3.8.5だったので、そこだけ合わせた。

Pythonをインストールした時に気づくべきだったんだけど、証明書の問題で10分ほどはまった。
JupyterLabも初めて触るものだから原因の切り分けに苦労したけど、割と綺麗に切り分けできたとおもう。10分程度のはまり方で済んだともいえる。
そこを褒めてあげたいので思考の流れとしては
SSL?あーん?Jupyterだからかな。。。とりあえず切り分けよ。」

VSCODE で同じソースを流してみる。同じエラーがでる」

「同じエラーということはJupyterLabが原因ではなさそう。ということはPythonでよくあるエラーだろうか。。。」

Mac Python SSLCertVerificationError」でググる

「あ。それっぽい記事ある。これやろ。ぶちこも」
という流れ。ライブラリの問題なのか端末の問題なのか環境の問題なのか。SSLってのが微妙に面倒だったけどうまくいってよかった。

年代の調整

年代がCSVに文字列で入ってたりして平均をとるには適さない状態になっている。
本書にそって、書いてあるとおり多少乱暴でも平均を取れるように調整してい場所でイレギュラーデータが増えていた。
本書の方は

df1['年代'] = df1['年代'].apply(lambda x: x.replace('0-10','1'))
df1['年代'] = df1['年代'].apply(lambda x: x.replace('不明','50'))

0−10という範囲と、年齢不詳を平均年齢の50に置き換えている。
この後intにキャストするがそこでエラーになった。前述の通りイレギュラーデータが増えていた。

df1['年代'] = df1['年代'].apply(lambda x: x.replace('90以上','90'))
df1['年代'] = df1['年代'].apply(lambda x: x.replace('100歳以上','100'))

エラー内容をみて上のように高齢の条件も追加してやった。「歳」がついてたりついてなかったりするところがなんとも生データらしいなぁと思う。
今後もイレギュラーが増える可能性もあるので、強制的にキャストするかエラー処理は考えた方がいいかもしれない。

感想とか

JupyterLabとても便利だった(語彙力)
Pythonのソースは少ない記述で異様にすぐ完成するからビビるんだけど、コードの実行結果をちょこちょこ見たい時にPrintデバッグが捗る捗る。
VSCODE等つかえばもちろんできなくもないんだけど、ざざざっとかいて結果流しながらコードいじれるのはすごくよい。
SQLなんかも似たようなデバッグをよくするんだけど(服問い合わせ部分をドラッグして結果見たり)あれと同じような感じ。というかSQLServerとかも似たように動いてくれないだろうか(書いてる側からDBアクセスされても困るっちゃ困るけどよー)

最後に筆者のGitHubソースコードでもForkしてちょこっと眺めて終わる。本誌に書いてるファイル名とかと微妙にちがってるからそのままじゃ動かないんだけど、まー想定読者的にはその程度なおすでしょう。といった感じ

AWS DVAとSAAにリベンジ果たしてきた

久々に記事を書くような気がします。しばらく放置しておいた言い訳ができて
とてもうれしいです。はい。

ということで、掲題の件。
AWS Certified Developer - Associate
AWS Certified Solutions Architect - Associate
の2試験まとめて合格できたから勉強方法とかその辺を書くよ

目次

とりあえず結果

まーこれを言いたくて書くのでね。
SAA
gyazo.com
gyazo.com
DVA
gyazo.com
gyazo.com
ということで無事合格。SAAはだいぶギリギリでしたが合格は合格。スコア評価見る限るは
満遍なく理解していると判断して良さそうですね。やったぜ!

AWSとの関わり具合

業務ではまったくつかっておりまっせん。
AWSがどーのってやりだしたのは2018年の夏頃だったような気がする。過去のブログ見る限りおそらく。
本格的にちょいちょいで勉強しだしたのが下に参加してからですね。
【4/6(土)岡山】AWS最新技術の祭典Developers.IO 2019 at 岡山城を開催します! | Developers.IO

戦績みるかぎり、2019年の6月あたりから頑張っているご様子です。一回落ちないと気が済まないんでしょうね。
DVAに関しては3回目です。
gyazo.com

どうやって勉強した?

ということで業務では全然つかってないので、自力で頑張るしかなかったですが、大きく3本で勉強してました。
1つ目ですが、とりあえずBlackBelt
サービス別資料 | AWS クラウドサービス活用資料集
に上がっているyouTube動画をだらだら見てました。
マウンテンクライマーやりながらスマフォで見てることが多かったです。マウンテンクライマーをやるとそのまま
休憩が必要になるのでゴロゴロしながらって感じですね。スマフォ万歳です。

2つ目は社内のメンバーに毎週なんかAWSのことを話す勉強会を主催してやってました。
とりあえず毎週30分ぐらいは話すネタが必要なので上の動画を詰めたり試しに触ってみた感想とか自分なりのまとめとか出してました。
今回結構自分で喋った内容が試験に出てきた手応えもあったので、やっててよかったなぁと思います。

3つ目は最後の2週間ぐらいはUdemyの下の問題集なんかといてました。
https://www.udemy.com/share/101OzFAEIdeFlaQ3oB/

業務で使ってない関係もあって「とるだけ資格」にしてしまうのも嫌だったので問題集的なものを使うのは避けてたんですが「とりあえずとっちまうか。。。」みたいな思考に流れたのもあってつかってました。
ここでわからない単語とかを開発者ガイドみたり、BlackBeltを見返したりで詰め込みました。

とーたる1ヶ月ぐらい。勉強会はやれない週もありましたが半年ぐらいやってたと思います。

つぎどうしようかな。

どうせなら全制覇行きたいのでSysOpsあたりを攻めようかとおもってます。
ただ個人的にはセキュリティが全分野どうせ必要だし、そっちのスペシャリストのほうを詰めるのもいいなーなんて思ってる次第です。

やってみて課題とか

テスト終わってすぐ結果がでるんですけど、正直ひやひやものでした。DVAも900点近くいってますけど感触的には「あーギリギリ、ギリギリだよ頼む。。。(チラ」
みたいな祈りの所作を経て合格しました。「AWSさんならきっとこんなノリ。というかこのサービスはこうのほうが私がうれしい!」みたいな選択も多々ありもっと勉強しないとなーと思いました。
(会社からも補助金がでるようだし。じゃぁ業務に生かさなきゃとかその辺は別の話ですね)
あと、社内の勉強会の効果をうまいこと実感できてよかったですが、できれば聞いてくれているメンバーもうまいこと質問とかこっちの意図してない範囲がでてくると相互作用でてきていい感じになりそうなので他のメンバーへの伝達も続けていきたいかなーと思います。

以上。うかってよかった。