[日記] 何かが変わる気がするのでブログを書こうと思う
タイトル通り、ふと唐突に、2016年はブログを書こうと思った。
まだ、2015年はあと1ヶ月以上残っているので振り返るというのは少し早い気もするが、こういうのは早いほうがいい。
会社に入り、あっという間に4年がたち、年齢としても28歳。
大学を卒業する時はどんな社会人になってると思ったんだろう。
東京での社会人生活に高揚し、未来の自分にきっと期待していたに違いない。
昔の自分の思いなんて覚えていないけど、ただ1つ今言えることは、何も昔と変わっていない。
毎日に追われて、未来のことなんかこれっぽっちも考えないで、今しか生きていない。
今の自分がそこまでダメかと自問自答すると、そこまでだめなわけではない。
でも、これが自分自身がなりたかった、生きたかった人生で、今この瞬間に誇りを持てるかと言われると黙ってしまう。
きっと何かを変えようと思わなければ、きっとこの先もずっと何も変わらないんだと思う。
誰かの為でもない、自分自身のためにブログを書こうと思う。
Redmine2.3のGmailを利用したメールでのチケット登録方法
Redmineのメールでのチケット登録でつまったので、その時のメモ。
メールでのRedmineのチケット登録方法
Redmineのメールでのチケット登録方法は、大きく分けて以下の3つがありますが、 (1)、(3) は設定するのが面倒だったので、メールアドレスを新規で作るだけの 一番簡単そうな (2) の方法を実施する。
(1) メールサーバからメールを転送:
- 利点: メールサーバがRedmineとは異なるサーバでもよい, メールが即座に処理される, 高速(アプリケーションのリロードが不要) - 欠点: needs some configuration on your mail transfer agent (eg. Postfix, Sendmail…)
(2) IMAPサーバからの受信:
- 利点: 設定が容易、MTAの設定が不要, メールサーバがRedmineとは異なるサーバでもよい - 欠点: メールの処理が即座には行われない (定期的にメールの取得を行うためのcronのジョブを追加する必要がある)
(3) 標準入力からのメール読み込み:
- 利点: テスト用途に最適 - 欠点: 遅い(メールが到着するごとにRedmineのアプリケーションのリロードが行われる), MTA上での設定が必要
参考:http://redmine.jp/guide/RedmineReceivingEmails/
Gamilを用いたチケットの登録、通知の設定手順
設定方法としては、IMAPサーバに送られたメールをチェックして、更新があるならメール通知するだけの以下の図の感じ。
設定環境は以下のようになります。
Redmine構築環境 ・OS:CentOS 6.4 ・Redmine:2.3.3 Redmineユーザ用アカウント:sender@gmail.com Redmine用メールアカウント:recever@gmail.com
▼ Redmine 構築手順
Redmine 構築方法は良いサイトがいろいろとあるので割愛。 注意点としては、Ruby 2系だとPassengerがうまく動作しないので、Ruby 1.9.3を使用する。
▼ Gmailアカウント作成し、IMAP機能を有効にする
redmineチケット登録用のIMAPが利用可能なメールアドレスを取得。
色々とあるとは思いますが、私はGmailアカウントを新規に作成しました。
※ デフォルトだとIMAP機能は無効なので、[設定] → [メール転送とPOP/IMAP] → [IMAPアクセス] → [IMAPを有効にする] よりIMAP機能を有効にする。
▼ Gmailアカウントからのチケット登録設定
Redmine登録ユーザのメールアドレス(sender@gmail.com)より、Redmine用メールアドレス(receiver@gmail.com)にチケット登録メールを送る。メールでのチケット登録でも、プロジェクトだけでなく、担当者や優先度など様々な項目をきめれるので、詳細については次のサイトを参照
メールサンプル例: 宛先:receiver@gmail.com 件名:チケット登録テスト 本文: チケット登録テストメール。 start date: YYYY-MM-DD assigned to: test
メール送信後、Redmineサーバより以下のコマンドを実行し、Redmineを更新する。
rake -f /var/www/html/redmine/Rakefile redmine:email:receive_imap RAILS_ENV="production" port=993 ssl=1 host=imap.gmail.com username=receiver@gmail.com password=****** project=sample
※Rakefileの場所は、自身がインストールしたRedmineのRakefileを指定。 ※「username」と「password」は、Redmine用のメールアドレスを指定。 ※「project」は更新するプロジェクトを指定しているので、省略可能。
毎回、redmineに入って、上記のコマンドを実行するのは現実的ではないので、
以下の用に設定ファイルを変更し、cronで定期的に実行。(例:一分毎にコマンドを実行)
← crontabの設定ファイルにPATHを追加しても、「/usr/bin/env ruby そのようなファイルやディレクトリはありません」というふうに怒られるので、コマンド実行前に「source /root/.bashrc」するシェルスクリプトを作成し、それをcronに登録しました。(20131006 追記)
- 修正前:
% vim /etc/crontab SHELL=/bin/bash PATH=/usr/local/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ % crontab -e */1 * * * * /usr/local/bin/rake -f /var/www/html/redmine/Rakefile redmine:email:receive_imap RAILS_ENV="production" port=993 ssl=1 host=imap.gmail.com username=receiver@gmail.com password=****** project=sample
- 修正後:
% vim CronFile/redmine_mail.sh #!/bin/bash source /root/.bashrc rake -f /var/www/html/redmine/Rakefile redmine:email:receive_imap RAILS_ENV="production" port=993 ssl=1 host=imap.gmail.com username=receiver@gmail.com password=****** project=sample % crontab -e */1 * * * * /root/CronFile/redmine_mail.sh % service crond restart
▼ Gmailアカウントからの通知設定
以下の用に設定することで、チケットが登録、更新された際にRedmine用GmailアカウントからRedmineユーザに通知がいく。
% vim /root/redmine/config/configuration.yml production: email_delivery: delivery_method: :smtp smtp_settings: enable_starttls_auto: true address: "smtp.gmail.com" port: 587 domain: "smtp.gmail.com" authentication: :plain user_name: "receive@gmail.com" password: "******"
これで、通知がきたメールに返信するだけで、チケットが更新されるので、便利。
以上
InstagramAPIを利用して特定のユーザの最新画像を表示する iPhoneアプリを作成①
InstagramAPIを利用して特定のユーザの最新画像を表示するiPhoneアプリを作成してみた。
InstagramAPIを利用するためにクライアントIDを取得
InstagramAPIを利用するためにまず、http://instagram.com/developer/ にアクセス。
アプリケーション登録を行って、クライアントIDを取得する。
登録方法の詳細については、わかりやすいページが既に多数あるため割愛。
Instagram APIからデータをもってくる | フローズンブラウニー
WEBSITEなどは適当にlocalhostで登録し、以下の様にクライアントIDを取得。
最新画像を取得する特定のユーザを決定
適当にInstagramをやっている特定のユーザを探す。
自分の場合、インスタグラム(Instagram)【芸能人・著名人100人】 - NAVER まとめ より、一番上にあったきゃりーぱみゅぱみゅさんに決定。
特定のユーザの最新の投稿をもってくるURLを取得
自分の場合、きゃりーぱみゅぱみゅさんのUSERIDを探す。
先ほどのInstagram Developerページに戻り、左横のAPIコンソールをクリック。
API実行にユーザ認証が必要なため、Authentication->OAuth2をクリック。
Sign in with instagram をクリック。
Authenticationのところに、 Instagram-AuthenticatedUserと表示されていることを
確認し、ユーザを検索する user/search をクリック。
Parameter=qのValueに検索したいユーザ名(例:kyarypamyupamyu)を入力し、
右上の Send をクリック。
そうすると以下のように、HTTP/1.1 200 OKとなっていたら成功。
出力された結果から、ユーザのIDを探す。
きゃりーぱみゅぱみゅさんのUSERIDが「16213907」であることがわかった。
先ほどの同様に、users/{user-id}/media/recent に
user-idのvalueを先ほどのIDを入力したURLが、最新の投稿を持ってくるURLになる。
自分の場合は以下のURL。
https://api.instagram.com/v1/users/16213907/media/recent
次回は、最新の投稿を持ってくるURLを用いて、
iPhoneアプリに表示する部分を説明する。
以上
Amazon Product Advertising API を利用してみる
Amazonの商品情報をAPIから取得できるかどうかを試してみる。
Amazon Product Advertising API とは
Amazonの商品情報を利用して独自のEコマースサイトを作成するためのAPI群。 これにより、APIを叩くだけでAmazonの商品情報をはじめ、様々な情報を取得できる。
Amazon Product Advertising API を利用する
詳細については、以下のサイトが非常に分かりやすいので、参考にしてください。
Amazon Web サービス入門(Product Advertising API)
■ APIを利用する上で必要なもの
- トラッキングID
事前にAmazonアソシエイト・プログラムへの参加し、トラッキングIDを取得 *1
参考:Amazonアソシエイト・プログラムへの参加
- Access Key ID, Secret Access Key
Product Advertising API アカウントを作成し、上記のID, Keyを取得
参考:Access Key IDとSecret Access Keyの取得
Product Advertising APIはREST APIなので、XMLが取得できるかどうかだけなら、
ブラウザのURL部分に下記のリクエストを入力すればXMLが取得できるはず。
※AccessKeyID部分を自分のAccess Key IDに置き換える
※プログラムからXMLを取得する際は、署名などを加えたりしてめんどくさい。
http://ecs.amazonaws.jp/onca/xml? Service=AWSECommerceService &AWSAccessKeyId=[AccessKeyId] &Operation=ItemSearch &SearchIndex=Books &Title=Harry%20Potter &Version=2009-07-01
■ APIを利用してみる
yum -y install httpd php pear pear install Services_Amazon-0.9.0
※Amazonにリクエストを送る際に、タイムスタンプ、署名を加える必要があるので、今回は、PearのServices_Amazonを利用する。
- Services_Amazonを利用し、リクエストを取得する
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <title>Amazon API</title> </head> <body> <h1>Amazon API</h1> <form action="" method="post"> <input type="text" placeholder="Keyword" name="test"> <button type="submit" class="btn">Submit</button> </form> <?php require_once "Services/Amazon.php"; $amazon = new Services_Amazon(); $amazon->setLocale("JP"); $amazon->setAccessKeyID("****************"); $amazon->setSecretAccessKey("*************************"); $amazon->setAssociateID("************"); $options = array(); $options['Keywords'] = $_POST['test']; $options['Sort'] = 'salesrank'; $options['ResponseGroup'] = 'ItemIds,ItemAttributes,Images'; $result = $amazon->ItemSearch('Books', $options); if(!empty($_POST['test'])){ if (PEAR::isError($result)) { // Error $error = $amazon->getError(); echo $error['Code']; echo $error['Message']; } else { // Correct echo "<pre>"; var_dump($result); echo "</pre>"; } } ?> </body> </html>
詳しい関数の説明については、Services_Amazon を参照。
XMLで取得したい情報はResponseGroupで指定。
今回はAmazon Product Advertising APIを利用して、商品の検索しか行なっていませんが、他にもカートの追加、削除であったり色々とできるみたいなので、気になる方は調べてみてください。
以上
*1:Amazonアソシエイト・プログラムへの参加の為に、利用するWEBサイトの情報を入力するんだけど、しっかりとしたサイトや目的がないとAmazonの審査が通らない。審査に落ちても確認はできないがAPIは利用できるっぽいので、審査が通らない場合は、トラッキングID, Access Key ID, Secret Access Keyは確認したらメモしといたほうが良い。
Homebrewを使ったMANP環境構築
今さらながらmacportsからhomebrewに乗り換えてみた。
とりあえず以下の環境でPHP, mysql, apacheの環境を揃えた。
PC:Macbook
OS:Mac OS X lion
パッケージ管理:homebrew
% brew install coreutils % brew install bash-completion % brew install curl % brew install zsh % brew install readline # php, mysql, apache % curl -O https://raw.github.com/ampt/homebrew/php/Library/Formula/php.rb % mv php.rb `brew --prefix`/Library/Formula % brew options php % php --with-mysql % Include MySQL support --with-pgsql Include PostgreSQL support % --with-mssql Include MSSQL-DB support % --with-fpm Enable building of the fpm SAPI executable % --with-apache Build shared Apache 2.0 Handler module % --with-intl Include intl extension % --with-readline Include readline extension % brew install php --with-mysql --with-apache --with-readline # php % vi /etc/apache2/httpd.conf で以下を追加 LoadModule php5_module /usr/local/Cellar/php/5.3.10/libexec/apache2/libphp5.so # mysql % mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp % mysql_install_db
いつも分からなくなるので、以下は、設定ファイル、コマンドなど。
■ php
/user/local/Cellar/php/5.3.10/etc/php.ini
■ apache
/etc/apache2/httpd.conf apachectl start (= /usr/sbin/apachectl start) apachectl stop (= /usr/sbin/apachectl stop) apachectl restart (= /usr/sbin/apachectl restart)
■ mysql
/usr/local/Cellar/mysql/5.5.25/bin/mysqld_safe & /usr/local/bin/mysql.server start /usr/local/bin/mysql.server stop /usr/local/local/bin/mysql.server restart
phpinfo();にアクセスして確認
想像していた通り、元々macに入っているapache2.2を利用してくれてる。
homebrewすげえええええええ。 とりあえずこんな感じ。
はてなブログのサイドバーにYoutube貼り付ける
タイトル通りです。自分用のPlayerをブログに。Youtube自体がHTML5ですし、はてなブログのサイドバーは「html」、「javascript」挿入可能なので非常に簡単にできる。
- 管理 -> デザイン
- カスタマイズ -> サイドバー -> モジュールを追加
- 追加したいYotubeの埋め込みコードを挿入
<iframeclass="youtube-player"type="text/html"width="200"height="200"src="http://www.youtube.com/embed/3cupbrwhNp0"frameborder="0"> </iframe>
※ 注意点として、画像サイズを200px x 200pxより小さくし過ぎると
「Video player is too samll.」って言って再生できないので注意。
参考:YouTube API Blog: Minimum embeds: 200px x 200px
一曲だけじゃなくて複数の曲をランダムに流したいと思って検索してみた。
- javascriptの配列に複数のyoutubeのURLを入れてランダムにする方法
PARA MI GENTE「複数のyoutube動画を埋め込んでランダム再生する方法」 - サイドバー用にリストを作成し、リストを再生する方法
Youtube ヘルプ
- [動画の管理] に移動し、[再生リスト] を選択します。
- 埋め込む再生リストを選択します。ページの上部にある [共有] ボタンをクリックします。
- [共有] タブをクリックして埋め込みコードをコピーします。
- そのコードをウェブサイトやブログに貼り付けます。
ブログ用のリストをyoutubeで作って再生するのが一番スマートなのかな。
プレーヤーのカスタマイズとかもできるみたいなので暇な時にカスタマイズしよう。
ニフティクラウド関連の個人的なリンク集
基本的にはAPIを利用するために以下のSDKなどのツールが公開されている。
[公式] コマンドラインツール (zip)
− コマンドラインツールリファレンス (pdf)
− コマンドラインツール 使用例
% cd NIFTY_Cloud_api-tools/bin % chmod 700 nifty-* % ./nifty-describe-instances SERVER_NAME -I ACCESS_KEY -S SECRET_KEY % INSTANCE SERVER_NAME xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx running USER_NAME mini 2011-03-12T00:00:00+09:00 japan disabled xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx disk 2 2 static x86_64 centos LOADBALANCING LB 80 80
[公式] ニフティクラウド SDK for Java (zip)
− ニフティクラウド SDK for Java リファレンス (JavaDoc)
[公式] ニフティクラウドSDK for Ruby (zip)
− ニフティクラウド SDK for Ruby リファレンス (RDoc)
% cd NIFTY_Cloud_SDK_for_Ruby/sample/instances % vi describe-instances.rb require 'rubygems' require File.dirname(__FILE__) + "/../../lib/NIFTY" require 'pp' ACCESS_KEY = "ACCESS_KEY" SECRET_KEY = "SECRET_KEY" ncs4r = NIFTY::Cloud::Base.new(:access_key => ACCESS_KEY, :secret_key => SECR ET_KEY) options = { #:instance_id => ["SERVER_NAME"] } pp response = ncs4r.describe_instances(options) % ruby describe-instances.rb
[非公式] ニフティクラウドSDK for PHP (zip)
以下便利なリンク集。
− ニフティクラウドの技術関連ユーザブログ。
− 起動スクリプトなど便利なスクリプト多数。
− おすすめスクリプト
・ニフティクラウド探検隊 起動時スクリプトでサーバーを自動構築してみた。
− Githubで「nifty cloud」で検索した結果。
− 2012/06/16 100件以上のプログラムが公開されています。