「プログラミング」に関する日記(8)

プログラミング関係の話題。プログラミングコーナーを更新したとか、プログラミングの内容に踏み込んだ話とか。

<前 次>

WellKnownUriParserとTravis CIとドラゴンクエスト10

WellKnownUriParser

検索サイトのパターンを一つ捕まえたので手っ取り早くバージョンアップしました。
まあ、自分用の範疇をいまだ全く超えていないので、ずっとアルファ版のまま上げ続けているんですけどね。
でもなぜかそれなりにダウンロード数はあるんですよね。
あれで私以外に役に立っているのだろうか…?

Travis CI

で、そのWellKnownUriParserの自動テストに使っているのが、Travis CI。
正直、こんな小規模かつ突発的なバージョンアップとか、開発自体よりも、リリースにかかる手間の方が大きいんですよね。
アルファ版程度なら、masterブランチにマージorプッシュした時点で自動的にリリースしたいのです。
そもそもCIという言葉自体、デプロイ(リリース)も自動化することを含んだ概念であり、機能としてはTravis CIも当然含んでいるのです。
ちょっとこの辺り、調べてみて自動化を試みたいですね。

ドラゴンクエスト10

しろいコキンもハロウィンイベントクリア。
クリア後のやり込みはともかくとして、季節イベントに追われて義務感でプレイする必要はなくなりました。
次の季節イベントまでのんびりするのも悪くないけど、後でやろうと思っていたレベル上限解放もやっておきたいところです。
3キャラ全員で頑張ると時間がかかることも、1キャラずつだとある程度余裕を感じて進められるので、欲張らず1キャラずつ着実に進めていこう。

Git


ちょっと前に考えていたことだけど、Gitのブランチのマージ戦略について。
全体はTwitterの方を参照してもらうとして、要約すると、ブランチをいっぱい作っても活かし切れないけどブランチを活かす運用はしたいので、masterのほかにdevelopブランチを作って、GitHub Flow程度の頻度でmasterにマージして、リリースはマージとは関係なく都合のいいタイミングで行う、というのを考えています。

で、CharaBox3でdevelopブランチ作ってみました。
今は、課題解決レベルにまで実装が進んでいないので、masterにはマージしていません。
この実装が完了しても、すぐにはリリースせず、他の機能も作るとか、ドキュメントを整備するなどした後に、改めてリリースすることになります。
もちろん、リリースするときにも、ブランチを増やすのは面倒なので、developでドキュメントを作ってmasterにマージするという流れです。
まあ、ドキュメントだけならmasterで直接作業でもいい気はしますが、開発環境をmasterに切り替えると、開発再開したときにdevelopに移動し直すのが面倒ですからね。

HTML5

そうだ、うちのサイトはブラウザ判定やSPAなんてこじゃれたことはしてないんだから、単にページのソースが欲しいだけならcurl系統の、HTTPリクエストを送るだけの機能を使えばいいんだ。
実に単純なことであった。

Selenium

HTML5のページだけバリデーションかけたいんなら<!DOCTYPE html>で判別すればいいじゃないかと思ったら!
DOCTYPE宣言はPageSourceから省かれている!!!

DOCTYPEに頼らずHTML5を判別する方法はないものか。
DOCTYPE宣言だけHTML5で、中身がHTML4.01なのは問題だから、それはエラーとして検出したい。
つまり、タグを見てHTML4.01じゃないからHTML5っていう判定はできない。

それはそうとして、「--blink-settings=imagesEnabled=false」のオプションを付けたら速くなった。
見たいのはHTMLだけなので、画像を読み込む必要はない。

W3C Markup Validator

ローカル環境で無作為にクロールしてバリデーションかけたら大変なことに!
古いHTML4.01やShift_JISのコンテンツは軒並みアウト!
古いCMS(主にPukiWiki)使ってる場所もすごい勢いでエラー!
これはさすがに直し切れるものではない!

HTML4.01自体は正当なHTMLなので、HTML5のバリデータにとってはそもそも対象外。
CMSはこちらで手出ししにくい部分なのと、そもそも古くて直す価値も低いことから、放置…というか、古かったらやっぱりHTML4.01なので、やはり対象外。
HTML5で書いたページに絞って仕切り直しかな。

CircleCI

なにやらDockerHubで11月から制限がきつくなる模様。
それで、CircleCIで使うときにその制限を回避する方法が、メールで送られてきました。
内容としては、この記事です。
ユーザー登録してIDとパスワードで認証しろってことですね。

アンパンマンDBとTGWSAdminとCircleCI

アンパンマンDB

一時保存の挙動を改善。
これまでは、プレビューしただけでも一時保存が消えてしまって、途中まで書いたやつの続き書こうかな→やっぱやーめた、で、書きかけのが消し飛んでいたのですが、編集を確定するか別の一時保存を作るまでは消えないようになりました。

TGWSAdmin

リファラチェックの結果がたまり過ぎていたので自動整理の仕組みを作成。
一年前にチェックした結果とか残してても仕方ないですからね。

CircleCI

作業領域にRAMディスク使えるらしいので試してみました。
確かに普通のディスクを使うよりは速くなるけど…一番のボトルネックがライブラリのダウンロードなので、期待したほど劇的な高速化はしませんでしたね。
テスト項目が増えてテスト自体に時間がかかるようになってきたら、特にファイル読み書き系のテストが増えてきたら、効果が上がってくることになるかな。

ミスタードリラーアンコールと日記とComposer

ミスタードリラーアンコール


もう少しだったのに…無念。
アクション面に不安があるからなるべく動かさずに確殺する方向で進めているのですが、真っ向勝負不可避になると厳しいですね。
ここも、動き出すのを防げないからせめて動いた次の瞬間に壊れるように仕向けて、自分は安全地帯に逃げ込む算段だったのですが、予想より早く壊されて安全地帯の確保が間に合わなかった形です。

日記

管理用の活動記録画面に、ゲーム記の一部のページにある進行状況と、Qiitaの投稿情報と、最近コミットしたGitHubの情報を出せるようにしました。
APIは便利ですね。

Today I Learned

日記の賑やかし用と言えば、これもあったんでした。
PHPのComposerに、fundというのがあったんですよ。
「composer fund」というコマンドで、支援を求めているパッケージを調べることができるというものです。
Composerを使っている人が直接的に得をする機能ではないので日本語情報は少ないですが、ライブラリ開発者だって金がないと暮らしていけないし、優秀なライブラリを作れないわけですからね。
無料の物にあえて金を払うというのも、様々なものが無料で手に入る今、考えるべきことなのかもしれません。

.editorconfig

いつの間にかさらに細かい指定もできるようになっていたので、現在アクティブ(なつもり)のプロジェクトに適用してみました。

Node.js

めちゃくちゃ久しぶりにアップデート。
5→13に上がりました。
そして、各種モジュールもアップデートして、Node.jsでトランスパイルしているAnpanatorのコードもリビルドしました。
アップデートによる仕様変更に伴うエラーもありましたが、そこはちゃんと直して、最終的にAnpanatorのコードがほんのちょっと小さくなりました。

爆ボンバーマンとCSS

爆ボンバーマン

ブラックシティ3面の攻略情報リニューアル中。
量が多いのでマップ1だけで力尽きました…。

CSS

HTMLのtableの列幅をドラッグで変えられるようにする雑な方法 - Qiita
投稿しました。
雑な方法だけあって、Chrome以外じゃ動かないとか、問題ありありですが、個人的には、これでも困らないので、これ以上ちゃんとしたものを作るつもりはありません。

PA-APIとTwitter API

うちのサイトにPA-API 4.0がまだ残っていると連絡が来ています。
もう全部滅ぼしたはずなんですが…。

https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-mentions_timeline
メンションのタイムライン?

スーパーカービィハンターズとSameSite

スーパーカービィハンターズ

ゲーム記にページを作りました。
何か解説でもしようかと思ったけど、解説できるような写真が全然撮れなかったので、ほぼ自分の進捗を書くだけのページになりました。
で、その進捗はと言うと、ストーリークリア済みで、後はジェムリンゴ集めてクリア後要素に挑むだけなので、書くことがあまりないという…。
時期を外した感があります。

SameSite

Chrome 80が密かに呼び寄せる地獄 ~ SameSite属性のデフォルト変更を調べてみた - Qiita
クッキーのデフォルト値が変わって、ドメインをまたいだクッキーの利用が難しくなるということです。
もろに影響を受けるのは、主にWeb広告で、うちだと、Amazonのアフィリエイトが当てはまります。
対応しなければいけないのはクッキーの発行側なので、私の方では何もできることはないのではありますが。

WellKnownUriParser

DLLで提供されるライブラリにドキュメントコメントを反映させるテストも兼ねて、アップデートしました。
今回は、何もプログラムには手を付けず、本当にドキュメントだけの更新です。

必要だった設定は、csprojファイルに以下の1行。
<GenerateDocumentationFile>true</GenerateDocumentationFile>

NeoMupl

データや設定によってはループが全然完璧じゃなかったので、修正していました。
先走ってすぐリリースしてしまわなくてよかった。

それから、次期バージョン以降だけど、ループポイントをいい感じに設定するための技術情報調査中。
NAudioの作者が波形を表示するライブラリを作ってくれているみたいなので使えるかも。

WellKnownUriParserとドラゴンクエスト10とニコニコ動画

WellKnownUriParser

テスト作りました。
CIツールに組み込むのはまた今度。
で、今はテンプレート化の方に挑戦しています。
GitHubの方にはすでにIssueを作っていますが、T4(Text Template Transformation Toolkit)を使うつもりです。

ドラゴンクエスト10

ァォィョッュのメインストーリー進行。
ゼドラ洞から戻ってきておっさんから鍵を託されたところまで。

ニコニコ動画

サムネイル差し替え終わりました。
妥協したものもありますが、元のサムネイルとほぼ同じものを付けられたと思います。
しんどかった…作業量的にも…精神的にも…。

WellKnownUriParser

プレリリースですが、公開しました。
NuGetに登録すること自体が初めてだったので、お試しがてらにプレリリースバージョンとしていますが、機能的にはすでにAccessAnalyzer.RefererAnalyzerと同等のものを持っています。
テストとかサンプルとかをちゃんと用意するのと、あと、対象サイトの追加が結構単純作業なので、テンプレート化できないかなとか、考えています。
TGWS側での配布は…コンセプト的に、しなくてもいいかな。

WellKnownUriParserとドラゴンクエスト10

WellKnownUriParser

ナマライザ自身の変更ではなく、使用している部品を独立させてライブラリ化しようと考えています。
今でもAccessAnalyzerと言うライブラリの一部として「RefererAnalyzer」という名前で作ってありますが、うまく機能に分かれていないのと、.NET Coreに対応していないのと、一般的過ぎて中身を表していない名前なのが気に入らなかったので、新たに作り直します。
そして、ここからが一番やりたかったことなのですが、NuGetに登録して、パッケージマネージャを通じて、現代的な「普通」のやり方で導入できるようにしようと思います。
毎回バイナリをコピーとか、一度ビルドしたはずのものを使用者側でもまたソースコードからビルドとか、そういうのはもうやめたいのです。

AccessAnalyzerのもう一つの片割れ「LogReader」も、設計ひどいし超メモリ喰いだし、切り分けてまともにしたいのですが、何せ設計のひどい巨大クラスなもので、すぐには無理かな、と言うところです。

ドラゴンクエスト10

別のこのゲームに限った話じゃないんですが、毎日繰り返し遊べる微妙な稼ぎ要素ってのがあるんですね。
本編もちゃんと終わらせてないのに、目指したいものもないのに、ずっと同じ繰り返し。
ドラクエ10では、ここ何年か、花の水やり以外ほとんどやっていません。
これじゃ何も進まないし、栽培で得た資金も使い道がありません。
水やりをやめてがっつりストーリーを進めるような気合はないけど、せめて水やりのついででも、一区間走るだけでもいいから、ゲームの進行をしたい。
ということで、今日は、ァォィョッュで、グランゼドーラ城からゼドラ洞への一区間を走りました。
ゼドラ洞入り口のルーラ地点を記憶しておいたので、次回はこの続きからできるって寸法なのです。

<前 次>