2012/07/31

FPDF でカスタムサイズのページ(ドキュメント)を作成

どちらも、サイズ指定の引数に幅と高さを配列として指定

単位は、オブジェクト生成時に 'mm' や 'pt' 等で指定しておく
縦長は 'P' を指定、横長は 'L' を指定するが、逆を指定すると width と height が入れ替わって解釈される

幅:300mm 高さ:400mm のページを追加する
 $pdf = new FPDF('P', 'mm');
 $pdf->AddPage('P', array(300, 400));

幅:300mm 高さ:400mm のドキュメント(デフォルトのページ)を作成する
 $pdf = new FPDF('P', 'mm', array(300, 400));

2012/07/27

さくらのレンタルサーバ(スタンダード)で、ファイルタイムスタンプ変更

さくらのレンタルサーバ(スタンダード)で、ファイルタイムスタンプ変更 例) 2012/07/03 10:30 touch -t 201207031030 ファイル名

2012/07/26

Imagemagick/php でマルチページtif(tiff)をpngへ変換

Imagemagick/php でマルチページtif(tiff)をpngへ変換

保存ファイルの拡張子を、.jpg(.jpeg)にすると jpeg でも保存可能
tiff(特にFAX)の場合、縦横のdpiが違う場合があるので、幅に合わせて調整
function tiff2png($tiffile, $savepath){
 $images = new Imagick($tiffile);
  foreach($images as $i => $image){

   $resolution = $image->getImageResolution();
   $image->resizeImage($image->getImageWidth() / ($resolution['x'] / $resolution['y']), $image->getImageHeight(), imagick::FILTER_MITCHELL, 1, false);

   $image->writeImage("$savepath/test$i.png");
  }
 $images->clear();
}

さくら(スタンダード)で ps2pdf のパス

さくら(スタンダード)で ps2pdf のパス

/usr/local/bin/ps2pdf

NTT-Com 050 Plus がバッテリー消費改善

NTT-Com 050 Plus がバッテリー消費改善

アプリでの着信待ち受けを変更した模様
着信をプッシュで知らせるために、DirectPush 等を使用しているのか?

アプリケーションの縛りが無い Fusion IP-Phone SMART とは対照的な部分かも

2012/07/25

ソフトバンクのプラチナバンド(900MHz)スタート

ソフトバンクのプラチナバンド(900MHz)スタート

エリア検索から、プラチナバンドだけ表示させられるみたいで、9月までに範囲を広げるらしい
それにしても、地図が小さすぎ(拡大できない)じゃなかろうか

2012/07/24

Android の無料mp3検索アプリ

Android でいくつも存在する無料のmp3検索アプリ

ネット上の違法コンテンツを検索するパターンがほとんどで、「連絡先データの読み取り」や「携帯のステータスとIDの読み取り」の権限を持っていたりする。この権限を利用するのが、アプリ本体なのか内蔵される広告なのかがハッキリしない所に問題があるような気もするけど・・・

んで、これらアプリの一つから接続先を調べてみた

検索のための接続先は http://ex.fm/
このサイトで直接検索も行えるが、シンプルなAPIを持っているので、おそらくソレを利用しているのだろう

おおざっぱには、下記の形で検索を行うと
http://ex.fm/api/v3/song/search/検索文字

JSON形式でレスポンスがあり、songs ノード配下に 20件単位でデータが入ってくる
ここから title や album, artist, mp3ファイルのダウンロード先である url を取得といった具合



アプリじゃなくて javascriptでいいんじゃなかろうか・・・

2012/07/23

楽天 kobo の無料コンテンツは、ほとんど日本語以外

kobo touch 到着

楽天 kobo の無料コンテンツは、ほとんど日本語以外でした
あぁ、楽天の社内公用語は英語だったか

2012/07/19

javascript で div をフェードイン

Firefox の javascript で div をフェードインを利用しようと style.opacity で簡単に実現
と思いきや IEは、なんだか面倒だった


var div = document.getElementById("hogehoge");
AlphaHideDiv(div); // 非表示
// div へ書き込んだりする
AlphaFadeinDiv(div); // フェードイン


// フェードイン
function AlphaFadeinDiv(div){
 if (window.navigator.userAgent.toLowerCase().indexOf('msie') != -1) {
  var alphavalue = Number(String(div.style.filter.match(/opacity=[0-9]+/)).split('=')[1]);

  if( alphavalue < 100 ){
   div.style.filter = 'alpha(opacity=' + (alphavalue + 25) + ')';
   setTimeout(function () { FadeinDiv(div);  }, 50);
  }
 }else{
  if(div.style.opacity < 1){
   div.style.opacity = Number(div.style.opacity) + 0.25;
   setTimeout( function() { FadeinDiv(div); }, 100);
  }
 }
}

// 前処理(アルファブレンドで非表示にしておく)
function AlphaHideDiv(div){
 if (window.navigator.userAgent.toLowerCase().indexOf('msie') != -1) {
  if ( ! div.currentStyle.hasLayout ){
   div.style.zoom = 1;
  }
  div.style.filter = 'alpha(opacity=0)';
 }else{
  div.style.opacity = 0;
 }
}

楽天のブックリーダー kobo touch 出荷開始

楽天のブックリーダー kobo touch が出荷開始された

本家のページも中途半端に日本語化が行われている

カナダkoboでは、kobo touch 以外に
カラー版の kobo vox、非タッチパネル?の kobo wifi の3構成
いまさら wifi は無いとして、日本で kobo vox が発売されるかどうかが気になるところ
まぁ、kobo touch とアプリ版(勿論カラー)の売れ具合によるだろう

2012/07/18

お名前.com からの更新お知らせ迷惑メール

お名前.com からのドメイン更新お知らせメールがウザすぎる

7/29に更新を迎えるドメインのお知らせが、前日の7/28に更新するまでの spam 履歴

  1. 1/31 [お名前.com]登録期限日まで残り6ヶ月となりました xxxx-yyyy.zzzz
  2. 4/30 【xxxx-yyyy.zzzz】期限3ヶ月前 □ドメイン契約更新のご案内□
  3. 5/30 【xxxx-yyyy.zzzz】期限2ヶ月前 □ドメイン契約更新のご案内□
  4. 6/04 【xxxx-yyyy.zzzz】は2012/07/29に失効します。更新をお忘れの方はお急ぎください。
  5. 6/18 【xxxx-yyyy.zzzz】は2012/07/29に失効します。更新をお忘れの方はお急ぎください。
  6. 6/29 【xxxx-yyyy.zzzz】期限1ヶ月前 □ドメイン契約更新のご案内□
  7. 7/02 【xxxx-yyyy.zzzz】は2012/07/29に失効します。更新をお忘れの方はお急ぎください。
  8. 7/03 2012/07/29に失効する【xxxx-yyyy.zzzz】はニーズがある"高年齢ドメイン"です。
  9. 7/05 【xxxx-yyyy.zzzz】は2012/7/29に失効します。更新をお忘れの方はお急ぎください。
  10. 7/06 2012/7/29に失効する【xxxx-yyyy.zzzz】の更新で"5億円"を当てよう!□お名前.com□
  11. 7/06 2012/7/29に失効する【xxxx-yyyy.zzzz】の更新で"5億円"を当てよう!□お名前.com□
  12. 7/09 【xxxx-yyyy.zzzz】は2012/07/29に失効します。更新をお忘れの方はお急ぎください。
  13. 7/10 2012/7/29に失効する【xxxx-yyyy.zzzz】の更新で"5億円"を当てよう!□お名前.com□
  14. 7/10 2012/7/29に失効する【xxxx-yyyy.zzzz】の更新で"5億円"を当てよう!□お名前.com□
  15. 7/11 2012/07/29に失効する【xxxx-yyyy.zzzz】はニーズがある"高年齢ドメイン"です。
  16. 7/12 【xxxx-yyyy.zzzz】は2012/07/29に失効します。更新をお忘れの方はお急ぎください。
  17. 7/13 2012/7/29に失効する【xxxx-yyyy.zzzz】の更新で"5億円"を当てよう!□お名前.com□
  18. 7/13 2012/7/29に失効する【xxxx-yyyy.zzzz】の更新で"5億円"を当てよう!□お名前.com□
  19. 7/15 2012/7/29に失効する【xxxx-yyyy.zzzz】の更新で"5億円"を当てよう!□お名前.com□
  20. 7/15 2012/7/29に失効する【xxxx-yyyy.zzzz】の更新で"5億円"を当てよう!□お名前.com□
  21. 7/15 【xxxx-yyyy.zzzz】期限2週間前 □ドメイン契約更新のご案内□
  22. 7/17 【xxxx-yyyy.zzzz】は2012/07/29に失効します。更新をお忘れの方はお急ぎください。
  23. 7/18 2012/7/29に失効する【xxxx-yyyy.zzzz】の更新で"5億円"を当てよう!□お名前.com□
  24. 7/18 2012/7/29に失効する【xxxx-yyyy.zzzz】の更新で"5億円"を当てよう!□お名前.com□
  25. 7/19 【xxxx-yyyy.zzzz】 は2012/7/29に失効します。更新をお忘れの方はお急ぎください。‏
  26. 7/20 2012/07/29に失効する【xxxx-yyyy.zzzz】の更新で"5億円"を当てよう!□お名前.com□
  27. 7/20 2012/07/29に失効する【xxxx-yyyy.zzzz】の更新で"5億円"を当てよう!□お名前.com□
  28. 7/22 【xxxx-yyyy.zzzz】 期限1週間前 □ドメイン契約更新のご案内□‏
  29. 7/23 【xxxx-yyyy.zzzz】は2012/07/29に失効します。更新をお忘れの方はお急ぎください。‏
  30. 7/24 2012/07/29に失効する【xxxx-yyyy.zzzz】の更新で"5億円"を当てよう!□お名前.com□‏
  31. 7/24 2012/07/29に失効する【xxxx-yyyy.zzzz】の更新で"5億円"を当てよう!□お名前.com□‏
  32. 7/25 2012/07/29に失効する【xxxx-yyyy.zzzz】はニーズがある"高年齢ドメイン"です。
  33. 7/26  【xxxx-yyyy.zzzz】 は2012/07/29(明々後日)に失効します。更新をお忘れの方はお急ぎください。
  34. 7/26  【xxxx-yyyy.zzzz】 期限3日前 □ドメイン契約更新のご案内□‏
  35. 7/27 2012/07/29 (明後日) に失効する【xxxx-yyyy.zzzz】の更新で"5億円"を当てよう!□お名前.com□‏
  36. 7/27 2012/07/29 (明後日) に失効する【xxxx-yyyy.zzzz】の更新で"5億円"を当てよう!□お名前.com□‏

その後 7/28 に更新
マーカーを付けたところが admin@onamae.com からのメール、それ以外は support@onamae.com と renewcampaign@onamae.com からのメール。DNS設定や更新完了も admin から来るので、admin@onamae.com 以外からのメールは spam 扱いや受信拒否でいいんじゃないかと思う

【追記】
ゴミ箱直行でも問題ないアドレス
renew-ml@onamae.com
support@onamae.com
renewcampaign@onamae.com

2012/07/17

もうすぐ kobo touch 出荷開始。日本向け kindle は?

19日から kobo touch が出荷予定
6月末に Amazonは日本へkindle供給を発表したものの、その後音沙汰がない

単なる kobo 牽制だったのか、kobo touch の価格設定に kindleの価格を決めかねているのか。はたまた、kindle fire2 とモノクロ版を同時発売なのだろうか

2012/07/13

javascript で指定クラスの button をまとめて有効無効

javascript で指定クラスの button をまとめて有効無効

function enabledButtonFromClass(classname, enabled){
 var elements = document.getElementsByClassName(classname);
 for(var i = 0; i < elements.length; i++){
  elements[i].disabled = ! enabled;
 }
}

<tr>要素を非表示にするのは display="none"; だけど

javascript から <tr>要素を非表示にするのは display="none"; だけど、再度表示するのは display="";

2012/07/12

javascript の Date に Delphi の FormatDateTime みたいなのを追加

javascript の Date に Delphi の FormatDateTime みたいなのを追加してみた
    var aaa = new Date();
        aaa.format("yyyy/mm/dd(aaa) hh:nn:ss");
        aaa.format("yyyy/mm/dd(aaa) 午前/後 h:nn:ss");
日本の元号系(gggとか)、エスケープ(ダブル、シングルコーテーションで括る)は、実装されてませんので、文章に入れ込むときは細切れに使ってください 非標準で「前/後」というのを追加してます
Date.prototype.format = function(s) {
 var jweek  = new Array("日", "月", "火", "水", "木", "金", "土");
 var eweek  = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
 var emonth = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

 var ampm = s.match(/am\/pm/ig);
 if( ampm != null ){
  s = s.replace(/am\/pm/ig, "%ESC_WAMPM_ESC%");
 }

 var ap = s.match(/a\/m/ig);
 if( ap != null ){
  s = s.replace(/a\/p/ig, "%ESC_SAMPM_ESC%");
 }

 s = s.replace(/前\/後/ig, "%ESC_JAMPM_ESC%");

 s = s.replace(/dddd/g,   "%ESC_WWEEK_ESC%");
 s = s.replace(/ddd/g,    "%ESC_SWEEK_ESC%");

 s = s.replace(/mmmm/g,   "%ESC_WMONTH_ESC%");
 s = s.replace(/mmm/g,    "%ESC_SMONTH_ESC%");

 s = s.replace(/yyyy/g, String(this.getFullYear()));
 s = s.replace(/yy/g, String(this.getFullYear()).slice(-2));

 s = s.replace(/mm/g, ('0' + (this.getMonth() + 1)).slice(-2));
 s = s.replace(/dd/g, ('0' + this.getDate()).slice(-2));

 s = s.replace(/m/g, String(this.getMonth() + 1));
 s = s.replace(/d/g, this.getDate());

 if( (this.getHours() > 11) && ((s.indexOf("%ESC_WAMPM_ESC%") >= 0) || (s.indexOf("%ESC_SAMPM_ESC%") >= 0) || (s.indexOf("%ESC_JAMPM_ESC%") >= 0)) ){
  s = s.replace(/hh/g, ('0' + (this.getHours() - 12)).slice(-2));
  s = s.replace(/h/g, String(this.getHours() -12));
 }else{
  s = s.replace(/hh/g, ('0' + this.getHours()).slice(-2));
  s = s.replace(/h/g, this.getHours());
 }

 s = s.replace(/nn/g, ('0' + this.getMinutes()).slice(-2));
 s = s.replace(/n/g, this.getMinutes());

 s = s.replace(/ss/g, ('0' + this.getSeconds()).slice(-2));
 s = s.replace(/s/g, this.getSeconds());

 s = s.replace(/zzz/g, ('00' + this.getMilliseconds()).slice(-3));
 s = s.replace(/Z/g, this.getMilliseconds());

 s = s.replace(/aaa/g, jweek[this.getDay()]);
 s = s.replace(/\%ESC_WWEEK_ESC\%/g, eweek[this.getDay()]);
 s = s.replace(/\%ESC_SWEEK_ESC\%/g, eweek[this.getDay()].substr(0, 3));

 s = s.replace(/\%ESC_WMONTH_ESC\%/g, emonth[this.getMonth()]);
 s = s.replace(/\%ESC_SMONTH_ESC\%/g, emonth[this.getMonth()].substr(0, 3));

 if( ampm != null){
  for(var i = 0; i < ampm.length; i++){
   s = s.replace(/\%ESC_WAMPM_ESC\%/, ampm[i].split("/")[Math.floor(this.getHours() / 12)]);
  }
 }

 if( ap != null){
  for(var i = 0; i < ap.length; i++){
   s = s.replace(/\%ESC_SAMPM_ESC\%/, ap[i].split("/")[Math.floor(this.getHours() / 12)]);
  }
 }

 if( (this.getHours() > 11) ){
  s = s.replace(/\%ESC_JAMPM_ESC\%/g, '後');
 }else{
  s = s.replace(/\%ESC_JAMPM_ESC\%/g, '前');
 }

 return s;
}

2012/07/09

大津市の自殺、加害者情報が伝搬中

大津市の自殺(殺人?)の加害者情報が伝搬中

フジテレビのぼかしが甘かった(わざと?)事や、学校側の対応に問題があり、勢いを増している
まぁ、加害者情報の掘り起こしは、起こるべくして起こった事だろうし、フジテレビの問題が無くとも同じ事になっただろう

滋賀県大津市立皇子山中学校 ・・・ どうでもいいけど、色使いはどうかと思う

YouTubeまとめ ←7/13 リンク更新

主犯格保護者の職場(キャッシュ)


保護者がPTA会長やら祖父が警察OBやら、よくある情報が調べられつつある

docomo 2012年6月 純減ギリギリ

docomo 2012年6月 の純増数が、11,300のギリギリ純増
関東甲信越、中国地方以外は、全て純減

昨年12月に PS Vita と共に投入したプリペイドプランの180日プランが期限切れを迎えて10万の自動解約が行われたのが原因とか
それを差し引いても、ソフトバンク、KDDIには及ばないんだけどね

2012/07/04

Delphi Indy - TIdURI.URLEncode で EIdURIException例外エラー

TIdURI.URLEncode の第一引数(エンコードしたい文字列)は http:// 等のプロトコル種別で始まらなければならないらしい
なので、URLでない文字列をエンコードするときは http:// 等を付加してエンコード後取り除く

Delphi Generics TList のアイテムを自動開放

Generics.Collections.TList のアイテムは自動開放されないので
クラスなんかに埋め込んだ場合 OnNotify イベントを利用するとスッキリする
procedure TMyClass.OnNotifyItem(Sender: TObject; const Item: <t>; Action: TCollectionNotification);
begin
    if (Action = cnRemoved) then begin // 追加, 削除, 入替がある
        Item.Free;
    end;
end;
// :
OnNotify = OnNotifyItem;
例では OnNotifyItem は任意の procedure 名、<t>の所に TList<t>で使用した型が入る
(試しに無名メソッドを使ってみたけど、そっちはコンパイルが通らなかった)

【追記】
TObjectList というのがあり、こっちは自動開放されるリストだそうです
(Generics.Collections にも Generics版あり)
TObjectList<t>.Create(True); ←Trueで生成すると、アイテムが破棄されるときにオブジェクトが解放される
使い方は TList と同じ

2012/07/03

WOWOWメンバーズオンデマンド(会員限定) は、端末も限定

WOWOWオンデマンドが始まった、対応端末は iPhone iPad iPod Android
ただし、Android の端末は、スタート時に


GALAXY Tab 7.0 Plus
GALAXY NEXUS
AQUOS PHONE 104SH

たったこれだけ

Android OS 3以降のセキュリティが必要なのだろうか
それなら、スマートフォンの対応端末(Android OS 4)が増えるのは夏以降?
期待せずに待ってみよう

2012/07/02

いまさら IS12T(Windows Phone) 白ロムを購入

IS12Tの白ロムが大量に放出されているニュース

安くなったら買おうと思っていたらすっかり忘れていた Windows Phone が1万円割れとかいう話で、やっと思い出して白ロムを購入
(最終的には、子供(3歳)に渡してカメラやYoutubeを使って貰えればいいと思って買いました)
売値で9800円とは... 回線契約を紐づけてもさばききれなかったって事かね

いまさらレビューってのもアレなんだけど、ウワサどおりのよい端末で、小さくて軽くて電池が持つ
root化 Android の何でもありとは違い、分かりやすさと動作の軽さがビジネス向きだなーと感じました
(KDDIは、売る気が無かっただけじゃないかと思う)

ちなみに、購入2日でフリーズ1回、勝手に再起動1回(少なくとも)が起こってます

【追記】
数日使ってみて

アプリが少ないが、しょーもないアプリも少ない
アプリを日本語で探しても出てこない事が多い
電池がもつ
フリックの続きに濁点なんかがあるのは、最初戸惑うけど便利だと思う
無線LANは、スリープになるとオフになるらしい・・・電池は持つけどバックグラウンドでの作業は不向き。キャリアにはやさしいかもしれない
場面毎にボリュームが設定できない
電源ボタンを押して、スリープにしても勝手に復帰したりする(何か意味があるのかもしれない)
回転の画面連動がオフにできない・・・たぶん
まだ、アプリの更新お知らせがこないんだけど(強制アップデートしろ?)