mayaの実験場

この人生は沼だらけ

LINUXのbashで流したコマンドの一覧を取得する&削除する

f:id:xx_maya_xx:20191217121245p:plain

ぶっちゃけ今更ググるのか?シリーズ。

bashで死ぬ程試行したコマンドのログをひっくり返したくなった為、history コマンドをググる

www.atmarkit.co.jp

なお検索したい際は

history | grep hogehoge

こうやりました。

んで、参照できるということは実ファイルがあるはず。実ファイルは .bash_history

www.atmarkit.co.jp

実ファイルに保存してるということは、どえらい行数残ってるとサーバの容量を喰っている筈なので

qiita.com

適宜削除します。

Macのみで証明書の.p12ファイルを生成する手順

f:id:xx_maya_xx:20191213142327p:plain

あまり需要があるかわからないのですが。

1.キーチェーンアクセスを開く。
f:id:xx_maya_xx:20191213142506p:plain

2.認証局に証明書を要求し、よしなに.certSigningRequestファイルを作る

f:id:xx_maya_xx:20191213142736p:plain
f:id:xx_maya_xx:20191213142840p:plain

必ずディスクに保存します。

3.いま作った名称でキーチェーンアクセスを検索

f:id:xx_maya_xx:20191213142931p:plain

4.秘密鍵と公開鍵が見えると思うので、秘密鍵の方の行をクリックして書き出しを行う

f:id:xx_maya_xx:20191213143041p:plain

以上、どなたかのお役に立てれば。

その昔ネットショップ制作詐欺にかかった振りしてみた話

f:id:xx_maya_xx:20191213124413p:plain

今朝のワイドショー見てて思い出した。

私のところによりにもよってネットショップ制作詐欺の案内の電話が来たことがありました。orz

securitynews.so-net.ne.jp

  • 好きなもの選んでネット上でセレクトショップ作ってもらってOK
  • 仕入れ、在庫の手間不要
  • 最初にサーバを数万円でセットアップ
  • 月何万円で運営代行
  • 既に儲かってる人が指導してくれますw
  • んで、私幾ばくか儲かるそうな

とツッコむ隙もなくテンプレ捲し立てられてたんですが、聞きながら脳内で軽くツッコんでましたw
なんで脳内で留めてたかって言葉に出してツッコむとそこで電話ガチャ切りされて、楽しめなさそうだったし、
最初に「こちらWebプログラマなんですが」と言ったのにメチャクチャ営業トーク頑張ってるので、労力には報いてあげよう成層圏からの上から目線で思っちゃったのでしたw

  • 好きなもの選んでネット上でセレクトショップ作ってもらってOK → ほんとか?仕入れ品の販路は?
  • 仕入れ、在庫の手間不要 → いや発送やら何やら誰かに代行させるの?タダで働くバカいないでしょ?
  • 最初にサーバを数万円でセットアップ → 高ぇよ! こっちで月$3のAWSで建てるから、ファームウェアよこせよ
  • 月何万円で運営代行 → だから、高ぇよ! どこのこうきゅうなサーバ使ったらそんな金額になるんだよ
  • 既に儲かってる人が指導してくれますw → だからその人も幾ばくか取るでしょ?タダで働くバカいないでしょ?
  • んで、幾ばくか儲かるそうな → ええ、御社がだろ。 私が儲かる要素無いんですがww

取り敢えず最後まで聞いちゃったんですが

最初にサーバを数万円でセットアップ

「すみませんそんなお金用意できないんで(=「売上が発生する前からみかじめ取るの、自分で言ってておかしいと思わないのか?まさかお前そのデスク自前で買ってて、更にショバ代電話代他を会社に払ってんのかw」を意訳)」で断ることができました。

しかもこれ、「ネットショップ 副業 詐欺」でググると2019年更新の記事がサクサク掛かってくるのですが
何が凄いっていまの所属で勤続8年なので、少なくともその更に2,3年前の話。このパターンで10年やれてるってことなんです。

滅べばいいのに。

PDFLibをmac上のLAMP環境で試してみた

f:id:xx_maya_xx:20191211233505p:plain

頭の中はすっかり年末です。

さて諸般の事情で、PDFLibPHPによる電子署名を試してみることにしました。

www.pdflib.jp

と言っても、電子署名を行うのには
PDFLib

www.pdflib.jp

PLOP および PLOP DS

www.pdflib.jp

の3製品を使います。

そして、PLOPの方が2019/12/11現在PHP7.2まで対応しているので、すべての作業にかかる前にPHPのバージョンを合わせておきます。

PDFLibは、ここから所定のプラットフォームのアーカイブをダウンロード。

www.pdflib.jp

Macの場合.dmgファイルですが、この中のbindフォルダ配下から該当のバージョンのフォルダの中の php_pdflib.so ファイルをPHPのextensionファイル(/usr/local/lib/php/extensions/ とか)に配置したうえ、php.iniに

extension=/usr/local/lib/php/extensions/php_pdflib.so

とか記述します。

PLOPも同様に所定のプラットフォームのアーカイブをダウンロード。

www.pdflib.jp

同様にMacの場合.dmgファイルですが、この中のbindフォルダ配下から該当のバージョンのフォルダの中の php_pdflib.so ファイルをPHPのextensionファイル(/usr/local/lib/php/extensions/ とか)に配置したうえ、php.iniに

extension=/usr/local/lib/php/extensions/php_pdflib.so

とか記述します。

ここまで対応してapacheを再起動すると、phpinfoにこの様によしなに記述されるはずです。

f:id:xx_maya_xx:20191211235115p:plain

f:id:xx_maya_xx:20191211235129p:plain

phpinfoに記述されない場合は、php7.2なら
php-720
php-720-nts
とフォルダ分けがされていると思うので、このntsがついた方を試すと幸せかもです。

電子署名を入れるサンプルはこちら。

www.infotek.co.jp

んで今回のオーダーはここから、署名バージョンを重ねないとならないのでした。

このソースを2ファイル作って、後ろのファイルでは既に署名のついたファイルを元ファイルとして読み込み…

f:id:xx_maya_xx:20191213123928p:plain

よっしゃ。これが tcpdf ではできないんだ。

教訓。お金さえかければなんとかなることもある!w

AWS Lightsailで独自ドメイン入れたらgetimagesizeでConnection refusedした話

f:id:xx_maya_xx:20191211132818p:plain

仕様要件

AWS Lightsail上のAmazon Linuxにて運用。
Lightsail側で独自ドメイン適用。
あとmod_rewrite.htaccessで強制SSL
画像群は同一サーバに置く。S3は使わない。

同一サーバ内の画像フォルダの画像をギャラリー表示したいオーダー。
今回は画像のギャラリーにPhotoSwipeを利用。

photoswipe.com

このリンクの「How to build an array of slides from a list of links」を適用したかったので

photoswipe.com

<div class="my-gallery" itemscope itemtype="http://schema.org/ImageGallery">

    <figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
        <a href="large-image.jpg" itemprop="contentUrl" data-size="600x400">
            <img src="small-image.jpg" itemprop="thumbnail" alt="Image description" />
        </a>
        <figcaption itemprop="caption description">Image caption</figcaption>
    </figure>

    <figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
        <a href="large-image.jpg" itemprop="contentUrl" data-size="600x400">
            <img src="small-image.jpg" itemprop="thumbnail" alt="Image description" />
        </a>
        <figcaption itemprop="caption description">Image caption</figcaption>
    </figure>

</div>

こんな感じの記述が要求されていた。なに?画像の縦横のサイズをよこせとな?

ならばと、画像群を格納したarrayを回し

<?php foreach($photos as $key => $value):?>
<?php $picture_size = getimagesize((empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER['HTTP_HOST'].$value);?>
<figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
<div class="thumb photo_gallery_item" style="background-image:url(<?=$value?>)" href='<?=$value?>' data-size="<?=$picture_size[0]?>x<?=$picture_size[1]?>">
  <a href='<?=$value?>' itemprop="contentUrl" >&nbsp;</a>
  <img src="<?=$value?>" itemprop="thumbnail" alt="" style='display:none;' />
</div>
</figure>
<?php endforeach;?>

こうやってみた。

<?php $picture_size = getimagesize((empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER['HTTP_HOST'].$value);?>

この行で叱られました。orz

A PHP Error was encountered
Severity: Warning

Message: getimagesize(http://独自ドメイン/画像.jpg): failed to open stream: Connection refused

imgタグの中身のは出てくるんです。

<?php $picture_size = getimagesize("https://" . $_SERVER['HTTP_HOST'].$value);?>

強制SSLにしたのでこうしたが、改善されずorz

試しにサーバに入りwgetで画像のURLを叩くも、自分のサーバの443ポートが開いてない様なお叱りをいただく。

確かにawsのロードバランサの仕様はそれでいいんだが…

画像群は同一サーバに置く。S3は使わない。

そうでした。今回はこれでした。
同じサーバなんだからサーバ内の絶対パスにすれば解決じゃない。

<?php //$picture_size = getimagesize((empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER['HTTP_HOST'].$value);?>
<?php $picture_size = getimagesize( FCPATH .$value);?>

FCPATH は /var/www/html などのCIのインストールフォルダです。

これで、事なきを得ました。

さてもう年の瀬ですよっと。
週末はもう世田谷ボロ市、その次の週末は冬至いとこ煮食べたらあっという間にガキの使いです。
でもあまり追い詰められてる感はない、というか年々追い詰められてる感が薄れていく。何故だw

INTL_IDNA_VARIANT_2003がdeprecatedしたので対策

f:id:xx_maya_xx:20191126141059p:plain

やっとホームグラウンドのLAMPに戻って来ました。そしたら

Severity: 8192 --> idn_to_ascii(): INTL_IDNA_VARIANT_2003 is deprecated /system/libraries/Email.php 1856

まあCIのバージョンが少し古かったんですが、PHP本家を参照するとこのような話でした。

https://www.php.net/manual/ja/migration72.deprecated.phpwww.php.net

INTL_IDNA_VARIANT_2003 バリアント
Intl 拡張モジュール では、INTL_IDNA_VARIANT_2003 バリアントは非推奨になりました。 これは idn_to_ascii() および idn_to_utf8() 関数の デフォルト値として現在使われています。PHP 7.4 ではこのデフォルト値が INTL_IDNA_VARIANT_UTS46 に変更される予定ですし、 PHP の次のメジャーバージョンアップでは、 INTL_IDNA_VARIANT_2003 が削除される予定です。

とのことなので、デフォルト値なら明示的に変更すればいいじゃない。関数のusageを参照

https://www.php.net/manual/ja/function.idn-to-ascii.phpwww.php.net

idn_to_ascii ( string $domain [, int $options = 0 [, int $variant = INTL_IDNA_VARIANT_2003 [, array &$idna_info ]]] ) : string


variant
IDNA 2003 の場合は INTL_IDNA_VARIANT_2003、あるいは UTS #46 の場合は INTL_IDNA_VARIANT_UTS46。

これで該当箇所を補います。

/system/libraries/Email.php *バージョンにより厳密な行番号が異なる場合があるので行番号は割愛

/**
 * Email Validation
 *
 * @param   string
 * @return  bool
 */
public function valid_email($email)
{
    if (function_exists('idn_to_ascii') && $atpos = strpos($email, '@'))
    {
        $email = self::substr($email, 0, ++$atpos).idn_to_ascii(self::substr($email, $atpos), 0, INTL_IDNA_VARIANT_UTS46);
    }

    return (bool) filter_var($email, FILTER_VALIDATE_EMAIL);
}
/**
 * Validate email for shell
 *
 * Applies stricter, shell-safe validation to email addresses.
 * Introduced to prevent RCE via sendmail's -f option.
 *
 * @see https://github.com/bcit-ci/CodeIgniter/issues/4963
 * @see https://gist.github.com/Zenexer/40d02da5e07f151adeaeeaa11af9ab36
 * @license https://creativecommons.org/publicdomain/zero/1.0/  CC0 1.0, Public Domain
 *
 * Credits for the base concept go to Paul Buonopane <paul@namepros.com>
 *
 * @param   string  $email
 * @return  bool
 */

protected function _validate_email_for_shell(&$email)
{
    if (function_exists('idn_to_ascii') && $atpos = strpos($email, '@'))
    {
        $email = self::substr($email, 0, ++$atpos).idn_to_ascii(self::substr($email, $atpos), 0, INTL_IDNA_VARIANT_UTS46);
    }

    return (filter_var($email, FILTER_VALIDATE_EMAIL) === $email && preg_match('#\A[a-z0-9._+-]+@[a-z0-9.-]{1,253}\z#i', $email));
}

/system/libraries/Form_validation.php

/**
 * Valid Email
 *
 * @param   string
 * @return  bool
 */
public function valid_email($str)
{
    if (function_exists('idn_to_ascii') && preg_match('#\A([^@]+)@(.+)\z#', $str, $matches))
    {
        $str = $matches[1].'@'.idn_to_ascii($matches[2], 0, INTL_IDNA_VARIANT_UTS46);
    }

    return (bool) filter_var($str, FILTER_VALIDATE_EMAIL);
}

Apple IDの2ステップ認証と2ファクタ認証の違いが把握できず苦労した

f:id:xx_maya_xx:20191126133501p:plain

さて、App Store Connect、Apple Developer Center などで作業する際に、iPhone上で何やら訊かれるようになりました。

f:id:xx_maya_xx:20191126135044j:plain

f:id:xx_maya_xx:20191126135058j:plain

この下の画面の確認コードをブラウザで入力しないと何もできませぬ。

この人が2ファクタ認証というものです。

support.apple.com

で、我々はクライアント殿よりiOSアプリのロンチ、プッシュ通知など諸々の情報をApple Developer Centerから貰っていただきたかったのが、通知が飛ばず入れないとおっしゃられてしまうのでした。orz

Apple IDが同じならその端末のどれかに飛ぶ筈ですし、testflightの通知は飛んでる筈なんです。

肝心の2ファクタ認証はiOS端末側で設定する筈なんですが、我々の端末で確認してもちゃんと設定メニューがある。

あまりに話が通じないので端末を見せていただいて確認したところ、クライアント殿のApple IDで2ステップ認証が設定されておりました。

support.apple.com

そりゃわかんねえよ。確かにこんなところプログラマじゃなきゃ見ねえよ。だいたい、呼び名がややこしい!!orz

ひとまず、事なきを得た模様です。お客さん逆ギレしなくたっていいじゃないかorz

なおまるっきり同じ轍を踏んでいた記事

medium.com