Homebrewを使ってMacにPostgresqlをセットアップする

今後Herokuを本格的に使っていくことにしたので、Postgresqlのセットアップをメモしておく。

Postgresqlをインストールする

brew install postgresql

初期化

initdb /usr/local/var/postgres -E utf8

データの保存先の設定

.bashrcまたは、.zshenvに書く

export PGDATA=/usr/local/var/postgres

Postgresqlの起動/終了

起動
pg_ctl -l /usr/local/var/postgres/server.log start

終了
pg_ctl -D /usr/local/var/postgres stop -s -m fast

自動起動の設定

mkdir -p ~/Library/LaunchAgents
cp /usr/local/Cellar/postgresql/your_installed_version/homebrew.mxcl.postgresql.plist
~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

ユーザーの作成

psql -U username password

データベースの作成

createdb foo

データベース一覧を確認する

psql -l

art.furodriveを公開しました。

このたび、art.furodriveを公開しました。

作ったきっかけ

最近絵を描く練習をしているんだけど、そういった絵がスケッチブックの中にずっといて、公開されないのはもったいない。 せっかく頑張って書いているんだから、ちゃんとあとから見返すことができるような仕組みにしたい、と思ってこのサイトを作りました。

技術的な仕組み

サクッとFlask+SQLiteで作りました。ORMにはFlak-SQLAlchemyを使用しました。また、画像のホスティングはAmazon S3を使用しています。 運用方法としては、某ディレクトリに画像を突っ込んで、

fab upload

とするだけで本番環境にデプロイできます。 簡単に運用できて便利。

Macのtmux内で動かすVimで快適にコピペを行う。

tmux便利だったけど、vim内でコピペが出来なかったのが最大のストレスになって、 tmuxの中でvimを使うのを控えていたけど、今回の件で解決できたのでメモ。

1. システム標準のVimをmacvimに置き換える。

brew install macvim --override-system-vim

2. Paul Hinzeさんのすごいライブラリをインストールする。

brew install reattach-to-user-namespace --wrap-pbcopy-and-pbpaste

3. .tmux.confに以下のコードを挿入する。

set-option -g default-command "reattach-to-user-namespace -l zsh"

4. .vimrcにてCtrl+Cキーでクリップボードにコピーできるようにする。

set clipboard=unnamedplus,autoselect
vmap <C-c> :w !pbcopy<CR>

今まで散々2,3,4はやってきた経験あるけどうまく行かなかった。 1を実践したら、すんなり動作したので標準のvimの挙動に何か問題が会った模様。

とにかく幸福が実現してよかった。Happy Coding!

理想のメモ帳について

最近は理想のメモ帳を考えている。 昨日思い切ってDayOneというアプリを購入したけど、やっぱりなんか違う。 もっと使いやすいのがほしい。

以下の機能がほしい。

  • いつも使っているテキストエディターからメモを編集できる。
  • 書いた記事を公開することができて,ブログ記事にもできる。
  • Gmailのようにアーカイブがほしい。
  • tag検索機能

これらをすべて満たしたデスクトップアプリは存在しない。 誰も作らないんだったら、自分で作るしか無いのかな。 もうちょっと探してみる

BeautifulSoupを使ってスクレイピングをしてみる

そもそもスクレイピングとは?

わかりやすく説明すると特定のWebサイトをプログラミングによって必要な情報を取得したりする行為のことです。 スクレイピングが行えるようになるとムフフなサイトからムフフな画像の取得をプログラムを実行するだけで行えるようになります。

スクレイピングを始める

Pythonのことをあまり知らない人にPythonの基本文法のまとめという記事を書いたので これを読むと他の言語を触ったことがある方は雰囲気がわかると思います。

今回はスクレイピングをするためにBeautifulSoupというライブラリを使ってみます。 BeautifulSoupを知らない方に説明するとBeautifulSoupはPythonで動作するHTMLとXMLのパーサーです。

これを使用することでjQueryみたいにHTML/XMLの要素の取得を簡単に行えるようになります。pipを使ってインストールを行うのですが、pipが入っていない方は

python -m ensurepip

を入力するとpipがインストールされます。 次に

pip install BeautifulSoup

でBeautifulSoupをインストールしましょう。 またHTTP リクエスト操作を簡単にするrequestsもインストールしておきましょう。

pip install requests

スクレイピングの基本

BeautifulSouphtml(html_body) のインスタンス変数をhtmlのソースを引数に作成しそのインスタンスに対して希望の要素をfindメソッドを使って抽出するのがおおまかな流れになります。 説明を長々とするよりコーを見たほうが直感的にわかりやすいので以下のコードを見てください。


import requests
from bs4 import BeautifulSoup

url = "http://furodrive.com/"
r = requests.get(url)
# エンコーディング情報を入れておかないと、Webサイトに寄っては日本語が文字化けする
soup = BeautifulSoup(r.text.encode(r.encoding))
#h1要素を抽出
title = soup.find("h1")
print(title)
 
このコードを実行してみましょう。
furodrive
という実行結果が画面に出力されるはずです。 上のコードは当該ブログのh1要素を取得するプログラムになっています。 また、find(“h1”)メソッドはh1要素を一つだけ取得しますが find_all(“h1”)はすべてのh1要素を取得します。 他にも
<img src="/hogehoge"></img>
のようにimg要素内のsrcを取得したいときは,
soup.find("img").get("src")
クラス名で絞り込みたい場合は,
soup.find("div",{"class":"tags"})
のように行います。

(実践) Yahoo翻訳を使って調べたい英単語を翻訳してくれるプログラムを書いてみよう!

最後に少しスクレイピングを使ったためになるコードを書いてみたいと思います。 以下のプログラムはYahoo翻訳を使って調べたい英単語の意味を教えてくれるスクリプトです。


import requests
from bs4 import BeautifulSoup
from flask import jsonify
def make_soup_from(url):
r = requests.get(url)
html = r.text
soup = BeautifulSoup(html)
return soup

def translate_from_yahoo(word):
url = "http://kotobank.jp/ejword/{}?dic=pej4&oid=SPEJ00339000".format(word)
soup = make_soup_from(url)
res = []
explains = soup.find_all("div",{"class":"explain"})
for explain in explains:
res.append(explain.text.replace("\n",""))

return "\n".join(res)

if __name__ == "__main__":
word = input("type your word?\n ")
print("result is ")
print(translate_from_yahoo(word))

上記のプログラムを走らせると以下の結果が出力します。
$type your word?
> apple

result is 
[名]                  
1 リンゴの実[木]. ▼リンゴの木はapple treeがふつう                  a red-cheeked [a green] apple真っ赤な[未熟な]リンゴthe keep-the-doctor-away apple医者いらずのリンゴ(▼An apple a day keeps the doctor away. 「1日にリンゴ1個で医者いらず」ということわざから).
2 リンゴと同属で種が違う果実;その木                  a crab apple野生リンゴ.
3 リンゴに似た果実(custard apple, oak apple, May appleなど).                  
4 (形・大きさ・色などが)リンゴ状のもの;((略式))(野球の)ボール.                  
5 ((ふつう形容詞を伴って))((米俗))やつ, 仲間                  a sad appleいやなやつBe a smart apple and drive carefully.((標語))利口者は安全運転.
6 ((俗))刺激のある街, 繁華街;大都会.                  
7 ((米俗))(精神安定剤がはいった)赤いカプセル.                  
apple of a person's eye
((the ~))                  
(1) 目に入れても痛くないもの.                  
(2) ひとみ.                  
apples (and pears)
((押韻俗))階段(stairs).                  
mix [compare] apples and oranges
いっしょにしてはいけないものを混ぜる, 比較にならないものを比較する.                  
she's apples
((豪・NZ略式))万事順調だ.                  
the apple of discord
(1) 《ギリシャ神話》不和のリンゴ:トロイ戦争の原因となった黄金のリンゴ.                  
(2) 争いの種.                  
[古英語æppel(リンゴ). △ドイツ語Apfel]

最後に

これで基本的なスクレイピングで困ることはないと思います。もっとBeautifulSoupについて知りたい方は公式のドキュメントを読んでみましょう また、この記事をきっかけにしてPythonについて色々と学んでみたいという方は Python文法詳解がおすすめです。