2011年8月6日土曜日

ブログ

z The Startup http://thestartup.jp/ (梅木さん、26歳。2009年卒)
z 世界を変えるスタートアップ http://gendai.ismedia.jp/category/startup(鈴木仁士さん、22歳)
z TechCrunch Japan http://jp.techcrunch.com/ (言うまでもなく)
z TechCrunch http://techcrunch.com/ (日本語に訳されていない記事多数)
z VentureBeat http://venturebeat.com/
z TechWave http://techwave.jp/
z Techdoll.jp http://www.techdoll.jp/
z Mashable http://mashable.com/ (この分野では必読。ただし、以下に日本語での紹介もあり)
z ネクスパスブログ http://blog.nexpas.co.jp/ (町田龍馬さん、ニュージーランド、シンガポール留学、24歳)
z Don’t be Lame http://kenichinishimura.blogspot.com/ (西村顕一さん、シンガポール留学後2011年卒)
z NPOにマーケティングの力を http://www.ikedahayato.com/ (イケダハヤトさん、2009年卒)
z クローズドとソーシャルの交差点 http://ststgc.posterous.com/ (瀬戸口翔太さん、大学4年)
z Little_shotaro’s blog http://www.littleshotaro.com/ (植原正太郎さん、23歳、大学4年)
z The Public Returns – 続・広報の視点
http://goo.gl/u9XOT http://goo.gl/W8qbQ http://goo.gl/saf6z
z Social Media 360.jp http://socialmedia360.jp/
z Gamification.jp http://gamification.jp/
z Inside Facebook http://www.insidefacebook.com/
z All Facebook http://www.allfacebook.com/
z ReadWriteWeb http://www.readwriteweb.com/
z Social Commerce Today http://socialcommercetoday.com/
z Social Times http://socialtimes.com/

2011年7月27日水曜日

2011年7月4日月曜日

モジュール化と隠蔽

素人なりに基本を整理。


プログラミングにはいくつか原則がある。

1つは『コード間の依存関係を荒くすること』。


例えば、同じ変数をいろんなとこに書いてしまうと、コードが長くなるにつれて困難極まってくる。


変数xが2つの関数A,Bで使われているとする。

Aの動作を変更するためにxをいじる。

すると気づかぬうちにBの動作も変更されてしまった、というのが悲劇の始まり。(副作用と呼ぶ)

関数2つならまだいい。

A,B,C,D...と増えるにつれ、副作用を避けつつAの動作だけを変更するのが難しくなっていく。


さらに恐ろしいことに、Bで発生した副作用を直そうとして変数yをいじると、yをいじったことによる新しい副作用が発生するという無限地獄に突入する。

これがコードのスパゲッティ化という現象である。



どうすれば、スパゲッティ化を防げるのか?

それが、『コード間の依存関係を荒くすること』である。


具体的にはまず、コードを役割に応じて小さくグループ化する(モジュール化)。

そして、外部からモジュール内部への自由なアクセスを禁じて、定義したインターフェイスを用いたアクセスのみを許可する。


この外部から内部変数への自由なアクセスを禁じることを、「隠蔽」という。

関数の中身、クラスであれば「内部変数・関数」は、原則的に外部から直接変更できない。


これによって異なるモジュール同士の変数が、密に依存しあうことを避けているのである。



言語によって、「モジュール化と隠蔽」を実現する手段は微妙に異なる。

例えば、プロトタイプベースであるJavaScriptのオブジェクトでは、

関数とクロージャを使ってモジュール化と隠蔽を図る、など。


プログラミングをするときは、言語に応じた「モジュール化と隠蔽」を常に意識して書くように心がけたい。

2011年6月15日水曜日

[JavaScript]クロージャを使った、プライベート変数・関数の共有

C言語のようなクラスベースのオブジェクト指向言語では、staticを用いてプライベート変数・関数の共有をする。

では、JavaScriptのようなプロトタイプペースではどうするかという話。

呼び出すたびにカウントが1づつ増加していくcounter()という関数の例で考える。

何も考えずに作ると次のようになる。

var i = 0;
function counter(){
  i+=1;
}

counter(); //1
counter(); //2


問題は、変数iが関数の外に出ているがために、外部から簡単にアクセスできてしまうということ。
(グローバル変数は極力使いたくない)

オブジェクト指向でいうところの、変数の隠蔽をしつつ、この関数内だけで変数iを共有するためにはどうすればよいか?

ここでクロージャの出番となる。

var counter = (function(){
  var i=0;
  return function(){
    i+=1;
  };
})();

counter(); //1
counter(); //2


(function(){})()の部分で、無名関数を即実行する。

その結果counterに代入されるのは、return 以降に書かれている関数、
function(){i+=1};

である。では、このreturn文の前に書かれている var i=0;はどうなるか。

このiは最初に実行された後、消えず、全てのcounter()に共有され、参照されるようになる。

よって、counter()が呼ばれるたびにiは0に初期化されず、変更が反映される。


クロージャを使ってプライベート変数を共有する方法は、オブジェクトを作るときにも利用でき、

var counter = (function(){
  var i=0;
  reuturn {
    inc : function(){
      i += 1;
    },
    dec : function(){
      i -= 1;
    }
  };
})();


オブジェクト間で、共有する場合は基本的にこのパターン。

2011年5月9日月曜日

[GoogleMap]複数マップのそれぞれにマーカーを追加



それぞれに一個ずつ置きたいのに・・・。

こんなときは、map変数が二つのマップで共有されていないかチェック。

自分の場合はmapがグローバル変数になっていたので、これをローカル変数に変更したら、
下図のようにうまくいきました。


2011年4月29日金曜日

[Python]break文

break文1つで、抜けるループは1つだけ。

つまり、nested roop内でbreak文を使った場合も、抜け出すのは1つのループのみ。

list = [[0,1,2],[3,4,5],[6,7,8]]
for x in range(3):
for y in range(3):
if list[x][y]>3:
list[x][y] = 10
break
print list

>>
[[0, 1, 2], [3, 10, 5], [10, 7, 8]]

この例でいうと、yのループは抜けてもxのループは続いているということ。

2011年4月25日月曜日

GoogleMapをdisplay:noneで初期化するとバグる件

ボタンを押したらGoogleMapが表示されるというコードを書いたのだが、なんどやっても表示がバグる。

ググり続けること30分、visibilityを使え的なコメントがあったので、試すと成功。

てことで、グーグルマップを隠しておくときは、

display: none;

ではなく、

visibility: hidden;

にしておいて、jQueryでは、

$("#map-canvas").css("visibility","visible");

のように書けばよし。