Quantcast
Channel: 神戸ホームページ制作会社ユニファースの代表ブログ
Viewing all 218 articles
Browse latest View live

価格.comより安いとは!ヨドバシカメラの本気を見た

$
0
0

image

皆さんは、家電を買う時、どうしていますか?私の場合は、まずは価格.comで家電の型番検索で最安値をチェック。次にAmazonでも型番検索を行い、どちらか安い方を選んで購入しています。皆さんの中には、楽天で買っている方もいるかもしれませんが、家電に限って言えば、楽天はポイント還元があるとしても、決して安くはありません。私も一時期までは楽天をメインで使っていたのですが、ある時にAmazonの価格と比較し、安く無いことに気づいてしまったのです。それ以来、楽天にしか無い商品を買う場合以外では使わなくなりました。これが私の信じる最安値で買う方程式であり、微塵も疑っていませんでした。そう、昨日までは・・・

価格.comやAmazonより安く買えるサイトがある

私が、自分の方程式に間違いがあることに気がついたのは、価格.comである商品の最安値の店舗を探している時でした。例の如く、Amazonの価格もチェックした上で、価格.comが最安値だと確信し、最安値のお店で購入しようとしていたのです。

そこでふと気がつきました。「Pって何?」と。ヘビーユーザーなら常識なのかもしれませんが、Pは「買ったお店で次回以降に使えるポイントの還元」のことです。で、ポイント還元を加味すると、実質の最安値は2,187円のヨドバシ.comとなります。とは言え、価格.comでは最安値の店で買う為に使っているので、今回、最安値の店だったとしても、今後、使うかどうかも分からないお店のポイントなら、もらっても嬉しくはありません。それよりも、30円でも安い方を選びます。どちらで買おうか迷い、他にも欲しい家電があったのでヨドバシ.comでリサーチしてみました。すると、衝撃の事実が発覚しました。

ヨドバシ.comが最安値を独占

まずは一つ目。ヨドバシ.comでの価格。

実質、1,629円です。で、価格.comでの最安値。

一見、1.350円でヨドバシ.comより安く見えますが、送料を込みで考えると、1,857円となるので、やはりヨドバシ.comの方が安いです。

二つ目。ヨドバシ.comでの価格。

実質、26,973円。次に価格.comの最安値。

27,241円です。やはり、ヨドバシ.comの方が安いのです。

3つの商品のリサーチだけで、「ヨドバシ.com=価格.comより安い」と言い切るのは語弊があるでしょうが、最安値で商品を購入する方程式を修正する必要があるとは断言出来ます。つまり、「価格.comとAmazonとヨドバシ.comで型番検索をして、最安値のところで商品を購入する」ということです。ところが、ヨドバシ.comの凄さは安さだけではありません。

ヨドバシ.comは常にカードが使える

ヨドバシ.comは、商品価格に関係無く、カード決済が使えます。これは非常に凄いことです。カード決済システムを導入すると、カード決済された商品価格の3~5%を決済手数料としてカード会社へ支払うことになります。従って、カードを使われるとその分が店の負担になるので、価格.comの最安値のお店はカード決済不可としているところが少なくありません。ゴールデンウイークのような長期休暇だと、振り込み完了しても反映されるのは休暇終了後なので、商品が中々送られてきません。また何より、振込手数料が別途発生する為、その分割高になってしまいます。その点、ヨドバシ.comは「最安値かつカード決済可」となっており、大変好感が持てます。ヨドバシ.comの特筆するべき凄さはまだあります。

注文した次の日迄に商品が届く

現在、この記事を書いているのは20時なのですが、例えば、以下の商品。

17時間56分以内のご注文で明日届く、と書いています。つまり、「当日の14時までの注文なら当日届く」という意味です。兵庫県在住という地域性もあるかもしれませんが、もはや意味が分かりません。これまで通販サイトで結構多くの買い物をしてきましたが、大体商品が届くのは早くて着金完了日の2日後の午前です。当日に注文して当日に届くって。Amazonでも同じような仕組みはありますが、あちらは有料オプションですし。実際に昨日の19時に注文した商品が、今日の16時に届いていました。この到着の圧倒的速さ!驚きです。更に大阪府近辺に在住であればもう一つメリットがあります。

ポイントは店舗でも使える

ヨドバシ.comでゲットしたポイントは、ポイント共通化の手続きをすることで、店舗でもネット通販でも使えるようになります。従って、私などは大阪へ行った際、小物をヨドバシ梅田で買うことがありますが、その購入費へ充当することが出来るということです。逆に、店舗で貯まったポイントを最安値電化製品を購入する為にも使えるということです。これでポイント失効の憂き目に遭う機会も減ることでしょう。

まとめ

ヨドバシ.comは数年前に開始された通販サイトですので今更感はありますが、「ネット通販業界へ黒船現る」位のインパクトがあります。この記事を書いている途中で妻が「虫コナーズが欲しい」と言っていたのでAmazonの価格とも比較してみましたが、やはりヨドバシ.comの方が安い。これから最安値商品を購入する情強を名乗るには、「価格.comとAmazonとヨドバシ.comで型番検索をして、最安値のところで商品を購入する」である必要があります。何事も妥協はいけません。

 


WordPressの管理画面の投稿一覧へ記事文字数を表示して昇順・降順でソートが出来るようにするプラグイン

$
0
0

3282

最近の検索エンジンの傾向として、被リンクよりも、良質なコンテンツを評価するようになってきました。そんな中、低品質な記事がSEO対策上、サイト全体に悪影響を及ぼすという報告もネットに上がって来ていますし、過去に適当に書いた記事をリライトしたり、削除したりしたいというニーズがあるんじゃないでしょうか?少なくとも私は、あります。照

参考:リライトと追記ってどれくらい効果があるの?

記事文字数を管理画面で表示してくれるプラグイン

しかし、WordPressで構築しているこのブログ、何だかんだ言っても既に380記事あります。その記事を一つずつチェックしていくのは結構大変です。毎日書いているようなブロガーさんは、もっと大変だと思います。そこで、この作業を効率化出来ないかと思ってプラグインを探したところありました。記事を一つずつ開かなくても、管理画面の投稿一覧で記事の文字数を表示してくれる便利なプラグインです。

Posts Character Count Admin
使い方の記事:http://bowz.info/5494

しかし、ソートは出来ない

しかし、記事にも書かれていますが、記事文字数に応じてソートが出来ないんです。やはり、昇順・降順でソートが出来る方が良いですよね。そこで大分探したんですが、見つかりませんでした。探せば探すほど、どうしても欲しくなってしまったので、こうなれば私が作るしか無い、ってことでプラグインを作った次第です。

記事文字数を表示しソートが出来るプラグインのダウンロード

こちらからダウンロードして下さい。WordPressへアップロードして、プラグインの有効化をして下さい。

使い方と注意

投稿>投稿一覧 を開いてもらうと、記事文字数が表示されたカラムが追加されているんですが、初めて使う時は一つ処理をしなければ正常に動きません

事前準備

投稿一覧ページの右上に記事数を表示する〇項目という文字があると思います。上の画像なら、「1,631項目」です。この数字をメモして右上方にある「表示オプション」の中の「ページごとに表示する項目数」を開いて下さい。〇項目が1000以上なら、999を。999以下ならその数字を記入して下さい。今回は、1000以上なので、999を記入し適用を押します。記事数が多いと、少し時間がかかりますが、待って下さい。

999以下の記事数の方はロードが終わったらこれで完了です。1000以上の方は、右上のページ送りが 1/2 のようになっているので、 > を押して 2/2 を開いて下さい。 1/3 の方なら、 2/3 3/3 全てを開いて下さい。全て開き終わったら事前準備は完了です。

使い方

※事前準備が完了したら「ページごとに表示する項目数」は、50など、妥当な数字へ戻して下さい。

使い方は至って簡単です。タイトルの「投稿文字数」をクリックすれば、クリック毎に昇順・降順でソートが切り替わります。これで、低品質な記事の発見が楽になりますね!

仕組みと考察

ここからは、何故、他のプラグインが実現出来なかったのか、事前準備が必要なのかについての考察です。読み飛ばしてもらって構いません。

このプラグインは、初めてプラグインを実行する際に、カスタムフィールドへ「投稿文字数」というフィールドを作成し、その中に記事文字数を保存します。そして、その数字に基づいてソートをかけています。色々調べてみたのですが、DBへ値が保存されておらず動的に作成される数字に基づいてソートをかける仕組みはWordPressには無いようです。もしかしたら、天才的なプログラマーからは「何言ってるの?カスタムフィールドなんて使わなくても、DBへアクセスしてゴニョゴニョしたら実現出来るじゃん」って言われるかもしれませんが、これが私の限界です。他に良い方法があったら教えて下さい。

他のプラグインが、ソートが出来なかったのは、もしくはあえてソート出来ないようにしていたのは、ここに原因があるのかもしれません。それ程、害は無いとは言え、カスタムフィールドを一つ作成して、プラグインを無効化しても形跡が残るのは、確かに気持ち悪いです。しかし、DB自体には影響が無いので許して下さい。

また、事前準備が必要なのは、原因がわかりません。一度、保存したカスタムフィールドの値を読み出して初めて、値が存在するものと認識されるようです。もしかしたらWordPress側のバグなのかもしれません。あるいは仕様?この辺りも不明でした。分かる方教えて下さい。

 

那覇空港から沖縄の最高級ホテル・ブセナテラスへのアクセス方法

$
0
0

通常、沖縄へ旅行するとなるとレンタカーを借りるのが普通でしょうが、学生さんなど、車に乗れない場合は公共の交通機関を使うことになるかと思います。私もペーパードライバーだったため、公共の交通機関を使いました。で、ブセナテラスに宿泊したんですが、那覇空港からブセナテラスまで行くのが結構わかりにくく大変だったのでメモしておきます。

那覇空港~美ら海水族館~ブセナテラス

那覇空港~美ら海水族館

バスで那覇空港から美ら海水族館へいく方法です。バスで行くなら下記が一番安いです。

那覇空港→名護バスターミナル
111番 高速バス
(所要時間は約2時間。料金は2,130円)

名護バスターミナル→記念公園前
65番
(所要時間、約1時間。料金は860円)

美ら海水族館~ブセナテラス

バスで美ら海水族館からブセナテラスへ行く方法です。バスで行くなら下記が一番安いです。

記念公園前→名護バスターミナル
65番
(所要時間、約1時間。料金は860円)

名護バスターミナル→ブセナリゾート前
120番
(所要時間、約25分)

ブセナテラス~那覇空港

ブセナテラスから那覇空港へバスで行く方法です。ブセナテラスの建物入り口からリムジンバスが出ています。

大体、1時間に一本です。

料金は、2,150円。大体、2時間30程度で那覇空港に到着します。

ブセナテラス周辺の格安のお店

ブセナテラスで食事をするとなると、そこそこの値段がします。そこで、オススメしたいのが「なかま食堂

定食が600円~900円くらいの価格にもかかわらず、量は大変多く、そして美味しいです。

ブセナテラスから、徒歩だと30分程度。車だと5分程度じゃないでしょうか。

地図はこちら

 

WordPressへ誰でも簡単に追従するソーシャルボタンを一瞬で付けられるプラグイン

$
0
0

image_2

先日、以下の記事がはてなブックマークで注目されました。

これ1つで驚くほどアクセス数が増えた!誰でも簡単にできる固定ソーシャルボタンの設置方法とは?

二番煎じ感がありますが、WordPressに追従型のソーシャルボタンが一瞬で付けられるプラグインを作成しましたので、ご紹介します。尚、これを付けたからと言って、驚くほどアクセス数が増えたことも無ければ、はてブ率が従来比2倍以上になった事も無いので、「ソーシャルボタンが追従するんだ~。便利だな~」位の緩い気持ちでお使い下さい。使った方からアクセス数が増えたという報告があれば、その実績に便乗しようと思っています。

プラグインの仕様

このプラグインを使うことで、スマートフォンからあなたのサイトの記事が閲覧された場合、

  • Facebookのシェアボタン
  • Twitterのツイートボタン
  • はてなブックマークボタン

が、画面の下もしくは上へ、ボタンが固定されて追従します(トップページや固定ページでは出現しません。記事ページのみに出現します)。上に固定するオプションも作成したのですが、あまりニーズが無いかもしれません。上に表示する設定にした場合、タイトルなどにかぶってしまい見えなくなってしまう為です。それを解消する為には、CSSを修正する必要があるので、少しハードルが高くなります。
また、衰退気味のGoogle+やその他のシェアボタンは、使われる機会も少ないかと思いましてあえて付けていません。

プラグインのダウンロード

プラグインは以下のリンクからダウンロードして下さい。

Add_Share_Button_Ver0.7.6

zipを解凍して出現する、「share」フォルダーを他のプラグインと同様にFTPでpluginsフォルダーへアップロードするか、「プラグイン > 新規追加 > プラグインのアップロード」からshare.zip 丸ごとアップロードした後、プラグインを有効化して下さい。

以上です。これで画面の下へ固定して追従するシェアボタンが記事ページに出現します。

プラグインの設定

プラグインを有効化すると基本的に問題無く使えますが、より便利に利用頂くようにオプション設定が出来るようになっています。
ツール > シェアボタンの設定
のページを開いて下さい。

すると以下の設定項目があります。

追従の位置・・・画面の上、もしくは画面の下のどちらに固定して追従させるか設定出来ます。初期値は、画面下です。
画面端からの移動ピクセル数・・・画面の下(もしくは上)から、シェアボタンをどれ位上へ移動させるかを設定することが出来ます。初期値は0です。
例えば、私のサイトの場合、追従する「このページの先頭へ」のボタンが以前から有りました。このボタンを残しておきたいので、39px画面の下からシェアボタンを上方へ移動させる設定にしています。

TwitterID・・・あなたのTwitterIDを入力すれば、「Twitterでシェア」ボタンを押した際に 「@kidashintaroさんから」のように、あなたのTwitterID付きでシェアしてもらうことが出来ます。

 

以上です。プラグインを有効化したことがある方なら誰でも簡単に追従するシェアボタンが付けられるので、是非一度お試し下さい。

Q&A

プラグインを有効化しても、パソコンからは表示されません。バグですか?
いいえ、仕様です。パソコンからの閲覧者には追従するシェアボタンなど無くても、シェアしようと思えば、すぐに右のスクロールバーを上下に移動させてシェアボタンにたどり着けるからです。あれば逆に邪魔になると思い、付けていません。

ギャラクシーs でスクリーンショットをする方法

$
0
0

galaxy sでスクリーンショット(スクリーンキャプチャ・プリントスクリーン)をする方法です。

画面下に3つのボタンがありますが、右のボタン(戻るボタン)を押しながら、真ん中のボタン(ホームボタン)を押せばスクリーンショットが撮れます。とても便利ですよ。

また、アプリを使って、スクリーンショットを撮ることも出来ます。アプリを使うメリットは、戻るボタンを押しながらになることにより戻るボタンを押すと消えてしまう画面のスクリーンショットも撮れるところにあります。

オススメのアプリは、

スクリーンキャプチャーショートカット FREE

です。有料版もありますが、無料版でも十分事足りると思います。

 

【WordPress】公開日時に「現在の日時」を追加する方法

$
0
0

WordPressで、過去の記事を修正した場合に、改めて、最新の記事としてトップに表示させたいことがありました。その場合、WordPressには、現在の日時に設定して投稿するという機能はありませんので、わざわざ、時計を確認して、公開日時を手作業で変更することになります。

そんなに頻繁にあることではないので、手作業ですればいいのですが、やはり、その場面になると煩わしいです。

そこで、現在の日時をボタン一つで設定出来る方法やプラグインは無いかと探してみると、プラグインは無かったもののPHPコードはありました。本当にボタン一つで、過去の日時を現在の日時へと変更することが出来ます。

その方法が書かれているサイトはこちら(サイトは無くなりました

大変助かりました。

2013年3月13日追記

上記サイトを参考に、プラグインを作成しました。

ダウンロードはこちら

 

 

Excelで重複データを削除する方法

$
0
0

例えば、メーリングリストがあり、その中から配信したくないメールアドレスを削除して、配信したいメールアドレスのみを取得する場合に使える方法です。

以下のようにA行へ元データ一覧が存在して、C行にはA行から削除したいデータ群が存在するとします。

 

B2へ

=IF(COUNTIF(OFFSET($C$2,,,COUNTA(C:C),1),A2),"",A2)

 と入力して、下へオートフィルして下さい。以下のように、削除データのマスは空白になり、それ以外はA行のデータが表示されます。

 

これで、A行からC行のデータを取り除いたものがB行へ表示されます。

=IF(COUNTIF(OFFSET($C$2,,,COUNTA(C:C),1),A2),"",A2)

 の解説です。

OFFSET($C$2,,,COUNTA(C:C),1)

これは、C行2列目から最終行までを意味しています。1 は、C行のみを意味しています。2 だと C行とD行を意味します。

COUNTIF(OFFSET($C$2,,,COUNTA(C:C),1),A2)

C行2列目から最終行までにA2と等しいデータが何個あるかを計算します。

IF(COUNTIF(OFFSET($C$2,,,COUNTA(C:C),1),A2),"",A2)

もし、A2 と等しいデータが C行にあった場合は、 A2の値を入力し、無い場合は、空白を入力します。

 

如何でしょうか?中々ネットで検索しても出てこないので、記事にしました。お役に立てれば幸いです。

あ、よく考えれば、C行にA2と等しいデータが何個あるか?を計算するだけならば、

=IF(COUNTIF(C:C,A2),"",A2)

でもいけますね。

 

WordPress用プラグインの翻訳ファイル(.mo)をアップロードするフォルダはここ

$
0
0

プラグインが英語のみで提供されている場合、日本人の有志が日本語の翻訳ファイル(編集可能な.po や WordPressが読み取れる.mo)を提供してくれていることがあります。

例えば、ブログを更新するとメルアド登録者へ更新通知がを飛ばすことが出来るsubscribe2というプラグインに対してはこちらで.poと.moが配布されています。しかし、解説ページに書かれているように、

解凍して頂くとテキストファイルreadme.txtと.moファイル、.poファイルが存在しているはずですので、.moと.poをwp-content/plugins/subscribe2/フォルダに保存してください。それだけでインストールは完了です。

と、.po及び.moファイルをプラグイン一式が入ったフォルダ内にアップロードしてしまうと、バージョンアップした際に自動的に消えます。消えないようにする為には別のフォルダーへアップする必要があります。

そのフォルダーは、 wp-content/languages/plugins/ です。このフォルダ内へ、 subscribe2-ja.mo をアップすると問題無く日本語翻訳されますし、バージョンアップしても翻訳ファイルは消えることはありません。尚、.moファイル名は、プラグインのフォルダ名と合わせる必要があります。subscribe-ja.mo としても読み込まれることはありません。


要素の横並びは、 float:left; よりも display:flex; の方が便利

$
0
0

CSSを使う場合、以下のコードで要素を横並びさせることが可能でした。

【HTML】

<div class="waku clearfix">
<div class="in">あああああああああああああああああああ</div>
<div class="in">いいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいい</div>
<div class="in">うううううううううううう</div>
<div class="in">えええええええええええええええええええええええええええええええええええええええええええええええええええええ</div>
<div class="in">おお</div>

【CSS】

.waku{
    width: 500px;
    background: #999;
}

.in {
    background: #ccc;
    border: 1px solid #000;
    padding: 10px;
    float: left;
    width: 70px;
}

.clearfix:after{
    content : '';
    display : block;
    clear : both;
    height:0; 
}

このコードの問題点は、

  • 枠線を設定した場合、その枠線の幅を計算して 内部要素の幅(.in)を設定する必要がある
  • 枠線幅をキチンと計算しても、ブラウザ毎に枠線の幅の扱いが異なる為、思ったように表示されないことがある
  • floatを設定した場合、 clearfix のおまじないを設定しないと、枠要素で設定した背景が表示されないなど、不具合が生じる場合がある
  • 内部要素の高さが揃わない

というところにありました。

【このコードでの表示】

 

無理矢理高さを揃えるには、

【CSS】

.in {
    min-height: 219px;
    background: #ccc none repeat scroll 0 0;
    border: 1px solid #000;
    float: left;
    padding: 10px;
    width: 70px;
}

と、ハイライトした行を追加すれば可能でした。

【このコードでの表示】

しかし、例えば「う」の行を加筆したりすれば、たちまち、高さが揃わなくなります。

 

CSS3のdisplay:flex; が便利

このまどろっこしさを解消する設定項目として、CSS3には「display:flex;」が登場しました。古いバージョンのブラウザを切り捨てて構わないのなら非常に便利です。

【CSS】

.waku{
    width: 500px;
    background: #999;
    display:flex;
}

.in {
    background: #ccc;
    border: 1px solid #000;
    padding: 10px;
    width: 20%;
}

 .in に width:20%; を設定しているのは、要素が5個ある為です。6個などの場合でも17%以上にすれば、自動的に幅が揃います。

 

ご覧の通り、要素の高さも幅も揃っています。

2列にする場合

では、要素を2列ずつ表示するにはどうしたら良いでしょうか?この設定も非常に簡単で、2行追加するだけで可能です。

【CSS】

.waku{
    width: 500px;
    background: #999;
    display:flex;
    flex-wrap:wrap;
}

.in {
    background: #ccc;
    border: 1px solid #000;
    padding: 10px;
    width: 50%;
    box-sizing: border-box;
}

設定項目の意味は以下の通りです。

flex-wrap:wrap; → 複数行での表示を許可
width:50%; → 内部要素の幅を50%に変更
box-sizing: border-box; → 50%の幅の中に、padding、borderの幅を含む

 

ご覧の通り、幅も高さも整っています。

 

もし、この記事の意味が今一分からない場合でも、要素が綺麗に揃わないという場合には、現在の枠要素へ、

display:flex;
flex-wrap:wrap;

を追加してやるだけで解決する場合があります。一度お試し下さい。

ファイルへの直接リンクを禁止する方法

$
0
0

WordPressへ誰でも簡単に追従するソーシャルボタンを一瞬で付けられるプラグインをダウンロード形式で配布しているのですが、他サイトからページURLではなくファイルのURLへ直接リンクされないようにする必要が生じたので、記事にしました。

具体的には、 http://pct.unifas.net/wp-content/uploads/2015/05/share.zip へ、他サイトから直接リンクされた場合に、そのリンクをクリックすると、 http://pct.unifas.net/cms/wordpress/3364/ へリダイレクトされる方法です。一度、あなたのサイトへ、ファイルへ直接リンクしてみて頂いたら、動作のイメージを掴んでもらえると思います。

基本的には、指定のURL以外からの画像参照は、別の画像に差し替える方法と同じ要領です。

.htaccessへ、以下のコードを記入してもらえばOKです。あなたのサイトに合わせて、ハイライトしている行を書き換えて下さい。それぞれの行の解説は、こちらが詳しいので参考にして下さい。

RewriteEngine on
#直接参照はリダイレクトしない
RewriteCond %{HTTP_REFERER} !^$
#以下のURLからのアクセスはリダイレクトしない
RewriteCond %{HTTP_REFERER} !^http(s)?://pct.unifas.net [NC]
#Googleからのアクセスはリダイレクトしない
RewriteCond %{HTTP_REFERER} !google\. [NC]
#Yahoo!からのアクセスはリダイレクトしない
RewriteCond %{HTTP_REFERER} !yahoo\. [NC]
#bingからのアクセスはリダイレクトしない
RewriteCond %{HTTP_REFERER} !bing\. [NC]
#ファイルへ他サイトから直接リンクされた場合は、指定のURLへリダイレクトする
RewriteRule ^wp-content/uploads/2015/05/share.zip$ http://pct.unifas.net/cms/wordpress/3364/ [L]

 

Google Analytics API v3.0をPHPを使って利用する方法

$
0
0

2015年5月27日を境に、Google Analytics APIを使ってデータを引っ張ってきていたPHPのプログラムが正常にデータをはき出さなくなりました。原因を探るためにネットで情報収集をしていたところ、これまで主流だったGoogle Analytics API v2.3のサポートが打ち切られた為とのことでした。(余談ですが、2015年6月11日14時現在、v2.3をPHPで呼び出したところ何故か実行出来ました。理由は分かりませんが、いずれは廃止されるものですのでv3.0へプログラムを早めに対応させておく方が良いでしょう)

バージョン2.3の認証方式はClientLoginです。ClientLoginは2012/04/20に非推奨化されています。

参考:http://fsshuji.tumblr.com/post/116889330964/gapi

これからはv3.0を使うように推奨されています。私はgoogleanalytics.class.php というライブラリをベースプログラムを構築していましたが、v2.3のみしか対応していない為、このライブラリは使えなくなったということです。古いgapi.class.php も使えなくなったようです。しかしこちらは、v3.0に対応した最新バージョンが出ています。

さて、このページに辿り着かれた方は、私と同じようにプログラムが動作しなくなって困り、情報収集に来られた方だと思います。私も情報収集をして何とかプログラムが正常に動作するように改修出来ましたが、まだ情報がネット上に分散されており、あちこち見ないと改修出来ないかもしれません。そこでこのページへ統合的な改修方法を記載しておきます。「Google Developers Consol」にアカウントを開くなど結構面倒なんですが、他には方法はありません

Google Developers Consol でプロジェクトの作成

https://console.developers.google.com/project へアクセスして、これまでデータを引っ張ってきていたアナリティクスのアカウントでログインして下さい。左に「プロジェクトの作成」という項目があるのでクリックして新規のプロジェクトを作成して下さい。

プロジェクト名は何でも構いませんが、英数字で入力し、作成をクリックして下さい。十数秒程したらプロジェクトの作成が完了します。

analytics APIの有効化

左メニューから、[APIと認証] > [API] と進み、analytics API を検索し、有効化して下さい。

新しいクライアントIDの作成

[APIと認証] > [認証情報] から、[新しいクライアントIDを作成] をクリック。[サービスアカウント] を選択し、[クライアントIDを作成]をクリックして下さい。

[サービスアカウント]という項目が新たに出現しました。この項目の[メールアドレス]を使うのでメモしておいて下さい。

P12キーを保存

[サービスアカウント]の項目の下にある[新しいP12キーを生成]をクリックし、生成されたhogehoge.P12ファイルを保存して下さい。

アナリティクスへメールアドレスの登録

アナリティクスを開いて、上方メニューの[アナリティクス設定] > [ユーザー管理]を開いて下さい。

[権限を付与するユーザー]へ先ほどメモしたメールアドレスを入力して[追加]して下さい。権限は、[表示と分析]のままで構いません。

ライブラリとP12キーのアップロード

google api php client というライブラリをダウンロードして下さい。zipファイルを展開して、これまでPHPプログラムを実行していたフォルダへ全てアップロードして下さい。google api php clientのフォルダ名が長いので、[google-api-php-client-master] → [g_api_c]に変更しています。
注意:Google APIs Client Library for PHP というライブラリを使ってv3.0を実行するという記事もありますが、2013年に更新が止まっている為か、私が試した限り使えません。

同じフォルダへ、.P12ファイルもアップロードして下さい。

PHPからGoogle Analytics APIを実行

注意: google api php client は、PHP5.3以上でなければ、エラーが出ます。注意下さい。

一応、以下のようなコードでデータは取得出来ます。

<?php


//メールアドレス
$client_email = '***@developer.gserviceaccount.com';
//秘密キーファイルの読み込み
$private_key = @file_get_contents('./***.p12');

//ビューID
$view_id = "***";

//日付
$from_d = "2015-06-10";
$to_d   = "2015-06-11";

//ライブラリを読み込む
require_once "./g_api_c/src/Google/autoload.php";

//サービストークンのセット
if(isset($_SESSION["service_token"])){
	$client->setAccessToken($_SESSION["service_token"]);
}

//スコープのセット
$scopes = array("https://www.googleapis.com/auth/analytics.readonly");
//クレデンシャルの作成
$credentials = new Google_Auth_AssertionCredentials($client_email,$scopes,$private_key);

//Googleクライアントのインスタンスを作成
$client = new Google_Client();
$client->setAssertionCredentials($credentials);

//トークンのリフレッシュ
if($client->getAuth()->isAccessTokenExpired()){
	$client->getAuth()->refreshTokenWithAssertion($credentials);
}
$_SESSION["service_token"] = $client->getAccessToken();


$ga = new Google_Service_Analytics($client);


$report = $ga->data_ga->get(

"ga:{$view_id}",
$from_d,
$to_d,
'ga:uniquePageviews',

array(
'dimensions'  => 'ga:pageTitle',
'max-results' => '10',
'sort'        => '-ga:uniquePageviews',
)

);


print_r($report['rows']);



?>

参考: http://syncer.jp/google-analytics-api-tutorial

googleanalytics.class.php 使ったプログラムを書き換えるポイント

googleanalytics.class.php では使えたのに、 google api php client では類似の関数が無いものがあります。私が認識しているものだけ上げておきます。参考にしてください。

  1.  setProfile に類似の関数はありません。 $ga->data_ga->get の箇所で記載するしかありません。
  2. setDateRange もありません。上記と同様です。
  3. getReportの箇所は、data_ga->get へ書き換える必要があります。
  4.  ‘metrics’ => urlencode(‘ga:uniquePageviews’) のように、配列に入れることは出来ません。

大体、この位です。

4.については、

$report = $ga->getReport(
 array(
  'dimensions'  => urlencode('ga:fullReferrer,ga:pagePath,ga:pageTitle'),
  'max-results' => urlencode(300),
  'metrics'     => urlencode('ga:uniquePageviews'),
  'sort'        => urlencode('-ga:uniquePageviews'),
 )
);

 のように記述していたものを、

$report = $ga->data_ga->get(

"ga:<ProfileID>",
2015-06-10,
2015-0611,
'ga:uniquePageviews', //metricsの箇所

 array(
  'dimensions'  => 'ga:pageTitle',
  'max-results' => '300',
  'sort'        => '-ga:uniquePageviews',
 )
);

のように記述しなければならないという意味です。

以上、Google Analytics API v3.0をPHPを使って利用する方法でした。参考になれば幸いです。

コンバージョン率を高めるA/Bテストの方法

$
0
0

コンバージョン率を高めるA/Bテスト方法

WEBサイトの運営者であれば、「広告出稿先のバナーのクリック率を高めたい」「サイト内に設置したバナーのクリック率を高めたい」「資料請求・お問合せ件数を増やしたい」などと常にコンバージョン率(※)を高めることを考えていることでしょう。しかし、バナーやランディングページの善し悪しの基準は、大半のWEBサイトで経営者の好みであったり勘だったりします。客観的根拠は皆無です。従って、「このバナーに変えたら資料請求が減ったようだ。」というような、曖昧な感覚を頼りに経営をすることになります。もしかしたら、バナーのコンバージョン率はむしろ以前よりアップしており、資料請求が減少した本当の原因が、実は訪問者数の減少にあるかもしれないにです。こういった誤った経営判断を防ぎ、客観的データに基づいて経営を行う手法としてA/Bテストがあります。
(※)成約率のことを指します。WEBサイトを訪れたユーザーのうち、何人がサイト運営者が定めた目標を達成したか?を計測します。

A/Bテストとは?

2つ、もしくはそれ以上の異なるパターンのページやバナーを用意し、実際にユーザーに利用させてクリック率や購入率、お問合せ率などを比較するテストのことを言います。テストで良い結果が出たものを本番用のページやバナーとして採用することになります。スプリットテスト・スプリットランテストとも言われる手法です。

A/Bテストで気をつけるべき点は?

A/Bテストを行う上で気をつけるべき点として以下のものがあります。

数で判断してはいけない

例えば、Aのバナーのクリック数が5でBのバナーが10の場合、Bを採用するという判断は危険です。何故ならば、Aは250回表示しておりBは1000回表示しているかも知れないからです。クリック率でみると、Aは2%でBは1%となっており、Aが優秀なバナーということになります。必ず、割合で判断する必要があります。

同一ユーザーには同一のパターンを見せる

Aがトップページを初めて訪問した時にAのバナーが表示されたが、WEBサイトを一通り確認した後、トップページに戻って来たらBのバナーが表示されていたというテストは不完全です。何故ならば、どちらのバナーに興味を持ったのか判断が出来ないからです。同一ユーザーに対しては同一のパターンのページやバナーを見せ続ける必要があります。

出来るだけ大きい母数のユーザーでテストする

A、Bのパターンをそれぞれ100人ずつ見せたところ、Aのコンバージョン率は2%でBは1%だったからと言って、Aのパターンを採用するという判断は危険です。母数が少なすぎる為、偶然そうなった可能性があるからです。最低、1,000人ずつ程度のデータを取るべきでしょう。

A/Bテスト用のバナーやランディングページを量産するには?

通常、バナーやランディングページは、経営者が好むテイストや載せたい情報をデザイン会社へ伝えて、デザイン会社が形にします。従って、A/Bテスト用に量産しようとしても考えられるバリエーションに限りがあります。また、似通ったものが出来がちです。

そこで活躍するのが、クラウドワークスランサーズと言ったクラウドソーシングです。クラウドソーシングには、法人・個人を問わず多くのデザイナーが登録しているので、大まかな方針と目的を伝えた上でデザイナーの感性に任せた提案を求めると、バリエーションに富んだデザイン提案をもらうことが可能です。この方法は、nanapiのけんすう氏も紹介している方法です。

C-teamで作るバナー広告の効果がスゴすぎてひいた話

ただ、コンペ形式だと、有料オプションを使うなどしなければ提案が集まりにくい傾向にあるようです。採用されなかった場合に「働き損」になることを嫌っているからでしょう。発注側としても今一のデザインしか集まらなかった場合でも、どれか一つは採用として報酬を払う必要が生じます。

このようなことが起きないようにするには、お互いにとってリスクが少ない「プロジェクト形式」の方が良いかも知れません。プロジェクト形式ならば、まずは多くのデザイナーに見積もりをお願いすることが出来ます。同時に、過去の制作物を見せてもらうことも可能です。その上で、価格に見合うクオリティのデザイナーへ発注すれば良いのです。

A/Bテストのツールは?

A/Bテストのツールとしては、テストを行うシーンに応じて使えるものが異なります。

バナー広告出稿の場合

WEB媒体へ出稿する場合、一旦、提出したバナーを変更するのは、時間がかかったり変更を拒否されたりする場合があります。従って、広告出稿する前にA/Bテストを行い、結果が良かったものを提出するべきです。そのテストツールとしては、GoogleアドワーズかYahoo!のスポンサードサーチを使うのが良いでしょう。クラウドソーシングで採用したバナーを全て、ディスプレイ広告用素材として使い出稿するのです。数千回バナーが表示された時点で、クリック率に差が生まれていることでしょう。もちろん、テストとは言え、CPC広告としての出稿になるので、費用はかかります。しかしながら、多額の広告費をWEB媒体へ払ったものの、反応がゼロという悲惨な結果は防げます。

ランディングページの場合

ランディングページのA/Bテストは、Googleアナリティクスを使えば可能です。詳しい方法は希望があれば記事にするとして、ここでは簡単に説明します。

コンバージョンURLの設定

アナリティクスでA/Bテストを行うには、コンバージョンとするURL(アナリティクスでは目標といいます)を設定する必要があります。

上方メニュー[アナリティクスの設定] > ビュー項目の[目標] > [新しい目標]

をクリックしてください。

 [目標設定] ・・・ どれを選んでも問題ありません。コンバージョンの種類として一番近いものを選択して下さい。

[目標の説明]・・・多くの場合は、お申込完了やお問合せ完了のURLをコンバージョンにすることが多いと思います。従って、[目標]の選択で良いでしょう。異なる場合は、あなたのビジネスに合わせて設定して下さい。

[目標の詳細]・・・上で[目標]を選択した場合、お申込・お問合せ完了ページのURLを設定して下さい。説明に書いてあるようにドメイン部分は省いて下さい。お申込開始ページのURLと、お申込完了ページのURLが同一である場合は、下の記事を参考にしてください。

参考: Google analyticsで、同一URLの遷移を取得する方法

最後に[目標を作成]で完了です。

A/Bテスト用URLの設定

上方メニューの[レポート] > 左メニューの[行動] > [ウェブテスト] > [テストを作成]

をクリックして下さい。[テストの目標を選択]には以下のように入力して下さい

[このテストの名前]・・・テスト名を任意で付けて下さい。

[このテストの目的]・・・先ほど作成した目標を設定して下さい。

[テスト対象のトラフィックの割合]・・・50%位が良いと思います。

入力が完了したら[次のステップ]をクリックして下さい。

[テストを設定]には以下のように入力して下さい。

[オリジナルのページ]・・・元々使っているランディングページのURL

[パターン1]・・・新しく作ったランディングページのURL

更にテストしたいパターンのランディングページがあるなら、[パターンを追加]をクリックして同じように追加していって下さい。完了したら[次のステップ]をクリックして下さい。

[テストコードの設定]では、[手動でコードを挿入]を選択すると<head>タグ開始直後に、指定のコードを入れるよう指示があります。指示に従って、[オリジナルページ]及び[パターン1]のHTMLを書き換えて下さい。

完了したら[次のステップ]をクリックして下さい。以下のように表示されたら成功です。

[テストを開始]をクリックして下さい。15分位経過したら、A/Bテストが開始します。

サイト内バナーの場合

 サイト内バナーをA/Bテストする場合は、残念ながらGoogleアナリティクスでは出来ません。代わりに、Optimizelyを使います。無料版と有料版がありますが、月間、50,000ユニークユーザーに対してA/Bテストが行えるなど無料版で十分使えます。料金プランには有料版の料金を含めて機能面以外は詳しいことが書かれていないので結構戸惑います。右上の[無料アカウントを作成]からユーザー登録を完了して下さい。

注意:Optimizelyで定義する[訪問者]は、重複を含まないユニークユーザー(UU)です。しかし、このUUの数値が、アナリティクスの数値や他のアクセス解析の数値の半数~2/3となり戸惑うかもしれません。理由は分かりませんが、A/Bテストを行う上ではクリック率のパーセンテージで評価する為、問題無いと思います。

新しい実験の作成

[概要] > [新しい実験]

をクリックして下さい。[実験名]と[実験URL]を入力して[実験の作成]をクリックして下さい。[実験URL]は、トップページのURLではありません。A/Bテストを行いたいURLを入力して下さい。

バリエーション#1の編集

自動的に[オリジナル]と[バリエーション#1]のタブが作成されます。

[オリジナル]は触らず、[バリエーション#1]を編集して下さい。今回は、無料会員登録バナーのクリック率を計測します。オリジナルは以下です。

画像の上で右クリックすると編集メニューが出るので、[要素の編集] > [画像の変更]をクリックして下さい。

[画像の変更]へ、A/BテストしたいバナーのURLを入力して[完了]して下さい。

更に、画像の上で右クリックし[クリックの追跡] > [新しいクリック目標の作成]を選択して下さい。

[目標名]を入力し[保存]して下さい。

右上の旗のマークをクリックして、さっき設定した目標が追加されていれば問題ありません。

バリエーション#1以外にもテストしたいバナーがあれば、[バリエーションの追加]をクリックして同じように編集して下さい。終わったら、[実験の開始]をクリックして下さい。以下のアラートが表示されたら[OK]を押して下さい。

<head>内へタグの挿入

[ホーム]をクリックすると[概要]タブへ戻ります。先ほど追加した実験が追加されていれば成功です。

その後、[設定]タブを開き枠内に表示されたタグを実験URLのヘッダー内へ挿入して下さい。

以上で、設定は完了です。

実験の結果

今回、記事に使ったのは実際に行っている実験です。[オリジナル]と[バリエーション#1]のバナー、どちらがクリック率が高いと思いますか?

結果は・・・

オリジナルの方が高いということに!!

私は、[バリエーション#1]の方がクリック率が高くなると思っていたのですが、違っていました。長年の勘は当てになりませんね。数値は嘘をつきません。

まとめ

広告バナー、ランディングページ、サイト内バナーのA/Bテストの方法を紹介しました。長年の勘は、あまりアテにはなりません。問い合わせ件数や売上が今一伸びないという場合は、バナーやランディングページを変えることで状況が変わることがあります。どこがボトルネックになっているのかを探る為にも是非、A/Bテストを活用してみてください。

あなたの好みでは無いデザインが、想定外に反応率が高いという結果になるかもしれませんよ?

stingerとaffingerテンプレートのパンくずナビの修正方法

$
0
0

多段階のカテゴリ構成にしている場合、アーカイブ表示にすると、パンくずナビがうまく表示されないというバグがあるようです。

「スイングトレードで稼ぐ株式投資」というカテゴリの上位カテゴリの「口コミ」を表示しているのに、パンくずナビでは下位のカテゴリまで表示されてしまいます。

このバグを修正する方法を紹介します。やり方は、stingerでもaffingerでも同じです。

WordPressの管理画面から [外観] > [テーマの編集] > [アーカイブ(archive.php)] のファイルを開いて下さい。

上方に、

<?php /*--- カテゴリーが階層化している場合に対応させる --- */ ?>
<?php $postcat = get_the_category(); ?>
<?php $catid = $postcat[0]->cat_ID; ?>
<?php $allcats = array($catid); ?>

と記載がある箇所が見つかるはずです。この部分を

<?php /*--- カテゴリーが階層化している場合に対応させる --- */ ?>
<?php
$catid = get_query_var('cat');
if( !$catid ){
 $cat_now = get_the_category();
 $cat_now = $cat_now[0];
 $catid  = $cat_now->cat_ID;
}
?>
<?php $allcats = array( $catid ); ?>

と書き換えて下さい。以上です。

参考:【WordPress】正しいカテゴリIDの取得方法

HTTPステータスコードチェッカー

$
0
0

数百あるURLが問題無く表示されているか調べる必要が生じましたが、一つずつURLをチェックして404エラー(=ページの不存在)が発生していないかチェックするのは手間がかかります。

そこで、URLリストを読み込ませれば一度にまとめてURLの存在確認をしてくれるようなソフトを探したのですが、今一良い物がみつかりませんでした。WEBサイトでもそういうサイトが無いか探してみたところ、HTTP Status Code Checkerというサイトがあったものの、「一度に100件のリストしかチェック出来ない」、「チェックの間隔が短すぎるのか、503エラー(=サーバーへ一時的にアクセス出来ない)が頻発する」という理由で使えませんでした。

それならば、ということでプログラムを自作することにしました。その名も「HTTPステータスコードチェッカー」。動作の挙動を参考にしたHTTP Status Code Checkerのサイト名をカタカナ表記にして使わせてもらいました。

使い方は簡単です。URL毎に改行してあるURLリストを記入欄へ入力して「送信」を押すだけです。

1URLのチェックに0.5秒くらいかかりますが、キチンとチェック出来ます。非常に便利なプログラムだと思いますので、是非お使い下さい。

 

スティック型PCを使ってテレビで快適に映画を見よう

$
0
0

3611

皆さん、映画をレンタルする時、どうしていますか?TSUTAYAで借りてきて見ていますか?数年前まではそれが主流でしたが、Googleやアップルがオンラインで映画を配信するようになってから、スマートフォンやタブレットで見ることも増えて来たと思います。パソコンで見るなら、AmazonビデオGyaOストアTSUTAYAディスカスを使っている方も多いかもしれません。

しかし、スマートフォン・タブレット・パソコン(以下、「パソコン類」と言います)、いずれで映画を見る場合でも問題があります。家族で見る場合には画面が小さすぎるということです。そこで、HDMIを使ってテレビへ画面を映す方法を取ることを考えるんですが、方法が多数あり、どれが一番良いのか迷います。

迷った結果、最終的にはスティック型PCが一番良いという結論に至ったのですが、その理由を書いて行きます。

パソコン類で映画を見る場合の問題点

パソコン類からHDMIを使ってテレビへ画面を映す場合、画面は大きくなるものの、以下のような問題が新たに生じます。

  • パソコン類とテレビをHDMIケーブルを使って繋ぐのが、個人的に面倒です。見終わったら、片付けも必要となります。
  • 映画を見ている間は、パソコン類を触ることが出来ません。仕事用のメールが来て早く返信する必要があっても、映画を見終わるまでは触れません。
  • 映画を巻き戻したり、一時停止する場合は、パソコン類で操作する必要があります。ソファーとテレビが離れている場合は面倒です。
  • iPhoneは、LightningケーブルとHDMIを変換する純正のコードはありません。他社製はありますが、映像や音声が少し遅れるなど評判が良くありません。

パソコン類で映画を見る場合に求められる条件

そこで、これらの問題をクリアし、映画だけではなく、あわよくば面白動画をも見ようとすれば、以下の条件を満たす必要があります。

  • 仕事などに支障が出ないよう、映画専用のパソコン類を用意するべき
  • 従って、安いパソコン類である必要がある
  • 場所を取らない
  • ソファーに座ったままでも操作ができる
  • AmazonビデオとGyaOストアの映画が見られる
  • iTunes StoreとGoogle Playで配信されている映画も見られる
  • ニコニコ動画などのその他の動画配信サイト(以下、「その他の動画配信サイト」と言います)の動画も見られる

各種パソコン類の検討

「映画を見る」という用途に絞った場合、Chromecast、Apple TV、Amazon Fire TVなど、大手が素晴らしい製品を出しています。ところが、私が調べた限り、一長一短があり、コストを最優先する以外では購入するべきではないと判断しました。個別に見ていきます。

Chromecastはどうか?

Chromecastとは、パソコン類の映像をWi-Fi経由でテレビに映し出すツールです。

Wi-Fi経由というのが、映像や音声の遅延が生じないか、少し気になるところです。Google Playには公式対応しているので、遅延は起こりにくいよう設計しているでしょうが、Amazonビデオには対応していませんので、無理矢理見ようとすれば、パソコン類の画面(GoogleChromeなど)をChromecastへ転送し、それをテレビに映し出すということが必要になり、少々の遅延があると報告があります。

クロームキャストでAmazonインスタントビデオを視聴する方法

また、パソコン類で再生している映像を、テレビへ映すという方式が引っかかります。映画を画面に表示したままにしなくても大丈夫で、他の作業も出来るとのことですが、映画を見ている間は、パソコンの電源は切れないですし、スマートフォンのバッテリーの減りが早くならないかも気になりました。

Apple TVはどうか?

Apple TVとは、iTunes Store で購入した映画や音楽をテレビで見るためのものです。従って、iTunes Store でレンタルした映画は、快適に見られると思います。ところが、Amazonビデオについては、AirPlay(iTunesやiPhoneで再生している音楽や映画を、Wi-Fiを経由してテレビで再生する機能)の機能でテレビに映すので、遅延やコマ落ちが生じるようです。

Amazonインスタントビデオの動画をApple TVで観る

Amazon Fire TVはどうか?

4,980円という破格のFire TV Stickが10月末に発売されることで盛り上がっています。Amazonビデオを視聴するのには、全く問題無いでしょう。

ところが、Google Playには未対応とのことです。更に、Fire TV にはブラウザが無いという噂があるので、その他の動画配信サイトの動画は視聴出来ないかもしれません。

「映画視聴には、Amazonビデオしか使わない」という方には、非常にコストパフォーマンスが良く、素晴らしい端末だと思います。

実は、最後まで比較検討に残ったのが、Fire TVでした

Kindle Fire HD タブレットはどうか?

こちらもAmazon製なので、Amazonビデオは問題無く見られます。また、純正のHDMIケーブルを使えば、テレビでも視聴出来ます。

しかし、Google Playの映画はFire TV同様、視聴出来ません。その他動画配信サイトの動画の視聴もハードルが高いようです。また、タブレットで操作する必要があるのでソファーで座ったまま視聴という方法は出来ません。

そこでスティック型PCがオススメ

これまで見て来た通り、各社の端末には一長一短があります。「Amazonビデオだけ見られればOK」ならば、Fire TV一択なんですが、GyaOストアやGoogle Playにはあるというようなことが希にあります。その他動画配信サイトも見たい時があるじゃないですか。

そうすると、私の希望を全て満たす端末は、スティック型PCしかありませんでした

スティック型PCを買う際に気をつけたい条件

スティック型PCに範囲を狭めても、結構多くの種類があります。「映画を見る」ということに限定すると、以下の条件に気をつけた方が良いです。

  • OSがWindows10のもの
  • メモリーは2GB以上
  • USBは2つある方が望ましい
  • HDMI出力端子があること

現在売っているスティック型PCのOSは、大きく分けて、Windows8系・Windows10・Android系の3種類があります。

Android系は、Amazonビデオを視聴出来ますが、購入は出来ません。別途、PC等で購入する手間が発生します。また、その他の動画配信サイトは、うまく視聴出来ないものもあります。

Windows8系は、10より動作が重いと言われています。10へのバージョンアップは無償なのですが、手間と時間がかかるので最初から10を買った方が良いです。

メモリーが1GBだと、動作がもっさりするかもしれません。USBは、キーボード&タッチパッドを接続する際に必要です。

オススメのスティック型PC

上記の条件を満たし、コストパフォーマンスが良く、評判も良いものは2つしかありません。ドスパラの製品です。

ファン付き:Diginnos Stick DG-STK2F(税別14,800円)
ファン無し:Diginnos Stick DG-STK1B(税別12,800円)

これより安い製品も価格コムを見ればあるんですが、メモリーが1GBだったり、評判がよくありませんでした。

購入する際、神戸にあるドスパラまで行って話を聞いたんですが、「ファン付きだろうとファン無しだろうと、冷却効果に大差無し。ファン無しをオススメします」と断言されました。(※追記あり)

スティックPCを操作するのには、キーボード&タッチパッドが別途必要です。スティック型PCと併せて購入する必要があります。

私が購入したのは、ロジクールのWireless Touch Keyboard K400r(税別3,973円)です。

合計すると18,000円程になり、Fire TV スティックよりもはるかに高いですが、完璧な映画視聴環境を作ろうとするとこれが最安値です

スティック型PCの設定方法

右下へスティック型PCをキーボードで操作する為のUSB受信機を差し込みます。その左は、給電用のUSBケーブルです。

そして、左のHDMI端子をテレビへ差し込みます。左下に電源ボタンがあるので1秒ほど押します。すると、パソコンの画面のようにテレビへWindows10の画面が映ります。後は、メッセージに従って初期設定をすればOKです。キーボードは、自動で認識します。

スティック型PCを使う際の注意点

ドスパラのスティック型PCに限ってだと思いますが、いくつか注意点があります。

1.ドライバーのアップデート
使用しているドライバーが古い場合があります。こちらを使ってバージョンアップしておきましょう。

2.Chrome、Firefoxと相性が悪い
殆どの映画や動画では問題無いのですが、一部の動画をGoogleChromeで再生したら、動画が緑になり、音声も再生されませんでした。FirefoxはFirefoxで、Amazonビデオを再生して暫くすると、プツプツ映像や音声が途切れます。Microsoft Edgeを使う方が良いでしょう。

3.給電USBコードの延長について
USBコードが短かったので、延長USBコードを買ってきてつないだところ、映画再生中に突然スティック型PCの電源が切れるようになりました。延長USBをつなぐと、給電の電圧が下がるのかもしれません。コードを延長する場合は、コンセントの方の延長コードを使って下さい。これならば、問題ありませんでした。

まとめ

如何でしたでしょうか?快適な映画視聴環境を構築するには、少し割高になりますが、スティック型PCを購入するのがベストです。

「自分は、Amazonビデオさえ見られれば、問題ない!Amazonビデオに無い映画ならば、視聴を諦める」と割り切っている方であれば、Amazon Fire TVがコストパフォーマンスにも優れておりベストな選択だと思います。

追記

ドスパラの店員によって、言うことが変わるようです。ただ私の場合、「映画を見る専用で」と事前に伝えていたので、「(その用途ならば)ファン付きもファンレスも差は無い」という意味だったのかもしれません。また、ファンレスの場合でも、「社内実験で、映画の15時間再生までは、問題無かった」とも言っていました。


賢威7の初期設定

$
0
0

備忘録です。

設定

パーマリンク設定

/%category%/%post_id%/

未分類の設定

投稿>カテゴリー

スラッグ「other」、名前「その他」へ変更

コメントの不許可

設定 > ディスカッション設定 > 新しい投稿へのコメントを許可する、他のブログからの通知 (ピンバック・トラックバック) を受け付ける

のチェックを外す

賢威の設定

賢威の設定

  1. 「サイトのタイトル」を入力
  2. 「サイトの簡単な説明」を入力=トップページのディスクリプションになる

トップページ

  1. 「トップページのタイトル」を入力=トップページのタイトルになる
  2. メイン画像を空白

一覧ページ

検索結果ページ:index

バグ修正1

functions.php の get_canonical_keni を

$url = (preg_match("/\/page\/".get_query_var('paged')."/", $_SERVER['REQUEST_URI'])) ? site_url()."/page/".get_query_var('paged')."/" : get_site_url()."/?paged=".get_query_var('paged');
} else {
$url = get_site_url().'/';	// urlの最後が // と、スラッシュが2つになった場合は、.'/' を削除し、$url = get_site_url(); として下さい。

から

$url = (preg_match("/\/page\/".get_query_var('paged')."/", $_SERVER['REQUEST_URI'])) ? get_home_url()."/page/".get_query_var('paged')."/" : get_home_url()."/?paged=".get_query_var('paged');
} else {
$url = get_home_url().'/';	// urlの最後が // と、スラッシュが2つになった場合は、.'/' を削除し、$url = get_site_url(); として下さい。

へ変更。

TinyMCE

  1. Stop removing をチェック
  2. Link (replaces the Insert/Edit Link dialog) をチェック

サイトマップの設定

PA Auto Sitemap の設定

パーマリンク:sitemap

サイトマップを表示する記事:2

固定ページに貼り付けるソース:

<div><!-- SITEMAP CONTENT REPLACE POINT --></div>

All in One SEO Pack

不要

 

【Excel】2つのリストの過不足をチェックする方法

$
0
0

お問合せフォームに記録されているお問合せ数と、受信したメール数が異なることがありまして、どのメールアドレスからのものが届いていないのか調べる必要が生じました。

十数件程度なら目視でなんとかなるものの、200件以上となると無理です。

そこでExcelの出番です。

リスト1をシート1へ貼り付け

一つのシートへ、リスト1もリスト2も貼り付ける方法もあるのですが、シートを分ける方が私は良いと思うので、シートを分けます。

まず、リスト1をシート1へ貼り付けます。

生のデータを使っているので、黒炭が多すぎです。すみません。

シート2へリスト2を貼り付け

同様に、シート2へ、リスト2を貼り付けます。

比較する計算式の貼り付け

シート1に戻って、

B2へ、

=IF(COUNTIF(Sheet2!A:A,A2)=0,"NG","")

と書いて下さい。

リスト1にあってリスト2に無いメルアド(=データ)はNGと出ます。これを、B列全体にオートフィルして下さい。

シート2のB2にも同様に

=IF(COUNTIF(Sheet1!A:A,A2)=0,"NG","")

と貼り付け、B列全体へオートフィルして下さい。

これで、

  • シート1では、「シート1にはあるデータで、シート2には無いデータには”NG”」
  • シート2では、「シート2にはあるデータで、シート1には無いデータには”NG”」

が表示されます。

これで、データの過不足検証に時間を取られることはありません。

【MySQL】BigDumpエラーの解決法

$
0
0

BigDump でテーブルをインポートしようとした時に躓いたことと、解決法をメモしておきます。

テーブルをインポート出来ないエラー1

Stopped at the line 357.

At this place the current query includes more than 300 dump lines. That can happen if your dump file was created by some tool which doesn’t place a semicolon followed by a linebreak at the end of each query, or if your dump contains extended inserts or very long procedure definitions. Please read the BigDump usage notes for more infos. Ask for our support services in order to handle dump files containing extended inserts.

このようなエラーが出た場合、エクスポートする際の「作成するクエリの最大長」を調整する必要があります。

この項目には、私の環境の場合、50000の数字が入っていました。これを1000にしてエクスポートすれば、問題無くインポート出来るようになります。最大40000でもインポート出来ました。

テーブルをインポート出来ないエラー2

Error at the line 53: ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
~~~~
MySQL: Table ‘calc1’ already exists

テーブルが既に存在している場合、このエラーが出ることがあります。レコードをインポートしようとしたら、既にテーブルが存在していた為、インポート出来ない、という意味です。テーブル自体を削除すれば、問題無くインポート出来るのですが、既に消してはいけないレコードが存在する場合は、削除することは出来ません。この場合は、以下の手順でエクスポートしたDBをインポートする必要があります。

エクスポートする際に、「IF NOT EXISTS (less efficient as indexes will be generated during table creation)」にチェックして下さい。これをチェックすると「テーブルが存在しない場合に、テーブルを作成する」という意味になります。つまり、テーブルが既に存在していれば、既存のレコードにレコードを追加してくれます。これで問題無くインポート出来ます。

因みに、「DROP TABLE / TRIGGER コマンドを追加する」をチェックすると、インポートする際に、一旦、テーブルを削除するという意味になります。

テーブルをインポート出来ないエラー3

Error at the line 347: (2286, 1456207800, 94, 1, 1.08, 0, 0, 0, 0, 55, 0, 51, 50, 0, 0, 0, 0, 94000, 1.44, 9.36, 21.8097447796, 1.89210950081, 0);

~~~

MySQL: Duplicate entry ‘1301-1456207800’ for key ‘PRIMARY’

と出るのは、インポートしようとしたものと同じIDのレコードが既に存在する場合です。

このような場合は、エクスポートする時に、「データをダンプするときに使うコマンド」を「REPLACE」にすればOKです。同じレコードが存在する場合はレコードを上書きしてくれます。

 

如何でしたでしょうか?最初、私がこれらのエラーに直面した際には戸惑い、検索しても中々、ビンゴの情報が見つかりませんでした。トラブル解消の一助になれば幸いです。

 

 

【MySQL】実行中のSQLをキャンセルする方法

$
0
0

以前、さくらインターネットで運営しているカブサポというサイトのプログラムを修正している際、PHPMyAdminで間違えて実行したSQL文が原因で、MySQLのサーバーを落としてしまいました。

#1203 MySQL サーバにログインできません

というメッセージが出て、実行後、10分程経過した辺りからPHPMyAdminへログイン出来なくなりました。また、サイト全体が、DB接続エラーが出て表示されなくなりました。

これを未然に防ぐ為に、暴走する可能性があるSQLをキャンセルする方法があります。

それは、

show processlist;

です。PHPMyAdminのSQLタブへ、以下のように入力して実行すればOKです。

実行すると、現在処理しているSQLの一覧が出てくるので、キャンセルしたいSQLを選択して、停止を押せばOKです。

間違えたSQLを実行を停止させ、サーバー落ちを未然に防ぐには、これしかありません。実際にサーバー落ちしてしまった場合は、さくらインターネットのサポートへメール問い合わせして復旧してもらうしか方法はありません。一度落ちたら、放っておいても復旧することは無いのです。

 

【PHP】複数のRSSフィードから一つのRSSフィードを作る方法

$
0
0

F1最新ニュースという、複数のサイトのトピックを配信する、まとめサイトをWordPressで作ることになりました。

その為に、複数のRSSフィードから一つのRSSフィードを生成する必要が生じたので、調べたことをメモしておきます。

ただ単に、RSSを読み込んで記事として配信するだけならば、FeedWordpress というプラグインがあるので、非常に作成が簡単なんです。

【参考】
FeedWordPressの設定

しかし、引用サイト毎に表記の揺れがあるのが気になって、わざわざRSSを改めて生成するという方法を採ることにしました。「続きを読む」が、サイトによっては「more」になっていたり、テキスト形式で配信するものもあれば、HTMLタグが入って配信するものがあったりなどです。

PHPのコードを参考にしたのは以下のサイトです。というよりも、2つのサイトに書いてあるコードを丸パクリしたと言っても過言ではありません。

【参考】
複数のRSSフィードを高速でまとめる方法
RSS 2.0 形式のフィードを作成するライブラリ

これらのサイトを参考にして出来上がったのが、以下のコードです。現在、RSSを生成するのに使っているコードと全く一緒のものとなります。

<?php
set_time_limit(0);

//表示記事数
$hyojiNum = 50;

//フィード登録
$data['feedurl'][] = 'http://hoge.jp/rss/index.rdf';
$data['feedurl'][] = 'http://hogehoge.jp/rss/feeds/';

//$data['feedurl'][] = ''; いくらでも追加してください

$rssList = $data['feedurl'];

//キャッシュ準備
require_once('Cache/Lite.php');
$cacheDir = 'rsscache/';
$lifeTime = 60*60;
$automaticCleaningFactor = 100;
$options = array('cacheDir' => $cacheDir ,'caching' => true, 'lifeTime' => $lifeTime, 'automaticSerialization' => 'true','automaticCleaningFactor' => $automaticCleaningFactor);

$cacheData = new Cache_Lite($options);



$outdata =  $cacheData->get('rsscache');


if(!$outdata) {

    //同時呼び出し
    $rssdataRaw = multiRequest($rssList);

    for($n=0;$n<count($rssdataRaw);$n++){
        //URL設定
        $rssdata = simplexml_load_string($rssdataRaw[$n]);
   
        if($rssdata->channel->item) $rssdata = $rssdata->channel;

        if($rssdata->item){

            foreach($rssdata->item as $myEntry){
 
                $rssDate = $myEntry->pubDate;
                if(!$rssDate) $rssDate = $myEntry->children("http://purl.org/dc/elements/1.1/")->date;
                date_default_timezone_set('Asia/Tokyo');
                $myDateGNU = strtotime($rssDate);
                $myDate = date('Y/m/d',$myDateGNU);
                $myTitle = $myEntry->title; //タイトル取得
                $myLink = $myEntry->link; //リンクURL取得
		$myDescription = $myEntry->description;

 
//出力内容(CSSOK)
/////////////////////

//表示しない記事
if(preg_match('/PR:/',$myTitle)){continue;}
if(preg_match('@as-web.jp/news/info.php@s',$myLink)){continue;}

//ディスクリプションの整形
$patterns        = array();
$patterns[0]     = '/<a href=".*?">続きを読む<\/a>/';
$patterns[1]     = '/<.*?>/';
$replacements    = array();
$replacements[0] = '';
$replacements[1] = '';
$myDescription   = preg_replace($patterns, $replacements, $myDescription);
$myDescription   = html_paragraph($myDescription);

$patterns        = array();
$patterns[0]     = '/<\/p>$/s';
$patterns[1]     = '/ \[&amp;#8230;\]/';
$replacements    = array();
$replacements[0] = " (<a rel=\"nofollow\" href=\"{$myLink}\">引用元</a>)</p>";
$replacements[1] = '...';
$myDescription   = preg_replace($patterns, $replacements, $myDescription);


$outdata[$myDateGNU] = "$myDateGNU<+>$myLink<+>$myTitle<+>$myDescription";

            }
        }
    }

    //ソート
    krsort($outdata);
   
    $cacheData->save($outdata,'rsscache');
}

$nn = 0;
$html = '';

include_once 'rss2/RssFeed.php';
include_once 'rss2/RssItem.php';

$rss = new RssFeed();
$rss->title('F1の最新情報');
$rss->description('F1の最新情報');
$rss->link('http://f1-news.info/');
$rss->atomLink('http://f1-news.info/');

foreach($outdata as $outdata) {
   
    $nn++;

$outdatas = explode("<+>", $outdata);

//"$myDateGNU<+>$myLink<+>$myTitle<+>$myDescription";

$myDate = date('Y-m-d H:i:s',$outdatas[0]);

$item = new RssItem();
$item->title($outdatas[2]);
$item->description($outdatas[3]);
$item->link($outdatas[1]);
$item->guid($outdatas[1]);
$item->pubDate($myDate);
$rss->addItem($item);

   
     if($nn == $hyojiNum) break;
   
}

//$html = '<html lang="ja" style="overflow-x:hidden;"><head><META http-equiv="Content-Type" content="text/html; charset=utf-8"></head><div>'.$html.'</div></html>';
header('Content-type:application/rss+xml');
echo $rss->saveXML();


//同時呼び出し関数
function multiRequest($data, $options = array()) {
 
  // array of curl handles
  $curly = array();
  // data to be returned
  $result = array();
 
  // multi handle
  $mh = curl_multi_init();
 
  // loop through $data and create curl handles
  // then add them to the multi-handle
  foreach ($data as $id => $d) {
 
    $curly[$id] = curl_init();
 
    $url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d;
    curl_setopt($curly[$id], CURLOPT_URL,            $url);
    curl_setopt($curly[$id], CURLOPT_HEADER,         0);
    curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, 1);
 
    // post?
    if (is_array($d)) {
      if (!empty($d['post'])) {
        curl_setopt($curly[$id], CURLOPT_POST,       1);
        curl_setopt($curly[$id], CURLOPT_POSTFIELDS, $d['post']);
      }
    }
 
    // extra options?
    if (!empty($options)) {
      curl_setopt_array($curly[$id], $options);
    }
 
    curl_multi_add_handle($mh, $curly[$id]);
  }
 
  // execute the handles
  $running = null;
  do {
    curl_multi_exec($mh, $running);
  } while($running > 0);
 
  // get content and remove handles
  foreach($curly as $id => $c) {
    $result[$id] = curl_multi_getcontent($c);
    curl_multi_remove_handle($mh, $c);
  }
 
  // all done
  curl_multi_close($mh);
 
  return $result;
}



function html_paragraph($str, $xhtml=true){
    $arr = preg_split("/\R\R+/", $str, -1, PREG_SPLIT_NO_EMPTY);
    $result = "";
    foreach($arr as $value){
        $value = htmlspecialchars($value, ENT_QUOTES);
        $result .= '<p>' . nl2br($value, $xhtml) . "</p>\n";
    }
    return $result;
}

?>

以上、参考にして下さい。

Viewing all 218 articles
Browse latest View live