2015年3月18日水曜日

Processing + Twitter4j で OAuth 認証 - その2

前回の続きを見て行きましょう。今回は PIN コードを入力するフォームの作成や accessToken の取得など、大切なのは部分がいくつかあります。


  • getPIN() 関数

PIN コードを入力するためのテキストフィールドを表示する関数です。また、入力された文字列を一時的に保存します。

setLayout で null を引数にすると、レイアウトマネージャが無効になります。これにより、手動で指定した位置にテキストフィールドを置けるようになります。new でテキストフィールドオブジェクトを生成して、setBounds で位置や大きさを決めます。入力された文字は、add で inputLine に加えていきます。

参考1:テキストを入力しよう
参考2:Processing で日本語入力フォーム(Swingアプリケーション利用)

  • マウスをクリックした時の処理

マウスをクリックした時の処理を書いています。ちょっと長いですが、ひとつずつ確認していきましょう。

まずクリックの有効範囲を指定します。次に、inputLine に保持していた情報を String 型の変数 pin に代入し、この pin と requestToken を引数にして Twitter から accessToken を取得します。さらに accessToken オブジェクトから aToken と aSecret を取得しますが、この2つがはじめの変数の宣言で省略した accessToken, accessSecret に相当します。これで準備が整いました。setProperties() 関数でこれらの情報を使って Twitter にアクセスし、getTimeline() 関数でタイムラインの上位5つを画面に表示させます。今回も try - catch 構文を使いましょう。


  • setProperties() 関数、getTimeline() 関数

これまでのエントリで見てきた処理と同じ内容です。

Twitter にアクセスできる状態になった場合は、certificatoin を true にしておきましょう。そうしなければ、OAuth 認証が成功しても、draw() 関数で設定した認証ボタンがそのまま描写され続けてしまいます。その他に変更点はありません。


  • すべてのコード

長くなりましたが、全体としてはこんな感じです。createWriter()createReader() を使うと Twitter へのアクセス権を保存でき、次回から PIN コードの入略を省略することも可能になります。興味のある人は挑戦してみてください。

2015年3月16日月曜日

Processing + Twitter4j で OAuth 認証 - その1

ご無沙汰しております。卒論に追い回されたり虫垂炎の手術を受けたりで、気づけば3月もなかば。もう社畜へのカウントダウンが始まってるよ。春からはSEの卵として頑張りながらも、勉強したことをちょこちょこ書き留めていければいいな。

さて、今回は OAuth に挑戦です。OAuth の仕組みについては、参考で上げている解説ページにて分かりやすく説明されています。つまり、Twitter 側にリクエストを送って、特定のアカウントへのアクセスの許可をもらう仕組みですね。セキュリティを考慮して、PIN コードによる認証を使っていきたいと思います。そして最後に、タイムラインを画面に表示してみましょう。

参考:Java で Twitter を OAuth 認証して使える Twitter4J とは (1/3)
参考:OAuth 認証に WebView を使うのはやめよう

  • ライブラリをインポート&変数の宣言

前回までとは違って、とても多いですね。詳しく見ていきましょう。

まず、accessToken と accessSecret は指定しません。これらは認証に成功すると、Twitter から送られてきます。certification は、Twitter から認証されたことを判別する boolean 型の変数です。certification, iterations, displayGUI は繰り返しを制御するための変数ですが、細かいことは後ほど。TexeField は PIN を入力するためのテキストフィールドを扱う型で、入力された文字列を inputLine として保持し、最後に文字列の pin に代入します。


  • setup() 関数、draw() 関数

setup() 関数、draw() 関数をまとめて確認しましょう。

setup() 関数では、オブジェクトの代入や画像の読み込みを行います。当然ですが、はじめは Twitter へのアクセスの許可が得られていないので、doOAuth() を実行してリクエストを送ります。draw() 関数では、certification が false のときだけボタンを表示するようにしています。また、次回で解説する getPIN() の実行やテキストフィールドの表示も1回でいいので、displayGUI を false にして同じ処理が繰り返されないようにします。


  • doOAuth() 関数

認証画面へ遷移させます。

Twitter から認証されるまでは、accessToken は null です。requestToken は、try - catch 構文で取得します。例外に TwitterException を指定しないとダメみたいですね。その後、requestToken を使って認証画面のURLを発行し、ブラウザからアクセスします。アクセスは1回でいいので、iterations を false にします。そうしないと、この url に毎フレームアクセスし続けてしまい、ブラウザの新規タブが増えてパソコンが大変なことになります(経験者は語る)。

余談になりますが、今回のエントリから文字が両端揃えになっています。WebKit系ブラウザでは文字の両端揃えが難しいということを紹介しているサイトもあって少しビビっていたのですが、<p align = "justify"></p> で問題なく表示できました。完全に整ってはいませんが、ずいぶん見やすくなりました。よかったよかった。こんなに更新頻度の低いブログでも、少しずつ進化しております。

参考:WebKit 系ブラウザ(Chrome / Safari)で両端揃えはできないの? jQuery で検証してみた

次回はPIN コードを入力するためのテキストフィールドを表示する関数や、マウスをクリックした時の処理を書き加えて、プログラムを完成させましょう。

2014年10月21日火曜日

Processing + Twitter4j でタイムラインを取得&表示してみる - その3

気がついたら秋。毎度のことながら、かなりご無沙汰してました。教育実習(1ヶ月)もなんとか乗りきり、プログラムにさわって遊ぶ時間が取れるようになったので、ぼちぼちと勉強のメモを再開していきます。

前回のエントリでは、text() で長文を描画するとウィンドウに収まりきらないという問題を残したままになっていました。そこで今回は、GUI を使ってきれいにTwitter のタイムラインを表示させてみたいと思います。

  • controlP5 のインポート

controlP5 というGUI ライブラリのお世話になります。jar ファイルをプロジェクトの中のcode フォルダに入れます。twitter4j のjar ファイルが置いてあるのと同じ場所ですね。

controlP5 のライブラリを扱うために、新しく変数を宣言しています。カンタンです。

  • setup() 関数


ここでも大きな変更はありません。先ほど宣言した変数のcp5 にオブジェクトを代入する部分を加えるだけですね。

  • keyPressed() 関数:処理の呼び出し


いずれかのキーを押したときに、タイムラインからツイートを取得するためのgetTimeline() 関数を、5回呼び出します。これで、最新の上位5つを取ってきます。

  • getTimeline() 関数:ツイートの表示


今回のメインといえる部分です。ループ回数を引数として受け取っています。

controlP5 オブジェクトを使って、テキストエリアをつくります。テキストエリアは固有の名前をもつみたいなので、ループ回数を利用して違うラベリングをしましょう。その後ろにツイート内容を取得するための処理を書きます。最後にテキストエリアの位置とサイズを指定します。
テキストエリアの背景や文字の色なども変更できます。フォントはMeiryo やMS-Gothic を使わないと、日本語は文字化けしますよ。テキストエリアについての詳しい情報は、Textarea を見てください。

  • すべてのコード


これでツイートをフレームアウトさせることなく、きれいに表示させることができます。注意していただきたいのは、ツイートを取得するためのリクエスト数に制限が設けられているらしく、あまり頻繁にアクセスすると一定時間は応答がなくなるということです。詳しくは、API Rate Limits を読んでください。

またキーを2回押すと、同じ名前のテキストエリアがつくられてしまって、コンソールにエラーが表示されます(ツイートは正しく表示されるけど)。なので、更新ボタンなどのGUI を加えていく場合は、一度テキストエリアを消去してつくり直すような処理にしないとダメかもしれません。

以下のページを参考にさせていただきました。では、ごきげんよう。
  1. Processing Library
  2. controlP5 Examples

2014年7月23日水曜日

Processing + Twitter4j でタイムラインを取得&表示してみる - その2

お待たせしました。今回はいろいろ寄り道をしたいので、前置きはせずさっそくコードを見ていきましょう。

  • getTimeline() 関数:コンソールに表示


void getTimeline(){

  try{
    statuses = twitter.getHomeTimeline();

    for(Status status : statuses){
      println(status.getUser().getName() + "\n" +
              status.getText());
    }
  }

  catch(TwitterException e){
    println(" Get timeline: " + e +
            " Status code: " + e.getStatusCode());
  }
}

たったこれだけ。まず、初めで宣言したコレクションに、Twitter から取ってきたTL の情報を代入します。その後for-each ループで、それぞれのオブジェクトについてユーザー名とツイートの内容を取得して、表示させています。例外時の処理も書かないといけないので、try-catch 構造を使います。これを実行すると、最新のツイートの上位20個がコンソールに表示されると思います。


  • getTimeline() 関数:テキストとして表示


でもね、せっかくウィンドウを作ったんだから、やっぱりそこにtext() を使ってTL を表示させたい。そういう訳で、上のコードを少し変更してみましょう。

void getTimeline(){

  int i = 1;

  try{
    statuses = twitter.getHomeTimeline();

    for(Status status : statuses){
      text(status.getUser().getName() + "\n" +
           status.getText(), 30, 40*i);
      i++;
    }
  }

  catch(TwitterException e){
    println(" Get timeline: " + e +
            " Status code: " + e.getStatusCode());
  }
}

int 型の変数を用意したのは、それぞれのオブジェクトごとにツイートの表示位置を変えるためです。text() では文字情報だけでなく、x, y の位置情報も引数として渡してあげなくてはなりません。なので、オブジェクトを処理するたびに1を加算してy 座標を変更することで、取得したツイートを縦に並べて表示できるようにしています。


  • おい、ところでfor-each ループって何だよ


ぐぬぬ・・・、気付かれないようサラッとやり過ごすつもりだったけど、やっぱりバレたか。コレね、実はぼくもよく分かっていない。小難しい英語のドキュメントなんか読んでも、分からないものは分からない。とりあえず、今回のプログラムに沿って書き換えてみました。

/** for-each ループを使ってコンソールにTL を表示 **/

statuses = twitter.getHomeTimeline();

for(Status status : statuses){
  println(status.getUser().getName() + "\n" + status.getText());
}


/** ふつうのfor ループに置き換えてコンソールにTL を表示 **/

statuses = twitter.getHomeTimeline();

for(int i = 0; i < 20; i++) {
  println(statuses.get(i).getUser().getName() + "\n" +
          statuses.get(i).getText());
}

これがfor-each ループとふつうのfor ループの書き換えのようです。後者では、コレクションの中で何番目のオブジェクトかを指定する添字を使って、get() により毎回それを引っぱってくる必要があります。この処理を簡略化したものがfor-each ループだということで、この問題は解決とさせて下さい(やっぱり逃げた)。

  • すべてのコード


Twitter のTL から最新のツイートを5つ取得して、テキストとしてウィンドウに表示するプログラムです。20個だとちょっと多いので、サンプルとして必要最低限の数ってことで。for-each ループではなく、ふつうのfor を使って書いていたものです。

import twitter4j.conf.*;
import twitter4j.*;
import twitter4j.auth.*;
import twitter4j.api.*;
import java.util.*;

String consumerKey = "xxxxx";
String consumerSecret = "xxxxx";
String accessToken = "xxxxx";
String accessSecret = "xxxxx";

Twitter twitter;
List<Status> statuses = null;

void setup(){

  size(480, 320);
  background(0);

  ConfigurationBuilder cb = new ConfigurationBuilder();
  cb.setOAuthConsumerKey(consumerKey);
  cb.setOAuthConsumerSecret(consumerSecret);
  cb.setOAuthAccessToken(accessToken);
  cb.setOAuthAccessTokenSecret(accessSecret);

  TwitterFactory tf = new TwitterFactory(cb.build());
  twitter = tf.getInstance();
}

void draw(){

}

void keyPressed(){
  getTimeline();
}

void getTimeline(){

  try{
    statuses = twitter.getHomeTimeline();

    for(int i = 0; i < 5; i++){
      text(statuses.get(i).getUser().getName() + "\n" +
           statuses.get(i).getText(), 30, 40*(i+1));
    }
  }

  catch(TwitterException e){
    println(" Get timeline: " + e +
            " Status code: " + e.getStatusCode());
  }
}

こんなエントリを読んでいらっしゃる暇な皆さんお気づきだと思いますが、text() は自動で改行してくれないのでツイートが長くなってしまうと、文字がフレームアウトして読むことができません。GUI ライブラリなんかでもっと見栄えよく仕上げたいとも思ったのですが、勉強不足のせいもあって、まだ形にもできず・・・。ControlP5 っていうのが有名なサードパーティによるライブラリみたいなのですが、これは日本語の表示に対応していないみたいで、文字化けしてしまいました(対処法があるのかもしれないけど、見つけられなかった)。

こんなまとめサイトもあるので、これから少しずつ他のライブラリにも探りを入れていって、感想でも書ければなあ・・・と思います。参考にさせてページは、以下のとおりです。ほな、さいなら。

  1. Twitter4j コードサンプル
  2. Processing Forum : get the timeline from a user with twitter4j (英語)

2014年7月20日日曜日

Processing + twitter4j でタイムラインを取得&表示してみる - その1

気づいたら半年もブログを更新してませんでした。まあ、就活とか忙しかったからね・・・って自己完結したところで、今回もだらだらと独り言を書き留めていきたいと思います。

前回に引き続き、Processing + Twitter4j で遊んでいきますよ。作ってみるのは、Twitter のタイムラインを取得して画面に表示させるプログラムです。Java ではなく、Processing でこれを実装する解説がされた日本語のページって、意外と少ない。「つぶやく」方はけっこう充実してるのに。Processing そのものがJava に近くて、もはやコードをコピペすれば動くんじゃないかくらいの勢いなので、当然といえば当然かもしれないけど。なので今回は、そのニッチなところに踏み込んでいきます。

  • 準備

よく見るとTwitter4j のバージョンがかなり更新されてるので、以前に紹介したリンク先から持ってきたものではなく、今回は本家のTwitter4j のサイトからZip をダウンロードして使用します(これを書いてる今はVer.4.0.2)。jar ファイルを置く場所などは前と同じです。ソースコードであるpde ファイルがある場所にcode フォルダを作って、その中に入れるんでしたよね。忘れてしまった人はぐぐるなり、前々回の記事を参照してくださいね。

プログラムを新しく作る場合は、Twitter のDeveloper ページで改めてアプリの登録をし、いろんなkey を入手した方がいいと思います。

  • import と変数の宣言


import twitter4j.conf.*;
import twitter4j.*;
import twitter4j.auth.*;
import twitter4j.api.*;
import java.util.*;

String consumerKey    = "xxxxx";
String consumerSecret = "xxxxx";
String accessToken    = "xxxxx";
String accessSecret   = "xxxxx";

Twitter twitter;
List<Status> statuses = null;

はじめの部分です。前回と違うところがありますが、そんなに大したものではないです。まず、setup 関数の中で行っていたkey の入力を簡単にするため、ここで変数にしています。そして、取得したTL の内容を格納するためのリストを宣言し、null で初期化しています。

  • setup() 関数


void setup(){

  size(480, 320);
  background(0);

  ConfigurationBuilder cb = new ConfigurationBuilder();
  cb.setOAuthConsumerKey(consumerKey);
  cb.setOAuthConsumerSecret(consumerSecret);
  cb.setOAuthAccessToken(accessToken);
  cb.setOAuthAccessTokenSecret(accessSecret);

  TwitterFactory tf = new TwitterFactory(cb.build());
  twitter = tf.getInstance();
}

ウィンドウサイズと背景色を指定します。それ以下の部分には変更なしです。Twitter のアカウントにアクセスしていろんな操作をできるようにするため、key を読み込ませたりしているものと思われます(ぶっちゃけ、よく分かっていない)。

  • draw(), keyPressed() 関数


void draw(){

}

void keyPressed(){
  getTimeline();
}

たったこれだけ。draw 関数には何も書きません。ここは「毎フレーム実行される処理」を指定する部分だからです。1秒間に30回もTwitter に情報を取りに行くなんてメモリの無駄ですからね。なので、何かのキーを押したときだけgetTimeline() の処理を実行するようにしています。

  • ここまでのコード


import twitter4j.conf.*;
import twitter4j.*;
import twitter4j.auth.*;
import twitter4j.api.*;
import java.util.*;

String consumerKey    = "xxxxx";
String consumerSecret = "xxxxx";
String accessToken    = "xxxxx";
String accessSecret   = "xxxxx";

Twitter twitter;
List<Status> statuses = null;

void setup(){

  size(480, 320);
  background(0);

  ConfigurationBuilder cb = new ConfigurationBuilder();
  cb.setOAuthConsumerKey(consumerKey);
  cb.setOAuthConsumerSecret(consumerSecret);
  cb.setOAuthAccessToken(accessToken);
  cb.setOAuthAccessTokenSecret(accessSecret);

  TwitterFactory tf = new TwitterFactory(cb.build());
  twitter = tf.getInstance();
}

void draw(){

}

void keyPressed(){
  getTimeline();
}


void getTimeline(){

  /** 次回のエントリで作っていきます **/

}

getTimeline() が今回のプログラムで一番大事な部分になります。その詳しい内容とコードは、次回の記事で見ていくことにしましょう。遅くなりましたが、Processing のバージョンは2.2.1 です。参考にさせていただいたページは以下のとおりです。
  1. Processing2.0 とTwitter4Jで、Processing からTweet してみる

2013年12月14日土曜日

Twitter4j でProcessing からつぶやく - その2

季節と同じように、心も乾燥して冷たくなる時期ですね。(あれ、ボクだけ?)
... ということで、前回に続きProcessing からツイートするプログラムの作成です。今回で完成させてしまいましょう。

  • setup() 関数の完成

以下の内容をsetup 関数に追加してください。{ から } の間に入れるということです。

size(300, 350);
setLayout(null);
TB = loadImage("*****");
TB_ = loadImage("*****");

inputLine = new TextArea("type your tweet");
inputLine.setBounds(45, 45, 200, 140);
add(inputLine);

前半では、プログラムを起動させた時のウィンドウサイズを指定したり、ツイートボタンの画像を読み込んだりしています。***** の部分には、画像ファイルの名前を入れてください。後半には、テキストボックスの生成とサイズの指定、キーボードからの文字入力を受け付けるようにするおまじないを書きます。

  • draw() 関数

draw 関数はその名のとおり、どんな描写をするかを指定する部分です。以下のように記述します。

void draw(){
 background(0);
 image(TB, 60, 245);
 if(mouseX > 60 && mouseX < 220 && mouseY > 245 && mouseY < 302){
  image(TB_, 60, 245);
 }
}

background で背景の色を指定しています。if ではマウスの位置を判定して、ボタンの位置と重なったときに色を変えたボタンの画像に置き換えるようにしています。

  • tweet() 関数

実際につぶやく処理を行う部分です。以下のように記述します。

void tweet(){
 try{
  Status status = twitter.updateStatus(iLine);
  System.out.println(status.getText());
 }
 catch(TwitterException te){
  System.out.println("Error: " + te.getMessage());
 }
}

twitter.updateStatus() メソッドでツイートできます。そのあと、println() でツイートをコンソールにも表示させます。catch() の部分には、try() で指定した処理がうまく実行できなかった、例外時の処理を書きます。

  • mouseClicked() 関数

お待たせしました。最後にマウスをクリックした時のイベントハンドラを書いていきましょう。

void mouseClicked(){
 iLine = inputLine.getText();
 if(mouseX > 60 && mouseX < 220 && mouseY > 245 && mouseY < 302){
  tweet();
 }
}

キーボードから入力した内容をString 型の文字列に置き換えます。if() でクリックされた位置を判定し、ボタンの上であればtweet() 関数を呼び出して、コメントを投稿します。

  • すべてのコード

import twitter4j.conf.*;
import twitter4j.*;
import twitter4j.auth.*;
import twitter4j.api.*;
import java.util.*;

import java.awt.*;
import javax.swing.*;

PImage TB, TB_;
Twitter twitter;
TextArea inputLine;
String iLine;

void setup(){
 size(300, 350);
 setLayout(null);
 TB = loadImage("*****");
 TB_ = loadImage("*****");

 ConfigurationBuilder cb = new ConfigurationBuilder();
 cb.setOAuthConsumerKey("*****");
 cb.setOAuthConsumerSecret("*****");
 cb.setOAuthAccessToken("*****");
 cb.setOAuthAccessTokenSecret("*****");

 TwitterFactory tf = new TwitterFactory(cb.build());
 twitter = tf.getInstance();

 inputLine = new TextArea("type your tweet");
 inputLine.setBounds(45, 45, 200, 140);
 add(inputLine);
}

void draw(){
 background(0);
 image(TB, 60, 245);
 if(mouseX > 60 && mouseX < 220 && mouseY > 245 && mouseY < 302){
  image(TB_, 60, 245);
 }
}

void tweet(){
 try{
  Status status = twitter.updateStatus(iLine);
  System.out.println(status.getText());
 }
 catch(TwitterException te){
  System.out.println("Error: " + te.getMessage());
 }
}

void mouseClicked(){
 iLine = inputLine.getText();
 if(mouseX > 60 && mouseX < 220 && mouseY > 245 && mouseY < 302){
  tweet();
 }
}

一部、順番を入れ替えていますが、これでProcessing からつぶやくことができると思います。参考にさせていただいたページは下にあります。

  1. Codasign
  2. Hello API
  3. yoppa.org

2013年12月11日水曜日

Twitter4j でProcessing からつぶやく - その1


気がつけば12月。就活もスタートしましたが、ボクは意識が低いので今回もProcessing 遊びのログを書いていきます。非公式ライブラリであるTwitter4j を使ってProcessing からツイートしてみるプログラムを、今日から2回に分けて作っていきますよ。(記事を分割して投稿数を稼ぐという、ちょこざいな方法を会得したようだ。)

  • 準備



まずは準備。Twitter4j for Processing のページからライブラリをダウンロードします。そして展開したjar ファイルをsketchbook\プロジェクト名\code\ に移動しましょう。初期状態ではcode ディレクトリがないので、自分で作ってくださいね。


次にTwitterのDeveloperページで新規アプリの登録を行って、"Consumer key", "Consumer secret", "Access token", "Access token secret" を取得してください。SettingsタブにあるApplication Type では、Read and Write を選択しておきましょう。Application Details にあるWebsite はアプリを紹介するページのURLで、何でもOKです。ローカルで動かすだけならhttp://127.0.0.1/ と入力しましょう。


また今回は、それっぽい雰囲気を出すためにツイートボタンに画像ファイルを使用します。カーソルを合わせたときボタンの色が変わるように、2種類のものを作成してsketchbook\プロジェクト名\data\ に移動します。このdata ディレクトリも自分で作成します。GIMP などを使って、好きなボタンを作ってみましょう。

  • import と変数の宣言

ではいよいよ、実際にコードを書いていきましょう。はじめは以下のように書きます。

import twitter4j.conf.*;
import twitter4j.*;
import twitter4j.auth.*;
import twitter4j.api.*;
import java.util.*;

import java.awt.*;
import javax.swing.*;

これは「ライブラリを読み込んでね」という命令です。最後のjava.util パッケージは、今回は不要ですが一応加えておきます。awt, swing パッケージはつぶやきを入力するテキストボックスの生成に使います。

Twitter twitter;
String iLine;
TextArea inputLine;
PImage TB, TB_;

ほかにも宣言しなければいけません。iLine は入力した文字列を格納する変数、PImage はProcessing で画像ファイルを取り扱うときの型です。プログラミングがはじめてという人も、すぐに理解する必要はありません。そのまま書いてくださいね。

  • setup 関数

変数の宣言をしたあとに、以下の内容を書いていきます。

void setup(){
 ConfigurationBuilder cb = new ConfigurationBuilder();


 cb.setOAuthConsumerKey("*****");
 cb.setOAuthConsumerSecret("*****");
 cb.setOAuthAccessToken("*****");
 cb.setOAuthAccessTokenSecret("*****");


 TwitterFactory tr = new TwitterFactory(cd.build());
 twitter = tf.getInstance();
}

{ から } までで、1つのまとまりになります。これはプログラムを動かすとき、はじめに一度だけ行われる初期化の作業です。ここにおまじないを書いていきます。「このプログラムからのツイートを許可します」という権限を与える作業だと思ってください。***** の部分にはDeveloperページで取得したキーを入力していきます。

ここまでの作業をまとめると、以下のようになります。

import twitter4j.conf.*;
import twitter4j.*;
import twitter4j.auth.*;
import twitter4j.api.*;
import java.util.*;

import java.awt.*;
import javax.swing.*;


Twitter twitter;
String iLine;
TextArea inputLine;
PImage TB, TB_;


void setup(){
 ConfigurationBuilder cb = new ConfigurationBuilder();


 cb.setOAuthConsumerKey("*****");
 cb.setOAuthConsumerSecret("*****");
 cb.setOAuthAccessToken("*****");
 cb.setOAuthAccessTokenSecret("*****");


 TwitterFactory tf = new TwitterFactory(cd.build());
 twitter = tf.getInstance();
}

これだけではまだ動かないので、次回からちゃんと肉付けをしていきます。参考にさせていただいたページは下にあります。ではでは。
  1. Codasign
  2. Hello API

2013年10月10日木曜日

ウェブページをKindleに転送するChrome拡張 Push to Kindle


やばい、とくに忙しくなかったのに先月は更新を怠ってしまった。ということで、なにか書こうと思ったけど、近ごろは面白いこともめっきりなので、ライフハッカーの劣化版みたいなエントリで間をもたせます。ズバリ、気になるページをKindleに送って、後からじっくり読みたいというときに重宝するChromeの拡張機能の紹介です。



ふつうにChrome Web Storeの拡張でpush to kindleと検索すれば入手できます。これを追加するとツールバーの拡張に上のようなアイコンが加わっていますので、Kindleに転送したいページを開いて、こいつをクリックしてやります。



Kindleへの転送画面です。右側がプレビューになっています。転送先のアドレスをAmazonのアカウントサービスで確認します。トップページ>アカウントサービス>My Kindle>パーソナルドキュメント設定と進みましょう。



“Send-to-Kindle Eメールアドレスの設定”の一覧に転送先のアドレスがあります。見て分かるように、Kindleじゃなくてもリーダーのアプリが入っていれば何でも読むことができますので、送りたいデバイスに合ったアドレスを選んで、転送先に指定しましょう。



もうひとつ作業を。Amazonさんに転送の受取許可をしてもらわなくてはなりませんので、転送元のアドレス“kindle@fivefilters.org”を追加してあげましょう。ただ、常時この送信元のアドレスを承認済みにしておくと、知らない間に変なファイルとか送られる怖さが・・・。なので面倒ですが毎回承認元から削除した方が良いかもしれません。今のところそういった被害の報告はないみたいですけど、情弱という生き物はこういう脅威にいつもビクビクしながら生きているのですよ。だからね、念のため。

ここまでできたら、先ほどの転送画面にあった、“Send !”ボタンをクリックして転送作業は完了です。おつかれさまでした。Firefoxとか他のブラウザでも拡張が公開されてるみたいです。Kindleユーザは加えておいて損はないですよ~。

ちなみに“Push to Kindle 拡張”でググるとけっこう上に出てくるnanapi の記事も、ボクがパソコン初心者に向けて書いたものなので、もっと詳しい手順を知りたい人はこっちも参考にしていただければ幸いです。下にリンク貼っておきますね。では。

-クリップしたWebページをKindle Paperwhiteに送って読む方法

2013年8月5日月曜日

Ubuntu 13.04でProcessingの日本語を正しく表示させる

夏休みに入って時間ができたので、久々の更新です。今回はミーハーっぽく備忘録的なこと書きますよ。

最近、Linuxも知っておこうと思い立って、余ってたモバイルノートにUbuntuを突っ込みました。で、日頃から遊んでいるProcessingも順調に整えられたのですが、いざ起動させてコードを保存しようとしたら…。



ドンッ!!日本語が文字化け。いや、化けてすらおらず、そもそも表示されてない。情弱なのでUTF-8じゃなきゃダメみたいな文字コードの話もよく分からない上に、Processingのメニューから設定変更をする方法も見つけられず、Google先生に助けを求めることとなりました。それで見つけたページがこちら。上手く調べれば、もっとちゃんとした情報があったかもしれませんが、とりえずこれを参考にしながら対応していくことにしました。

# cd /opt/processing-2.0b9/java/lib/fonts
# sudo mkdir fallback
# cd fallback

ここまでは、Processingのフォントのディレクトリ内にfallbackという新しいディレクトリを作って、そこに移動するだけの簡単なお仕事。先ほど示した参考ページにも記載されてるとおりですね。しかし4行目のコマンドはディレクトリが見つからないということでエラーが帰ってきます。まあ、ソース自体がUbuntu 12.04向けのものなので、当たり前ですがこのままではダメです。バージョンが違うため、いろんなファイルの配置場所も変更されているからですね。

ということで、日本語のttfファイルを探し求めてコンピュータ内を放浪していると…発見。どうやら13.04にはopentypeではなくtruetypeというディレクトリがあって、その直下に目的のブツが収められてるみたいです。(世代としてはopentypeのフォントの方が新かったような気もするけど、まあいいや)これらをfallbackの中にコピーして、おまじないを2行ほど付け加えると完成です。よって4行目からのコマンドは以下のようになります。

# cp /usr/share/fonts/truetype/*.ttf .
# sudo mkfontscale
# sudo mkfontdir




Processingを再起動させてみると…はい、できました!ちゃんと表示されてますね。一見落着です。

2013年4月20日土曜日

nanapi でウェブライター入門

 お小遣いがほしい。そんな安直な理由から、文章を書くことにやぶさかでないボクが、nanapi ワークスで、2ヶ月間Web記事を執筆してみました。そんなわけで、今回はちょっと指向を変えて、nanapi でライターをやってみた感想を書き留めます。

 まず結論から言うと、本格的なライターを目指している方にはあまり向かないと思います。「日常生活に役立つハウツー情報」というのがモットーのようで、かなり細かく記事の書き方のテンプレートが指定されています。もちろん、それは読んだ方がそのまま実践につなげられるようにするため。なのでパソコン関連の記事では、「プログラムの起動」みたいな簡単な操作だけでも、見出しとキャプチャ画面を1つずつ付けてあげないと、差し戻しになることがあります。その分、どこかの誰かが、自分の書いた記事をお気に入り登録してくれるとすごく嬉しいんですけどね。

 記事の単価は、資格や検定などの専門性の高いものなら1000円くらいですが、多くのものは300円以下です。文章を書いてお金をもらうサービスに参加するのは初めてなので、相場はよくわかりません。しかしコツをつかんで、毎日2つほど投稿できるようになれば、毎月2万円弱はらえる計算に。在宅でノルマや時間制限も無しという条件を考えると、なかなか良い方なんじゃないかとも思いますね。

 加えて投稿した記事の採用率もかなり高いのもポイントでしょう。内容が相当ひどいとか、途中で採用記事が募集件数に達してしまった場合は仕方ありませんが、投稿して、編集部からの指摘どおりの修正を行えばほぼ確実に採用しえもらえます。ボクも今までで投稿した43件中、不採用になったのは、たったの1件だけです。確率にして97%以上。これはお手軽ですね。

 一方で添付する画像については注意点も。撮影した写真を、高機能な編集ソフトを使って、少しクオリティの高いものに仕上げてしまうと、「これは本当にあなたが作成したものですか?」と疑いをかけられることがあります。完全にオリジナルである旨を伝えても、承認されるまでには1週間ほどかかることも。なるほど、グレーなものを採用するよりしばらく様子を見て、その間に完全に白な投稿があればそちらを採用するといった魂胆かと・・・思いを巡らさずにはいられませんでした。(結局、採用していただいたんですけどね)また、足成などのフリーの画像素材を取り扱うサイトも重宝しています。

 まあ、春休みが終わって学校が始まると、なかなか執筆に時間を割くことができないですが、自由気ままに毎月の光熱費くらいはペイできたらいいんじゃないでしょうか。ではでは、また次回。

2013年2月17日日曜日

「ソードアート・オンライン」にリアリティは在るか

アニメの放送は終わってしまいましたが、いまだに高い支持を得ている「ソードアート・オンライン」(以下、SAO)。今回はその人気の構造についてのお話。年末のサークルでのフリートークイベントでも話したネタですし、ボク自身は原作を読んでないので、かなり一人相撲のような部分もあると思いますが、そこはスルーしてください。

まあ正直なところ、第一印象としてはかなりご都合主義的な部分が強い。しかしそこで、「そんな状況ありえへんわ」と一蹴することは容易なので、もうちょっと(我慢して)どこが面白いのか真剣に考えてみました。すると、あながち「ありえへん」こともない。つまり結構リアリティがある・・・という結論に。一体どういうことなのか。

キーワードになったのは「仮想的有能感」です。これは速水敏彦先生が、2006年に出された『他人を見下す若者たち』の中で提唱されたもの。今の若い人は自尊心なんかを守るために、根拠もなく相手を下に見て自分の優位性を確認する傾向があるということですね。そういった深層心理が、SAOではキャラクターの設定に投影されることで、忠実に描き込まれていると感じるんです。

次に物語の構造に注目。SAOではこれまでの作品よりも、一つ多い次元の超越があるように思われます。普通なら現実の視聴者と、アニメの仮想世界という2つですが、SAOでは後者の中でもさらに日常とサイバー空間の乖離があるんですね。つまり、視聴者・日常のキャラ・サイバー空間内のキャラ、という3つのレイヤーがある。じゃあ、この構造と仮想的有能感によって、どのようなリアリティが描かれているのかって話です。

考える起点は、やっぱりこの作品のご都合主義。サイバー空間での主人公、キリトの活躍はまさに仮想的有能感を絵に描いたようなもでしょう。彼は数多くのプレイヤーの中でも、抜きん出たレベルに達している上に、結婚や娘をもつ経験までしてしまう。しかし大事なのは、彼がそうなるために、何か具体的な努力をしたわけではないということでしょう。彼がベータテスターであっただけで、超常能力はあたかも天から降ってきたもののようです。これはまさに、努力をせずに結果を求め、他人に対する優位性を何とかして得ようとする仮想的有能感を、キリトが体現していると捉えることができます。

・・・で、このお話にむしろリアリティがあるとボクが考える理由。それは先の努力なきご都合主義がサイバー空間で展開されているからです。要するに、「まあ、こんなことは現実ではあり得ないけどね」という前置きを、作品の中で行っているということ。日常に戻ったキリトには、そんな超常的な能力はありませんという、仮想と現実の住み分けがちゃんとなされているんですね。そういう意味では、単純にシンプルなファンタジー(例えば「ワンピース」みたいな)を眺めているより、こちらの「ご都合主義だけど住み分けされてる物語」の方が、まだリアリティがあると思います。

そんな仮想的有能感に基づいた理想と、それが実現し得ない平常の世界が完結して、アニメというよりマクロな意味での仮想を形成している。そしてそれを視聴することで、私たちは仮想的有能感の投影とキャラへの同一化を図る構造があるんじゃないでしょうか。「アクセル・ワールド」でもそうでしたが、このような「仮想空間に理想投影をするキャラクターに理想を投影する私たち」という構造が、川原礫氏の作品には組み込まれているようです。それが若者たちの潜在的な仮想的有能感の琴線に触れたことが、氏の作品のヒットに繋がったのかもしれませんね。


2013年2月14日木曜日

日本の音楽市場


ようやく課題が終わって時間がとれたので更新。今回は音楽産業について考えたことを書き留めようと思います。

何かと弱ってきてると言われる音楽産業。でも2012年は生産額ベースで、実に14年ぶりに前年比プラス、09年以来の3000億円到達だったようです。しかし世界の市場と比べた時にふと気づくのは、日本では依然として「パッケージ」での流通が大きなボリュームを保っているということ。CDのマーケットとしてはアメリカを抜いて世界一なんですね。その分あまり進展を見せていないのが配信事業で、今はSpotifyはいつ日本に来るのかという話がアツくなっています。
12年の音楽ソフト生産額、14年ぶり増 AKB効果など
Spotifyは音楽業界の救い主? ユニバーサル幹部が語るデジタル戦略

そこで登場するデジタル戦略で気になるのは違法コンテンツ。ダウンロード刑罰化も記憶に新しい。しかし個人的には、これはかなり安直な法改正だったと思うんです。業界側の言い分は、複製が勝手にネットで共有されて売上が食われるというものでしょう。確かにそれもあります。でもここでは、無料だからこそ幅広くコンテンツが認知されるようになった、という見えないマーケティング効果が鑑みられていない。音楽がパッケージとしてだけでなく、商品として多様な側面を持つようになっている今日の市場では、この見えないマーケティングの効果を切り捨てることは致命的となるんじゃないでしょうか。
YouTubeやニコ動が音楽購入に好影響、一方で買い控え要因にも~レコ協調査

最近の例でいうと、きゃりーぱみゅぱみゅや江南スタイルといった歌手がミュージックビデオをYouTubeなどに投稿することで、世界的に知名度を高めたことがあるでしょう。無料でコンテンツを視聴できるからこそ、ファンや将来的なお客さんが生まれる可能性も出てくるのです。違法行為を恐れて自分の楽曲を大事に大事にしまっておくようでは、この試みは不可能です。一寸先の、確実だけど小さな売上より、これから大きな売上を生むであろう市場を育てていくための投資として、部分的な「許容・寛容さ」も必要なんじゃないかと思います。

実際にライブは顧客単価がパッケージより高いですが、成長傾向にありますね。詰まるところ音楽とは言っても、マス市場ではそれ自体が商品として訴求力を持たなくなってきているとも考えられます。つまり1500円のシングルを買うより、iTunesで105円のダウンロードを利用するという思考。逆に消費対象が単なるバイナリデータになってしまうことに多くの人が虚無感を覚えるようになったからこそ、ベンヤミンの言う「アウラ」を求めて、みんながライブに走るようになったのかもしれません。・・・なんて知ったかぶりをしましたが、『複製技術時代の芸術作品』をちゃんと読んだわけではないです(おい)。
1600億円-音楽業界でまさかの「逆転現象」発生中

話を元に戻します。要するにパッケージ偏重の流通とそれを保護するような厳しすぎる法律の制定は、ちょっと時代錯誤なんじゃないのかな、といくつかの記事を読んで思ったということ。複製できないライブという「経験」を商品にする、あるいは佐々木俊尚氏が言う「アンビエント化」を実現する包括的なサービスを商品にするといったように、もっと収益の多角化を真剣に考えるべきかと。その一環として既に述べた、部分的な「許容・寛容さ」をむしろ取り入れていく、チャレンジングな姿勢を見せてほしいものです。そうすれば日本の音楽だって、まだまだ先は明るいと思いますね。

2013年1月10日木曜日

今のアニメ好況を考える


アニメが元気だった昨年をふまえて、今のアニメ産業をテーマに雑談を。

劇場アニメが好調だったのは言うまでもなく、2006年のピークから減少を続けていたTV放映数も、5年ぶりに増加へ転じました。またトヨタとSTUDIO4℃のコラボによるオリジナル作品も制作され、アニメ産業の大きな可能性を垣間見ることもできましたね。このようなアニメ好況が世間では取り上げられていますが、今回はこれについて少し考えてみたいと思います。

アニメが元気になて嬉しいのは誰でしょうか?もちろんアニメの製作を関わっている様々な人であることは明確なのですが、それが日本全国で一様にいえるものなのでしょうか?

まずアニメ製作の流れ。基本知識ですね。スポンサーや放送局などいろんなプレイヤーが参加していることがわかりますが、資金の配分が川上と川下で大きな差があります。下請け構造が問題視されているのは今に始まったことではないですけど、結局これが改善されなければ少なくとも「制作するプレイヤー」はアニメ好況の恩恵を受けることが難しい。この点が一つ。





そして制作会社の東京への一極集中。実に国内のアニメ制作会社の9割以上が東京にあるのです。日頃から普通にアニメを楽しんでいる分には、特に関心の向かない事柄かもしれませんね。P.A.WORKSや京都アニメーションはとっても元気です。しかしこれでは、せっかくのアニメ好況でも仕事が降りてくるのが、東京に限定されてしまう。つまり地方がただのコンテンツの消費地として、取り残される可能性が出てくるんですね。これがもう一つの点。




以上のような問題から、私たちはアニメ好況を諸手を挙げて喜ぶことはできないんじゃないか。地方で「産業としてのアニメ」を育成する試みが見られるのも、こういった表にはなかなか現れてこない現状をふまえてのことだと考えています。昨年12月に研究調査のために宮城県を訪れ、県庁内にある情報産業振興室でお話を伺ったところ、やはり地域から発信する産業としてのアニメを育てていきたいとのことでした。その一環として、宮城・仙台アニメーショングランプリのようなイベントも実施しているようです。

宮城県ツアーの報告は横浜国立大学の人間文化課程HPで詳しく行います。アップされたらリンクを貼りますのでしばらくお待ちください。

このようにアニメによって生み出されるお金の流れが、広告代理店や放送局、さらには制作会社も含めた在京のプレイヤーの中で完結してしまってるのでは、アニメ好況はとても限定的なものになってしまうでしょう。日本が「アニメ文化」を世界に向けて発信していくためには、こういった構造的な問題も克服して、オールジャパンでコンテンツを生み出せるアニメ産業にしていくことも必要なのかもしれないですね。

2013年1月6日日曜日

ブログ、はじめました。

はじめまして、そして明けましておめでとうございます。 新年、何か新しいことを始めようと思ってブログに挑戦です。

タイトルの「くるみ・らいふ」は、「知性」を花言葉にもっているクルミから採りました。物事をしっかり考えることができる人間になれるように毎日を過ごしていきたい。そんな理想を込めています。「意識が高い学生w」みたいな人も最近は話題になってるし、そういう浅い学生も如何なものかなということで。

そんなスタンスでこれから始めていきたいと思っています。今年は厄年で、新年早くも盗難被害に遭ってデジカメを失くすという安定したクズっぷりを発揮して先が思いやられますが、これからどうぞよろしくです。