olificeのblog

プログラミングまたはサーバ構築についてのメモ

コンテンツが消費されつくされないためには

4Gamer.net ― コミュニティサービスの本質ってどこにある?――はてな・元CTO伊藤直也氏がゲストの「ゲーマーはもっと経営者を目指すべき!」第8回

元はてな幹部naoyaとドワンゴ会長の川上という人の対談でちょっとそういえばそうだなーと思ったのが
川上氏:
 はい。わかっちゃうって奴は,その段階ですでにいろんなものが消費されているってことだから,結果的にうまくいかないんですね。
消費されつくされたコンテンツはオワコンになるから消費されつくされていない部分を意識して提供しているということ。
会議と熟議を重ねて検討に検討を重ねたものが案外大コケして当たるかよく分からないけど出したものが意外な消費のされかたをしてコンテンツとしての寿命が延びたというなんか経験者っぽい人の談ではよく出る。
コミュニケーションを重ねて合理化された結論って案外その時点で内容的には関係者内で既に消費しつくされているもので、コンテンツ的にはそこで終わっていると。あー、あるある。なんかこれすごい面白そう!って感じで見つけたサービスとかアイデアとかって見つけた時点で大体コンテンツ的に想像力が消費しつくされているというか、それ以上の想像力が働かないという感じの印象を受ける。だから想像力の余地が残るような仕掛けとかロジックをあらかじめ仕込んでおくと。そこがちょうどエンジニアリングとそうじゃない領域の間ぐらいでエンジニアにとっては難しいところ。
ある意味コンテンツの寿命=Webサービスの寿命なのでサービスの寿命を延ばすにはコンテンツが消費されつくされないような仕掛けを施しておく必要があるということだと思うけどそのためにニコニコ超会議とかやったらしい。
伊藤氏:
 最近よく考えるんです。本当に新しいサービス/コンテンツっていうのは,話し合いでは絶対生まれてこないんじゃないか。一人の人間が頭の中で妄想を考え ていて,その人は絶対これ!と思ってるけど,端から見たら意味分からないみたいな,そういうものなんじゃないかっていう感覚を持っているんです。そしてそ の,よく分からない要素ってのをどうやって作り出すか,みたいな方法論っていうのが“肝”なんだろうなっていうのを直感的に感じていて。
naoyaはつい先日GREE行ったかと思ったら退職してドラクエばっかやってるらしくてわろた。naoyaは普通にエンジニアリングの人っぽいのであまり嫌いになれないのだけど、エンジニアリングだけでサービスを延ばせる限界というのも認識していてある程度の規模からエンジニアリングだけじゃない勝負になってきてそこは苦手みたいなのも普通のエンジニアっぽくてだからはてなにいたのかなーと思った。

CentOS6.3にKVMをインストールするメモ

CentOS6.3でKVMをインストールしたときのメモ。
最初にマシンのCPUが仮想化に対応化しているかはBIOS設定画面から確認しておく。
対応していればKVMが利用可能。

OSからインストールする場合はCentOSのインストールパッケージ選択の画面でVirtual Hostを選択しておく。
既にCentOSがインストールされている環境ならyumからグループインストールでパッケージをまとめてインストールする。
yum groupinstall Virtualization "Virtualization Client" \
  "Virtualization Platform" "Virtualization Tools"
chkconfigをonにして自動起動するようにしておく。
chkconfig libvirtd on
再起動する。
shutdown -r now
仮想マシンは複数台起動するだろうからホストOSにブリッジインターフェースを設定し、仮想マシンからはそのブリッジに接続するようにする。
# vi /etc/sysconfig/network-scripts/ifcfg-br0 

DEVICE="br0"
BOOTPROTO=none
IPADDR=192.168.11.50
NETMASK="255.255.255.0"
BROADCAST="192.168.11.255"
NETWORK="192.168.11.0"
GATEWAY="192.168.11.1"
NM_CONTROLLED="no"
ONBOOT=yes
TYPE="Bridge"
PREFIX=24
DNS1=192.168.11.1
eth0でブリッジにbr0を指定する。
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 

DEVICE="eth0"
BOOTPROTO=none
NETMASK="255.255.255.0"
GATEWAY="192.168.11.1"
NM_CONTROLLED="no"
ONBOOT=yes
BRIDGE=br0
TYPE="Ethernet"
UUID="e8feaf6a-ee0e-47da-a7ac-c32afb838ae9"
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
HWADDR=44:37:E6:4D:3E:65
DNS1=192.168.11.1
LAST_CONNECT=1350377272
インターフェースを再起動。
service network restart
ブリッジインターフェースが追加されているか確認する。
[root@localhost ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.4437e64d3e65       no              eth0
                                                        vnet0
                                                        vnet1
virbr0          8000.52540014165c       yes             virbr0-nic
トラフィックがブリッジまで届くようiptablesを無効化
# Disable netfilter on bridges.
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
設定したカーネルパラメータを再ロード
# sysctl -p /etc/sysctl.conf

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
libvirtdをリロード
# /etc/init.d/libvirtd reload
仮想マシンを作成する。 コンソールからvirt-managerコマンドを打ち仮想マシンマネージャを起動する。
# virt-manager
 


イメージ005






















ホスト名を右クリックし→新規で新しくホストを作成する。

イメージ004
















仮想マシン名を適当に入力し、用意したメディアで仮想マシンにお好みのOSをインストールする。
今回はゲストOSにもCentOSをインストールした。

イメージ006
















使用するメモリとCPUコア数を決める。
イメージ007
















割り当てるディスク領域を指定する。
イメージ008
















インターフェースにさっき作成したbr0を指定し完了ボタンを押すと仮想マシンが起動しOSのインストールが始まる。
イメージ010






















あとはゲストOSのインストールを通常通りに進めていく。

仮想マシンのクローンは仮想マシンマネージャーからマシンを右クリックして実行中なら一時停止かシャットダウンしてからクローンを選択。

イメージ011























詳細ボタンを押して新しいMACアドレスを後で設定項目に使うのでコピーしておく。
設定したらクローンボタンでコピー。

新しく作ったクローンはそのままインターフェースを起動させようとすると
#service network restart

device eth0 does not seem to be present, delaying initialization


とメッセージが出て起動しないのでudevの設定をする必要がある

# vi /etc/udev/rules.d/70-persistent-net.rules
↓この古い情報は削除する
# PCI device 0x8086:0x100e (e1000) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:fb:41:ae", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
↓新しい設定のNAMEをeth0に変える
# PCI device 0x1af4:0x1000 (virtio-pci)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:83:e8:c1", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"


eth0に新しく設定したいIPアドレスを記述
#vi /etc/sysconfig/network-scripts/ifcfg-eth0
//HWADDRは上記新しい設定のATTR{address}=="52:54:00:83:e8:c1"のMACアドレスと同じ。
EVICE="eth0"
BOOTPROTO="none"
IPADDR="192.168.11.14"
NETMASK="255.255.255.0"
GATEWAY="192.168.11.1"
HWADDR="52:54:00:83:E8:C1"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="52ecae3b-ec32-424a-b9f6-8db7172fb5b7"

再起動してネットワークの稼動状態を確認する
#shutdown -r now
クローン自体はGUIを使えば至極簡単なので予めMySQL, Apache等環境をそろえてからクローンしてあげると開発用だったり実験用の環境が一瞬で用意出来て便利そう。

ゲストOSはCUIのみでいいだろうけどホストOSはCPU使用率とかメモリ使用率とか可視化できるしやっぱ管理用にGUI入れとくとよさそう。

管理はVNCでリモートで出来るようにする。
yum -y install tigervnc-server
iptablesを使っている場合はvncサーバが使用する5900-5999のポートを開放する。 /etc/sysconfig/iptablesを直接編集するかGUIから変更する。 今回は/etc/sysconfig/iptablesを直接編集する。
# vi /etc/sysconfig/iptables

 Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5900:5999 -j ACCEPT ←この行を追加
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
iptablesの設定の意味はおいといて上記設定で5900番から5999番までを開放という意味になる。 編集したらiptablesを再起動して設定を適用する。
service iptables restart
TigerVNCを起動する。
vncserver -geometry 800x600 //解像度800x600で起動。
起動すると初回に後でクライアントから接続するときに必要なパスワードを聞かれるので入力する。
New 'localhost.localdomain:1 (root)' desktop is localhost.localdomain:1
上記出力メッセージの数字の部分がクライアントから接続するときのディスプレイ番号なので覚えておく。

あとはWindwosなりからVNCクライアントソフトを使って「対象IPアドレス:ディスプレイ番号」の形で接続し、パスワードを聞かれるので入力すれば接続が完了する。
↓はWindows用クライアントのUltraVNC
イメージ014

SolandraでCellを使ってWordとかPDFとか取り込み

SolandraでWordやPDFなどのドキュメントをCellで取りこんで全文検索できるようにしてみる。

ちなみにSolandraにはCellが入っていないのでsolr本家に含まれるCellを
Solandraでも使えるようsolrconfig.xmlで指定してあげる。
とりあえずsolr本家ダウンロード
wget http://ftp.kddilabs.jp/infosystems/apache/lucene/solr/3.6.1/apache-solr-3.6.1.tgz
tar xvf apache-solr-3.6.1.tgz
Solandraのsolrconfig.xmlに追記
vi solrconfig.xml
<lib dir="/usr/local/apache-solr-3.6.1/contrib/extraction/lib" regex=".*\.jar" />
<lib dir="/usr/local/apache-solr-3.6.1/dist" regex="apache-solr-cell-\d.*\.jar" />
サンプルにIPAのサイトからyouryou.docをダウンロードする。
wget www.ipa.go.jp/software/2007/document/youryou.doc
取りこむ
curl -H "Content-type:text/xml; charset=utf-8" 'http://localhost:8983/solandra/skype/update/extract?extractOnly=true' --data-binary @youryou.doc > youryou.xml
上手く取り込めれば以下のようにXMLで出力される。


0138<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta
name="Revision-Number" content="1"/>
<meta name="Comments"
content=""/>
<meta name="Last-Author" content="k-kumaga"/>
<meta
name="Template" content="Normal.dot"/>
<meta name="Page-Count"
content="1"/>
<meta name="subject" content=""/>
<meta
name="Application-Name" content="Microsoft Office Word"/>
<meta
name="Author" content="IPA"/>
<meta name="Word-Count"
content="710"/>
<meta name="xmpTPg:NPages" content="1"/>
<meta
name="Edit-Time" content="600000000"/>
<meta name="Creation-Date"
            content="2007-02-01T05:56:00Z"/>
<meta
…
このままSolrに取り込もうとすると上記XMLのnameフィールドのRevision-NumberやCommentsを格納するためにSolrに色々なフィールドを用意しなければいけないがそれは面倒なのでdynamicFieldとリクエスト時のパラメータにuprefixを追加して全てのフィールドをとりあえずs_*というフィールドで取り込めるようにする。
schema.xmlにdynamicFieldを設定する。
vi schema.xml

また取り込む時のパラメータにuprefixでs_を指定しs_*のdynamicFieldに全て追加出来るようにする。
あとSolandraはunique_idが必須なのでユニークIDを指定出来るような仕組みを用意しておく必要がありそう。
curl -H "Content-type:text/xml; charset=utf-8" 'http://localhost:8983/solandra/skype/update/extract?literal.id=ユニークなID&uprefix=s_&commit=true' --data-binary @youryou.doc
上記のliteral.フィールド名=値に当たるところはそのままSolrに取り込まれる。
以上でWordなどのdocファイルが格納できる。

参考:
Apache Solr入門 ―オープンソース全文検索エンジン
Apache Solr入門 ―オープンソース全文検索エンジン
クチコミを見る