iOSのPUSH通知用証明書を作成する

PUSH通知用の証明書を作成する手順のキャプチャを貼っておきます。

前提

http://noboru.hatenablog.jp/entry/2013/09/20/023645 の手順を行っている状態。

  • App IDが作成済み
  • 「CertificateSigningRequest.certSigningRequest」が出力済み

手順

iOS Dev Center 右側の「Certificates, Identifiers & Profiles」をクリックします。

「Identifiers」をクリックします。

f:id:suzaku114:20130928004046p:plain

なぜか、すでにApp IDが発行されていました。
おそらく、以前にXcode上で「Fix issue」を押したタイミングで作成されたのではないかと思われます。
「Push Notifications」が「Disabled」なので、「Edit」をクリックします。

f:id:suzaku114:20130928004230p:plain

「Push Notifications」の右側のチェックボックスを選択状態にします。

f:id:suzaku114:20130928004220p:plain

すると、下のボタンが有効になるので、まずは「Development SSL Certificate」の「Create Certificate...」をクリックします。

f:id:suzaku114:20130928004213p:plain

なんか、以前に見たことがある画面が表示されました。
「Continue」を押します。

f:id:suzaku114:20130928004205p:plain

前回作成した「CertificateSigningRequest.certSigningRequest」を選択し、「Generate」ボタンをクリックします。

f:id:suzaku114:20130928004158p:plain

「Download」ボタンをクリックします。
aps_development.cer」がダウンロードされます。開発環境(Sandbox)用の証明書です。

f:id:suzaku114:20130928004151p:plain

Typeが「APNs Development iOS」となっている証明書が作成されました。 本番用もとりあえず作成しておきたいので、再度「App IDs」をクリックします。

f:id:suzaku114:20130928004144p:plain

「Push Notifications」の「Development」側が「Enabled」になりました。
「Distribution」側は、「Configurable」となっているので、再度「Edit」をクリックします。

f:id:suzaku114:20130928004136p:plain

今度は、「Production SSL Certificate」の「Create Certificate...」をクリックします。

f:id:suzaku114:20130928004130p:plain

「Continue」をクリックします。

f:id:suzaku114:20130928011003p:plain

「CertificateSigningRequest.certSigningRequest」を選択し、「Generate」をクリックします。

f:id:suzaku114:20130928010955p:plain

本番用の証明書が作成されました。
「Download」をクリックすると、「aps_production.cer」がダウンロードされます。

f:id:suzaku114:20130928010948p:plain

Typeが「APNs Production iOS」となっている証明書が作成されました。
「App IDs」をクリックします。

f:id:suzaku114:20130928010942p:plain

「Distribution」側も「Enable」になりました。

f:id:suzaku114:20130928010934p:plain

ダウンロードした「aps_development.cer」・「aps_production.cer」をそれぞれダブルクリック(or Cmd+O)すると、キーチェーンアクセスが起動し、登録されます。

f:id:suzaku114:20130928013229p:plain

Developmentの証明書を右クリックし、「...を書き出す...」をクリックします。

f:id:suzaku114:20130928013232p:plain

ファイル名は「aps_development.p12」とでもしておきます。
フォーマットは「p12」とします。

f:id:suzaku114:20130928013909p:plain

パスワードは空で、そのままOKとします。(ホントは、ちゃんと設定しましょう)

f:id:suzaku114:20130928013905p:plain

パスワードを聞かれるので、Macのアカウントのパスワードを入力します。

f:id:suzaku114:20130928013901p:plain

指定したフォルダに「aps_development.p12」が作成されました。
同様の手順で、productionの証明書についても、「aps_production.p12」を作成しておきます。

ターミナルでp12ファイルがあるディレクトリまで移動し、下記を実行する。

openssl pkcs12 -in aps_development.p12 -out aps_development.pem -nodes -clcerts

aps_development.pem が作成されました。
これを使えば、PUSH通知が送れるはず、です。(まだやってない。

感想

思ったよりは簡単に出来た。

参考

http://ameblo.jp/econa-77

今更ながら、「migrate your application to Python 2.7.」って言われてたのに対応してみる

Google App EngineのDashbordを見ると、下記の文言が毎回表示されていた。。。

A version of this application is using the Python 2.5 runtime, which is deprecated! The application should be updated to the Python 2.7 runtime as soon as possible, which offers performance improvements and many new features. Learn how simple it is to migrate your application to Python 2.7.

しかたないので、python 2.7への移行をやってみた。

今回の作業での差分はこちら

基本的には

基本的なことは、
https://developers.google.com/appengine/docs/python/python25/migrate27 に書いてあります。
ただし、英語。。。

というわけで、自分用のメモとして、日本語で。

webapp を webapp2 に変更

importの変更

以前までのwebappを利用しているものは、下記だったはず。

from google.appengine.ext import webapp

それを、

import webapp2

にしました。

WSGIApplication 呼び出し関連の変更

application = webapp.WSGIApplication([('/', IndexPage)
                                      ], debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

とかになっていたところを、

application = webapp2.WSGIApplication([('/', IndexPage)
                                      ], debug=True)

にしました。mainなどはバッサリ削除。

各クラスの定義

class IndexPage(webapp.RequestHandler):

から

class IndexPage(webapp2.RequestHandler):

に。

app.yamlの変更

threadsafe: true

を追記(or 更新)します。

そのまま起動しようとすると、

raise yaml_errors.EventError(e, event_object) google.appengine.api.yaml_errors.EventError: threadsafe cannot be enabled with CGI handler: XXXX.py in "XXXXXX/src/app.yaml", line 56, column 18

とかって表示されてしまうので、app.yaml

handlers:
- url: /XXXX/.*
  script: XXXX.py

から、

handlers:
- url: /XXXX/.*
  script: XXXX.application

に変更します。
application の部分は、webapp2.WSGIApplication を代入した変数名でよいみたいです。

カスタムタグの利用

カスタムタグを利用していたので、

webapp.template.register_template_library('app.templatefilters')

という記述がありました。

  • こちらの解決方法がいまいちわからなかった(setting.pyって何者?とか) and ちょっとやってみたけど、うまくいかなかった
    参考 http://www.john-smith.me/Tag/webapp2
  • そもそも、Djangoが「Web framework」で、webapp2も「lightweight Python web framework」なのに、両方使ってんだ?
  • ここでも、templateエンジンとしてJinja2 が使われている

のため、この際、テンプレートエンジンをJinja2に乗り換えることに。
(名前がかっこいいしw なぜJinjaというの?

Djangoの利用をやめ、webapp2 - Jinja2 にする

Eclipseの設定

PYTHONPATHに、webapp2、jinja2が無いと、

Unresolved import: webapp2

とかっていわれるので、追加する。

すでに、いろいろ追加され、GOOGLE_APP_ENGINE変数も定義されているはずなので、「Add based on variable」を押す。

f:id:suzaku114:20130922202344p:plain

必要なパスを手入力する。

f:id:suzaku114:20130922202401p:plain

追加されてれば、「OK」を押す。

f:id:suzaku114:20130922202412p:plain

app.yaml の編集

libraries:
- name: django
  version: "1.3"

の下2行を削除する。

代わりに、

- name: webapp2
  version: latest
- name: jinja2
  version: latest

を追加。

動かしてみると、

UndefinedError: 'forloop' is undefined

って言われたので、調べたら、これがあったので、

forloop.counter0

が使われていた箇所を

loop.index0

に変更。

カスタムタグを定義していたファイルの変更

app/templatefilters.py に定義し、

register = webapp.template.create_template_register()
register.filter(jst)

としていたのですが、
app/templatefilters.py では、関数の定義のみ行い、 実際のcontrollerの先頭(importの次ぐらい)で、

JINJA_ENVIRONMENT = jinja2.Environment(
    loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'template')),
    extensions=['jinja2.ext.autoescape'])

from app import templatefilters
JINJA_ENVIRONMENT.filters['jst'] = templatefilters.jst

としました。 (ただ、複数のcontrollerで使うfilterはどこで定義したらいいんだろう。。。)

simplejsonの利用をやめる

from django.utils import simplejson

を使って、jsonのparseやdumpを行っていたので、これも置き換える。

import部分は、下記のように変更。

import json

出力するところは

simplejson.dump(responseJson, self.response.out, ensure_ascii=False)

だったところを

self.response.write(json.dumps(responseJson))

に変更。

パースするところは

data = simplejson.loads(self.request.get('data'))

data = json.loads(self.request.get('data'))

に変更。

レンダリング部分

templateのレンダリング

    folder = 'template'
    path = os.path.join(os.path.dirname(__file__), folder, page)
    html = template.render(path, template_values)
    handler.response.out.write(html)

と、していたので、

    template = JINJA_ENVIRONMENT.get_template(page)
    handler.response.out.write(template.render(template_values))

としました。
フォルダ名は、JINJA_ENVIRONMENT変数を宣言時に設定してあります。

感想

めんどい(最近、こんなんばっかり)
これで、多少ましになった。
あと、pythonの仕組み?がようやく理解できてきた。
ここから機能を追加していきますー。
あと、いいかげんテストを書かないと。テスト無いとこんな作業は恐怖でしかない。

パララックスをやってみた。

巷で話題(?)のパララックスの原理・仕組みを知りたくて、フルスクラッチで書いてみた。

まぁ、実際には他のサイトのDOMの動きを見ながら、必要そうなところだけ切り出した感じです。

パララックスをやってみた。

文字について

positionをfixedにしておく。
windowのscrollイベントにて、スクロール量を取得(scrollTop)、 それに係数をかけ、leftに設定する。

画像について

文字のdivとは別に、positionがfixedなdivを用意する。
その中に、画像を複数並べておく。
今回は、下から上がってくるようにしたいので、普通に並べました。
あとは、スクロール位置(dy)によって、div要素のtopを変更する。
animateは連続で呼ぶと、ダメだったはずなので、毎回stopを呼んでます。

あと、上方向にスクロールされることも考え、そのスクロール量でどこにいて欲しいかを再設定しています。(23行目とか)

感想

  • 思った以上にめんどい。
  • このぐらいの操作で、同じような記述を何回も書くことになっているので、まじめにやるなら、ライブラリを使うor作る必要がありそう。
  • それぞれの要素のwidth, height、変更後のtopがてきとーな値を固定しているので、ウィンドウのリサイズなどで変になる可能性あり。そこらへんも、まじめにやるのはめんどくさそう。
  • 一般的に大きな画像を何枚も使うことになるので、読み込みが完了するまでは、ロード中画面とかを出しといた方がいいんだろうなー。
  • チューニングしないと、動きが気持ち悪い。。。

見つけたライブラリ

iOS端末実機で動作させるために証明書などを準備する

前提

  • Apple Developer Program登録直後である
  • Developer Programに登録する際に、新しいapple IDを取得した
  • とりあえず、実機で動作させたい

手順

ログイン状態で https://developer.apple.com/account/ios/certificate/certificateList.action にアクセスし、右上の"+"を押す。

f:id:suzaku114:20130920014928p:plain

今回はテスト用なので、下記のように、Developmentの「iOS App Development」を選択した状態でContinueを押す。

f:id:suzaku114:20130920014932p:plain

下記の画面が表示される。

f:id:suzaku114:20130920015538p:plain

手順に従い、「キーチェーンアクセス」を起動し、メニューより「キーチェーンアクセス」->「証明書アシスタント」->「認証局に証明書を要求...」を選択する。

f:id:suzaku114:20130920015801p:plain

証明書アシスタントが起動されるので、Apple Developer Programに登録したApple IDのメールアドレスと通称(多分、なんでもよい。今回はローマ字で自分の名前を入れた)を入力し、 「ディスクに保存」を選択後、「続ける」を押す。

f:id:suzaku114:20130920015924p:plain

下記の画面が表示されるので、「完了」を押す。

f:id:suzaku114:20130920020123p:plain

「キーチェーンアクセス」での操作が終わったので、ブラウザに戻り、「Continue」を押す。

f:id:suzaku114:20130920020310p:plain

「Choose File...」を押し、先ほど出力した「CertificateSigningRequest.certSigningRequest」を選択する。 そして、「Generate」を押す。

f:id:suzaku114:20130920020537p:plain

「Download」ボタンを押し、「ios_development.cer」を保存する。 「Done」を押す。

f:id:suzaku114:20130920020820p:plain

下記のように、表示される。

f:id:suzaku114:20130920020939p:plain

Finderにて、ダウンロードした「ios_development.cer」をダブルクリックする。 「証明書の追加」が表示されるので、キーチェーンを「ログイン」にし、「追加」を押す。 (注:「システム」とどっちが正しいかわかりませんでしたが、「ログイン」にしている人がネット上にいたので、「ログイン」にしておきました。)

f:id:suzaku114:20130920021015p:plain

Xcode(バージョンは5.0)を開き、該当のプロジェクトを選択する。 「General」タブの「Term」が「None」になっているはずなので、「Add an Account...」を選択する。

f:id:suzaku114:20130920021244p:plain

Apple Developer Programの際に作成したApple IDとパスワードを入力し、「Add」を押す。

f:id:suzaku114:20130920021444p:plain

左側の「Apple IDs」に入力したApple IDが表示されているので、それを選択する。 右下の「iOS」の下に「Agent」と表示される。 (注:1度、間違えて左下の"-"を押して削除し、再度、XCodeから「Add an Account...」を選択しました。1回めで、「Agent」が出ていなかったような気もします。)

f:id:suzaku114:20130920021555p:plain

Xcodeに戻ると、「Term」の選択肢として、先ほど入力したApple IDが表示されるので、それを選択する。 その後、「Fix issue」を押すと、読み込みが始まるので、数分待つ。

f:id:suzaku114:20130920021838p:plain

「Fix issue」ボタンと警告文が消えるので、左上のプルダウンから、端末(XXXのiPod touchなど)を選択し、左側の再生ボタンを押す。

f:id:suzaku114:20130920022210p:plain

端末にインストールされ、アプリが実行出来ました。

f:id:suzaku114:20130920022422p:plain

感想

  • 操作がちょーながい、めんどい
  • 実機だからか、iOS7だからか、レイアウトがめちゃくちゃになってるorz
  • 画像をたくさん使った記事を書くのはめんどい(求む:楽な方法)
  • Markdown記法は楽
  • iPod touchを開発用として登録する?デバイス登録?をした覚えがないけど、動いた
  • あとは、PUSH通知用の証明書を作ってー、production用の証明書作ってー、そのPUSH通知の証明書つくってー、って感じ?めんどい
  • 「Certificates, Identifiers & Profiles」になった?あとの記事があんまり無かった
  • Xcode5での記事もあんまり無かった

宣伝

iOS用の詰め共円を作成中です。来月には公開できるかな、と思います。。。
Androidの方はGoogle Playからダウンロードしてください。
PCや、ブラウザでやりたい方は、こちらにて。

プログラミング生放送勉強会第25回@品川に参加しました。

http://atnd.org/events/41993

f:id:suzaku114:20130824122050j:plain

Windows ストア アプリケーションのUIデザイン

  • UX
  • ユーザビリティテスト
  • マニュアルは読まれない前提でUIを作る

Modern Style

  • Metroと呼ばれていたもの
  • 10フィート離れたところからリモコンで操作出来るように
  • 日本の地下鉄は複雑だけど、路線図を見れば、なんとなくわかる→Metro UI

Application Design

  • タブレットのデザインは難しい
    →広い、統一できない、まとまらない
  • コンテンツが最優先

そぎ落とす

  • Crome(余計な装飾・今使わないメニュー)は要らない
  • 左上は一番重要
    →コンテンツを置くべき
  • RSSリーダーに、3つもペインは必要ない。人間は一度にそんなに情報を処理できない。
  • 重複なアイコン→共通メニュー(アプリバー)
  • ほんとうに、今、これが必要なのかを考えて作る
  • デベロッパーはデザイナーの下僕です。

構造とリズム

  • タイポグラフィ
  • 非デザイナーがなんとなく作って、なんとなくかっこ悪いのはルールがないから
  • フォントも4つに絞る(9pt, 11pt, 20pt, 42pt)
  • 文字サイズを大きくすると、細いフォントを利用する
  • グリッド
  • 1unit = 20px x 20px
  • 1sub unit = 5px x 5px

軽快に、滑らかに

  • ビジュアルなフィードバック
  • スプラッシュスクリーンの本当の意味は、起動にかかる時間をごまかすため
  • 5mm なら、30回に1回ぐらいタップミスする
  • 7mm なら、100回に1回ぐらいタップミスする(だいたい大丈夫)

デザインガイドラインをぜひ見てください(MSDNのUXパターン)

Leap Motion ではじめるNUIプログラミング

NUI概要

  • Project Natal(のちのKINECT
  • 3D深度センサー・RGBカメラ・マルチアレイマイク

Leap Motion概要

  • 様々な言語で開発可能
  • デモアプリがかっこいい

C#によるLeap Motionプログラミング

  • センサーの視界領域にある手や指を追跡
  • Controller, Listener などのクラスが用意されている
  • PUSH形式とPULL形式のデータ取得が可能
  • ListenerのOnFrameでFrameを取得して操作する
  • Gestureは4種類
  • onFrameはすごい勢いで呼び出される(秒間数十?)
  • InteractionBoxクラス(箱状の領域を設ける)

ソフトウェアアーキテクチャの求め方

結局何を決めなければいけないのか?

  • アーキテクチャという言葉の定義に「万人の合意」は存在しない
  • 複雑さへの対処
  • 整理・細分化を行う→「関心事の分離」
  • 開発や運用が容易な大きさの集合に分解する
  • モジュール化・カプセル化
    再利用可能は必須ではない

設計パターンを用いた分離

  • 設計パターンといわれるものは、本質をつかみづらい
    用語の誤認と誤った情報が配信されているため
  • 関心事を分離する視点そのものが、いわゆる設計パターン
    切った結果ではない
    →サンプルコードから読み取ることは不可能
  • 設計パターン→設計視点

実際の分離で使用する視点の例

  • Presentation Domain Separation(PDS)
  • 分離したいのは、プレゼンテーション部分は他のコードと別の知識・制約がかかるから
  • 次の入力フォーカスをどこに置くべきかは、Domain側に書くべき
  • 資料:「GUIアーキテクチャの基礎からMVVMパターンへ」
  • PDSとは、アプリケーション全体から「PresentationPlatform関連」を分離する「視点」

  • Domain Logic Pattern

  • アプリケーションの状態の持ち方の特性で大きく分かれる
  • TransactionScript or Domain Model
  • 資料:「Modelの中身 - ドメインロジックパターン」
  • TransactionScriptが有用な場面ではDRY原則は原則ではなくなる
  • DomainModelで継承してると、仕様変更で継承関係が変わってしまうと大変になる

  • 大きな食べ物を順々に切り分けていく間隔
    前のステップでの切り方によって、次のステップの切り方は変わってくる

まとめ

  • すべては「関心ごとの分離」に通ず
  • 「設計パターン」って言葉よくないよ!
  • 大体いつも使う知見:PDS(MVC系の裏), Domain Logic Pattern
  • なぜそうしたいのか?なぜこれが必要になったのか?から考え直す
  • どこにも載ってない情報は自分で考えるしかない

Visual C++C++10.8 ←イマココ

  • gcc / clangと比べると、Visual C++ はイケてない
  • Visual C++ 12でようやく追い付いてきたぐらい

delegating constructor

uniformed initialization

  • "()"ではなく、"{}"でコンストラクタを呼び出す
    cplx c0(); では、関数宣言になってしまう

initializer_list

  • initializer_list という型の定義
    追加・挿入・変更できないコンテナ
    initializer_list<int li { 1, 2, 3 };

explicit conversion operator

  • 暗黙の変換を抑止する "explicit"がないと、加算出来たりする

LT

@ZuQ9Nn 自作アプリの宣伝

  • 虹人間カメラ - RainbowMainCamera
  • あざとい感じのアプリ名
  • なんの成果も得られませんでした
  • 初日1桁DL

残念な原因 - アプリの説明がわかりにくい - 宣伝を全くしなかった - 露出が少なすぎるために、存在していないのと同じ

  • 現在、App Storeのランキングはお金で買える
    →個人が趣味で作って上位になるのは大変難しい

@@ww24 FlashAir x Node.js

  • Wi-Fi対応SDカード
  • FlashAir - 開発者向けにAPIを公開
  • FlashAir -> node -> chrome
  • デモ成功

@_kz6 Javaを勉強してわかったこと

  • 30億のデバイスで走るJava
  • 世界の人口の1/2
  • 例外処理は便利
  • Minecraft はいろんなOSで動く
  • プラットフォームとの互換性が高い
  • 一般的な高校生が理解できる

@azyobuzin イカすJava Xtendの話

  • Java嫌い
  • 一般的な高校生には理解できない
  • Java1.5相当に変換される
  • Eclipseのプラグイン
  • ラムダ式
  • 拡張メソッド
  • プロパティ
  • null 処理
  • No Statements
  • 型推論
  • defで戻り値の型を書かなくて良い
  • ドキュメントに書いてあっても出来ないこともある
  • それでもJavaよりまし

@mikan_x コミックマーケットでの携帯電話のお話

  • いつも電波悪いよね
  • C84では改善された
  • 以前まではau, docomoが厳しかった
  • 201THを使え(衛星電話高い)
  • emobileはユーザが少ないから最強
  • 電波が無いなら、迷子にならないで
  • 将来的にwebカタログが使えるかも

@shinoblogavi お絵かきツールとしての Blend と Power Point

  • パスで描く
  • 部品管理とグループ化は大事
  • 図形の結合
  • トリミング・図形貼り付け・半透明化
  • パワポまじ凄い

@daruyanagi プロ生ちゃんの声をアプリに組み込もう

  • Expressでも使える

感想

  • MSはUI/UXに頑張ってる
  • Leap Motionすごい。欲しい。
  • ソフトウェアアーキテクチャを考えるためには、視点を学ぶ必要がある
  • gloops はアーキテクチャをしっかり考えて作ってるっぽい
  • C++、言語としては残念
  • FlashAirすごい
  • PowerPointまじすごい。絵を描ける
  • プロ生ちゃんって、結局なんだったのだろう(ぇ

f:id:suzaku114:20130824182213j:plain

第一回 納涼もんご祭りに参加しました

参加したセッション

  • 大手SIerが語る!MongoDBの位置づけとユースケース
  • 実演!MongoDB障害運用
  • 丸の内MongoDB勉強会 in 納涼もんご祭り

話を聞いた・パンフ貰ったブース

  • 「さくらのクラウド」デモ
  • ソーラーパネル、どこへ置く?
  • もんごの薄い本
  • CodeIQ
  • co-meetingのご紹介

MongoDBについての感想

  1. アプリケーションを作るのに便利な機能が備わっている
    • 特に、地理空間インデックスはハマれば強そう
  2. レプリケーション・シャーディングが簡単そう
  3. スキーマレス
    • migrationが不要なのはいいけど、管理が難しそう
  4. SQLライクな動的クエリが便利そう
    • ただし、性能はどのぐらい?オンラインの取得に使えるレベル?
  5. トランザクションが無いので、割り切りが必要
    • ミッションクリティカルな分野では使えない
  6. 書き込み性能より読み込み性能を重視している
  7. 普通に運用しようと思ったら、3台必要なのかな。。。
    • WEBサーバにセカンダリ・プライマリサーバ・hiddenなセカンダリサーバ ってのが事実上の最小構成?


あれ、そういえば、参加受付ってどこにあったの・・・?

ふつうのエンジニアの情報収集法

会社の後輩に、どーやってそういう(エンジニア的な)情報を集めてるのか聞かれたので、
自分の中での整理のためにも書いてみる。

下準備

Twitterで、それ系の発言をしている人をフォローする。

  • twitter内を知りたい単語で検索してみる(ex. java, ruby, vagrant …)

 →そこで発言している人たちをフォローしていく

 http://tagamidaiki.com/tech-twitter10/ とか出てくるので、気になったらフォロー。

  • twitterがおすすめユーザを表示してくれる

 https://twitter.com/who_to_follow/suggestions


後述するサービスでリンクを集めてくれるため、URLを含んでつぶやいている人多めの方がよいと思います。
数百人レベルでフォローしちゃえばいいと思います。
ただ、タイムラインは読めたものではなくなる(流速的に)と思います。

はてなブックマーク - マイホットエントリー

http://b.hatena.ne.jp/
http://bookmark.hatenastaff.com/entry/2013/05/08/131308
はてなのIDと、TwitterFacebookを連携させる。
朝9時(通勤時間前)にメールを送信するようにする。
→電車の中とか、会社着いてから読む
→一通り読んだらメールを削除(未読・既読管理)
→あとで利用できそうな内容だったら、はてブでブックマークしておく(Twitter連携もしておくと、それ系のフォロワーが増えるかも)


物足りなかったら、「テクノロジー」タブを眺める。

Gunosy

http://gunosy.com/
FacebookTwitter・はてなのアカウントと連携させる。
「日々のまとめメールを配信する」にはチェックを入れておく。
→一通り読んだらメールを削除(未読・既読管理)
リンクを踏んだものを学習してくれるようなので、気になったものだけリンクを踏む。
昼休みに読む。

Pocket

http://getpocket.com/
はてな・Gunosyで気になったけど、そのとき時間がなくて読めないものを突っ込んでおく。
Read It Nowhttps://play.google.com/store/apps/details?id=hm.orz.chaos114.android.readitnow&hl=ja)にて、
state = unread
sort = oldest
ウィジェットを作って、読み終わったら delete or archive しておく。
ウィジェットに表示される数字を0に保つ気概で)

RSS

上記で様々なサイトを見ていく中で、自分の興味ある分野の記事を多数書いている人がいれば、RSSを配信していないか調べる。
配信している場合、RSSリーダーに突っ込み、新着を読む。
自分の場合は、RocketSShttp://rsspocket.appspot.com/ )にRSSのURLを突っ込んで、自動的にPocketに保存されるようにしている。

その他(暇な時)

電子書籍

一つの言語・フレームワークなどの一通りの情報を抑えたかったら、本を読むのは手っ取り早いと思う。
電子書籍なら、タブレット(AQUOS PAD)一台で、何冊でも持ち歩けるので便利。

(Advent Calendar以外にめぼしいものは無いかも。。。)


※実話ですが、ステマでもありますw

rbenvをインストール

環境:Mac OS X 10.8.4

rvmの削除

まず、rvmが入っていたので、それを削除した。

rvm seppuku

.bashrc、.bash_profileにrvmの設定が入っていたので、削除。

rbenvのインストール

基本、下記の通り。
https://github.com/sstephenson/rbenv

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

その後、書いてある通り、ruby-buildを入れる。
https://github.com/sstephenson/ruby-build
ちなみに、入ってないと、rbenv installってやっても

rbenv: no such command `install'

てエラーが出る。

git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

これで、下記のコマンドが実行できる

rbenv install -l

2.0.0-p247 ってのがあったので、それをインストールする。

rbenv install 2.0.0-p247
rbenv rehash
rbenv global 2.0.0-p247


下記も参考にしました。
http://rochefort.hatenablog.com/entry/20121015/p1
http://qiita.com/sifue/items/b7d252b18ebbae636fa9

RocketSSにサービス名を変更しました

昨日、一応のリリースをした「Rss to Pocket」ですが、さっそくサービス名を変更しました。
新しくは「RocketSS」になります。
(ドメインは面倒なので変更しません。。。)
http://rsspocket.appspot.com/


会社で話してたら、そのまま過ぎるというdisりと、RSS+Pocketでろけっとでいいんじゃない?という話が出たので、ほぼ採用。
Rocketだと検索に引っかかりづらそうだったので、余った"SS"を後ろに付けてみて、RocketSSに落ち着きました。
サービス名は、さすがにもう変えないと思います。多分。


使い方について、Facebookで聞かれたので、
http://rsspocket.appspot.com/home
に手順を書いてみました。
時間があったら、スクリーンショットとか追加しようと思います。

で、すっかり忘れていた、Read It Nowへのリンクもついでに追加しました。
これでダウンロード数が伸びるといいなー。。。

Rss to PocketというWEBサービスを公開しました

Rss to Pocket
http://rsspocket.appspot.com/

出来ること

  1. RSSを登録しておくと、Pocketに自動的に記事が追加されます
  2. RSS毎に「タグ」を付けられるので、Pocket内で整理しやすい
  3. Google Readerからエクスポートしたファイルを読み込める

チュートリアル

  1. Googleのアカウントでログインします
  2. Pocketの認証を行います
  3. RSSを登録します
  4. あとは勝手にPocketに追加されていきます

雑記

本当は、Google Readerが停止する前に公開したかったんですが、気力が足りずに遅れてしまいました。
現状はタグの編集など、必須と言っていいぐらい機能すら実装出来てないので、随時更新していきます。