PHP言語版のソース・コード自動整形.

2024.05.26

Logging

おはようございます、PHP言語版のソース・コード自動整形(php-cs-fixer)ツールがあります.毎回プルリクエストをするとソース・コードが直されます😅.直されないようにするにはローカルでソース・コード自動整形を導入することで解決されます.

導入の仕方は下記の通りです.

composer require friendsofphp/php-cs-fixer --dev
vendor/bin/php-cs-fixer fix app 

これで毎回プルリクエストの時に自動整形が走らないような気がします.以前の会社ではソース・コード管理などは全然でしたので、其れに比べると今の会社はいろいろと業界の標準が知れて勉強になります.おそらく中小企業や大手で行われていることが、ここ一年で身についてきたのではないかなって思います.

ちなみにLaravelでは自動整形が入っているので下記のコマンドを打つことによりソース・コードの自動整形が走ります.

./vendor/bin/pint fix app

明日へ続く.

タグ

bin, composer require friendsofphp, dev, Laravel, php-cs-fixer, php-cs-fixer fix app, PHP言語版, pint fix app, vendor, コード, コード自動整形, コマンド, ソース, ツール, 中小企業, 仕方, 大手, 標準, 毎回プルリクエスト, 自動整形,

Photo by Pixabay on Pexels.com

お名前レンタルサーバーRS?

2024.05.23

Logging

おはようございます、お名前レンタルサーバーRSに全て移行しようと思ったけど無理だった件についてのお話です.お名前ではレンタルサーバーを契約するとそこで契約していたドメイン代(お名前ドットコムで契約した)は永続無料で使用できるサービスがあります.

それを使用すればかなりの固定費が浮くので、そちらに移行しようと試みたのが先日のことです.実際、移行しようと思って試して分かったことは下記になります.

この二点が厄介.

・ドメインを登録するとドメイン毎にディレクトリが勝手に作られる.
・ルートディレクトリにファイルやディレクトリがFTPからは作れないみたい.

確認はしていないけれども、事前にSSHなどでルートディレクトリにディレクトリを作ってもドメイン登録をコンパネで行うとディレクトリ内の内容が空になる可能性があるのでSCPなどのコマンドで一括移行が出来ない、または以前の階層を引き継げない可能性があります.

そういうことで移行することは時間をかければ可能かもしれないけど、あまり他社から乗り換えるには適していないサーバーなのかもしれないと判断しました.

良いところは、管理画面が初心者には優しい作りになっているところかなと思います.

明日へ続く.

タグ

FTP, SCP, SSH, お名前レンタルサーバーRS, コマンド, コンパネ, サーバー, ディレクトリ, ディレクトリ内, ドメイン, ドメイン代, ドメイン毎, ファイル, みたい., ルートディレクトリ, レンタルサーバー, 一括移行, 厄介., 永続無料, 階層,

pythonとさくらレンタルサーバー

2024.05.12

Logging

おはようございます、さくらレンタルサーバーでMecabというライブラリが使えないかと試みた結果、使用できましたので、そのご報告です.なお、さくらレンタルサーバーでpipを動かす方法はググってください.pipが導入できたら次のコマンドよりインストールが出来ます.

pip install mecab

最初、mecab-python3をインストールを試みましたがこれはどうもさくらレンタルサーバーでは導入出来なさそうです.インストール先をオプションで変えれば出来るかも知れませんけど自分は辞めました.

pip install mecab-python3

mecabライブラリをインストールすることにより、今までAPIを頼っていた部分をmecabライブラリに置き換えが出来ました.これは自分にとって結構経費削減になります.少しでも月々の引き落としを減らせるところは減らしたいと思っているので.

明日へ続く.

タグ

API, Mecab, mecab-python3, mecabライブラリ, pip, pip install mecab, pip install mecab-python3, インストール, インストール先, オプション, コマンド, さくらレンタルサーバー, ライブラリ, 少し, 最初, 月々, , 経費削減, 結果, 部分,

windows11を初期化した話。バックアップ失敗?

2023.06.17

Logging

おはようございます。前々から初期化しようと思っていた、メインのパソコンを初期化しました。これは先日の話になります。

初期化は比較的にすんなりと出来たのですが、Dockerのimageデータが読み込めないという問題が発生しました。バックアップを取る際にMacなどのOS用のコマンドを使用してバックアップを取っていたのが問題でした。

docker save ubuntu -o ubuntuv.tar
docker load -i ubuntuv.tar
docker save ubuntu > ubuntuv.tar
docker load < ubuntuv.tar

上記のことを知らずにリナックス用のバックアップコマンドで行い、load確認をせずに初期化を強行してしまったのが間違いでした。結果、データは残っていたので再度、DockerComposeからコンテナを立ち上げ直し、なんとか対応出来ましたが心臓に悪いなって感じましたね。

タグ

docker, docker save ubuntu, DockerCompose, gt, i ubuntuv, imageデータ, load確認, lt, Mac, tar, ubuntuv.tar, ubuntuv.tar docker load, コマンド, こんてな, バックアップ, バックアップコマンド, リナックス用, 再度, 前々, 心臓,

#laravelは独自のCommand対応しているだって😂。

2023.04.05

Logging

おはようございます。LaravelはCommand対応しているだってさ。そんな事も知らないなんて言わせない😂。やり方に関しては割愛しますがchatGPT様に出来るかどうかを問おうてみました。結果はこんな感じです。

はい、Laravelのartisanコマンドは、開発者が独自のコマンドを作成するためのフレームワークを提供しています。独自のコマンドを作成することで、LaravelのCLIツールをさらに活用することができます。

artisanコマンドを作成するには、make:command artisanコマンドを使用します。以下は、example:commandという名前の独自のartisanコマンドを作成する例です。

php artisan make:command ExampleCommand

これにより、app/Console/CommandsディレクトリにExampleCommand.phpファイルが作成されます。このファイルには、独自のコマンドの処理を定義するためのテンプレートが含まれています。

独自のコマンドを実装するためには、handleメソッドを実装する必要があります。このメソッドは、コマンドが実行されたときに実行されるコードを記述します。

後はこちらのページを参考にしてみてください。コマンドから独自の処理が実行されたことがわかるかと思います。

https://migisanblog.com/laravel-artisan-command/

これで定期的に実行したい処理を実行することが可能になります👍。

タグ

-Command, App, artisanコマンド, chatGPT様, CLIツール, command Artisanコマンド, command ExampleCommand, Commandsディレクトリ, console, example, ExampleCommand.phpファイル, handleメソッド, Laravel, Make, php artisan make, コマンド, テンプレート, フレームワーク, メソッド,

phpバージョン対応、例えばPHP7系からPHP8へ😳 #php #Linux

2022.12.09

Logging

おはようございます、AIによる記事作成が出来るようになっているみたいですね、ChatGPTという奴です😱、大量生産出来る時代になると大変やな。

さて、今日はphpバージョン対応のお話を書きます、この記事は先日、Tweetをした事を文書化という感じですね、phpバージョン対応を行いたい場合、巷ではこのような記事が多く出回っていると思いますが、実際、そんな事をしなくてもRed Hat系の場合は、この3ステップを行いPHPをインストールすれば良いじゃないのかなってこの頃思いました。

ステップ1から時系列でコマンドを記載しますね。

yum install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
yum module list php
 yum module switch-to php:8.2 

こんな感じにコマンド、打てばPHPインストール設定が変わります。PHPモジュールの切り替え後に、下記のコマンドを打てばインストール可能です。そんな感じで簡単に切り替えが出来ます。

yum install php

タグ

インストール, インストール設定, お話, コマンド, ステップ, バージョン対応, モジュール, 下記, 大量生産出来る時代, 実際, , 感じ, 文書化, 時系列, 記事, 記事作成,

Photo by cottonbro on Pexels.com

windowsパッケージマネージャー平たく言えば #windows

2022.10.13

Logging

おはようございます、寒さが足元から来る季節になりましたね😖。

さて、今日はwindowsパッケージマネージャーのお話をします。windowsパッケージマネージャーとはなんぞやという方もいると思いますので、簡単な説明を記載しときます。ウィンドウズパッケージマネージャーとは、Windowsにインストールされているソフトの管理をするものです。

Windowsパッケージマネージャーがインストールされていない方は、こちらのURLからインストール下さいませ。

これをインストールする事により何が良いかと言えば、ソフトウェア(アプリ)のアップデートが一括で出来たりします。コマンドプロンプトに下記のコマンドを入力すればほぼ自動でアップデートしてくれてとても便利です。

winget upgrade --all

タグ

all, upgrade, url, Windows, winget, アップデート, アプリ, インストール, ウィンドウズ, お話, こちら, コマンド, これ, ソフト, ソフトウェア, パッケージ, プロンプト, マネージャー, もの, 一括, 下記, , 今日, , 便利, 入力, 季節, , 管理, 簡単, 自動, 記載, 説明, 足元,

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

さくらレンタルサーバーライト月額費用128円🤔

2022.08.26

Logging

おはようございます。昨日、さくらレンタルサーバーライトと契約しましたのでその経緯を記載したいと思います。

さくらレンタルサーバーライトと契約😶(一括払いの一年契約をしました)。一括払いなので135円128円(※135円記載ミスです。)ではなくてもう少し安くなっています。このさくらレンタルサーバーライトで作られたサイトでは主に機能制限がある中でどれぐらいの事が出来るのだろうかという腕試しみたいなものでレンタルしました。

因みにまだ何をしようかと考えている最中で、アイディアが浮かぶまで浮上待ちの状態です。ですので一年間放置とかあり得る話なので、気長に待っててください。

尚、このネタだけでは文字数があまり稼げないので昨日ツイートしたnohupことを記載します、この事については2019年に簡略的に紹介はしてあります。説明するとターミナル画面(Tera Term等)を閉じてもプロセスがキルされなくて動作するというリナックスのコマンドです。使い方はこんな感じです。

nohup 任意のコマンド > /dev/null &

このコマンドを使用する人は恐らく直ぐには終わらない処理を実行したい方や常時プロセスを立ち上げようと考えている方だと思います。常時プロセスを立ち上げたい場合は何らかの原因でプロセスが落ちた時の為にプロセス監視処理も記載しないといけないので注意が必要です。

タグ

dev, gt, nohup, nohupこと, null, Tera Term, アイディア, コマンド, さくらレンタルサーバーライト, ターミナル画面, プロセス, プロセス監視処理, リナックス, 一括, 一括払い, 常時プロセス, 最中, 浮上, 経緯, 腕試し,

サーバーの引っ越しのヒントです。いや答えですねw😌

2022.06.16

Logging

おはようございます。あと一ヶ月もすれば炎天下の下でお仕事をする人もいるでしょう。大変ですね。

昔はよくサーバーの引っ越しを仕事でしていました。代わりに誰か出来る人もいなかったので自分が行っていましたが、サーバーの引っ越しほど時間のかかる仕事はありません。

scp -r -p /var/www/html/ user@example.com:/home/user/www/
scp [コピー元のファイル] [コピー先のユーザー名@コピー先のホスト] [コピー先のファイル]

何より責任、重大ですから色々と経験して思ったのは、サーバーの移行作業後に何らかの「動かない」というバグとりを速やかに行えるかどうかが大事かと思います。それはある意味、経験が物を言う世界かもしれません。こんなズブの素人でも少しだけサーバーの事を理解できたので、今思えば良いことなのかもしれません。

因みに上記に記述しているコマンドを旧サーバー環境で実行すれば新サーバーへファイル転送出来ます。いちいちFTPソフトでダウンロードしてアップロードするという事を行わなくて良いです。そして何よりパーミッションやタイムスタンプまで引き継いでくれるので便利かと思います。

タグ

-p, -r, com, example, home, html, SCP, user, var, , www, お仕事, こと, コピー, コマンド, サーバー, それ, どり, バグ, ヒント, ファイル, ホスト, ユーザー, , 上記, , 世界, , , , 仕事, 何より, 作業, 大事, 大変, 実行, 少し, 引っ越し, 意味, , 時間, 炎天下, , 理解, 環境, 移行, 答え, 素人, 経験, 自分, 色々, 記述, , 責任,

Photo by Anete Lusina on Pexels.com

Netflixのミスター・ロボットっていうドラマを少し観ました。

2022.05.15

Logging

おはようございます。大阪行きの朝です😌。

先日、Netflixのミスター・ロボットっていうドラマを少し観ました。このドラマ、結構PCヲタク(ギーク)には「いいね」「最高」を貰えそうなドラマになっています。ついつい続きが観たくなる作りになっていますよね。そして、何処からが妄想なのか、全て現実なのかは全話見終わらないとわからないですが…見応えはあります。

「MR. ROBOT/ミスター・ロボット」予告編

コマンドや何やらもそんな感じですからね。なんか変なビジュアルを纏った映像ではなくTerminalでコマンドを打っているだけの映像になっていたりしてリアリティを感じます。

徐々にミスター・ロボットは観ていきたいと思っていて今は、一話目を半分ぐらいみた所です。Netflixアプリの良いところ?は視聴している動画を自動的にダウンロードしてくれる機能があり、仕事の休憩時間に視聴出来たりするところです。こういう機能は他のアプリにもあるかもしれないけども・・・。

便利ですよね(アマプラなどでも配信しています?)。

話変わって今日の8時ごろにANAに乗って大阪へ行きますので、その感想などは来週あたりには書けるかなと思います。尚、今日はリアルタイムに近況をツイートにUPするので応援、コメントよろしくお願いします!!

タグ

Netflix, PC, Terminal, アプリ, ギーク, コマンド, ダウンロード, ところ, ドラマ, ビジュアル, ミスター, リアリティ, ロボット, ヲタク, , , 仕事, , 休憩, 何処, 作り, 先日, 全て, 全話, 動画, 半分, , 大阪, 妄想, 少し, 感じ, , 映像, 時間, 最高, , 機能, 現実, 見応え, 視聴,

自身がフォローしているTwitterアカウントでリスト自動仕分けする方法!?

2022.01.24

Logging

昨日は雨がシトシトと降っていた高知県ですが、あまり寒さを感じなくなってきていますね😌。早く春になれば良いのになって思っております。

ソースコードを読んでいただければ大体分かるかとも思いますが、そんなに難しいコードではありません。タイトル通りの処理をしています。コマンドからファイルを叩くと処理が実行されてそれぞれのリストに仕分けされます、ここでポイントなのはlist_idはどうやって導けばよいのという疑問とTwitterOAuthって何という疑問ぐらいかと思います。

list_idは事前に空のリストを生成すると自動的に割り振られるご自身のリストURLの数値部分になります。次にTwitterOAuthというのは何かというと、これはTwitterAPIを簡単に叩けるライブラリになります。これを事前にインストールすることにより簡単に処理ができます。

尚、ソースコードはTwitterAPI2.0バージョンではありません。そのうち廃止される方で書いています。

<?php
require_once("../vendor/autoload.php");

use Abraham\TwitterOAuth\TwitterOAuth;

if ($argv[0]) {
    require_once "./tw-config.php";

    date_default_timezone_set('Asia/Tokyo');
    $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
    $response_followers = $connection->get("friends/ids", array(
        'screen_name' => 'zip358com',
        'count' => 1000
    ));
    if ($response_followers->ids) {
        foreach ($response_followers->ids as $key => $val) {
            $response_users = $connection->get("users/show", array(
                'user_id' => $val
            ));
            if(preg_match("/(機械学習|人工知能|AI|Learning)/",$response_users->description)){
                print "[機械学習|人工知能|AI|Learning]". $response_users->id . PHP_EOL . $response_users->description . "," . PHP_EOL;
                $connection->post("lists/members/create", array(
                    'list_id'=>1485120628206497798,
                    'user_id'=>$response_users->id
                ));
            }
            if(preg_match("/(web|WEB|Web|プログラマー|エンジニア|プログラム|プログラミング|API)/",$response_users->description)){
                print "(web|WEB|Web|プログラマー|エンジニア|プログラム|プログラミング|API)". $response_users->id . PHP_EOL . $response_users->description . "," . PHP_EOL;
                $connection->post("lists/members/create", array(
                    'list_id'=>1485121383101526018,
                    'user_id'=>$response_users->id
                ));
            }
            if(preg_match("/(イラスト|写真|デザイン|art|Art|絵|漫画)/",$response_users->description)){
                print "(イラスト|写真|デザイン|art|Art|絵|漫画)". $response_users->id . PHP_EOL . $response_users->description . "," . PHP_EOL;
                $connection->post("lists/members/create", array(
                    'list_id'=>1485121210816294912,
                    'user_id'=>$response_users->id
                ));
            }
            if(preg_match("/(電車|メトロ|運行情報)/",$response_users->description)){
                print "(電車|メトロ)". $response_users->id . PHP_EOL . $response_users->description . "," . PHP_EOL;
                $connection->post("lists/members/create", array(
                    'list_id'=>1485121509320687619,
                    'user_id'=>$response_users->id
                ));
            }            
            if(preg_match("/(高知県|高知市)/",$response_users->description)||preg_match("/(高知県|高知市|kochi)/",$response_users->location)){
                print "(高知県|高知市)". $response_users->id . PHP_EOL . $response_users->description . "," . PHP_EOL;
                $connection->post("lists/members/create", array(
                    'list_id'=>1485121289165893632,
                    'user_id'=>$response_users->id
                ));
            }                        
        }
    }
}

タグ

ID, LIST, Twitte, Twitter, TwitterAPI, TwitterOAuth, url, アカウント, インストール, コード, ここ, こと, コマンド, これ, ご自身, ソース, それぞれ, タイトル, ファイル, フォロー, ポイント, ライブラリ, リスト, 事前, , 処理, 実行, 数値, 方法, , 昨日, 生成, 疑問, , 簡単, 自動, 自身, 部分, , 高知県,

ぶんぶん文章を読まない人が失敗することコマンド編!!。

2022.01.15

Logging

SSLの期限が切れる前に更新するように自動更新を設定したのに何故か、更新されない貴方、コマンドが下記のような記述をしていませんか?

certbot renew --dry-run

このような記述になっていると一生、SSLは更新されないままです。これはコマンドテストに使う方法ですので、残念!!!、正しくは下記のような感じで記載してあげてくださいませ😁。

certbot renew

巷ではこの他に強制的に更新するコマンドをオプションでつけて、更新させたら良いよとか書かれたサイトもありますが、それはlet’s encryptサーバ側に負荷をかけてしまうし、アク禁にされる場合もあるので辞めといた方が良いです。

因みにSSLの期限が21日前になった時点で更新処理が実行されます、それまではコマンドを叩いても処理はスキップされます。

尚、自分は文章を読めない、読まないひとです。大体、仕様書は人に読んでもらいます😱

ということで現場からでした。

タグ

--dry-run, 21, Certbot, encrypt, Let's, renew, SSL, アク禁, オプション, こと, コマンド, これ, サーバ, サイト, スキップ, それ, それまで, テスト, まま, 一生, 下記, , 仕様書, , 処理, , 場合, 大体, 失敗, 実行, , 感じ, 文章, , 方法, 時点, 更新, 期限, 残念, 自分, 自動, 記載, 記述, 設定, 負荷, 貴方,

java言語を勉強していて結構つまずく。ゴリゴリとコードを書きたいな。

2021.08.19

Logging

家のクーラーの付いている環境にいると日中が寒いぐらいですね。洗濯物を干すのに自分の部屋が活躍しているのでクーラーが切れないのです。早くお天気の日にならないものか??

さて、java言語を今、勉強していると書きましたが本当にメチャクチャな勉強方法なので、基本的な順番をすっ飛ばしているような気がします。コマンドラインでoとxを入力出来るものを作りました。それ以外を入力すると再度、入力してもらうという単純なアルゴリズムですが、PHP言語のような文字判定をしていたので三項演算子で正しいデータを入力しているのに否定を返すように処理が動いてしまってつまずきました。

こんな感じで毎日、java言語に触れていたら「習うより慣れよ」という感じで日々、覚えていけるのではないかなと思います、今回躓きは初心者の初の字ぐらいの部分だと思いますが、こうやって覚えていくしかないなと思います。

あるアプリ会社を一年ぐらい前に受けたのですが二次面接で不採用になりました。その会社の紹介サイトを先日、拝見したら未経験の人を採用している紹介文を見て絶句しました。なんだろうか、この行き場のないやるせない気持ちは・・・と、そんなわけでjava言語のコードを記載します。

java勉強中
import java.util.Arrays;
import java.util.Scanner;
import java.util.function.BiFunction;
import java.util.function.Consumer;
public class Ox {
    public static void main(String[] args) {
        String [][] ox_list = new String[3][3];
        int x_max = 3,y_max = 3;
        BiFunction<Integer,Integer,Boolean> md = (x,y)->{
            Scanner kigo = new Scanner(System.in);
            System.out.printf("縦%d 横%d 番目の記号を入力してください{o,x}\n",y,x);
            ox_list[y][x] = kigo.next();
            return ((ox_list[y][x].equals("x") || ox_list[y][x].equals("o"))?true:false);
        };
        Consumer<String> Oxview = (s)->{
            System.out.println(s);
            String str = "";
            for (int i = 0; i < y_max; i++) {
                for (int ii = 0; ii < x_max; ii++) {
                    str+=  "|" + ox_list[i][ii] ;
                }
                str+= "|\n";
            }
            System.out.println(str);
        };
        for (int i = 0; i < y_max; i++) {
            for (int ii = 0; ii < x_max; ii++) {
                if(!md.apply(ii,i)){
                    System.out.println("入力が不正です");
                    ii = (ii-1)>=0?(ii-1):-1;
                }
                Oxview.accept("入力中");
            }
        }
        Oxview.accept("最終結果");
    }
}

タグ

java, php, アプリ, アルゴリズム, クーラー, コード, コマンド, それ, データ, めちゃくちゃ, もの, ライン, , , , 今回, 入力, 再度, 処理, , 初心者, 判定, , 勉強, 単純, 否定, 天気, , , 感じ, 文字, 方法, , 日々, 日中, 本当, 毎日, , 洗濯物, 活躍, 演算子, 環境, 自分, 言語, 部分, 部屋, 順番,

日進月歩でCertbotのインストール仕方が変わっていた話。

2021.07.26

Logging

オリンピックの冒頭の音楽がいじめ問題で差し変わるらしいという話を聞きました。この記事が投稿される時にはオリンピック開会式は終わっている頃ですが・・・?。どうなったでしょうか、気になります。もし完璧な状態でオリンピック開催を向かえる事が出来たら、まさにプロフェッショナルですよ。音楽、映像や振り付けまでも変更しないといけないのに、あと3日しかないですよねぇ・・・超ブラック案件かと思います。

それはさておき、先日ツイートした件を書きますね、Certbotのインストール仕方が変わっていた話です。今までこのコマンドを打てば、 CertbotがインストールされてSSL環境もまぁ簡単に対応できていたのですが、なんだか仕様が変わったらしくてsnapというものをインストールしてからCertbotをインストールしないと駄目なようになっていました。まさに日進月歩だと感じました・・・(*´ω`*)。

yum install certbot
snap install core; sudo snap refresh core
snap install --classic certbot

正直なところ困る?

タグ

, Certbot, install, snap, SSL, yum, インストール, オリンピック, コマンド, ツイート, ブラック, プロフェッショナル, もの, , 仕方, 仕様, , 先日, 冒頭, 問題, 変更, 完璧, 対応, 投稿, 日進月歩, 映像, , 案件, , 状態, 環境, 簡単, 記事, , 開会式, 開催, 音楽, , 駄目,

TensorFlow Lite(テンソルフロー ライト)をインストールしモデル実行まで。

2021.06.14

Logging

ラズベリーパイ3にTensorFlow Lite(テンソルフロー ライト)をインストールしモデル実行まで軽く字幕で紹介した動画が下記になります。インストール方法は公式に書かれた通りに実行すれば上手くインストール出来るはずです。比較的に低スペックのマシンでも動くはずなのです、どうしてもエラーが出て動かないようであれば、それはおそらくあなたのマシンに問題があります?。

テンソルフローライト

動画でハマりどころがあるという事をブログで解説しますと書いていますので、そのハマりどころを解説します。。。

TensorFlow Lite(テンソルフロー ライト)で動かす場合、label_image.pyの修正箇所が公式に書かれていると思いますが・・・?、ここで自分がハマり、実行するコマンドを打ってもパラメーターがどうたらというエラーが出力されて動きませんでした。結論から言うと原因はマスターのソースコードにあったのです。修正を要領よく修正しては駄目だった。直接的な原因となったのは–num_threadsのパラメーターを投げていたのが原因でした。

公式では下記の内容に変更しなさいと書かれています。tf.lite.Interpreterの部分を置き換えればよいだろうと思っていたのです。

interpreter = tf.lite.Interpreter(model_path=args.model_file)

マスターのソースコードは若干、公式とは違ってこのようなソースコードになっていました。

  interpreter = tf.lite.Interpreter(
      model_path=args.model_file, num_threads=args.num_threads)

渡す引数が一つ増えていたので、自分はそれを残していたのですが・・・?、これでは動かないのです。そう・・num_threads=args.num_threadsは削除してあげないとモデルを動かすことが出来なかったのです。それがわからず渡すパラメーターが駄目なんだとか思って四苦八苦していました。

自分みたいな修正方法している方も中にはいると思ったので、今回、初心者がハマった沼を紹介しました?。

タグ

, image, label, LITE, py, tensorflow, あなた, インストール, エラー, コード, ここ, コマンド, スペック, ソース, それ, テンソル, はい, パス, パラメーター, フロー, ブログ, マシン, マスター, モデル, ライド, ラズベリー, 下記, , 修正, 公式, 出力, 動画, 原因, 問題, 場合, 字幕, 実行, 方法, 箇所, 紹介, 結論, 自分, 解説, 通り,

クロスプラットフォーム開発(アプリ)をPythonで行う。

2021.05.21

Logging

PyQt5クロスプラットフォーム開発(アプリ)を行う事が出来るだってさ。ただし、PyQt5は商用利用に縛りがあるのだとか、個人で使用する分には問題なしだということ。CSSとPythonの記述が分かっていればそれほど難しくない難易度かと自分は下記の動画を見て思いました。

Create GUI App with PyQt5 – PART 1
pip install PyQt5

Python:パイソンがインストールしている環境で上記のコマンドを打つことでPyQt5はインストール可能です。あとはコードを書いて実行するだけでアプリが実行されます。

PyQt5の使い方を解説している人がいます。リンク先のように書けばチェックボックスなども設置可能です。因みにコードを一々書くのは面倒だという方はQt Designerと連携することでGUIの設計は楽になると思います。
環境構築を説明しているリンクを貼っときます。こちらでPyQt5のプログラムを使用しQt Designerで開発を行えます。

この頃はクロスプラットフォーム開発も多様化していろいろな言語で開発ができるようになってきてますね。楽になったものだと・・・。

追伸:商業利用でクロスプラットフォーム開発が行いたい場合はPySideを使用するべしです。理由はこちら
https://www.kimoton.com/entry/20181202/1543724518

タグ

5, css, Designer, GUI, install, pip, PyQt, Python, Qt, あと, アプリ, インストール, えま, クロス, コード, こちら, こと, コマンド, チェック, パイソン, プラットフォーム, プログラム, ボックス, リンク, 上記, 下記, , , 使い方, 使用, 個人, , 利用, 動画, 可能, 商用, 実行, , 構築, 環境, 縛り, 自分, , 解説, 記述, 設置, 設計, 説明, 連携, 開発, 難易, 面倒,

googleドライブ使ってる?

2020.12.01

Logging

googleドライブをパソコンにインストールするとgoogleドライブという領域が作らます。その領域を使用すれば他のパソコン間でファイルを共有することが可能です。それぞれPCでも同じパスにしてファイルを共有したい場合はシンボリックリンクを使用します。

やり方はこんな感じです。まずgoogleドライブ領域にフォルダを構えます、次に同じパスにしたい階層(googleドライブの階層ではなく)にシンボリックリンクでフォルダとリンクします。このことにより、シンボリックリンクの階層で作業したファイルなどは、おわかりの通りGoogleドライブに実際は作成されたことになるので、この方法で別のPCにもシンボリックリンクを使用して作成すれば、複数のPCでも同じファイル環境を整えることが可能です。

ちなみにシンボリックリンク作成は管理者権限でDosコマンドで下記のように打ってください。なお、MacとWindowsではコマンドは違います。Macの場合はターミナルになります。

シンボリックリンクとは何かはこちらを参照ください。?****

mklink /D 階層とシンボリックリンク名 階層とgoogleドライブのフォルダ名
ln -s 階層とgoogleドライブのフォルダ名 階層とシンボリックリンク名

WindowsとMacではコマンド名も命名規則も違う感じです・・・ややこしい?なっと。

タグ

Dos, Google, Mac, PC, Windows, インストール, おわかり, こと, コマンド, シンボリック, それぞれ, ターミナル, ドライブ, パス, パソコン, ファイル, フォルダ, やり方, リンク, 下記, , 作成, 作業, 使用, 共有, , 可能, 場合, 実際, 感じ, 方法, 権限, 環境, 管理者, 複数, 通り, 階層, 領域,

VirtualBoxで共有フォルダ設定とApacheが表示されるまで。

2020.11.29

Logging

前処理としてこのコマンドを打つ。

yum -y groupinstall "Development Tools"
yum -y update kernel
yum -y install kernel-devel kernel-headers gcc gcc-c++

起動したらメニューから[デバイス]-[Guest Additions CDイメージの挿入]

mount /dev/cdrom /mnt
cd /mnt
./VBoxLinuxAdditions.run

reboot
cd /var/www/
ln -s マウント先 sf_html
gpasswd -a oreore vboxsf
gpasswd -a apache vboxsf

mount -t vboxsf -o dmode=0755,fmode=0755 (共有名) (マウント先)

reboot

Apacheのconfig設定ではリンク先はシンボルリンクを参照させとこう、これでリブートさせて完了やねん。さてこれで理解できたら、あなたは凄いです。これは単なるメモ書き記載なので、わからないと思います。

なので、参考にしたサイトのリンクを貼っときます。
http://itemy.net/?p=1355
https://www.codelab.jp/blog/?p=2587

これらでおそらく大体の人が理解できたと思います。

タグ

-o, -s, -t, -y, 0755, A`, Additions, Apache, cd, cdrom, dev, Development, dmode, fmode, gcc, gcc-c, gpasswd, groupinstall, Guest, html, install, kernel, kernel-devel, kernel-headers, ln, mnt, mount, oreore, quot, reboot, run, SF, Tools, UPDATE, var, VBoxLinuxAdditions, vboxsf, virtualBOX, www, yum, イメージ, コマンド, デバイス, フォルダ, マウント, メニュー, 共有, 前処理, 挿入, 表示, 設定, 起動,

オレオレ認証SSL化、ワンツーコマンドで出来る。

2020.11.09

Logging

mkcertというものを使うとワンツーコマンドぐらいでオレオレ認証SSL化が出来てしまいます。尚、mkcertをインストールするにはHomebrew(ホームブルー)がインストールされている事が前提です。

リナックスではHomebrewをインストール前手順として、gitとrubyがインストールことが、前提となります。あと、nss-toolsも入っていなかったら入れる必要があります。こちらを入れて下記のコマンドでインストールします。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

次にHomebrew、コマンドよりmkcertをインストールします。(※コマンド登録は割愛します!!)

brew install mkcert

ローカル環境に認証局を作成してSSL認証を発行すれば終わりです。

mkcert -install
mkcert example.com

その場所に生成が終わるとファイルが出来ているので、そのpemファイルをApacheのVirtualHostで設定している場合は下記のように設定しApacheを再起動してあげればブラウザ(FirefoxかChrome)で見ると鍵認証が付いている状態になります。/etc/hostsのファイルの設定もお忘れなく。

<VirtualHost *:443>
  ServerName example.com
  DocumentRoot /var/www/html/example.com
  SSLEngine on
  SSLProtocol all -SSLv2
  SSLCertificateFile /home/tanaka/example.com.pem
  SSLCertificateKeyFile /home/tanaka/example.com-key.pem
</VirtualHost>

タグ

-fsSL, bash, bin, brew, C++, com, curl, git, githubusercontent, Homebrew, https, install, master, mkcert, nss-tools, quot, raw, Ruby, sh, SSL, インストール, オレオレ, こちら, こと, コマンド, ブルー, ホーム, もの, リナックス, ローカル, ワンツー, 下記, , 作成, 前提, 割愛, , 必要, 手順, , 環境, 登録, 認証,

Twitterの名前、記号部分を天気予報のアイコン、夜は月のアイコンへと変更する。

2020.11.06

Logging

Twitterの名前の特定の記号部分(■や@部分)を天気予報のアイコン、夜は月のアイコンへと変更する。ある有名エンジニアさんのアイディアを拝借して作りました、autoloadとnamespaceの関係で手詰まり、試行錯誤して解決、その次に命名の間違えで手詰まり。そしてファイルの参照で手詰まりしてやっとリリースしました?、長かった。

使用方法はdefineにそれぞれの値をいれてコマンドから定期的に実行すればよいという品物です。Composerでインストールしている環境で下記のコマンドでパッケージをインストールしてください。

パッケージの開発部分は白紙です、今後、この機能に関してはバージョンアップするつもりはないです。

プログラムに改善の余地はありですが、はじめてパッケージ使ったので疲れました?以上、現場からでした。

https://packagist.org/packages/zip358/tw_name_change
https://github.com/zip358/tw_name_change

defineの補足

  • OPENWEATHERMAPのAPI_IDが必要です(ユーザー登録が必要です)。
  • Twitter API 登録しCONSUMER_KEYなどのキーが必要です。
  • Twitterのユーザー名が必要です(自分)。
  • KENNOは下記のテーブルを参照ください。
  • KIGOUは置き換える文字です。

※正規表現に使われている記号は使用できません。

composer require zip358/tw_name_change
php  Twitter_name_change.php
if($argv[0]){
	require './vendor/autoload.php';
	use zip358\tw_name_change\tw_name_chg;
	define("KIGOU","■");
	define("KENNO","KENNO");
	define("TIME_ZONE","TIME_ZONE");
	define("OPENWEATHERMAP_API_ID","Openweathermap_api_id");
	define("USER_SCREEN_NAME","user_screen_name");
	define("CONSUMER_KEY", "CONSUMER_KEY");
	define("CONSUMER_SECRET", "CONSUMER_SECRET");
	define("ACCESS_TOKEN", "ACCESS_TOKEN");
	define("ACCESS_TOKEN_SECRET", "ACCESS_TOKEN_SECRET");
	$tw_name_change = new tw_name_chg();
	$tw_name_change->main();
}
KENNO県名
0北海道
1青森県
2岩手県
3宮城県
4秋田県
5山形県
6福島県
7茨城県
8栃木県
9群馬県
10埼玉県
11千葉県
12東京都
13神奈川県
14新潟県
15富山県
16石川県
17福井県
18山梨県
19長野県
20岐阜県
21静岡県
22愛知県
23三重県
24滋賀県
25京都府
26大阪府
27兵庫県
28奈良県
29和歌山県
30鳥取県
31島根県
32岡山県
33広島県
34山口県
35徳島県
36香川県
37愛媛県
38高知県
39福岡県
40佐賀県
41長崎県
42熊本県
43大分県
44宮崎県
45鹿児島県
46沖縄県

タグ

autoload, Composer, define, https, namespace, org, packages, packagist, Twitter, zip, アイコン, アイディア, アップ, インストール, エンジニア, コマンド, それぞれ, つもり, バージョン, パッケージ, ファイル, プログラム, リリース, 下記, 予報, 今後, 余地, 使用, , 参照, 名前, 命名, 品物, 変更, , 天気, 実行, 拝借, 改善, 方法, , 有名, 機能, , 特定, 現場, 環境, 白紙, 解決, 記号, 試行錯誤, 部分, 開発, 関係,

テストサーバーを適当に立ち上げる。

2020.06.02

Logging

テストサーバーを適当に立ち上げる方法を録画してみました。
最初の動画はselinux 無効などはしていませんが、それをしないと誤作動というか上手く動かなくなるのでご注意を!!

https://www.youtube.com/watch?v=Rn1ozwXa_eM

ちなみにファイヤーフォールの設定などはググりながらお勉強ください。動画ではそこらへんもググりながら設定しています。あんまりサーバー系のコマンド覚えていないだよね。サーバーの考え方がなんとなく頭に入っている程度です。

ちなみにこれをローカルサーバーじゃなくてVPSでサーバーとして公開するならばWAF(わふ)とかその他、いろいろな設定をすることをオススメします。尚、さくらレンタルサーバーのブログはいいよ!?

https://www.youtube.com/watch?v=TZeRZ7a3Jds

尚、cgi-binでPHPのバージョンを分ける動画は、ちょっと見るだけでは出来ないかもしれませんが・・・ヒントを2、3書いときますね、あとコマンドも例として記載します。

まずcentOS8の最小インストールでPHP7.4系を使う場合は鬼車(おにぐるま)が入っていないので入れなければなりません。そんな具合にインストールしていないものはガンガン入れていこうぜという具合です(*´?`*)

dnf --enablerepo=PowerTools install oniguruma-devel

これを全部入れることができればPHPの違うバージョンでも何とかなりますよ。ちなみにPHP5系とかは下記のようなものを入れるのであって、同じじゃないよ。同じものも有るけれど記述が違うので注意してくださいね。過去のものはググれば結構表示されます。

./configure \
--prefix=/var/www/php-7.4.6  \
--with-config-file-path=/var/www/php-7.4.6 \
--with-config-file-scan-dir=/var/www/php-7.4.6 \
--with-zip \
--enable-gd \
--with-jpeg \
--with-xpm \
--with-zlib \
--with-gettext \
--enable-bcmath \
--enable-sockets \
--enable-opcache \
--enable-exif \
--with-curl \
--with-bz2 \
--enable-calendar \
--enable-inline-optimization \
--with-expat \
--enable-mbstring \
--enable-mbregex \
--with-freetype \
--with-openssl \
--with-mysqli \
--with-pdo-mysql \
--with-mysql-sock=/var/lib/mysql/mysql.sock

最後にcgi-binってインストールしたPHPのphp-cgiを参照しているだけです。シンボリックリンクで!!!

あとは・・・。
Apacheグールプにオリジナルのユーザーを追加してあげて!!。尚、最初の動画はrootで動かしているだけどね。基本的にrootではなくユーザー追加してそれをApacheグールプ追加するのさってヒントも書いときますね。

タグ

2, , 7.4, 8, centOS, cgi-bin, php, selinux, VPS, WAF, いろいろ, インストール, おすすめ, お勉強, こと, コマンド, これ, ご注意, サーバー, さくら, そこら, その他, それ, テスト, バージョン, ヒント, , ファイヤー, フォール, ブログ, べん, レンタル, ローカル, 使, , 公開, 動画, 方法, 最初, 最小, 無効, 程度, 考え方, 記載, 設定, 誤作動, 適当, 録画, ,

松岡茉優さんが歌う『どんなときも。』が好きです。

2020.03.16

Logging

松岡茉優さんが歌う『どんなときも。』が好きです。上手いかというよりは何気ないから好きなのかもしれないなと。ある意味非売品ですよね…商品化していない歌声です。普通に売り出したら松岡茉優さんなら、買う人はいると思うですけどね。ちなみにYOUTUBEから音源を取り出すサービスがあるそうですが、それほど難しい事ではないです。エンジニアならコマンドで何とかなるレベルです。

【MV】松岡茉優が槇原敬之の名曲『どんなときも。』をカバー

ちなみにYOUTUBEをダウンロードするソースコードみたいなのは以前、ブログで記載したと思います。あのソースコードをコマンド用に直すと使いやすいかもしれません。

タグ

youtube, エンジニア, コード, コマンド, サービス, ソース, ダウンロード, どんなときも。, ブログ, レベル, , , 以前, 商品, 意味, 普通, 松岡茉優, 歌声, 記載, 非売品, 音源,

webpに対応しましたプラグインでカバーしました。 Safariめ!!

2020.01.25

Logging

WebP Express(ウェッピーエクスプレス)というWordPressのプラグインがあるので、そちらでコンバート(変換)すれば良いのですが、大量に画像があるサイトはそれで変換できないので下記の対応方法で対応をお願いします。

1. WebP Express使用してコンバートする際に webpが生成されます。webpの生成場所を確認する。現在は下記の配下にwebp画像が作られています。

/wp-content/webp-express/webp-images/doc-root/wp-content/uploads

2.1の配下にwebpの画像を生成するために下記のコマンドを実行します。自分の場合、アップロードしている画像をリスト化して一括処理するプログラミングを実行しました。尚、cwebpがインストールされていない場合、インストールする必要があります。さくらレンタルサーバーには入っているみたいです。

cwebp -q 90 元画像名(階層を含む).png -o 変換後のファイル名.webp (変換先の階層を含む)

こうすることで画像は全てwebpに変換することが可能ですが、これだけでは表示が切り替わらないので下記の画像を参照しプラグインの設定を変更してください。

ちなみにこのwebp(ウェッピー)はグーグルさんが開発したものらしいです、大体のブラウザが、こちらの webpに対応しているのですがSafariとIEは非推奨みたいなんですよね。何れwebpに対応すると思います…思いたい。

タグ

, 2.1, cwebp, doc-root, Express, Safari, uploads, webp, webp-express, webp-images, WordPress, wp-content, アップロード, インストール, ウェッピーエクスプレス, お願い, カバー, コマンド, コンバート, サーバー, サイト, さくら, そちら, それ, ため, プラグイン, プログラミング, リスト, レンタル, 一括, 下記, 使用, 処理, 場合, 場所, 変換, 大量, 実行, 対応, 必要, 方法, 現在, 生成, 画像, 確認, 自分, 配下, ,

googleスプレッドシートの値を取得することは可能ですが!

2019.11.24

Logging

googleスプレッドシートの値を取得することは可能ですが動的な値を取得することは不可能です。
動的処理というのはスプレッドシートの関数などで値を表示している情報をPHPなどで外部取得することは不可能です。

【Google神関数】生産性が100倍上がる!スプレッドシート4つの便利関数はこれ!

※方法があるようでしたら、教えて頂ければありがたいです。

なお、PHPからスプレッドシートの値などは変更可能です。
今回は値の取得に関しての方法を記載しております。

手順
1.グーグルさんからグーグルスプレッドシートのAPIKEYを取得する。
2. グーグルスプレッドシートを作成しスプレッドシートのID部分を取得する。
3.サーバ上にComposerをインストールし、下記のコマンドを実行する。

composer require google/apiclient:"^2.0"

下記のソースのAPIキー、スプレッドシートIDの部分を取得した値に置き換える。

<?php
require_once __DIR__ . '/vendor/autoload.php';
//$keyFile = __DIR__. "/credentials.json";
define("APIKEY","APIキー");
define("SPID","スプレッドシートID");
$spreadsheetId = SPID;
$range ="Sheet1!A1:B123";
$client = new Google_Client();
$client->setApplicationName("Spreadsheet");
$client->setDeveloperKey(APIKEY);
$scopes = [Google_Service_Sheets::SPREADSHEETS];
$client->setScopes($scopes);
$service = new Google_Service_Sheets($client);
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
// TODO: Change code below to process the `response` object:
echo '<pre>', var_export($response->getValues()), '</pre>', "n";

結構ハシオッタ説明になりますが、こちらでGoogleスプレッドシートの値を取得または操作が可能となります。

タグ

, 2, 2.0, , 4, 5, A`, apiclient, APIKEY, com, Composer, et, fCs, Google, https, ID, php, quot, require, watch, www, youtube, インストール, グーグル, こと, コマンド, サーバ, シート, スプレッド, ソース, 下記, 不可能, 今回, 作成, , 処理, 取得, 可能, 変更, 外部, 実行, 情報, 手順, 方法, 表示, 記載, 部分, 関数,