hi9a's blo9

こんにちは

システムアーキテクト試験に合格しました

令和5年度の情報処理技術試験システムアーキテクト試験、略称SAに合格しました

わーいわーい

過去の自分

僕「IPAの高度試験は絶対に受験しません。合格水準の論文を書けるわけがありませんので」

当時の上司「お前、意識低すぎるだろ。。」

受験、そして合格する数年前の話です

なぜ受けたか

試験を通して職場体験じみたことをしたかったです

SAの午後Iは読解問題です。顧客が求める仕様があって、それに応じる形で新規ないし次期システムを造る想定で、いくつか設問があります。この試験を受けたり合格のために対策すると、顧客の個別案件を担当したのと近い体験ができるのではないかと思いました

ということで、試験対策に力を入れたいのは午後Iのみでした。午前は択一式ですし、午後IIは自分の体験から論述するので何とかなる算段でした。自分に足りず鍛えるべきは午後Iだけの認識でいました

実際に試験対策してみると

笑うくらい午前の問題が解けませんでした

手応えとしては試験日の数日前まで合格水準ではない感覚でした。実際は午前I、午前IIともに一定の割合で過去問の流用がありますので、もっと前にはボーダラインに逹していたはずです。僕は過去問ではなく市販の問題集で対策していました。初めて見る問題の正答率は低く、焦っていました

午前対策が中心になり、午後Iは3年分程度の過去問しか振り返っていないかと思います

いざ受験の申し込みをしたらなるべく合格したいのが人情ですので、不合格になるのが明白な要素潰しに回ってしまいました。当初の職場体験じみたことは5件未満の訪問で終えたことになります

それでも午後Iを対策してみて

情報系の試験と言うよりは、現代文の読解問題でした。巷でよく言われているとおりですね

試験で問題文から解答を見つけて答えるということは、つまり実業務で顧客からのヒアリングから要件定義することに相当します。早とちりな解答や顧客の要望に合致しない解答だと誤答と見なされるあたり、現実の仕事に近くていい体験になるのではないでしょうか。このあたりは受験した狙いどおりだったと思います

午後IIの対策

自分の経験を論述することになっており、他者の伝聞として記述すると減点だと聞いています。ここで書き上げられなければ自分の実務経験不足であろうという考え方から、あまり対策はしませんでした

選択する大問には好みがあるでしょうが、個人的には常に大問1にした方がいいと思います。理由は採点の方針です。解答用紙に選択問題がマークされていなかった場合、最初の大問が選択されたと見なされます。自習と本番の1番の違いは解答用紙の有無だと思います。うっかりマークし忘れも十分ありえますので、安全策をとった方がいいと思います

試験当日

思い出したのを箇条書きで

  • IPAの試験会場は高校や大学であることが多く、学校見学ができて楽しいです
  • 試験の合間の時間は大学入試共通テストと似ていました。紙面の日程だけ見ると休憩時間が長めにあるように見えますが、着席のうえ問題用紙が配布及び回収される時間も含まれるので、結局自由時間は短めです
  • 昼食は持参した方がいいと思いました。間の時間をゆったり過ごせます
  • 過去の受験者の投稿にもあって知っていましたが、試験が進むごとに受験者が減っていくのはちょっとホラーでした。例年合格率20%弱の水準を見せつけられる感じでした
  • 経験上、IPAの試験では非常階段でじっと時間を潰している人がいます。今回もいました。まあ、それを発見するということは、僕が必ず非常階段で昇り降りする人ということです
  • 午後IIの終わりから30分後に焼き肉を予約していました。どうせ予約があるなら頑張ろうと思えるので、論文を諦めない策としては割と有効かもしれません
  • 解放された後の焼き肉は最高でした

おわり

合格したので満足しましたー

【Laravel】 markdown で書いてある blade を読み込みたかった

検索したらヒットしました。

すぐできる!Bladeにmarkdownが使えるディレクティブをつくる【Laravel】 https://blog.capilano-fw.com/?p=4668

composer require erusev/parsedown

ほほうー。便利なライブラリがあるのですね。

app/Providers/AppServiceProvider.php を開いて以下のコードを追加してください。

<?php
// App\Providers\AppServiceProvider::boot()

public function boot()
{
    Blade::directive('markdown', function ($expression) {

        $markdown = view(
            str_replace('\'', '', $expression)
        )->render();

        $Parsedown = new \Parsedown();
        return $Parsedown->text($markdown);

    });
}

んー。でもこれだと動的に markdown 読み込めないですねー。理想は、Controller から読み込むべき markdown ファイル名を用意して、view で受け取り・ファイル include したい。

というわけで、一部書き換えました。

<?php
// App\Providers\AppServiceProvider::boot()

    public function boot()
    {
        Blade::directive('markdown', function ($expression) {
            return "<?php echo (new \Parsedown())->text(view($expression)->render());?>";
        });
    }

もっといい方法があるかもですけど、とりあえず blade に処理を丸投げする形でよろしいでしょうか。

<?php
// なんとか.blade.php

@markdown($markdown_file_name)

もちろん、$expression として渡す変数 (ファイル名の文字列が格納されている) は、入力値として危険でないかチェックされている前提です。

最適解かは分かりませんが、やりたいことを実現はしたので、満足しました。

みんなプログラミングに躓くところは似ているんだなー、と思った話

お前は絶望的にプログラミングに向いてないから諦めて刺身にタンポポ乗せる仕事でもやってろ|古都こと|note
https://b.hatena.ne.jp/entry/s/note.mu/kotofurumiya/n/n31d401fce782

これを書いている時点では、元記事は閲覧不可。 魚拓であれば読めるみたいです。

1年振りくらいに読みましたが、やっぱりいい投稿。 とても優しいですよね、これ書いたお方。 プログラミングで躓く人の、躓くポイントを並べて、その克服案を一緒に考えてくれています。

僕もプログラミング歴はそこまで長くありませんので、始めたころの記憶はまだ残っています。 元記事で指摘している、プログラミングをやめるべき理由って、昔の自分が踏み抜いてきたことばかりです。 こうして列挙できるまでには、初学者を何人も教育してきた過去があるはずで、なんて親身なんだろうと感心してしまいました。

今だと自力で調べて環境構築からプログラミングまでいけはするので、初歩の初歩は抜けられたかなー、という気分ではいます。 でも始めたころは、元記事にあるとおり、

  • プログラム書かずに画面を睨むばかりでしたし、
  • そのくせエラーメッセージを読みませんでしたし、
  • 動作原理なんて理解していませんでしたし、
  • 自分が何が分からないのか分からず、質問もできませんでした

そんな自分がなぜ、多少なりとも進歩してきたかなと思うと、「書き続けたから」なのでしょうねー。

今となっては、自分の失敗は元記事にあるようにまとめられるのですけど、当時は何も知りませんでした。 プログラミングという分野の全体像が見えないので、自分が今どこで何をしているのかも分かりませんでした。

でも、いきなり全体像を把握できる魔法のようなことって、一般人にはあまり起こりません。 自分の足元から理解できるエリアを広めていって、地道に全体を塗り潰していくのが、面倒だけど確実なのですよね。

初学者のころの僕って、この記事でいう「向いていない人」にあたると思うのですけど、それでも多少はできるようになっているから、不思議なものですねー。

閲覧不可になってもなお、いい記事を読める状況にあるので、満足しました。

Rakuten Mobile UN-LIMIT を MNP で契約しました

いい感じです。

契約フロー

  • 楽天市場から 対応機種+Rakuten UN-LIMITプランセット を購入

  • 「正式契約手続きのご案内」メールを受信
    自分が1年無料キャンペーン対象であることも、このメールで通知された

  • 正式契約手続きする

== 2020-04-08 サービス開始 ===

  • メール「他社から乗り換え(MNP)手続きのご案内」を受信
    連絡受けたので、案内に従って、当時契約していたところから転出手続きを実施

  • メールの案内に従ってMNP予約番号を入力したら、メール「MNP予約番号不備による開通手続き中断のお知らせ」を受信
    MNP予約番号不備理由「MNP番号不一致」
    詳細「MNP予約番号に間違いがあった、または有効なMNP予約番号でなかった」
    再度同じ番号を入力すると「同じ予約番号は2回以上使えない」エラーになる

  • 3日ほど待機
    楽天側の不具合で、対応してくれるだろうと予想して放置
    というか、問い合わせても繋がらないので、信じて待機するしかない
    こちらで出来ることとして、プランB (MNP転入先を楽天でない別のところにするか、MNP予約番号の有効期限が切れたとしても楽天で進めるか) を練り始める

  • メール「開通手続きに関するお詫びとお知らせ」を受信
    メール「MNP予約番号不備による開通手続き中断のお知らせ」は不具合で、解消しておいた、との連絡
    サイトを見にいくと、たしかにステータスが次のステップに進んでいた

  • メール「製品発送完了のお知らせ」を受信

  • 製品が届く
    付属の案内に従って転出・転入手続きを実施

  • 「10〜30分で終了します」と謳われていたMNPが、1時間経過しても完了しない
    しばらく自分の電話番号が不通の期間ができる

  • 最終的にはMNP完了
    繋がらない期間は3時間程度で済んだ記憶

所見

事前に無料サポータプログラムをしていて、テストとはいえ回線の利用者がいたこともあり、回線の安定性は問題ないだろうと予想していました。

で、トラブルが起きるならサポート問い合わせだろうな、と踏んでいました。

まあ、だいたい予想どおりでして、一時はこれまでの自分の電話番号がなくなるのも覚悟しました。

とはいえ、楽天側の技術スタッフが頑張ってくれるだろうなー、と楽観的だったのと、 電話番号変わることになっても、それはそれで面白いかも、と思っていたので、 仮にサポートと音信不通のままMNP予約番号が失効されたとしても、愉快にネタ記事を書いていたことでしょう (というか、今の電話番号を大切にしているなら、MNP契約で楽天はしばらく候補外でしょうね……。どうしても保守的になるので)。

ぶじに使えるようになった今は、通話もネットも快適に使えています。 「楽天 MNP」で検索すると、いまだにトラブルに巻き込まれている方々が少なくないので、僕は運がよかったですね。 これから数ヶ月はサポートに繋りにくいままでしょうから、購入した端末が初期不良を起こさないのを祈るばかりです。 端末を壊さないように大切に扱わなければいけません。

契約した理由

固定費が抑えられるので、MNP転入してきました。

以前までは携帯 + wifiルータで、月あたりの出費が8,000円強でした。

契約後は携帯 + wifiルータ不要 (携帯のテザリングを使います) で、月あたりの出費が大きく抑えられます。 端末代は数万かかりますが、月当たりで割るとやはり特ですし、かりに回線が不安定と判明すればまたwifiルータを契約し直せばOK。 以前との出費の差はプラマイゼロになるかどうか、ですので、試した方が特と判断しました。

手続きに時間はかかりましたけど、届いた端末は使いやすいし、通話もネットも快適ですし、とても満足しました。

Python3.7で SSLError

前回同様、Windows 10で Python3.7がうまく動かない話。

ポート443で requests.get() を試みると失敗します。

import requests
requests.get(url)
Traceback (most recent call last):  
File "C:\Users\me\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 588, in urlopen    conn = self._get_conn(timeout=pool_timeout)  
File "C:\Users\me\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 248, in _get_conn    return conn or self._new_conn()  
File "C:\Users\me\Anaconda3\lib\site-packages\urllib3\connectionpool.py", line 816, in _new_conn    raise SSLError("Can't connect to HTTPS URL because the SSL "urllib3.exceptions.SSLError: Can't connect to HTTPS URL because the SSL module is not available.

解決策

同様のことで困っている人がいました。

https://stackoverflow.com/questions/54135206/requests-caused-by-sslerrorcant-connect-to-https-url-because-the-ssl-module

にあるとおり、

https://slproweb.com/products/Win32OpenSSL.html

の、Win64 OpenSSL v1.1.1d Light をインストールしたら動作するようになりました。

質問サイトに助けられて満足しました。

Python3.7だとwin32apiがimportできない?

要旨

疑問記事です。

疑問に対する回答は「不明」ですので、ご留意をば。

やりたいこと

Windows機でJupyter notebookを使う。

事象

Windows機にAnacondaをインストールしたのですが、Jupyter notebookがうまく動作しませんでした。

バージョンなど

  • Windows10
  • Anaconda3-2019.10
  • Python3.7

エラー内容

Jupyter notebookは起動できるのですが、kernel errorで動作してくれません。

File "paths.py", line 359, in win32_restrict_file_to_user
import win32api
ImportError: DLL load failed: %1 は有効な Win32 アプリケーションではありません。

Google検索・Twitter検索しましたが、いずれも空振りでした。

たぶん同じような事象を起こした方に遭遇はしました。

https://twitter.com/x0_1372/status/1187491220693622784

対処

僕ではどうにもならなかったので、Pythonのバージョンを落とすことにしました。

conda create -n py36 python=3.6

# Python3.6.9がインストールされました
activate py36

# 以下、仮想環境にて
pip install pyinstaller
conda install jupyter

import win32api 以降も正常に進みました。

本当にバージョン固有の原因かは知りたいところですが、
とりあえず、やりたいことは叶ったので、満足しました。

移動と宿泊 - PHPカンファレンス沖縄2019 その2

PHPカンファレンス沖縄2019 に参加してきました。

https://r.cacts.icu/s/t600

イベントの内容や魅力は他の記事でたくさん書かれているので (本当にいいカンファレンスでした!)、今回はやや他から外れて、現地への移動と宿泊について。

サマリ

  • 自宅からの所要時間で気にすべきは「空港まで」ではなく「空港の出発ゲートまで」
  • バス移動は www.kotsu-okinawa.org でどうにかなる

空の便の移動について

とくに、大和の都市から飛行機を使うと、早めに部屋を出なければいけません。 羽田も成田も、バス停・電車の駅に到着してからが本番で、その先の搭乗手続き・手荷物検査の列に並ぶことになり、時間がかかります。

なんならその場所に行くまでも大変です。 空港の敷地は広く、移動に時間がかかるためです。 成田では電車の駅がないターミナルがあり、移動は別ターミナルからシャトルバスを使う場合もあります。

出発ゲート着いて「あとは搭乗するだけ」になるまでは、安心できません。 時間に余裕を持って行動すべきです。

「言うまでもないだろう」ですって?  ええ。ごもっともです。 僕のように、成田第三ターミナルの行き方を電車内で知り、「間に合わないかもしれん」と震えることがないようにしましょう。

飛行機は約5ヶ月前 (2019年5月) に予約していました。参考価格は下記のとおり。

  • 東京 → 那覇 (平日) : ¥9,500 くらい
  • 那覇 → 東京 (休日) : ¥15,000 くらい

意地でも安い便を選ぶと、搭乗したときの精神衛生がよろしくない (機内が狭くて見しらぬ人との接触が増えたり、何かにつけて有料だったり、スタッフのサービスがよくなかったり) するので、そこそこ安い、程度で妥協しています。 とはいえ、安いに越したことはないので、「もう少し賢く・安く航空券を手に入れられるよ」とのアドバイスありましたら、ぜひお願いします。

バス移動について

バスマップ沖縄さんのサイトが、時刻表が充実しています。 会場へは下記の路線を使いました。 もし、今後の会場がコンベンションセンタになったとしても使える路線ですので、リンクはトップページではなく、使った路線のにしておきます。

https://r.cacts.icu/s/2TSc

どなたかSSL/TLSの営業かけていただけると幸いです。

宿泊について

グランビュー沖縄を使いました。

https://r.cacts.icu/s/2U1T

リンクを貼るつもりはなかったのですが、価格にしては満足だったので。 気になったのは、室内の椅子がチープで、安心して凭れられないくらい。

朝食は沖縄料理カバー率が高く、チャンプル・ゆし豆腐・そばなど目移りしてしまいます。 おいしかったです。カンファレンスの朝も満たされて外出できました。

周りにはコンビニ・外食はあまりありませんが、スーパが何店舗もあり、自室で宴を開催できます。 刺身、納豆のナットちゃん、何ちゃら食堂のアイスティーなど、地元の食品を懐かしがりつつ味わえました。

まとめ

楽しく遠出でき、満足しました。