頭の中は異空間

ものづくり中心

【AWS】ACMに登録したSSL証明書の有効期限切れしてしまったときの対策

またまたやらかしてしまいました。

なぜかACMに登録済みのSSL証明書の自動更新がされておらず、前回のような期限切れ注意的なメールも届いていなかったため実際に期限切れになるまで気づきませんでした。

f:id:notwo:20190303085042p:plain
赤字で「期限切れ」というパワーワードが刻まれている...

しかもテストで作った未使用証明書が残存していたという...要らないものは消して整理すべき(戒め)

 

さて、期限が切れてしまったら更新するだけです。ただ、期限が切れる前に更新するのと比べてひと手間かかります。

 

やり方は、ACMの画面、証明書のリクエストボタンからドメイン情報を入力していきます。検証方法は、私はEメールにしました。 

f:id:notwo:20190303090123p:plain
こんな感じになるはず

メールを送ってからの細かなやり方は下記にあります。

notwodaily.hatenablog.com

approveまで終わったら、要らない証明書を削除したいのですが... 

f:id:notwo:20190303084623p:plain

当たり前ですが、期限切れ証明書とはいえなにかのサービスで使用しているわけで、そちらで利用する証明書を変更しないといけません。

例えば私はCloudFrontで利用しています。

notwodaily.hatenablog.com

証明書の変更方法として、CloudFront(おそらく他サービスも)の場合はarnを更新すれば良いです。

下画像のARN(いま発行した証明書の方を選ぶこと!)の部分を丸ごとコピー。

f:id:notwo:20190303084702p:plain

Custom SSL Certificate (example.com):直下のテキストエリアにコピったarnを貼り付け、更新。

これでさっきまで使用不可能だった発行済証明書が選択され、使用可能に変わっていることを確認できます。

f:id:notwo:20190303084506p:plain

そして期限切れの証明書を削除可能になっているので、アクション→削除。発行済みの証明書のみが残っていれば大丈夫です。

これで無事解決です。めでたしめでたし。

 

 

いやあ、久しぶりに記事を書くネタができて本当に良かったです(白目)

【STEINS;GATE】【ネタバレあり】シュタゲ(elite, 0)の感想書いてみる

シュタゲエリート(無印)およびゼロをクリアし、アニメも観終わったので、簡単に感想など書いてみようと思います。なお映画は見ていません。

 

それぞれの世界線と違い

世界線 未来(2036年) 紅莉栖 まゆり タイムマシン 岡部達が関わる相手
α SERNによるディストピア すぐには死なない※1 2010/8/13に死亡 SERNが完成させる。未来のダルがそれを真似て完成させる
過去への一方通行
SERN(のラウンダー)
β アメリカ、ロシアを巻き込んだ第三次世界大戦勃発、終戦後も各地で内戦
世界人口が10億人にまで減少

2010/7/28に死亡

記憶だけAmadeusに残存

すぐには死なない 未来のダルが完成させる
未来にも過去にも行けるがバッテリー残量わずか
ストラトフォー
DURPA
ロシア軍
SERN(のラウンダー)※2
SG 戦争も起きずディストピアもない すぐには死なない すぐには死なない 存在するのか不明 不明

※1 タイムマシン完成後に死亡だった気がする

※2 敵として出てくるのはほんの1世界線の出来事であり、ここでは影が薄い

 

時間、世界線変動

  Dメール、Dライン タイムリープ タイムマシン
世界線変動 できるが、結果は受け取った相手の行動に左右される できない※1 できない※1
時間旅行 できない できるが制限あり できる

 

設定はこんな感じだったと思います。タイムマシンでさえ世界線を変えられないのは、世界線の収束のせいですね。ただ、収束と言っても「決まった結果」として出てきたのは人の生死ばっかりですが。

タイムリープマシンはタイムマシンよりはリスクが少ないものの、それが出来た時から最大48時間前(最終的にはもっと伸びるが)までという制限がついていました。

 

※1 厳密には、アトラクタフィールド理論により世界線の収束が起こるので、特定の過去の出来事を変えられない、という意味

 

感想

ダル、チート過ぎない?足跡の残らないハッキングを一発成功させる(それも国家機密が相手)というまさにスーパーハッカーが味方にいるのが頼もしい、と思いました。未来ではタイムマシンを作っちゃうしね。活躍度でMVPをあげるなら彼じゃないか。

無印→ゼロの順に話が進みますが、ゼロのトゥルーエンドが無印のトゥルーエンドにつながるのが衝撃的でした。未来の岡部が、αから戻ってきた現在の岡部にムービーメールを送って道を示すところで察しました。

 

f:id:notwo:20181125093645j:plain

シュタゲをやるとタイムマシンが意外とそこまで万能ではないなという印象が強くなります。β世界線に来た鈴羽が言っていたバッテリー問題が、過去では常に付きまとううえマシンの故障タイミングによっては時空の狭間に閉じ込められかねないという欠点。アトラクタフィールド理論により、決まった結果は覆せない。特にここが問題な気がします。過去を変えても結果が変わらないなら、過去に戻る意味があるのかわかりません。ところが、そこにDメールないしはDラインを組み合わせることで、本当の意味で時間や世界を自由に操ることが出来るようになります。

しかしそんなことをすればSERNにマークされるし(Dラインは監視されていないのでセーフ)、タイムマシンはその存在がバレればその世界では戦争が起こってしまうという諸刃の剣であり、活躍の場がほとんどなかったのが意外でした。ドラえもんの世界の未来人の持っているタイムマシンはそういう欠点をどうやって克服しているのか、なんて考えてしまいますw

 

アニメでなくゲームをプレイした人ならではの感想としては、各ルートどれもハズレにはなりえない点が素晴らしい(ゼロのレスキネンルート除く)。例えば無印のフェイリスルートはむちゃくちゃ切ないルートではあるけれど、まゆりも紅莉栖も死なない一つの解答だと思います。選択肢で何を選ぼうがFateと違って分岐によってDead endとならないのが特徴だと思います(だからといってFateが悪いわけではない)。それでも私は結局トゥルーエンドが一番納得が行きますが。

他には、専門用語がそこそこ出てくるのですがその解説をTIPSという用語辞典で補っています。トロコンしたい場合、そのTIPS集めのためにも全ルート回ることになります。

 

さて、主人公の岡部視点で物語が進みますが、岡部が世界線を移る理由はまゆりと紅莉栖を死なせたくないからです。舞台のどちらの世界線も20年後には地獄が待ち受けていますから、殆ど誰にとっても辛い世界線に変わりはないものの、岡部にとってはその世界のことなんてどうでも良い※3わけです。あくまで目の前の紅莉栖、まゆりの無事が確認できれば良い。つまり世界線を移りたいのは岡部のエゴでしかないのですが、「独善的だ」なんて紅莉栖に言われても、それを強がって否定したりしないあたりに好感が持てます※4。結局、世界線を変えないと地獄なので、独善的だろうが岡部が世界線を変えることに、他人にとっても意義が生まれています。この辺の設定がとてもうまくできています。

加えて、岡部はαからβに移るときは紅莉栖に背中を押してもらい、βからSG世界線に移るときはまゆりに背中を押してもらっている。どちらのヒロインが欠けてもSG世界線にはたどり着けていなかった。このことがどちらも岡部にとって無くてはならない、ということを表現しているように感じられる。そんなヒロインをどちらも守ろうとする、だからこそ、最後の最後まで岡部を応援したくなる、そう出来ているんだと自分で納得しています。

※3 β世界線2036年を見た時はさすがに変えないといけない!と使命感を持っていましたが。

※4 β世界線に移るとき、「紅莉栖を見捨てる」ことを覚悟し、受け入れたことも含め。ただし、途中までは世界線を変えることの影響を恐れてはいた模様。

 

f:id:notwo:20181125093353j:plain

後は、物語にはあまり関係ない部分ですが、ゼロの冒頭でレスキネン教授の講演中、アマデウスに批判的な意見を出した人に対して岡部が「最初は無理だと思われた技術なんていくらでもある、それを克服した研究者がいたから今があるんだろ」というセリフ、ここ個人的に名言と思ってます。全く新しい技術やサービスが生まれようとしている時、そこには必ず批判する輩がいますが、技術的な困難だけでなくそういう批判にも打ち勝った結果出来上がった作品が世の中を変えていく、そういう流れは歴史上でも起こっていることですから。

 

 

f:id:notwo:20181125093300j:plain

復ッ活ッ 鳳凰院凶真復活ッッ

そして最後に、やはり鳳凰院凶真が復活したことが嬉しいです。この厨二ネームなくして岡部はありえないでしょうw元々無理してつけてた設定とはいえ、無印の頃の印象が強いから普通の大学生をしている岡部って違和感バリバリ。でも最後にしっかりもとに戻ってよかった。こっちのほうがより困難に立ち向かっている雰囲気が出ていると思います。

 

原作とアニメの違いについて

無印・・・原作ではトゥルーエンドの他に紅莉栖/まゆり/ルカ子/フェイリス/鈴羽のそれぞれのルートが存在。アニメでは原作のまゆりルートに準ずる。

ゼロ・・・原作ではトゥルーエンドの他にレスキネン/まゆり/紅莉栖/かがり/真帆のそれぞれのルートが存在。アニメでは各ルートを部分的になぞりつつトゥルーエンドへ。

 

ゼロはアニメと原作にちょくちょく違いがあるというか、アニメ限定シーンがあったりします(最後に岡部がBC18000に漂流した鈴羽とまゆりを迎えに行くシーンだったりかがりの格闘シーンでかがりの素顔がバレてたりダルの告白シーンがあったりetc)。

細かい突っ込みどころを無視すれば十分アニメも楽しめると思います。

 

アニメも原作も良いと思いますが、やはり私は原作を推します。原作であれば、岡部はもちろんサブキャラの深掘りもよりされているので。ただ、無印の鈴羽ルートつまり無限サイクリングはちょっと怖いけどね・・・

 

【Python】【Tk】treeview(表)に横スクロールバーを付ける

treeviewで横スクロールが出来ないと不便なのでつけよう、というものです。表以外の形式でも出来ると思います(未検証)。

 

コードとしては

frame = ...(frame初期化)
tree = ...(treeview初期化)
tree.pack()
hscrollbar = ttk.Scrollbar(frame, orient = tk.HORIZONTAL, command=tree.xview)
tree.configure(xscrollcommand=lambda f, l: hscrollbar.set(f, l))
hscrollbar.pack(fill='x')

で出来ます。

先にtree.pack()しておくことで、スクロールバーを表の下部につけることが出来ます。見て分かる通り同じframe内にtreeviewおよびスクロールバーを収める必要があります。

hscrollbar.pack()するときfill='x'がないと、スクロールバーのサイズが最小化されてしまって使い物になりません。

 

余談ですが、下記リンクの

autoscroll

を使うことで、ウィジェットのサイズによってスクロールバーをつけたり消したり出来ます。

python 2.7 - Horizontal scrolling won't activate for ttk Treeview widget - Stack Overflow

 

なお、縦スクロールバーも同様につけることが出来るものの、デフォルトでホイールに縦スクロールが対応しているようなので、わざわざつける必要があるのかは疑問。デザイン面を考慮するなら、ですね。

【Python】【Tk】treeview(表)の選択状態についての注意点

ttk.treeviewの表形式で登録データを総入れ替え(delete→insert)なんかするときに悩むであろう罠について。

 

データをすべてtreeview.deleteしたとき、選択中だったデータの選択状態が強制的に外れます

明示的に言えば、treeviewを見た目で選択した状態の「選択」と内部的に選択した状態の「フォーカス」に分かれます。これを元に戻すには、「選択」と「フォーカス」の2つを動的に行う必要があります。

 

# データ全削除
tree.delete(*tree.get_children())

この時点で選択、フォーカスの2つが外れた状態になっています。そのため、本当の意味で表のデータを再選択するには下記(1), (2)の双方が必要です。

# (1)データのフォーカス(プログラム上で内部的に選択した状態)
tree.focus(iid)

 

# (2) データの選択(見た目上で選択された状態)
tree.selection_set(iid)

 

focus(iid)することで、例えば下記のように選択中のデータを取得できたりします。

focused_record = tree.item(tree.focus())['values']

また、selection_set(iid)することで見た目的にもどれを選択中か見せられるのでユーザにとっても親切な作りになります。

 

肝心のiidはデータをinsertするときに返り値として取得可能です。

for record in data:
iid = tree.insert("","end",values=(record))

 

あとは、全データ(data)のループ内でfocused_record == recordのときにfocus, selection_setすることで再選択を実現できます。

【Python】【Tk】Tkのtreeview(表)のヘッダ部分のクリックイベント設定方法

1時間くらいどん詰まりしたので覚書。

 

例えばこんな感じのテーブルがあって、お客様氏名とか郵便番号あたりの行をクリックしたときの挙動をつけたいとき。

f:id:notwo:20180615000844p:plain

 

ttk.Treeviewを継承したクラス内で実装する前提です。

イベント設定を

self.heading(番号(連番だと楽), text=表示したい名前, command=コールバック関数)

こんな感じにして、

コールバック関数内で

x = self.winfo_pointerx() - self.winfo_rootx()
self.identify_column(x)

とすると、どのヘッダがクリックされたかを、#~の形で取得出来ます(厳密にはどのカラムがクリックされたかの情報)。

 

たったこれだけで出来ます。

とはいえ、リファレンスを隅から隅まで見てもそれっぽい非常に旨味なメソッドがなかったのでやり方はこれしかないと思います。

 

やってることは画面に表示しているx座標をもとにidentify_column()でヘッダ名を特定しているだけです。クリック時のマウスカーソルx座標からtreeview自体のx座標を引けばクリック時のtreeview上の位置が特定出来ます。取得した番号から#を取り除いてcolumn()やheading()に渡せば、カラムやヘッダの設定を取得まで出来ます。

 

この手のイベント設定で考えられる使い道はたぶん、ソートしたいとき位ではないかな...?

【Windows10】【Python】pyinstallerを使うとき注意すべきこと

Windows10でpython+Tkで書いたツールをexe形式にしたいとき、pyinstallerを選択しました。で、結構躓いたので後学のために注意点をまとめます。

 

 

Pythonのバージョン

一番大事なことです。

まず私が試したのはPython Releases for Windows | Python.orgPython 3.7.0b5 - 2018-05-30です。これで

pyinstaller -F -w xxx.py

とかすると、確かにexeは作られるんですが実行しようとしても何も起きません。おそらく裏でコケてエラー吐いてると思います。

pyinstallerはまだpython3.7をサポートしていない可能性大です。

-->python3.6.5でやり直したところうまくいきました。

3.6が大丈夫というのは

PyInstallerがPython3.6をサポートしてくれた

で確認しました。

 

インポートファイル

ファイルが複数に分かれていて依存関係がある場合、それらも含めてビルドしないと失敗します。

--paths="`ここに含めたいパス"をつけてpyinstaller実行しましょう。

ex) pyinstaller -F -w xxx.py --paths="./modules"

※xxx.pyでエントリポイントのあるファイルを、--pathsでそこからimportしているファイルのあるディレクトリをすべて指定すること。

 

アラートがいっぱい出る

7477 WARNING: lib not found: api-ms-win-crt-stdio-l1-1-0.dll dependency of c:\users\~~~~\appdata\local\programs\python\python36\DLLs\_ssl.pyd
7547 WARNING: lib not found: api-ms-win-crt-runtime-l1-1-0.dll dependency of
c:\users\~~~~\appdata\local\programs\python\python36\DLLs\_ssl.pyd
7625 WARNING: lib not found: api-ms-win-crt-heap-l1-1-0.dll dependency of c:\users\~~~~\appdata\local\programs\python\python36\DLLs\_ssl.pyd
7703 WARNING: lib not found: api-ms-win-crt-time-l1-1-0.dll dependency of c:\users\~~~~\appdata\local\programs\python\python36\DLLs\_ssl.pyd
...

上記メッセージだけではなんのことやら...といった感じですが、この辺の投稿によればWindows 10に起因する問題の模様です。更に、Windows Vista/7/8ではwarningを抑えるためのdll(つまりwin10で足りない部品)があるとのこと。

しかしgithubの同スレの上部の投稿にある通り、warningが出ていても動作するexeファイル作成自体はできるようで、私もたくさんのエラーが吐かれているにもかかわらず、正常動作するexeファイル作成には成功しています。

どうしてもwarningを消したい、という場合は先程のcodewarrior0氏の言う

so the only thing to do is to install the VC 2015 runtime on the Vista/7/8 machine.

をやれば良いと思います。そこから先は軽く読んだもののこれといった対処法は書かれてないです(私は試していないので↑で出来る!とは断言は出来ませんが...)。

他に何某かのエラーが出てexeが作れない、となったら再び上記warningを疑えば良いのかなと...

 

 

【Windows10】[Windows10]PCの調子がおかしくなったとき用の修理メモ

最近、ドスパラで買ったデスクトップPCのパーツがイカれてきたので、この機会にやったことと起きた現象をメモ。

 

今回起きた現象

  1. 電源は付くがHDDが全くつかない、ディスプレイに全く表示されない
  2. 途中でHDDランプが全く点灯しなくなる

 

1について

急に画面が全くつかなくなり、強制終了してつけ直すとHDDランプすらつかない→こうなるとchkdskすら出来ず、HDDの故障を疑う→分解してHDD(C, Dドラ)を取り出し、診断用の製品(名前忘れた)で動作チェック→問題見当たらず。

 

2について

グラボを外したのに調子が悪いのでHDD不良を再度疑うがCrystalDiskInfoでは正常と出るので問題なさそう、CPUが古くパワーが足りてない疑惑があるためグラボをつける必要が出てきた。

→PCゲームや動画を見なくてもフリーズが頻発するためCPUの負荷が高まったのが原因とかんがえられる

 

実は一昨年あたりに一度HDDを交換しておりHDDがそんなに早く壊れるとは思えないので、冷静になってみればHDDより先に他の周辺パーツに目を向けられたかもしれないです。

 

やったこと

1→HDDチェック、グラボ取り外し

2→HDDチェック、グラボ付け替え

 

PCを買ったのが2011年なので、実に7年近くも使っているのでガタが来てもおかしくないということでパーツ交換をしました。

まるごと買い替えだとそれはそれで安心感は有りますが出費がひどくなるし色々設定し直しでただただ面倒という欠点もあります。安く済ませられる部分は安く済ませるのが賢い解決策だと思います。

 

1について、グラボが原因でない場合はCMOSが悪さをしている可能性もあるということで、その場合はCMOSクリア(取り外して5分間くらい放置)、それでも駄目なら電池買い替えまでありえました。

 

結局悪さをしていたのは古いグラボで、これを買い換えることで無事解決。