うぃろぅ.log

140字で綴りきれない日々の徒然備忘録

【セトリ】 花澤香菜 / KANA HANAZAWA 线上音乐会(Online LIVE) 2020 セットリスト

2020/5/29にTMELive(中国在住者向けライブ配信サイト)にてライブ配信された
「花泽香菜 线上音乐会 2020」 セットリストです。
※特にライブ名があるわけではなさそうなのでweiboでの告知名です。

1: Just The Way You Are
2: happy endings
3: 星空☆ディスティネーション (中国語ver.)
4: 有點甜 / 汪蘇瀧 (カバー曲)
5: flattery?
6: マラソン
7: 恋する惑星
8: ブルーベリーナイト
9: 君がいなくちゃダメなんだ
10: Nobody Knows
11: あたらしいうた
12: brilliant
13: 雲に歌えば

f:id:vviilloovv:20200529213848p:plain

※配信サイトには「かなめぐり2」とありましたが、中国での「Opportunity」以前の全アルバム配信開始記念ライブでした。

今日のほっこり

うぃろぅです。
生存アピール。

昨今は新型ウィルスにより外出自粛が続いて気が滅入りますよね。
そんな中で気づいたほっこりエピソードをお届け。

今日も今日とて昼食を自宅で食べていたのですが、外から大きな音が。
何かと思って意識を向けてみると、改造バイクに乗った集団が自宅の前を通って行きました。

f:id:vviilloovv:20200524122320p:plain
(画像はイメージです)

そこでふと思い出してみると、私はここ2ヶ月ほど自宅に篭りっきりだったわけなのですが、その間に改造バイクの騒音を聞いた記憶が全くないんですよね。
つまりは彼ら/彼女らも自粛していたというわけで、

「今日走る?」
「実家住みだし親がめんどい(方便)からやめとくわ」
「あーお前んとこの親うるせえもんなwww」

的な話し合いを経て

「そろそろ外走りてえよなあ」
「流石に落ち着いてきた頃だしもういいっしょ」
「結局誰もかからなかったし余裕だったわwww」

的な遷移が見られたと想像するに難くないわけです。
それを思うと普段は「あー今日もうるさいねぇ」としか感じない私でも「我慢してたんだねえ、偉いねえ」とほっこりしてしまったというお話。

私の住んでいる地域はまだ緊急事態宣言が解除されていないのであと1週間くらい我慢できんかったんか、とは少し思いましたがまぁでもよく頑張ったよね。

明日にでも全国的に解除されそうなので徐々に世の中も賑わっていくのではないでしょうか。
正しく恐れて楽しく過ごしていきたいですね。

花澤香菜さんのライブが全て延期になったので私の冬はまだ続きそうなのが玉に瑕。
いのりんの横アリには頑張っていただきたいところ。

ではまた。

【備忘録】 「はじめて学ぶ ソフトウェアのテスト技法」 を読む

うぃろぅです。
炎上していた前のプロジェクトが無事終了したため読んでいきます。
ちょうど自宅研修が許可されたので都合もいいし。

今日の本

ながーく使えるテスト設計技本の基礎本。
テストには散々苦しめられたし今一度基本に立ち返ることが大事。

当たり前だが全ての章を詳細に書くわけにはいかないためただのメモになっている箇所がいくつかあるが、思い出せるようにしておくことが大事。

はじめに

そもそもテストなんてどうしてするのよ、なんの意味があるのよ、といったことが語られている。

会社においては品質の担保や保守性の向上が挙げられる。

大事なことは、テストは「安心」のためにあるものではなく「精神的な規律」とするために あるものだということ。快適に開発しような。

1. テストのプロセス

  • 順番通りに動かさなければ動かないテスト
  • どの順で実行しても動くテスト

前者は一つ一つのテストケースが小さくなるが、後者は大きくなる。どちらが良いかは処理速度や実行時間にも夜ため一概には決められない。

テストの種類は大きく分けて4種類。基本情報とかでよくみるアレ。

全てをテストすることはできないということを念頭に置く必要がある。バグは必ず起きる。

2. ケーススタディ

わかりやすく説明するための例としてケーススタディを付録に用意したよ、というお話。

ブラックボックステスト技法

ブラックボックステストは、「中身が詳細にわからないプログラム」のテスト。
要件と仕様書を頼りにテストを行う。
全てのテスト工程で適用可能である。

実装全てをテストすることは当然不可能だが、正しく実施すれば少ない手順で多くをテストできる…はず。

3. 同値クラス

例えば「学生の学科テスト」の入力データを検証するプログラムがあったとして、

  • 点数は0 ~ 100
  • クラスは1 ~ 9
  • 学年は1 ~ 3

が検証OKになるとする。この時、それぞれの値にそれぞれ-1, 0, 1, 2…と順番に値を入れていってテストする必要はないよね、ということ。

点数 クラス 学年 期待値
21 2 1 OK
150 3 2 NG
90 12 3 NG
70 6 7 NG

というように、それぞれ「正常値」と「異常値」が仕様書に書いてあるのであればその2択で十分テストできるよね、という話である。
言われてみれば当たり前だが、大事な基本。
そもそも文字列を入れてテストするかどうかは仕様によるため、適宜判断が必要。

4. 境界値

同値テストから一歩進んで、同値である範囲の境界値を使ってテストを行う。 例えばさっきの点数で

  • 0 ~ 59C
  • 60 ~ 79B
  • 80 ~ 100A

という評価をするとしたら、テストケースとしては以下となる。

点数 期待値
-1 NG
0 C
59 C
60 B
79 B
80 A
100 A
101 NG

-1101は入力時点で弾く可能性もあるため場合による。
同値の境界を適切にテストすれば十分だよね、という考え方。

5. デシジョンテーブル

表が大きくなるため具体例は書かないが、複合条件によって期待値が一つに定まる場合は表にしてそれぞれの値を適切に管理してテストを実行すべし、という話である。
ラジオボタンが「携帯電話」が「電話番号(携帯電話)」が入力必須、「固定電話」なら「電話番号(固定電話)」が入力必須とか、そういう時にちゃんとラベルごとに整理して試験しようねと。

ここでの条件が連続値の範囲だった場合、境界値の考え方も有効である。知識が連鎖していく。

6. ペア構成

組み合わせが膨大になるテストがある際、直交表を元に値を決定してテストを行うことで全ての組み合わせを網羅できる、という考え方。

https://geechs-magazine.com/tag/lifehack/20161004_1

例えばこの記事が詳しい。

もしくは、全ペアを生成するアルゴリズムを用いて全ペアを生成する方法でも考え方は同じ。

www.satisfice.com

このページからダウンロードできる。

どちらにしてもテストケースを大幅に減らすことが可能なため、存在を知っておくことが大事。

7. 状態遷移

状態遷移図や状態遷移表を用いたテスト。

qiita.com

こちらの記事が詳しい。
例えばオタクの敵であり友である「e+」のチケット状態が「支払い待ち」 → 「発券待ち」 のような状態を試験する。今だと「払戻待ち」も重要かな。

8. ドメイン分析

複数の変数を同時にテストするときの技法。

www.slideshare.net

こちらのスライドがとてもわかりやすい。

9. ユースケース

いわゆるシナリオテスト。1人のユーザーが新規登録して何かしらのアクションをして…といったケースを用意し、その通りに操作できるかどうかをテストする。
もちろん正常系だけではなく変な操作(戻って最初からやり直す操作)も行う。デバッグ作業めいたもの。

それぞれの機能について最低1回ずつ試験すれば概ねカバーできるため、システムテストに良さそう。

ここまでがブラックボックステスト技法である。ペア構成テストはこれまでしっかり学んでこなかったためがっつり学習せねば。

ホワイトボックステスト技法

プログラムの構造がわかっている際に行うテスト。テストコードを書いて条件分岐を網羅したり異常なデータを作り出してエラーを検証したりするのはこちら。
単体テストだけではなく結合テストシステムテストにも適用可能なテストが存在する。
その性質上、プラグラムに関する知識が必要不可欠となる。

こちらも大事なのは全ての入力データに対するテストは困難であることを知っておくこと。

10.制御フロー

条件分岐があるプログラムに対して、命令網羅、分岐網羅、条件網羅…とフローを追ってテストしていく。
基本情報試験等でよく出るので知っている人も多いはず。

一つ一つのメソッドを小さく設計すればそこまで負担にならない…はず。

11. データフロー

プログラムの中で変数が意図していない値になっていないかを試験する。
スコープが正しく設定されているか、といったことも同じ観点。

Haskellのような再代入不可の言語はここが強い気がする。

ホワイトボックステスト技法については以上。よりこまかく試験できるよ、とざっくり理解。

テストのパラダイム

パラダイムとは、ざっくり「考え方の規範になるもの」ということ。
パラダイムシフトという言葉は聞いたことがあるはず。

テストにおいては大別して「スクリプトテスト」と「探索的テスト」の2つのパラダイムが存在する。

12. スクリプト

ウォーターフォールのプロセスの一部として登場するテスト。
テストが開始できるようになる前からテストを計画する。

「仕事を計画し、計画に従って仕事する」という言い方が的確。

ieeexplore.ieee.org

要約されたドキュメント(原文)がこちら。
本では噛み砕かれて説明している。

13. 探索的

プログラムについての探索をしながらテストを進めていくパラダイム
ウミガメのスープ」や「20の扉」のように「これができるか調べる」 → 「解決する」の繰り返しをテストに当てはめていく考え方。

スクリプトテストと違ってテストの習熟度が効率に大きな差をもたらすが、熟練のテスト設計者がテストを実行した時の効果がとても大きい。

スクリプトテストの補完として実行しても有用なため、どちらかが絶対的に優れているということはない。適材適所。

14. テスト計画

テスト計画は、一回したらそれっきりということではなく、継続したプロセスであるということが解説されている。
PDCA、大事。

支援技法

テストが大事だということはわかった。では、何をテストの開始地点として何をテストの終了地点とすればいいのよ、という話。
そのための足がかりとしての支援技法の解説。

15. 欠陥の分類

テスト計画のとっかかりとして、またテスト抜け漏れ防止のチェックリストとして様々な人が提唱した欠陥の分類が説明されている。

分類に唯一の正解は存在しないため、既存の分類を基に自分の分類を作り上げていく必要がある。
「私は通信処理でバグを入れ込みやすいから分類を詳細にしておこう」とか「変数を極力使わないコーディングをしているからデータフローは一般的なチェックで十分」とか。

分類はテストをMESEにするために大事。

16. テストの終了判定

バグを全て見つけられることに期待はしないほうがいいため、じゃあいつ終わればいいのよ、と。

(テストが完了していない箇所も含めて)全体の見通しがついたら、というのが一つの基準になりそう。
「わかりやすいバグは全て改修が終わって起きるとしたらこことここの処理のレアケース」のような状態であれば世に出しても大抵なんとかなる。
致命的でなければ出したらもう直せないわけではないし。

個人的には「いいから出荷しろ」と上司に言われたら、というケースが非常に納得がいく。納期。うーむ。

終わりに

座学だけでは身につかない。いいから手を動かすんだよ!!(雑な要約)

読後感

やはり「知識のインデックス」を作ることが大事。
テスト設計をする際に読み返すと大きな支えになりそうな良本だった。

ではまた。

【セトリ】 花澤香菜 Acoustic Live Tour 2020 「かなめぐり2」 仙台公演 セットリスト

2020/2/16に仙台Rensaにて開催された
花澤香菜 Acoustic Live Tour 2020
「かなめぐり2」
仙台公演のセットリストです。

1: Merry Go Round
2: マイ・ソング
3: ブルーベリーナイト
4: Just The Way You Are
5: brilliant
6: Blessing Bell
7: flattery?
8: 君がいなくちゃだめなんだ
9: Nobody Knows
10: ぼくらが旅に出る理由 / 小沢健二 (カバー)
11: 同心円上のディスタンス
12: マラソン
13: スパニッシュ・アパートメント
14: 恋する惑星
アンコール
15: 雲に歌えば
16: 星空☆ディスティネーション

わけのわからないHTMLを読む

うぃろぅです。
納期1に追われてしばらく死んでいました。多分今月は状況が変わりそうにありません。
上司に「これ修正したんですけど反映していいですかー」と訊くたびに「ちょっと待ってね」と返ってきて下手に動けないため今回遭遇した事象を書きます。

若干長くなったので目次置いときます。

今日のお題

久しぶりにとんでもないHTMLを見た

何があったの

今何をやっているかというお話。とあるandroid / iOS向けの交通系アプリを改修しているのですが、このアプリの追加機能として、「お知らせタブを選択したらWebViewでサーバに置いてあるHTMLを表示」というものがあります。
アプリの中でサイトのお知らせがみられる、みたいなあれですな。

アプリ側の開発は私のチームが対応していて、表示するHTMLは別チームのおじさんが作成している、という体制です。
このおじさんがまぁ仕事ができないらしく、お客様からもクレームが来るという方なのですが、詳細は置いておきましょう。

で、先日「android6.0だとHTML内のリンク(target="_blank")を叩いてもブラウザ起動してくれない、WebView内で開いてしまうから前の画面に戻れない」という報告を受けたので解析をしました。
最終的に「アプリ側でブラウザを起動して対応」という形にしたのですが、これが最適解ではない気がするので答えを探したいところ(手が回ってない)。

この修正をする過程で上記のおじさんが作成したHTMLを見てみたわけなのですが、ついつい笑ってしまったためここで供養しておきます。

件のHTML

※ 名前等いろいろ伏せていますが構造的にはほとんど変えていません

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<head>

<title>HogeView</title>

<meta name="viewport"
        content="initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<style type="text/css">
.fsize {
        font-size: 75%;
}

</style>
<link rel="stylesheet" href="Hoge_sample.css" type="text/css">
</link>

<script type="text/javascript">
        var agent = navigator.userAgent;
        
        // タイトル設定
        function setTitle(_title) {
               if (agent.search(/Mac OS/) != -1) {
                              document.location="iphone://setTitle?title=" + _title;
               } else if (agent.search(/Android/) != -1) {
                              android.setTitle(_title);
               }
        }

        // リロード
        function reloadWebView() {
               if (agent.search(/Mac OS/) != -1) {
                              document.location="iphone://reloadWebView";
               } else if (agent.search(/Android/) != -1) {
                              android.reloadWebView();
               }
        }

        // 外部アプリ起動(例:Hogeアプリ)
        function startApp() {
               if (agent.search(/Mac OS/) != -1) {
                              document.location="iphone://startApp?&siteUrl=hoge://&storeUrl=https://example.com";
               } else if (agent.search(/Android/) != -1) {
                              android.startApp("hoge://","https://example.com")
               } else {
                              window.open('https://example.com', '_blank');
               }
        }
</script>
</head>
<body class="fsize">
<!-- 表形式:2列。アイコン表示:罫線なし -->
<table width="100%" border="0">
<caption></caption>
<thead></thead>
<colgroup col span="2">
<!-- 1列目の幅 -->
<col width="200">
<!-- 2列目の幅 -->
<col width="200">
</colgroup>

<tbody>

<tr>
<!-- WEBページ起動 別ウィンドウ表示 ほげほげ -->
<td valign="top">
<figure style="text-align:center;"id="HgHgInf">
<a href="https://example.com" target="_blank">
<img src="images/hoge_logo.png" alt="Hoge Hoge Information" width="60" height="60" hspace="0" valign="top">
</a>
<figcaption>Hoge Hoge Information</figcaption>
</figure>
</td>

<!-- WEBページ起動 別ウィンドウ表示 ふがふが -->
<td valign="top">
<figure style="text-align:center;"id="FugaInf">
<a href="https://example.net" target="_blank">
<img src="images/fuga_logo.png" alt="Fuga Info" width="60" height="60" hspace="0" align="top">
</a>
<figcaption>Fuga Info</figcaption>
</figure>
</td>
</tr>

<tr>
<!-- アプリ紹介ページ 別ウィンドウ表示 ~ほげふが紹介ページ~ -->
<td valign="top">
<figure style="text-align:center;"id="HogeFuga">
<a href="javascript:void(0)" onclick="startApp();">
    <img src="images/hogefuga_ico.png" alt="HogeFuga" width="60" height="60" hspace="0" valign="top">
</a><br>
    <img src="images/hogefuga_logo.png" alt="HogeFuga" width="87" height="20" hspace="0" valign="top">
</figure>
</td>

<!-- WEBページ起動 別ウィンドウ表示 ~ふーばー~ -->
<td valign="top">
<figure style="text-align:center;"id="fooBar">
<a href="https://example.org" target="_blank">
<img src="images/foobar_logo.jpg" alt="Foo Bar Organization" width="90" height="40" hspace="0" valign="top">
</a>
<figcaption>Foo Bar Organization</figcaption>
</figure>
</td>

</body>
</html>

賢明なる皆様は普段こんなHTMLを読むことはないでしょうが、本当にこんな感じでした。

f:id:vviilloovv:20200214143843p:plain

ブラウザで表示するとこんな感じ。画像ファイルは置いてません。
さて、順番に見ていきましょう。

問題点を見てみよう

タグの重複

5行目あたりなんですが、

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<head>

headタグが重複しています。なぜ。
このheadタグ、ここで閉じるべきなのかというとそうではなく、54行目でちゃんと閉じタグがあるんですよね。
なので単純ミスなのかな、という気がします。なぜ。

謎のCSSファイル読み込み

17行目に<link rel="stylesheet" href="Hoge_sample.css" type="text/css">とありますね。
どうやらHoge_sample.cssというCSSファイルを読み込んでいるようです。なのでファイルサーバを確認してみました。
そんなファイルは存在しませんでした。まぁそんなこったろうと思ったよ。_sampleの箇所は名称変更してないし。
おそらくその辺に転がっていたHTMLサンプルをコピペしてきたのでしょう。よくある話ですね。

タグが閉じていない

そもそもこのファイルをIDEで開いたらエラーが出たんですよ。「エレメントが閉じられていない」みたいなエラー文言。
そうなんです。</body>の周辺を見ていただけたらなんとなくわかるかもしれません2が、trタグとtbodyタグとtableタグが閉じられていません。

根本原因が見えてきましたね。

調べてみたらtbodyの閉じタグは省略可能のようです。 詳しくは後述。

valign間違い探し

CSSを読み込んでいないのでHTML内にstyle要素を直書きしているため、割と多くの箇所にvalign="top"が記載されているのですが、84行目に注目すると、<img src="images/fuga_logo.png" alt="Fuga Info" width="60" height="60" hspace="0" align="top">となっており、ここだけvalignalignになっています。サイゼリヤかよ。

コピペ漏れでしょうか。もしかしたら意図してこうしているのかもしれませんが、その場合topは指定しても意味がないんですよね。

ここまでは「絶対おかしい」と指摘できるポイント。ここからは「いやまぁいいけどさぁ」なポイントです。
※ 個人の感想です。

インデント

一番気になるのはここですよね。headbodyがインデントなしなのは人によりけりなので気になりませんが、せめてtable配下は字下げしたいですね。左の壁に粘着テープでも貼ってあるんか???

大方ページのソースを表示でHTMLが自動生成されているサイトをコピペしたのではなかろうかと推測されますが、試しにはてなブログ(この画面)のソースを表示してみても

  <div class="curation-header header">
    <h2>
      編集サイドバー
    </h2>
    <p>よく使う機能は、ショートカットとしてタブに追加できます。</p>
  </div>

ちゃんとインデントされているんですよね。うーん。

空のタグ

58行目あたりなのですが、

<caption></caption>
<thead></thead>

中身がないタグがあるんですよね。これは省略可能な気がしますが、どうなんでしょうか。
試しに省略してみても問題なく表示はできましたが記載するお作法なのでしょうか…?

コメント内に謎の例示

43行目あたりに// 外部アプリ起動(例:Hogeアプリ)とあります。
この例は何なんでしょうか。HTML内にはこのメソッドを呼び出している箇所が1か所しかないんですよね。追加する方針でもあるのかしら…?

大きさの単位が不明

結構いろいろな箇所にwidth="60" height="60"という表記があります。きっと単位はpxなのでしょう。emだと大変なことになりそうですし。でも単位を書かないってどうなのでしょうね。line-heightに記載しないのはよく見るのですが。
ちなみに私は中学生くらいの頃に図形の問題で単位が書かれていないのにcmだったかを入れて不正解をもらったことがあります。許せん(自業自得)。

列のグループ化の意図が不明

60行目あたりの

<colgroup col span="2">
<!-- 1列目の幅 -->
<col width="200">
<!-- 2列目の幅 -->
<col width="200">
</colgroup>

ここなんですが、これを記載する意図が分からないんですよね。これって

ID 名前 生年月日
1 花澤香菜 1989年2月25日
2 小倉唯 1995年8月15日
3 豊崎愛生 1986年10月28日

こんな感じで列の幅が違うことを明示的に示すために利用すると考えています。
でも上記のソースだとこの幅が同じなんですよね。明示的に同じ幅にしたかったのかもしれない。なあにこれえ。

謎のID付与

随所に見られるid="HgHgInf"のようなIDはいつ使うのでしょうか。CSSでもJavaScriptでも使用している形跡がみられないんですよね。必要性が気になるところ。

もっというとC言語の変数名のような謎の省略がされていたり、1文字目が大文字になっていたり小文字になっていたりと統一性もない。CSSで指定するならclass指定がよく見るのですがなんなんでしょうか。私今日ずっと混乱してるな。

こんなところでしょうか…?探せばもっとあるかも??私には何もわからないよ。

どうしたか

  • HTMLを全体的に修正
  • CSSを分離

上記2点を修正してそのファイルを使ってくれないかと懇願しました。
現在は「ちょっと待ってね」状態なので通るといいなあ、といったところ。

修正後を貼っておきます。多分これでもまだまだだと思うのでマサカリ大歓迎。
CodePenは会社のWebフィルターでブロックされてしまうので貼れませんでした。かなしい。

  • HTML
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>HogeView</title>
  <meta name="viewport" content="initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
    var agent = navigator.userAgent;
        
    // タイトル設定
    function setTitle(_title) {
      if (agent.search(/Mac OS/) != -1) {
        document.location="iphone://setTitle?title=" + _title;
      } else if (agent.search(/Android/) != -1) {
        android.setTitle(_title);
      }
    }

    // リロード
    function reloadWebView() {
      if (agent.search(/Mac OS/) != -1) {
        document.location="iphone://reloadWebView";
      } else if (agent.search(/Android/) != -1) {
        android.reloadWebView();
      }
    }

    // 外部アプリ起動
    function startApp() {
      if (agent.search(/Mac OS/) != -1) {
        document.location="iphone://startApp?&siteUrl=hoge://&storeUrl=https://example.com";
      } else if (agent.search(/Android/) != -1) {
        android.startApp("hoge://","https://example.com")
      } else {
        window.open('https://example.com', '_blank');
      }
    }
  </script>
  <link href="https://unpkg.com/sanitize.css" rel="stylesheet" />
  <link rel="stylesheet" href="links.css" type="text/css" />
</head>

<body>
  <table>
    <tbody>
      <tr>
        <!-- WEBページ起動 別ウィンドウ表示 ほげほげ -->
        <td>
          <figure>
            <a href="https://example.com" target="_blank"" >
              <img class="hoge-info" src="images/hoge_logo.png" alt="Hoge Hoge Information">
            </a>
            <figcaption>Hoge Hoge Information</figcaption>
          </figure>
        </td>
        
        <!-- WEBページ起動 別ウィンドウ表示 ふがふが -->
        <td>
          <figure>
            <a href="https://example.net" target="_blank" >
              <img class="fuga-info" src="images/fuga_logo.png" alt="Fuga Info">
            </a>
            <figcaption>Fuga Info</figcaption>
          </figure>
        </td>
      </tr>
      
      <tr>
        <!-- 外部アプリ紹介ページ 別ウィンドウ表示 ~ほげふが紹介ページ~ -->
        <td>
          <figure>
            <a href="javascript:void(0)" onclick="startApp();">
              <img class="hogefuga-icon" src="images/hogefuga_ico.png" alt="HogeFuga">
            </a><br>
            <img class="hogefuga-logo" src="images/hogefuga_logo.png" alt="HogeFuga">
          </figure>
        </td>
        
        <!-- WEBページ起動 別ウィンドウ表示 ~ふーばー~ -->
        <td>
          <figure>
            <a href="https://example.org" target="_blank">
              <img class="foobar" src="images/foobar_logo.jpg" alt="Foo Bar Organization">
            </a>
            <figcaption>Foo Bar Organization</figcaption>
          </figure>
        </td>
      </tr>
    </tbody>
  </table>
</body>
</html>
body {
  font-size: 75%;
}
td {
  valign: top;
}
table {
  width: 100%;
  border: 0;
}
figure {
  text-align: center;
}
img {
  hspace: 0;
  valign: top;
}
img.hoge-info {
  width: 60px;
  height: 60px;
}
img.fuga-info {
  width: 60px;
  height: 60px;
}
img.hogefuga-icon {
  width: 60px;
  height: 60px;
}
img.hogefuga-logo {
  width: 87px;
  height: 20px;
}
img.foobar {
  width: 90px;
  height: 40px;
}

できるだけ元ソースを維持したまま修正してこんな感じに。
これが正しいかもわからない。私は今霧の中にいる。

どうしてこうなったか

原因は…何なんでしょうね。
割とおじさん自身にある気がしていて、  

  • そもそもの知識不足
  • コピペでこれまで何とかなってきた謎の自信
  • 人に訊けないプライドと年齢

あたりは大きい気がしています。
防ぐ方法としては

  • レビューをする
  • もう少し何とかなりそうなひな型を作っておいて参考にしてもらう

あたりですかね。

あとさっきCSSのタグについて見つけたサイトがあります。

html-coding.co.jp

こちらのサイトの例えばtableタグのページ。

f:id:vviilloovv:20200214174428p:plain

実に「それっぽく」ないですか…?

ちなみに少し下にスクロールするとちゃんとインデントされているサンプルが掲載されています。
サイトは悪くない。

f:id:vviilloovv:20200214175827p:plain

気になるのはこのサイトがHTML5とCSS3に対応していないことですが、それはサイト運営側の話なので私が何か言える立場ではないですね。

今日の教訓

クソコードに気をつけて

結局修正するのは私のような末端になるんですよね。うまいこと受け流して生きていきましょう。
私はこれから別のバグ修正が入ったので終電の心配をしながら作業を続けます。

ではまた。


  1. そもそもが無理めなスケジュール、割と抵抗はした。

  2. そもそも読みたくない? あなたは健全です。

【セトリ】 花澤香菜 Live 「Nobuyuki Shimizu Presents 花澤香菜×佐橋佳幸×清水信之」 セットリスト

2020/2/1にeplus LIVING ROOM CAFE & DININGで開催された
「Nobuyuki Shimizu Presents
花澤香菜×佐橋佳幸×清水信之
セットリストです。

第一部

1: 大丈夫
2: ミトン
3: 夜は伸びる
4: スケッチブックを持ったまま(カバー)
5: 1/2(カバー)
6: パン屋と本屋
7: Brand New Days
8: 恋する惑星
アンコール
9: flattery?

第二部

1: 大丈夫
2: ミトン
3: 夜は伸びる
4: スケッチブックを持ったまま(カバー)
5: 1/2(カバー)
6: パン屋と本屋
7: Brand New Days
8: 恋する惑星
9: Trace
10: flattery?

f:id:vviilloovv:20200201214911j:plain

【セトリ】 小倉唯 FCイベント 「Yui's*Company.社員総会 ~New Year Party♪2020~」 ライブパート セットリスト

2020/1/3に舞浜アンフィシアターにて開催された、
小倉唯 FCイベント
Yui's*Company.社員総会
~New Year Party♪2020~
ライブパートのセットリストです。

1: winter tale
2: 昼の部:Merry de Cherry
夜の部: FUN FUN MERRY JAM
3: 赤いリボン
4: Destiny
5: Brand-New-Road
6: I・LOVE・YOU!!

f:id:vviilloovv:20200103182750j:plain