2012年12月27日木曜日

[Fireworks]ツールパネルのサブメニューを表示するには

ツールパネルの黒三角がついているアイコンは、サブメニューが表示されるはずなんだけど、表示される時とされない時があって、なんでだろうと思っていたら、どうやら長押し(クリック)しないと表示されないみたいですね。自分はクリック一瞬なので表示されていなかったようです。すごく基本なのに検索しても出てこない。

2012年12月26日水曜日

[AWS]EC2 Command Line Toolsを導入した。

以下を参照してできました。(英語)
 
Setting Up the Amazon EC2 Command Line Tools

ただ、Windows XPでやっていますが、コマンドプロンプトでsetxが使えなかったので、
環境変数の設定はGUI、「システムのプロパティ」→「環境変数」で行いました。

また、環境変数のパスをクオテーションで囲む場合、シングルでやるとだめで
ダブルクオテーションだといけました。

2012年12月20日木曜日

[AJAX]ajaxで取得したレスポンス内のjavascriptはデバッグできないので

Ajaxで取得したHtml等の中に書かれているjavascriptはFirebugなどで
デバッグすることができない。

なので、なるべくソースはもともとあるjavascript(Ajaxではなく最初にそのページを
表示した際に読み込まれるjavascript)内に関数として記述しておき、Ajaxで取得した
javascriptからはその関数を呼び出すだけ、という形にしておけば、デバッグが可能だ。

[JavaScript]htmlのタグIDと同じ名前の変数を作ってはいけない

下記で説明されているとおりとなります。

IE8で「オブジェクトでサポートされていないプロパティまたはメソッドです」と表示される

変数宣言する際にvarをつければエラーは発生しないのだが、
タグIDの方が無効になってしまうので、やはり違う名前をつけるべき。

[JavaScript]普通のfor文とfor-in文の微妙な違い

JavaScriptで配列やオブジェクトを扱う際に、普通のfor文とfor-in文の微妙な違いについて
紹介する。

■一次元配列の場合。
・普通のfor文

定義有り→エラーが発生しない。
list=new Array();
for(i=0;i<list.length;i++){
    alert(list[i]);
}

定義なし→エラーが発生する。
エラー: 'list' は宣言されていません。
for(i=0;i<list.length;i++){
    alert(list[i]);
}

・for-in文

定義あり→エラーが発生しない。
list=new Array();
for(var item in list){
    alert(list[item]);
}

定義なし→エラーが発生する。
エラー: 'list' は宣言されていません。
for(var item in list){
    alert(list[item]);
} 

つまり、上記のように一次元配列においての挙動は同じである。

■多次元配列の場合
・普通のfor文

二次元目までの定義あり→エラーが発生しない。
list=new Array();
list["a"]=new Array();
for(i=0;i<list["a"].length;i++){
    alert(list["a"][i]);
} 

二次元目までの定義なし(一次元目のみ定義)→エラーが発生する。
エラー: 'list.a.length' は Null またはオブジェクトではありません。 
list=new Array();
for(i=0;i<list["a"].length;i++){
    alert(list["a"][i]);
} 

・for-in文

二次元目までの定義あり→エラーが発生しない。
list=new Array();
list["a"]=new Array();
for(var item in list["a"]){
    alert(list["a"][item]);
}

二次元目までの定義なし(一次元目のみ定義)→エラーが発生しない。
list=new Array();
for(var item in list["a"]){
    alert(list["a"][item]);
}

つまり、for-in文で多次元配列を扱う場合は、2次元目の配列を定義していなくても
なぜかエラーが発生しない。

ちなみ三次元にしたところ、

以下のように一次元のみ定義だとエラーが発生。
エラー: 'list.a.b' は Null またはオブジェクトではありません。
list=new Array();
for(var item in list["a"]["b"]){
    alert(list[item]["a"]["b"][item]);
} 

二次元まで定義したらエラーが発生しなくなる。
list=new Array();
list["a"]=new Array();
for(var item in list["a"]["b"]){
    alert(list[item]["a"]["b"]);
}

■結論
①普通のfor文でx次元配列を扱う場合、x次元まで定義する必要がある。
②for-in文でx次元配列を扱う場合は、x-1次元まで定義すればよい。

※①はlengthを参照するのでx次元目まで定義していないとエラーが発生するのはかるが、
  ②でx次元目まで定義していないのにエラーが発生しない理由がわからない。


2012年12月19日水曜日

[Windows]LAN上のサーバにつながらない時の注意点

BuffaloのNASになぜか接続できないなぁ、と3時間位試行錯誤
していて今日気づいたのですが、「 Microsoft ネットワーク用クライアント」が
無効になっていました。
有効にしたところ接続できるようにまりました。
たぶん先日この辺いじっちゃったときに無効にしたんだろうな。

以下で紹介されています。

 Microsoft ネットワークへの接続を無効にする

2012年12月12日水曜日

[PHP]演算子の優先順位

以下のサイトで説明していただいているように、演算子には優先順位があります。

演算子の優先順位

今日以下のようなコードを書いていたのですが、

$votable_flg = !empty($auth) and $check <1 and $theme['Theme']['kind']==1;


$votable_flgには"!empty($auth)"の値(真偽値)しか代入されていませんでした。
"or"や"and"より"="が優先されて処理されるためのようです。
なので、"="の右辺を以下のように丸括弧でくくると、期待通りの値が代入されました。

$votable_flg = (!empty($auth) and $check <1 and $theme['Theme']['kind']==1);

[Excel]複数系列の線グラフの作り方(表に不要な列がある場合)

例えば以下のような表がある時、日付で変動するA、B、Cさんの情報を全て
同じ折れ線グラフで見たい場合、複数系列のグラフを作成する。
その際、横軸には日付が来る想定だ。
ただ、「曜日」列と「合計」列は特にグラフに入れる必要がない、とする。



その場合はまず表を全て選択し、「グラフウィザード」ボタンを押す。


そのままだと以下のように、「合計」という線ができてしまい、また、横軸の項目に
曜日も入ってしまう。

 そこで、「系列」タブをクリックし、系列の欄から不要な「合計」を削除し、
「項目軸ラベルに使用」欄の横軸に使う項目を選びなおすため、右側のボタンをクリック。


 以下のように、横軸の項目に使用したいセル(A2~A8)を選択。
※見出しの「日付」(A1)は選択に含めない。



 完了ボタンを押すと、以下の用に「曜日」列と「合計」列のないグラフが作れる。



※なんか見た目のバランスの悪いグラフですね。適宜サイズの変更などはしたほうがいいですね。
  あと、Excel2000を使用しています。

※最初の表を選択する時にCtrlキーを押して日付の列とデータの列を分けて選択し、
 曜日と合計を選択しないようにすればできる的な記事をどこかでみたのだけど、
 できなかったので、この方法を採用しています。



2012年12月7日金曜日

[jQuery]$.ajaxのオプションcompleteとsucceedの違い

completeオプションを使用した場合は、jsonからjavascriptの配列に変換する
処理が以下の3行目のように必要だった。

$.ajax({
 complete:function (data, textStatus) {
  data = $.parseJSON(data.responseText);
  if (data.redirect) {
              window.location.href = data.redirect;
         } else {
   $.alerts.dialogClass = "custom1";
   jAlert(data.message,"確認して下さい",clearAltCls);
         }
 },
 data:postData,
 type:"post",
 url:"\/rakuzon\/themes\/itemAdd"
});
だが、以下のようにsuccessを使用した場合は、11行目で指定したデータタイプに
自動的に変換されている。便利。

$.ajax({
 success:function (data, textStatus) {
  if (data.redirect) {
              window.location.href = data.redirect;
         } else {
   $.alerts.dialogClass = "custom1";
   jAlert(data.message,"確認して下さい",clearAltCls);
         }
 },
 data:postData,
 dataType:"json",
 type:"post",
 url:"\/rakuzon\/themes\/itemAdd"
}); 

ちなみに、予断だが、ajaxの結果にレスポンス結果によってリダイレクトしたい
場合は、上記の4行目のようにすればよい。

2012年12月6日木曜日

[jQuery]「jQuery Alert Dialogs」での$(this)の参照が変わる?

検証はしていないので、原因が違ったらすみません。
以下の「jQuery Alert Dialogs」を使っています。

http://h2ham.seesaa.net/article/117267913.html

jAlertやjConfirmの後に$(this)を使うと、想定していたオブジェクトを
指していないようです。
firebugで見たところ、「Window」オブジェクトになっていました。

jAlertやjConfirmの処理の中で$(this)が変わる処理が入っているのでは
ないか、と推測します。

なので、仕方なしに、$(this)で取得したい値をjAlertやjConfirmを使う前に
変数に代入しておくことにします。


[CakePHP]paginateでgroupbyしている時number()が表示されない件

以下のサイトで教えてくれてる対処で表示されるようになりました。
ありがとうございます。

Group Byしている時にpaginator->number()が表示されない件

残った疑問は、オーバーライドしたpaginateCount()だけど、model.php側にも
ないんだね。
どこにも定義されていないメソッドなのに、controller側で呼び出されてるのが
不思議。

2012年12月3日月曜日

[CakePHP]deleteAll()やdelete()の$cascadeはmodel側の設定も必要

$this->Model->deleteAll($conditions,$cascade)の$cascadeに
いくらtrueを設定しても関連モデルのデータを消してくれなくて
調べていたら、 以下のサイトに書いてあった。(英語)

 CakePHP - delete cascade not working

 Model側のアソシエイションを設定するところで、以下のように
dependentをtrueに設定する必要があることがわかった。
 var $hasMany = array(
  'ThemesitemsUser' => array(
   'className' => 'ThemesitemsUser',
   'foreignKey' => 'themesitem_id',
   'dependent' => true,
   'conditions' => '',
   'fields' => '',
   'order' => '',
   'limit' => '',
   'offset' => '',
   'exclusive' => '',
   'finderQuery' => '',
   'counterQuery' => ''
  );
 );

[CakePHP]saveAll()でhasManyのモデルも同時に保存する際の配列の形式

ここに書いてあるように、

3.7.4.1 関連モデル (hasOne, hasMany, belongsTo)のデータを保存する

Model::saveAll()を利用して、hasManyの関係を持つモデルのデータも保存しよう
とする場合、「modelName.0.fieldName」という形になっていないと
だめなんだね。

最初、「modelName.fieldName」っていう風にしていたら、
外部キーに値がセットされなかった。

例えば、Theme hasMany Tagという関係であれば以下のような
配列にしなきゃいけない、ということ。
Array
(
    [Theme] => Array
        (
            [content] => test33です。
            [explanation] => test33です。
        )
    [Tag] => Array
        (
             [0] => Array 
              (
                    [content]=>test
              )
        )
)
ちなみに、上記では[0]のみだが、[1]、[2]....と入れてあげれば、
同時に複数のTagが保存可能だと思われる。(試してないけど)

ちなみに、belongsToの場合は、 「modelName.fieldName」という形式でOK。

2012年12月2日日曜日

[Blogger]blockquoteで引用をかっこよくする。

以下のページを参考にさせて頂きかっこよくできました。

blogger 内の引用をわかりやすくするとか
Google Bloggerの引用を調整する 

<blockquote></blockquote>で囲むと。。。

こんな感じになります。
かっこいいでしょ?
追加したCSSは以下になります。
.post blockquote {
margin: 0px 25px 15px 25px;
padding: 0px 25px 0px 10px;
border: 2px outset #66366a;
background-color: #ece6eb;
}
.post blockquote p {
margin: 0px 0px 0px 0px;
padding: 10px 0px 10px 0px;
}h3.post-title, .comments h4 {
font: normal normal 24px Georgia, Utopia, 'Palatino Linotype', Palatino, serif;
margin: .75em 0 0;
}

[アフィリエイト]楽天アフィリエイトが他のアフィリエイトとの併用可能になった?

※下の追記のところで色々と訂正していますので、最後まで読んで頂きたく。

2ヶ月くらい前に楽天アフィリエイトの規約を読んだ際は
他のアフィリエイトサービスとの併用はだめです、って書いてあった気がしたのだけど、
変わったのか、僕の読み間違えかわからないけど、併用していいみただね。

以下このページhttp://affiliate.rakuten.co.jp/guide/faq/から引用。

Q 他社のアフィリエイトプログラムと同時利用は可能ですか?
A 既に他社のアフィリエイトプログラムを利用されている場合でも、同時に楽天アフィリエイトをご利用になることが可能です。また、同一のページで他社のアフィリエイトプログラムでの広告と楽天アフィリエイトでの広告を掲載することも問題ありません。
ただし、他社のアフィリエイトプログラムの規約によっては、楽天アフィリエイトとの同時利用が禁止されている場合もございますのでご注意ください。

ただ、以下のページより、楽天ブログだと、楽天アフィリエイトのみしか使っちゃだめみたいですね。
http://portal.faq.rakuten.co.jp/app/answers/detail/a_id/4679

 【追記】
2ヶ月前に読んだ規約というのは楽天アフィリエイトではなく、
楽天ウェブサービスの規約だった。  http://webservice.rakuten.co.jp/guide/rule
すみません。

これによると、以下とのこと。

第10条(禁止行為)
(4)ウェブサービスの使用によって楽天アフィリエイト以外の方法で収入を得ること(当社が明示的に許可した場合を除く)
(5)楽天アフィリエイトの成果対象となる商品またはサービス(ウェブサービスによるものを含むがこれに限られない)について、楽天アフィリエイト以外のアフィリエイトプログラムを利用すること(当社が明示的に許可した場合を除く)

がっくし。これによると、やはり楽天ウェブサービスを使った場合は、
楽天以外のアフィリエイトサービス使っちゃだめ、というように理解できる。

でも、よくよく楽天のQAサイト調べてみると以下のような記述があった。
http://webservice.faq.rakuten.co.jp/app/answers/detail/a_id/14259

Q 他社のウェブサービスで取得した商品を併置させることは可能でしょうか?
A 楽天ウェブサービスで取得した商品のページに 他社のウェブサービスで取得した商品を並存させることは問題ありません。(提供元を表示頂ければ)

但し、楽天ウェブサービスを利用して取得した情報を用いて楽天のアフィリエイトリンクを作らずに、他社サービスのアフィリエイトリンクを作り収入を得ることが規約上問題になりますのでご留意お願いします。(規約第10条(5)項)

規約上問題にならない例外が、FAQ#15にありますリンクシェア(LinkShare)のアフィリエイトになります。
あれ、併置させていの?
あっ、そいういうことか。
もしかしたら、自分に都合の良い解釈かもしれないけど、
例えば、楽天APIで取得した商品情報のリンク先として、Amazonのアフィリエイトサイトの
URLを指定してはいけない、ということ。
つまり、逆に言えば、楽天APIで取得した情報には楽天のアフィリエイトURLを指定、
Amazon APIで取得した情報にはAmazonのアフィリエイトURLを指定してあげていれば
一つのサイト内に併置してもOK、ということ。
だったら、こっちにとっても都合がいい。
こういう理解であってるよね?