作成者別アーカイブ: admin@webteq

PIXUS MG3630 突然つながらなくなる。。それはルーターのせいだった。

PIXUS MG3630 プリンタを使用しているのだが、突然つながらなくなることが多々ある。
そのたびにドライバーを入れなおしたり、設定をしなおしたりして、なんとか繋ぎ直す、なんてことをここ数ヶ月続けていたわけだ。
プリンタとは無線で接続している。これが問題なんだろう、とは思っていたが、全くもって解決を見出せなかった。
だが、ここにきて、ルーターの野郎が問題を起こしているようだと判明してきた。まだ確実じゃないが、こいつは濃厚だ。疑わしきは罰せず、そうわ言うけれど、原因を探るときには切りわけってもんが必要なのよ。

ルーターがまた古くて、バッファロー製 WZR-HP-G301NH。
http://buffalo.jp/products/catalog/network/wzr-hp-g301nh/
そろそろ買いなおしたいところだった。
こいつのAOSS機能を使ってプリンタとつながっている。そしてルーターを通り、各パソコンだのに接続されているわけだ。
AOSSについてはこちら。http://buffalo.jp/aoss/top.html

このAOSSはルーター外部についている物理ボタンを押すことでONにできるほど、簡単に設定できる。…簡単すぎやしねえか?とっつぁんヨぉ。
こんな外部にボタンをつけるほどってことは、何度も押す機会が前提となっているに違いない。そう、プリンタとつながらなくなったときは、このAOSSのボタンを長押しして、しばらくすると復活するのだ!ということを発見。そーんなにボタン何回もおさなくちゃならないの??と思うのだけれど、まあ、復帰方法がわかっただけでもとりあえずはいい。
もしルーター買いなおしたらこんなことは解消されててほしいなあ。

やり方は簡単。
AOSSのボタンを長押し(5秒くらいかなあ)するとAOSSのランプが点滅を早めるので、そのまましばらく待てばいい(1,2分かなあ)。
※外部にボタンつけているのって、これぐらい頻繁に接続切れることがあるから、押しやすいように、とプロダクトしてる逆説なんじゃねえかと思ったり(笑)。

ちなみにだが、AOSSの有効期限みたいのってあるんだろうか?つまり、AOSSのキャッシュっちゅうかな。IPの貸し出し期間みたいのってあるじゃない。
なんかつながらなくなる期間ってだいたい同じような気がするんで、そんなこと思った。
AOSSのセキュリティはおしえてgooで解説されてました。
https://oshiete.goo.ne.jp/qa/5085686.html

わからないことがあれば、コメント欄で質問OK。がんばろうぜ。

自サイトにあるWordPressをfile_get_contentsで引き込みたいとき

自サイトにあるWordpressをfile_get_contentsで引き込みたいときありますよね。
たとえば、Wordpressをブログとして使用していて、TOPページにも新着とかだしたいんだけど、、とかね。
どうやってやろうか、となると、javascript使ってもいいし、PHPで引き込んでも、なんでもいい。
今回はPHPのfile_get_contents関数を使用して引き込む例を紹介する。
file_get_contents関数を使用してもできない場合があるかもしれない。私ができていなかった張本人で、その注意点も挙げておきたい。

まずはもう、成功したときのコードを見てよね。これです。

<?php
$opts = array(
'http'=>array(
'header'=> "User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko"
)
);
$context = stream_context_create($opts);
if($handler = file_get_contents("http://".$_SERVER['HTTP_HOST']."/blog/?content=1",false,$context)){
echo $handler;
}else{
echo "none";
} ?>

※これは「もし/blog/っていうディレクトリでWordpress使用していたら」っていう例です。
まず一番上の「$opts」。これはオプションね。ファイルをゲットしにいくときに何者なのかを宣言するところです。
「User-Agent: Mozilla/5.0 (Windows...」と後に書かれていますが、
「あっしはIEのバージョン11と申します」という感じですかね、あんまり理解してもらわなくてもいいんですが、これが無いとゲットできないんです。

次の「$context」は、「$opts」をちょっと整える感じですかね。これもわからなくてもいいですが、必要です。

次の「if($handler = file_get_contents…」のところでファイルを取りにいきます。
「"http://".$_SERVER['HTTP_HOST']."/blog/?content=1"」がWordpressのある場所のURLを書くところです。
「/blog/」っていうディレクトリに置いてなければ、正しいものに書き換えてください。
「?content=1」ってなんだ??と思うかもしれません。Wordpressで出力されたHTMLすべてを取得するんなんらいいんですけど、全部はいらないですよね。
そういうときは、パラメーターがついているアクセスのときはちょっとだけ出力するように、Wordpressのテンプレートで分岐してしまうのがいいですね。
私はいつもそうしています。
「?content=1」がURLについているときは、新着だけの出力にする、という感じです。

できないときは?
でも、なかなかできないときもあるんですね。
私が間違えていたのは以下のような原因だったんですね。

・ユーザーエージェントを設定していなかった。
ユーザーエージェントというのは「User-Agent: Mozilla/5.0 (Windows...」これです。これを設定されていないアクセスは、Wordpressが肩透かし食らわすようにできているみたいで、エラーもないのに、なにもゲットできないというような状態で悩みました。

・「http://」で始まるURLにしていなかった。
PHPは相対ディレクトリで取りに行こうとしてしまうので、それだとWordpressが動かないんですわ。フルパスでアクセスさせるとうまくいきましたっすわ。

・「ベーシック認証」かかってた、、
テスト環境で「ベーシック認証」かけたまま作業していて、PHPがゲットしようとすると、ベーシック認証かかってて取りにいけなくなってた状態でずっと悩んでましたね。バカがバカに気がつけない、そんな状態ですね。

WordPressのテンプレートの中でfile_get_contentsを使いたいっていうときもありますね。
Wordpressが自前で「wp_remote_get」っていう関数を用意してくれています。
返り値の状態も一緒に取得できるので便利です。
また「stream_context_create」もしなくていいみたいです。出力は配列で['body']に入ります。

<?php
$opts = array(
'http'=>array(
'header'=> "User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko"
)
);
$handler = wp_remote_get( 'http://".$_SERVER['HTTP_HOST']."/blog/?content=1' . $opts );
if (!is_wp_error( $handler ) && $handler['response']['code'] === 200 ) {
echo $handler['body'];
} else {
echo "エラー";
} ?>

試してみてね!
わからなかったらコメントでご相談OK。

Photoshopで「不明なJPEGマーカー」とエラーが出てしまう件

PhotoshopでJPEGを開こうとすると「不明なJPEGマーカー」とエラーが出てしまうことがあった。

検索してみると「拡張子を.pdf.jpgのように二重にしない」とか「.pngにしたら開けた」とか紹介されている。
だが自分のケースの場合、どの方法も解決できなかった。

拡張子を変更する方法も「.tif」「.bmp」「.eps」「.png」「.gif」「.jpeg」「.psd」と思いつく限りすべて試したが、だめだった。

WinExChange(拡張子判別変換)というソフトで調べるとれっきとしたJPEGであると表示された。
ソフト配布元:http://www.55555.to/(極窓とかなつかしいね)

あきらめかけたとき、画像をブラウザにドラッグしてみたら表示された。
画像専門ソフトのはずのPhotoshopではエラーが出てしまうのに、ただのブラウザで開けてしまうというのはなにか違和感がある。
ということは、WEB系のJPGなんだな、と勝手に推測した。「WEB系のJPG」なんてものはないんだろうが、WEBに強いソフトであれば、ブラウザ以外だとPDFを開けるADOBE Acrobatだ。
Acrobatで開くとすんなり開いた。バージョンはCCだ。
別の形式で保存するでPNGにでもしたら普通のファイルになった。

なぜこんなことがおきるのか不明だが、たぶん激烈に古いMac環境とかで作られたJPGファイルなんだと思う。

PEARのamazonAPIから商品一覧を取得できるServices/Amazon.php。でもエラーで400。。。

PEARのamazon商品一覧を取得できるServices/Amazon.phpは大変便利なのだが、2017/8か9あたりから不調になっていた。
原因を調べるとPEARから吐き出されていたエラー400。久しぶりの冷汗だ。
たしかそのころAmazonのアカウントのメールアドレスを変更したぞ、と思い出してアソシエイト、APIのアカウントも変更しようとするも複雑だったあ…。
でもなんとかやったよ。
アカウントの目アドはアソシエイトもAPIのアカウントも全部そろえる必要があるってよ。アソシエイトからAPIアカウントを作成するときのページにけっこうでかでかと書いてある。。

晴れてメールアドレスが揃い、念のためアクセスキーとシークレットアクセスキーも取得しなおしておいた。
これで直った!はず!、と思ったけどダメ。PEARからは同じく400のエラー。

いろいろ調べるとサーバーの時間があっていないとそうなるよ、的な解説が散見できた。正確に言うと15分以上ずれているとダメらしいことまでわかってきた。
なのでサーバーの時刻を確認。ぜんぜん大丈夫、日本時間にぴったり。もしかして、、グリニッジ標準とかじゃないとダメなのか??世界のamazonはやっぱ違うな!、と今度はPHPでタイムゾーンを変えてみる。そんなことしても状況は変わらない。
どうしてだ、、、。と二日くらいくじけていた。
そこである記事を発見。
http://novelel.com/index.php/2015/09/01/post-189/
要約すると「アメリカのamazonに取得しに行ってしまうとダメだから日本のamazonに取得させるよう、Localeをセットすること」とあった。
これだ!と思って確認するも、

$amazon->setLocale('JP');

と、ちゃんと日本になっている。間違ってない。
じゃあ、なにがダメなんだ??とまた二日くじける。

あるとき「PEARがダメなんじゃね?その検証してぇ」と思って探してみると
https://www.panzee.biz/archives/6262
というページを発見。すごいよく作ってくれている。PEARなしで実験できるじゃん。
この作者お手製コードを使っても取得できなければ、PEARのせいではないことがわかるはず。
アクセスキーを入れて、実験開始!
…やっぱダメだ。。取得できねえ。
ということでこんどはアクセスキーじゃねえか?と疑いの矛先を変更して、何度もアクセスキーを発行してはできない、発行してはできない、を繰り返して自分が醗酵してしまうような状況に。

あきらめかけたそのときだった。
「日本のamazonに取得させる」を思い出して、さっきの作者お手製コードにあった

$baseurl = "http://webservices.amazon.com/onca/xml";

$baseurl = "http://webservices.amazon.co.jp/onca/xml";

と変えてみた。
できた!できたよ!と家中の人間に喜びの理由を説明して回るも、誰も理解せず。でもいい!それでいい!
しかしそれをどうやってPEARでやんのよ?
PEARのServices_Amazonの公式ドキュメントあさったよ。けっこう得意なんだ、こういう根性でやる宝探し。
https://pear.php.net/.../Services_Amazon.html#methodsetBaseUrl

公式にあるとおり、setBaseUrl();で設定しましたよ、こんな風に。

$amazon->setBaseUrl('http://webservices.amazon.co.jp/onca/xml');

できたよできた!

いやあ、何日かかったんだろ。いい勉強だったなあ。(汗をぬぐう、それはもう冷や汗じゃない)
あんたも困ってここに辿り着いたんだったらその心境聞かせてくれ!悩みなら吐き出してみれば解決するかもしれないぜ。

スマフォでFacebookの通知をやめたいのに中々できなかった件

スマフォ(Androd6)でFacebookの通知をやめたいのに中々できていなかったのだけれど、やっとできたので祝杯あげるのと同時にやり方を解説します。

Facebookアプリを入れていると、勝手にいろんなこと通知してくれます。誰がプロフィール写真変えただのなんだのと。髪型変えた自慢だかなんだか。いらねえっていう情報まであがってくるこの「通知」っていうのをどうしても止めたかったのだけれど、アプリの設定しようがなにしようが、ぜんぜん止まらなかったので毎日悩み苦しんでいました。
そしてついにはアプリをアンインストール。Facebookがまったく不必要っていうわけではなく、ときどきチェックしたり必要なときに「俺から」見たいというだけなんですが、しかたなしにアンインストールしました。ですが、通知は届くんですよ。Facebookをアンインストールしたのに??!とかなりあせりました。あせっている間も「●●●さんがチェックインしました」なんていう近況が入ってくる。チェックインしたのはおしゃれなカフェじゃないですか、こっちが必死こいて仕事でタイピングしているってときにも。

そこでFacebookの子分みたいなアプリ、Messengerを疑いました。これにも通知の機能がなんやかんやとついていたので一気にOFF。これで誰かが呼びかけてくれても、俺は完全スルーすることになるだろう、だが「通知」を斬るためにはどうしてもしかたないんだ…。忘年会シーズンですが、メッセンジャーなんかで呼びかけしないでくださいね。

しかし通知は止まなかった。

ウォーキングデッド7どころじゃない。なんでここまでしても通知の野郎はとまらねえんだ!!と今度は怒りに変わりました。
「だからクソAndroidってやつは!」と文字通り便所でクソしながら待機画面に浮かびあがる「通知」を見たときでした。「通知」の野郎に小さいアイコンがついているんですよ。よく見るとそいつは「Chrome」。ここで私は合点がいきまして、Chromeの通知を探し出し、斬ったわけです。
これ以降「通知」の野郎はきていません。撃退したわけです。
犯人は…Chromeだったんです!!

このへんiPhoneだと通知に関する管理はとてもわかりやすいのだが、Androidだとちょっと雰囲気違うんですよね。
お困りの方、たくさんおられたんじゃないですかね、私のように、きっと。で、その手順をざっくりスクリーンショットしました。ざっくりなんで参考までにどうぞ。

設定から入って、アプリ > Chrome > 通知 に入るとこんな感じになります。
001
そんで「アプリの設定」を選ぶ。
002
Facebookがいたでしょ。ぐっとそれを長押ししてください。憎しみがあればそれも一緒にこめて。
003
削除しますと一撃してください。
004
トドメをさせば完了です。

しかしなんでChromeがFacebookの通知を許可してたんだろ。。。まったく意識も記憶もない。

Jquery colorboxで、同じページで違うCSSとか違う見せ方したいとき

Jquery colorboxで、同じページで違うCSSとか違う見せ方したいときってありますよね。
あんまりないか。
他のライトボックスプラグインを入れてもいいんだけれど、挙動をそろえるのは苦労しそうだ。

なかなかいい方法が見つからなかったんだけれど、このページの回答でいいこと言ってた人がいた。
http://stackoverflow.com/questions/2318528...

かいつまんで話すと、

jquery.colorbox.js
colorbox.css
これらを複製して使う。

・複製したらファイル名も変更して読み込ます。
jquery.colorboxHoge.js とかね。

・複製2ファイルの"colorbox"と"cbox"の単語をすべて置換。
"colorboxHoge"、"cboxHoge"とかね。

・"$("#selector").colorbox();"といつもやっている隣にでも"$("#selectorHoge").colorboxHoge();"と追記すれば、OK。

という感じの作業だ。
colorboxを二つ使うんだけれど、バッティングしないように別名にして使うってことだね。

他にもスマートな方法があるかもしれないけど、分岐としてはわかりやすくていい。
他のプラグインでも使えるかもしれないので、ひとつの方法としてストックしておきます。

wordpressの投稿画面でアイコンが出ない「□」みたいな四角になってしまう! 'WordCounter' of undefined

投稿画面でアイコンが出ない上「□」みたいな四角になって文字化けしてしまう現象があって、けっこう長く悩まされた。
Chromeのデベロッパーツールで確認すると「 'WordCounter' of undefined」というエラーが出ていて、何のことかと調べてみると文字数をカウントするJavascriptが動いてないよ、というような意味だった。

WordPress4.3あたりから出ている不具合みたいで、アップデートして経験した人も多いかもしれない。
最新のWordpress4.5なら問題も解決しているだろうと、アップデートを試みたが、まったく改善されず、、、。

ではWordpress本体に問題があるのではない、となるとテーマかプラグインだ。
結局プラグインの「WP Multibyte Patch」が古かったために起こっていた現象だった。
バージョンを見ると1.6、現在は2.6でメジャーも違う。
「文字数カウント」のJavascriptが動いていないというところでこれに気がつければよかったが、そうもいかず。

アップデートしたら直ったのでよかったが、この辺のデバッグがもっと簡単になればいいと思う。
Wordpressももっと進化していくだろうから、問題が起こらないCMSというよりは問題が起きても解決しやすいCMSになっていってほしいと思う。

サーバーのファンを蘇生

1611-Fan 5 Failure というエラーでサーバーダウン。

ファンが壊れているか回転していません、というエラーのようだ。
ファンを分解して油を差したら直った。
だが、もうひとつの方も同時に油切れだったようで、すぐにエラーを出した。
なので同じ手順を踏んで油をさしたら直った。
分解はCクリップと呼ばれる留め具をはずすのに苦労した。片方はそうでもなかったが、グリスで固まってしまったんだろうか。
家電品売り場には、グリスといってもミニ四駆用のグリスしか置いてなかったのでしかたなくFグリスとかいうものを購入。まあ大して変わらないだろう。あとシリコングリススプレーも買った。
この際なのでエアダスターでヒートシンクの掃除と、プラグあたりの接点に接点復活剤もやっておきたかったので接点復活王とかいう高めのスプレーも買って出費だった。だが背に腹は変えられない、というやつだ。

音も静かで、かなり気持ちよさそうに動いている。
とにかくエラーをよく見て、新品があれば交換したいところだが、
サーバーも車やなんかと同じでメンテナンスしないと結局走り続けるのは難しいものだ。
基本は日ごろから手で掃除や整備する、ということだろう。

あせったぜ。もう少しで重大インシデントだった。もうすでにインシデント十分だって?

YoutubeのAPI使おうとしたら「unable to post message to http://www.youtube.com. recipient has origin https://www.youtube.com」でSafari,Chrome,Firefoxでエラー続出

YoutubeのAPI使おうとしたら

unable to post message to http://www.youtube.com. recipient has origin https://www.youtube.com

と出てSafari,Chrome,Firefoxでエラー続出。
再生はされるのだが、細かな設定ができず、、、
Windowsは問題ないようだ。

<div id="player"></div>
<script>
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var iframePlayerApiScriptTag = document.getElementsByTagName('script')[0];
iframePlayerApiScriptTag.parentNode.insertBefore(tag, iframePlayerApiScriptTag);
var player;
if ((navigator.userAgent.indexOf('iPhone') > 0 && navigator.userAgent.indexOf('iPad') == -1) || navigator.userAgent.indexOf('iPod') > 0 || navigator.userAgent.indexOf('Android') > 0) {
iframe_h = "";
iframe_w = "100%";
}else{
iframe_h = '300';
iframe_w = '400';
}
function onYouTubePlayerAPIReady() {
player = new YT.Player('player', {
height: iframe_h,
width: iframe_w,
videoId: 'q6T0wOMsNrI',
playerVars: {
"rel":0,
"showinfo":0,
'modestbranding': 0,
'wmode':"opaque"
},
events:{
'onReady': onPlayerReady
}
});
}function onPlayerReady(event) {
var clickPlay = document.getElementById("movie");
  clickPlay.onclick = function() { this.style.display="none";event.target.playVideo(); }
}
</script>
<div id="movie">
<img src="../img/poster.png">
</div>

わかりやすい症状だと"onReady"や"onStateChange"などのイベントが読み込まれない。
そんなときは、次の一文を、Youtube APIのコードの前につけてみよう。やっとみつけました。

<script src="https://www.youtube.com/iframe_api"></script>

参照:(英語がわかる人はこちらへ)http://stackoverflow.com/questions/16050024/youtube-iframe-api-fails-to-post-message

なぜ<script src="https://www.youtube.com/iframe_api"></script>を打つと解消されるのかという原因はわからないが、とにかくこれでクリアできた。
他にもoriginが違いますよ、という警告が出続けているが、もうそれは無理、ということで観念。
試してみてくれよな!

カスタム投稿タイプで、ページ送りのリンクがうまくいかなかった件|WordPress

WordPressのカスタム投稿タイプで、ページ送りのリンクがうまくいかなかった件で、そうとう疲れたのでメモ。

原因1
投稿の日付がまったく同じ
複製とかしてまったく同じだと飛ばされたりする。(the_date()関数と似ているなあ)
1秒でも変えるといいね。

原因2
previous_post_linkやnext_post_linkを使う。..._"post"_linkだからね、"posts"にしちゃだめだよ。
そのとき以下のような設定をなすってください。

previous_post_link('%link', 'PREV', true,"","タクソノミーのスラッグ");
next_post_link('%link', 'NEXT', true,"","タクソノミーのスラッグ");

3番目の引数がtrue、5番目のタクソノミー名が肝。get_term()とかで取得することになるか?ちょっと忘れた笑

TOPからページ送りして/page/2が「ページがありません」となってしまった場合
http://webhoo.net/2013/02/22/page_404_is_main_query/
ここに載っていたものをちょっと改変。以下はtagの一覧用。functions.phpに貼り付けて使ってね。

add_action( 'pre_get_posts', 'home_posts_type' );
function home_posts_type( $wp_query ) {
if ( ! is_admin() && $wp_query->is_main_query() && $wp_query->is_tag() ) { //管理画面以外 かつ メインクエリー かつ タグ
$wp_query->set( 'post_type', array( 'post', 'hoge' ) );
$wp_query->set( 'posts_per_page', 10 ); // 10件ずつ表示
}
}

状況によっては効くかも。試してみてね。

WordPressも簡単じゃないね。

[showrss]