kindle voyage 速攻レビュー

kindle voyage が届いたのでレビュー。

f:id:toytools:20141117162121j:plain

ちなみに、元々電子書籍リーダーを使っていたわけではなく今回が電子書籍リーダーデビューなので他機種との比較はありません。

裏面がカッコいい

電子書籍リーダーって見た目がチープなイメージがあったんですが、裏面がかっこいいです

ページ送りボタンがよさげ

画面左右にページ送りボタンが付いているのでわざわざスワイプする必要がありません。

下部(縦に線が入ってる部分)が進む、中央(丸い点の部分)が戻るという動作が左右両方に同じようにわりあててられています。

左右で機能をわけなかったのは、 「左が進む、右が戻る」だと右手で使った時に不便なので、 左右どちらの手で使っても進む動作をやりやすいようにという配慮でしょう。

軽い

180gなのでとても軽いです。 感覚としては文庫本の重さ位のイメージです。

単行本は片手で読むには大きいし、そもそも重くて大変だったのですが、これなら気にする必要ありません。

そもそも、僕が読みたい本は殆ど単行本なので重量的に持ち上げて読むのが厳しいです。

ソファー等で机が無いときにはひざに置いて読んでいました。

そうすると、どうしても視線が下がるので肩こりが酷くなってきます。

読みかけの紙の本がいくつかあるので、まだ、あまり使ってませんが肩こりは軽減できる気がします。

片手持ちが余裕の軽さなので電車のなかでも軽々読めそうです。

視認性

視認性は概ね紙と変わらないレベルです。

描画の細かい漫画などだと差があるのかもしれませんが、漫画はまだ試してないのでわかりません。

kindle storeの品揃え

読みたい本の1/3くらいがkindle版が出ているイメージです。

なのですぐに全て電子書籍にとはいかなそうです。

amazonがんばって!

その他

風呂で本を読むので、手頃な値段の防水加工サービスできないかなぁー

chromeのtextareaでタブ入力する

テキストエリアってタブ入力ができなくて不便なので

Chrome Web Store - Tab Means Tab

これいれて解決した。 このプラグインは若干不便なので、より好みにあった別のプラグインに変えました。 追記を確認して下さい。

ついでに

Chrome Web Store - Stylish

を入れて、

textarea {
    font-family: "IPAGothic";
    tab-size:4;
}

ってやって、テキストエリアを等幅フォントにしてみた。

快適!

[追記] tab means tabは、textfieldでもタブ入力が聞いてしまい、フォーム要素の移動が面倒なので

Chrome ウェブストア - Tab Grabber

こちらにしました。 こちらはtextareaのみで有効で、さらにテキストエリアが空の場合にはタブ移動が有効になります。

POSTとかGETのリクエストを簡単にやるモジュール作ったよ

node.jsでPOSTとかやるとちょっと面倒なんですよね。
ってことでモジュール化してみたよ。

使い方

GET
var request = require('./request.js');
request.get(
	//request url
	'http://localhost/test?test=THIS_IS_TEST',
	//success handler
	function(res){
		console.log(res);
	}
).on('error',function(e){
	//error handler
	console.log(e);
});
POST
var request = require('./request.js');
request.post(
	//request url
	'http://localhost/test',
	//post params
	{
		"param1":'this is test',
		"param2":'this is test2'
	},
	//success handler
	function(res){
		console.log(res);
	}
).on('error',function(e){
	//error handler
	console.log(e);
});

ソース(request.js)

var url = require("url");
var http = require("http");
var events = require("events");
var querystring = require('querystring');

exports.post = function( request_url , parameters , handler , headerOptions ){
	return request( 'POST' , request_url , parameters , handler , headerOptions );
}
exports.get = function( request_url , handler , headerOptions ){
	return request( 'GET' , request_url , {} , handler , headerOptions );
}


var request = function( method , request_url , parameters , handler , headerOptions ){
	var parsedURL = url.parse( request_url,false );
	if( !parameters ){
		parameters = {};
	}
	var postData = querystring.stringify(parameters);
	var reqOptions = {
      "host": parsedURL['host'],
      "port": parsedURL['port']?parsedURL['port']:'80',
      "path": parsedURL['path'],
      "method": method,
      "headers": {
          'Content-Type': 'application/x-www-form-urlencoded',
          'Content-Length': postData.length
      }
	};
	if( typeof headerOptions == 'object' ){
		for( var i in headerOptions ){
			reqOptions[i] = headerOptions[i];
		}
	}
	var req = http.request(reqOptions, function(res){
		res.setEncoding('utf-8');
		res.on('data', function (data) {
			handler(data);
		});
	});
	req.write(postData);
	req.end();
	return req;
};

node.js+socket.ioサンプル

node.js+socket.ioの最もシンプルなサンプルです。
サーバーで受けたデータを接続しているクライアント全員に配信する、簡易チャットになってます。

server.js

//http server
var http = require('http'),
	io = require('socket.io'),
	fs = require('fs'),
	server = http.createServer(function(req, res){
		 res.writeHead(200, {'Content-Type': 'text/html'});
		 var output = fs.readFileSync('./index.html', 'utf8');
		 res.end(output);
	});

//socket server
var io = io.listen(server);
io.sockets.on('connection', function(client) {
	console.log('client connected');
	client.on('message', function(message) {
		//自分に送信
		 client.emit('message',message);
		//自分以外に送信
		 client.broadcast.emit('message',message);
	});
	client.on('disconnect', function(){
		 console.log('disconnect');
	})
});
server.listen(8080);

index.html

<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<title>ちゃっとテスト</title>
	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
	<script src="/socket.io/socket.io.js"></script>
	<script>
	$(function() {
		 init();
	});
	var socket;
	function init(){
		 socket = io.connect();
		 //接続
		 socket.on('connect', function() {
			  writeMessage('CONNECT SUCCESS','#999999');
		 });
		 //データ受信ハンドラ
		 socket.on('message', function(message){
			  writeMessage(message);
		 });
		 //サーバ切断
		 socket.on('disconnect', function(message){
			  writeMessage('切断されました','#999999');
		 });
	}
	//メッセージをHTMLに書きこむ
	function writeMessage( message,color ){
		 if( !color ){ color = '#000000'; }
		 message = '<div style="color:'+color+'" class="message">'+message+'</div>'
		 $("#show").after(message);
	}
	
	//メッセージを送信する
	function submitMessage(){
		 var message = $('#message').val();
		 if( message == '' ){ return; }
		 $('#message').val('');
		 socket.emit('message',message);
	}
	</script>
</head>
<body>
	<input type="text" id="message" />
	<input type="button" value="送信" onclick="submitMessage()">
	<div>
		 <div id="show"></div>
	</div>
</body>
</html>

実行

上記2ファイルを保存して

node server.js

上記コマンドを実行

http://host_ip:8080/

にアクセス(host_idはサーバーのIPに書き換え)

node.js+socket.ioインストール

linuxでの作業内容です

node.jsインストール

wget http://nodejs.org/dist/v0.6.1/node-v0.6.1.tar.gz
tar zxvf node-v0.6.1.tar.gz
cd node-v0.6.1
./configure
make
make install

npmインストール

npmはnode.js用のパッケージマネージャです

curl http://npmjs.org/install.sh | sh

socket.ioインストール

socket.ioはソケット通信のサーバー&クライアントサイドライブラリ。
web socket使えない場合に、commetに切り替えてくれたりとめんどくさい部分を色々吸収してくれる。

npm install socket.io
#グローバルインストールは-gオプション

charlesやばい!macOSX lionでhostsを書き換えてもDNSが優先される問題解決


macOSX lionでhostsを書き換えてもDNSが優先される問題*1にぶちあたって困ってた*2んですが、


フロントエンドの開発効率が3倍に…!?デバッギングプロキシCharlesの使い方


この記事を見て、こいつならばと試したらビンゴでした。


Charlesの詳しい内容は↑にまかせるとして、
CharlesのDNS spoofingを使うことでhostsと同じことができるので解決しました。


Charles

*1:存在しないアドレスではdns lookupで散々待たされた後に切り替え。めちゃ遅い

*2:hosts優先されるといっている人もいる