M.C.P.C.

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


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

2011.06.30

Google+1ボタン設置にはルート要素で名前空間指定しなくちゃいけないような気がするがいまさらXHTMLもないしまあいっか的な

プラスワン ボタン [www.google.com]

によると、ボタンを表示させたいところに

<!-- 次のタグを +1 ボタンを表示する箇所に貼り付けてください -->
<g:plusone></g:plusone>

て書くらしいのだけれども、これもはやHTMLじゃないので、もしXHTMLの中に書くとしたら、

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:g="http://base.google.com/ns/1.0" xml:lang="ja" lang="ja">

とルート要素でやっておかなければいかんような気がするけれども、

いまさらXHTMLっていう時代でもないし、あんまりこだわらなくていいのかーとも思いました。そもそもGoogleさんはXHTMLにしたがっていなかった気がするし。

問題はGoogle+1ボタン押したあと公開するよーて言う文章が説明不足で後からなんかおこりそうだということですね。

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

2011.06.29

Optimus brightの予備電池買っておこうかな

Optimus brightの電池の持ちが非常に悪くて、1日で底を尽きるという感じなのですが、これってHT-03Aの時と同じ感覚でありまして、HT-03Aの時は電池が2個入っていたのですが、Optimus brightは1個なので、そもそも1個じゃ無理な端末なんじゃね?とか思い始めて、アマゾンで売ってないかなーと思ったらちゃんとありました。

ただ、HT-03Aの時運用してわかったのですが、電池が2個あっても、端末セット時にしか充電できないと結構運用に制限が出ますので、このバッテリー単体で充電できる充電器がほしいところですね。

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

2011.06.28

ドキュメントトーカ for AndroidはAndroid TTSとして使える

Android端末で日本語音声読み上げを行おうと思い、手持ちのAndoroid 2.3搭載のOptimus brightでは日本語対応のTTSが搭載されていませんので、今回は、ドキュメントトーカ for Androidを購入してみました。

日本語音声合成ライブラリ for Android [www.createsystem.co.jp]

設定はこんな感じで。

Dtalkertts01
▲Pico TTS(日本語非対応)からDTalker TTSに変更

Dtalkertts02
▲DTalker TTSがまだ有効になっていないので有効にする

Dtalkertts03
▲なにやらおっかない警告出るけどあえてOK

Dtalkertts04
▲DTalker TTSが有効になった

さて、TTSとして使えるってことは何を意味するかというと、プログラムからテキストをぶん投げると読み上げてくれるってことなのです。

今回は、Android プログラミングバイブル SDK3.0/2.3/2.2/2.1対応、という書籍のサンプルをそのまま動かしてみました。

結果は、Unsupported Languageというトースト表示は出るものの、日本語文字列をPC-6001mk2風に読み上げてくれました!

~~~

最終的には、車通勤者の味方、Twitter自動読み上げができればいいなとか思っています。参考にした書籍には、Twitterクライアントのサンプルもあったので、プログラムをキメラ合成すればできるような気がしますけれども、自分で作ると3年かかりそうな気もしています……だれかTwiccaの音声読み上げプラグインとして作ってくれないものか……

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

2011.06.27

FireQueryが1.0になってFirefox 5でも動くようになった! うちでは3.6.3でも動くようになった!

わけあってFirefoxのバージョンが3.6.3で止まっている環境なんですけれども、そこでWeb作りをやっておりまして、そうするとjQueryの挙動をFirefoxで調整したくなりまして、Firebugにアドオンして使うFireQueryという機能拡張があるのですけれども、今までのバージョン 0.9だと、Firefox 4あたりだったら問題なく動くのですが、Firefox 3.6.3だと動かなかったのでした。

んで、今朝見てみるとバージョン1.0が出ていまして、入れてみたところ今まで動かなかったFireQueryがふつーに動き出し始めました!

FireQuery is a Firebug extension for jQuery development [firequery.binaryage.com]

1.0の目玉はFirefox 5への対応なのでしょうが、ともかく3.6.3で動くようになったのでこれでデバッグも捗ります。

jQueryでサイトを作っている人は使ってみられたらいいかと思います。

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

2011.06.26

Androidで「風来のシレン」売っているよ。

Android マーケットで、風来のシレンが売っていたので、買ってみた。

風来のシレン 月影村の怪物 for Android - Android マーケット [market.android.com]

対応機種には入っていなかったのですが、LG Optimus bright(L-07C)でも動きました。

買って思い出したんですが、僕、風来のシレンってクリアしたことねえぞ。ていうかRogueもクリアしたことない。

これらのゲームって、ランダム性を前面に押したゲームであるゆえ、運がよければ簡単に進めてしまうのですから、設定が難しめに設定されているんですよね……

スクリーンショット撮ろうと思ったが、LG OSPが2度とリンクしなくなったので撮れない……

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

2011.06.25

eneloopからOptimus bright充電のためのminiUSB-microUSB変換アダプタ

HT-03AからOptimus brightに買い換えたのですが、この端末、電池の持ちが非常に悪い。といっても、HT-03A並みのもちの悪さなので、電池2個あれば済むのじゃねーか、という感じもするのですが、現在手元にあるのは、eneloop モバイルブースターKBC-L2でありまして、これを活用することに活路を見出したいのです。

このモバイルブースターは、inputがmini USB、outputがUSBで、付属しているケーブルがUSB-mini USBであるために、給電する機械がminiUSBであれば非常に便利なのですが、今回のOptimus brightは、micro USBであります。よって、このままじゃあ充電できない。

ケーブルを買いに行くと、1.2mのものとか、80cmのものとかしか売っていなくて、ちょっと長いなーとか思っていたのですけれども、Amazonで10cmという製品を見つけました。携帯に便利。

microUSBはもう主流になりつつありますからこれを1本用意しておくといいですね。

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

2011.06.24

Inkscapeで「隠す」=「display: none」

今日も快適にPDFをIllustratorで開いてSVGで保存したのをInkscapeで開いて修正していたわけなんですけれども、Illustratorでは「隠す(Ctrl+3)」を活用して作業しているのですけれども、Inkscapeでもそれをやろうとして、「オブジェクトのプロパティ」から「隠す」にチェックをつけたんですけれども、

Inkscapeでは隠したオブジェクトを一気に表示する方法がないみたい! 再表示には、隠したオブジェクトを選択する必要があるのだけれども、マウスカーソルで選択ができない……

いろいろ調べてみると、Inkscapeの「隠す」は、SVGのオブジェクト要素に、display: noneをつける動作をするらしい。CSSかよっ!

Inkscapedisplaynone
▲InkscapeはSVGのエディタなんだね

Inkscapeの検索メニューから、「非表示のオブジェクトを含む」のチェックをつけた上で、スタイル欄に「display: none」を選ぶと、隠されたオブジェクトが選ばれるので、「オブジェクト」-「全て表示」を選べばいいと。何を言っているかわからないと思うけど、やればわかる。

オブジェクトを隠したら選択できなくなった - その他のTipsなど(Inkscape) [otzt.nobody.jp]

使い勝手とは別次元にいる操作なのは確かだよなあ。DOM操作できるのかなあ。(調べていない)

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

2011.06.23

Inkscapeの図形のペーストはマウスカーソルの位置にされる

Illustratorが入っておらずInkscapeが代わりに入っている環境で、DTPの原稿作りを続けているわけですけれども、まだまだ脳みそとアプリが直結するような段階にまでは進んでいません。

そんな中、Adobeソフトに汚染されたAdobe脳の人間からすると想像つかない挙動にめぐり合いました。

紙が重なっている表現を作りたくて(なにしろ印刷屋なので)、平行四辺形を一度カットしてからたくさんペーストして、整列や等間隔を指定しようと思ってペーストしまくったのですが貼り付けられる位置が微妙にずれるのです。

よく観察してみると、マウスカーソルの位置にあわせてペーストされているようでした。

紙が重なる表現は、オブジェクトの重なりの順番も重要ですので、マウスカーソルをしたから上に動かしつつ、キーボードでCtrl+Vをすれば、重なり表現をうまく表現できるのでした!

Illustratorでいうブレンド機能があれば一発でできるのでしょうけど、探している時間がないので、今回はこういう方向に……

Inkscapeは、保存形式がSVGなので、これからのSVG時代に対応したドローソフトでもありまして、Illustratorに汚染されていない人は使ってみたら面白いかなあと思います。汚染されている人にとっては、Illustratorならばすぐできるのに! とか、もどかしくなり、フラストレーションたまるかもです。

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

2011.06.22

ウェブサイトの過去ニュース管理用MovableType風スクリプト

ウェブサイトの過去のニュースを、個別ページとして生成させたくなって、XMLをソースとした書き出しシステム(MovableType風)ができたので、それのソースです。Linuxのコマンドラインで実行します。

Filename: past.pl

#!/usr/bin/perl
 
use strict;
use warnings;
use utf8;
use DateTime::Format::W3CDTF;
use Encode;
use FindBin::Real;
use File::Path;
use File::Spec;
use File::Basename;
use HTML::Template;
use XML::LibXML;
use YAML;
binmode STDOUT => ':utf8';
 
chdir FindBin::Real::Bin();
 
my $sourcefile    = 'news.xml';
my $individualtmplfile = 'tmpl/individual.tmpl';
my $baseurl       = 'http://www.example.com/past/';
my @index_template = qw(
   tmpl/index.html.tmpl
   tmpl/sitemap.txt
);
 
# XMLファイルを一気読み
open my $fh, '<', $sourcefile or die $!;
my $source = do { local $/; <$fh> };
 
# XMLパース&処理
my $list = xmlparse($source);
 
# Publish前データ処理
pre_publish(\$list);
 
# individual archive処理
{
  my $t = HTML::Template->new(
    filename => $individualtmplfile,
    filter   => sub { utf8::decode( ${ shift() } ); },
    die_on_bad_params => 0,
  );
  map {
    $t->param( $_ );
    open $fh, '>', $_->{file} or die $!;
    binmode $fh => ':utf8';
    print $fh $t->output;
    close $fh;
  } @$list;
}
 
# index template処理
map{ main_index( $_ ); } @index_template;
 
exit;
 
 
# XMLパース
sub xmlparse {
  my $source = shift;
  # XML::LibXMLパーザ
  my $parser = XML::LibXML->new(
   suppress_errors    => 1,
    suppress_warnings => 1,
    recover           => 2,
  );
  my $dom = $parser->parse_string($source);
  
  # DOMインタフェースでノードリスト選択
  my @xfolk = $dom->findnodes('//o:xfolkentry');
  
  # XMLから要素を読み込む(ここでは読み込む専門、加工は最低限)
  foreach my $x ( @xfolk ) {
    my $body;
    foreach my $i ( $x->find('o:body')->[0]->childNodes ) {
      $body .= $i->toString();
    }
    my $description = $x->findvalue('o:body');
    my $extended_body;
    if ( $x->exists('o:extended_body') ) {
      foreach my $i ( $x->find('o:extended_body')->[0]->childNodes ) {
        $extended_body .= $i->toString();
      }
      $description .= $x->findvalue('o:extended_body');
    }
    my $items =  {
      date  => $x->findvalue('o:date'),
      title => $x->findvalue('o:title'), 
      body  => $body,
      extended_body  => $extended_body,
      description    => $description,
    };
    #$items->{extended_body} = $extended_body if $extended_body;
    push @$list, $items;
  }
  return $list;
}
 
# XMLから解析済みの要素
sub pre_publish {
  my $lst = shift;
  map {
    my $dt = DateTime::Format::W3CDTF->parse_datetime($_->{date})->set_time_zone('Asia/Tokyo');
    my $filepath = $dt->strftime('%Y/%m');
    mkpath $filepath;
    my $date_id = $dt->strftime('%Y%m%d');
    my $basename = $_->{basename}
      || $dt->strftime('%m%d%H%M%S').".html";
    print "$filepath/$basename\n";
    $_->{basename} = $basename;
    $_->{filepath} = $filepath;
    $_->{datetime} = "$dt";
    $_->{ymd}      = $dt->ymd;
    $_->{date_id}  = $date_id;
    $_->{permalink} = "${baseurl}$filepath/$basename";
    $_->{file}     = "$filepath/$basename";
  } @$$lst;
}
 
# index template書き出し テンプレート名を入れると
# テンプレート名から.tmplをとったファイルで
# カレントディレクトリへ書き出します。
sub main_index {
  my $tmplfile = shift;
  my $t = HTML::Template->new(
    filename => $tmplfile,
    filter   => sub { utf8::decode( ${ shift() } ); },
    die_on_bad_params => 0,
    loop_context_vars => 1,
  );
  $t->param( list => $list, baseurl => $baseurl );
  my $outputfile = fileparse($tmplfile, ".tmpl");
  open $fh, '>', $outputfile or die $!;
  binmode $fh => ':utf8';
  print $fh $t->output;
  close $fh;
}
 
__END__


XMLは、こんな感じです。


Filename: news.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 
<o:info
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:o="http://www.example.com/">
  
  <o:xfolkentry>
    <o:date>2011-07-01</o:date>
    <o:title>計画停電実施に伴う営業時間の短縮について</o:title>
    <o:body>
      <p>当地区では2011年7月1日午後9時~午後12時まで、計画停電が実施されることになりました。</p>
      <p>つきましては、営業時間を短縮させていただきますのでお知らせします。</p>
    </o:body>
    <o:extended_body>
      <dl>
        <dt>営業時間</dt>
        <dd>午後1時~午後18時</dd>
      </dl>
      <p>社員の帰宅時の交通安全を確保する目的で、停電終了時刻から1時間遅れて営業を開始いたします。ご理解のほどよろしくお願いします。</p>
    </o:extended_body>
  </o:xfolkentry>
</o:info>

o:ていうプリフィクスは名前空間です。こうやると、XHTMLの名前空間は省略できるのですね。

のこり、テンプレート。

Filename: tmpl/index.html.tmpl

<!DOCTYPE html>
<html>
  <head profile="http://microformats.org/profile/xfolk">
    <meta charset="utf-8">
    <title>
      過去のニュース
    </title>
  </head>
  <body>
    <article class="xfolkentry" id="d<tmpl_var name="date_id">">
      <p><tmpl_var name="ymd"></p>
      <h3><a href="<tmpl_var name="filepath">/<tmpl_var name="basename">"><tmpl_var name="title"></a></h3>
      <tmpl_var name="body">
      <tmpl_if name="extended_body">
      <p style="text-align: right;">
        <a href="<tmpl_var name="filepath">/<tmpl_var name="basename">#more">続きを読む</a></p>
      </tmpl_if>
    </article>
    </tmpl_loop>
  </body>
</html>


Filename: sitemap.txt.inc

<tmpl_loop name="list"><tmpl_var name="permalink">
</tmpl_loop><tmpl_var name="baseurl">


Filename: tmpl/individual.tmpl

<!DOCTYPE html>
<html>
  <head profile="http://microformats.org/profile/xfolk">
    <meta charset="utf-8">
    <title>
      <tmpl_var name="title">
    </title>
  </head>
  <body>
    <article class="xfolkentry" id="d<tmpl_var name="date_id">">
      <p><tmpl_var name="date"></p>
      <h3><tmpl_var name="title"></h3>
      <div id="body">
        <tmpl_var name="body">
      </div>
      <div id="more">
        <tmpl_var name="extended_body">
      </div>
      <div class="metadata">
       <a href="<tmpl_var name="permalink">"><tmpl_var name="date"></a>
      </div>
    </article>
  </body>
</html>

~~~

大体3時間でできたので、MovableTypeやWordPress入れるよりもかえって早いぐらいだと思うんですが、CMSを自作しても将来性がないのでWordPress入れたほうがいいよ、て言われるとグウの音も出ないよね……

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

2011.06.21

Optimus bright Hentai SmartPhoneできたよー(またはLG OSPでAndroidなのに簡単スクリーンショット)

Hentaiスマホを作ろう!

Optimusbrightosp1
▲ロック画面。見えない……

Optimusbrightosp2
▲見えた!

Optimusbrightosp3
▲お前か!……

というわけで、LGのAndroid端末だと、PC側でAndroidのリモート操作ができる「LG On-Screen Phone」というのができると、

Optimus bright L-07Cのソフトウェアを見てみる USB/ADBドライバのインストール方法 | TechRacho [techracho.jp]

で知ったので、やってみました。Bluetooth接続とUSB接続でできます。

~~~

んで、このHentai Phoneですが、我が家のWi-Fi圏外になると自動的に当たり障りのない壁紙になり、GPSで会社に近いところに来たとなると自動的にWi-FiやBluetoothを切ってしまう設定ができる、“Locale”っていうソフトを入れてあるのでへっちゃらです。

Locale 場所、電池残量、日付、時間などの条件にあわせて、端末の設定を自動変更してくれる設定管理アプリ! | Android(アンドロイド)アプリの人力レビューサイト【アンドロイダー】 [androider.jp]

~~~

しっかし、この画像のゲームのファンディスク、いつ発売になるんやろう……春発売が今見たら夏発売になっておったwww

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

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