やったこと

webサービスを作るときに考えたことを垂れ流します

このブログについて

absgといいます。webサービスのこととかいろいろ書いてます。

最近作ったサイト
VTuberスパチャ一覧表
全国で発生した事件のデータベース「地域の事件簿」
みんなでなかよく政治の話!「なかよし討議!」
女子のつぶやきまとめ「Twiggy×Twiggy!」



連絡先
何かご相談がある人はご連絡ください。
http://absgexp.net/prof/con.html

    (⌒)
  ∧__∧ (~)
 (。・ω・。)( )
 { ̄ ̄ ̄ ̄}
 {~ ̄お__}  ゴユックリ ドゾー
 {~ ̄茶__}
 {____}

stripe決済のwebhookってもし受信できなかったらどうすんだよ・・

stripe決済の実装をしてるんだけど、めっちゃ難しい・・。

とくに、決済状況の確認にWebhookが使われてるのが気になって、悩みこんでしまった。
お客さんがクレカ決済をしたあと、自サーバーのWebhookURLに通知をしてくれるらしいんだけど、こんな通知は受信できる保証が全くない。
ボロサーバーで運営してる小さなサイトなので、きっとサーバーダウンしてることなども多いだろう。

なので、できるだけWebhookを使わずに済むような方法を模索したんだけど、どうもうまい実装を思いつかない。

ふと公式ページを見ると、もしWebhookへの通知が届かなかった場合は、3日間にわたってしつこくリトライを試みてくれるようだ。
これだけしつこく通知してくれるんだったら、もうWebhookを使ってしまってもよさそうかな・・。
もし3日以上受信できない不具合が起きたら、もうしらん。
https://stripe.com/docs/webhooks/best-practices#retry-logic

【iPhone】iMovieで動画を作るとガクガクになってしまう・・

iPhoneでゲーム実況の動画を録画して、iMovieのアプリで加工をしてるんだけど、最近動画がガクガクになってしまう現象に苛まれている・・。
何も環境を変えてないのに突然起き始めた不具合で、原因がよくわからないんだけど、iPhoneを再起動したらなんとか直った。

もし同じ症状の人がいたら、iMovieのアプリをスライドして閉じてみたり、iPhoneを再起動などを試してみたら良いかも。

【Live2d】VtuberになりたいのにAnimazeEditorが動かないぞ!

最近Live2dを使ってゴリゴリ動くアバターを作りたくて、いろいろ調べてる。

Live2dで作ったモデルを「Animaze Editor」というソフト編集して、スマホ上で動かそうとしてるんだけど、このAnimaze Editorが全然動かない!

STEAMでアプリをダウンロードするところまではいったんだけど、起動をするとすぐにクラッシュして落ちちゃうんだよね・・。

開発者にメールをして原因を聞いてみたんだけど、どうも自分パソコンのGPUがしょぼいのがいけないらしい。

OpenGL4.3以上に対応しているマシンでないと、ちゃんと起動できないんだって。
(Animaze Editorだけでなくて、Animaze自身もそうらしい)

AWSとかでWindowsクラウドPCを借りて、もう一回試してみようかな・・。


※追伸
「paperspace」という海外のクラウドサービスで、一番安いWindow10のコンピューターを借りて、その環境でAnimazeEditorを動かしたら無事起動した。

↓導入手順はだいたいこの記事と同じ。
WindowsクラウドGPUサーバーを使って、お手軽にvket4に遊びに行くための方法 - Qiita

これでLive2dのアバターが動かせるぞ!

IBM Cloudのヘンテコ動作、Bacic認証が失敗するぞ・・。

先日からIBM Cloudで開発をする羽目になり、かなり困ってる。
今日はBasic認証のページがうまく動作しなくて一日調べてた。

結論から言うと、「/.bp-config/httpd/extra/httpd-default.conf」なるファイルに、
以下の設定を追記しないとダメということだったらしい。

RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

「$_SERVER['PHP_AUTH_USER']」とか「$_SERVER['PHP_AUTH_PW']」の情報がセットされずに、認証失敗してしまうんだよね。

普通のサーバーだと当たり前に使えてたんだけど、本当はこんな設定が必要なんだね。

ググっても全然情報ないし、設定ファイルも俺様仕様の独自ファイルなので、つまづいたとこは全部気合で調べるしかない。

IBM Cloudのヘンテコ動作、デプロイするとデイレクトリが勝手に外に移動するゾ。

先日から「IBM Cloud」を使って開発してる。

お客さんがコードをそこへコミットしてくれというから、あまり深追いしたくないんだけど、仕方なくいろいろと調べながら開発してる。

無料会員登録をして借りた領域に、試しにPHPのテストコードをプッシュしてみると、いきなりエラーを吐いて動かなかった。

require_onceをしている箇所で「No such file or directory」となっていて、どうもディレクトリが見つからずにエラーしているみたい。

原因はドキュメントルートの下に作った「lib」というディレクトリが、本番環境にプッシュすると勝手にドキュメントルートの上に移動するからだった。

「require_once(__DIR__.'/lib/hoge.php')」などと書くところを「require_once(__DIR__.'/../lib/hoge.php」などと書き直すとやっと動いた。

たしかに普通は「lib」なんてディレクトリをドキュメントルートの下には作らないかもしれないけど、勝手に移動されちゃうなんてどういうことだろう。

自分が知らないだけで、こういう動作をするクラウドサービスってよくあるんだろうか・・?

ともあれこの原因を調べるのに一日費やしてしまったので、IBMはマジ訴訟。

【Wordpress】Smart Custom Fieldsで他人の関連投稿を表示させない!

「Smart Custom Fields」というワードプレスプラグインで、「関連投稿」というカスタムフィールドを作ることができる。
この「関連投稿」で、他人が作った投稿は表示させないで、自分が作った投稿だけを扱えるようにしたかった。
でもどうしてもそういう設定がなかった・・。

しかたがないのでプラグイン内のファイルに直接手を入れることにした。

修正するファイルは「/plugins/smart-custom-fields/classes/fields/class.field-related-posts.php

まずは、80行目あたりを下記のように書き換えた。
ajaxで動的に記事を読み込む箇所を、自分の記事限定とするように修正。
(でも管理者の権限の人だけは全ての記事を見ることができる)

        /**
         * Process that loading post when clicking post load button
         */
        public function relational_posts_search() {
                check_ajax_referer( SCF_Config::NAME . '-relation-post-types', 'nonce' );
                $_posts = array();
                if ( isset( $_POST['post_types'] ) ) {
                        $post_type = explode( ',', $_POST['post_types'] );
                        $args      = array(
                                'post_type'      => $post_type,
                                'order'          => 'ASC',
                                'orderby'        => 'ID',
                                'posts_per_page' => -1,
                                'post_status'    => 'any',
                        );

//MySetting
if (is_admin() && !current_user_can('administrator')){
  global $current_user;
  $args = array(
    'post_type'      => $post_type,
    'order'          => 'ASC',
    'orderby'        => 'ID',
    'posts_per_page' => -1,
    'post_status'    => 'any',
    'author'         => $current_user->ID
  );
}
//MySetting


あともう一か所、150行目あたりの以下の部分を書き換えた。
これは最初にページロードされたときにコンテンツを表示する部分。

        public function get_field( $index, $value ) {
                $name      = $this->get_field_name_in_editor( $index );
                $disabled  = $this->get_disable_attribute( $index );
                $post_type = $this->get( 'post-type' );
                $limit     = $this->get( 'limit' );
                if ( ! $post_type ) {
                        $post_type = array( 'post' );
                }
                if ( ! preg_match( '/^\d+$/', $limit ) ) {
                        $limit = '';
                }
                $posts_per_page = get_option( 'posts_per_page' );

                $args = array(
                        'post_type'      => $post_type,
                        'order'          => 'ASC',
                        'orderby'        => 'ID',
                        'posts_per_page' => $posts_per_page,
                        'post_status'    => 'any',
                );

//MySetting
if (is_admin() && !current_user_can('administrator')){
  global $current_user;
  $args = array(
    'post_type'      => $post_type,
    'order'          => 'ASC',
    'orderby'        => 'ID',
    'posts_per_page' => $posts_per_page,
    'post_status'    => 'any',
    'author'         => $current_user->ID
  );
}
//MySetting

この二か所を修正すればおk。

プラグインにはできるだけ手を入れたくなかったんだけど、他にいい方法思いつかなかったからしょうがないよね・・。