底辺SE奮闘記

年収300万SEブログ

【PHP・meyfa/php-svg】SVGLineのラスタライズメソッドrasterizeを点線 stroke-dasharray対応させる

github.com

オリジナルのmeyfa/php-svgのSVGLineクラスは点線を描画させるstroke-dasharrayに対応していない。

ので、自作。

<?php
namespace App\MyLibs;

use SVG\Rasterization\SVGRasterizer;

/**
 * SVGLineクラスの拡張
 */
class CustomSVGLine extends \SVG\Nodes\Shapes\SVGLine
{
    public function rasterize(SVGRasterizer $rasterizer)
    {
        //オリジナルソースからのコピー
        if ($this->getComputedStyle('display') === 'none') {
            return;
        }

        $visibility = $this->getComputedStyle('visibility');
        if ($visibility === 'hidden' || $visibility === 'collapse') {
            return;
        }
        //オリジナルソースからのコピー ここまで

        $x1 = $this->getX1();
        $y1 = $this->getY1();
        $x2 = $this->getX2();
        $y2 = $this->getY2();

    if ($x1 == $x2 && $y1 == $y2) {
        return;
    }

    $dashParam = $this->getStyle('stroke-dasharray');

        //点線
        if (!empty($dashParam) && $dashParam!=="none") {
            $dashes = explode(" ", $this->getStyle('stroke-dasharray'));
            $n = count($dashes);
            if ($n > 0) {
                $vx = $x2 <=> $x1;
                $vy = $y2 <=> $y1;
                if ($vx == 0) {
                    $diffX = 0; //x方向増分
                    $diffY = 1; //y方向増分
                } else {
                    $rad = atan(abs($y1-$y2)/abs($x1-$x2));
                    $diffX = cos($rad); //x方向増分
                    $diffY = sin($rad); //y方向増分
                }

                $counter = 0;
                $sumLength = 0;
                while (true) {
                    $px = $x1 + $vx * $sumLength * $diffX;
                    $py = $y1 + $vy * $sumLength * $diffY;
                    $qx = $px + $vx * ($dashes[$counter%$n]) * $diffX;
                    $qy = $py + $vy * ($dashes[$counter%$n]) * $diffY;

                    $rasterizer->render('line', array(
                        'x1'    => $px,
                        'y1'    => $py,
                        'x2'    => $qx,
                        'y2'    => $qy,
                    ), $this);

                    if (($vx < 0 && $qx < $x2)
                    || ($vx > 0 && $qx > $x2)
                    || ($vy < 0 && $qy < $y2)
                    || ($vy > 0 && $qy > $y2)) {
                        break;
                    }

                    $sumLength += $dashes[$counter%$n];
                    $counter++;
                    $sumLength += $dashes[$counter%$n];
                    $counter++;
                }
                return;
            }
        }
        //通常の直線
        $rasterizer->render('line', array(
            'x1'    => $x1,
            'y1'    => $y1,
            'x2'    => $x2,
            'y2'    => $y2,
        ), $this);
    }
}

使用例

<?php
// 中略
// 対応している入力
// 例1: "10"
// 例2: "10 5 7"
// 例3: "none"
// 例4: 設定しない
$image->getDocument()->addChild(
    (new \App\MyLibs\CustomSVGLine($x1, $y1, $x2, $y2))
        ->setStyle('stroke', "#00f")
        ->setStyle('stroke-width', 3)
        ->setStyle('stroke-dasharray', "10 5")
);

斜めの直線だとアンチエイリアスが効かず荒い。いまいち。

【Youtube】2019/07/31版 複数の動画を一括削除する方法

少し前からYoutubeの投稿動画管理画面は

Youtube Studio (ベータ版)」

なるものに変わっております。

UIが定期的にアップデートされるのはWebシステムの良いところでも悪いところでもあります。

が、

「動画の複数削除」

ができなくなっているのは完全に、劣化と言わざるを得ません。

もうほぼ答えを書いておりますが、2019/07/31 現在のYoutubeの動画を複数同時削除する方法を書きます。

1. Youtube Studioを旧バージョンに戻す

f:id:uma-no-kawa:20190731131215j:plain

サイドメニュー(上図)の下の方にある、「従来のクリエイター...」をクリックします。

f:id:uma-no-kawa:20190731131352j:plain

こんなポップアップが表示されます。アンケートにご協力したり、しなかったりしつつ(しない場合はスキップ)Youtube Studioを旧バージョンに戻します。

2 あとは普通に削除

f:id:uma-no-kawa:20190731131607j:plain

左メニューの「動画管理」=>「動画」 で動画一覧を表示し、

削除したい動画をチェック。

その後、上の「操作」メニューをクリックし、削除作業。

お粗末様でした。

【Mac】「デバイスに接続できません」と表示されてBlutoothマウスが接続できない。

f:id:uma-no-kawa:20190722200035p:plain

上記のような表示になり、Blutoothマウスが接続できない時、

あると思います。

再起動、NVRAM/PRAMクリア、マウスの電源入りきり

色々解法があると思いますが、

私の場合は、

「他の危機に接続されていた」

でした。

お粗末様でした。

【Mac・Numbers】重複セルがあるかどうかを判定する

なぜgoogleでNumbersネタを検索すると「Ex●el」が引っかかるんだろう・・・。

だいたい同じとはいえ、「だいたい」なので・・・

「これ、同じ方法で動くかな?」

なんて考えるのが面倒なんですよね。

結論

ぐぐればすぐに出てきますが、Ex●el同様

IF(COUNTIF($B1:$B9999,B1)>1,"重複","重複していない")

これでいけます。

A B C
1
2
3
4
5

こんな表の時のA1に上記関数を設定すれば良いです。

各部位の意味としては

IF(COUNTIF($【検索部位支点】:$【検索部位終点】,【重複確認対象文字列が格納されているセル】)>1,"【重複時の出力メッセージ】","【重複していない時の出力メッセージ】")

こういうことです。

【GlideApp】2019/07/12現在 検索バーがiPhoneの日本語版だとうまく動かない件

Glide App 便利ですよね。

ただ、2019年7月12日現在

一覧の検索バーが盛大にバグっております。

検索バーに「はひふへほ」と入力すると、

f:id:uma-no-kawa:20190712120312p:plain

こうなります。

なんじゃこりゃー

【Javascript】hasChildNodes()がずっとtrueな時に確認したいこと

どうみても子供ノードがいないのにhasChildNodes()が常にtrueになる場合。

以下のようになっている可能性も考慮してください。

<div id="no-child-node">


</div>

hasChildNodes()をfalseにするためには下記のようになっている必要があります。

<div id="no-child-node"></div>

なんてこったい