2012年4月1日日曜日

"Webエンジニアのためのデータベース技術[実践]入門"を読みました。

Webエンジニアのためのデータベース技術[実践]入門 読みました。
インデックスのような基礎的なところから、
NoSQLのような新しい技術の解説や、
MySQLのソースコードの読み方といった深い解説もあり、
データベースに関しての基礎は一通り学べる本であると思います。

SQLの構文の解説のような超初心者向けの解説はありませんでしたが、
データベースに苦手意識があった自分としてはとても勉強になりました。
データベースの基礎を身につけるにはこの1冊で十分なのではないかと思いました。

C言語で二分探索木を書いてみた。

C言語で二分探索木を書いてみた。 所要時間1時間。 あってる?

2012年3月25日日曜日

あなたがSonyTabletを買うべき5つの理由

みんな「新しいiPad」に夢中のようですが、
日本人としては Sony Tabletは無視できない存在です。
ということで、今更ですがiPadブームに便乗してSony Tabletを買いました。
使ってみて、ボクなりにSony Tabletの良いところを考えてみました。

  1. すぐ買える

  2. 今、新しいiPadを買おうとしても、どこも売り切れ状態で、予約しないとけません。
    すぐにタブレット端末を使いたいと思って、思っても手に入りません。
    そこで、Sony Tabletです。
    すぐにSony Tabletコーナーに行きましょう。在庫がかならずあります。
    店員さんもiPadの方に夢中で、Sony Tabletはあんまり売る気が無いので声もかけてくれません。
    お店で端末をいくらでもいじり倒せます。

  3. Androidであること

  4. これは重要です。
    Androidはオープンなので、今後たくさんのものに搭載されていきます。
    AndroidのUIがいろんなデバイスの標準になるのです。
    iOSなんて、たかだかiPod/iPhone/IPadぐらいでしょうが、
    Androidはスマフォ・タブレット以外にもTVや、カーナビ、ゴーグルや自転車、ロボットまでにも搭載されるのです。

  5. ソニーのサービスが使える

  6. Sonyの「Video Unlimited」が使えるので、
    Sony Tabletで映画もその場で観れます。
    購入とレンタルがあるようです。(個人的にあんまり観たい映画はありませんでしたが)
    「PlayStation Store」も入っているので、PSのゲームも買ってSony Tabletでプレイすることができます。
    両方ともSony Entertainment Networkのアカウントを使えます。
    あとは、「Reader」で電子書籍も楽しむことができます。
    ちなみに、「Reader」はMy Sony IDのアカウントが必要です。

  7. 「さばドル」のまゆゆの限定写真が見える

  8. これはすごいです。
    渡辺麻友主演のドラマ「さばドル」の限定写真が見れるのです!
    ちなみに、見るためには「ネットフレーム by Life-X」というアプリを
    なぜか、Androidマーケットからダウンロードする必要があります。
    ちなみに、Life-Xには、My Sony IDのアカウントが必要です。

  9. スリルが味わえる

  10. ソニー製品です。
    いわゆる「ソニータイマー」の存在が噂されるほどの品質ですw
    いつ壊れるか、はらはらドキドキのスリルが味わえます。
    (ちなみに、ボクのPSPは1年ぐらいで○ボタンが効かなくなってしまいました。。。)
    また、ソニーのサービスに個人情報をさらにまたスリル満点です。
    一度PSNのIDを流出させましたからね。
    ドキドキですよね。

本当は、赤外線でリモコンの役割を果たすとか、
DLNA対応で、Playerとして利用できるとかいろいろあるのですが、
家にテレビとか情報家電系のものがないので試すことができないので、
試した方は使い勝手を教えてください。

2011年11月13日日曜日

CoffeeScriptを学ぶ(2)

JavaScriptはプロトタイプベースのオブジェクト指向だったので、
クラスという概念はなかったのですが、
CoffeeScriptには、クラスという概念があります。
class Hello
  method:  ->
    alert "hello"
"class クラス名"でクラスを宣言できます。
メソッドは、クラスのブロックで
メソッド名: (引数) ->
  メソッド本体
と書きます。

これをJavaScriptに変換すると、下記のようになります。
var Hello;

Hello = (function() {
  function Hello() {}
  Hello.prototype.method = function() {
    return alert("hello");
  };
  return Hello;
})();

CoffeeScriptのページのサンプルの例を持ってくると
class Animal
  constructor: (@name) ->

  move: (meters) ->
    alert @name + " moved #{meters}m."
Animalとうクラスです。
コンストラクタは "constructor:"で定義できます。
@xxxはインスタンス変数ですね。
ちなみに#{}を使えば、文字列のなかで変数を評価して値を使用できます。(Rubyと同じ構文ですね。)
class Snake extends Animal
  move: ->
    alert "Slithering..."
    super 5

class Horse extends Animal
  move: ->
    alert "Galloping..."
    super 45
継承はextendsを使います。
superでスーパークラスのメソッドを呼び出すことができます。

やっぱりクラスを使うと、比較的大きなコードを書くときは、考えやすくて便利ですよね。

CoffeeScriptを学ぶ

CoffeeScriptはJvaScriptに変換するための言語で、
Pythonのような文法を持っているのが特徴のようです。

このCoffeeScriptを学ぼうと思い、いくつかのサンプルを書いてみました。
まず基本、FizzBuzzです。
(下記はalertで書いたので実行すると大変なことになるから気をつけてね)
for a in [1..100]
  if a%15 == 0
    alert "FizzBuzz"
  else if a%3 == 0
    alert "Fizz"
  else if a%5 == 0
    alert "Buzz"
  else
    alert a
特徴としては、Pythonのようにインデントがブロックを表しています。
インデントでブロックにすると、やっぱり見やすいですよね。
また、メソッドも()がつかないです。

これをJavaScriptに変換すると、以下のようになります。
var a;

for (a = 1; a <= 100; a++) {
  if (a % 15 === 0) {
    alert("fizzbuzz");
  } else if (a % 3 === 0) {
    alert("fizz");
  } else if (a % 5 === 0) {
    alert("buzz");
  } else {
    alert(a);
  }
}
今度はクイックソートを実装してみます。 関数は
関数名 -> (引数)
   (関数本体)
のです。 CoffeeScriptはwhile文が使えます  
sort = (array, l, r) ->
  mid = ~~(l+r/2)
  return if l >= r
  i = l
  j = r
  pivot = array[mid]
  while true
    while array[i] < pivot
      i++
    while array[j] > pivot
      j--
    break if i >= j
    t = array[i]
    array[i] = array[j]
    array[j] = t
  sort array, l, i-1 if l < i-1
  sort array, j+1, r if j+1 < r

a = [1, 4, 3, 7, 6, 5, 2, 8]
sort a, 0, 7
alert a
下記はJavaScriptに変換したときのコードです。
var a, sort;

sort = function(array, l, r) {
  var i, j, mid, pivot, t;
  mid = ~~(l + r / 2);
  if (l >= r) return;
  i = l;
  j = r;
  pivot = array[mid];
  while (true) {
    while (array[i] < pivot) {
      i++;
    }
    while (array[j] > pivot) {
      j--;
    }
    if (i >= j) break;
    t = array[i];
    array[i] = array[j];
    array[j] = t;
  }
  if (l < i - 1) sort(array, l, i - 1);
  if (j + 1 < r) return sort(array, j + 1, r);
};

a = [1, 4, 3, 7, 6, 5, 2, 8];
sort(a, 0, 7);
alert(a);

2011年11月1日火曜日

第22回HTML5とか勉強会で発表してきました

第22回HTML5とか勉強会で発表してきました。

今回は初心者向けということで、
SVGってどんなことができるの?っていることを理解してもらおうと思い、
とにかく仕様の紹介をしようと思いました。
ちょっと、意図が伝えられなくて、一部の方からは難しかったというご意見をいただきました。
次回同じような機会があれば、その反省をふまえてもっとよい発表を行えればと思っています。

以下が発表に使用したスライドです。


動画も公開されているみたいです。



このような機会を与えていただいた白石さんをはじめHTML5とか勉強会のスタッフの皆様には
本当に感謝をしています。
ありがとうございました!

2011年8月15日月曜日

OAuthの仕組みについてのメモ

ちょっと前に
twitterのOAuth認証についてのエントリを書きましたが、
ちょっとOAuthについて自分の頭の中が整理できていなかったので、
ちょっと整理します。

OAuthってそのそも、

  • アプリケーションがとあるサービスのAPIを使うための、ユーザに認証してもらうための仕組み

  • アプリケーションはとあるサービスのユーザ名やパスワードをユーザから教えてもらう必要がない


  • です。

    で、
    API提供しているとあるサービスとあるサービス => Service Provider
    アプリケーション => Consumer
    
    とそれぞれ呼びます。

    Consumer(アプリケーション)はService Provider(API提供しているとあるサービス)にConsumerの登録を行います。
    登録すると、Consumer KeyとConsumer Secretが発行されます。Consumer Key/Secretはそのアプリケーションを示すトークンです。このConsumer(アプリケーション)はConsumer Key/Secretを使って、Service Providerにリクエストトークンを発行してもらいます。

    リクエストトークンを発行してもらったら、ConsumerはそのリクエストトークンをパラメータとしたURLを使って、Service Provicerのサイトにリダイレクトを行います。

    ユーザーはリダイレクトされたサイト上にて、ConsumerがService ProviderのAPIを使って情報を取得するのを許可します。

    許可したら、Service Providerはあらかじめ登録されたURLへリダイレクトするので、
    Consumerはそこから、アクセストークンをService Providerに要求し、Service ProviderはアクセストークンをConsumerに送信します。

    このアクセストークンがあれば、ConsumerがService ProviderのAPIを使うことができるようになります。

    ざっと書くとこんな感じでしょうか?