VoiceText Web API のPythonラッパーを書いた

先日公開されたVoiceText Web APIPythonラッパーを早速書いてみました。

https://github.com/who-you-me/pyVoiceText

本体はワンファイルなんで、ここにもコード貼り付けちゃいます。

#-*- coding: utf-8 -*-

import json
import requests
from requests.auth import HTTPBasicAuth

class VoiceText(object):
    VERSION = "v1"
    URL = "https://api.voicetext.jp/%s/tts" % VERSION

    def __init__(self, key):
        self.key = key

    def fetch(self, text, speaker, out=None, emotion=None,
              emotion_level=1, pitch=100, speed=100, volume=100):
        params = {
            "text": text,
            "speaker": speaker,
            "pitch": pitch,
            "speed": speed,
            "volume": volume
        }
        if emotion:
            params["emotion"] = emotion
            params["emotion_level"] = emotion_level

        wave = self._request(params)
        if out:
            self.save(wave, out)
            return True

        return wave

    def _request(self, params):
        auth = HTTPBasicAuth(self.key, "")
        resp = requests.post(self.URL, params=params, auth=auth)

        if resp.status_code == 200:
            return resp.content
        else:
            content = json.loads(resp.content)
            message = content["error"]["message"]
            raise Exception("%s: %s" % (resp.status_code, message))

    def save(self, wave, out):
        with open(out, "wb") as f:
            f.write(wave)

使い方はreadmeに書いてあるんでそっちを見てください。

PyPiに登録したので、pipでインストールできます

$ pip install pyVoiceText

デザインを変えた

ブログのデザインを変えました。

最近はこちらはほぼうpしておらず、技術ネタは主にqiitaに書いております。ではこちらはこのまま放置のままかと言うとそうではなく、純粋な技術ネタ以外の、最近エンジニアやって感じてることとかを書いていこうと思います。

本音は「昔はTwitterで愚痴垂れ流してたけど、最近はリアルの知り合いが随分多くなってきてアレだから、誰も見てないだろうここに書いちゃえ」ですw

GistBoxを使ってみる

最近は技術ネタはQiitaに書いております。

それはいいんだけど、ブログにせよ、Qiitaにせよ投稿しようと思ったらある程度まとまった内容が
必要で、ちょっとした小ネタやTips、思いつきをそのまま書き散らかすには向いてないですよね。

とはいえどっかに書いとかないと、何度も同じ事調べたりする無駄が発生しちゃいます。
Evernote使えよという声が聞こえてきそうですが、我が愛機はUbuntuなのでよさげなEvernote
クライアントがないのが痛いところ。

Gistが良いんじゃないかとアタリをつけたんですが、どうもGistは検索周りが弱い印象。

ですが、この弱点を解消してくれるよさげなサービスを見つけました。

その名もGistBox

http://www.gistboxapp.com/

githubアカウントでログインすると、自分のgistがよさげなUIで管理できるようになります。
もちろん全文検索できるし、ラベルを付けたりもできるのでこれで自分の問題は解消されそう。

まだ使い始めたばっかなので、なんかノウハウ溜まってきたらまた書きます。

TokyoSNAの発表資料をまとめてみた

最近はQiitaに移行しつつあってこちらは更新してませんが、たまにはなんか投下しようかと。
去年自分がやってた勉強会の資料をまとめてみました。
今思えば第一回の資料とか若気の至りで恥ずかしい限りですが、あの時若さに任せて思い切ってやってみた結果、知り合いも増えたし視野も広がったし、よかったかなあ、と(あれ真面目?)

社会ネットワーク分析勉強会 #1

http://atnd.org/events/29767

#1 でナンバリングしてたら、Twitterだとハッシュタグ扱いされる事に気付いて2回めからは普通に「社会ネットワーク分析勉強会 その◯」になりましたとさ。

社会ネットワーク分析勉強会 その2

http://atnd.org/events/30431

LT

資料が見つからぬ

社会ネットワーク分析勉強会 その3

http://atnd.org/events/30600

LT

発表者の方が来られなくなって中止だった。気がする。

社会ネットワーク分析勉強会 その4

http://atnd.org/events/31128

4章

社会ネットワーク分析勉強会 その5

http://atnd.org/events/31314

LT

資料なしだった気がする。

社会ネットワーク分析勉強会 その6

http://atnd.org/events/31909

LT

資料が見つからぬ

社会ネットワーク分析勉強会 その7(第1期最終回)

http://atnd.org/events/32299

7章


LTの資料が見つからぬ、、、当時からこの辺の管理ちゃんとしとけばよかった、、、
あと「第1期最終回」ってあるけど2期はいつやるんですかね、、、

ElementTreeでEUC_JPとかShift_JISのxmlを読み込む方法

PythonXMLを操作したい場合はElementTreeってのを使うといいらしいです。
ところが、euc-jpとかsjisエンコーディングされたテキストをElementTreeに食わせようとすると

xml.etree.ElementTree.ParseError: unknown encoding: line 1, column 30

とかほざきやがります。euc-jpもsjisも知らないらしいです。アメ公ふざけんな。

ここから対処法

XMLの1行目にXML宣言が

<?xml version="1.0" encoding="euc-jp"?>

こんなふうに書かれてると思います。こいつを削除した上で、エンコーディングをUTF8に変えてやります。

import xml.etree.ElementTree as ET

lines = xml_string.split("\n")
xml_string = "\n".join(lines[1:])
xml_string = xml_string.decode(API.encoding).encode('utf8')
et = ET.fromstring(xml_string)

これでおkです。なんか釈然としない解決策ですが、、、

Ubuntu12.04にTremaをインストール

春からネットワークエンジニアになりました。まだ見習いですが。

というわけで、次の時代を見据えてOpenFlowに挑戦しようと思います。

PythonのPOXというフレームワークがあるらしいので本当はそっち使いたいんですが、まだ日本語情報が皆無のようなので、とりあえずは感じを掴むために、『OpenFlow実践入門』という本を参考に、RubyのTremaっていうフレームワークを使ってみます。

Tremaのインストール

まずは手持ちのUbuntu12.04マシンにTremaをインストール。

本ではgccやmakeも入れるって書いてあるんですが、さすがに最初から入ってるっしょw
つーわけで

sudo apt-get install ruby1.8 rubygems1.8 ruby1.8-dev irb libpcap-dev libsqlite3-dev

でインストール。Ruby1.9以降では動作しないようなのでバージョンに注意しましょう。

もろもろインスコできたらgemでTremaをインストールします。

sudo gem1.8 install trema

ちゃんと入ったか確認するためバージョン確認。

$ trema --version
trema version 0.3.19

現時点(2013/4/8)でのバージョンは0.3.19みたいです。

インスコ

これでとりあえずハロワはできます。

今後は、とりあえず本全部読んでみます。んで、本によれば2000円強でOpenFlowスイッチ作れるらしいんで読み終わったら実機で遊んでみようと思います。POXに挑戦するのはその後ですかね。

Sublime Text 2の便利なコマンドめも

Windows限定です

Ctrl + /

コメントアウト。まあこれは基本。

Ctrl + d / Ctrl + u

複数選択的なアレ。後者はキャンセル

Alt + Shift + [2-4]

ウィンドウを横に分割

Ctrl + Shift + [1-4]

開いているタブを指定されたウィンドウに移動

Ctrl + [1-4]

カーソルを指定されたウィンドウに移動