M.C.P.C.

―むり・くり―プラスコミュニケーション


« 2011年7月 | トップページ | 2011年9月 »

2011.08.31

RSSフィードでインラインスタイルシートのdisplay: none; を活用する

全ては想定の話なのですが、サイト更新の原稿を書くとき、いまどきはフィードでどこかへ流れてぶつ切りにされてしまって意味がわからなくなりがちなので、タイトルと、本文の1行目に気を使って原稿を書くわけです。

そうすると、本文の1行目は、自社の社名を入れておいたほうが、ほかの所で表示されたときにニュースの主体がはっきりするので(いわゆるニュースリリースの本文1行目と同じ書き方)、そうするのですが、その原稿を見せると、「自社の更新情報なのに自社の社名をいちいち入れるのはおかしい」「自社のニュースを見るターゲットはよそのサイトや何とかリーダーの読者ではなくてまずは自社のサイトに来るユーザーだろ」とか言われがちであります。

つまり、更新情報とはいえニュースを放流(リリース)してしまえば、自分の管理しているところ以外でも読まれてしまうから、ニュース単体でも意味がわかるようにしておこうという立場があり、逆に更新情報である以上優先すべきは更新情報が載せられるサイトのユーザーのわかりやすさであろうという立場もあり、それが衝突する場面であります。

となればどうするべきかということを考えた結果、自社サイトに掲載するときには、自社の社名などの情報をCSSで言うdisplay: none;で隠しておく、フィード受信先では、display: none;で隠した部分のインラインスタイルシートが外れてそのまま見える形で表示、なんてことをすればいいことに気付きましたが(結構な数のフィードリーダが、インラインスタイルシート指定は落としてくれる)、

非ネット系の会社ではこういうどうしようもないことって当たり前なんだろうなあとか思いました。

[RSS] | 固定リンク | コメント (0) | トラックバック (0) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2011.08.30

Googleプレイスの企業情報登録で、オーナーなのに企業情報変更が反映されない

Googleマップに、Googleプレイスといってお店とか会社の情報を登録できる仕組みがあるんですけれども、

Welcome to Google Places for Business [www.google.com]

僕が管理していないところの社名が(株)から株式会社に表記が変わっているため、そんならこっちも表記変えなきゃなーと思い、変えてみるも一向に変更されず。

この仕組みは、実在する企業であるかどうかを、Googleからの電話で行うか、Googleから送付されるはがきに書かれているPINコードを入力するか、どちらかの認証をクリアすると、自由に書き換えができるようになるという仕組み。

Googleplace
▲Googleの中の人とおしゃべり!

電話が怖い僕は(なんで電話業務やってんだ)、ハガキの郵送を選んで、ちゃんとGoogleから送られてきたはがきに書かれたPINコードを入れてあるので、ちゃんとオーナーになっているのだけれども、反映されない。

調べてみると、Googleプレイスの企業情報の書き換えは、結構不具合が多く出ているらしく、「新たに登録しなおしたほうがいい」とまで書かれている始末。

そうすると、またPIN取得をしなくてはならないのですよね……

Googleのサービスの中でも、品質はばらばらなんですねーとか思いました。

[Web] | 固定リンク | コメント (0) | トラックバック (1) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2011.08.29

XHTMLをMIMEタイプapplication/xhtml+xmlにして、JavaScriptではまったことと解決法

MIMEタイプtext/htmlで吐き出していたXHTMLページを、application/xhtml+xmlにすると、あちこち直さなくてはならなくなったのでメモ。

1.真のapplication/xhtml+xmlは、document.writeができない

メンテナンスしているところで、こんなコードがあった。

<script type="text/javascript">
// <![CDATA[
document.write('<input type="hidden" '
             + 'name="thisTITLE" value="'
             + document.title
             + '" />'
);
document.write('<input type="hidden" '
             + 'name="thisURL" value="'
             + document.URL
             + '" />'
);
// ]]>
</script>

とか書いてあった。何年前のコードなんだろう……

document.writeができないのですが、いまどきjQuery時代なんでこうしちゃえばいいんじゃねって思う。

<script type="text/javascript"
  src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"
></script>
 
...
 
<input type="hidden" name="thisTITLE" value="" />    
<input type="hidden" name="thisURL"   value="" />
<script type="text/javascript">
// <![CDATA[
$(function() {
  $('input[name=thisTITLE]').val( document.title );
  $('input[name=thisURL]'  ).val( document.URL   );
});
// ]]>
</script>

あらかじめ要素用意してあって、DOMが生成された後だったら、値の挿入は文句ないよね。

2.真のapplication/xhtml+xmlは、formにつけた名前で値が取得できない

<form name="nForm">
  <dl>
    <dt>
      <label for="email00">メールアドレス</label>
    </dt>
    <dd>
      <input type="text" name="email00" id="email00" value="" />
    </dd>
    <dt>
      <label for="email01">もういっちょ</label>
    </dt>
    <dd>
      <input type="text" name="email01" id="email01" value="" />
    </dd>
  </dl>
</form>
var errstr = '';
if (document.nForm.email00.value != document.nForm.email01.value) {
  errstr += "メールアドレスの確認をしてください。\n";
}

ていうコードがあった。名前の付け方が無駄にキャメルケース。

んで、このコードが、text/htmlからapplication/xhtml+xmlになったとたん、動かなくなる。document.nFormがいなくなる!

これに関しては、document.formsの中にいるので、あわてずにこう書けばOK。

var errstr = '';
if (document.forms['nForm'].email00.value != document.forms['nForm'].email01.value) {
  errstr += "メールアドレスの確認をしてください。\n";
}

さらにこう書ける。

var errstr = '';
if (document.forms.nForm.email00.value != document.forms.nForm.email01.value) {
  errstr += "メールアドレスの確認をしてください。\n";
}

これは、JavaScriptの書き方が古かっただけじゃねえかっていう話ではあります。

以上、XHTMLで書いてあれば、text/htmlからapplication/xhtml+xmlにするだけでいいんじゃね、て思っている人が実際にはまった2点でした。document.writeの話なんて、5年遅れの話題ですよね……

[Web] | 固定リンク | コメント (0) | トラックバック (0) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2011.08.28

XHTML5でMIME Typeをapplication/xml+xhtmlで出力したらGoogle+1ボタンが表示されなくなった

HTML5ではなくて、XHTML5をちょっとやってみているのですけれども、本物のXHTMLは、レスポンスヘッダ内でContent-Type: application/xml もしくは Content-Type: application/xml+xhtml とMIME Typeを出さないといけないということで、.htaccessでこんな風にしてみました。

AddType "application/xhtml+xml" .html
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} "MSIE 5" [OR]
RewriteCond %{HTTP_USER_AGENT} "MSIE 6" [OR]
RewriteCond %{HTTP_USER_AGENT} "MSIE 7" [OR]
RewriteCond %{HTTP_USER_AGENT} "MSIE 8"
RewriteCond %{REQUEST_URI} \.html$
RewriteRule .* - [T=text/html]

(参考:.htaccessを使ってapplication/xhtml+xmlとtext/htmlに振り分ける。 [www.garunimo.com]
参照先は、.xhtmlをUAによってContent-Type差し替えるやつで、今回のは、.htmlで同様のことをするものです。404エラーすらXHTMLで書く必要があるので、お勧めしません)

これで、拡張子htmlのコンテンツに関して、IE5~8の時は、text/html、それ以外の時は、application/xml+xhtml を出すことになります。

んで、これにしたときは問題があって、Google +1ボタンや、TwitterのTweetボタンなど、JavaScriptからiframeを生成して表示するタイプのソーシャルボタンが動作しなくなります。

たとえば、Google +1のHTML5 ValidなHTMLはこんな感じ。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:g="http://base.google.com/ns/1.0" xml:lang="ja" lang="ja">
  <head>
    <meta charset="utf-8" />
    <title>Google+1 テスト</title>
    <script type="text/javascript" src="https://apis.google.com/js/plusone.js">
    </script>
  </head>
  <body>
    <g:plusone annotation="inline"></g:plusone>
  </body>
</html>

これだと、IEにtext/htmlとして読み込ませた場合でも表示されないので、こっちのコードが普段使い。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
  <head>
    <meta charset="utf-8" />
    <title>Google+1 テスト</title>
    <script type="text/javascript" src="https://apis.google.com/js/plusone.js">
    </script>
  </head>
  <body>
    <div class="g-plusone" data-size="standard" data-count="true">
    </div>
  </body>
</html>

これらが、Webkit系だと表示されなく、Operaだと表示されます。

正直言って、そこまでしてXHTML5をXMLとして評価するモードは必要ないかもとか思います。なので、普通に text/html で出せばいいんじゃね?ていうことに……

XHTMLは、XML操作でいじれるので個人的には作業しやすいのですが、XML操作しない人にとっては使わないよね……

[Web] | 固定リンク | コメント (0) | トラックバック (0) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2011.08.27

Yahoo!リスティング広告で出稿している広告の掲載順位をロギングするPerlスクリプト

Yahoo!のリスティング広告に出稿しているのですが、偉い人が見ている時に限って表示されない。調査しろと言われたので、スクリプトを作りました。

cronで1時間に1回実行します。

use strict;
use warnings;
use utf8;
use WWW::Mechanize;
use YAML;
use FindBin::Real;
use File::Spec;
 
chdir FindBin::Real::Bin();
my $logdir = 'logs-yahoo/';
 
my $mech =  WWW::Mechanize->new;
$mech->agent_alias( 'Windows IE 6' );
$mech->add_header( 'Accept-Language' => 'ja,en-us;q=0.7,en;q=0.3');
$mech->add_header( 'Accept-Charset'  => 'Shift_JIS,utf-8;q=0.7,*;q=0.7');
$mech->add_header( 'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
$mech->add_header( 'Accept-Encoding' => 'gzip, deflate');
 
my $res = $mech->get('http://www.yahoo.co.jp/');
sleep 3;
 
$mech->submit_form(
  fields => {
    form_name => 'sf1',
    p => '印刷',
  },
);
use Web::Scraper;
 
my $html = $mech->content();
my $scraper = scraper {
  process '#So1 li, #So3 li', 'list[]' => scraper {
    process 'a.t', 'title' => 'TEXT';
    process 'a.t', 'href' => '@HREF';
    process 'span.u',  site => 'TEXT';
  };
  process '#So2 li', 'list2[]' => scraper {
    process 'a.t', 'title' => 'TEXT';
    process 'a.t', 'href' => '@HREF';
    process 'span.u',  site => 'TEXT';
  };
};
my $result = $scraper->scrape( $html);
my $result2;
$result2->{list} = [ @{$result->{list}}, @{$result->{list2}}];
my $filename = time.'.yaml';
my $filepath = File::Spec->catdir( $logdir, $filename );
YAML::DumpFile($filepath, $result2);
 
exit;
 
__END__

Google用のやつは前作っておいたのですが、それを改造してYahoo用を作りました……
このログを使って1か月分の表示頻度をヒストグラムに出すと、表示されなくなる時間帯が分析できます……

インターネット広告ってやっぱり大変だなとか思ってます。

[Web] | 固定リンク | コメント (0) | トラックバック (0) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2011.08.26

DTPWikiがつながらない原因は、自作リバースプロキシのキャッシュが壊れていたからだった。

この時期だけ需要があるDTPWikiですがここんところサーバのLoadAverageが8ぐらいになって、ほぼ止まったような状態になっていたのですが、2ちゃんねるでも「つながらない」とか書いてあったし、うちに帰ってからちょっくら調べてみていたのですけれども、server-statusとか見て、やっと問題を把握。

DTPWikiには、planet DTP@jp というRSSまとめサイトがついているのですが、それで使っているFC2用とAmeba用の画像取得プログラム(今風に言うとリバースプロキシ)に組み込んだ、キャッシュが壊れていました。

いまどき、Cache::Fileなんて使うロートルはいないよね……母さんロートルでごめんね……

というわけで、キャッシュを削除して対応してみました。これで持ちこたえられるかな。

[日記・コラム・つぶやき] | 固定リンク | コメント (0) | トラックバック (0) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2011.08.25

DTPエキスパートの試験の時期が始まったとたんDTPWikiが重くなった気がするぞ

おそらく昨日あたりからDTPエキスパート認証試験の更新試験(在宅受験)の問題が届き始めたようで、それに合わせて、サーバのロードアベレージが上がりっぱなしです。

昼間いるところからはDTPWikiのサイトになぜかつながらないので、対処ができない状況ですので、ご迷惑をおかけします……

今日はちょうどGoogleとneverとBingのボットがサイトの中をぐるぐる廻っていたのでオンデマンドでnofollow書き込んでおいて何とか駆除した。ところどころCGIを使っているところで負荷が上がるので、もうちょっと別の案を考えたほうがいいかもしれないんですが、月末にはちょっと改良はつらいなあ。

[DTP] | 固定リンク | コメント (0) | トラックバック (0) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2011.08.24

アドビ製品全額無料キャンペーンは何をもたらすのだろうね

そろそろキャンペーンが終わるけれども、

アドビストア – アドビサマーキャンペーン | Adobe [www.adobe.com]

キャンペーン期間中、対象のアドビ製品をご購入および製品登録され、キャンペーンにお申し込みされた方の中から、抽選で毎日*5名様にお支払い金額の全額をキャッシュバックいたします。残念ながら当選されなかった方にも、抽選で毎日10名様に電子マネー「Edy(エディ)」5,000円分をプレゼントいたします。アドビ製品を購入するなら、今がチャンスです!

ばくちかよ! もともと購入見込客だった人に対して無料にするっつうのはその毎日5名の客だけ特別扱いするっていうことだけれども、それでアドビにどういう見返りがあるというのか。高額すぎる製品を特に理由なしで(抽選だとしても)まるっと無料にしても、かえって忠誠心や親近感って発生しないんだと思うんですよね。

と、最近クーポンシステムの在り方とか考えながら思うのでした。

[DTP] | 固定リンク | コメント (0) | トラックバック (0) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2011.08.23

apacheの初回コネクションが遅くてHostnameLookupsを疑ったがリブートしたら直った……

某サーバのhttpdのレスポンスが遅くて、あまりにも遅くて、使用者から「月1000円なんていう安いサーバ使っているからだ」という発言が。これは、うまくすればVPSから専用サーバーにアップグレードじゃね?とか思ったけれども、httpdをリブートしたら直った。

とりあえず、今回やったこと。

1. ab (apache bench)でレスポンス測定

 結果、100回連続の要求のうち、最初の1回が遅いってことが判明。
 2秒ぐらいかかっていた。

2. Firefoxのプラグインでレスポンス測定

 結果、一番最初のhtmlダウンロードで2秒ぐらいかかってた。
 1.と大体時間が一致してたので、apacheが悪い。

3. httpd.confのHostnameLookupsがonになっていないか確認

 なっていなかった……

4. .htaccessの中に、ホスト名が書いていないか調査

 grepで。でもなかった。

5. ついにリブート

 直った!


……直しちゃ専用サーバにできないじゃねえか!

[Web] | 固定リンク | コメント (0) | トラックバック (0) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2011.08.22

やっと地方の家電量販店でもmicroUSBのACアダプタ売るようになった

今住んでいるところは小中学生の夏休みが8月31日まであることからしても明らかに実家より都会なんですけれども、書店での雑誌の発売日が1日遅れるところは確実に田舎呼ばわりされる不公平が存在するのも知っているので、そういう程度の田舎に住んでいるわけですけれども、そういうところではmicroUSBで給電できるACアダプタが全然売っていなかったのでした。

んで、今日県内最小規模とうわさされるヤマダ電機に行ってみたら、まさしく今日入荷した体で、まだ値札も付けられていない状態で売られていました。

僕がこれをなんで必要だったかというと、

を設置するためのACアダプタが必要だったからです。この機械はなかなか使い勝手がよくこのたび3個目を購入したのですが、USB端子からmicroUSB端子に変換する短いコネクタ付いていて、USBポートから給電する設計なので、USBポート使えない機材につなぐときは、別途ACアダプタがいるのです。

実家に帰った時、秋田のデンコードー改めケーズデンキですらmicroUSBのACアダプタが売られていました。これは、いよいよスマートフォンが普及の段に入ってきて、それ用のアクセサリーとしての販売が見込まれていることを示しています。

しかし、お店のお兄さんや、「スマートフォンならこのACアダプタで大丈夫です」と言っていましたが、HT-03AはスマートフォンだけどminiUSBなんだよ……

[日記・コラム・つぶやき] | 固定リンク | コメント (0) | トラックバック (1) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

< 最後 « これより前10ä»¶ | 全件