プラグインを利用しないWordPressサイトのお引越し

プラグインがうまく動かない

ファイルデータ容量の増大のためなのか、WordPressサイトのお引越しプラグインを利用しているのですが、うまく動きません。

仕方がないので手動でWordPressサイトの引っ越しをしてみます。

データベースバックアップ

引っ越し元のDBを開きます。

データベースをエクスポートします

データベースの復元

データベースを新しく作成します。

先ほどの手順でバックアップしたSQLファイルをサーバへインポートします。

ロリポップ 403 Error 不正なパラメーターが送信されたため、アクセスをブロックしました

メニューを保存しようとしただけなのに

メニュー名を変更して保存しようとしただけなのに、

403 Error 不正なパラメーターが送信されたため、アクセスをブロックしました

と表示され、うまく更新ができません。

メニュー名の変更

やっている操作は、メニュー名を変更して保存しようとしているだけ。

WAF設定を無効にして解決しました

WAF(ウェブアプリケーションファイアウォール)を無効にしてみたものの、状況は変わりませんでした。はて?

一度、ブラウザを閉じ、WordPressにログインし直したところ、今度は更新ができました。WAF設定変更後は、一度ログインする必要があるようです。

ドメイン引っ越しとアクセス数を減らさない手順

ドメイン名変更

ロリポップのレンタルサーバが驚愕キャンペーンを行っていたのでさくらのレンタルサーバからロリポップレンタルサーバに乗り換えました。

そこで、永年無料のドメインが取得できるキャンペーンも、併設されていたので、それを申し込みました。ただ、新規のドメインでなければ適用されないとの事。そこで、新規で取得し、

旧ドメイン → 新ドメイン

引っ越しする事にしました。

サイトアドレスの変更

Google Serch Consoleに、アドレス変更についての記述をみつけました。

設定→アドレス変更

手順1 301リダイレクトを設定する

手順2 Googleの情報を更新

大きく分けると、この2つを行う事でGoogleの検索順位を落とさなくてすみそうです。

本格的なSEOをお考えの方は こちら を参考にされてください

手順1 301リダイレクトを設定する

.htaccessを利用して301リダイレクトを設定します。

ドメイン単位

RewriteEngine On
RewriteCond %{http_host} ^www.tec-live.com
RewriteRule ^(.*) https://www.techlive.tokyo/$1 [R=301,L]

 

wwwなしの場合も転送したい

RewriteEngine On
RewriteCond %{http_host} ^www.tech-live.tokyo
RewriteRule ^(.*) https://www.techlive.tokyo/$1 [R=301,L]
RewriteCond %{http_host} ^tech-live.tokyo
RewriteRule ^(.*) https://www.techlive.tokyo/$1 [R=301,L]

 

この設定は即時反映されます。元々のURLにアクセスし、正常に新しいURLに転送される事を確認します。

手順2 Googleの情報を更新

検証して更新を進めます

移行が開始されます

この画像にはalt属性が指定されていません 画像が表示されないのですが、、、。

突然画像が表示されなくなる

ホームページ上の画像が表示されないのでおかしいなと思っていました。

投稿の編集をしてみると、

「この画像にはalt属性が指定されていません」

との事

表示されない原因は無料CDN

HTMLソースを表示させてみると、

<figure class="wp-block-image size-large"><img src="//i3.wp.com/techlive.tokyo/wp-content/uploads/2020/11/image-7-700x659.png" alt="" class="wp-image-9270"/></figure>

 

i3.wp.com

という見たことのない表示が、、、。これなんだっけ?

i1.wp.com

i2.wp.com

思い当たったのはCDN設定です。画像を早く表示させたいと思い、CDNの設定をしていました。

WP Fastest Cacheの設定で、CDN by Photonを選択しています。

設定を解除しても i3.wp.comは消えない

CDNの設定を解除したら、i3.wp.comなど勝手についたURLは消えるのかと思ったら、消えない、、、。

それに、自分のuploadサーバ内にも該当ファイルがない事が分かりました。

さくらのレンタルサーバーから、ロリポップのレンタルサーバーに移行した直後に書いた記事で、DNSが反映されない時期に書いたので、こうなってしまったんだと思います。

とりあえず、今後何らかの理由で、Photonが使えなくなると厄介な事になりそうなので、CDN by Photonは使わないようにしようと。

C# Microsoft.Data.Sqlite でdataadapterを使いたい SQLiteのINTEGER型はInt64に注意

Microsoft.Data.SqliteにはDataAdapterがない

DbDataAdapter は、Microsoft.Data.Sqlite ではまだ実装されていません。 つまり、ADO.NET の DataSet と DataTable はデータの読み込むのみに使用でき、更新には使用できません。

ADO.NET の制限事項

Microsoft.Data.Sqliteを利用してパスワード保護をしています。データテーブルにDataAdapterを利用してfillしたいのですが、これができない、、、。

テーブル読込とDataAdapterを使いたい

Microsoft.Data.Sqliteを利用していると、DataAdapter,DataTableが使えないのですが、DataAdapter,DataTableを使う方法があります。

ここでSystem.Data.SQLiteを使ってDataAdapter,DataTableを拝借します。

System.Data.SQLiteをNuGETします。

private void B_DBRead_Click(object sender, RoutedEventArgs e)
{
    System.Data.Common.DbProviderFactory factory = System.Data.Common.DbProviderFactories.GetFactory("System.Data.SQLite");

    using (SqliteConnection con = new SqliteConnection(connectionString))
    {
        // DataTableを生成します。
        var dataTable = new DataTable();

        // コマンドを作る
        System.Data.Common.DbCommand command = con.CreateCommand();
        command.CommandText = "SELECT * FROM t_product";
        command.CommandType = CommandType.Text;
        command.Connection = con;

        // SQLの実行
        var adapter = factory.CreateDataAdapter();
        adapter.SelectCommand = command;
        adapter.Fill(dataTable);

        dataGrid.DataContext = dataTable;
    }
}

 

データ型に注意

datatableに取得した値を、表示させようと思ったらエラーがでるところがありました。

どうも、SQLiteで取り扱われるINTEGER型をDataTableに取り込むと Int64になるようです。

C#では、intはSystem.Int32で、System.Int64はlongであることに注意

C#でDataTableのカラムのデータ型を読んでみた

なかなか一筋縄ではいきませんでした。

DataTable型変換 longからIntへ

datatableに取得する際に、long型からInt型に変換できないものかと探したところ、こちらに記載があり、うまくいきました。

//SQLiteのINTEGER型はSystem.Int64になっているので、Sysmtem.Int32に変更
adapter.FillSchema(dataTable, SchemaType.Source);
dataTable.Columns["cd"].DataType = typeof(Int32);
adapter.Fill(dataTable);

 

FillSchemaでスキーマを呼び出して、Int型にしておきたいフィールドのタイプをInt型に指定したあと、Fill します。すると、データ型は指定された型でFillされます。

dataTable.Columns["cd"].DataType
{Name = "Int32" FullName = "System.Int32"}

 

A5:SQL Mk-2 テーブルデータをインポートエクスポートしたいだけ テーブルコピーも簡単

テーブル操作のコツ

まずは、テーブルを開く必要がある。

テーブルを開くとメニューが増える

テーブルを右クリックして、テーブルを開く

テーブルを開かないとメニューやボタンがでてこないので。これが分かっていないと、ずっと探し回る事になります。

インポートエクスポートボタン

テーブルを開くとボタンが表れます。

インポートボタンはこれ

エクスポートボタンはこれです

メニューも増えます。

テーブルのCSVエクスポート

コピー元のテーブルからCSVでデータをエクスポートしておきます。インポートする時にCSVしか対応していないようです。

他のDBからテーブルを持ってくるのにも応用できます。

テーブルの作成

コピーしたいテーブルの元になる、もしくはコピーしたいテーブルそのものを右クリックして

「ソースをSQLエディタで開く」

をクリックします。

このようなソースが表示されます。

CREATE TABLE table( 
  id INTEGER
  , cd INTEGER
  , name TEXT
  , jun INTEGER
  , fgl INTEGER
  , update TEXT
  , PRIMARY KEY (id, cd)
)

 

これを必要なテーブル名などに変更して、実行すれば新しいテーブルができます。

テーブルデータのインポート

上記でできたテーブルにはデータがはいっていませんので、CSVエクスポートしたテーブルデータをインポートすればテーブルデータがインポートされます。

めでたく、テーブルコピー完成です。

インポートする時には、インポートしたいテーブルを開き、出てきたボタンの、インポートボタンをクリックします。

C#のStringに@をつける理由

@なぜつける?

String の先頭に@をつける書き方

String path = @”filepath\file.db”;

といった書き方を見かけます。

なぜ@をつけるのか?疑問に思ったというか、こんな基本的な事を今更ながらちゃんと調べてみました。

逐語的文字列リテラル

リテラル = 「文字通り」「字義通り」の意味

逐語 = 解釈・翻訳などで、原文の一語一語に忠実に合わせて行くこと。

そのままの文字通り解釈する文字列という意味が逐語的文字列リテラルとなります。

結局@をつけてどうなるの?

@をつける事で、逐語的文字列リテラル として解釈されるようになります。

通常「\」はエスケープシーケンスです。ファイルパスなどで「\」を利用したければ、エスケープシーケンスを2つ書く必要があります。

例 String path = “c:\\filepath\\file.db”;

これに、@をつけ、逐語的文字列リテラルとして指定すると

例 String path = @”c:\filepath\file.db”;

と書けるようになるわけです。

WordPressでGoogle Adsense簡単に設定するプラグイン

Site Kit とは

Site Kit は WordPress 向けの無償のオープンソースのプラグインであり、Google AdSenseGoogle アナリティクスGoogle Search Console、および PageSpeed Insights の統合された統計情報と分析情報に、WordPress アカウントから直接アクセスすることを可能にします。

これをインストールするだけで、Googleが提供するあらゆるツールが使えるようになってしまうというすぐれものです。

Site Kit 設定方法

SIGN IN WITH GOOGLE

ボタンをクリック

所有権の確認

Googleでログインします

Site Kitに許可

サイトの HTML コードに確認トークンを追加

基本的に許可ボタンを押していくだけです。

各サービスとの連携

Search Console

AdSense

アナリティクス

PageSpeed Insights

に対して、「Connect Searvice」していくだけで、接続していく事ができます。

Adsenceでは、Adsenceサイトに移動して下記の表示が出ます。審査に数日かかるようです。

サブディスプレイ活用法-無料でiPad、Androidタブレット、AmazonFireタブレットをサブディスプレイに!

サブディスプレイを持ち歩く

お手持ちのAndroidタブレット、iPad、AmazonFIreタブレットが簡単に無料でサブディスプレイになります。

WindowsPCと、iPadにSpacedeskをインストールします。

Spacedeskのダウンロード

WindowsPCおよび、iPadにspacedeskアプリをダウンロードします。

Windowsはこちらから、iPadはAppStoreからインストールします

iPadではAppStoreにでSpacedeskを探します

どちらも無料で使えるのが特徴です。

Spacedeskのインストールし実行する

WindowsPCにインストールし、実行するとサーバとして稼働を始めます。

Windows側がサーバとして稼働している画面

iPadはクライアントとして接続が可能です。

iPadはサーバを探しに行きます。

共有した画面は複製・拡張どちらでもOK

共有した画面は拡張表示ですいすい動きます。

設定もアプリをインストールするだけでとっても簡単に動くのでちょっと感動しました。

タテ型表示も可能

Word文書など、A4タテの書類を作成するのにも、とっても便利

一番感動したのが、iPadをタテにすると、ちゃんとタテの解像度に合わせて表示できる事です。これはとっても嬉しい仕様で、普通のディスプレイではできない事なので、本当にありがたい!

同一無線LAN必要

どちらの端末も、同一無線LAN上にある必要があります。

同一無線LANで、動くのでWifi環境がないところではスマホのテザリングを使うなどの工夫が必要ですね。どちらもスマホのテザリングで接続すれば同一無線LAN上って事になります。

無線LAで使うと、表示速度が遅かったり、ディスプレイとしての反応速度どうかな?と思っていたのですが、まったく違和感なく利用可能でした。

3画面同時利用も可能

3画面でも同時利用する事ができます。これすごい!!

iPadを接続し、さらに、Android端末もつなげてみました。3画面目のAndroidも使えます。

サーバ設定

Windows側の設定は …ボタンにあります。これが分かりにくい。どこで設定ができるんだろうと探し回ってやっと見つける事ができました。

ここで設定をしておかないと常時サーバとして常駐してしまいます。これはセキュリティ上よくないかと。勝手に他人のiPadなどからつなげられても困りますし。

不便な点

不便な点をあえてあげるとしたら、サーバ側の接続画面が最小化できない事

この画面が作業中ちょっと邪魔(^-^;

だけど、置き場所工夫すれば何とかってところでしょうか。

この画面は右上の×を押して閉じる事が可能でした。

不便な点としては、やっぱりちょっとiPad側の反応がもっそり。マウスが微妙に遅れて動く感じがします。遅れて動いてくると、微妙な操作はやりづらいですね。

アプリの開発元セキュリティ大丈夫?

中華メーカだったりすると、何か情報を抜き取られてないかなどちょっと心配になりますね。特に無料で使えるってところが、どのように利益を上げてるんだろうって心配になります。

開発元は

datronic IT Systeme GmbH & Co. KG 社

ドイツに本社を置くメーカです。

デジタルサイネージなどを大きく手掛けている会社のようです。デジタルサイネージは、複数画面を連携させて大画面で表示させるなどを行っており、Windowsのディスプレイドライバなどを提供しているところからiPadをサブディスプレイにするなどにいたったのかなと推測します。

しっかりした本業を持っている会社でもあって、何か信頼を損なうような事はしないだろうといったところです。まず間違いはないのでは?と思います。

AmazonFireタブレットがサブディスプレイに

このspacedeskは、AmazonFireタブレットでも利用可能です。

Fireタブレットが、サブディスプレイになるのはちょっと感動しました。とくに、GooglePlayを利用できるな細工をしなくても、標準仕様で、Amazonアプリの中にspacedeskアプリが選択できるようになっています。

Fire 7 タブレット (7インチディスプレイ) 16GB 3,980円

ブラックフライデーセールなどを狙うと、激安で購入できます。

C# SQLiteでデータ取得 SqliteDataReaderを使う

SELECTして値を取得したい

VisualStudio 2017 C#の環境で

Microsoft.Data.Sqlite

を利用しています。

SqliteDataReaderを使う

サンプルです。

tm_productテーブルにある、productidを取得し、取得した分だけメッセージボックスを表示させるものです。

using (SqliteConnection con = new SqliteConnection(connectionString))
{
    con.Open();
    try
    {
        using (SqliteCommand command = con.CreateCommand())
        {
            command.CommandText = "SELECT productid FROM tm_product";
            SqliteDataReader sdr = command.ExecuteReader();

            while (sdr.Read() == true)
            {
                MessageBox.Show(sdr["productid"].ToString());
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        con.Close();
    }
}

 

connectionStringは以下参照 パスワード使うなら Microsoft.Data.Sqlite で

パスワード使わないなら System.Data.SQLite で