2016年12月9日金曜日

【講演メモ】第5回京商インバウンド対策企業ミーティング(村山慶介氏 株式会社やまとごころ 代表取締役)

第5回京商インバウンド対策企業ミーティング

最新動向から見るインバウンドのマーケットの動きから、
「モノからコトへ」外国人旅行者のニーズに対応するための戦略について考えます。

講演 村山慶介氏(株式会社やまとごころ 代表取締役)

旅行博での話

ジャカルタ旅行博にて

海外旅行博に出かけた時の話。
  • 観光のPRだけでなくガンガン物販していた
  • 日本企業が多々出展。
  • 着物を着て写真を撮るようなイベントを東京都が実施。(人気)
  • インドネシアからの訪日旅行は価格が高いのが現状(でも売れている)
北海道は台湾中国の観光客がほとんど。2割3割減ってきている。

台湾旅行博にて

神社が出展していた(東京大神宮)
旅行博に出てダイレクトに消費者とコミュニケーション

旅行博の意味合いの変遷

過去は旅行会社にチケットを預けておけば売ってくれた。
個々最近は売ってくれずに全部はけない。
団体から個人にシフトしてきているので、ダイレクトに消費者と接点を持たなければならなくなった。

ビジット・ジャパン, 日本ならではの体験

外国人の体験ツアーについて

欧米の方々(富裕層)に人気な体験は「相撲稽古みてちゃんこを食べる」

アニメとのコラボ(聖地巡礼)

日本のアニメとコラボした聖地巡礼
ベトナムでどら焼きが売れている
インドネシア人のスキな日本の食べ物 => 鮨天ぷらうどんどらやき
ドラえもんのおかげで人気のよう
普通に過ごしていても、海外の目線がないからわからない。
現地の方々の目線を理解すること が大事。

マーケットの動き

日本の旅行収支の推移
人口減少と国内市場の限界

インバウンド市場の魅力

  • プラスオンの市場
  • しがらみ、既得権益がない
  • 狙う市場や切り口次第で No.1 を目指せる

テーマを絞れば絞るほどそこは空き地

事例として「ひたち海浜公園」が挙げられた。
1枚の写真1枚がWeb 上で拡散され、あっという間に有名になった。
1年間で観光客数 9.3倍に伸びた。



外国人観光客からみた日本の観光スポットといえば、「ゴールデンルートとひたち海浜公園」

爆買いは終わったのか?

中国人観光客の消費単価は年々下がってきている。
化粧品日用品に関しては下がっていないが。
昨今の円安のおかげで売上が落ち込んでいた高単価な商品はもどってきた感はある。
一人あたり消費額は減少しているものの、他の国よりも依然として中国人観光客は高い購買力があるので無視できないマーケット。
日本でしか買えないもの、日本で買う付加価値の創出が鍵。

世界の観光客数と成長予測

インバウンドに起きている変化。
「バブルではない、トレンド」 中長期的視点でインバウンドを捉えるべき。

インバウンドに起きている変化は?

団体から個人へ

団体観光を利用する中国人は 2013年6割、2016年4割と減少傾向。

狙うターゲットを絞る

趣味層、ムスリム、中級層、富裕層、ビジネス層、家族層、etc...
外国人観光客と行っても一網打尽はない。
ニーズの多様性を捉えてうまくマッチングしていく必要がある

都市部から地方へ

日本地図をおいて、行きたいところ、行ったところにシールを貼ってもらう調査をした
=> 「リピーターの行動範囲はさらに地方へ」

モノからコトへ

娯楽サービスについての消費は全体の 1% 程度。
消費の多くを占めるのはモノ。
コト体験はあくまでフック。「コト体験 + モノ」が重要。

キーワードは「ローカル」

集客するのに金も時間も掛かる。
プラットフォーム「Voyagin, viator」とかに載せたりしてうまく使う。

(例)岐阜羽島の刀鍛冶

1日44000円、1組のみ。大満足の口コミ。

訪日観光3つの価値

  • 日本人の気質
  • 日本人の作品
  • 日本人の生活

外国人目線でストーリーを考える

  • 甲冑はどんなのが人気?
    • NHKで放送中の真田幸村ではなく、「ダースベイダーのモデルである伊達武者」
  • 外国人の頭の中を客観的に覗く
    • Google Trends, 画像検索, Inbound Insight を活用した地域資源の発掘
売っていきたいもの・販売したいコンテンツで検索すると、
外国人がなにを求めているかが客観的なデータから把握できる。

外国人観光客による不満ランキング

  1. 外国語サービスが少ない
  2. 無料WiFi の整備が遅れている
  3. 食券システムがわからない
  4. 飲食店で食べ方を教えてくれない
  5. 現金しか使えない

商業施設における外国人観光客からのクレームは?

「無視されていると感じること」 店員さんは語学に自信がなくて避けがち。。
対策としては、
  • 多言語でポップをする
  • 指差しツールを使う
なと、ツールを活用すれば店員さんも、お客さんも気が楽です。

売り逃しを防ぐ

欧米とアジアのお客さんの買い方に決定的な違いがある。 買い方を捉えた売り方を考えるべき。
  • 欧米人) いろいろとうんちくを語らないといけない
  • アジア人) 高いものから買う傾向にある

話に出てきた気になるサービスまとめ

  • やまとごころ.jp
    • 村山氏が運営している Web サービス
    • 各国の観光・旅行に関するマーケット情報や、インバウンドに関する情報が沢山掲載されている
  • Voyagin
    • 現地ならではのローカル・かつユニークなご当地ツアーをカンタンに検索できる旅行体験のフリーマーケット
  • Viator
    • Voyagin と同様に旅行体験のフリマ的なアプリ?
  • Google Trends
    • もはやいわずもがな。人の検索履歴から、どんなことに関心があるのか・どんなものと関連が深いのかがわかるサービス
  • Inbound Insight
    • これは知らなかった。
    • 訪日外国人観光行動分析ツール。
    • SNS 上でのツイート・投稿を収集して、いつどこでどんな内容が発信されたかを検索可能にしているサービス。
    • 無料でもある程度使えるっぽいけどあまり詳細はわからない。


2016年11月13日日曜日

【桂川】肉汁ブッシャー!手づくりハンバーグの店とくら 桂本店

京都界隈で有名な手作りハンバーグの超人気店

「手づくりハンバーグの店 とくら 桂本店」



箸を少し入れるだけで溢れ出てくるとウワサの肉汁。
この目に焼き付けてきましたのでまとめておきます。

日曜のお昼ごろ伺いましたが、
人気店ということもあって混み合っておりました。。
でも、わりと店員さんの手際の良さのおかげか、
お客さんの回転率が良くそんなに待たずに入れました。



店内はオープンキッチンで、
対面のカウンター席が8人くらいと、テーブル席が全部で20席ほどあります。  

メニューはハンバーグ中心で、ソースがいろいろと選べる様子。

私はスタンダードな
「オリジナルハンバーグ 300g (900円) + 洋風セットのスープ・サラダ・ご飯 (450円)」
を注文しました。

ハンバーグを焼く際は、ヘラで押さえつけたりはせず、
じっくりと蓋をして焼き上げている感じ。  

焼き上がりはふっくらと丸く膨らんでいて、
肉汁が中に閉じ込められてとてもジューシーな仕上がり。

記念にウワサの肉汁がぷっくりとしたハンバーグから溢れ出す様を動画に収めました。  
お箸を入れた瞬間に溢れ出してとまらない肉汁。  



程よい酸味の効いた特製ソースとの相性は抜群で、
とってもジューシーなハンバーグで、至福のひと時でした。
リピート必至です。

デキるビジネスマンの「超・箇条書き」スキルを身につける

箇条書きってなぜ重要?

凡庸にして最強のスキル、それが箇条書き。

情報過多の時代。
ニュース配信サイトやまとめサイトの人気の高まりからもわかるように、短く魅力的にまとめることが求められています。

箇条書きには「読み手や聞き手の情報処理の負荷を減らす」機能があり、
今の時代に強く求められるスキルになりました。

日本では箇条書きを習うシーンはほぼ皆無ですが、
海外では箇条書きはロジカルシンキングと同じくらい重要なスキル。
「bullet points」とか呼ばれてます。

うんうん、強く求められるスキルなのはわかった。

じゃぁどうやってそのスキルを上げるのか...?

「超・箇条書き」という本にその答えが書かれています。




この本では大きく 3つの技術を挙げています。

その技術要素は

「構造化」
「物語化」
「メッセージ化」

です。


構造化

受け手が全体像を一瞬で理解できるように、情報のレベル感を整えることが構造化です。

そのための手法として
「自動詞と他動詞を使い分ける」
「直列と並列で考える」
「ガバニング」
があります。

自動詞と他動詞を使い分ける

ある瞬間の静止画、すなわち「状態・現象」を伝える場合は自動詞を使います。

* コップが落ちる
* ボールペンがある

ある瞬間の動画、すなわち「行為」を伝える場合は他動詞を使います。

* 私はコップを落とす
* あなたがボールペンを置いた

これを全体で統一してグルーピングの指針とすることで、箇条書きを構造化します。

そこで初心者がやりがちなのが「体言止め」

超箇条書きでは体言止めはご法度です。

理由は、体言止めというのは多義的であり、曖昧だからです。

たとえば「コストの低下」といったときに、
]コストが下がった事実なのか、将来的にコストを下げるのか、はたまたはたまたコストを下げているところなのか。。。
そもそも状態を表すのか行為を表すのかも不明なのでご法度です。

直列と並列で考える

箇条書きのつながりに時間が流れていれば直列型で、過去・現在・未来といったグルーピングをして順番に伝えます。

時間が流れていない場合は、カテゴリ別に列挙して伝えます。

ガバニング

「ガバニング = Governing = 統制する」の意。

頭出しで「ポイントは3つ」といったまとめを宣言することで、受け手が全体像をいち早く把握できるようにします。

物語化

抽象度が高いものをそのまま伝えても、
生々しさがなく、イメージが湧かずに印象に残らない。

物語化は、相手の興味関心を想定して、
どんなコンテキストに置かれているかを想定して行います。

ポイントは、
「イントロづくり」
「MECE崩しで考える」
「固有名詞を使う」
の3点です。

イントロづくり

相手がなにを一番知りたいか、自分が何を一番伝えたいかを考え、
コンテキストに合わせて柔軟にストーリー構成を練ります。

MECE崩しで考える

ロジカルシンキングでは MECE であるべきと言われていますが、

不要・冗長な情報についてはまとめる or スキップして MECE を崩しても良いようです。

固有名詞を使う

定量的な数値・固有名詞を使って話に具体性をもたせ、印象に残るようにします。

メッセージ化

なにか伝えたい事があるときに淡々と情報を提供するだけで、
受け手側が「で、それで何?」って何って事態に陥らないように、

なにに賛成・反対なのかのスタンスを取って物事を伝えることをメッセージ化を行います。


隠れ重言を排除する

明らかな重言(= 頭痛が痛い、顔を洗顔する、etc) は誰でも避けると思いますが、、

コンテキストから明らかなことをあえて書く、隠れ重言はやってしまいがちです。

スポーツの世界で、
「そろそろ得点がほしいイニングです」「ここでゴールがほしいところですね」
といったスポーツ実況がまさにそれです。

言わなくてもわかる自明なことを言って、
何か言った気になるという無意味なことは避けましょう。


否定を使う

伝える内容にコントラストを与えるため、「何を否定しているかを明示」します。

そうすることでストーリーにコントラストが生まれ、自分のスタンスがヴィヴィッドに相手に伝わります。

数字を使う

伝えることの彩度が上がって印象に残るように数字を意識的に使います。

例:
* ×お客様に喜んでもらえる商品を作ります
* ○ 3年以内に 5つ以上の新商品を作ります

2016年7月16日土曜日

Django on Heroku 最速セットアップ手順書

ソースコード

* まずはじめに読むべき資料
  Heroku が提供しているサンプルコード に機能追加する方法で進めると楽

* リモートに Push する前にセキュリティ周りの設定を確認する
- settings.py の DEBUG が False か,  etc

知っておくと便利な Tips

# heroku 上でアプリを破棄 & 生成
$ heroku destroy app_name
$ heroku create app_name

# ローカルの sandbox ブランチを heroku のマスターブランチに push
$ git push heroku sandbox:master

# アプリにアクセス
$ heroku open

# リモートリポジトリを操作( heroku run <command> )
$ heroku run ./manage.py migrate

# スーパーユーザーの作成
$ heroku run ./manage.py createsuperuser

2016年7月8日金曜日

Atom チートシート

  • dotinstall の Atom 入門やってみた。
  • 1時間くらい見て、自分にとって有益そうなものをまとめてみました。

  • コマンドパレット(Command+Shift+p)

  • ファイル検索(Command+t)
  • 文字列の検索・置換(Command+f)
  • 次の検索結果へ(Command+g/Command+Shift+g)
  • 全体からの検索・置換(Command+Shift+f)

  • 指定行への移動(Control+g)

  • マルチカーソル(Command+Click or Command+Option)

  • パネルの分割(Command+k 矢印)
  • パネル間の移動(Command+k Command+矢印)
  • パネルを閉じる(Command+w)

  • Markdown文書のプレビュー(Control+Shift+m)
Shell Commandsのインストール(Atom>Install Shell Commands)
  • atomコマンド
  • apmコマンド

2016年6月17日金曜日

Django @ Ubuntu

# port=80 を開いておく
sudo apt-get update
sudo apt-get install -y emacs git 

# 仮想環境のセットアップ
sudo apt-get install -y apache2 python3-pip python3.4-venv
python3 -m venv myenv
source myenv/bin/activate
pip3 install mod_wsgi-httpd
pip3 install django mod_wsgi
django-admin startproject proj

# サーバー側 (Apache) のセットアップ
# sudo emacs  /etc/apache2/apache2.conf の末尾に
Include hoge.httpd.conf 
# を追加





sudo apachectl restart
したあと、
curl http://52.197.57.214/
で動作確認。



# Mecab のインストール


sudo apt-get install -y mecab mecab-ipadic-utf8 libmecab-dev
sudo pip3 install mecab-python3




2016年6月15日水曜日

Amazon Linux(@ec2) 上に Python3.5 w/ django をセットアップ

http://hqac.hatenadiary.com/entry/2015/11/29/125634


# tmp以下はメモリに展開されるので高速
cd /tmp

# Python3 のセットアップ
wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz
sudo yum install -y gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

tar zxvf Python-3.5.0.tgz
cd Python-3.5.0
./configure --prefix=/usr/local/python
sudo make
sudo make install

# シンボリックリンクを貼る
sudo ln -s /usr/local/python/bin/python3 /usr/local/bin/python
sudo ln -s /usr/local/python/bin/pip3.5 /usr/local/bin/pip

# 仮想環境上で作業
cd ~/

python -m venv myenv
source myenv/bin/activate
pip install --upgrade pip


# 必要な物をインストール
pip install django

# アクセスできるか試す
django-admin startproject proj
python proj/manage.py runserver 0.0.0.0:8000

=> http://ipaddress:8000 でアクセス。
アクセス出来ない場合はセキュリティグループの設定で 8000 ポートが開放されているか確認

2016年5月29日日曜日

Django を mod_wsgi で Apache 上にデプロイする

* 公式ドキュメント読め
https://docs.djangoproject.com/ja/1.9/howto/deployment/wsgi/modwsgi/

* Apache 再起動しろ

$ sudo apachectl restart

* httpd.conf を編集しろ
- static ファイルのパスをエイリアスする
- wsgi モジュールのロード
- WSGIScriptAlias, WSGIPythonPath の設定
- アクセス権限設定
- db のファイルパーミッション変更
   $ chmod 777 -R db.sqlite3

# Added @ 2016/05/28
Alias /static/ /path/to/project/mysite/polls/static/
LoadModule wsgi_module /path/to/project/venv/lib/python3.5/site-packages/mod_wsgi/server/mod_wsgi-py35.cpython-35m-darwin.so
WSGIScriptAlias /wsgi /path/to/project/mysite/mysite/wsgi.py
WSGIPythonPath /path/to/project/venv/lib/python3.5/site-packages/:/path/to/project/mysite
<Directory /path/to/project/mysite/polls/static>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
 
    <Files wsgi.py>
    Require all granted
    </Files>
</Directory>
<Directory /path/to/project/mysite/mysite>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory> 

* サーバーが吐くエラー読め
$ tail -f /var/log/apache2/error_log 



* デプロイ手順メモ
$ git clone git@github.com:ks6088ts/sandbox.git -b feature/django
$ sandbox/

$ source setup.sh 
# project/settings.py の STATIC_ROOT を定義、STATICFILES_DIRSの static を削除した後、 python manage.py collectstatic
$ sudo apachectl restart
http://localhost/wsgi/admin/ にアクセス

2016年5月15日日曜日

Django チートシート

https://media.readthedocs.org/pdf/test-driven-django-development/latest/test-driven-django-development.pdf


* Virtualenv で仮想環境のセットアップ
(python3 で作りたいので適宜 $ alias python=python3 しておく)

- 生成: $ virtualenv venv
- アクティベート: $ source ./venv/bin/activate
- モジュールのインストール:  $ pip install django
- requirements.txt の生成: $ pip freeze > requirement.txt
- requirements.txt からインストール: $ pip install -r requirements.txt 

* git 設定関連
- ignore ファイル生成: $ echo "*.pyc" > .gitignore

* Django でサイトを作る
- 雛形作成: $ django-admin startproject project
  (移動 cd myblog)
- DBファイルの作成: $ python manage.py makemigrations
- DBファイルの反映: $ python manage.py migrate
- スーパーユーザー作成: $ python manage.py createsuperuser
- サーバー起動: $ python manage.py runserver

* アプリを追加
- 雛形作成: $ python manage.py startapp app


2016年5月14日土曜日

コードスニペットを環境セットアップ要らずに超速実行する Tips

エンジニア間でのサンプルコードの共有に便利なツールがあったのでメモ。
repl.it とかいうウェブサービスです。

出会いの背景:
業務でフランス人エンジニアと協業するようになり、
Pull request のレビュアーに追加したところ、
You'd better do just as <LINK> ... みたいなチャットが飛んできた。

クリックするとサンプルコードが書かれたウェブサイトに飛んだ。
C++ のコードが書かれてたんだけど、
ウェブ上で実行できるのねこれ。
コードスニペットの簡単な実行とか、
この文法C++11 からだっけ?みたいなちょっとしたサンドボックスとして結構便利でした。
https://repl.it/CQfp

2016年4月17日日曜日

Selenium で ChromeDriver を操作してみる by Python

Rakuten への自動ログインのサンプルスクリプト


* やること

- ログインページにアクセスして、ユーザーID・パスワードの id タグを割り出す。
  => userid, passwd であることがわかる。

- ユーザーID・パスワードを入れて submit する処理( @login() )を実装
 => 適当なユーザーID・パスワードを引数指定。成功するとログイン完了。

- Chrome Driver をダウンロード
 Firefox の場合は Selenium にChromeDriver のパスを指定する必要があるので、path_to_driver に設定します。
ChromeDriver は以下のリンクからダウンロード。
https://sites.google.com/a/chromium.org/chromedriver/downloads

2016年3月28日月曜日

Tensorflow on Docker

Tensorflow を Docker で実行する手順:

* Docker quick start terminal を起動

* ポート指定・デーモン起動
- docker run -itd -p 8888:8888 b.gcr.io/tensorflow/tensorflow

* jupyter 接続
- http://Docker コンテナ側の ip アドレス:8888

2016年3月23日水曜日

Webスクレイピング with Python ~ BeautifulSoup + Requests ~

requests モジュールで HTTP リクエスト。
BeautifulSoup でパース
ってな感じに鬼のように簡単に url とタイトルをぶっこ抜いてみます。
抜き出したいリンクは "entry-link" というクラス名がついている a タグです。


2016年3月6日日曜日

橋下徹さんの話を聞いてきた。

雑多なメモ:


パッション
一生懸命やって初めて少しだけ上層部に少し伝わる

差別化
他の人の発言は調べ上げて同じこと言わない。テレビでの話。
営業して、何時でも働いた。
他の人の数倍の速さで問題解決する。

その他
仕事とは自分が成長するためのもの。
仕事を通して何が学べるか。
官僚の残業は国会質疑応答の想定問答作らされたり、非効率なことをさせられてて可哀想。

2016年2月7日日曜日

メモ:

$ apt-get -qq update
$ apt-get install -y git
$ git clone https://github.com/aymericdamien/TensorFlow-Examples
$ ipython notebook
$ tensorboard --logdir="<path to log dir>"

Docker コンテナ上で Tensorflow を触ってみた

Google の TensorFlow とかいうディープラーニングモジュールを触ってみる。
ホストPC(Mac) に依存関係を意識して個々のモジュールをインストールするのが激しく面倒なので、開発環境はDocker使います。

* Docker を使うと、ホストPCと隔離された環境でアプリケーションが実行できます。必要な開発ツールがインストール済みのイメージがクラウドに上がってるのでそれ使います。(依存関係の解決とか、いろいろクソ面倒なステップをスキップできて幸せです)

# boot2docker を始めは使っていましたが、deprecated な warning がコンソールに履かれてたので、docker-machine に移行しました。

資料
* 簡単に大雑把に把握する目的で dotinstall の Docker 入門
  http://dotinstall.com/lessons/basic_docker

* 一冊くらいは薄い本読んでおく


セットアップ

ホストPC側

* ポートフォワーディング設定(8888はipython向け、6006はtensorboard向け)しつつ tensorflow インストール済みのイメージを実行
  $ docker run -it -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow /bin/bash



* Virtualbox のポートフォワーディング設定をします( 8888, 6006 )

* コンテナの全削除
 $ docker ps -aq | xargs docker rm

Docker コンテナ側
  $ ipython notebook
  $ tensorboard --logdir=<PATH_TO_LOG_DIR>

プログラミング
http://localhost:8888/notebooks/Untitled.ipynb にアクセス。
matplotlib の動作確認。インライン描画の確認。

%pylab inline
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-3, 3, 0.1)
y = np.sin(x)
plt.plot(x, y)

2016年2月6日土曜日

冬の最新行列グルメ 待ち時間ランキング @ SmaSTATION 2/6 放送分

2月6日のSmaSTATION!! でやってた『冬の最新行列グルメ 待ち時間ランキング』をまとめておきます。

真冬の行列グルメ待ち時間ベスト10

第10位 香川一福 (東京都) 13分18秒



第9位 のど黒めし本舗 いたる (石川県)15分3秒


第8位  門司港名物 焼きカレー (福岡県) 26分15秒


第7位  あさ利 ネギラーメン (青森県) 37分49秒


第6位 あげづき (東京都) 38分20秒


第5位  愛と勇気と炎の拉麺屋たいらん (宮城県) 40分14秒





第4位 牡蠣ハウス マルハチ (福岡県) 54分55秒



第3位 幸せのパンケーキ 表参道店 (東京都) 1時間4分2秒


第2位 小さな小さなラーメン屋 春紀 (新潟県) 1時間13分56秒

第1位 いろり家 (神奈川県) 1時間23分42秒



2016年1月30日土曜日

ヤフーデータサイエンスワークショップに行ったメモ



角田直行さん
Data infrastructure at scale

Yahoo のインフラの話
規模の紹介
100以上のサービス 日本の7割の人が使ってる
Dub ブラウザごとにカウントしたアクセス数5億

支えるデータインフラ
データパイプラインにおいて
使用しているツール
テラデータ Storm Hadoop 
Oracle MySQL Cassandra 
ロギング対象 15000 nodes
Hadoop 7000nodes

スマスマ会見時トラフィック 200億リクエスト
去年の同じ日で60億弱だから3倍以上。


これからの挑戦
指数関数的な扱うデータの増加
Hortonworks と協業してHadoop の改善
オープンソースへの貢献
オープンハードウェアへの貢献
Open compute project
海外データセンター
電力的なコスト



爆速機械学習サービス応用編
Arxive.org(間違っとるかも)
ベイジアンフィルタ的な話。


Kibana + elastic search 

なぜビッグデータが選挙の予測を可能にするのか
ヤフービッグデータレポート
検索クエリは人の興味関心の分析に向いている
感情分析はtwitter の方が向いている
必要な目的に応じて様々な目的に対応したデータを活用する

Python で Slack bot の実装をしてみた

Slack の bot ツールでは以下の curl コマンドでメッセージ送信ができる。

Example

$> curl --data "Hello from Slackbot" $'https://<hoge>.slack.com/services/hooks/slackbot?token=<token>&channel=<channel>'
ok
token をパラメータ設定して、データをおみやげにして POST すればメッセージが送られるとのこと。
かなり簡素(Authとか不要)なので勉強のため、Python スクリプトでメッセージ送るスクリプトを書いてみた。
使い勝手とかマジで糞だけど python に慣れるためということで。。

https://github.com/ks6088ts/SlackTool


だいぶ脱線して、以下のこともついでに勉強してた

json ファイルの読み書き
tokenとか見ちゃダメなパラメータ群はまとめて json ファイルに。
Pythonの基礎 ファイル(JSON)の読み込み編
これ参考にしてしまったけど、本来は with 使ってスコープ外れたらリソース開放みたいにナウい感じに書きたい。

Optionparser 機能
help とかあったほうがいいよねと思いたち、追加で実装。
使い勝手がまだ糞だけど使えることは確認した。
必須オプションが抜けてたら死ぬ機能は無いんかな。。。?
https://github.com/ks6088ts/SlackTool/commit/ef2272ca434f2548e1c7195785615558991c0747

パッケージ生成
slack の仕様に依存する処理はまとめてパッケージにしてみた。
ユーザーコード側には抽象化したインタフェースを提供する意図で。
__init__.py をおいて、from package import file_name って感じにロードすればOK
https://github.com/ks6088ts/SlackTool/commit/1bf346bb3d23d0b4601a5df01d6f966d028c156d


とりあえずスクリプトは動いた。
あとやりたいことはこんな感じかな。

- unittest を travis ci で回す
- cron で定期的につぶやく
- 機械学習的なバックエンドを実装していい感じの文章を生成する
- webhook 周りの機能追加

2016年1月26日火曜日

cURL で web 上のコンテンツを自動ダウンロードする

$ curl http://example.com/index.html -O すればダウンロードできるとかいうけど、
実際はそんなうまくいかない場合もある。
某動画サイトで cURL つかって動画のダウンロードを上記要領でやったらうまくいかなかった。


Chrome の developer tool 使って、Network タブからどんな HTTP リクエストがやり取りされているか見てみた。
やたらリダイレクトされてた。


-L つければ余裕かとおもいきやそうでもなかった。
Header を偽装すれば行ける?いやいけない。


こまったのでいろいろ調べてたら、
Chrome にはユーザー操作で発生したリクエストを cURL コマンドで教えてくれる便利機能があった。

Chrome Feature: Copy as cURL


(LORNAJANE Blog より引用)


右クリックでコピーして terminal にペーストして Enter。
万事解決した。
とりあえず複雑な処理してたら -L つけて、
データ取得のために -O つければ幸せになれます。

HTML ソースから、ファイル名の規則とかディレクトリの構成を推測すれば、
欲しいものだけ連番ダウンロードできて幸せになれたりします。
ということで

curlコマンドで連番サイトの全データを取得する

もリンクしておきます。


めでたしめでたし。

Django 高速学習


参考になったページ:

Python Django チュートリアル
 読みやすい。
 このチュートリアルを追ったリポジトリがこれ。自分の復習用。
 https://github.com/ks6088ts/DjangoTutorial

ファイルの文字コードをUTF-8に変換
 "UnicodeDecodeError: 'utf-8' codec can't decode byte" 的なエラーが出た。
 template として使っていた html ファイルのエンコーディングが違ってたというオチ。
 utf-8 に変換ってどうやるんだと困ったときに参照。

Test-Driven Development with Python
 テスト駆動開発と Django が同時に学べるすぐれもの。
 地味にテスト実装とか参考になるのでおすすめ。
 私はいきなりこれを読んだけど、日本語文献ということで Python Django チュートリアルの記事をはじめに読むのをおすすめします。


2016年1月23日土曜日

EC2 上で Django on python3 の開発環境作る話。

GitHubにSSH接続できるようにする方法

    1  sudo yum update -y
    2  cd ~/.ssh/
    3  ssh-keygen -t rsa -C test@gmail.com
    4  sudo yum install -y emacs git
    5  emacs ~/.ssh/config
    6  chmod 600 id_rsa config
    7  cat id_rsa.pub # 公開鍵を github 側に登録
    8  ssh -T git@github.com

===============================================

Python3.4 のインストール
$ sudo yum install python34-virtualenv -y

Python2->Python3 への変更処理

$ python --version
Python 2.7.10
$ sudo alternatives --set python /usr/bin/python3.4

$ python --version
Python 3.4.3
$ pip --version
pip 6.1.1 from /usr/lib/python3.4/dist-packages (python 3.4)

===============================================

dotfiles の設定


   36  git clone git@github.com:username/dotfiles.git
   37  ln -s /path/to/dotfiles/.emacs.d ~/
===============================================

番外編


Selenium 上でのテストコード実行のため

===============================================

2016年1月21日木曜日

TravisCI で Github のリポジトリを自動テストに通す

簡単な yaml ファイル書くだけで自動で CI が回る、そんな時代。
https://docs.travis-ci.com/user/languages/python

TravisCI とのインタフェース

.travis.yml をリポジトリルートに置く。
python のコードをテストしたかったけど、いろいろテスト環境作るために依存モジュールのインストールスクリプトを書く必要がある。

依存モジュールの吐き出し
Python テスト環境の切り出しのために依存しているモジュールのピックアップが必要だったので以下のコードで環境を吐き出す。
$ pip freeze -l > requirements.txt

吐き出したモジュール群は
$ pip install -r requirements.txt
でインストールできる。これを .travis.yml の install: に書けば OK

Github のリポジトリにバッジつける
TravisCI のページに行って、バッジクリックすると Markdown のコードが取得できる。
これをREADME.md に追記すればOK.

2016年1月17日日曜日

wget でルーターに Basic 認証してみる



Basic認証

wget で Basic 認証を試してみる。
# Buffalo のルーターで Basic 認証して再帰的にページをダウンロード
$ wget --http-user="root" --http-passwd="" http://192.168.11.1/ -r


Django で静的ファイルを参照できるようにする

Django で生成される動的なコンテンツと、静的ファイルベースで作成されたページ群を分離してリポジトリ管理するための更新作業メモ。

方針
- 静的ファイルのページ群をDjangoプロジェクトから切り出す
- Django のリポジトリに外部リポジトリとして追加する

Django 側の設定
project/settings.py に以下のコードを追加
# Static files directory
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static/static_repo"),
]

外部リポジトリの追加
$ git submodule add <リポジトリのURL> <生成先>
生成先を project/static/static_repo とする。

リポジトリのクローン
外部リポジトリは --recursive つけると自動的に clone してくれる
$ git clone git@github.com:username/repo.git --recursive

2016年1月6日水曜日

emacs の dotfiles を github で運用してみる


* Github に .emacs.d 以下のコードを置く

上のリポジトリを適当なディレクトリに clone (ここでは ~/repo/dotfiles)

* シンボリックリンクを貼る
$ ln -s ~/repo/dotfiles/.emacs.d ~/