s3cmdで快適にs3にアップロードする

例えばtmpフォルダーの中に入っているpngファイルをhogehogeというバケットに保存したいときはターミナルに

s3cmd put  tmp/img/*.png s3://hogehoge

とタイプすれば、すべての画像をuploadできる。

上の方法だと、httpによるアクセスが許可されていないので、許可させるには

s3cmd put --acl-public tmp/img/*.png s3://hogehoge

とすればよい。

UILocalPushNotificationの使い方

定期的に通知をiPhoneにPush通知を送信する方法を調べていたんだけど サーバーを介さなくてもUILocalNotification を使用するとできた。下のサンプルコードだと、毎日23:00にPush通知を送信する例。

 NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDate *now = [NSDate date];
    NSDateComponents *componentsForFireDate = [calendar components:(NSYearCalendarUnit | NSWeekCalendarUnit |  NSHourCalendarUnit | NSMinuteCalendarUnit| NSSecondCalendarUnit | NSWeekdayCalendarUnit) fromDate: now];
    // 時間帯を固定
    [componentsForFireDate setHour: 23] ; 
    [componentsForFireDate setMinute:0] ;
    [componentsForFireDate setSecond:0] ;
    [componentsForFireDate setTimeZone:[NSTimeZone defaultTimeZone]];
    UILocalNotification* notifyAlarm = [[UILocalNotification alloc]
                                        init];
    // 一日ごとに通知を送る
    notifyAlarm.repeatInterval = NSDayCalendarUnit;

    notifyAlarm.fireDate = [calendar dateFromComponents:componentsForFireDate];
    NSLog(@"fireDate is %@",notifyAlarm.fireDate);
    notifyAlarm.timeZone = [NSTimeZone defaultTimeZone];
    notifyAlarm.alertBody =  @"hello";

    //UILocalNotificationを実行する
    [[UIApplication sharedApplication] scheduleLocalNotification:notifyAlarm];

便利ですね。

Flaskにてrequest.methodでPUTの判定をできるようにする

ハマったのでメモ。

PUTメソッドを使うにはサーバーサイドの方で、

from werkzeug.wrappers import Request
from werkzeug.wsgi import get_input_stream
from werkzeug.formparser import parse_form_data
from io import BytesIO

class MethodRewriteMiddleware(object):
    def __init__(self, app, input_name='_method'):
        self.app = app
    def __call__(self, environ, start_response):
        if environ["REQUEST_METHOD"].upper() == "POST":
            environ["wsgi.input"] = stream = \
                BytesIO(get_input_stream(environ).read())
            formdata = parse_form_data(environ)[1]
            stream.seek(0)
            method = formdata.get("_method","").upper()
            if method in ("GET","POST","PUT","DELETE"):
                environ["REQUEST_METHOD"] = method
        return self.app(environ,start_response)
....

app = Flask(__name__)
app.config.from_object(config)
app.wsgi_app = MethodRewriteMiddleware(app.wsgi_app)

みたいにしてView側では

    <form method="POST" action="/hoge">
    <input type="hidden" name="_method" value="PUT"/>
    <h1><input name="title" type="text" value="" size="100"></input></h1>
    </form>

のような感じで呼ぶとrequest.methodにPUTの値が入るようになる。

@app.route("/hoge")
def hoge():
    if request.method == "PUT":
        return "called put method."

これで綺麗にリクエスト処理を書けるようになった。Flaskは楽しい!

はじめまして

背景

日本語でもブログを書くようになった背景としては

  • 日本語でも文章を書けたほうが、自分としてはよりブログを書きやすくなる。
  • 自分の英語力の低さからちゃんと伝えたいこととかが伝わらないし、あと英語がプーアなため、人がぜんぜん来ない。(英語をもっと頑張れという話ですが…) 取りました。
  • 自分の作ったウェブサービスやiPhoneアプリを宣伝するためには二ヶ国語に対応した方がいいと思った。

以上のような背景があります。 今後は英語版はプログラミングに関する話題や作った製品の告知のみにして、日本語版ではもっとカジュアルな感じで更新していくつもりです。 今までは長く続かなかったブログ、今年はちゃんと頑張ります。あと、いつも投稿していた文章はあまりにも短文だったのでもう少しまとまった文章を 載せていく予定。

自己紹介

どんな人が書いているかわからないと人間味がないので、ちょっとでも親近感を持っていただけるために少し説明する必要がありますね。。 Office2131で制作活動をしているプログラマー担当の@furodriveと申します。徳島に住んでいます。 プログラミング歴は2年ぐらいです。使う言語はObjective-C,Pythonです。好きな人は岡村靖幸。趣味はダンスです。

作ったもの

最近作ったものとしては絶賛開発中のTrickStar,iPhoneアプリのChain Drive です。

技術的な内情

このブログはPython2.7 + Fask でオレオレブログエンジンによって運用されています。 DBは使用せずに代わりにFlask-FlatPagesを使用してしのいでいます。このライブラリを使うと、フォルダーの中に入っている テキストファイルを簡単にストレージ扱いできてとても便利で、重宝しています。

ホスティング先はDigital Oceanにしています。一ヶ月500円程度の維持費なのでとても安く運用できていいと思う。 サーバーの維持費ぐらいはこのブログで稼ぐのを目標にして頑張ります。 デプロイ方法はいたって簡単。markdown形式のテキストファイルでブログ記事を書いて、git push するだけのシンプルな方法を採用しています。

最後に

コツコツとプログラミング中に調べたこととかをここに書き残していく予定なので暇だったら見てください。