2012/02/29

Googleデスクトップが開発中止になっていた

いつの間に。

■Googleデスクトップが陥落
中でもインパクトがあるのは「Googleデスクトップ」の開発中止ではないでしょうか。リリース当初はデスクトップ検索に革命を起こすソフトウェアとして大きな期待がかけられ、人気があった検索ソフトです。最近はあまり更新されず徐々にフェードアウトしているような印象でしたが、まさか開発中止になるとは思いませんでした。

via:Googleデスクトップ開発中止
同エントリーをさらに続けて読んでみると、どうやら、全体的にクラウドに移行しているからという理由からなのだそうだが、ちなみに、Google Codeを見てみると、

The Google Desktop APIs have been officially deprecated as of September 14, 2011. The Google Desktop SDK is no longer available for download.

via:Google Desktop APIs
と書いてあり、なんか、5年前にGoogle Developer Dayで、このAPIをみたときに、ものすごく感動した記憶があったなー。

時代とともに、技術も変わってくるんだなーっと、しみじみ思います。

2012/02/28

[coldfusion]10のbeta release

いつの間にか、10のベータがリリースされていました。

Adobe ColdFusion 10

最初に触ったのは、確か、6だったので、あれから、4つもバージョンアップしたのかと思うと、なんか、年くったなー。

2012/02/27

[jQuery]JSONをqueryStringに変換

同じ悩みを持っている方が、stackoverflowに。

I have

{ one: 'first', two: 'second' }

and I want

?one=first&two=second

via:Serialize JSON to query string in JavaScript/jQuery
これに対する回答が、$.param()とあったので、実際に試しました。
var hoge = { one: 'first', two: 'second' };
console.log($.param(hoge))
結果、one=first&two=secondになりました。

サーバーにget送信したい場合に、ものすごく便利ですね。

2012/02/26

[jQuery][JavaScript]動的にscriptタグを生成する

だいぶ前に、動的にscriptタグを生成する方法について書きました。

最近、jQueryにはまっていることもあり、jQueryを使ってもっとかっこよく作ることはできないのかなーっと調べていました。

結論からいうと、難しいようです。

jQueryのappend,prepend,before,afterメソッドにscriptタグを含んだDOM要素なり文字列なりを渡したときは、script以外の部分はちゃんと追加されますが、scriptタグの部分は追加されずに、スクリプトがその場で実行(eval)されてしまうのだそうです。

via:headタグに要素を追加できない。
そこで、いつもどおり、native javascriptで、上のエントリーを参考に、粛々と書くことにします。
var script = document.createElement('script');
script.setAttribute("type", "text/javascript");
script.setAttribute("src", 'hoge.js');
document.getElementsByTagName("head")[0].appendChild(script);
ただし、これだと、いつロードされたのかわからない。なので、JAVASCRIPTファイルの動的ロード方法を読みながら少し、処理を追加する。
var script = document.createElement('script');
script.setAttribute("type", "text/javascript");
script.setAttribute("src", 'hoge.js');
if($.browser.msie){
  script.onreadystatechange = function(){
    if(script.readyState == 'complete'
    ||script.readyState == 'loaded'){
      loaded();
    }
  };
}else{
  script.onload = function(){
    loaded();
  };
}
document.getElementsByTagName("head")[0].appendChild(script);
function loaded(){


}
試したところ、正常終了。

ブラウザ判定の部分だけ、jQueryというちょっと複雑な気分。

もっと楽に作れないのかなー。。。

2012/02/24

[jQuery]固定ナビゲーションの実装

gmailやbloggerのようにある一定のところまでスクロールさせるとナビゲーションが固定されるUIがありますが、その実装方法が紹介されていました。

jQueryでスクロールすると上部に固定されるナビゲーション

これは、すごく便利

2012/02/23

[本]「世界征服」は可能か?

読了

はじめに なんで「世界征服」なのか
第1章 世界征服の目的
第2章 あなたはどんな支配者か?
第3章 世界征服の手順
第4章 世界征服は可能か?

via:目次
子供の頃に見ていたアニメや漫画などでよく耳にする「世界征服」についてまじめに語っている本。

実際に、どうやって、征服するのか具体的な行動指針が書かれていておもしろかった。

そればかりではなく、一歩突っ込んで、征服した後、どうするのかまで触れていて、痒いところまで行き届いているなーっという感じがした。
これは、手段が目的になってしまうのと似ているところがあるなーっと。
結局、征服したあとどうするのかを考えておかないと、征服そのものが目的になってしまうと、コストばかり嵩み、やらなかった方がいいんじゃねーという風になってしまう。

そして得られた結果というのは、当然のように意外であり、意外のように当然である。

via:書評 - 「世界征服」は可能か?
すなわち、現実のこととして考えてみると世界征服することにうまみが全然ないことに本書で気づかされるだろう。

やはり、正攻法で、人生を送るのが無難だようだ。

2012/02/22

[google]Google Weather APIって。。。

このエントリーなのですが、、、
PHPからGoogle Weather APIを使ったお天気アプリ作成チュートリアル
読んでまっさきに気になったのが、

「Google Weather API」

え、これ、どこにあるの?

Google CodeのSite Directoryを見ても、そんなものは存在しない。

ちょっとぐぐってみると、どうやら、非公式のようだ。

Google Weather APIは非公式、非商用、ガジェットのみとあったので利用される際は注意お願いします。

via:Google Weather API for Flash
なので、使う場合は、注意したほうがいいかもしれませんね。

2012/02/21

[jQuery]filterメソッド

これは、便利だ!!
ある特定の要素を抽出するのに、filterメソッドというのがあります。

jQuery日本語リファレンスのfilterメソッドの部分を読むと、引数に、どうやらslector(セレクタ)を指定することができるようだ。

ある特定の要素群から条件を満たしたdomを抜き出すのに非常に有効だね。

2012/02/20

[jquery]opacityの設定

animateメソッドでopacity(透明度)の設定を行ないたいときがあります。
で、IEは、CSS上、alphaであったり、webkit系のブラウザだと、opacityであったり、どうしていいやら。

そこで、【jQuery】透明度を変えて、モヤ~ッと切り替わるマウスオーバーエフェクトを拝見すると、opacityの設定だけでいけるようだ。

下のようにソースを組んだ結果、IEでも動作しましたー。

<script type="text/javascript">
window.onload = function(){
 $('#hoge').animate({
  'opacity':0
 },500);

};
</script>
<div id="hoge"
  style="width:100px;height:100px;background-color:red;">
</div>
CSSメソッドでは試していませんが、おそらく同じ設定でいけるんじゃーないのかなと思います。

これで、opacityも怖くないぞと。

2012/02/19

[本]日本人の誇り

読了

第1章 政治もモラルもなぜ崩壊したか
第2章 すばらしき日本文明
第3章 祖国への誇り
第4章 対中戦争の真実
第5章 「昭和史」ではわからない
第6章 日米戦争の語られざる本質
第7章 大敗北と大殊勲と
第8章 日本をとり戻すために

via:目次
帯を見ると、国家の品格から6年ぶりに著者が書いた渾身の一作と書かれているが、どうだろうか?

前著と比べると昭和史(著者に言わせると、100年戦争)だけしか解説していないような気がする。
第7章までで、どうして現在の日本のようになったのかが記載されており、唯一第8章だけ、著者が主張しているように感じた。

なので、タイトルも「日本人の誇り」ではなく「昭和史100年戦争を語る」でいいと思うんだよね。
小中の歴史で習う内容とは全く異なる側面が書かれているので、歴史書物としてはおkだが、それ以上ではない。

なので、品格の延長線上の内容と考えて購入すると、きっと読んでいるときに疑問を抱くと思う。

2012/02/18

[jQuery]z-indexの指定

cssメソッドで、z-indexの指定はどうやったらいいのだろうか?
IE7におけるz-indexのバグ回避(jQuery使用)を読んだ結果、下のように実装すればいいことがわかりました。

<script>
jQuery(function(){
$('#hoge').css({
zIndex:300
});
});
</script>
<div id="hoge"></div>

2012/02/17

[jQuery]相対的数値でCSSを変更する

たまーに、オープンソースにあるjqueryのソースコードを読んでいるとでCSSメソッドで、

CSS({
'margin-top': '+=10px'
});
なるものをみつけるときがあります。

これって何かなーっと思っていたら、なんともすぐれている機能(正確には、機能ではないのですが。。。)ということが判明しました。

現在の場所からプラス30pxの位置まで動かしたいといった場合や、マイナス20pxの位置まで動かしたいといった場合に便利な記述方法があります。

via:[jQuery]cssメソッドやanimateメソッドで相対的なピクセル値を指定する簡単な方法
相対的な基準において、数字を変更したい場合に、この方法は、超便利かなと。

2012/02/16

[jQuery]animateの第一引数について

jQueryのanimateメソッドで、第一引数にCSSを設定するのですが、その際に、backgroundColorを指定したら、エラーになってしまった。

なぜだろう?と調べていたら、もともと、指定することができないそうだ。

そもそも数値型の値をとらない属性(backgroundColorなど)には、animate関数は対応していません。

via:animate(params, [duration], [easing], [callback])
最初から、ここで、確認しとけばよかったなー。

2012/02/15

[JavaScript]swfobjectのコールバック関数

前回、googleのCDNでswfobjectをローディングする方法を書きました。

で、実際に、swfをロードすることができるのですが、ここでの問題点として、読み込みが完了したかどうか通知してほしいなと。

調べたところ、swfobject.embedSWF()メソッドの最後の引数にコールバック関数を仕込めば読み込み完了を通知してくれます。

var flashvars = {};
flashvars.arg1 = "引数";

var params = {
wmode :"transparent",
allowScriptAccess: 'always'
};
var attributes = { id : 'swfID', name : 'swfID' };
swfobject.embedSWF("test.swf", "flashcontent", "500", "300",
"9.0.0", "expressInstall.swf",
flashvars, params, attributes, callbackSwf);

var swfObj = null;
// ********************************************************
// swfobjectのロード終了時のコールバックでFlashのオブジェクトを得る
// ********************************************************
function callbackSwf(obj){
swfObj = obj.ref;
}

// ********************************************************
// JavaScript → Flash
// ********************************************************
function testFunc(url){
if (swfObj == null){
alert("少ししてから試してください。");
} else {
swfObj.testFromJS('hello');
}
}

via:JavaScriptとFlashの連携
これ、グローバル関数が、使われていますが、こちらでも、おkのようです。

swfobject.embedSWF("test.swf", "flashcontent", "500", "300",
"9.0.0", "expressInstall.swf",
flashvars, params, attributes, funciton(){

});
グローバル関数を一つ作らずにすむので、こっちの方がいいのかなと思いました。

2012/02/14

[GoogleAppEngine]forループでkeyとvaluseにアクセス

前回、POSTで受け取った変数を全部取得する方法について書きました。

で、今回は、それをdjangoを使ってHTMLに出力する方法について。

サーバー側のプログラムは下のようになります。

import os
from google.appengine.ext import webapp
from google.appengine.api import urlfetch
from google.appengine.ext.webapp import util

#django
from google.appengine.dist import use_library
use_library('django', '1.0')
#from django.utils import simplejson
from google.appengine.ext.webapp import template

class MainHandler(webapp.RequestHandler):

 def post(self):
  argsNames = self.request.arguments()
  template_values = {'arg':''}
  arg = {}

  for i in argsNames:
   arg[i] = self.request.get(i)

  template_values['arg'] = arg
  path = os.path.join(os.path.dirname(__file__), 'index.html')
  self.response.out.write(template.render(path, template_values))


def main():
 application = webapp.WSGIApplication(
  [('/test/', MainHandler)],
  debug=True
 )
 util.run_wsgi_app(application)

if __name__ == '__main__':
 main()
どうやら、djangoのバージョンが1.0ではないと、使いたいforループが使えないようだ。

で、クライアント側はこのようになる。
{% for key, value in arg.items %}
key = {{ key }},value = {{ value }}
{% endfor %}
実行した結果、正常終了しました。

ポイントは、「items」というプロパティーで一回アクセスするところ。
これは、how to access dictionary element in django template?
でわかりました!!

ajaxでパラメータ確認するときに便利かも。

2012/02/13

それって、Google Cloud Storageじゃないの?

そのサービスは、もうあるんじゃーないの?

関係者の話として伝えたところによると、Googleが準備をしているクラウドストレージサービスの名称は「Drive」で、パソコンを始めスマートフォン、タブレット端末などあらゆるデバイスからデータファイルにアクセスできるようにするという。サービスインは1,2週間から1,2ヶ月以内とみられている。

via:GoogleがDropBox対抗のクラウドストレージサービスを準備中?WSJ紙【湯川】
これって、Google Cloud Storageとどう違うの?


クライアントアプリもGoogle Cloud Storage Managerがあるし、記憶が定かじゃーないけど、確かある程度まで無料で使えたような。

別サービスとして立ち上げる必要とメリットって??

今後の動きを見ていくしかなさそうですねー。

2012/02/12

[iOS]Automatic Reference Countingを使わない方法

今、iOS経由でfacebookにログインする方法を、iOS Tutorialを見ながら勉強しているのですが、gitに公開されているソースコードをダウンロードして、ビルドしても、エラーが発生してしまう。

エラーの内容を見ていると、なにやら、Automatic Reference Counting関連のバグのようなのだが、久しぶりのXcodeの開発でしかも、バージョンが4になり、ものすごくUIが変わってしまったため、全然、解決の方法がわからない。。。どうしよう。。。

で、結局、「Automatic Reference Counting」を使わないようにすればいいところまで、わかり、次に、それをどうやって設定すればいいのだろうか?

How to enable/ disable “Automatic Reference Counting”?を読むと、こう書かれていました。

Go to "Build Settings", look for "Apple LLVM compiler 3.0 - Language". Set the field "Objective-C Automatic Reference Counting" to "No".

via:How to enable/ disable Automatic Reference Counting?
確かに、この通りにやってみた結果、エラーが取れました。

よかった。よかった!!

2012/02/11

[本]女性の品格

今さら感たっぷりだけど、こちらを読了

第1章 マナーと品格
第2章 品格のある言葉と話し方
第3章 品格ある装い
第4章 品格のある暮らし
第5章 品格ある人間関係
第6章 品格のある行動
第7章 品格のある生き方

via:目次
ビール3缶、焼酎1缶、ワインボトル半分飲んだ後に、読んだので、あまり内容を覚えていないのだが、全体を通して、なぜ、このタイトルのしたのだろうか?と疑問に思ってしまった。

女性ばかりではなく、男性にも通じる内容だと思うのだが、なんだか、新人研修のマニュアルをひたすら読まされたような気分になってしまった。

ものすごく売れた本のようだが、そこまでよかっただろうか?疑問を感じてしまう。

国家の品格が売れたから便乗しようとしただけではないのだろうか?

2012/02/09

[google app engine]送信データをすべて確認する方法

Google App Engineで、クライアントからform の値を受け取る時に、

self.request.get('hoge')
みたいな書き方をしますが、毎回、毎回、これを書くのはしんどい。

特に、デバッグ で、変数がたくさんある場合。

一括して受け取る方法はないのだろうか?と探した結果、ありました。

Requestクラスのarguments()を使えばPOST、GETともに受け取ることができそうです。

リファレンスを読むと、リスト形式で返却することから、下のように組めばいいではないのかと。
for i in self.request.arguments():
  print i, self.request.get(i)
実際に実行したところ、正常に取得できました。

以後は、これでajaxなどの時には、もっと効率よくデバッグできそうです。

2012/02/08

[jQuery mobile]ヘッダーを表示

これもiOSにはデフォルトである機能なのですが、ヘッダーを表示する方法について

Header structureを読みながら実装した結果、下記のようになりました。


<!DOCTYPE html>
<html>
<head>
<title>My Page</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no,minimum-scale=1,maximum-scale=1">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.css" />
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script src="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script>
<script>
jQuery(function(){
var ul = $('ul');
var li = $('li',ul);
var liLen = li.length;
for(var i=0;i<liLen;i++){
$('a',$(li[i])).click(function(){
//$.mobile.showPageLoadingMsg();
$.mobile.changePage('./test02.html');
});
}
});
</script>
</head>
<body>
<div data-role="page">
<div data-role="header" data-position="inline" class="ui-header ui-bar-a" role="banner">
<h1 class="ui-title" tabindex="0" role="heading" aria-level="1">Page title</h1>
</div>
<div data-role="content">
<ul data-role="listview" data-inset="true" data-filter="true">
<li><a href="#">Acura</a></li>
<li><a href="#">Audi</a></li>
<li><a href="#">BMW</a></li>
<li><a href="#">Cadillac</a></li>
<li><a href="#">Ferrari</a></li>
</ul>
</div>
</div>
</body>
</html>
ポイントは、
<div data-role="header" data-position="inline" class="ui-header ui-bar-a" role="banner">
<h1 class="ui-title" tabindex="0" role="heading" aria-level="1">Page title</h1>
</div>
動作した結果、無事に表示されました。
Uploaded from the Photobucket iPhone App

2012/02/07

[jQuery mobile]ページ遷移

iPhoneのUITableViewControllerの動きをどのようにすれば実装できるのか調査しました。

Methodsのセクションを読みながら実装した結果はこちら

<!DOCTYPE html>
<html>
<head>
<title>My Page</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no,minimum-scale=1,maximum-scale=1">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.css" />
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script src="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script>
<script>
jQuery(function(){
var ul = $('ul');
var li = $('li',ul);
var liLen = li.length;
for(var i=0;i<liLen;i++){
$('a',$(li[i])).click(function(){
$.mobile.changePage('./test02.html');
});
}
});
</script>
</head>
<body>
<div data-role="page">
<div data-role="content">
<ul data-role="listview" data-inset="true" data-filter="true">
<li><a href="#">Acura</a></li>
<li><a href="#">Audi</a></li>
<li><a href="#">BMW</a></li>
<li><a href="#">Cadillac</a></li>
<li><a href="#">Ferrari</a></li>
</ul>
</div>
</div>
</body>
</html>
上記の実行結果は、↓

で、各セルをクリックすると、/test02.htmlに遷移します。

遷移後は下のようになります。
Uploaded from the Photobucket iPhone App

2012/02/06

[twitter]intent機能

webサイトからtwitter anywhereを使えばtweetをすることは可能なのですが、その際に、めんどいのは、一回、承認をえなくちゃーいけないこと。

それを省く手段として、twitterから、Web Intentsという機能がリリースされました。

で、実装方法ですが、ツイートの場合、
https://twitter.com/intent/tweet
にquery string(or URL変数)に、パラメータを付与すればおkです。

他にも、Retweetや、favorite機能なども実装することができるので、便利ですね。

2012/02/05

[jQuery mobile]buttonの作成

今度は、buttonを作りたいと思います。
Button basicsを読んだ結果、下記のようなコードに落ち着きました。

<!DOCTYPE html>
<html>
<head>
<title>My Page</title>
<meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no,minimum-scale=1,maximum-scale=1">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.css" />
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script src="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script>
</head>
<body>
<div data-role="page">
<div data-role="content">
<input type="button" value="tweet by clicking" id="tweet" />
</div>
</div>
</body>
</html>
実行結果は、下のようになりました。
Uploaded from the Photobucket iPhone App