Google Maps JavaScript API V3を使う(基本編) [JavaScript]

Mapを表示させるには以下のようにします。
まず、HTMLにMapを入れるdivを作っておきます。 Mapのコントローラの表示やズームなど、オプションで色々と調整することができます。

map
Mapがこのように表示されました。
posted bymochi categry tags
pagetop

Google Maps JavaScript API V3を使う(準備編) [JavaScript]

Google Maps JavaScript API V3を使ってみました。
APIキーが不要になり、手軽に利用できるようになっています。

また、センサー機能というものが追加されており、位置検知センサー(GPSなど)がある機器からユーザーの位置情報を取得するかどうかの設定が必須となります。必要な場合はsensorパラメータにtrueを、不要な場合はfalseを付与します。
普通のPCサイトで地図を埋め込むだけなら必要ないのでfalseとします。
ちなみにGoogle AJAX APIを使う場合は以下のように記述できます。 ただ、IEでエラー以下のような内部エラーらしきものが頻発したので今回は使わないでおきました。
メッセージ: オブジェクトの呼び出しが無効です
ライン: 25
文字: 771
コード: 0
URI: http://maps.gstatic.com/intl/en_ALL/mapfiles/api-3/3/14/main.js
次回はMapの読み込み部分について書きます。

▽参考
Google Maps JavaScript API V3
posted bymochi categry tags
pagetop

LocalConnectionで複数SWF間の通信 [AS3]

同一ページに配置された複数swf間で通信するにはLocalConnectionを使用します。

使用する注意点としては、LocalConnectionを使用したswfを埋め込んだページを複数ブラウザで閲覧すると
ArgumentError: Error #2082: このオブジェクトは既に接続されているため、接続できません。
というエラーが出て、通信できなくなります。
同一PC上では同じIDのLocalConnectionが使用できないためです。

コレを回避するには、IDをユニークのものにすればいいのでJavaScriptで現在の時間を取得して、flashvarsでFlashに値を渡しIDにくっつけます。

また、LocalConnectionはメンバ変数にしないとうまく動作してくれませんでした。

HTML/JSソース ※swfobject v2.0使用
<script type="text/javascript" src="./js/swfobject.js"></script>
<script type="text/javascript">
var flashvars = { ts:timeStampFunc() }; //現在の時間を取得して2つのswfにflashvarsを渡す
var params = { scale:"noscale", menu:"false" };
var attributes = {};
swfobject.embedSWF("./main1.swf", "main1", "100%", "100%", "9.0.00", "./js/expressInstall.swf", flashvars, params, attributes );
swfobject.embedSWF("./main2.swf", "main2", "100%", "100%", "9.0.00", "./js/expressInstall.swf", flashvars, params, attributes );

function timeStampFunc()
{
  return new Date().getTime();
}
</script>

main1.swf 送信側ソース
---
import flash.net.LocalConnection;
---

//送信用LocalConnection
public var sendConnect:LocalConnection = new LocalConnection();
//flashVars
private var params:Object = root.loaderInfo.parameters;

public function sendData():void
{
//第一引数は接続ID名、第二引数は受信側で実行する関数名、第三引数以降は任意のオブジェクトを複数渡すことができる
  this.sendConnect.send("sampleConnect" + this.params["ts"], "sampleFunc", 1, "test");
}

main2.swf 受信側ソース
---
import flash.net.LocalConnection;
---

//受信用LocalConnection
public var receiveConnect:LocalConnection = new LocalConnection();
//flashVars
private var params:Object = root.loaderInfo.parameters;

public function document()
{
  //受信準備
  this.receiveConnect.client = this;
  this.receiveConnect.connect("sampleConnect" + this.params["ts"]);
}

//受信時の実行関数
public function sampleFunc(id:Number, text:String):void
{
  if (id == 1)
  {
    trace(text); //[test]を出力
  }
}

▽参考
ActionScript 3.0 コンポーネントリファレンスガイド - LocalConnection
posted bymochi categry tags
pagetop

UPDATE文でCASE式を使う [Oracle]

SAMPLE_TBL の NOTES の内容によって、処理する内容を変えるサンプル。
NOTES が空でない場合は、既存の内容に改行を入れテキストを追加します。
UPDATE
 SAMPLE_TBL
SET
 UPDATEDATE = sysdate,
 NOTES =
 case
  when NOTES = '' then '2011/06/20 備考です'
  else NOTES || CHR(13) || CHR(10) || '2011/06/20 備考です'
 end
WHERE
 SAMPLE_ID = 123
▽参考
CASE式のススメ
posted bymochi categry tags
pagetop

PHP5のfgetcsv()でデータがうまく読み込めない その2 [PHP]

以前、 fgetcsv()でCSVデータを読み込む際に
csvファイルの文字コードと、PHPの内部文字エンコーディングが違うと
うまく読み込めない現象の対処法をロケール設定を変更するといいと書きましたが、
ロケール設定を変更したくない場合は以下のようにするといいそうです。
//ファイルの読み込み・文字コードの変換
$buf = mb_convert_encoding(file_get_contents('csv/sample.csv'), 'UTF-8', 'sjis');
//一時ファイルの作成
$fp = tmpfile();
//一時ファイルに文字コード変換後のデータを書き込み
fwrite($fp, $buf);
//ファイルポインタの位置を先頭に戻す
rewind($fp);

//各行ごとの処理
while (($data = fgetcsv($fp, 1024, "\t")) !== FALSE)
{
 print($data[0]);
}
▽参考
blog.plastik.jp:PHP5 の fgetcsv() で読み込み内容が腐る現象
さぼてん:fgetcsv関数を使用した場合の文字化けについて
posted bymochi categry tags
pagetop

クラス内でusort関数を使う [PHP]

usort関数を使用すると、ユーザーが定義した順で配列をソート出来ます。
$samlpe_list配列のvalueというキーで配列内の並べかえを行うサンプル。
$samlpe_list = array(
 array('value'=>3, 'name'=>"aaa"),
 array('value'=>1, 'name'=>"bbb"),
 array('value'=>2, 'name'=>"ccc")
);

usort($samlpe_list, "compareValue");

function compareValue($a, $b)
{
 if ($a['value'] == $b['value']) {
  return 0;
 }
 return ($a['value'] < $b['value']) ? -1 : 1;
}
usort()の第2引数に並べ替えの関数名を指定しますが、クラス内で使用する場合はこのままだとエラーになります。

クラス内メソッドをコールバック関数として指定するには以下のようにします。
usort($samlpe_list, array($this, "compareValue"));
▽参考
PHPリファレンス:本ドキュメントにおける疑似的な型および変数
PHPリファレンス:usort
posted bymochi categry tags
pagetop

MySQLでユーザー変数を使う [MySQL]

OracleのROWNUMのように各レコードに連番を付与には、MySQLではユーザー変数を使う必要があります。

連番[row_num]を付与するサンプル
SET @i = 0;

SELECT
 @i := @i + 1 as row_num,
 sample_tbl.id
FROM
 sample_tbl;
抽出結果
+--------+------+
| row_num  | id      |
+--------+------+
|           1 | aaa    |
|           2 | bbb    |
|           3 | ccc    |
+--------+------+
▽参考
MySQL ユーザ変数
posted bymochi categry tags
pagetop

twitter trends 使用メモ [外部API]

twitter上でどんなキーワードが人気か、地域別で取得できるAPIです。
国内で指定できる地域はまだ日本と東京のみのようです。

▽つぶやきトレンドを利用できる国/都市一覧を取得するAPI
http://api.twitter.com/1/trends/available.xml

▽各地域ごとのトレンド情報を取得するAPI
上記APIで取得した一覧データのWOEID (a Yahoo! Where On Earth ID :Yahooが世界の都市に割り振ったID) をもとに、 [日本]の場合は以下のような形式で地域ごとのトレンド情報を取得する
http://api.twitter.com/1/trends/23424856.xml

-----

どちらもIP単位での1時間150回のAPIリクエスト制限の適用対象となるので、
あと何回リクエストが可能なのかは以下で確認できます。
http://twitter.com/account/rate_limit_status.xml

リクエスト制限回数が変わることがあるのでこちらを確認しておくといいと思います。
http://twitter.com/api_limit


150回以上リクエストする必要がある場合は、OAuth認証済みのトークンでリクエストすると制限が350回まで増えます。
twitterユーザーでアプリの登録をし、認証に必要なキーを控えておいてサンプルソースを以下からダウンロード。
http://apiwiki.twitter.com/w/page/22554657/OAuth-Examples

OAuth認証済み データの取得ロジックのサンプル[PHP]
<?
require_once 'twitteroauth.php';

define ('TWITTER_CONSUMER_KEY', 'Consumer key');
define ('TWITTER_COMSUMER_SECRET', 'Consumer Secret');
define ('TWITTER_ACCESS_TOKEN', 'Access Token');
define ('TWITTER_ACCESS_TOKEN_SECRET', 'Access Token Secret');

$to = new TwitterOAuth(TWITTER_CONSUMER_KEY, TWITTER_COMSUMER_SECRET, TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_TOKEN_SECRET);
$result = $to->OAuthRequest("http://api.twitter.com/1/trends/available.xml",array(),"GET");
var_dump($result);
?>
OAuth認証済み 残りリクエスト回数は以下で確認。
<?
$result = $to->get('account/rate_limit_status', array());
?>

▽参考
twitter API Documentation Trends resources
twitter/PHPでつぶやき投稿(OAuth認証)


---

2011/8/17日追記
つぶやきトレンドを利用できる国/都市一覧を取得するAPIが多言語対応したみたいです。
今まで英語しか取得できなかったのですが、各エリアの[name]が日本語で返ってくるようになりました。
langパラメータは明示的につけたほうが良さそうですね。
http://api.twitter.com/1/trends/available.xml?lang=en
posted bymochi categry tags
pagetop

CLEditorをちょっとカスタマイズ [JavaScript]

WYSIWYGエディタのjQueryプラグイン[CLEditor]を使ってみました。

デフォルトでも多機能ですが、テキストエリアのカーソル位置にアップロード済みの画像をクリックで挿入する機能が欲しかったので、カスタマイズ方法を参考に作成してみました。

エディタのモード(ボタンで切り替え)によって処理を変えています。

サンプルはこちら

▽参考
CLEditor
posted bymochi categry tags
pagetop

SQL*PlusでCSV出力 [Oracle]

SQL*PlusでSQLの実行結果をCSVで出力するには、spoolコマンドを使います。
set echo off
set linesize 1000
set pagesize 0
set trimspool on
set feedback on
set colsep ','

spool /home/oracle/sample.csv

select
 'ID',
 '名前',
 'テキスト'
from dual;

select
 sample_id,
 sample_name,
 sample_text
from
 sample_tbl
where
 sample_id between 1 and 100
order by
 sample_id;

spool off
これだと set trimspool on で各行の出力の終わりから行末のスペースを削除するように設定しても、余分なスペースが入ってしまいます。

以下のような形で各行をカンマ区切りで結合して抽出すれば、csvに余分なスペースが出来なくなりました。
set echo off
set linesize 1000
set pagesize 0
set trimspool on
set feedback on
set colsep ','

spool /home/oracle/sample.csv
select
 'ID'||','||
 '名前'||','||
 'テキスト'
from dual;

select
 sample_id||','||
 sample_name||','||
 sample_text
from
 sample_tbl
where
 sample_id between 1 and 100
order by
 sample_id;

spool off
posted bymochi categry tags
pagetop
1  2  3  4  5  6