MERYやNaverまとめなどのキュレーションメディアが乱立する理由についての考察

https://www.flickr.com/photos/49503048699@N01/483167056

photo by miyagawa

平成ガラケー時代の覇者はCancamなどの女性誌だった

情報はガラケーで検索もできたけどリッチじゃなかった。その中で若者の身近なメディアは雑誌やテレビで全盛期のCancamは100万部弱も売れていた。今や出版不況といわれ軒並み廃刊に追い込まれ、Webマガジンやキュレーションメディアが絶好調だ。

80万部が11万部になった「cancam」。売れない雑誌の共通点とは? | トリブログ

泥沼出版不況、売り上げ過去最大の落ち込み 「休刊ラッシュ」で週刊誌は13%減 : J-CASTニュース

markezine.jp

平成スマホ時代の幕開け

//www.flickr.com/photos/63991153@N00/14482107229

photo by Hindrik S

 

iphone3が登場して、Androidが出てきて事態は一変し、手のひらに雑誌のようにリッチなメディアを届けることができるようになった。これで雑誌の優位性はなくなり、Webマガジンが猛追してくる。Webはニッチかプラットフォーム戦略をとってお互い凌ぎを削りあっている。

 

iemo[イエモ]|インテリア&リフォームから100均グッズまで。住まいの情報サイト

東京カレンダー - グルメ配信・レストラン予約サイト

 

平成スマホ第二世代

アプリが成熟し、コンテンツが充実しはじめるとバイラルメディアやキュレーションメディアといった取材してオリジナルコンテンツをつくるといったことをしなくなるメディアが誕生する。なぜならコンテンツはすでにあるし、ユーザーはコンテンツが多すぎて右往左往してしまうからだ。大切なことはユーザーニーズで、より早く質の高いコンテンツに到達するには、ミクロなコンテンツをいかに特定のユーザーに届けることができるか、その解決策がキュレーションという仕組みだと思う。

 

"壁ドン" だけじゃない!胸キュン仕草と恋スイーツで日常にご褒美を♡|MERY [メリー]

痴漢対策の切り札に!女子高校生考案「痴漢抑止バッジ」が日本に広まるかも | nanapi [ナナピ]

 

よりミクロなユーザーニーズを満たす

ニュース系アプリは完全に新聞というデバイスを食って、コンテンツとデバイスで住み分けが出来ている気もする。とにかく言いたいことは、スマホという革新的なデバイスがアナログの覇者を市場から引きずり下ろし、取って代わったかと思えば、よりユーザーサイドに立ったキュレーションメディアが出てきたというシナリオだ。今自分がほしい情報にアクセスできるメディアが最終的に生き残るわけだが、キュレーションよりもミクロなターゲットにもコンテンツを提供できるのは人口知能しかない。ワトソンのようなコグニティブコンピューティングはすでにその一部を解決しているし、この流れは確度高めだと思われる。

 

平成スマホ第三世代

//www.flickr.com/photos/69078600@N00/14667534483

photo by kirainet

 

ネットで調べればわからないことがほとんどなくなって、情報の質が求められる。手に入れやすさであったり、信ぴょう性や速報性といった本質的価値がメディアの価値になる。ネットが無法地帯だったころに比べて2chの凋落が目立つのもメディアとしての役目を終えつつあるからだと推測している。

 

2ちゃんねるのアクセス数が減少、過疎化している? - NAVER まとめ

キュレーションメディアの寿命は数年

ここ数年は人によるキュレーションに優位性があるが、すべて人口知能にリプレースされる気がする。だれもレコメンドや広告を人手でやらなくなったように、オリジナル以外のコンテンツは代替される運命にある。

今はキュレーションで儲けよう

Elasticsearchで日本語人名検索を実装した時のまとめ

f:id:kitahashi-ryoichi:20160110143523p:plain

ゴール:Elasticsearchでサジェストが実装できるようになる

Elasticsearchを1分インストール手順

必要環境

  1. java 7+
  2. Linux (CentOS 6.7) 

インストール手順

Elasticsearch 1.7.4 (本体) v2系はプラグイン未対応が多いため非推奨
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.7.4.tar.gz -O elasticsearch.tar.gz
tar xvzf elasticsearch.tar.gz
mv elasticsearch-1.7.4/ /opt/.
cd /opt
ln -s elasticsearch-1.7.4 elasticsearch
kuromojiプラグインインストール(日本語形態素プラグイン)
cd elasticsearch
bin/plugin install elasticsearch/elasticsearch-analysis-kuromoji/2.7.0
headプラグインインストール(データ参照プラグイン)
bin/plugin install mobz/elasticsearch-head
config設定 /opt/elasticsearch/config/elasticsearch.yml
network.bind_host: 0.0.0.0
cluster.name=xxxxx

※Elasticsearchはデフォルトクラスター構成になっているので、同じネットワークにあるマスターから勝手にコピーしたり、自分がマスターになって荒ぶったことをするためcluster.nameは変えておいた方が身のためです。

Elasticsearch起動!
/opt/elasticsearch/bin/elasticsearch start &
headプラグインで起動確認!

http://serverip:9200/_plugin/head

 

RESTで設定とデータを突っ込む

Elasticsearchは全部RESTAPI経由でやれるので今回はそれを利用しました。

インデックスを作ってサジェストさせるまでの流れ 

  1. データセットを準備
  2. 設定jsonをcurlで叩き込む
  3. データをcurlで叩き込む
  4. サジェストAPIを叩く

 

データセットを準備

ここから芸能人Instagramランキングのスクレイピングデータをダウンロードしてください。

 

設定jsonをcurlで叩き込む

データセットはこんなフィールドになっています。

{
"name": "木下優樹菜",
"instagram_name": "yuuukiiinaaa",
"instagram_id": "173974522",
"content": "タレント、モデルの木下優樹菜(ゆっきーな)さんのInstagram(インスタグラム)アカウントです。夫はお笑い芸人の藤本敏史。木下優樹菜(きのしたゆきな):1987年12月4日生まれ 出身地:東京都 血液型:A型 ",
"category": "女性タレント",
"profile_picture": "https://scontent.cdninstagram.com/hphotos-prn/t51.2885-19/10809026_387581471408973_2084297648_a.jpg",
"user_full_name": "yuuukiiinaaa"
}

 

とりあえずnameを入れたらサジェストされる所だけならこれを実行。kana_convなどのフィルターやトークナイザーはひらがなデータがある場合にElasticsearch側がいいかんじにしてくれる用なので今回は使用していません。

設定 

  • index "instagram"
  • type "user"
  • サジェストするfield "name" 
curl -XPUT 'localhost:9200/instagram' -d '
{
"settings": {
"analysis": {
"filter": {
"kana_conv": {
"type": "kuromoji_readingform",
"use_romaji": false
}
},
"analyzer": {
"kuromoji_analyzer": {
"type": "custom",
"tokenizer": "kuromoji_tokenizer"
}
}
}
},
"mappings": {
"user": {
"_source": {
"enabled": true
},
"_all": {
"enabled": true,
"analyzer": "kuromoji_analyzer"
},
"properties": {
"name": {
"type": "completion",
"analyzer": "kuromoji_analyzer",
"search_analyzer": "kuromoji_analyzer",
"payloads": false
}
}
}
}
}'

{"acknowledged":true}が帰ってきたら設定OK

ポイントはtype completionでフィールドを定義してインデックスを作ること。payloadsをtrueにしてサジェスト結果にデータを持たせることもできます。

参考:Completion Suggester

 

データをcurlで叩き込む

得意のワンライナーでデータを入れます。 

cat instagram_data.json | while read line; do curl -XPOST http://localhost:9200/instagram/user/?pretty -d "${line}"; done

headから入れたデータを確認するとこんな感じ

http://serverip:9200/_plugin/head

f:id:kitahashi-ryoichi:20160110141324p:plain

サジェストAPIを叩いてみる

[request]
curl -X POST 'localhost:9200/instagram/_suggest?pretty' -d '{
"hoge" : {
"text" : "木下",
"completion" : {
"field" : "name",
"size" : 10
}
}
}'
※hogeとなっているところは何でも良い、使ってないらしい

[response]
{
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hoge" : [ {
"text" : "木下",
"offset" : 0,
"length" : 2,
"options" : [ {
"text" : "木下ココ",
"score" : 1.0
}, {
"text" : "木下優樹菜",
"score" : 1.0
}, {
"text" : "木下安奈",
"score" : 1.0
}, {
"text" : "木下愛未",
"score" : 1.0
}, {
"text" : "木下春奈",
"score" : 1.0
}, {
"text" : "木下理樹",
"score" : 1.0
}, {
"text" : "木下隆行",
"score" : 1.0
} ]
} ]
}

 

でたー!ですが、今のところデータセットが漢字なので、ユーザビリティはかなり低いです。ここからUIUXを高めるために、色んな自然入力へ対応するには2つ大きく対応方法があります。

  1. データセットでひらがなデータを作る
  2. フィルターとトークナイザーを駆使する

フィルターとトークナイザーを駆使するやり方だとkuromojiで漢字→ひらがな変換をいれたり細かい設定作業になるのでそれは次回の説明としましょう。

 

まとめ

type:completionでインデックス作成して、/index/_suggestのAPIを叩けばOK

ほんじゃねー。

KPOPで一番エロい「Stellar」のエロMVまとめ

f:id:kitahashi-ryoichi:20180328231426j:plain

https://misskpop.weebly.com/stellar-profile.html

 

Stellarのメンバー

2011年にデビューした近年流行りの露出系KPOPアイドルで、そのエロさは今やNo1と言われている。ガヨン、チョンユル、ミンヒ、ヒョウンというメンバーがいるらしいが、だいたい顔はアート作品に仕上がっているため、だれがだれかはよくわからない。

 

まずはこのエロ動画を見よ「Vibrato」

www.youtube.com

f:id:kitahashi-ryoichi:20180328231601j:plain

 

https://www.youtube.com/watch?v=d89US67Q1Ss

 

http://www.ceritakorea.com/wp-content/uploads/2015/07/stellar.jpg

http://www.ceritakorea.com/2015/07/29/stellar-is-desperate-for-attention-with-the-sexy-concept/より

ただのエロ動画でした。

 

エロいMV見たよ!的なバズ動画も多数

www.youtube.com

 

パンスト好きにはたまらないらしい「Marionette」

www.youtube.com

 

https://www.youtube.com/watch?v=yNbrHfClTe0より

http://www.koogle.tv/static/media/uploads/news/021414-stellar-marionette-uncut_mv.jpg

http://koogle.tv/media/news/stellar-release-uncut-version-of-marionette-mv/より

パンストフェチの変態紳士御用達でした。単に露出度をあげるアプローチではなく、着エロの市場の中でもニッチを攻めているあたりが競争の熾烈さを彷彿とさせます。

 

 

エロさ控えめのMVもあります

www.youtube.com

www.youtube.com

www.youtube.com

最初はアイドルっぽいフリフリな感じでやってたのに、KPOPセクシー大戦に参戦したようです。たぶん今のところエロさではNo1のStellarでした。

 

 

参考

http://cafe.daum.net/stellarspace

http://kpopdrama.info/kpopstar_stellar.html

【Macで開発】Linuxのchkconfig的なlaunchctlの使い方

f:id:kitahashi-ryoichi:20151117004102j:plain

Mac環境で自動起動させる方法

Linuxだと便利な「chkconfig」コマンドでやりますよね。

chkconfig mysql on

 

Macだとhomebrewがコマンドを教えてくれます

brew info mysql

To have launched start mysql at login:
  ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
Then to load mysql now:
  launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
Or, if you don't want/need launchctl, you can just run:
  mysql.server start

 

言われたとおりに2つのコマンドを実行すると「chkconfig mysql on」と同じように自動起動設定ができます。

ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

 

まとめ

homebrewでインストールしたらbrew infoするとハッピーになれる。自動起動設定を覚えるのめんどくさい。

 

 

【Macで開発】MySQLのインストール手順

Mac(OSX)にMySQL5.7以降をインストールする手順

WindowsとLinuxでしか開発したことなかったので、Macでの開発って結構慣れませんでした。MySQL 5.7以降はちょっとユーザーテーブルのフィールドが変わってたりしてハマったのでインストール手順と注意点の共有です。

全体の流れ

  1. homebrewでパッケージ管理する
  2. mysqlをインストールする
  3. mysqlを起動する
  4. rootでログインする

 

homebrewでパッケージ管理する

Windowsから来た人だと本番がだいたいLinuxだし、パッケージ管理って「yum」「rpm」でしたよね。Macの場合はいろいろありますが、よく使われているのが「homebrew」で使い方は「yum」とほぼ同じです。

 

homebrewをインストール

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 

 

mysqlをインストールする

brew install mysql

 

mysqlを起動する

起動

mysql.server start

停止

mysql.server stop

 

rootでログインする

mysql -uroot

※ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) というエラーが出る場合は、権限設定を初期化する必要があります。僕はこれにハマりました。

 

Access denied for user 'root'@'localhost' (using password: NO)が出たら

mysqlを停止する

mysql.server stop

セーフモードでmysqlを起動する

mysqld_safe --skip-grant-tables

※このコマンドを実行したターミナルは操作できなくなるので新規ターミナルから以下のコマンドを投げて下さい

rootでログインする

mysql -uroot

ユーザー権限テーブルのパスワードを初期化する

UPDATE user SET authentication_string=password('') WHERE user='root';

権限を再読み込みする

flush privileges;
quit;

mysqlを再起動する

mysql.server restart

自動起動設定

ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

さーてスタバでMacBookAir開いてアプリ開発とかしちゃうぞー!意識高い系だぞー(笑)

 

Suicaのシステムがいかにすごいか仕組みを徹底解説

f:id:kitahashi-ryoichi:20180328230529j:plain

 

Suicaの凄さ

  1. ものすごい処理量(1日4000万件)
  2. 全然サービスが落ちない
  3. 年寄りも使っている

Suicaがない社会なんて今や想像できないですよね?東京でSuica持ってない人はいないくらい普及していますし、レストランやコンビニでSuicaを使って買える場所も普通になってきました。普通に考えて、1日4000万件も処理して0.1秒以内に処理を完了させないといけないシステムなんて無茶苦茶難しくないですか?しかも、Suicaがリリースされたのは2001年です!ちょこっと調べてみたすごいブレークスルーの数々を紹介してみようと思います。

 

IT・Suica事業

https://www.jreast.co.jp/youran/pdf/2013-2014/jre_youran_group_p63_67.pdf

交通系電子マネーのご利用件数が最高記録を更新!

https://www.jreast.co.jp/press/2015/20150602.pdf

ICカード乗車券システムにおける自律分散高速処理技術と そのアプリケーション

http://www.sice.jp/ia-j/papers/jitk6-20050722-1305.pdf

 

サービスを落とさないための「自立分散高速処理技術!」

改札が止まれば日本の通勤ラッシュをさばくことができない!すべてはこれを解決するために安定して高速にサービスを動かし続けるアーキテクチャになっています。かんたんに言うと、「ピッ」する改札は独立させて、「ピッ」したデータが改札→駅→中央サーバに送信できたら送信するという仕組みになっていて、中央が死んでも駅サーバで処理できちゃう!キューのような仕組みになっていて、データをある程度蓄積し、通信が確立されれば、より上位のサーバ(改札<駅<中央)にデータを複製することで間違いが起きずに中央集権的に顧客管理ができます。

 

そもそも、改札<駅<中央が独立できるのは、改札を通って駅構内に入ってから人間が行きたい駅まで移動するのにタイムラグが発生する電車の特性によるからなんです。つまり、「ピッ」した情報は次の駅の改札を通るまでに到着駅サーバに到達すれば良いのでこんなアーキテクチャができるわけです。逆に、改札入ってすぐ出る場合は駅サーバまで複製できていれば処理できるので信頼性の高い処理が行える・・・キレイな設計ですね。

 

ICカード乗車券システムにおける自律分散高速処理技術とそのアプリケーション

http://www.sice.jp/ia-j/papers/jitk6-20050722-1305.pdf

 

ものすごい処理量をこなす緻密な速度改善

「ピッ」した時にやってることは「運賃計算」が主な処理とのこと。これを100msec(0.1秒)以内に計算して、改札に返さないといけないのです!どれくらい難しいかというと、普通のWebサービスのレスポンス速度は1秒以内でも結構早い方で、処理速度的には0.2秒とか意外にかってたりします。糞なアプリだともっと遅いです。Suicaが凄いのは問題解決にピンを置いて、普通降りる時に運賃計算するのを乗った時に処理の一部をカードに保存してしまうという逆転の発想があった。こういう逆転の発想はエンジニアは必要な思考法で、その時にしなくても良いものを先にやっておくという考え方は色んな所で使われている。アイテムベースの協調フィルタリングで「この商品を買った人はこんな商品も買っています」というレコメンドでも利用されている。前例に囚われることなくあらゆる可能性を考えてみるというのは忘れないで置こうと思ったのでした。

 

したがって,処理時間を短縮 するために,乗車時に予め定期区間内の乗継駅 (仮精算駅)および乗車駅-乗継駅間の運賃を IC カード内に記録する技術を考案した.これは, 個々の改札機に自駅から各駅への運賃データを記憶させることで可能となった技術である。

http://www.sice.jp/ia-j/papers/jitk6-20050722-1305.pdfより

 

お金を扱うからこそ間違わない仕組み

間違わない仕組みというより、間違うからこそ間違っても何とかなる仕組みが大事だと思います。完璧なシステムよりも完璧じゃないことを前提にそれでも正しく動く仕組みって大事ですよね。つまり、実際に起ったことを確実に記録して、それがエラーだったらもう1回やればいいよっていう冪等性(べきとうせい)のある仕組みを考えておくべき。Suicaだと『だれがいつどこで「ピッ」したか』と『だれがいくらチャージ』したかが分かれば、必ず正しい状態にすることができます。このデータをネットワーク上のサーバに複製しておくことで中央が死んだり、改札が死んだりしても最終的には数字を合わせることが出来る仕組みになっています。僕が主にやってきたECでも障害はよくあることなので、障害がおきても復旧できるようにユーザの生データは確実に保存できるような仕組みになっていました。

 

当時は最先端の非接触ICカードを採用

「ピッ」の技術は非接触ICカードといいます。この技術は大きく2つに分かれて、NFCとFelicaがあります。どちらもソニーの技術ですが、NFCはオランダ:フィリップスと共同開発になっています。NFCはかざすだけで通信する技術で、Felicaはデータ管理とセキュリティの技術になっており、この2つが合わさってSuicaや他の電子マネーが動きます。世界的に見ても当時は日本が最先端を走っており、Suicaの登場で東京の通勤ラッシュも大きく緩和されることになったと思います。

 

非接触ICカードの歴史

1988年 ソニーでFelicaの基礎技術研究が始まる

1997年 香港「オクトパスカード」でFelicaがはじめて実用化

2001年 Edy、Suicaサービス開始

2004年 おサイフケータイ(Felica)がドコモから発売

2011年 Felica対応スマホが発売

2016年 ApplePayでiPhone7にFelicaが搭載

 

年寄りも当たり前に使えるサービス

当たり前に使えるというのがシステムでは相当難しい話になります。しかし、100%確実に動くシステムなんて存在しません。物理的なモノがある以上災害があれば止まりますし、99%の稼働率でも年間87時間停止していることになります。これではまるで使えません。そんな中でも障害が起きた話は直近でたった1時間のみです。先ほど説明した「自立分散高速処理技術」と呼ばれている自立分散の部分で、一部が死んでも動き続ける仕組みが実装されていることによる影響が大きいです。サーバースペックに依存することなく、アーキテクチャとして一部が死んでも動き続けるヒトの血管の弁のような仕組みを盛り込む必要があるということです。

 

 

だからSuicaは6000万枚も普及した

通勤ラッシュのとんでもなく高い要求仕様をエンジニアが解決したことで、とんでもなく使いやすい電子マネーのSuicaが誕生し、現在では約6000万枚発行されているみたい。使えるお店も32万店舗!端末は63万と、コンビニでは当たり前に使えるし、自動販売機でも使えてどんどん便利になっていってますよね。

f:id:kitahashi-ryoichi:20161117184152p:plain

 

クレジットカードの発行枚数は約2億5000万枚

Tポイントカード発行枚数約1億3000万枚(内アクティブ6050万人)

楽天Edy発行枚数約7800万枚

nanaco発行枚数約4000万枚

 

他の電子マネーと比較すると、枚数差はそんなにありません。ただ、交通系カードなのでアクティブ率が他と段違いで高いため、電子マネーといえば圧倒的No1でSuicaなのです。

 

クレジットカード発行枚数調査結果の公表について

http://www.j-credit.or.jp/information/statistics/download/toukei_03_a.pdf

電子マネー「楽天Edy(エディ)」 | 加盟店募集|楽天Edyの特徴

電子マネー nanaco 【公式サイト】 : 法人のお客様 | 電子マネーnanacoとは

T-POINT 10周年 | TポイントとTカードの総合サイト[T-SITE]

 

まとめ

だれでもかんたんに使えて、速さを意識しないくらい自然に支えるシステムの裏には地道な速度改善のための問題解決と、アプリレベルではないアーキテクチャとして仕組みによる問題解決が重要な要素になっているということ。難易度が違っていても、課題をドリルダウンして解決できるレベルの課題を本質的に解決していくことが大事なんだなということを感じた。