自作自演

Firefox の話題を中心に Web 関係の話も扱うつもりの雑記。だった。
zisakuzien.exblog.jp

Top

カテゴリ:プログラミング( 12 )

よくわかるAmazon #CloudSearch に行ってきた。

5月15日 AWSプロダクトシリーズ|よくわかるAmazon CloudSearch(東京都)

少し CloudSearch を触ったことがある、という状態で行ってみました。
英語の話はわからないのでは…と不安でしたが、逐次日本語訳を付けて頂けたので何とかついていけました。
以下、自分の興味のあったところなど。

■CloudSearch Technical Deep Dive

インデックス作成時は下記の流れで文章を処理しているとのこと。
・トークナイズ (日本語なら形態素解析)
・ノーマライズ
  ・英語なら小文字に寄せる
  ・日本語だと半角カナを全角カナに寄せる。ただし「ヴ」の扱いなどまだ微妙なものも。
・ステミング (活用している語を自立語にするなど)
・stop word を取り除く (冠詞を除く? 日本語なら助詞を除くなど)
・シノニムを加える
  ・シノニムには1方向の alias と双方向?の group がある。

今はできないこと (将来の課題?)
・N-gram
・形態素解析辞書のカスタマイズ

Impression of using CloudSearch

・ドキュメントの追加・削除はなるべくまとめてしないとお金がかかる。
・頼めばインスタンスとパーティションを増やしてもらうことはできるが、ウォームアップはできない。
・VPC のセキュリティグループ使えない。

■感想というか、今後の希望。

・グルーピングの機能がほしいのでお願いします!!!
 例えば、色・サイズごとに在庫数があって、グルーピングしつつ在庫のあるものだけをひっかける、とかしたいです!

・ウォームアップもほしいです。発売日とかセールとか、アクセスが跳ね上がるケースってあると思うので…

・N-gram と辞書のカスタマイズも…

・ちょっとデータ入れて検索を試してみる、というところまではシンプルなので
 グルーピングや精度にうるさい全文検索が不要なら使えるのでは、と思いました。
 アクセス数が特に跳ね上がらなければ普通にオートスケールもあるとのことですし。

・話にもあまり上がらなかったし、自分でも試せていないのですが、
 latlon の検索がどんな感じなのか、気になります…
[PR]
by tokage-shippo | 2014-05-16 12:27 | プログラミング

HTML と JavaScript と Android 4 で位置情報を取得した感想文

■環境
GALAXY S III SC-06D (Android 4.0.4)

■コードについて
Geolocation の利用 | MDN
Geolocation API-HTML5のAPI、および、関連仕様
などを参考に…

対応していないブラウザは
if (!navigator.geolocation) {
alert ("geolocation services are not supported by your browser.");
return;
}
みたいな感じで処理を分けておく。
(※ブログの都合で全角スペース入れてます…)

1回だけ取得なら navigator.geolocation.getCurrentPosition
定期的に監視するなら navigator.geolocation.watchPosition
を使う。
どちらも成功時に呼ばれるコールバック関数に
位置情報のオブジェクトが渡される。
失敗時の方はエラーに関するオブジェクトが渡される。
navigator.geolocation.getCurrentPosition(
function(position){
success(position);
},
function(error){
fail(error);
},
{maximumAge:0}
);
こんな感じにしておくと、
位置情報の有効期限なし(都度取得)で取得できる。

■位置情報がキャッシュされる?
getCurrentPosition だと位置情報がキャッシュされてしまう、
という話を聞いて、書いて試したものの
第三引数に {maximumAge:0} を渡すようにしたからか、Android 4 だからなのか、
ちゃんと都度位置情報を取得しなおしているように見えた。
(数秒あけて、繰り返し実行した際に、位置がずれることがあった。)
Android 2.3 や iPhone ではキャッシュされてしまうものがあるのかないのか、
検証できていないのでわからない。

■GPS をオンにしても位置情報が取得できない
Galaxy S3 だけなのかそうでないのかわからないが
設定 → 位置情報サービス → GPS機能を使用 にチェックを入れても
エラーコード 2 (The last location provider was disabled) となって
位置情報が取得できなかった。
設定 → 位置情報サービス → 無線ネットワークを使用 にチェックを入れたところ
GPS機能を使用 のチェックの有無にかかわらず位置情報を取得することができた。

■取得した位置が明らかに遠いことがあった
関東某所の駅・電車内で実行したところ、大阪の位置情報が返されることがあった。
その際、同じような場所で3分ほどの間に11回実行し、5回が大阪の位置情報だった。
GPS による位置取得でなかったのが原因だと思う。
ただ、GPS を使用して位置情報を取得するかどうかは
端末側の設定次第で HTML や JS を書く側からは指定できないので
サービスに組み込む場合は、位置情報が違うかもしれませんよ、と
あらかじめユーザに伝える必要がありそう。

■感想
位置情報を単純に取得して、さらに Google Maps API で
地図上に表示するだけならとても簡単。お手軽。
ただ、位置情報の取得は一瞬では終わらないので
待ち時間をどうユーザに示すかは、工夫した方が親切かもしれない。

また、どのような設定をすれば位置情報の取得ができるのか、
どの程度の精度での取得になるかはわかりづらいと感じた。
GPS のオンオフは画面上部を"引っ張る"とボタンが出てくるが、
「無線ネットワークを使用」に相当するものは一度ホームに戻って
設定から選ばないといけなくてオンオフの切り替えが面倒だと感じた。

最後に、位置情報はある程度誤差が出ることを考えると
検証は移動しながら行うことになるので
検証しながらコードをいじるのが難しくてやりづらいと思った。
[PR]
by tokage-shippo | 2013-01-28 23:12 | プログラミング

MySQL 5.5 で外部キー制約使おうとしたらエラーではまった。

ALTER TABLE `hoge_table` ADD FOREIGN KEY ( `id` ) REFERENCES `hoge`.`fuga_table` (`id`
) ON DELETE SET NULL ON UPDATE CASCADE ;

みたいにして、外部キー制約を追加しようとしたらエラーになりました。
原因は、NOT NULL のカラムなのに ON DELETE SET NULL を指定していたため。
原因がわかるまで手間取ったのでメモしておきます。

上記の SQL を実行したところ、下記のようなエラーが出ました。(xxxの部分は英数字)
ERROR 1005 (HY000): Can't create table 'hoge.#sql-xxx_xxxx' (errno: 150)

エラーメッセージで検索したところ、下記のページがヒットしました。
InnoDBの複合FOREIGN KEY制約について - Yet Another Hackadelic
FOREIGN KEYを張る際に怒られた時はSHOW ERRORSよりもSHOW INNODB STATUSを見ましょう。
とのことなので、SHOW INNODB STATUS をやってみました。
mysql> SHOW INNODB STATUS\G
ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near 'INNODB STATUS' at line 1

エラーになりました。調べたところ、
SHOW INNODB STATUS

SHOW ENGINE INNODB STATUS
となったそうです。
MySQL :: MySQL 5.5 Reference Manual :: 14.3.14.2 SHOW ENGINE INNODB STATUS and the InnoDB Monitors

SHOW ENGINE INNODB STATUS\G を実行して、
「LATEST FOREIGN KEY ERROR」の項目を確認したところ、
「You have defined a SET NULL condition though some of the
columns are defined as NOT NULL.」とあったので、エラー詳細がわかりました。
[PR]
by tokage-shippo | 2013-01-15 17:50 | プログラミング

Twitter の API で page パラメータが使えなくなるので直した。

Twitter APIの改訂 - 2012年5月14日 - Twitter Development Talk - ja | Google グループ
5. since_idやmax_idをサポートするエンドポイントはpageパラメータによるページングを廃止

自分の Twitter の発言を毎日取得して DB に保存しています。
残っている最初の発言が2008年なので
その頃に保存用のスクリプトを書いたのだと思います。
そんな年代物のスクリプトにとうとう残念なお知らせが来てしまいました。

既存スクリプトの問題点
・page パラメータを使っている → 動かなくなる!
・バージョン抜き、サブドメイン抜きのAPIエンドポイントを使っている
・OAuth の認証なしで API 叩いているので
 同時刻に別の人が同じサーバで API 叩きまくると API 制限にひっかかる可能性がある
・なんかもう昔書いたスクリプト読みたくない

昔のことはきれいに忘れて、スクリプトを書き直しました。

・OAuth の認証通るようにする
 PHP用のライブラリ → abraham/twitteroauth · GitHub
 適当にアプリケーションの登録をしておく → Create an application | Twitter Developers
   うっかり変な使い方で Suspended になったことがあるので、
   個人用でも用途別に登録した方が良さそう。

・バージョン抜き、サブドメイン抜きのAPIエンドポイントを使うのやめる
 ライブラリ使うようにしたのでこれもクリア。

・page パラメータやめる
 ドキュメント読む → GET statuses/user_timeline | Twitter Developers
   since_id と max_id を使うようにする。

きっとこれで 5/14 以降も動くようになりました。めでたし。
[PR]
by tokage-shippo | 2012-05-03 14:12 | プログラミング

Mac OS X Lion で PHP と MySQL

PHP は 5.3.6 でした。


■MySQL 入れる。

レンタルサーバーの MySQL のバージョンが 5.1 なので、5.1 を入れました。
http://dev.mysql.com/downloads/mysql/5.1.html
10.7用はなかったので、Mac OS X ver. 10.6 (x86, 64-bit), DMG Archive 使いました。

1. mysql-5.1.60-osx10.6-x86_64.pkg
2. MySQLStartupItem.pkg
3. MySQL.prefPane
の順でインストールしました。

ReadMe.txt に書いてありますが、
勝手にパス通して(?)くれたりしないみたいなので
必要なら自分で alias の設定をします。

システム環境設定の MySQL の項から開始・停止ができます。


■PDO で MySQL に接続

(参考・PHP + MySQL on Leopard (Mac OS X 10.5) :: R-STYLES.NET)

mysql:host=localhost;dbname=test で接続しようとしたらエラーになりました。
SQLSTATE[HY000] [2002] No such file or directory

PHP と MySQL でデフォルトの mysql.sock の場所が食い違って接続できない、
ということで、自分は php.ini の方を書き換えました。
(参考にした記事には my.cnf 書き換えた方が良いのでは…とあって、
 後からやっぱりそっちの方が良いのかなーとも思ってます…)

mysql.default_socket = /tmp/mysql.sock
pdo_mysql.default_socket=/tmp/mysql.sock
を追加しました。


■文字コードの設定
PHP, PDOでMySQL接続時の文字コード設定 | beginsprite log
$pdo = new PDO($db_dsn,$db_user, $db_password,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"
)
);

[PR]
by tokage-shippo | 2011-12-30 15:17 | プログラミング

Windows + Apache で使用する PHP のバージョンを 5.3 に上げたメモ。

Windows XP + Apache 2.2 で、
PHP 5.2 → 5.3 にする。

まず、Path を PHP5.2 のフォルダではなく、5.3 のフォルダを使うように変更して、Windows を再起動する。
コントロールパネル → システム → 詳細設定タブ → 環境変数 → システム環境変数の Path。
再起動しないと、5.2 の方の php5ts.dll が使われてしまい、Apache が起動しなかった。

次に、httpd.conf 書き換え。
LoadModule php5_module C:/php-5.3/php5apache2_2.dll
PHPIniDir C:/php-5.3/php.ini

ついでに、php.ini も修正。

・下記のようなエラーログが出た。
 PHP Startup: Unable to load dynamic library 'C:\php-5.3\ext\php_exif.dll' - 指定されたモジュールが見つかりません。
 php_mbstring.dll を先に読むよう上に書いたら出なくなった。
 参考・POSTORO:Windowsで Exif拡張を使おうとして Apacheが起動しない場合

・phpinfo 見たら、「It is not safe to rely on the system's timezone setting…」のようなメッセージが出る。
 date.timezone = "Asia/Tokyo" で設定。(date.timezoneは設定値なしでコメントアウトされてた。)
[PR]
by tokage-shippo | 2011-06-01 23:35 | プログラミング

CakePHP で join をやりたかったメモ。

※この記事は 2010年に書かれた古い記事です。


「CakePHP 複数テーブル」でぐぐると3つ、ちょっとずつ違う話が出てくる。


1. コントローラの中で複数のモデルを使いたい。

コントローラの冒頭で
var $uses = array("Table1", "Table2", ...);
$components、$helpers、$uses :: コントローラの属性 :: コントローラ :: CakePHPによる開発 :: マニュアル :: 1.2コレクション :: The Cookbook


2. モデルを結び付けたい。

hasOne とかそういうもの。
関連: モデルを結びつける :: モデル :: CakePHPによる開発 :: マニュアル :: 1.2コレクション :: The Cookbook


3. join を使いたい。

使えるのは inner join と left join。
find で渡す条件の配列に joins という名前で配列を渡す。
テーブルをひとつだけ join したい場合、$joins = array(array(条件)); のようになるので、
うっかりしていると array をひとつ忘れてはまる。
$joins = array(
array(
'type' => 'inner', // もしくは left
'table' => 'fuga_table',
'alias' => 'Fuga',
'conditions' => array(
'Fuga.id = Hoge.id',
),
),
array(
// 複数のテーブルを joinできる
),
);
$param = array('joins' =>$joins , 'conditions'=>条件, 'order'=>並び順, ...);
$this->Hoge->find('all', $param);

参考
ZiSTA Cake: 'joins'で明示的にテーブルをJOINする
[cakephp]cakephp1.2で明示的にJOINさせるやり方
CakePHPのpaginateでJOIN [CakePHP] | Web&MUSICブログ QUALL
[PR]
by tokage-shippo | 2010-07-15 19:06 | プログラミング

iBATIS の SQL 内で大小比較の記号を使う

追記(6/28) select 内全体を CDATA で囲んだほうが可読性が上がるのでは、という指摘をもらったのでサンプルを修正しました。


XML なのに < や > はそのまま使えないよな…と思って調べたら
やっぱりそうだった、という話です。

参考・634 - Apache iBATIS

上記の記事にあるように <![CDATA[文字列]]>を使えば良いようです。
XML なら &lt; や &gt; と思いましたが
それだと後でわかりづらそうなのでやめました。

<!-- ぱっとみどちらが大きいかわからない -->
<select id="hoge" parameterClass="java.lang.String" resultMap="hogeMap">
SELECT
*
FROM
HOGE
WHERE
HOGE.ID &gt; #value#
</select>
<!-- どちらが大きいかわかりやすい -->
<select id="hoge" parameterClass="java.lang.String" resultMap="hogeMap">
<![CDATA[
SELECT
*
FROM
HOGE
WHERE
HOGE.ID > #value#
]]>
</select>

条件式書きたくて適当にでっちあげたので、おかしかったらごめんなさい…
[PR]
by tokage-shippo | 2010-06-24 20:48 | プログラミング

PHP で OAuth で Twitter bot のためにアクセストークンを手に入れる。

使ったもの。
abraham's twitteroauth at master - GitHub のライブラリ使用(0.2.0-beta2)。
Twitter-OAuth-PHP 上記ライブラリの説明(英語)。

参考。
覚書的メモ:twitteroauth.php + OAuth.php  - こめのメモ
TwitterのbotをOAuthに対応させる - しばそんノート

Consumer Key と Consumer Secret は Twitter サイトでアプリケーションの登録をすればその時にもらえる。
Twitter / Applications

<?php
include_once('twitteroauth/OAuth.php');
include_once('twitteroauth/twitteroauth.php');

$consumer_key= "";
$consumer_secret= "";

$to = new TwitterOAuth($consumer_key, $consumer_secret);
$token = $to->getRequestToken();
$request_link = $to->getAuthorizeURL($token);
echo "please access : \n$request_link\n";

echo "PIN > ";
$line = trim(fgets(STDIN));

$tok = $to->getAccessToken($line);
var_dump($tok);

?>

$consumer_key と $consumer_secret には取得した値を入れておく。
コマンドラインで実行。
Twitter の URL が表示されるのでアクセスして、自分が登録したアプリケーションか確認して Allow。
7桁の数字が表示されるのでコピーして、コマンドラインにペースト。

oauth_token と oauth_token_secret がアクセストークンなので(という言い方はあってるんだろうか…)、
どこかにこの値を保存する。
[PR]
by tokage-shippo | 2010-02-04 17:49 | プログラミング

Windows で Apache で PHP で cURL を使えるようにする。

今後のためにメモ。

php_curl.dll を配置して、php.ini を書き換えるだけでは読み込めないことがある。
コマンドラインから phpinfo() を実行すると読み込めても Apache からはダメだった。

原因は Apache が読んでる libeay32.dll、ssleay32.dll のバージョンが違うことだったらしい。
Apache の bin フォルダへ PHP フォルダにあったそれぞれの dll をコピーして再起動したら読み込めるようになった。

確認ポイント
1. 実行している PHP、Apache の設定ファイルの場所(複数インストールしてる場合要確認)。
  php.ini の位置は phpinfo() で「Loaded Configuration File」の所に書いてある。
2. extension_dir の場所。
  これも phpinfo() で確認。
3. PHP と dll のバージョンはあっているか。
  PHP: Releases から該当バージョンの zip を取得。
  ものによっては微妙にバージョン違っても動いちゃってる気がします…(→気づきにくい)
  dll の プロパティ のバージョン情報に数字が書いてある。

ちなみに libeay32.dll、ssleay32.dll を配置したら php_openssl.dll が読み込めないというメッセージも消えました…
こんなところに原因が><。
[PR]
by tokage-shippo | 2010-02-04 15:12 | プログラミング
Mozilla Firefox ブラウザ無料ダウンロード

about this...

書き手の名前は 晴柳祐志 と言います。


リンク

Twitter
いつか何とかしたいサイト

最新のトラックバック

[foxkeh]フォクす..
from 「 Firefox ×?=!..
[Firefox]Fir..
from +Sun Flower〜報告〜+
Firefoxバトン
from MなMによるMのための日記
スキン変更!
from SUKA・SUKA・BLOG
Firefox 1.5に..
from mmkg

検索

S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
XML | ATOM

個人情報保護
情報取得について
免責事項