お知らせ

現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。

🚀 やりたいこと

  • ApexドメインのDNSレコードで次の振り分けを行いたい
    • AレコードをGitHub Pagesへ
    • MXレコードをさくらのレンタルサーバーにあるメールボックスへ

⚗️ ハマったところ

以下のようにMXレコードをIPで指定するとメールが受信できないケースがありました具体的にはさくらのメールボックスやGMailから投げると届くのですが、WantedlyやMeetyからの自動配信メールが届かない状態でした原因はDNSレコードの状態がRFC 1035に準拠しない事と思われます

ホスト レコードタイプ データ
lycolia.info A 185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
lycolia.info MX 10 163.43.80.45.

🛠️ 解決方法

Aレコードにメール用のサブドメインを追加し、これにIPを設定し、MXレコードからはそのドメインを参照することで上手くいくようになりますサブドメインはmail.である必要はなく、別になんでもいいみたいですWebサーバーとメールサーバーが同じならApexドメインでも行けるっぽい

ホスト レコードタイプ データ
lycolia.info A 185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
mail.lycolia.info A 163.43.80.45
lycolia.info MX 10 mail.lycolia.info.

📖 参考情報

投稿日:
技術::Cookieジャンル::調査

各サービスの振る舞いが少し気になったので適当にサッと軽く見たメモです
ある程度モダンそうなところを適当に選んだので特に観点とかはないです

確認環境

  • Google Chrome 91.0.4472.124(Official Build)
  • Cookie offはファーストパーティCookieをブロックして確認

超簡単なまとめ

サービス Cookie off ログイン JS off
Qiita エラー 一部描画が欠損
Twitter 何も起きない エラー
GitHub エラー 一部描画が欠損
Google エラー 一部描画が欠損, 場合によってエラー
Youtube 未確認 読込中になる
mercari 未確認 読込中になる
DMM 何も起きない 一部描画が欠損, 警告が出る, 一部機能不全
DLSite ログアウトページに飛ぶ 一部描画が欠損, 場合によって例外が出る
Skeb 白紙ページ 白紙ページ
Tayori エラー 一部描画が欠損, 一部機能不全
SoundCloud 何も起きない エラー

Qiita

ログインしようとするとエラーになります

image-1656171614782.png

JS off

ページの一部が欠損しますが、特にエラーは出ない模様

Twitter

ログインしようとするとログインページでループします

image-1656171633639.png

JS off

エラーが出ます

image-1656171647796.png

GitHub

めちゃくちゃシンプルなエラーが出ます

image-1656171657401.png

JS off

ページの一部が欠損し、場所によってはエラーになる模様

image-1656171663805.png

Google

検索ページとログインページで確認

ログインしようとするとエラーになります

image-1656171670802.png

JS off

検索はできましたが、ログインしようとするとエラーになります

image-1656171677370.png

Youtube

Googleと同じなのでパス

JS off

読込中の状態で止まります

image-1656171688195.png

mercari

未確認

JS off

読込中の状態で止まります

DMM

Twitter同様にログインページでループしました

image-1656171751059.png

JS off

ページ上部に通知が生えてきます
ついでにページ表示が崩れたり、一部のページ遷移が機能しなくなりました

image-1656171759245.png

DLSite

ログインしようとするとログアウト処理に飛びました

image-1656171766632.png

カートにアイテムを入れても入りません

image-1656171772865.png

JS off

ページの一部が欠損するので成人向けサイトでも超健全に!

image-1656171779255.png

カートからアイテムを消すと謎のエラーが出ますが、カートからは一応消えます

image-1656171785967.png

skeb

白紙ページになります
Consoleに次のエラーが出るので想定外ということでしょう

DOMException: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.

JS off

白紙ページになりました

Tayori

エラーになります

image-1656171796586.png

JS off

  • トップページの一部が欠損
  • トップページからヘッダーのリンクを叩くと表示されるコンテンツが白紙に
  • ユーザーのFAQページは検索が動作不能

SoundCloud

ログインできずにループします

JS off

エラーになります

image-1656171803459.png

投稿日:
OS::Windows技術::RDP

Windows標準のリモートデスクトップを使うケース

確認環境

Env Ver
Windows 10 Pro 19042.985

やり方

  1. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\ParametersにDWORDでDisableTaskOffloadを切り、1を設定してOSを再起動
  2. 適当な音声を再生し、停止したときに遅延がなければOK

備考

  • DiscordやSlackがホストかクライアントでマイクをlistenしてると遅延が起きることがあるので切っておくと安定することがある
  • 数時間起動してると徐々にずれてくるので、その場合は手間になるが定期的にRDPを繋ぎ直すと良い
  • ZOOMなどの通話をする手前で繋ぎ直すと有効だが、通話が長時間に渡ると微妙になる
投稿日:
言語::Perl技術::sendmail

文字コードはiso-2022-jp

SMTPの設定例

export EMAIL_SENDER_TRANSPORT=SMTP
export EMAIL_SENDER_TRANSPORT_host=smtp.example.com
export EMAIL_SENDER_TRANSPORT_port=1025

サンプルコード

use strict;
use Email::MIME;
use Email::MIME::Creator;
use Email::Sender::Simple qw(sendmail);

my $subject = Encode::encode('MIME-Header-ISO_2022_JP', 'さぶじぇくと');
my $mail    = Email::MIME->create(
    'header' => [
        'From'    => Encode::encode('MIME-Header-ISO_2022_JP', 'foo@example.com'),
        'To'      => Encode::encode('MIME-Header-ISO_2022_JP', 'to@example.com'),
        'Subject' => $subject,
    ],
    'attributes' => {
        'content_type' => 'text/plain',
        'charset'      => 'ISO-2022-JP',
        'encoding'     => '7bit',
    },
    'body' => Encode::encode('iso-2022-jp', 'ほんぶん!'),
);
投稿日:
言語::C言語言語::PHP技術::CGI

ふとした気づき

今時CGIなんて言わない?知らない?そんなこたぁいいんですよ。
ふと思ったんですよ、CGIとCLIアプリって本質的に同じものなんじゃないかなって。
だってPHPってこんなふうに書いてブラウザでアクセスしたらいろはにほへとって出るじゃないですか?
そしてこれをphp index.phpみたいにして叩いてもいろはにほへとって出ますよね?

<?php

echo 'いろはにほへと';

そう、気付いてしまったのです。
実はCGIって本質的にはCLIアプリなのではないかと…。
むしろ何が違うんでしょう?

仕組みを調べてみることに

気になったのでどういう仕組で動いてるのか軽く調べるために、敢えてC言語でCGIを作ってみることに。
今までC言語でCGIとか狂人のやることって印象があったのですが、意外とやってみると大したことはないというか、まぁ大したものを作ってないから当たり前なんですが…。
これが何をしているかというと、環境変数を取ってきて標準出力に吐いてるだけなので、どっからどう見てもCLIアプリです。

#include <stdio.h>
// getenv
#include <stdlib.h>
// strcmp
#include <string.h>

/*
    get path for after hostname
*/
char* getPath(void) {
    char *path = getenv("REQUEST_URI");

    return path;
}

int main(void) {
    // put http header
    printf("Content-type: text/plain\n\n");
    char *path = getPath();

    // show current path
    printf("Current path: %s\n", path);
    // routing, required .htaccess to serve on apache
    if (strcmp(path, "/foo") == 0) {
        printf("hoge");
    } else if (strcmp(path, "/bar") == 0) {
        printf("piyo");
    } else {
        printf("fuga");
    }

    return 0;
}

実際に動かしてみたところ

CGIとして

image-1656167307118.png

image-1656167357025.png

CLI として

image-1656167365550.png

辿り着いた結論

恐らくこれは動作環境が重要なのであって、多分CGIとCLIアプリの作りとしては大きな違いはないのではないか?というのが辿り着いた結論です。
いやまぁ引数をargvから取るか環境変数から取るかは結構違う気もしますが、基本的に表示したいものを標準出力に吐く点は同じですし、別にCGIでTCPソケットを触るわけでもないので、同じようなものでは?と思った次第。
これは多分、 HTTPサーバーを通すことで標準出力がHTTPレスポンスに出力され、 Xサーバーを通すなら画面に、プリンタサーバーを通せば紙にといった具合に、どこのサーバーを通して標準出力をするかで出てくるところが変わるのでは?と感じました。(細かいことを言うともっと複雑らしい)
多分ApacheとかのHTTPサーバーはTCPソケットをいい感じにやってくれて、 HTTPヘッダを環境変数に入れてCGIスクリプトを起動といったところをしてくれているのではないかと思ったので、暇な時にTCP通信から始めるHTTPサーバーの実装でもやってみたいところですね…。

おまけ

取り敢えずPHPのCGIをCLIとして動かせるやつです。

<?php

echo $_SERVER['REQUEST_URI'];