yuji0602’s blog

日々思っていることなど。

TOEIC試験も終わったので

最近見ているもの

TOEICの試験も終わりました。得点がだいぶ悪かったような気がするのでドキドキしています。

試験が終わったので、最近はFire TV Stickでモヤさまを観たりとか、有田と週刊プロレスととか、FRIENDSとか観ています。

すっかり勉強しなくなったかといえばそうではないのですが、頭を少し休めようと思ったので仕事が終わって家に着いたらダラダラと見ている状態です。

英語の勉強を完全にやめたわけではなくまだ続けていて、最近はゼロからスタート英語を読むトレーニングBOOKという本を読んでいます。

ゼロからスタート英語を読むトレーニングBOOK

ゼロからスタート英語を読むトレーニングBOOK

昔から雑学っぽいものを読むのが好きなので、英文でもそういうものを読むと頭に入ってくる気がしています。1つの話が100wordsから200wordsくらいなので飽きずに読むことが出来ます。音声をダウンロードして、通勤中に聴いたりしてます。

あと、試験が終わったのでエンジニアリング組織論を読み始めました。

今日はChapter1を読んでいたのですが、仕事をしていて認識のズレが何故起こるのかとか、解消するための導きが書いてあるのでなかなか面白いです。

最近の話

今月もあと数日で終わるのですが、今月で消えてしまう有給が微妙に余っているので有給消化をし始めました。月末は旅行に行こうかと思っています。旅行は行くまでのプランを建てるのが楽しいのですが、行ってからも楽しめるように大量を整えていかないとですね。ご飯とかオヤツをたくさん食べて2キロ位は太ってこようかと思います。

仕事も今季やることはほぼ終わった状態なのでゆっくり休めそうですね。

pythonで動的にクラスとメソッドをCallする

これはなに?

JavaScriptとかで動的にオブジェクトやメソッドが呼べたりしますが、pythonでも出来たら良いな思ったので調べてみました。

実際に書いてみた

参考にしたQiitaの内容を見て、実際に動作を確認してみました。call_test.pyという名前で書いてみます。コードはこんな感じです。

class Callback(object):
    def __init__(self, data):
        self.data = data

    def wake_up(self):
        return self.data


# 通常の使い方
cb = Callback('test')
result = cb.wake_up()
print(result)

# wake_upを実行
result2 = getattr(cb, 'wake_up')()
print(result2)

# wake_upは実行されない
result3 = getattr(cb, 'wake_up')
print(result3)
# ここで実行される
print(result3())

# クラスを動的に設定
cls = globals()['Callback']
instance = cls('test')
result4 = instance.wake_up()
print(result4)

# wake_upを実行
result5 = getattr(instance, 'wake_up')()
print(result5)

実際にプログラムを実行すると意図した通り動作するようでした。

$ python call_test.py
test
test
<bound method Callback.wake_up of <__main__.Callback object at 0x1016bbc88>>
test
test
test

まとめ

動的にクラスやメソッドが呼べると便利な場合もありますが、クセのあるコードにもなるので使うところは注意しながら書いたほうが良さそうですね。

参考にしたサイト

追記

他にも、Pythonで文字列から定義済みクラスのインスタンスを作るというのがありました。勉強になりますね。

花粉症対策にIHADAを買ってみた

f:id:yuji0602:20180317002220j:plain

twitterで見かけたので早速一昨日くらいに買ってみました。昨日と今日付けているのですが、まあまあ効いているような気がします。スプレータイプなので朝シュッとひと掛けしています。

朝つけて午後くらいにもう一回付けると良いのかもしれませんね。

効いている気がするのですが、症状があまり出てない時は実感が湧いてこないのですよね(^_^;)

でも、くしゃみする回数が少なくなったように思えるのできっと効いているのでしょう。

明日もまた付けてからお出かけしようと思います。


pandasでテーブルタグがあるサイトをスクレイピングする

これはなに?

仕事で使っている某サイトの管理画面で日々のレポートが見れるのですが、CSVダウンロードとか何かしらのダウンロードがなくてサイトを閲覧することしか出来ないところがありました。あちこちスクレイピングを調べていると、pandasスクレイピングすることが出来るようなので使ってみようかと思いました。

インストール

私の環境ではpython3.6.4を使っています。幾つかインストールする必要があります。

$ pip install pandas lxml html5lib BeautifulSoup4

書いたコード

テーブルタグがありそうなサイトを考えた時、オライリーのことを思い出しました。ここではオライリーの書籍一覧をスクレイピングしてみます。ファイル名はpandas_test.pyという名前でとりあえず書いてみます。

import pandas as pd

url = 'https://www.oreilly.co.jp/catalog/'
rows = pd.io.html.read_html(url)
print(rows[0].head())
print('-----')
print(rows[0].head().to_dict(orient='records'))

書いたコードを実行

実行した結果は以下のようになります。

$ python pandas_test.py
            ISBN                  Title    価格         発行日
0  4-87311-061-0  Javaネットワークプログラミング 第2版  6264  2001/10/01
1  4-87311-063-7        C++プログラミング入門 新版  3024  2001/11/01
2  4-87311-065-3              サーバ負荷分散技術  3240  2001/12/01
3  4-87311-078-5          NFS & NIS 第2版  5184  2002/04/01
4  4-87311-079-3            不正アクセス調査ガイド  3672  2002/04/01
-----
[{'ISBN': '4-87311-061-0', 'Title': 'Javaネットワークプログラミング 第2版', '価格': 6264, '発行日': '2001/10/01'}, {'ISBN': '4-87311-063-7', 'Title': 'C++プログラミング入門 新版', '価格': 3024, '発行日': '2001/11/01'}, {'ISBN': '4-87311-065-3', 'Title': 'サーバ負荷分散技術', '価格': 3240, '発行日': '2001/12/01'}, {'ISBN': '4-87311-078-5', 'Title': 'NFS & NIS 第2版', '価格': 5184, '発行日': '2002/04/01'}, {'ISBN': '4-87311-079-3', 'Title': '不正アクセス調査ガイド', '価格': 3672, '発行日': '2002/04/01'}]

感想とまとめ

思った以上に簡単に出来たので驚きました。pandasを使うの初めてなのですが、これは便利ですね。.to_dict()とかto_json()をやる時に、.to_dict(orient='records')のようにorient指定するとそのままBigQueryに登録できそうな形式になるのでありがたいです。

もう少しpandasを触ってみようと思います。

参考にしたサイト

Redmineの担当者をauto completeで検索するChrome拡張機能を作った

これはなに?

f:id:yuji0602:20180314191251p:plain

Redmineのプロジェクトで担当者が多い場合、プルダウンから探すの大変みたいな話を社内でしていたので、何か作れないかと思ってとりあえずChrome拡張機能を作ってみました。

作ったもの

Chromeウェブストアにアップしました。

https://chrome.google.com/webstore/detail/redmine-issue-assigned-au/gpjfkokdifpdhedmpciiihefkcaddpla?hl=ja

ソースコードについてはgithubに置きました。

https://github.com/yuji0602/ChromeExtension_RedmineAutoComplete

苦労したこと

ネットでauto completeするやり方とか調べると出てきたりしたので意外に楽かなと思ったのですが、プロジェクトとかステータスのプルダウンを変更するとRedmineajaxでアクセスして表示を書き換えたりするので悩みました。 変更されたイベントを監視するようにして、変更後に再度設定をするようにしました。 そもそもChrome拡張機能を作ったことが無いのであれこれ調べてようやくリリースすることが出来ました。

感想とまとめ

初めてChromeウェブストアにアップするユーザは5ドル払うというので躊躇してたのですが、とりあえず出してみました。 そんなに使われる機能ではないと思いますが、作っている時に気がつくことが多かったのでいい勉強になりました。