映画、9人の翻訳家囚われたベストセラー #映画レビュー

2022.10.19

Logging

おはようございます、秋らしい秋の陽気が続きます🫠。

さて、今日は映画、9人の翻訳家 囚われたベストセラーを観たので感想を残しときます。最初はどうなんだろうと思いつつ観ていましたが、中盤辺りからこの映画、面白くなってきて最後の最後まで良いなって感じられるストーリー展開でしたが、華麗な展開とは言えない所があるのでそこが自分の中では減点対象かな?🤔。

【公式】『9人の翻訳家 囚われたベストセラー』2020年1月24日(金)公開/本予告

囚われた9人の翻訳家が全員、生き残っていたら本当に華麗なストーリー展開だったですけどね。リアリティーを出すためか、あんな展開になるとはね。どんな展開になるかは映画を観てのお楽しみですが、自分としては、最後のオチのために犠牲者はいるのだろうかと若干思いましたが、全体のストーリー展開は良かったと思います。

まとめ、中盤辺りからじわじわ良くなるストーリー展開です、最後のオチを言うと全然面白みのない映画になるので、ネタバレは要注意です🙄。

タグ

, オチ, お楽しみ, ストーリー, そこ, ため, ベストセラー, リアリティー, レビュー, , 中盤, 今日, 全体, 全員, 対象, 展開, 感想, , 映画, 最初, 最後, 本当, 注意, 減点, 犠牲者, , 翻訳家, 自分, 陽気, 面白み,

ページ無限スクロールの作り方 #インフィニティ#InfinityPageScroll #JavaScript

2022.09.22

Logging

おはようございます、台風14号が過ぎ去ってからいきなり秋模様ですね🫠。

さて、先日ツイートしたページ無限ループが出来るJavaScriptコードを書きました。これを作ろうと思ったキッカケは、自分が運営しているWordPressサイトに巷のページ無限スクロールプラグインが尽く(ことごとく)使用出来なかったので自分で自作した訳です。因みにページ無限スクロールプラグインとはページを送りをしなくてもページの最下までスクロールすると次頁を読み込んでくれるプラグインの事を指します。

下記のコードは自サイト専用なのでそのまま使用することは出来ませんが、重要な部分だけ抜き取って再利用すれば、独自のページ無限ループに対応することは可能かと思います。

コードを読んで頂ければ分かることですが、重要なポイントはページを読み込む方法とそれをDomに変換する方法だと思います。まず、ページを読み込む方法は下記のファンクションで可能です。

fetch(next_url).then(
                response => response.text()
            ).then(data => {

そしてDomに置き換えている所はこの部分になります。これら2つの箇所が重要になります。

                const parser = new DOMParser();
                const doc = parser.parseFromString(data, 'text/html');

これらの事に注意して独自コードを書いてみてください。最後に全コードを記載しときます。


let cnt = 2;
let blk = 0;
async function nextpage() {
    if (cnt !== blk) {
        blk = cnt;
        await (async () => {
            let next_url = "https://fox-black.com/blog/page/" + cnt;
            return await fetch(next_url).then(
                response => response.text()
            ).then(data => {
                const parser = new DOMParser();
                const doc = parser.parseFromString(data, 'text/html');
                let blogs = doc.querySelectorAll('.blogpage');
                cnt++;
                if (blogs[0].innerHTML !== undefined) {
                    document.querySelector(".foxpage").insertAdjacentHTML("beforeend", (function (elm) {
                        let str = "";
                        for (const key in elm) {
                            const element = elm[key];
                            if (element.innerHTML !== undefined) {
                                str += "<div class=\"blogpage\">" + element.innerHTML + "</div>";
                            }
                        }
                        return str;
                    })(blogs));
                } else {
                    if (document.querySelector("#fin") === null) {
                        document.querySelector(".foxpage").insertAdjacentHTML("beforeend", "<div id=\"fin\"></div>");
                    }
                }
            }).catch(error => {
                if (document.querySelector("#fin") === null) {
                    document.querySelector(".foxpage").insertAdjacentHTML("beforeend", "<div id=\"fin\"></div>");
                }
            });
        })();
    }
}

if (navigator.userAgent.match(/iPhone|Android.+Mobile/)) {
    window.addEventListener("scroll", async function () {
        let s = (() => {
            let tgt;
            if ('scrollingElement' in document) {
                tgt = document.scrollingElement;
            } else if (this.browser.isWebKit) {
                tgt = document.body;
            } else {
                tgt = document.documentElement;
            }
            return tgt;
        })();
        if (document.querySelector("#fin") === null && s.scrollTop >= (s.clientHeight - 650)) {
            await nextpage();
        }
    });
} else {
    document.querySelector(".foxpage").addEventListener("scroll", async function () {
        if (document.querySelector("#fin") === null && document.querySelector(".foxpage").scrollTop >= (document.querySelector(".foxpage").scrollHeight - 300)) {
            await nextpage();
        }
    });
}


タグ

14, dom, InfinityPageScroll, javascript, WordPress, インフィニティ, キッカケ, コード, こと, これ, サイト, スクロール, それ, ツイート, プラグイン, ページ, ポイント, ループ, 下記, , 作り方, 使用, 先日, 利用, 可能, 台風, 変換, 対応, 専用, , 方法, 最下, 模様, 次頁, 無限, , , 自作, 自分, , 運営, 部分, 重要,

YOUTUBEで伸びそうな人の共通点は何だろうか?

2022.09.16

Logging

おはようございます、昨日は昼から雨でしたね、秋の雨はまだ良いけど冬の雨は辛いですね。

さてYOUTUBEを見ると、この人は伸びそうだなって思える人とこの人は伸びそうにないと思える人がいると思います、どういう作りにしたら再生回数が伸び、チャンネル登録者が増えるのか、この頃、分かってきた事があります。まず、容姿が良い人尚且つ声の良い人でサムネ画像と動画が綺麗だと伸びます。顔出しせずに声と映像が良い場合も再生回数は結構良いですね。

Figma Auto Layout Card Component Tutorial

何だかよく分からないのですが、上記の質が良ければ、語っている内容がそれ程でも再生回数は良いです、そして学習系だと自分でも出来そうな事の方が伸びて難しいことは伸びない感じですね🤔。

駄目なのは、なんかスッキリしていない背景で何か語っている人は伸びない。どんなに良いことを言っていても再生回数は伸びないみたいです。特に汚い部屋より視聴者はオシャレな部屋を好むみたいです。自分の部屋が汚くても他人の部屋の汚い部屋を見たくないようです😌。

そういう所は食事と同じなのかも知れませんね。

因みに自分もYOUTUBEをたまにUPしていますが、サムネ画像も良くなく、滑舌悪いので突出してチャンネル登録数も伸びそうにありませんが、徐々に更新頻度をUPしていくかも知れません。今、考え中です、あとこの頃、コードを記事をあまり書いていませんが来週あたりから、所々に挟んでいきますので、よろしくお願い致します。

タグ

6, com, https, LWp, pOW, R-Q, watch, www, youtube, こと, サムネ, チャンネル, 上記, , , , 作り, 共通点, 内容, 再生, , 動画, 回数, 場合, , 学習, 容姿, 感じ, , 映像, 昨日, , 画像, 登録者, , 綺麗, 背景, 自分, , , , 顔出し, 駄目,

1万件のCSVを読み込みテーブルに保存する雛形コード #PHPCode

2022.09.08

Logging

おはようございます、徐々に秋ぽっい日差しになってきましたね(まだ暑いけども😌)。

今日は、1万件のCSVを読み込みテーブルに保存する雛形コードを昨日、ちょちょっと書きましたので記載します。ファイルをダウンロードして使いたい方はGithubのリンクを下に貼っときますので、ご使用頂けたらと思います。尚、テーブルなどはCSVを参考にご自身で構えてください。

※動作環境はPHP8系です、なのでPHP7系では一部エラーが出ます。fgetcsv…nullを0へ変更。

Githubのリンクはこちら

Qiitaの方に記載しようかどうしようか、迷ったのですが第一弾目がアクセス数がそこそこ伸びたのでこれ以上、注目されるのは嫌なのでブログの方に記載しました。1万件のCSVを簡単に読み込ませる方法はPHPコードを書くのではなく、SQLのコマンドで実行した方が実は早いですけど・・・。

有言実行

早いですけど、その場合、CSVがちゃんとしたファイルではないと上手くテーブルに保存されない場合や、そもそもコマンドラインで操作出来ない場合もあったりしてPHPコードなどで制御しないと駄目な事もあります。そんな時に、このコードをサンプルとして使って頂ければ良いなと思い作りました。

1万件のCSVを読み込ませるPHPコード雛形。

そんなにコードを書かなくてもまぁ動くんですよ。ちなみにソースコードには、あまりコメントを書いていないですが、プログラマーなら大体の人が理解できるレベルかと思います。

<?php
//ini_set("display_errors","On");
session_start();
require "db_config.php";

//読み込みCSVファイル名セット
class csv
{
    /**
     * @param string $filename
     * @param int $cnt
     * @return Object
     */
    public function ini_csv($filename = "", $cnt = 0)
    {
        return new csv_read($filename, $cnt);
    }
}

//CSVデータを読み込ます
class csv_read
{
    var $max = 10000;
    var $cnt = 0;
    var $handle = null;
    /**
     * @param string $filename
     * @param int $cnt
     */
    public function __construct($filename = "", $cnt = 0)
    {
        $this->cnt = $cnt;
        $this->handle =  fopen($filename, "r");
        $_SESSION["offset"] ? fseek($this->handle, $_SESSION["offset"]) : $this->handle;
    }
    /**
     * @param int $header_skip
     * @return Object
     */
    public function reader($header_skip = 0)
    {
        if ($this->handle !== FALSE) {
            $response = null;
            $data = fgetcsv($this->handle, null, ",");
            if (!$header_skip || $_SESSION["offset"]) {
                if ($data !== FALSE) {
                    $_SESSION["offset"] = ftell($this->handle);
                    $response["data"] = $data;
                    $response["cnt"] = $this->cnt > $this->max ? 0 : ($this->cnt + 1);
                    $flag = true;
                } else {
                    $_SESSION["offset"] = null;
                    $flag = false;
                }
            } else {
                $_SESSION["offset"] = ftell($this->handle);
                $response["cnt"] = $this->cnt > $this->max ? 0 : ($this->cnt + 1);
                $flag = false;
            }
        } else {
            $_SESSION["offset"] = null;
            $flag = false;
        }
        return new table_save($flag, $response);
    }
}

//tableにCSVデータを保存
class table_save
{
    var $flag = false;
    var $result = null;
    /**
     * @param boolean $flag
     * @param array  $response
     * @return void
     */
    public function __construct($flag, $response)
    {
        $this->flag = $flag;
        $this->result = $response;
        $this->column_name = "name,,...";
    }
    /**
     * @param string  $column_name
     * @return void
     */
    public function tbl_save($column_name = "")
    {
        if ($this->flag) {
            $column = $column_name ? $column_name : $this->column_name;
            $is_column = explode(",", $column);
            foreach ($is_column as $key => $val) {
                $is_value[$val] = $this->result["data"][$key];
            }
            try {
                $pdo = new PDO(DSN, USERNAME, PASSWORD);
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $sql = (function ($is_column) {
                    $INSERTFIRST = null;
                    $INSERTLAST = null;
                    foreach ($is_column as $key => $val) {
                        $INSERTFIRST[] = "$val";
                        $INSERTLAST[] = ":$val";
                    }
                    $INSERTSQL = "(" . implode(",", $INSERTFIRST) . ")values(" . implode(",", $INSERTLAST) . ")";
                    $UPDATESQL = null;
                    foreach ($is_column as $key => $val) {
                        $UPDATESQL[] = "$val = :$val";
                    }
                    return "INSERT INTO " . TABLENAME . $INSERTSQL . " ON DUPLICATE KEY UPDATE " . implode(",", $UPDATESQL) . ";";
                })($is_column);

                $stmt = $pdo->prepare($sql);
                foreach ($is_value as $key => &$value) {
                    $is_type = ($key === "test3" || $key === "test13") ? PDO::PARAM_INT : PDO::PARAM_STR;
                    $stmt->bindValue(":$key", $value, $is_type);
                }
                $this->result["sql"] = $stmt->execute();
            } catch (\Throwable $th) {
                //throw $th;
                $this->result = null;
                print $th->getMessage();
            }
        }
        print json_encode($this->result);
    }
}

//RUN...POST DATA
if (isset($_POST["csrf_token"])  && d_xss($_POST["csrf_token"]) === $_SESSION['csrf_token']) {

    $_SESSION["offset"] = (int)d_xss($_POST["reset_flag"]) === 1 ? null : d_xss($_SESSION["offset"]);
    $filename = d_xss($_POST["filename"]);
    $cnt = (int)d_xss($_POST["cnt"]);

    $column_name = "test1,test2,test3,test4,test5,test6,test7,test8,test9,test10,test11,test12,test13,test14,test15";
    $header_skip = 1;

    $csv = new csv();
    $csv->ini_csv($filename, $cnt)->reader($header_skip)->tbl_save($column_name);
    $csv = null;
} else {
    print "";
}
function d_xss($data){
    $data = strip_tags($data);
    $data = htmlspecialchars($data,ENT_QUOTES);
    return $data;
}
<?php
 // ログインした状態と同等にするためセッションを開始します
 session_start();
 // 暗号学的的に安全なランダムなバイナリを生成し、それを16進数に変換することでASCII文字列に変換します
  $toke_byte = openssl_random_pseudo_bytes(16);
  $csrf_token = bin2hex($toke_byte);
  // 生成したトークンをセッションに保存します
  $_SESSION['csrf_token'] = $csrf_token;
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="Description" content="Enter your description here"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
<title>CSV</title>
</head>
<body>
    <input type="hidden" name="csrf_token" value="<?=$csrf_token?>">
    <span class="h3" id="cnt"></span><br><br>
    <span class="h4" id="read_csv"></span><br><br>
    <span class="h4" id="debug"></span><br><br>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.min.js"></script>
<script>
    window.onload = function(){
        read_csv(0,1);
    };
    function read_csv(cnt,reset_flag){
        try{
            $.ajax({
            type: "post",
            url: "./assets/php/class_csv.php",
            async: false,
            data: {csrf_token:document.getElementsByName("csrf_token")[0].value,reset_flag:reset_flag,filename:"dummy.csv",cnt:cnt},
            dataType: "json",
            success: function (response) {
                    if(response){
                        cnt = response.cnt;
                        document.getElementById("cnt").innerText = cnt;
                        if(response.data){
                            document.getElementById("read_csv").innerText = response.data[0] + response.sql;
                            document.getElementById("debug").innerText = cnt ===21?response.data:document.getElementById("debug").innerText;
                        }
                        setTimeout(function(){read_csv(cnt)},0);
                    }
                }
            });
        }catch(e){
            console.warn(e);
            read_csv(cnt);
        }
    }
</script>
</body>
</html>

タグ

0, , 7, 8, CSV, fgetcsv, github, null, php, PHPCODE, qiita, SQL, アクセス, エラー, コード, こちら, コマンド, これ, ご使用, ご自身, ダウンロード, ちょ, テーブル, ファイル, ブログ, リンク, , 一部, , , 今日, 保存, 動作, 参考, 変更, 実行, , 方法, 日差し, 昨日, 有言実行, 注目, 環境, , 簡単, 記載, 雛形,

いろいろ問題のあるテスラだけど凄いなと思う😶。

2022.08.28

Logging

こんにちは、秋模様ですね、今日は一日こんな天気だと良いですけど昼から気温が上がりそうですね。

さて、いろいろ問題のあるテスラだけども自動運転技術はほぼ完全自動運転になりつつある。

Flying Through Giga Berlin
ワンショット

またテスラの生産ラインもかなりオートメーション化が進んでいる模様です、このまま、自動化が進むと本当に人は何もしなくて良くなる時代が来るのかもしれない。それが良いことかどうかは分からないですけど、100年後に自発的に仕事をしたいと言うと変わってますね、なんて言われるかも知れません。

そんな感じで恐らく今世紀中には自動化により殆どの事がAIやロボットに取って変わることになると思います。

タグ

, 100, 4, 7, AI, CnXE, com, https, watch, www, youtube, yOx, いろいろ, オートメーション, かなり, こと, このまま, それ, テスラ, ライン, ロボット, ワンショット, , , , 今世, 今日, 仕事, , 問題, 天気, 完全, 感じ, 技術, , 時代, 本当, 模様, 殆ど, 気温, 生産, , 紀中, 自動, 運転,

キャンプや個展は気兼ねなく行けるものなのかも?

2022.08.22

Logging

おはようございます。月曜日の朝ですね、今日から一日のスケージュールを作って活動します。

さて、キャンプや個展などは、コロナ禍であっても気兼ねなく行ける場所なのかもしれないな。キャンプは外だし、個展は基本的に喋ることが無い空間ですからね。そういう意味で今、再過熱していそうです。秋には個展美術展示会など見に行きたいイベントがありますが、どれも県外なので難しいです😭。

話変わって、自分はいまWordPressの過去記事をブロック形式に一括変更できないのか、模索しています。一括変更できるプラグインは恐らく今の段階では作れそうにないです。何故なら公式が提供してくれている記事をブロック変換する物はJavaScriptで変換している。逆から言えば表示される前のデーターを変更するよりもJavaScriptで変換した方がベストと公式サイトのエンジニアが恐らく考えたという事なので、プラグインで作るのは至難の業なのかもしれない。

なので、今回考えたのはSeleniumを使用して解決する方法です。これならそれ程時間もかからず開発できるので、こちらで対応します。尚、出来上がったものを提供するかは今の段階では考えていません。

タグ

javascript, WordPress, イベント, いま, エンジニア, キャンプ, こと, コロナ, サイト, スケージュール, データー, どれ, プラグイン, ブロック, ベスト, もの, , 一括, , , 今日, 個展, 公式, , 場所, 変換, 変更, , 展示会, 形式, 意味, 提供, , 月曜日, , , 模索, 段階, 気兼ね, 活動, , 県外, , , 空間, 美術, 自分, 至難, 表示, 記事, , 過去, 過熱,

AWAY(アウェイ)、動物視点のゲーム。一見は百聞にしかず!!

2021.09.25

Logging

朝は本当に涼しくなってきましたね、何年ぶりだろうか、高知県で秋らしい秋になるのは毎年、秋っていう感覚がなくいきなり冬が来たって感覚がここ数年続いていたように思えます。そして去年よりも今年の冬は寒そうな予感さえします。

さて、AWAY(アウェイ)という変わったゲームを紹介します。このゲーム、動物を操作してそれぞれの視点を体感できるゲームになっています。今までも動物視点のゲームはあったんだけど、2022年に配信される AWAY(アウェイ) が一番リアルかなと思っています。値段も安くてダウンロード専用の通常版だと2,178円と格安です。

『AWAY』発売告知トレーラー

唯、こういうゲームはとても素晴らしいだけど、一般的にヒットするかと言えばそうではなく理科好きな少年少女たちにしか受け入れないのかもなと思ってしまいます・・・・。

尚、PS4、PS5に対応していますので、こういうジャンルが好きな方は是非遊んでみてください?。

タグ

178, 2, 2022, 4, 5, AWAY, PS, アウェイ, ゲーム, ここ, ジャンル, それぞれ, ダウンロード, ヒット, リアル, 一見, 予感, 今年, 体感, 何年, 値段, , 動物, 去年, , 対応, 専用, 少女, 少年, 感覚, 操作, , , , 本当, 格安, 毎年, 理科, 百聞, , 紹介, 視点, 通常, 配信, 高知県,

秋ですよ、秋ですよ。パーカー!

2020.09.26

Logging

秋ですよ、秋といえばパーカーです、YOUTUBERパーカーさんとは関係ありませんが動画を貼っときます。さて秋といえば上着はパーカーかジャージ上が秋の基本スタイルのコーディネートスタイルです(暑い日はポロシャツですが)。オシャレさんでは無いのです。『えぇオシャレなんかしません』痩せても基本スタイルは秋といえばパーカーかジャージ上です。夏になればポロシャツと基本スタイルは決まっています。

バイトの面接に行ってきた感想と結果を報告します

ロゴポロシャツや無地ポロシャツ、無地パーカーなどです、絵柄や凝ったデザインの洋服はありません。ちなみに冬もパーカーかセーターしか来ません。

ある時からこういうスタイルになりました。時代の流れの洋服を追っていると過去の写真を見てみるとなんだか古いなと感じてしまったりするからです、なので、進化がとまっているパーカー、ジャージ、ポロシャツ、セーターを着るようになり、それが今まで続いています。

そんなこともよりも今年の夏、ほぼ痩せなかったことがショックです。マイナス5kg痩せてからオチない・・・あとマイナス15kgまで落とそうと思っていているのですが・・・この話は明日します。今日はここらで〆

タグ

YOUTUBER, オシャレ, コーディネート, こと, , ジャージ, スタイル, セーター, それ, デザイン, パーカー, ポロシャツ, ロゴ, 上着, 今年, 写真, , 動画, 基本, , , , 時代, 洋服, 無地, , 絵柄, 進化, 過去, 関係,

春だと思ったら夏になり秋になり冬になり一年過ぎ去っていたなんて事にならないためにも。

2017.04.10

Logging


桜の花をパシャパシャと撮影しました。
桜の花びらが散ると夏まであっという間に過ぎて
秋と冬をむかえて「あれ」もう一年経過してしまったって
事になり、いちねんを経過すると一歳歳を重ねるということになり
「あぁ?」今年も何も有言実行しなかったなと反省し
来年こそは頑張ろうと決意を新たにはするが決意だけで
何も変わらないという事をここ数年続けている。
唯、全然実行に移していていないわけでもなく
お金が比較的にかからないものは何度かトライアンドエラーを
繰り返して模索していたりする。なんでもそうなのだけど
反応がないとテンションが下がり、頓挫してしまう事が多い。
褒めれば伸びる子なんですw。あまり褒められた経験がないので
褒めてもらうと未だに嬉しいですね・・・・・・。
ストレートに褒められて相手によっては、そのまま受け取らないので
自分を褒めるには少々、話術が必要になります、
取りやすいには少々難しいのかも。

一点突破で「きざし」をつくれ!――為末大G1サミットインタビュー

 

タグ

B00BRCM6I4, あっという間, いちねん, テンション, パシャパシャ, 何度かトライアンドエラー, , 少々, 書道家, 有言実行, , 決意, 漢字Tシャツ, 漢字屋, , 花びら, 話術,

…のように感じる、…のような手触りがする、…をしたい気がする、を欲しい気がする

2016.10.10

Logging

[Alexandros] – Feel like (MV)

『…のように感じる、…のような手触りがする、…をしたい気がする、を欲しい気がする。』という意味をfeel likeは持っています。
月曜日なのに今日はお休みです。これがアップされている頃は県外にいると思います。
県外に行った話はそのうちアップします。秋になり「彼女を欲しい気がする。」この頃ですね。
三連休も終わり明日から仕事だという方も多いはず。という事で短文で失礼します。

タグ

, 2, , com, cZ, feel, https, like, qA, Sjq, watch, www, youtube, アップ, うち, お休み, これ, パス, 三連, , 今日, 仕事, , 失礼, 彼女, 意味, 手触り, , 明日, 月曜日, , 県外, 短文, , , ,