FINAL FANTASY XVI発売日決まったがPS5はまだ無い。 #FFXVI

2022.12.10

Logging

おはようございます、土曜日の朝は清々しいけど天気は崩れるそう?

FINAL FANTASY XVI発売日決まったけれど、プレイステーション5を持っていない。発売日、2023年6月22日(木)です、その日までにドデカイ本体を買わなくてはならないのかな?もうそろそろ、パソコン版、例えばSteamなどで同時発売して欲しいものですね。独占販売は辛い・・・🙇。

『FINAL FANTASY XVI』REVENGE

それはさておき、ファイナルファンタジー16を自分がプレイできるのか、凄く不安なんですけどFF7リメイクみたいにクラッシックモード有るのかな。無ければ攻略すら難しい気がするしやりこみ出来そうにない。FF16が発売されるまでに何とかFF7リメイクをクリアしないといけませんね。

あとデススト2も注目ですね。

タグ

FF16, FF7リメイク, FINAL FANTASY XVI発売日, STEAM, クラッシックモード, デススト, ドデカイ本体, パソコン版, ファイナルファンタジー16, プレイステーション5, 同時, 土曜日, 天気, 攻略, , 注目, 独占販売, 発売日, 難しい気,

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

2022.09.08

Logging

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

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

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

Githubのリンクはこちら

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

https://twitter.com/taoka_toshiaki/status/1567489169919975424
有言実行

早いですけど、その場合、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, アクセス, エラー, コード, こちら, コマンド, これ, ご使用, ご自身, ダウンロード, ちょ, テーブル, ファイル, ブログ, リンク, , 一部, , , 今日, 保存, 動作, 参考, 変更, 実行, , 方法, 日差し, 昨日, 有言実行, 注目, 環境, , 簡単, 記載, 雛形,

JavaScriptのdocumentがドキュメントな訳。

2022.06.07

Logging

おはようございます。そろそろ梅雨入りなのかもなって。

さて、タイトル通りドキュメントな訳を知りたい方もいると思います、自分も何故、document(資料)なのかなって数秒間考えた結果、インターネットやHTMLの歴史を調べれば分かると思いますが、もともと研究者同士の情報交換(資料共有)に使用されていたのがモノがあるきっかけで注目を浴びた結果、今日では世界中で使用されるようになったのだと考えるとdocumentの意味がわかる。

因みにJavaScript(JS)はプログラミング学習、初学者には最適な言語だと思います、何故ならブラウザの開けるパソコンが一台有れば学習できる言語だからです。尚、JavaScriptを学んでVue.jsなどのフレームワークを学ぶのが定石だと思います。JavaScriptで独自プラグインを作ることが出来ればフレームワークの勉強に進んでも挫折しないと思います。

タグ

document, html, javascript, JS, vue, インターネット, きっかけ, こと, タイトル, ドキュメント, パソコン, ブラウザ, プラグイン, フレームワーク, プログラミング, もの, , 世界, 交換, 今日, 使用, 共有, 初学者, 勉強, 同士, 学習, 定石, 情報, 意味, 挫折, 数秒, , 最適, 梅雨入り, 歴史, 注目, 研究者, 結果, 自分, 言語, , 資料,

YOUTUBERになりたい人、必見の動画かもしれない!?

2022.01.16

Logging

どうやればYOUTUBEチャンネル登録が伸びるのか中田敦彦さんが解説動画がタメになるから、是非チェックしてみてください。中田敦彦さんが古舘伊知郎チャンネルにアドバイスしている動画を見てなるほどなぁって思えました。これはブログにも通じる所があると思います。

中田敦彦さんが苦悩する古舘Chをコンサル。チャンネルの根幹から徹底改善。忖度なしで古舘に忠告。

いろいろなジャンルを片っぱしに書いてみて当たった上位ベスト30の記事に注目して、それと似たような記事を書けばブログも同じようにヒットするサイトになるかもなって思えました。要するに中田敦彦さんの例えを借りて言うとコンビニエンスストアと同じく売れる商品ばかり並べるって事が一番の正攻法な方法なのだな…って😌。

中田さんからの提案に感謝の涙。YouTube成功への鍵を語る。太鼓判を押されたチーム古舘伊知郎の決意

自分が再生回数やビュー数が伸びて欲しい物をよりもユーザーやお客さんが欲しい情報を提供することが良いだってさ。これを聞いてなるほどなぁって思えました。当たり前のことの何だけど確かに難しいというのは何かよく分かるは・・・。ついつい自分が押している物を投稿したくなるだよなぁ。趣味なら良いけどそれで生活するならソコラヘンは切り替えないとなって感じました。

タグ

30, youtube, YOUTUBER, アドバイス, いろいろ, お客さん, こと, これ, コンビニエンス, サイト, ジャンル, ストア, それ, ため, チェック, チャンネル, ヒット, ビュー, ブログ, ベスト, ユーザー, , 上位, 中田敦彦, , , , 再生, 動画, 古舘伊知郎, 商品, 回数, 当たり前, 必見, 情報, , 提供, 方法, 正攻法, 注目, , 登録, 自分, 解説, 記事,

映画、99.9-刑事専門弁護士-THE MOVIEを観てきましたよ。

2022.01.04

Logging

映画、99.9-刑事専門弁護士を観てきましたよ、率直に感想を述べると案外良かった。因みに自分は「 99.9-刑事専門弁護士 」のドラマも観たことがない、映画予告も観ずに観に行きました。おやじギャグのナンセンスなギャクを連発して、最後にちょっとマシなおやじギャグをいうと「ぶはっ」って笑いそうに自分は場面が何度かありましたが、必死に耐えました・・・。いやーあの静けさの映画館の中では笑えないですね。かなり注目の的になってしまいます。

『99.9-刑事専門弁護士- THE MOVIE』本予告【12月30日(木)全国公開‼】

そんな笑いの場面もあるけど、ラストは衝撃的な真実が描かれていたりして「いやー」何とも言えない空気感になってしまいましたが、全体的なストーリーも良かったと思います。ただ、この映画の独特の世界観を好まない人は、たぶん見れないかもしれません。そのためにも 「99.9-刑事専門弁護士」のドラマをちらっと観てどんな世界観なのかは知っておいたほうが良いかもしれません。

タグ

99.9, MOVIE, The, おやじ, かなり, ギャグ, こと, ストーリー, ため, ドラマ, ナンセンス, まし, ラスト, 世界観, , 予告, , , 何度か, 刑事, 場面, 専門, 弁護士, 必死, 感想, 映画, 映画館, 最後, 注目, 独特, 率直, , 真実, 空気感, 笑い, 自分, 連発, 静けさ,

90歳ゲーマーYOUTUBERかなり!

2020.03.08

Logging

90歳のゲーマーYOUTUBERおばあちゃんが凄いというかかなり若い、先取りしていますね。おそらく日本でもこれから、こういうおばあちゃんやおじいちゃんが増えてくると思います。よくよく考えてください。いまのスマホ世代が高齢者になるとおそらくこういう老後生活になると思います。そして思うのです、手先も使うし頭も働かすからゲームってボケ防止にはかなり最適だと思いますし、孫とも会話が弾む可能性まであるだから良いのじゃないかと。

90歳オンラインゲーマーの日常 【ドーントレス】90-year-old gamer plays Dauntless

おばあちゃんゲーマーYOUTUBERは今の所、ニッチな分野ですね、当分は当たり前にならないと思いますので注目度があります、おばあちゃんは1930年生まれだということです、、、。その頃の写真があるかなとググって観たらいや凄いなと思いました。老いとは心が老いていくと駄目らしいですが、おばあちゃんからは、そういう事が微塵も感じませんゲームを楽しんでいらっしゃる!

最後にチャンネル登録はこちら
Gamer Grandma
https://www.youtube.com/channel/UCc7Ygo3HC1zWJOrtNiwuT3w/featured

タグ

1930, 90, Gamer, Grandma, YOUTUBER, いま, おじいちゃん, おばあちゃん, かなり, ゲーマー, ゲーム, こちら, こと, これ, スマホ, チャンネル, ニッチ, ぼけ, 世代, , , 会話, , 写真, 分野, 可能性, , 当たり前, 当分, , , 手先, 日本, 最後, 最適, 注目, 生活, 登録, 老後, 防止, , , 駄目, 高齢者,

マイクロソフトは意外にも柔軟かも。

2019.11.11

Logging

マイクロソフトは意外にも柔軟かも。
これから通信速度が早くなり、クラウド上で何かやり取りすることが
増えていくと思います。
マイクロソフト一色ではなく、AndroidやAWSなども使いつつ
マイクロソフトの製品も使ってねに方向転換したように
感じます。

CEOが変わると経営の方針が結構変わるだなと
結果が出るまで時間がかかったと思いますが、良い意味で
マイクロソフトは流れを変えてITの支流に戻ってきたように感じます。

これからの動きに注目ですね。

Microsoft CEO Satya Nadella: How I Work | WSJ

タグ

Android, AWS, CEO, com, IT, kexuG-YcQFA, youtube, クラウド, こと, これ, マイクロソフト, やり取り, 一色, 意味, 支流, 方向転換, 方針, 時間, 注目, 経営, 結果, 製品, 通信, 速度,

SNSで話題「世界一即戦力な男」が書籍化

2014.08.15

Logging

6年間引きこもっていた彼(菊池良さん)が
WEB会社LIG[リグ]から内定を勝ち取りました。
彼の就活{活動}がすごい、自ら就活のためのサイトを開設し、
そして会社から面接連絡を待つというスタンス。
ちなみにサイト名が「世界一即戦力な男・菊池良から新卒採用担当のキミへ」っていうサイトです。
洒落が聞いてて面白い。面白いだけではなくデザインもしっかりしているから、
LIGから内定を頂いたんだろうけど、一番は感心したのはSNSで注目を得たところ。
実際、SNSで注目を集めるのは難しい。
WEBデザイン技術のほか、SNSのマーケティングの知識がないと
ここまで伸びないので、それなりに知識があったんだと思います。
なので奇跡的でも運よくでもない。
よし!!自分も菊池良さんの真似をして就活をしようとしたら
結果的に後悔する可能性が比較的に高いので、余程、自分の技術に
自信のある人にしか自分はオススメしません。
ちなみに「世界一即戦力な男・菊池良から新卒採用担当のキミへ」っていう
サイトでPRしていることは、裏を返せば負の要素ばかりです。
その負の要素が結果的に他の人と違っていて、
会社から注目を集めることになっただろうと思います。

タグ

6, LIG, SNS, web, おすすめ, キミ, ココ, サイト, スタンス, ため, デザイン, ところ, ほか, マーケティング, よし, リグ, , 世界一, , 会社, 内定, 即戦力, 可能性, 実際, 就活, , 後悔, 感心, 技術, 担当, 採用, 新卒, 書籍, 注目, 活動, , 知識, 自ら, 自信, 自分, , 菊池, 話題, 連絡, 開設, 面接,