Node × Express vol.2

ExpressのライブラリTemplateを使って
Twitterの情報をHTMLに書き込む

callbackでJSON使ってbodyをパースして、
renderを呼ぶ
第1引数:templateファイル
第2引数:オブジェクト

//app.js
app.get('/tweets/:username', function(req, response){
   …
   request(url, function(err, res, body){
   var tweets = JSON.parse(body);
   response.render('tweets.ejs', {tweets: tweets, name: username});
   });
});
<-- tweets.ejs -->
<h1>Tweets for @<%= name %></h1>
<ul>
     <% tweets.forEach(function(tweet){ %>
           <li><%= tweet.text %></li>
     <% }); %>
</ul>

<--  layout.ejs -->
<!DOCTYPE html>
<html>
   <head>
         <title>Tweets</title>
         <body>
                <%- body %>
         </body>
   </head>
</html>

Node × Express

Expressで、Twitter search APIを使って"sakochan"でヒットする
最新結果10件を取得し、結果をリスポンスに返す方法を勉強した★

var url = require('url');
var request = require('request');
//Expressの読み込み
var express = require('express');
options = {
  protocol: "http:",
  host: "search.twitter.com",
  pathname: '/search.json',
  query: { q: "sakochan"}
};
var searchURL = url.format(options);
//serverオブジェクトの作成
var app = express.createServer();
//getリクエストの処理
app.get('/', function(req, response) {
  request(searchURL).pipe(response);
});
app.listen(8080);


ターミナルからexpressインストールするとき、よくわからないエラーが出た

sakochan-no-MacBook:node sakochan$ npm install -g express
npm http GET https://registry.npmjs.org/express
npm http 200 https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/express/-/express-2.5.9.tgz
npm http 200 https://registry.npmjs.org/express/-/express-2.5.9.tgz


npm ERR! Error: EACCES, mkdir '/usr/local/lib/node_modules/express'
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.
npm ERR! 
npm ERR! System Darwin 11.4.0
npm ERR! command "node" "/usr/local/bin/npm" "install" "-g" "express"
npm ERR! cwd /Users/sakochan/node
npm ERR! node -v v0.6.18
npm ERR! npm -v 1.1.21
npm ERR! path /usr/local/lib/node_modules/express
npm ERR! fstream_path /usr/local/lib/node_modules/express
npm ERR! fstream_type Directory
npm ERR! fstream_class DirWriter
npm ERR! code EACCES
npm ERR! message EACCES, mkdir '/usr/local/lib/node_modules/express'
npm ERR! errno {}
npm ERR! fstream_stack /usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23
npm ERR! fstream_stack Object.oncomplete (/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:42:17)
npm ERR! 

それで今度はpkgでインストールしなおしたらいけた

なんでかわからなかった

MacBook

MacBookの裏蓋が届いたタイミングで

MacBookをHDDからSSDに変えて、メモリも2GBから8GBにした

SSDIntelの330SERIES 120GB 13000円

MemoryはCFDのDDR3 8GB 4000円

ちょっと不安だったけど、

Trim EnablerでActiveを確認して一安心。

SSDにするにはパーティションを少なくしたり、コピーしたり

めんどかったけど、勉強になった!


しばらくはこれで楽になりそう♬

GWT

Slim3Googleチュートリアルで、GWTを動かしてみた


GWTJavaScriptもHTMLも書かなくて良くて、

簡単だった!

ほんとは、JavaScriptの勉強するのが目的だったけど…

次は、GWTRPCのお勉強したいな!

Google IO の動画を見た

2009年(古い)のGoogle IO / Guice, GWT × Spring and Hibernate の動画を見た



GuiceGWTも使ったことないから、

よく分かんなかったけど

GWTはちょっとやってみたくなった



Slim3チュートリアルGWTがあったから来週やってみよう

prototype.js × Ajax

jQueryAjaxを一通り学習したところで、

次はprototype.jsでのAjaxのお勉強。


Ajax.Requestでxmlを指定して取ってきた
第一引数:リクエストするURL
第二引数:各種オプション(コールバックとか)

<div id="result"></div>

<script type="text/javascript">
  // Ajax.Requestオブジェクトを生成
  new Ajax.Request('sakos.xml', {
    method: 'get',
    onSuccess: showSako
  });

  // Ajax.Requestの結果を受け取る関数
  function showSako(response){
    var sakos = response.responseXML.getElementsByTagName('sako');
    for(var i=0;i<sakos.length;i++){
      $('result').innerHTML +=
        '<li>' + sakos[i].getAttribute('name').escapeHTML() + '</li>';
    }
  }
</script>


<?xml version="1.0" encoding="UTF-8"?>
<sakos>
  <sako name="さこちゃん"/>
  <sako name="http://www.sakochan.net"/>
  <sako name="http://d.hatena.ne.jp/osk__12/"/>
</sakos>


他にも、Ajax.Updaterでhtmlを取ってくるのも試してみた
第一引数:取得したHTMLを流し込む要素のid属性
第二引数:リクエストするURL

<div id="result"></div>

<script type="text/javascript">
  new Ajax.Updater('result', 'sako.html', {
    method: 'get'
  });
</script>
</script>

Ajax.RequestとAjax.Updaterの違いは、
Ajax.RequestはXMLHttpRequestを簡単に扱うための汎用的なオブジェクトで、
Ajax.UpdaterはサーバがHTMLを返す場合に、特定要素をサーバが返却するHTMLで置き換えたいというケースで使用するオブジェクト
らしい。うーむ、むずかしい