気ままなタンス*プログラミングなどのノートブック

プログラミングやRPGツクール、DTM、VOCALOIDについてのんびり書きます。

【体験記】2017年秋の情報処理安全確保支援士試験に合格しました。

タイトルのとおり、2017年秋の情報処理安全確保支援士試験に2回目の受験で合格することができました。 (1回目は2013年秋に情報セキュリティスペシャリスト試験を受験し不合格)

トラウマになっていた試験

情報処理技術者試験との出会いは学生時代で、 基本情報技術者応用情報技術者はなんとか取得することができました。

しかしその後に受けた試験(主にDBスペシャリストとSCスペシャリスト)は不合格が続き・・・ 自分の中では情報処理技術者試験がトラウマになっていました。 (長期間勉強したのに、結果が伴わないことへの絶望と無気力感。)

何度かの失敗と挫折を経てようやく今回、いわゆる高度情報処理技術者試験 (共通キャリア・スキルフレームワークのレベル4に該当するもの)に 初めて合格できたということで、感極まって少し涙が出ました。

試験から2ヶ月間のモヤモヤした日々

試験直後は、特に「午後2の記述問題」で、手応えが感じられませんでした。 解答欄には一通り記入できたものの、出題者の求めている解答を導き出せたかどうかは見当もつきませんでした。

というのも、今まで受験したDBスペシャリストやSCスペシャリストは午後1の時点で合格ラインに及ばず終いで、午後2が採点された経験がなく*1、点数がもらえる解答がどんなものなのか、わかりませんでした。

試験のことは忘れようという思考が頭の中を巡り、逆に忘れることができないというよくわからない負のスパイラルに陥っていました。

そして、合格発表日当日を迎えて、蓋をあけてみると・・・無事に合格
頑張って勉強してよかったと心から思いました。

得点としては、午後1よりも午後2の方が高かったです。
f:id:rinne_grid2_1:20171222020047j:plain (ギリギリな感じはあります)

私としては、午後2よりも午後1の方が点数が高いと予想していたため、 予想外の結果に少し驚きました。

選択した問題については、以下のとおりとなります。
・午後1: 問1, 問2
・午後2: 問1

今思えば、午後1の方が点数が高いと予想(錯覚)したのは、 おそらく問2のテーマが脅威としてよく知られているSQLインジェクションに関する問題であり、 スムーズに解答が記述できたからだと思います。

PreparedStatementへの対応など、定番(?)で解答を導きやすかった印象があります(このブログ記事からもわかるように私は論述や説明が苦手です。。)

点数を落としてしまった箇所は、おそらく問1の記述問題だと考えています。

学習資料について

話は変わるのですが、次の試験につなげるためにも、どのような学習を行ったのかを備忘として残しておこうと思います。

利用した書籍

[1-1] 絶対わかる情報処理安全確保支援士 2017年秋版

[1-2] 絶対わかる情報処理安全確保支援士 2017年春版

[1-3] 絶対わかるセスペ28春 2016年秋版

→絶対にわかるシリーズは解説がかなり丁寧でした。試験1回分を丁寧に解説してくれていて、プラスαの知識も取得できたように思います。 1回終わるごとに、前回の分も欲しくなり・・・その前という形で購入していき、非常に役立ちました。

[2] 情報処理教科書 情報処理安全確保支援士 2017年版

→分厚い本で、700ページ以上あります。 通勤の際に利用しました。(詳細は後述します)

[3] 情報セキュリティスペシャリスト「専門知識+午後問題」の重点対策〈2013〉

→2013年秋のSCスペシャリスト対策のために購入した本です。長い間本棚に眠っていたものを取り出してきました。 重点対策というタイトルどおりだと思いました。 技術テーマごとに章が分かれており、 インプット(知識整理)とアウトプット(過去問題解答)という形で 学習に臨むことができました。ただ、解説は図が全くなく、文字ばかりで眠気との戦いになることもありました。 (最新の本についてはわかりません)

[4]マスタリングTCP/IP 情報セキュリティ編

→2013年秋のSCスペシャリスト対策のために購入した本です。購入当時は有効に活用できませんでしたが・・・今回の学習では活躍しました。

[5] 情報セキュリティ白書2017

昨今のセキュリティについて、各種情報がまとまっています。 実際に起きたインシデントについて概要が理解できたように思います。

学習に利用したIPA公開資料

[6] SSL/TLS暗号設定ガイドライン www.ipa.go.jpHTTPSに関する概要や基準、鍵パラメータやHSTS等の、実際の設定例が掲載されています。

[7] 安全なウェブサイトの作り方 www.ipa.go.jpSQLインジェクションCSRFXSSBOF等、 脆弱性の概要と根本的な対策について記載されています。

利用したWebサイト

[8] 電子政府推奨暗号リスト(CRYPTEC暗号リスト)

CRYPTREC | CRYPTREC暗号リスト(電子政府推奨暗号リスト)
→午後2の選択問題で出てきそうな気がした(過去に確か出題されていた?)ので一応見ておきました。

[9] JVN iPedia(脆弱性対策情報データベース)

JVN iPedia
→実際に見つかった脆弱性情報が公開されているサイトで、 気が向いた時に眺めていました。

学習時間について

平日の話

  • 通勤時間

電車内で[2]情報処理教科書 情報処理安全確保支援士の本を読み、ノートにメモをとっていました。
ページ数が膨大(700ページ程度)なので、挫折しないためにも興味のある分野から読み進めました。 (セキュアプログラミング、セキュアプロトコルやネットワークに関する技術、証明書等) (抽象的で難しそうな言葉が大量に出て来る分野(監査や組織における情報セキュリティ)は後回しに。。)

  • 昼休み

[6] SSL/TLS暗号設定ガイドラインのPDF文書をとりあえず開くクセをつけました。 (開いただけで、読まずに終わることもあったのですが・・・)

  • 帰宅後

試験1ヶ月前はほぼ毎日、午後問題を解きました。 ちょうどその時期は、プロジェクトが炎上繁忙期でわりと、22時退社、23時帰宅なんてことが多かったので、 特に午後2問題(120分)を解くのに苦労しました。

休日の話

昼過ぎから、19時頃までカフェで「[1-1]〜[1-3] 絶対わかるシリーズ」の問題を解き、 解説を読みながら知識をインプットしました。(カフェ作業が想像以上に集中できることに衝撃を受けました。今後も活用したいです)

また、問題で出てきた技術的要素等を調べるために[2]情報処理教科書 情報処理安全確保支援士や[4]マスタリングTCP/IP 情報セキュリティ編を、 辞書代わりにしていました。

意識改革の話

練習問題を解答し、解説を読み進める際に、 「間違っていない」けど「正解かといわれると微妙」な解答になっていることが幾度となくありました。 なぜそんなことになっていたかというと、出題者の文脈や問題の意図を意識できていなかった*2からです。

そこで何が問われているのかを、設問ごとに熟考するように意識改革を行いました。

さらに、以前の練習問題だと、「だいたいあってる」で正解にしていた答案についても、 厳しく不正解とするようにしました。

また、設問の文脈から外れない解答ができるようになりたくて、 ある程度の回数分、問題を解き終えたら、下記の内容を表形式にして一覧化して確認できるようにしました。

  • 設問内容
  • 解答例
  • 自分なりの分析、関係する知識等

一覧資料の一部 f:id:rinne_grid2_1:20171222010116p:plain

最後に

情報処理安全確保支援士の登録有無ですが、私は登録を考えています。
維持にかかる費用は3年で15万とのことでした。月額でおおよそ4200円。。 結構な費用がかかるため、苦しいところですが・・・

コストをかけることで惰性による維持ではなく、 スキル向上の明確な目的を持って取り組むことができそうです。

今の職場での役割として、情報セキュリティに関する業務には関わっていないため 能動的に学習に取り組むためには、むしろコストがかかった方が、学習意欲も高まり、 自分自身を追い込む(?)ことができるのではないかと思っています。

*1:高度情報処理技術者試験の問題種別には午前1、午前2、午後1、午後2の4つがあります。 午前1、午前2は4択問題。午後1、午後2は解答を記述する形式です。午前1から採点され、合格ラインに及ばない場合はそれ以降の答案は採点されません。

*2:そのことに気づくことができたのは、 「職場でのとあるイベント」の所為おかげだったのですが、それについては別の機会に記述します。

【備忘録】Windowsが突然フリーズするようになった場合の対応方法(主にCrucialのSSD環境)

タイトルのとおり、突然Windowsでフリーズが発生するようになり、困っていました。 特にメモリが故障しているわけではなく、SATAケーブル系も問題ないという状況で 色々と調査し対応を行ったので、備忘録として記載いたします。

2014年12月頃、ハードディスクからSSD(Crucial製)への換装を行いました。 rinnegrid.hatenablog.com

それ以降、Windows10へのアップデート等を経て問題なく使えていたのですが… 2週間ほど前から、突然頻繁にフリーズが発生するようになりました。

具体的な症状

  • 起動して一定時間経過すると、突然フリーズする
    • スタートメニューやデスクトップ、各アプリがクリックできない
    • Ctrl + Alt + Deleteを押しても、タスクマネージャが開かない(強制終了するしかない)
  • 強制終了&起動後、イベントビューアを確認しても、特にエラー・警告は発生していない。

問題の原因

SSDファームウェアが最新状態でない場合、このような現象が発生するようです。

下記のURLを参照すると、同じような症状の方が解決されたとのことで書き込みをされていました。

answers.microsoft.com

もしcrucial製のSSDである場合には 稼動開始から5184時間経過するとSSDファームウェアが 悪さを引き起こす「5184時間問題」である可能性が高いです。

SSDの使用時間をCrystalDiskInfoで調べてみると、すでに大幅に超過していました。

(※画像はファームウェア更新後に取得したものなので、すでにMU02になっています) f:id:rinne_grid2_1:20170708132927p:plain

対応内容

[1] Crucialのサポートページから、 自分の持っているSSDのリンクを見つけ、クリックしCrucial Storage Executiveをダウンロード

f:id:rinne_grid2_1:20170708133409p:plain

(私はWindows10 Proの64bitを利用しているので、「download-64bit」を選択しました)

[2] Crucial Storage Executiveのインストー

[3] Crucial Storage Executiveの起動(アプリケーションが開くまで少し時間がかかります)

[4] 左側のメニューより、ファームウェアの更新を選択

[5] ファームウェアのライブ更新の実行にチェックをつけ、「ファームウェア更新をクリック」

※チェックをつけない場合は、再起動後にファームウェアの更新処理が始まることになります。 しかし、私の環境だと、「Booting the kernel」というメッセージが表示されて以降、全く処理が進まないような状態になりました。 5のように、ライブ更新を実施すると、正常に更新ができました。

[6] ファームウェアの更新完了を待つ(1分もかかりませんでした)

私はこの後、念のため再起動しました

対応後

まだ対応して2時間程度しか経っていませんが、今のところはフリーズは起きていません。 これで集中して作業ができそうです。

何か問題が発生したら追記しようと思います。

その他

ファームウェアの更新には下記2つの方法がある。

  • アプリケーション(Crucial Storage Executive)を利用し更新
  • 更新用のisoイメージをCD/DVDに書き込んでからブートし更新
    • isoイメージにはLinuxが入っている模様(ISOLINUX)

まず、2点目の方法での更新を試みたものの「Booting the kernel」の表示以降 全く進まない状況になってしまった。

書き込み済みのCDをVirtualBox光学ドライブで指定し、 読み込んで実行したところ、一瞬で次の画面に移動することができた。(Micron Storage Executive等が表示されている画面)

なぜMU02のファームウェアのisolinuxが、自分の環境(物理)だとがうまくカーネルを見つけられなかったのか。 また、仮想環境だと(おそらく)適切に動いたのかは不明。

…と書いている途中で、BIOSの問題っぽい気がしてきた。 「APIC interrupt routing」をEnableにしなければいけないといった記事を見つけた。

http://otn.oracle.co.jp/forum/thread.jspa?messageID=35023906

【備忘録】Ubuntu16.04にCrowi(wiki)をインストールして楽しむ

以前Qiitaの記事でお見かけした素敵なWikiアプリ「crowi」。

デザインがシンプルですごく好きなので、自分でも試しにインストール・利用してみようと 思ったのが少し前のこと(2017/05/25)。

最近Surface Pro3でUbuntu16.04 Desktopをデュアルブートして遊んだり、 VirtualBoxに入れていじっていたので、 とりあえずUbuntuにCrowiをインストールしました。

本記事では、対応内容を備忘録として記述します。

前提

  • Ubuntu16.04を利用
  • Linuxユーザに関する部分は「main」と記載

nvmのインストー

$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
$ export NVM_DIR="$HOME/.nvm"
$ [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm

nvmでNode.jsをインストー

# ltsオプションでLTSのみ表示
$ nvm ls-remote --lts
# 2017/06/09時点では、v6.11.0がLTSの最新バージョン
# --> v6.11.0   (Latest LTS: Boron)
$ nvm install v6.11.0
$ nvm use v6.11.0
$ which node
# 下記のバイナリが利用される
# --> /home/main/.nvm/versions/node/v6.11.0/bin/node

MongoDBのインストール(Ubuntu16.04)

公開鍵のインポート

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

MongoDB用のリストファイルを作成

$ echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

パッケージDBをリロード

$ sudo apt-get update

MongoDBのインストー

$ sudo apt-get install -y mongodb-org

MongoDBサービスの起動

$ sudo service mongod start

デフォルトのポート番号は 27017

ポートの確認

  • mongod.confから確認
$ cat /etc/mongod.conf | grep port
# --> port: 27017と表示される
  • lsofコマンドで確認
$ sudo lsof -i | grep mongod
# -->右端にlocalhost:27017 と表示される

mongoコマンドの実行

$ mongo
# --> インタラクティブシェルが起動すればOK

mongodbの自動起動設定

$ sudo systemctl enable mongod

crowiのダウンロード

  • masterブランチは安定版ではないのコントリビュータ以外は利用しないようにとのこと。
  • 開発ブログ「Crowi Book」の情報を元に、現時点(2017/06/09)での最新版である1.6.2を利用する。
$ git clone -b v1.6.2 https://github.com/crowi/crowi/

crowiのインストー

$ cd ./crowi
$ npm install

crowiの実行

  • PASSWORD_SEEDはパスワードジェネレータから利用されるらしい
  • 最初のユーザを作成してからPASSWORD_SEEDを変えると、ログイン不可となるらしい
$ PASSWORD_SEED=9a3e2d798522fe51cc4145eba6b44e86 MONGO_URI=mongodb://localhost:27017 npm start

crowiアプリのページにアクセス

localhost:3000

  • セットアップページ

やったー!

f:id:rinne_grid2_1:20170609014006p:plain

  • ページ作成用の画面

f:id:rinne_grid2_1:20170609014015p:plain

サーバー起動時にcrowiアプリが使えるようにする

foreverをインストー

$ npm install -g forever

foreverを利用したCrowiの起動コマンドを作成し実行

  • mainというユーザを利用した場合
  • forever start
$ sudo -u main /home/main/.nvm/versions/node/v6.11.0/bin/node \
/home/main/.nvm/versions/node/v6.11.0/bin/forever start -p /var/run/forever \
--pidfile /var/run/node-app-crowi.pid -l /home/main/crowi-app.log -a \
-d /home/main/crowi/crowi/app.js

crowiアプリのページにアクセス

localhost:3000

foreverでCrowiアプリを停止

  • forever stop
$ sudo -u main /home/main/.nvm/versions/node/v6.11.0/bin/node \
/home/main/.nvm/versions/node/v6.11.0/bin/forever stop -p /var/run/forever \
--pidfile /var/run/node-app-crowi.pid -l /home/main/crowi-app.log -a \
-d /home/main/crowi/crowi/app.js

/etc/rc.localにCrowiアプリを起動するコマンドを記入する

  • exit 0の少し上に追加する
$ sudo vim /etc/rc.local
/home/main/.nvm/versions/node/v6.11.0/bin/node \
/home/main/.nvm/versions/node/v6.11.0/bin/forever start -p /var/run/forever \
--pidfile /var/run/node-app-crowi.pid -l /home/main/crowi-app.log -a \
-d /home/main/crowi/crowi/app.js

参考記事

これから、Crowiで色々と遊んでみようと思います。

【ツクールMV】ゲームの機能作成時によく利用するソースコード(備忘録)

久しぶりの記事となります。

タイトルのとおり、RPGツクールMVのゲーム制作で JavaScriptを用いて画面やミニゲーム等、 色んな機能を作る時に利用しているソースコードを備忘録として記述します。

前提

  • ゲーム起動中に、F8で表示されるDeveloper Toolの「Console」を利用

操作対象

f:id:rinne_grid2_1:20170604231135p:plain

  • イベントの座標
    • X:10
    • Y:9
  • イベントのID
    • 10

マップ上のイベントを取得する

$gameMap.eventsXy(x, y)

グローバル変数「$gameMap」には現在主人公が存在するマップ情報が 設定されています。

各イベント情報を取得し、 キャラクターグラフィックの変更や向きの変更、その他諸々が確認できます。

利用例

  • キャラクターを時計回りに90度回転させる。
$gameMap.eventsXy(10,9)[0].turnRight90()
  • 実行前

f:id:rinne_grid2_1:20170604231151p:plain

  • 実行後

f:id:rinne_grid2_1:20170604231210p:plain

マップ上のキャラクターを取得し、拡大率を変更する

SceneManager._scene._spriteset._characterSprites[id-1].scale.x = 3.0;
SceneManager._scene._spriteset._characterSprites[id-1].scale.y = 3.0;

(アンダースコア_がついたプロパティは暗黙的にプライベートなものを示すはずなので 外部から変更するものじゃありませんが…Consoleからの実行で、デバッグ的な意味合いが強いのでここでは良しとします。)

SceneManager._sceneには、現在のシーン情報が格納されています。 マップ上にいれば、Scene_Map、 メニューを開いていれば、Scene_Menu、 さらにアイテムメニューを開けばScene_Itemとなっています。

そのシーンで利用されているスプライト(タイルやキャラクターの表示情報)は、 SceneManager._scene._spritesetにまとめられています。

さらにオブジェクトをたどると… SceneManager._scene._spriteset._characterSpritesには、 該当シーンに存在するキャラクターに関係するスプライト情報が 配列として管理されています。 この配列に対し、イベントID - 1した値を添え字として参照すれば 操作したいキャラクターを取得することができるのです。 (あくまでもデバッグ目的で)

利用例

SceneManager._scene._spriteset._characterSprites[10-1].scale.x = 3.0
SceneManager._scene._spriteset._characterSprites[10-1].scale.y = 3.0
  • 実行前

f:id:rinne_grid2_1:20170604231244p:plain

  • 実行後

f:id:rinne_grid2_1:20170604231453p:plain

無駄にでかい

主人公の情報を取得する

$gamePlayer

利用例

  • 主人公のキャラクターグラフィックを変更する
$gamePlayer._characterName = "Actor1"
  • 実行前

f:id:rinne_grid2_1:20170604231916p:plain

  • 実行後

f:id:rinne_grid2_1:20170604232020p:plain

キャラクターにアニメーションを表示する

$gamePlayer._animationId = animationId

利用例

// 20: 爪/雷
$gamePlayer._animationId = 20
$gameMap.eventsXy(10,9)[0]._animationId = 20
  • 実行イメージ

f:id:rinne_grid2_1:20170604234304p:plain

キャラクターにフキダシを表示する

吹き出しを出すキャラクターを動的に変える場合に重宝します。

var itpr = new Game_Interpreter();
itpr._params = [eventId, balloonId, waitTrue];
itpr._mapId = $gameMap.mapId();
itpr.command213();

利用例

var itpr = new Game_Interpreter();
itpr._params = [10, 4, true]; // イベントID(10), 吹き出しの種類(ハート:4), 終了まで待つか(true:待つ)
itpr._mapId = $gameMap.mapId();
itpr.command213();
  • 実行イメージ

f:id:rinne_grid2_1:20170604233640p:plain

キャラクターの位置(スクリーン上の座標)を取得する

$gamePlayer.screenX()
$gamePlayer.screenY()

キャラクターの移動タイプを変更する

$gameMap.eventsXy(x,y)[ID-1]._moveType = moveTypeCd

利用例

$gameMap.eventsXy(10,9)[0]._moveType = 2 // 主人公に近寄る
  • 実行イメージ

f:id:rinne_grid2_1:20170605000637p:plain

色々なものがついてきてしまっていますね。 これもフキダシと同様、動的にキャラクターの移動タイプを変更したい時に重宝します。

他にも思い出した時に記述しようと思います。

【ツクールMV】自作ゲーム「Birth World」アップロード報告及びヒント(「ぼっち」からリア充になれるか?)

久々のブログ更新となります。 3日前、ツクールMV初作品となる「Birth World」を完成させ、 RPGアツマールというWebサービスにアップロードしました。

http://game.nicovideo.jp/atsumaru/games/gm957

興味がありましたら、ぜひプレイしてみてください。

感想・バグ報告等ありましたら、コメントいただけると幸いです。

※ヒントは、下の方に載せます。

ストーリー

「ぼっち」の社会人ショウゴは落ち込んでいた。 誕生日当日というのに、誰からもお祝いの言葉をもらえない。 ましてや、SNSミニブログで誕生日設定をしているのに、全く「お祝いメッセージ」がもらえなかった。

突き付けられた現実に絶望していたそんなとき、 (自称)神様から、不思議な世界へと導かれてしまう。 「望むならば、その状況を変えることができる」らしい。

その世界では、みんなが自分のことを祝福してくれるというのだ。 様々な人・魔物から祝福の言葉をもらいながら、 自分の欲しいモノを作るという「試練」を受ければ良いということだが・・・。

特徴

基本的に、世界中の人々が主人公をお祝いしてくれる

f:id:rinne_grid2_1:20161225000708p:plain

「痩せたんじゃない?」とか言ってくる。

お祝いしてもらうと、変なアイテム(祝福)をくれる

f:id:rinne_grid2_1:20161225000830p:plain

変なアイテム(もうれつな祝福)

f:id:rinne_grid2_1:20161225000959p:plain

ほとんどの人々に、HPゲージがある(緑枠のオレンジ色のゲージ)

f:id:rinne_grid2_1:20161225002853p:plain

話しかけすぎると、命が尽きてしまう

f:id:rinne_grid2_1:20161225003153p:plain

最初に自分が欲しいものを「4つ」手入力して、アイテムを合成する

f:id:rinne_grid2_1:20161225001325p:plain

この時のテストプレイでは以下のように入力した様子

1番目に欲しいもの:年金
2番目に欲しいもの:日常生活
3番目に欲しいもの:オライリー本
4番目に欲しいもの:そこそこほしいモノ

_人人人人_  
> 年金 <
 ̄Y^Y^Y ̄  

もちろん魔物もお祝いしてくれる

f:id:rinne_grid2_1:20161225002031p:plain

f:id:rinne_grid2_1:20161225003830p:plain

女性しか入れない町に入るため、変な薬で異性に変身

f:id:rinne_grid2_1:20161225002238p:plain

いわゆるTSF要素?誰かが得する?

男バージョンEND、女バージョンENDがあったりする。

イケメンしか入れない町に入るため、変な薬でイケメンにも?

f:id:rinne_grid2_1:20161225002558p:plain

イケメンの基準がいまいちわからない

ヒント

(もしヒントをみたくない場合は、このページを閉じることをお勧めいたします。)

本ゲームのエンディングは、合計10コあります。

エンディング1:

ある一定数、人を倒す

エンディング2

「誰かを倒す」もしくは、「どこかに捕まっている人々を解放する」依頼を受けた時に、依頼主を倒す

エンディング3

「誰かを倒す」イベントを「男」状態で終える

エンディング4

「誰かを倒す」イベントを「女」状態で終える

エンディング5

「どこかに捕まっている人々を解放する」イベントを「男」状態で終える

エンディング6

「どこかに捕まっている人々を解放する」イベントを「女」状態で終える

エンディング7

「女性しか入れない村」のイベントを終える

エンディング8

自分が欲しいものを2種類作った状態で、試練を終了する

エンディング9

自分が欲しいものを3種類作った状態で、試練を終える

エンディング10

自分が欲しいもの4種類と、「怪しい薬」を作った状態で、試練を終える

「試練を終える」で閲覧できるエンディングについて

エンディング8 → エンディング9 → エンディング10の順番に見ると 流れがわかりやすいかと思います。

落ち着くまでブログの更新をやめる

最近、朝の時間が忙しく、ブログを書いている暇がない。

また、毎日の更新となると、内容が一定化し、書く内容も薄くなってしまっている。

ひとまず落ち着くまでの間は、ブログの更新を停止することを決めた。

ただ、読書メモや技術系記事のメモは、アウトプットとして記載する可能性はある。

【雑記】朝起きれない?

睡眠不足なのかよくわからないが、体がだるく、朝起きれない。

どのようにして改善していくべきだろうか。

ひとまず今晩は早めに寝てみることにする。