2011/10/13

Zend Mail PartでメールのContent-typeが取得できない

あるサイトで、メールで記事などを投稿する機能を作った。
メールの解析はZend Mail Partを使ってる

メールのヘッダーにcontent-typeがないというエラーが出ることがある。

エラーが出た時点でのデコーダの解析した部分を見たら空っぽだった。

同じ内容のメールを送っても再現できない。
同じユーザーでもできる時とできない時がある。

いまのところ原因不明。
うーん…なんだろう。


- add 2012/5/2 -

再現することはできるようになった。
gmailで本文に日本語を使用せずにメールを送るとcontent-typeが取得できないというエラーが出る。

thunderbirdでgmailから送信したメール見てみる。
content-typeは…ある。
thunderbirdがメールのヘッダーを生成するんだろうか?

しかも実際にエラーが起きているメールは本文には日本語が使用されていた。
うーむ。

2011/10/12

[Android] JavaScriptで位置情報を取得するのにやや時間がかかる

JavaScriptで位置情報を取得するには

navigator.geolocation.getCurrentPosition(
  function(pos){
    //成功時
  },
  function(){
     //失敗時
  }
);


↑のコードで取れるんだけど、手元にあるAndroid2.3で試したところ、iPhoneに比べて位置情報の取得に時間がかかった。(体感だと2秒くらい)

体感速度を早めるためなどの理由で、位置情報の取得前に画面を動かしたりする場合は注意しないとな。

2011/10/07

[MooTools] 親要素・子要素・兄弟要素 取得方法まとめ

MooToolsでの要素取得方法

var $elem = $(id);




■親要素

1つだけ。条件が指定されていたら、さかのぼって条件に合う要素を取ってくる
$elem.getParent(条件);

全部取得 。条件が指定されていたら、さかのぼって条件に合う要素を取ってくる 
$elem.getParents(条件);




■子要素

1つだけ取得
$elem.getElement(条件);

IDで指定

$elem.getElementById(id)

複数取得
$elem.getElements(条件);


直下の子要素のみ
$elem.getChildren(条件);

最初の子要素
$elem.getFirst(条件);


最後の子要素
$elem.getLast(条件);



■兄弟要素

すぐ次の要素
$elem.getPrevious(条件);

後ろにある兄弟要素すべて
$elem.getAllPrevious(条件);

すぐ前の要素
$elem.getNext(条件);


前にあるもの兄弟要素すべて
$elem.getAllNext(条件);

参考:
MooTools ドキュメント日本語訳

iPhone, AndroidでURLバーを隠す

スマートフォンは画面が小さいのでURLバーを非表示にしたい時がある。
そんな時は

scrollTo(0, 1);


これでurlバーが隠れる。
縦のスクロールが0だとAndroidが反応しない

ページの高さが画面の高さより小さい場合はURLバーは出たまま。
スクロールできないからね。



-- add:
※ページ読み込み時に上の処理を無条件で動かすと、この処理が動く前にスクロールしてたのが、一番上まで戻されることになってしまうので注意。
スクロールされていない時だけに限定したほうがよさそう
if(docment.body.scrollTop === 0){
 scrollTo(0, 1);
}
参考:
iPhone/Androidブラウザのアドレスバーを隠す方法

jmeter内で条件分岐して処理を切り分ける

jmeter便利だなー

jmeterの処理中に変数の値やなんかの条件によって処理を分岐することができた。

やっている処理の項目を選んで右クリック→「上の階層に挿入」-.>「ロジックコントローラー」->「ifコントローラー」

これに条件を入れられるので、その条件がtrueの時だけ、その「ifコントローラー」の子の項目がテストされる。

参考:
IFコントローラの使い方

2011/10/06

[JavaScript] スマートフォンでJavaScriptの処理にかかる時間を計測する

最近のブラウザだと

console.time('test');
//処理
console.timeEnd('test');

で処理にかかった時間が計測できるんだけど、スマートフォンだとまだできない。




なんで、処理開始前と処理終了後の時間を比較して、処理にかかった時間を計測する

var startTime = new Date().getTime();


//処理


var endTime = new Date().getTime();

console.log(endTime - startTime);


2011/10/05

[WordPress] カスタム投稿タイプの一覧ページが表示されない

カスタム投稿タイプ別の一覧ページは
http://example.com/カスタム投稿タイプ名
でその投稿の一覧が表示されるんだけど、なぜかある投稿タイプの時だけ404になった。

結局理由はわからないまま…
今回はhas_archiveをtrueにすることで解決できた。

has_archiveをtrueにすると
archive-{post_type}.php
archive.php
index.php
の順にファイルを読みにいく。

構成によってはこのやり方だと対応できないかも


参考:
カスタム投稿タイプのメインインデックス(WP 3.1~)

メールヘッダーの解析でエラー


以前メールで記事を投稿するようなシステムの変更に関わった。
そのシステムは何年も前に作られたもので、携帯からの投稿を原則としてた。デコメールにも対応してた。

いつ頃からかそのシステムで時折エラーが出るようになった。俺が関わったのはその頃。
原因はiPhone。
iPhoneのメールヘッダーはそれまでの携帯のメールヘッダーと、違う箇所が結構あった。
色々解析しながらiPhoneメールには対応して、無事終了。

それが最近またエラーが出るようになった。
調べてみるとメールヘッダーにContent-Transfer-Encodingがあることを前提に処理していたので、Content-Transfer-Encodingがない場合はエラーになってしまっていた。

Content-Transfer-Encodingがない場合は7bitを指定したことになるみたい。知らんかった。

通常のiPhoneメールだとそういうことはなさそうなので、デフォルト以外のメールアプリから送信されたものっぽい。
色々増えてくると難しい…けど、コレくらいは予想しとくべきだったな、と反省。

2011/10/03

[JavaScript] data-から始まる独自の属性を取得する


HTML5から独自の属性を追加する際の名前の付け方にルールができた。
<div data-key="value">aiueo</div>
data-○○とつける。

この値をJavaScriptで取得する場合
elem.getAttribute(data-key);
でもできるんだけど、もっと簡単な方法が提供されてた

elem.dataset.key
で取得できる

仮に
<div data-id="100"></div>
の場合
var id = elem.dataset.id; //id = 100
で取得できる

data-○○-○○にするとjQueryとHTML5の仕様で違いが出てしまうらしいので、data-移行にはハイフンを使わない方がいいらしい。



>