徒然なるままな想い書き

何気なく見たり聞いたりした時に得られる『思わぬ発見、気付き』を読者の皆さまに届けています。

pythonでRedmineのチケットを自動でつくる!

最近Redmineのチケットを生成するpythonのスクリプトをつくっていたのですが、残念ながら公式のサイトなどのサンプルがあまり充実していませんでした。
ということで、せっかくなのでサンプルとして私の作ったスクリプトを載せておきます。公式のREST APIを使って、XMLをPOSTしています。

チケットをpythonのスクリプトでつくれるようになると、例えばリポジトリへのコミット時にフックして付随するチケットを生成するなど、チケットをイベントに対して自動で生成することができるようになり、とても便利です。

# -*- coding:utf-8 -*-
from xml.etree.ElementTree import Element, SubElement, Comment
import xml.etree.ElementTree as ET
import xml.dom.minidom as minidom
import urllib2

if __name__ == '__main__':
    issue = Element('issue')

    project_id = SubElement(issue, 'project_id')
    project_id.text = '5'

    subject = SubElement(issue, 'subject')
    subject.text = 'TEST TICKET'

    tracker_id = SubElement(issue, 'tracker_id')
    tracker_id.text = '2'

    priority = SubElement(issue, 'priority')
    priority.text = '4'

    priority = SubElement(issue, 'assigned_to_id')
    priority.text = '3'

    custom_fields = SubElement(issue, 'custom_fields', {'type':'array'})
    custom_field_1 = SubElement(custom_fields, 'custom_field', {'id':'1'})
    custom_field_value_1 = SubElement(custom_field_1, 'value')
    custom_field_value_1.text = 'A'

    watcher_user_ids = SubElement(issue, 'watcher_user_ids', {'type':'array'})
    watcher_user_id_1 = SubElement(watcher_user_ids, 'watcher_user_id')
    watcher_user_id_1.text = '4'
    watcher_user_id_2 = SubElement(watcher_user_ids, 'watcher_user_id')
    watcher_user_id_2.text = '3'

    string = ET.tostring(issue, 'utf-8')
    pretty_string = minidom.parseString(string).toprettyxml(indent='  ', encoding="utf-8")

    # API key
    api_key = '***'

    # Redmine URL
    url = 'http://localhost/redmine/issues.xml'

    # POST
    request = urllib2.Request(url, data=pretty_string)
    request.add_header('Content-Type', 'text/xml')
    request.add_header('X-Redmine-API-Key', api_key)
    request.get_method = lambda: 'POST'
    response = urllib2.urlopen(request)
    ret = response.read()
    #print(ret)

(API Reference)
www.redmine.org



ではでは。

最適化しすぎるのもよくない。

最近仕事とかスマホでディスプレイの見過ぎで、基本的に目が疲れたまんまになっている今日この頃。

私の目はちょっと特殊で、片方は遠視気味で遠くのものを見る目、もう片方は極度の近視で近くのものを見る目といったように、役割分担しながらモノを見ています。

 

そのような中、遠視目は視力が下がっていないのですが、近視目の方が日々の見過ぎ労働のせいか、視力がどんどん落ちてきています。視力が落ちてくるのはまぁ視力が悪くなった方からすると当たり前かと思うのですが、問題は視力の落ちた先。視界がはっきりする限界距離が「普段私がスマホを眺めている距離そのもの」なのです。それでふと思ったのです。

 

「最適化されてない?笑」と。

 

それでこのブログタイトルです。スポーツや仕事、人間のやること何でもそうですが、慣れてくると動作や考えがブラッシュアップされ、まさに最適化されていきます。ただ、この最適化ですが、適用されるのはここで言う「特定のスポーツや、仕事」のみです。特定のものに対しては大きな効果を発揮しますが、最適化してしまったがゆえ、時として他の環境下では途端に足を引っ張ってしまうことがあります。今の私の近視目なんかまさにそうです。スマホの画面を見るときには、画面がとても見やすく、大きな効果を発揮するのですが、それ以外はまったく役に立ちませんし、むしろ立体視がしにくくなるため、生活に支障が出るレベルです。

 

しかも、この最適化、人間は器用なので、無意識にやっちゃいます。近視目も、近視になっていることは認識しているつもりでしたが、スマホに最適化されているのはこれを書いている今日初めて認識しました。

 

このように、特定の環境下では最適なので良いことなのですが、この最適化は別の環境になった途端、まったく使い物にならなくなってしまうケースが多いのです。このように考えて見ると、自分の仕事も当てはまっているように感じます。

 

仕事はよく「効率化」と叫ばれていますが、効率化の行き着く先は「最適化」だったりします。ですが、この最適化を「特定の環境下」でやってしまうと、変化の早い昨今の社会だとすぐに別の環境に変わってしまい、すぐに使い物にならなくなってしまいます。さらに最悪の場合、私の近視目のように他の環境に対応したくとも対応できないものになってしまう可能性もあるのです。

 

人間慣れて最適化、効率化するのは良いことなんですが、その最適化は「何の環境」に対してなされているのか、別の環境でも対応できるのか?

 

「特定の環境に最適化する」のではなく、「最適化する方法を最適化」する。

 

今日気がついた、「目」から得た1つの「視点」でした。

 

 

ではでは。

【Raspberry Pi】cronのネットワーク再起動でエラーメッセージが出るときの対策

最近ラズパイからメール送信できるようにしたんですが、cronに仕込んだネットワーク再起動スクリプトで毎回エラー出力が出てメールが飛んで来るようになったので、対策をメモ。

 

0 0 * * * /etc/init.d/networking restart 1> /dev/null

とやっていたところ、

0 0 * * * systemctl restart networking.service 1> /dev/null

とするとエラー出力が出ないようになりました。

 

それだけ、以上。

 

 

ではでは。

「はてなブロガーに5つの質問」に答えてみる

はてなブログ5周年おめでとう!ということで、キャンペーンに応募がてら、「はてなブロガーに5つの質問」に答えてみます(^^)

続きを読む

IFTTTとLINEを連携させて、好きな通知をLINEで受け取ろう!

f:id:tsurzur:20161020220214j:plain

最近LINEがLINE Notifyなるものを始めたらしく、IFTTT経由で好きな通知をLINEから受け取ることができるようになりました。そこで、簡単ですが、IFTTTを使ってLINEで好きな通知を受け取る方法をメモしておきます。

続きを読む

【Raspberry Pi 2】天気(降水確率)をTweetするBotをPythonとcronでつくる!

昔つくって現在も動いているTweetBotに加え、今回は任意の地域の天気(降水確率)をつぶやくTweetWeatherなるものをつくってみました。

 

 

続きを読む

【Raspberry Pi 2】Webベースの遠隔操作ラジコンをつくる!(3. 制御サーバ編)

f:id:tsurzur:20160326133854j:plain

ラズパイのラジコンの最終回です。前々回前回と、モータ駆動、WebUIについて書いてきたので、最終回の今回では、それらのまとめ役、制御サーバ(Node.js)について書いていきたいと思います。

 

続きを読む

MacのAlfredみたいなランチャー「Hain」が使いやすい!

Windowsのランチャーソフト「Hain」

https://raw.githubusercontent.com/appetizermonster/hain/master/docs/images/demo.gif
(公式リポジトリより) 

 

github.com


MacのAlfredやスポットライトに魅せられ、Windowsでも同様のランチャーを探してこれまでPipyやExecutorなどといったソフトを使ってきましたが、どれもどこか動作がもたついた感じがし、デザインも気に入るものがありませんでした。ですが、最近「Hain」というランチャーソフトが開発されていることを知りました。

 

続きを読む

【Raspberry Pi 2】Webベースの遠隔操作ラジコンをつくる!(2. WebUI編)

f:id:tsurzur:20160326133854j:plain

はい、前回からだいぶ時間が経っちゃいましたが、ラズパイのラジコンの第2回です。前回でシステム構成とモータ駆動について書いたので、今回は遠隔操作のUIとなるWebUIについて書いていきたいと思います。

 

続きを読む

【Raspberry Pi 2】Webベースの遠隔操作ラジコンをつくる!(1. モータ制御編)

f:id:tsurzur:20160326133854j:plain

 

最近ブログをサボってましたが、密かに裏では実は色々とやっていました。本業の仕事が一番はもちろんのことですが、前々からブログでも取り上げているラズパイ君でも色々と挑戦して遊んでいました。

 

ラズパイについては以前からTweetのBotVPNサーバVNCと、既に色々と遊んできましたが、実際に遊んでみて、「単発の小さなものではなくてもっと大きいアプリケーションをつくってみたい」と思うようになっていました。そこで、一つではなく、複数のモジュールを組み合わせることで成り立つシステム、アプリケーションをラズパイで作ってみようと考え、「遠隔操作ラジコン」を作ってみることにしました。遠隔操作ラジコンを選んだのは、既に実際に作っている人が多くて先人の知恵が使えそうなことと、モノをつくるんだから動くモノがいいでしょという単純な理由です。

 

続きを読む