YoshioriのBlog このページをアンテナに追加 RSSフィード

2012-01-27

普通の文章も Git で管理すると楽だよって話

西尾さんが奥さんに Git を使わせたいらしい

なのでちょっとバージョン管理としてだけでも Git 使うと楽だなぁと思うところを書いてみたい。

あ、西尾さんは多分複数で校正とかする文章の話なんだと思うんだけど、今回は複数で管理とかそういうところはやらずに純粋に一人で文章書くときGit 使うと便利だよってことを書こうかなぁと思う。

最初の一歩

文章を管理するディレクトリGit 管理下に置く

$ git init
Initialized empty Git repository in /Users/yoshiori/tmp/nishio/.git/

で、編集してとりあえず add してコミット

$ emacs nishio.txt
//編集する
$ git add nishio.txt
git add nishio.txt
$ git commit -m '文章書き始め'
[master (root-commit) 384e4fb] 文章書き始め
 1 files changed, 18 insertions(+), 0 deletions(-)
 create mode 100644 nishio.txt

これで管理下に置かれたので好きに書いていく

文章書いてる途中で特定の文言を置き換えたくなったから置き換えた

っていうときに、特定の文言を置き換えたのだけとりあえずコミットしたい場合

git add -p で指定すると便利

$ git add -p
diff --git a/nishio.txt b/nishio.txt
index 151febf..e62e0f8 100644
--- a/nishio.txt
+++ b/nishio.txt
@@ -1,18 +1,32 @@
 * 普通の文章も Git で管理すると楽だよって話
 
-id:nishiohirokazu が奥さんに Git を使わせたいらしい
+西尾さんが奥さんに Git を使わせたいらしい
 // あとで link
 
 なのでちょっとバージョン管理としてだけでも Git 使うと楽だなぁと思うところを書いてみたい。
-あ、id:nishiohirokazu は多分複数で校正とかする文章の話なんだと思うんだけど、今回は複数で管理とかそういうところはやらずに純粋に一人で文章書くときも Git 使うと便利だよってことを書こうかなぁと思う。
+あ、西尾さんは多分複数で校正とかする文章の話なんだと思うんだけど、今回は複数で管理とかそういうところはやらずに純粋に一人で文章書くときも Git 使うと便利だよってことを書こうかなぁと思う。
 
 ** 最初の一歩
 文章を管理するディレクトリを Git 管理下に置く
 
->||
+>|sh|
 $ git init
 Initialized empty Git repository in /Users/yoshiori/tmp/nishio/.git/
 ||<
 
-** で、編集してとりあえず add
+** で、編集してとりあえず add してコミット
 
+>|sh|
+$ emacs nishio.txt
+//編集する
+$ git add nishio.txt
+git add nishio.txt
+$ git commit -m '文章書き始め'
+ 文章書き始め
+ 1 files changed, 18 insertions(+), 0 deletions(-)
+ create mode 100644 nishio.txt
+||<
+
+これで管理下に置かれたので好きに書いていく
+
+** 文章書いてる途中で特定の文言を置き換えたくなったから置き換えた
Stage this hunk [y,n,q,a,d,/,s,e,?]? s

今回はコレだとでかすぎるので s を押して split する

Split into 5 hunks.
@@ -1,6 +1,6 @@
 * 普通の文章も Git で管理すると楽だよって話
 
-id:nishiohirokazu が奥さんに Git を使わせたいらしい
+西尾さんが奥さんに Git を使わせたいらしい
 // あとで link
 
 なのでちょっとバージョン管理としてだけでも Git 使うと楽だなぁと思うところを書いてみたい。
Stage this hunk [y,n,q,a,d,/,j,J,g,e,?]? y

y を押してこれは反映

@@ -4,8 +4,8 @@
 // あとで link
 
 なのでちょっとバージョン管理としてだけでも Git 使うと楽だなぁと思うところを書いてみたい。
-あ、id:nishiohirokazu は多分複数で校正とかする文章の話なんだと思うんだけど、今回は複数で管理とかそういうところはやらずに純粋に一人で文章書くときも Git 使うと便利だよってことを書こうかなぁと思う。
+あ、西尾さんは多分複数で校正とかする文章の話なんだと思うんだけど、今回は複数で管理とかそういうところはやらずに純粋に一人で文章書くときも Git 使うと便利だよってことを書こうかなぁと思う。
 
 ** 最初の一歩
 文章を管理するディレクトリを Git 管理下に置く
 
Stage this hunk [y,n,q,a,d,/,K,j,J,g,e,?]? y

これも y を押して反映

@@ -8,9 +8,9 @@
 
 ** 最初の一歩
 文章を管理するディレクトリを Git 管理下に置く
 
->||
+>|sh|
 $ git init
 Initialized empty Git repository in /Users/yoshiori/tmp/nishio/.git/
 ||<
 
Stage this hunk [y,n,q,a,d,/,K,j,J,g,e,?]? n
@@ -13,6 +13,6 @@
 $ git init
 Initialized empty Git repository in /Users/yoshiori/tmp/nishio/.git/
 ||<
 
-** で、編集してとりあえず add
+** で、編集してとりあえず add してコミット
 
Stage this hunk [y,n,q,a,d,/,K,j,J,g,e,?]? n
@@ -18 +18,15 @@
 
+>|sh|
+$ emacs nishio.txt
+//編集する
+$ git add nishio.txt
+git add nishio.txt
+$ git commit -m '文章書き始め'
+ 文章書き始め
+ 1 files changed, 18 insertions(+), 0 deletions(-)
+ create mode 100644 nishio.txt
+||<
+
+これで管理下に置かれたので好きに書いていく
+
+** 文章書いてる途中で特定の文言を置き換えたくなったから置き換えた
Stage this hunk [y,n,q,a,d,/,K,g,e,?]? n

残りも一応確認して含める必要が無いので n を押す。

これで特定の文言を置き換えたのだけとりあえずコミットすることができる

$ git commit -m 'id 記法をやめる'
[master 4e9ccab] id 記法をやめる
 1 files changed, 2 insertions(+), 2 deletions(-)

なんか文章の中にも diff を書き始めたらわけわからなくなってきたwww

ので、ここで終了wwww

今度機会があったらもっとまとめて書く

$ git commit -m 'ややこしくなってきたのでまた今度'
[master 7982c61] ややこしくなってきたのでまた今度
 1 files changed, 147 insertions(+), 2 deletions(-)
$ git diff
diff --git a/nishio.txt b/nishio.txt
index e5c2a60..7902037 100644
--- a/nishio.txt
+++ b/nishio.txt
@@ -161,3 +161,10 @@ $ git commit -m 'id 記法をやめる'
 なんか文章の中にも diff を書き始めたらわけわからなくなってきたwww
 ので、ここで終了wwww
 今度機会があったらもっとまとめて書く
+
+>|sh|
+$ git commit -m 'ややこしくなってきたのでまた今度'
+[master 7982c61] ややこしくなってきたのでまた今度
+ 1 files changed, 147 insertions(+), 2 deletions(-)
+||<
+

2011-12-12

sbt の文字化けを ~/.sbtconfig で直す


なんかググっても起動スクリプト修正しろ的なのしか出て来なかったけど、MacBrew で入れた最新の sbt の起動スクリプトみたら

#!/bin/sh
test -f ~/.sbtconfig && . ~/.sbtconfig
exec java -Xmx512M ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.11.2/libexec/sbt-launch.jar "$@"

って書いてあったので、

~/.sbtconfig に

SBT_OPTS=-Dfile.encoding=UTF-8

って書いた。

パッケージ管理ソフトで入れた起動スクリプトとか弄っちゃうとアップデートの時とかに嵌りそうなので嫌だよねってことで

2011-11-21

電子書籍についてぼんやり考えたこと


こんなこと落ち着いて話す相手もいないし、なんとなく電子書籍周辺についてぼんやり考えてることをまとめてみる。

あ、これは僕個人の意見であって、僕の所属する会社とかやってる仕事とか関係ないですよ。


まずはみんなも大好きだったり大嫌いだったりするスティーブ・ジョブズ言葉最初引用しておく

ハリウッドの連中にとってテクノロジーは「買ってくるもの」で、それが創造的なプロセスだとは全然思っていない。突然インターネットが出現して、彼らの商品を盗みはじめた。ナップスター後遺症に悩まされ、つなに糾弾すべき相手を捜し回っている。そして、テクノロジー業界にまで非難をぶつける。

一方テクノロジー業界の側は、彼らの商品にどれだけ手がかかっているか知らないから違法ダウンロードをどうでもいいことだと思っていて、「うーん、ぼちぼち彼らも新しいビジネスモデルを作る必要があるね」で片付けてしまう。

でも、どっちも間違いなんだ。

これは音楽業界についてのセリフだけど、大事な事は

でも、どっちも間違いなんだ。

ってこと。

どっちかによって考えるんじゃなくて、ちゃんと考えなきゃいけない。

けど、まぁ、僕はテクノロジー側の人間になるから多少はバイアスかかっちゃってるかもしれないけど。


販売価格と発行部数


まずは、大人のワンダーランド的なお話がある。

よく聞く発行部数だ。公称発行部数とかいろいろあるけれどそこはまた別の話なので、純粋に発行部数の話をしよう。

簡単に言ってしまえば出版社は 10 万部本を刷れば 10 万部分のお金が一旦は入ってくる。

一旦書店などに卸すからだ。

その後、戻ってくるものも大量にあるかもしれないけど、一旦それだけのお金が動くというのが社会を回している。

その間にある印刷会社や配送会社にとっても馬鹿にできないだろう。

これが電子書籍だと本当に売れたものしかお金が動かない。

1 冊しか売れなかったら本当にその分しか動かない。

今まで 1 冊 で数千万の金額が動いてたのが急に 400 円とかになったら会社としてやっていけないのはすぐに想像できる。


音楽と本のデジタル


よくデジタルコンテンツ配信で比べられる音楽書籍デジタル化について考えてみるとわかるんだけど、

音楽は一度「CD への移行」というのを経験しているのでデジタル化したデータというのはそもそも持っていたんだよね。

本はどうかというと、いままでずーっと紙で来た。

ここ数年ってレベルの最近だとデジタル入稿とかになってきてそれなりに電子化されては来ているけれども、それでもユーザーへは最終的に紙で届けるということしかしてきていないのでそこまで考慮した電子化にはなっていなかった。

もちろん音楽ユーザーに良い音を届けるために、CD からさらに iTunes で配信するためによりよい変換になるようにしてはいるけれども、そもそもデジタル化したものユーザーに届けるという文化自体が無かった書籍はまだまだ遅れてる。

遅れてるって言うことはどういうことかというと、そのための処理にコストが掛かるってこと。

「なんで電子書籍は実際の本と比べて流通とか印刷とかのコストかかってないのに半額とかにならないんだ!」

っていう人がいっぱいいるけれども、そういうコストがまだ大きい。というのも一因になってるというのも考えなきゃいけない。

まぁ、他にもサーバ管理費とか開発費とか色々コストが掛かってる理由とかは色々あるんだけど。


TSUTAYA音楽配信


今のはデジタルデータにするっていう配信側の話だったんだけども、今度はユーザー側の話。

実は特に日本TSUTAYA のおかげで音楽に関してはユーザーが「データのみ所持する」ってことに慣れていたっていうのがデカイと思ってる。

もちろん、TSUTAYA 以外でもそうなんだけど、音楽はそういったお店や友達とかに借りて、CD-R に焼いたり、MD に入れたり、MP3 に変換して持っていたりっていう「データのみ所持」するって状態がある程度日常になっていた。

学生の頃とかは「今月俺は A の新譜買うから、お前 B の新譜買ったら貸して」とかやって聞きまくってた。

で、TSUTAYA なんだけど実際問題「2 泊 3 日 CDレンタルしてその期間だけ聞く」って意識で借りてた人のほうが少ないんじゃないだろうか?

「2 泊 3 日 CDレンタルしてその期間にカセットなり MD なり MP3 にしてデータだけ手に入れよう」という人がほとんどだと思う。

法的にグレーとかそういうお話は置いておいて、実際 TSUTAYA には CD-RMDカセットテープが一緒に売られてた。

つまり物質としてのメディアCD )ではなく、データお金を払って手に入れると言うことを「レンタル」という言葉で包みつつ意識せずに経験してきたことになる。

これは結構大きいと思っていて、いきなりデータだけ有料で手に入れましょうというよりもレンタルという方がユーザーお金を払いやすいんだと思う。

お金を払って物ではなくデータを手に入れると言う事を無意識経験してたというのは馬鹿にできないなぁと。


自炊保護すべき


で、そういう話で行くと最近自炊規制しようという風潮だけど、むしろ自炊は推進すべきだと思う。

自炊規制っていうのは音楽で言うと TSUTAYAレンタルしてカセットテープに録音するの禁止みたいなことだ。

せっかくユーザーが本を「データとして所持する」という経験をしようとしているのに、それを規制しようとしているとか馬鹿だとしか言えない。

逆に音楽もそうだけど、本当に気に入ったものは「物」として所持したくなる。

特に音楽 CD を焼くのと違って自炊カセットテープへのダビングレベルのものだ。

ちゃんと作られた電子書籍と違って文字もすべて画像として取り込んでるから、拡大して読みやすくとかしても限度があるし、縦書き横書きを切り替えたりとか好きなフォントにして読むこともできない。

気に入ってちゃんと読もうとしたら本当の書籍なりちゃんと電子書籍で買うだろう。


本当に欲しいのは物でもデータでもない


データとして所持するようになったら、次にユーザーが思うのは本当に欲しいのは物でもデータでも無いってことに気付くだろう。

iTunes Music Store で一度買ったものが再ダウンロード出来ないという事を知ったときに僕が強烈に思ったのは

「僕が欲しいのはデータじゃないんだ。その曲をいつまでも聞ける権利が欲しいんだ」

だった。

本もそうだろう。本当に欲しいのはその本をいつまでも読める権利だ。


DRM とは何か?


現実の本として想像してみよう。

  1. A 出版社が出している本は「A 出版社専用書店」に行かないと手に入らない。
  2. それどころかわざわざ読むのにも「A 出版社専用書店」に行かないと読めない。
  3. もちろん人に貸したりなんて出来ない。
  4. A 出版社比較的長期的に存在するだろうけど、「A 出版社専用書店」は結構気軽に閉店しちゃったりする。
  5. 「A 出版社専用書店」が閉店しちゃうと違う所で同じ本を買わないとその本は読めない。

「本をコピーして配布する人とかが出て、正規に買った人が損した気持ちにならないように、出版社や著者にちゃんとお金が入るように」

という理由でこんな商売をしていて、こんな本を買いたいと思う人がいる?

これの「A 出版社専用書店」を「A 出版アプリ」とかに置き換えたのが現状のほとんどの電子書籍系の現状。

もちろん、他にも色々理由はあるけど「ユーザーが扱いにくい」本であることは間違いない。

「扱いにくい本」だからユーザーもっと「扱いやすい本」を求める。

それが自炊だったり、違法ダウンロードに繋がってるんだけど、それを理解しててもやめない。

DRM は糞です。本当に誰も特をしない巨大な糞です。


本当に違法ダウンロードと戦うって事


ユーザーが扱いにくいものを売ってたらそりゃぁ扱やすい方に流れるのは当たり前だ。

お金を払っても扱いにくいものしか手に入らないのにお金を払う人はいないだろう。そんな事馬鹿でもわかる。

自分で実際の本を買ってきて自炊するのも大変。

扱い易いもの違法ダウンロードしないと手に入らない。

iTunes Music Storeが始まる時にジョブズ

違法ダウンロードと戦う

って 1 曲 1 ドル以下で販売した意味を全然わかってない。

ジョブズを褒め称えるくせにホント自分環境に置き換えて見ることができない。

Napster が大流行してる時代にそれと戦うためにジョブズは缶ジュースと同じ値段で売ることをした。

P2Pダウンロードしてきてダウンロードを長い時間待って偽物つかまされたりしたりしないで 100 円払えば自分の聞きたい音楽がすぐに聞けるんならそっちを選択する人間のほうが多いだろう。

というか、その金額すら払わない人はただで手に入らないなら聞かない人間だ。そもそもターゲットにしてもしょうがない相手だ。

大多数の人間は 100 円で正規のものが手に入るのならば罪悪感を感じないそちらを選ぶ。

それでも選ばないような人間ターゲットにしてもしょうがない。

すごく簡単なことをジョブズはわかってるから 1 曲 1 ドル以下にするために頑張ったんだ。


業界の習慣


さて、今まで書いたことは何も特別なことじゃない。みんなわかりきってることだ。

僕に偉そうに説明されなくたってわかってる。

それなのに「業界の習慣なので」ってセリフで踏み切れない。思考を止める。


でも、「業界の習慣」なんてものホントはどこにも存在しない。

どこかに丁寧に文書としてまとまってて、みんな厳守しなさいねって書かれているわけじゃない。

習慣なんてもの最初に「xxx っていうのが習慣です」って言った人がいて、それに追従して、さも当たり前のように「xxx は業界の習慣なんです」って言っている人たちが作ってるんだ。

つまり、「僕もそれじゃいけないと思ってるんだけど、習慣なので」なんて言うのは詭弁だ。

その発言をしてる本人がその発言で習慣にしてるんだから

自分が「王様は裸だ」って言うと大変だから誰かが言ってくれるのを待っている。

それだけだ。

で「王様は裸だ」って言うのが Amazon だったり Apple だったりして全部持ってかれる。


Amazon,Apple に持って行かれる理由


ここまでわかれば AmazonAppleデジタルデータ配信や販売を持って行かれる理由は簡単にわかる。

業界の習慣」がないからだ。

AmazonApple自分コンテンツを持っていない。だから逆に権利者にお伺いを立てる「業界の習慣」に縛られないからだ。

もちろん、「業界の習慣」って言葉で色々な壁もあっただろう。でも、自分コンテンツを持ってないから王様は裸だ」って言える。

でも、コンテンツを持っている側が「王様は裸だ」って言っちゃいけないなんてルールはない。


ということで


まぁ、なんかグダグダ書いてきたけど、このままじゃ、良くてガラパゴスの再構築、普通に考えて衰退するだけだよねってこと。

もう一度言っておくけど、以上の意見は僕の所属してる会社とかやってる仕事は何も関係ないですよ。

僕個人としての意見ですよ。

でも、こんな内容でどっかで発表したいんだけど、技術系の勉強会とかだと畑違いだよね??

こういうのってどこの畑なんだろう??

まぁいいや。僕は最近そんな事を考えてますって事で。

2011-11-08

ニコニコ静画(電子書籍)リリースしましたよっと


http://seiga.nicovideo.jp/book/


色々技術的にも結構楽しげなことやってるので、どっかで発表できたらいいなぁとか思いつつ

とりあえず、7 月の誕生日にチームメンバーにサプライズでもらったケーキ写真をやっとアップできる!!

f:id:Yoshiori:20110722180845j:image


ということで、今後もどんどん良くしていきますので、ニコニコ静画(電子書籍)をよろしくお願いします。


あ、twitter で #nicobook とかで発言すると大体見てます。

2011-11-02

Servlet3.x 系で web.xml 書きたくないけど、SetCharacterEncodingFilter 使って tomcat の例の文字化けを回避したい

こんなクラス入れておくだけだた。

/**
 * 
 */
package org.yoshiori;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;


/**
 * @author yoshiori_shoji
 *
 */
@WebFilter("/*")
public class SetCharacterEncodingFilter implements Filter {

	/* (non-Javadoc)
	 * @see javax.servlet.Filter#destroy()
	 */
	@Override
	public void destroy() {
	}

	/* (non-Javadoc)
	 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
	 */
	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		  request.setCharacterEncoding("UTF-8");

		  chain.doFilter(request, response);
	}

	/* (non-Javadoc)
	 * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
	 */
	@Override
	public void init(FilterConfig config) throws ServletException {
	}

}