gasでアイマス20選をスクレイピングしてみた

gasをスクレイピングしてみたら便利だったりするかな、と思いたったのでやってみた。
ネタはニコマス20選。


ニコマス20選とは・・・


えー、半期に一度、以下のレギュレーションで好きなアイマス作品を選ぶイベントがあるですよ。

基本レギュレーション

  • 対象は2011年上半期(1月1 日〜6月30日)に公開されたニコマス作品
  • 自身のセレクトを20作品以内でブログもしくはマイリストにて公開
  • 1Pにつき1作品
  • 選考基準はフリー(お気に入り・埋もれ発掘・テーマに沿って等何でもオッケー)


詳細は、こちら参照


で、まあ、20動画を選んでマイリストかブログのアドレスを以下のエントリーサイトのコメントに登録していくわけですが、それをスクレイピングしてみようというわけです。

エントリーサイト
http://onsentackq.blog31.fc2.com/blog-entry-354.html

htmlをみてみるとブログをスクレイピングするのは厳しいそうなので、まずはマイリストを対象にデータを取得してみようと思います。

で、VBA感覚で書いたのが以下のコード。

function getImasSelect20Data(){

  //2011年上半期のエントリーブログのurl
  var url = "http://onsentackq.blog31.fc2.com/blog-entry-354.html";
  //2010年下半期のエントリーブログのurl
  //var url = "http://cryptos.jp/archives/973";

  //シートを追加
  var today = new Date();
  var yesterday = new Date(today.setDate(today.getDate()-1)+14400000);   //日本時間より4時間前の時刻がとれるので時間を調整
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ss.insertSheet("2011年上半期ニコマス20選エントリー " + yesterday.getFullYear() + "/" + (yesterday.getMonth()+1) + "/" + yesterday.getDate(), 1);

  //ブログのhtmlを取得
  var response = UrlFetchApp.fetch(url);
  var blogHtmlStr = response.getContentText();

  //mylist分のデータを取得
  var select20MylistData = getMylistData(blogHtmlStr);

  //ブログ分のデータを取得(あとで処理を作れたらいいなぁ)
  //var select20BlogData = getBlogData(blogHtmlStr);

  //mylistとブログのデータを結合
  var select20data = select20MylistData;

  //スプレットシートに出力
    var range= SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(1, 1);
    for ( var i = 0;i<select20data.length ; i++ ){
      range.offset(i+1, 0).setValue(select20data[i].userid);
      range.offset(i+1, 1).setValue(select20data[i].infodate);
      range.offset(i+1, 2).setValue(select20data[i].nicolink);
      range.offset(i+1, 3).setValue(select20data[i].title);
      range.offset(i+1, 4).setValue(select20data[i].nicomemo);
    }
}

/**
 * htmlテキストからmylstのURLを取得して、動画情報のリストを取得する
 * @param htmlstr {String}
 * @param url {String}
 * @return mylistData {Array}
 */
function getMylistData(htmlstr) {

  //mylistのRssのアドレスリストを取得
  var mylistRssUrlList = getMylistRssUrlTakyuPBlog(htmlstr);

  //取得したリスト分処理を実施
  var mylistData = new Array();
  for( var i = 0; i<mylistRssUrlList.length ; i++ ) {

    //mylistのrssのhtmlデータを取得
    try {
      response = UrlFetchApp.fetch(mylistRssUrlList[i]);
    } catch(e) {
      //MyListが取得できない場合(削除されている場合など)は処理を飛ばす
      continue;
    }
    htmlstr = response.getContentText();

    //useridの抜き出し
    var userid = htmlstr.match(/<dc:creator>.+<\/dc:creator>/g);
    userid = userid.join().replace(/<dc:creator>/g,'').replace(/<\/dc:creator>/g,'').split(",");

    //動画のメモを抜き出し
    var nicomemo = htmlstr.replace(/\n/g,'').match(/<p class="nico-memo">.+<\/p><p class="nico-thumbnail">/g);
    if(nicomemo){
      nicomemo = nicomemo.join().replace(/<p class="nico-memo">/g,'').replace(/<\/p><p class="nico-thumbnail">/g,'').split(",");
    }
 
    //動画のlinkを抜き出し
    var nicolink = htmlstr.match(/<link>http:\/\/www.nicovideo.jp\/watch\/sm\d{8}<\/link>/g);
    nicolink = nicolink.join().replace(/<link>http:\/\/www.nicovideo.jp\/watch\//g,'').replace(/<\/link>/g,'').split(",");

    //動画内のタイトルを抜き出し
    var title = htmlstr.match(/<title>.+<\/title>/g);
    title = title.join().replace(/<title>/g,'').replace(/<\/title>/g,'').split(",");

   //動画の投稿日時を抜き出し
    var infodate = htmlstr.match(/<strong class="nico-info-date">.+<\/strong>/g);
    infodate = infodate.join().replace(/<strong class="nico-info-date">/g,'').replace(/<\/strong>/g,'').split(",");

    //取得したデータ配列に追加(タイトルだけよけいなデータがとれてる・・・ださいけどここで吸収)
    for ( var j = 0;j<nicolink.length ; j++ ){
      var nicodata = new Object();
      nicodata.userid = userid;
      nicodata.infodate = infodate[j];
      nicodata.nicolink = nicolink[j];
      nicodata.title = title[j+1];
      nicodata.nicomemo = "";
      if (nicomemo) {
        if (nicomemo[j]){
         nicodata.nicomemo =  nicomemo[j];
        }
      }
      mylistData.push(nicodata);
    }
  }
  return mylistData;
}

/**
 * 卓球PのブログからマイリストのURLを抜き出し、RSSのURLに加工したリストを返す
 * @param htmlstr {String}
 * @return mylistRssUrl {Array}
 */
function getMylistRssUrlTakyuPBlog(htmlstr){

  //mylistのアドレスを抜き出し
  var mylistUrl = htmlstr.match(/<a href="http:\/\/www.nicovideo.jp\/mylist\/\d{8}" target="_blank" title=/g);

  //不要な部分文字を削除し、rssのURLに編集
  var mylistRssUrl  = mylistUrl.join().replace(/<a href="/g,'').replace(/" target="_blank" title=/g,'?rss=2.0').split(",");

  return mylistRssUrl;

}

/**
 * ぎょPのブログからマイリストのURLを抜き出し、RSSのURLに加工したリストを返す
 * @param htmlstr {String}
 * @return mylistRssUrl {Array}
 */
function getMylistRssUrlGyoPBlog(htmlstr){

  //mylistを抜き出し
  var mylistUrl = htmlstr.match(/<a href="http:\/\/www.nicovideo.jp\/mylist\/\d{8}" rel="nofollow">/g);

  //不要な部分文字を削除し、rssのURLに編集
  var mylistRssUrl = MylistUrl.join().replace(/<a href="/g,'').replace(/" rel="nofollow">/g,'?rss=2.0').split(",");

  return mylistRssUrl;

}


ちなみに、上記の処理を実行した結果はこんな感じ(ヘッダだけ手で追加してます)

https://spreadsheets.google.com/spreadsheet/ccc?key=0Ao_xgV3iKKtddE9ES0U2dzkyTkExQVdXVExzUmtLLVE&hl=ja


gasでスクレイピングしてみて

  • 正規表現でマルチバイト文字を上手く扱えないのが残念。アスキーコードで指定すれば動くかもしれないけど、めんどくさいので試してません
  • トリガー使って時間指定で起動できるのが便利
  • 作ったデータをいろんな形式でダウンロードできるのは便利
  • なんかのサービスからデータを利用しようとすると、めんどいかも(gdataAPIを使う必要がある?)
  • Yahoo Pipesみたいに、文字が多くてエラーになるようなことがないので便利。ページの文字数が多いものをスクレイピングするにはおすすめかも?


20選的な視点で

  • 動画のIDでフィルタかけて、特定の動画のコメントみるのはなかなか楽しい
  • ブログでのエントリーなくして、マイリストオンリーだとデータ取得で楽できるかも、って感じた
  • マイリスト限定にしても、サムネ1選のデータが混じるので、別エントリで別マイリストだともっといい(笑)
  • ここから集計しようとすると、標準版と高画質版を集約したり、シリーズものを集約したりする必要があるので置換リストが必要になりそう
  • ブログのエントリーのスクレイピングはいばらの道な感じ。それぞれ処理かかないとダメそう。コメントはあきらめて、動画のIDだけ取得するならできるかもだけど
  • 2010年下半期も試しに取得してみたけど、マイリストを削除している人が多くて全部のデータとれなかった。締め切り直後に取得することと、集計後削除する人もいるかもしれないから、日々の履歴も念のためあった方がいいかなぁ、って思った

kanonをmacへインストールしようとしてみた3

ちょっと間があいたけど、pythonの環境周りのエラーをみていきます。
いろいろ確かめる前に、portでpython_selectをインストールして、python26を選択しておきました。
これが効果があったか不明ですが、やっておいた方がよいかな、って思います。

で、前回の続きですが、とりあえず、エラーメッセージをみるとだいたいこんなことをいってます。



エラーメッセージのお言葉
  • Python egg cache directoryに解凍しようとしている時におちてるよ
  • そのディレクトリ(/var/opt/kanon/trac/)に書き込み権限がないから、落ちているんじゃないかな
  • PYTHON_EGG_CACHE って環境変数で設定できるから書き込み権限があるディレクトリを設定しなよ



原因の特定のために、/var/opt/kanon/trac/ を誰でも書き込めるようにして再度、http://localhost/trac/[projectname] にアクセスすると・・・動きました。

で、次にリポジトリということで、http://localhost/hg/[projectname]
にアクセスすると・・・

You don't have permission to access /hg/[projectname] on this server.

ってなメッセージが、作成したディレクトリの所有者をみると、rootになってるのでこれを_wwwに変更してサイドアクセスしてみるけど、やっぱり駄目。
ディレクトリの中身には『.hg』ってディレクトリができているので、おそらく hg init コマンドは正常に動作したっぽい。
となると、httpd.confだろう、ということでMercurialの設定箇所を再度確認してみる。

# Mercurialの設定
WSGIScriptAlias /hg /opt/kanon/lib/cgi-bin/hgweb.wsgi

WSGIApplicationGroup %{GLOBAL}
AuthType Digest
AuthName kanon
AuthUserFile /etc/opt/kanon/kanon_users.htdigest
Require valid-user

とりあえず、『AuthType Digest』の前に『Allow from all』を追加してみる。
・・・おぉ、ユーザー名とパスワードの入力画面がでてきた。
で、ログインしてみるとそれっぽい画面が(笑)。
セキュリティ的に大丈夫か?という問題はあるにしろ、動くことは動きました。

ちなみに、ディレクトリのパーミッションに問題はあったものの、subversionはアクセスしたらユーザー名とパスワードの確認画面がでてきたので、こちらは問題ない模様(subversionは、apacheのモジュールで動いているみたいで、Mercurialとは仕組みが違う)。

Bazaarは確かめていませんが、Mercurialと同じ仕組みみたいなので、同じようにすれば、たぶん動くと思います。


さて・・・あとは、使ってみるか、対応済みのOSの仮想環境作って、正しい設定を確かめながら、いろいろいじってみるか、って感じだけど、とりあえず使ってみるかな。

もともとは、自分の作業のタスク管理をしようかと思って、tracいれるか、って思っていたところに脱線しちゃったわけだから、できるだけタスク管理は始めたいし、実際に動かしてみたら、まだ、なにかあるかもしれないしね(笑)。

kanonをmacへインストールしようとしてみた2(動

なんか、いろいろあって、もうちょっと頑張ってみることにした。
macで開発環境作ったことなかったし、portになれておくのもいいのかも?

というわけで、昨日のブログの続き。
macports用のリストを作って、kanon-setupに組み込むところからです。

pkglist.macの作成

  • pkglist.macを作成して、すでにインストール済のmod_wsgiに加え、他のosリストを参考にしながら必要そうなパッケージを追加
    • unicode_pathオプションはもしかしたらない方がいいかも?

mod_wsgi
mercurial
subversion +mod_dav_svn +unicode_path
bzr
sqlite3

  • OSがmacのときは、pkglist.macを使ってportsのコマンドを実行するようにkanon-setupを修正
    • 修正した箇所はこんな感じ
### install ubuntu package
if [ "$OS" = 'ubuntu' ]
then
    apt-get update
    apt-get -y install `cat pkglist.ubuntu`
elif [ "$OS" = 'rhel' ]
then
    yum -y install `cat pkglist.rhel`
elif [ "$OS" = 'mac' ]
then
    port selfupdate
    port install `cat pkglist.mac`
fi

/opt/kanon/bin/kanon-create-project でエラーが起きるので対応(直接編集しちゃったけど、mac版作った方がいいかも)

  • macapacheは、グループが"_www"、ユーザーは"admin"で動くっぽいのでchownコマンドをそのように修正
    • グループ名とユーザー名は、若干あやしいのでもうちょっとしっかり調べた方がいいかも
    • あと、修正が難しかったので、今回、この部分はmacでしか動かないように直しちゃいました
which apache2 >& /dev/null
if [ $? = 0 ]
then
    APACHE_USER=www-data
else
    which httpd >& /dev/null
    if [ $? = 0 ]
    then
        APACHE_USER=apache
    else
        echo "Apacheが見つかりません。Apacheをインストールしてください。"
        exit    fi
fi

//mac用に設定
APACHE_USER=admin
APACHE_GROUP=_www
  • chownがエラーになるので、該当箇所を修正
    • リポリトリのchown
# リポジトリ作成

if [ "$REPO_TYPE" = 'hg' ]
then
   hg init $KANON_VAR/hg/$PROJECT_NAME
   chown -R $APACHE_GROUP:$APACHE_USER $KANON_VAR/hg/$PROJECT_NAME
elif [ "$REPO_TYPE" = 'svn' ]
then
   svnadmin create $KANON_VAR/svn/$PROJECT_NAME
   cp $KANON_CONFIG/vcs-template/svn/* $KANON_VAR/svn/$PROJECT_NAME/hooks
   chown -R $APACHE_GROUP:$APACHE_USER $KANON_VAR/svn/$PROJECT_NAME
elif [ "$REPO_TYPE" = 'bzr' ]
then
   bzr init-repo $KANON_VAR/bzr/$PROJECT_NAME
   bzr init $KANON_VAR/bzr/$PROJECT_NAME/trunk
   chown -R $APACHE_GROUP:$APACHE_USER $KANON_VAR/bzr/$PROJECT_NAME
elif [ "$REPO_TYPE" != '' ]
then
   echo "Unsupported repository type: " $REPO_TYPE
   exit
fi
    • トラックのプロジェクトのパスのchown
chown -R $APACHE_GROUP:$APACHE_USER $TRAC_PROJECT_PATH

mac用のhttpd.confを作成

  • apacheの起動で以下のエラーが発生します

Unknown DAV provider: svn

  • なんで、httpd.conf.rhelをもとにhttpd.conf.macを作成し、ファイルの先頭にmod_dav_svn.soのロードを追加

LoadModule dav_svn_module modules/mod_dav_svn.so

  • で、再度実行すると、今度は以下のようなエラーメッセージが表示されます

Invalid command 'AuthzSVNAccessFile', perhaps misspelled or defined by a module not included in the server configuration

  • mod_authz_svnが必要だっていわれているみたいですね。なんで、もう1行追加します

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

  • で、apacheを再起動して、http://localhost/trac/[projectname] にアクセスしたときに、以下のような画面が表示されます

Traceback (most recent call last):
File "build/bdist.macosx-10.6-universal/egg/trac/web/api.py", line 436, in send_error
data, 'text/html')
File "build/bdist.macosx-10.6-universal/egg/trac/web/chrome.py", line 832, in render_template
template = self.load_template(filename, method=method)
File "build/bdist.macosx-10.6-universal/egg/trac/web/chrome.py", line 793, in load_template
self.get_all_templates_dirs(), auto_reload=self.auto_reload,
File "build/bdist.macosx-10.6-universal/egg/trac/web/chrome.py", line 506, in get_all_templates_dirs
dirs.extend(provider.get_templates_dirs() or [])
File "build/bdist.macosx-10.6-universal/egg/trac/web/chrome.py", line 484, in get_templates_dirs
pkg_resources.resource_filename('trac', 'templates'),
File "/opt/kanon/lib/python2.6/setuptools-0.6c9-py2.6.egg/pkg_resources.py", line 841, in resource_filename
self, resource_name
File "/opt/kanon/lib/python2.6/setuptools-0.6c9-py2.6.egg/pkg_resources.py", line 1311, in get_resource_filename
return self._extract_resource(manager, zip_path)
File "/opt/kanon/lib/python2.6/setuptools-0.6c9-py2.6.egg/pkg_resources.py", line 1318, in _extract_resource
manager, os.path.join(zip_path, name)
File "/opt/kanon/lib/python2.6/setuptools-0.6c9-py2.6.egg/pkg_resources.py", line 1332, in _extract_resource
self.egg_name, self._parts(zip_path)
File "/opt/kanon/lib/python2.6/setuptools-0.6c9-py2.6.egg/pkg_resources.py", line 921, in get_cache_path
self.extraction_error()
File "/opt/kanon/lib/python2.6/setuptools-0.6c9-py2.6.egg/pkg_resources.py", line 887, in extraction_error
raise err
ExtractionError: Can't extract file(s) to egg cache

The following error occurred while trying to extract file(s) to the Python egg
cache:

[Errno 13] Permission denied: '/var/opt/kanon/trac/.egg-cache'

The Python egg cache directory is currently set to:

/var/opt/kanon/trac/.egg-cache

Perhaps your account does not have write access to this directory? You can
change the cache directory by setting the PYTHON_EGG_CACHE environment
variable to point to an accessible directory.

もっとスムーズに行くかと思ってたけど、意外と道のり長いな。。。
とりあえず、エラーで気になるのは、以下の箇所

Permission denied: '/var/opt/kanon/trac/.egg-cache'

次やるとしたら、apacheのユーザーまわりと、pythonまわりみてみる感じか。
続く?

kanonをmacへインストールしようとしてみた

気の迷いで、mackanonをインストールしてみようと思っちゃいました。
以下、作業メモ的ななにかです。


インストールの前提

  • apache(mod_wsgi)は元々インストールされているものを使うっぽいので、事前にインストールされている必要がある
  • 自分は、とりあえず「sudo port install mod_wsgi」を実行(これで必要なものが一通りインストールされる)
    • すでにpython環境を作っている場合は、いろいろ気をつけないといけないかも
  • 当然、MacPortsも事前にインストールされていなくてはいけない
  • 最後まで読めばわかりますが、最終的にはこれ実は嘘だということがわかります(苦笑)

OSの判定

  • kanon-setupをみるとOSを判定している箇所があるんで、OSがMacであることを判断する必要がある。
  • 以下で判断できるっぽいので、kanon-setupにmacの判定も追加
uname -a |grep Darwin

httpd.conf

  • mod_wsgiのインストールが完了すると以下のようなメッセージが表示される。なんで、mod_wsgi.soをロードする必要があるっぽい。あと、httpd.confは直接編集する必要があるみたい。つまりは、httpd.conf.rhel をまんま使えばok

########################################################
# To enable mod_wsgi add
# LoadModule wsgi_module modules/mod_wsgi.so
# to your apache2 config file:
# /opt/local/apache2/conf/httpd.conf
########################################################

  • httpd.conf のパスは他のOSと違うし、apacheの起動方法も違うっぽいので、そこはOSを判定して、mac用の記載を追加してあげる

mac対応版kanon-setupを実行(sudoして実行する必要あり)

  • これで準備が整ったので以下のコマンドを実行!

sudo ./kanon-setup

  • インストール時に、いやーなメッセージがでてるけど、メッセージはインストールできたといっている。信じて先に進みます(信じる力が大切だね!)

cp: var/*: No such file or directory

プロジェクト作ってみる

  • testというプロジェクトを作ってみる

/opt/kanon/bin/kanon-create-project test

  • 以下のような表示がでるので、使ったこともないMercurialを選択(笑)

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

Kanon プロジェクト作成ツール
(C)2011 Kanon Project

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

このツールはKanonのプロジェクトを作成するツールです。
ガイドに従って、情報を入力するとプロジェクトを作成することができます。

                                                                                                                                        • -


リポジトリのタイプを入力してください。

* svn : Subversion
* hg : Mercurial
* bzr : Bazaar
* (なし) : バージョン管理システムを使いません

リポジトリタイプ:

  • 以下のようなメッセージがでるので、経験したこともないscrumを選択(笑)

テンプレートを入力してください。標準のテンプレートは下記の通りです。

* default : 標準のテンプレートです。課題管理・簡易バグ管理・
ガントチャートやカレンダーでのタスク管理に利用します。
* scrum :スクラム開発のテンプレートです。バックログの管理や
バーンダウンチャートでのタスクの管理に利用します。

このマシンでは、下記のテンプレートを利用することができます。
default
scrum


テンプレート:

  • 確認画面がでるので、迷わず進む。いけばわかるさ

テンプレート: scrum
scrum
プロジェクト名: test
リポジトリタイプ: hg
テンプレート: scrum

上記のプロジェクトを本当に作成していいですか(y/n)

  • そうすると、パーミッションがないというようなエラーメッセージが延々と表示されます。涙目で見守りましょう!
  • どうみても終わっていないのですが、以下のようなメッセージも表示されます。「そんな慰めはいらねーよ」とつぶやきながら、涙をぬぐいます

プロジェクトのセットアップは終わりしました。
下記のURLでアクセスしてください。
(リポジトリタイプがbazaarの場合、リポジトリURLにtrunkを付けるとtrunkにアクセスできます)

sudoして、プロジェクト作ってみる

  • test2というプロジェクトを作ってみる

sudo /opt/kanon/bin/kanon-create-project test2

  • 以下のようなメッセージがでます

/opt/kanon/bin/kanon-create-project: line 154: hg: command not found
chown: apache.apache: Invalid argument
プロジェクトの生成と初期化
デフォルトの Wiki ページのインストール
CamelCase インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/CamelCase
InterMapTxt インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/InterMapTxt
InterTrac インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/InterTrac
InterWiki インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/InterWiki
PageTemplates インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/PageTemplates
RecentChanges インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/RecentChanges
SandBox インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/SandBox
TitleIndex インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TitleIndex
TracAccessibility インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracAccessibility
TracAdmin インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracAdmin
TracBackup インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracBackup
TracBrowser インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracBrowser
TracCgi インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracCgi
TracChangeset インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracChangeset
TracEnvironment インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracEnvironment
TracFastCgi インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracFastCgi
TracFineGrainedPermissions インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracFineGrainedPermissions
TracGuide インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracGuide
TracImport インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracImport
TracIni インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracIni
TracInstall インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracInstall
TracInterfaceCustomization インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracInterfaceCustomization
TracJa インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracJa
TracLinks インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracLinks
TracLogging インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracLogging
TracModPython インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracModPython
TracModWSGI インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracModWSGI
TracNavigation インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracNavigation
TracNotification インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracNotification
TracPermissions インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracPermissions
TracPlugins インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracPlugins
TracQuery インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracQuery
TracReports インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracReports
TracRepositoryAdmin インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracRepositoryAdmin
TracRevisionLog インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracRevisionLog
TracRoadmap インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracRoadmap
TracRss インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracRss
TracSearch インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracSearch
TracStandalone インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracStandalone
TracSupport インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracSupport
TracSyntaxColoring インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracSyntaxColoring
TracTickets インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracTickets
TracTicketsCustomFields インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracTicketsCustomFields
TracTimeline インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracTimeline
TracUnicode インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracUnicode
TracUpgrade インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracUpgrade
TracWiki インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracWiki
TracWorkflow インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/TracWorkflow
WikiDeletePage インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/WikiDeletePage
WikiFormatting インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/WikiFormatting
WikiHtml インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/WikiHtml
WikiMacros インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/WikiMacros
WikiNewPage インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/WikiNewPage
WikiPageNames インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/WikiPageNames
WikiProcessors インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/WikiProcessors
WikiRestructuredText インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/WikiRestructuredText
WikiRestructuredTextLinks インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/WikiRestructuredTextLinks
WikiStart インポート元 /Users/hoge/.python-eggs/Trac-0.12.1ja1-py2.6.egg-tmp/trac/wiki/default-pages/WikiStart

                                                                                                                                        • -

注意: リポジトリのインデックスに失敗しました。

これにはいくつかの原因が考えられます: リポジトリの種類が間違っている、
このリポジトリのためのライブラリが用意されていない、
指定したリポジトリのパスに実際のリポジトリがない…

現状でも Trac を使い始める事はできますが、
リポジトリブラウザを有効にするために、
trac.ini ファイルの [trac] repository_type と repository_path の
設定を再度確認する必要があります。

                                                                                                                                        • -

Trac Environment 'test2' ができました。

今後、この環境の設定をする場合は、次のファイルを利用します:

/var/opt/kanon/trac/test2/conf/trac.ini

あなたがこの新しいプロジェクトのテストを考えているなら、
スタンドアロンウェブサーバ `tracd` を試してみてください:

tracd --port 8000 /var/opt/kanon/trac/test2

それから、ブラウザで http://localhost:8000/test2 にアクセスします。
インストールしたバージョンに合わせた今後のセットアップ情報などが含まれた、
ドキュメントが閲覧できます。(例えばウェブサーバで公開する手順など)

最新のドキュメントは、プロジェクトのウェブサイトから入手できます:

http://trac.edgewall.org/

Congratulations!

Gijiroku インポート元 /etc/opt/kanon/trac-template/scrum/trac-wiki/Gijiroku
GijirokuTemplate インポート元 /etc/opt/kanon/trac-template/scrum/trac-wiki/GijirokuTemplate
MyTickets インポート元 /etc/opt/kanon/trac-template/scrum/trac-wiki/MyTickets
Release インポート元 /etc/opt/kanon/trac-template/scrum/trac-wiki/Release
Rules インポート元 /etc/opt/kanon/trac-template/scrum/trac-wiki/Rules
SearchHyperEstraier インポート元 /etc/opt/kanon/trac-template/scrum/trac-wiki/SearchHyperEstraier
TLSetup インポート元 /etc/opt/kanon/trac-template/scrum/trac-wiki/TLSetup
WikiStart インポート元 /etc/opt/kanon/trac-template/scrum/trac-wiki/WikiStart

Timing and Estimation needs an upgrade
Upgrading Database
Creating bill_date table
Creating report_version table
Upgrading report_version table to v4
Dropping report_version table
Upgrading reports
Upgrading fields
Upgrading usermanual
Done Upgrading
Attempting to create the burndown table
Attempting to modify the milestone table
アップグレードが終了しました。

次のコマンドを実行すると Trac のドキュメントをアップグレードできます:

trac-admin /var/opt/kanon/trac/test2 wiki upgrade
終了しました。
chown: apache.apache: Invalid argument

プロジェクトのセットアップは終わりしました。
下記のURLでアクセスしてください。
(リポジトリタイプがbazaarの場合、リポジトリURLにtrunkを付けるとtrunkにアクセスできます)

プロジェクト管理 : http://[サーバ名]/trac/test2
リポジトリ : http://[サーバ名]/hg/test2

  • 以下の場所で、落ちているみたいですね。
   hg init $KANON_VAR/hg/$PROJECT_NAME
   chown $APACHE_USER.$APACHE_USER -R $KANON_VAR/hg/$PROJECT_NAME
  • ここで、冷静になって、kanon-setupと同じディレクトリをながめてみます。pkglist.rhel、pkglist.ubuntuというファイルが見つかりますね。
  • この二つの中身をのぞいてみましょう。まずは、pkglist.rhel

httpd
python-setuptools
sqlite
mod_dav_svn
mod_wsgi
subversion
mercurial
bzr
gcc

python-dev
python-setuptools
libapache2-mod-wsgi
apache2
mercurial
subversion
python-pysqlite2
sqlite3
python-subversion
python-excelerator
libapache2-svn
gcc
bzr

  • はーん、なるほどね〜。そういえば、そんなことをしている箇所があったのを忘れてた・・・・・・・・・・おいら、泣いてもいいよね
  • というわけで、MacPortsのリストを作ってインストールするようにして、必要があればスクリプトに細かな修正していけばmacでも動くようになるんじゃないかな〜、ってことがわかりました。あとは頼みます(笑)
  • ちなみに、自分が実行したkanon-setupはこんな感じ。「### install ubuntu package」あたりをみると涙がさそわれますな〜
#!/bin/bash

export KANON_OPT=/opt/kanon
export KANON_VAR=/var/opt/kanon
CHECK_UBUNTU=`uname -a |grep ubuntu`
CHECK_DEBIAN=`uname -a |grep debian`
CHECK_MAC=`uname -a |grep Darwin`
if [ "$CHECK_UBUNTU" != '' ]
then
    OS='ubuntu'
    APACHE_USER=www-data
elif [ "$CHECK_DEBIAN" != '' ]
then
    OS='ubuntu'
    APACHE_USER=www-data
elif [ -f /etc/redhat-release ]
then
    OS='rhel'
    APACHE_USER=apache
elif [ "$CHECK_MAC" != '' ]
then
    OS='mac'
else
    echo "サポートされていないOSです。"
    echo "現在サポートされいているOSは、"
    echo ""
    echo "  * Ubuntu 10.10 Server"
    echo "  * Debian GNU/Linux, kfreebsd 6.0"
    echo "  * RedHat Enterprise Linux 6.0"
    echo "  * Oracle Enterprise Linux 6.0"
    echo ""
    echo "です。"
    exit
fi

if [ "$USER" != 'root' ]
then
    echo "rootでコマンドを実行してください。"
fi

if [ -d /opt/kanon ]
then
    echo "=========================================================================="
    echo "注意!! このマシンには既にKanonがインストールされているかも。確認してね♪"
    echo "=========================================================================="
fi
echo ""
echo "このコマンドはKanonをインストールするよ。"
echo "既にkanonインストールされている場合は、上書きされて消えちゃうの。"
echo -n "Kanonをインストールする?(y/n) "
read YN

if [ "$YN" != "y" ]
then
    echo "インストールを中断したよ。"
    exit
fi

### install ubuntu package
if [ "$OS" = 'ubuntu' ]
then
    apt-get update
    apt-get -y install `cat pkglist.ubuntu`
elif [ "$OS" = 'rhel' ]
then
    yum -y install `cat pkglist.rhel`
fi

### install files
cp -fr opt/* /opt
cp -frn etc/* /etc
cp -frn var/* /var


### setup configuration
export PYTHONPATH=/opt/kanon/lib/python2.6:/opt/kanon/lib/python2.6/site-packages
cp resource/dot.pydistutils.cfg ~/.pydistutils.cfg

## setup sitecustomize for python
if [ -f /etc/python2.6/sitecustomize.py ]
then
    CHK=`grep "setdefaultencoding" /etc/python2.6/sitecustomize.py`
    if [ "$CHK" = '' ]
    then
        cat opt/kanon/lib/python2.6/site-packages/sitecustomize.py >> /etc/python2.6/sitecustomize.py
    fi
fi

### install python components
easy_install --prefix $KANON_OPT http://svn.edgewall.org/repos/genshi/tags/0.6.0/
easy_install --prefix $KANON_OPT http://ftp.edgewall.com/pub/babel/Babel-0.9.5.zip
easy_install --prefix $KANON_OPT http://www.i-act.co.jp/project/products/downloads/Trac-0.12.1.ja1.zip
easy_install --prefix $KANON_OPT xlrd
bzr co lp:trac-bzr /tmp/trac-bzr-install
easy_install --prefix /opt/kanon /tmp/trac-bzr-install
rm -fr /tmp/trac-bzr-install


### install trac plugins
easy_install --prefix $KANON_OPT http://svn.edgewall.com/repos/trac/plugins/0.12/mercurial-plugin

#resource/pluginsディレクトリのプラグインをインストール
pushd .

cd resource/plugins
for i in `ls -1 .`
do
    cd $i;python setup.py install --prefix=/opt/kanon
    cd ..  
done
cd ../..

# install plugins from web site
rm -fr /tmp/kanon_build
for i in `cat pluginlist`
do
    cd /tmp
    svn co $i kanon_build
    cd kanon_build
    python setup.py install --prefix=/opt/kanon
    cd ..
    rm -fr kanon_build
done
popd


### setup apache and restart
if [ "$OS" = 'ubuntu' ]
then
    if [ ! -f /etc/apache2/sites-available/kanon ]
    then
        cp resource/httpd.conf.ubuntu /etc/apache2/sites-available/kanon
    fi
    a2enmod expires
    a2enmod auth_digest
    a2ensite kanon
    service apache2 stop
    service apache2 start
elif [ "$OS" = 'rhel' ]
then
    CHK=`grep "Kanon" /etc/httpd/conf/httpd.conf`
    if [ "$CHK" = '' ]
    then
        cat resource/httpd.conf.rhel >> /etc/httpd/conf/httpd.conf
    fi
    echo 0 > /selinux/enforce
    echo "SELinuxが無効化されました"
    service httpd stop
    service httpd start
elif [ "$OS" = 'mac' ]
then
    CHK=`grep "Kanon" /opt/local/apache2/conf/httpd.conf`
    if [ "$CHK" = '' ]
    then
        cat resource/httpd.conf.rhel >> /opt/local/apache2/conf/httpd.conf
    fi
    /opt/local/apache2/bin/apachectl stop
    /opt/local/apache2/bin/apachectl start
fi

# データディレクトリが存在しない場合作成
if [ ! -d "$KANON_VAR/trac" ]
then
    mkdir -p "$KANON_VAR/trac"
fi

if [ ! -d "$KANON_VAR/hg" ]
then
    mkdir -p "$KANON_VAR/hg"
fi

if [ ! -d "$KANON_VAR/bzr" ]
then
    mkdir -p "$KANON_VAR/bzr"
fi

if [ ! -d "$KANON_VAR/svn" ]
then
    mkdir -p "$KANON_VAR/svn"
fi

echo "Kanon Team Conductorのインストールが完了しました。"
echo $KANON_OPT"/bin/kanon-create-project コマンドでプロジェクトを作成してください。"

shibuya.trac #10に参加しました

shibuya.trac #10に参加しました

スピード命のブログ更新です(早いだけが取りえ)。
資料の場所は以下のものだけしかわかってない(汗)・・・まあ他の方のブログを参考にしてくださいw

以下のサイトをみると、いずれ乗るかも。

http://sourceforge.jp/projects/shibuya-trac/wiki/meeting%2F14


というわけで、以下が自分のメモ書きです。

神速さんは、shibuya.tracのマスコットキャラ(シールもあるよ)

  • shibuya.tracで一番有名なtwitterアカウント
  • 受付にいるので握手しよう!(これって事前にいわないと、握手できなくね。改善が求められますな(笑))

kanonに名前を変えるよ

  • Windowsだけでなく、Linuxでも動く
  • ウォータフォールもサポート(kanon naiagara)・・・Trac Lightning相当の機能
  • Kanon Project(Ms Project ライクなuiをサポート)もサポート
    • Ms Projectのファイルもインポート・エクスポートできる!

Backlogs プラグイン

  • マイルストーンと違い、親子関係も管理できる
  • タスクボードを表示できる
  • タスクボードでステータスを更新できるので、使用者の更新頻度があがる
  • ブラウザはChromeがおすすめ
  • タスクに使えるトラッカーは一つしか選べない(カテゴリを使用して保管)

Redmineを使ったあれやこれや

  • あきぴーさんの前で、ロードマップをdisってはいけない
  • デジタルとアナログの使い分けが重要(アナログの方がいいものもある)
    • 自分のやっていることを他人に説明するツール(いい言葉だ)
  • インポートするより、テンプレートを作っておいてそれをコピーするのがおすすめ

LT

  • いろいろ面白かった(時間がなかったからしょうがないけど、もっとじっくり聞きたかったかな)
  • チケット管理システム大決戦は期待

感想

  • エクセル、MS Projectがメインの中で、TracRedmineを使ってると、常に2重管理になって、報告とかのたびに同期をとっていると、心が折れそうになる人もいると思う。なもんで、MS Projectのインポート・エクスポートは、そういう人たちにとって助けになると思った
  • BackLogsプラグインは、使いこなせれば便利そう。だけど、使いこなすためにはイメージができるまで、ある程度試さないとだめかな思う(自分だけかな?センスがある人はいけるのかも)
  • 「自分のやっていることを他人に説明するツール」という言葉は、すごいいい言葉で、自分もはじめてRedmineとか使う人には伝えたいと思った(ソース管理初めて使う人とかにも有効かも)

2010年の振り返り

新年あけてから随分たちますが、自分の2010年をいくつかのテーマで振り返ってみようと思います。
それでは早速。

appengine

今年一番楽しませてもらった分野。すごい人ばかりなので自分がいていいのかという気持ちにもなりますが、今年1年かなり情報や知識をインプットしたので、そろそろアウトプットのタイミングかな、なんて思ってます。(お仕事でできるのがベストですけどねぇ・・・)。
あと、appengineにとっての2010年は、トップエンジニアの方々が内部的な動きを解明し、ajnやtwitterの情報を通して、今ある機能のベストプラクティスがでそろってきた年だと自分は感じています。道はできているので、2011年はappengineにチャレンジするいいタイミングだと思います。



Hadoop

なぜかあの伝説の屋形船にのることのなった、以上(笑)。
まあ、概要を知らないのはエンジニアとしてまずい、ということで情報収集と理解につとめた。知識はクラウド系の理解でも役にたつことがあるので、専門でやっていこうという人以外も学んで損はないと感じた。
引き続きアンテナをはって行こうと思う。




構成管理

今年は、redmineをうまく活用できないプロジェクトをヘルプをして、立て直すなんてことがあった。うまく使いこなせない人たちをみて、プログラマの思索に出会う前の自分を思い出して懐かしいと思うと同時に、どう使うべきかという話ができる自分に成長を感じたりしました。
そんなわけで、次はgitで分散管理して、トピックブランチも華麗に使いこなすなんてステップを妄想していたわけだったんですが、諸事情によりお仕事で使えない状態になってしまいました。なので、プライベートでなんかアプリ作って構成管理しないと駄目かな、って状態です。。。




Flex

コーデリングのスキルとしては、今年一番身に付けた分野。サンプル的な画面を作るのは結構簡単なんだけど、メニューでいくつも画面遷移するような構成とかにすると、ViewStackと戦うはめになって結構大変なことがわかった。一から作ろうとすると、イベント伝播とコンポーネントのライフサイクルの管理で死ぬことになる(少なくとも自分の技術力では厳しい)。
ここら辺をMate(マテ)というフレームワークを使うことである程度スッキリした形で作れる感触をつかめたので、なんか作ろうと思えばいけそうな感じ。
次のステップとしては、Progressionというフレームワークが良さげなので、そちらも試してみるか、AIRでなんか作ってみるか、って感じなんだけど・・・いい加減、javascriptから逃げ続けるのもどうかという思いもあるので、2011年は特に目標を定めない。スマートフォンの開発環境についてだけはアンテナを貼る予定。



勉強会

ajnとBPStudyを中心にhadoop、構成管理、PHPFlex関連に参加。
これらの勉強会から得たものは非常に大きいと感じているので、今後も継続したい。


Twitter

本格的に使い始めたのは今年。最初はひがやすおさんのappengineの公開リストを毎日読むところから始まった。
最初は、appengineクラスタの人達の議論を楽しく眺めていただけなんだけど、ajnやahackに参加してつぶやいたりしているうちに、そういえばこのid見たことあるって感じでクラスタの方々に認識してもらえた。
懇親会でも、フォローしていれば話題に困らないし、kashisanってアーセナルファンなんですよね、なんて相手から話題をふられることも。
このおかげで懇親会に参加しやすくなったので、ほんと始めてよかったな、と思います。



ブログ

勉強会参加してノートをとる→togetterのまとめ見る→他の人のブログをみる→ブログ書かない
という流れができつつある(下書きまで書いて公開していないもの多数)。
togetterのまとめがなかったり、ブログ書く人が多くない場合のみ、書いているので結果的によく参加している勉強会のブログがないという状態に。勉強会をメインに書いていましたが、ブログの役割自体を見なおす必要がありそうです。
で、まあ、見直し案のひとつとして、振り返りをしてみてはどうだろうかということで、この文章があったりします(笑)。



お仕事がらみ


ここについては、少し長いスパンで振り返ることにします(具体的には2008年〜2010年の期間)。


2008年は、PCと携帯のECサイトの運用管理をお仕事でやることになり、PMを担当した(某一部上場会社の全撤退により、このお仕事がまわってきた・・・いままで2次請けがおおかったけど、これは1次受け)。これまではプロジェクト管理っぽい仕事をすることはあったけど、あくまで開発ありき。そんなわけで、この年はいわゆるプロジェクトマネジメントに専念。コードを書かない1年となった。まあ、これまでに開発チームのここまで権限もらえたことがあったわけではないので、経験としては非常に大きかったし、多くのことを学べたと思う。自分がマネジメントする場合はこういう風にしようと考えていたことも実践できたし、実践からしか学べないようなことも身につけることができた。内外ともに非常にいい評価はもらえたし、大きな1年でした。
ただ、今になって思うと、コードを書くことに対する意識が変わりすぎたとも感じます。この年に結婚しているので、プライベートも忙しく、環境の変化も大きかったというのもあるけど、いくらなんでもコードを書かなさすぎましたね。(あと、人生初のネットゲームにはまりすぎたという要因もあるか・・・)。
当時の自分に何か伝えるとしたら、少しでもいいからコード書くように、と言いたいですね。


2009年は、2008年にお世話になっていた会社がBtoCから完全撤退し、BtoBに専念するということで、その後始末に協力。その後は自社で請負メインでお仕事って感じでした(その間、営業っぽいお仕事も)。
この年は、BtoC撤退のおこぼれみたいな感じで、エンドユーザー相手に直接お仕事できたのが大きな出来事で、提案から、見積もり、納品まで通してやることができました。ここは正直うまくいかないことも多く、エンドユーザーと直接話をする難しさを感じました。とりあえず、営業的な交渉は改善の余地ありということがわかり、いい経験になったと思います。
2010年は、夏までは引き続き、自社で請負のお仕事。で、夏からは派遣っぽいお仕事をすることに。みんな不況が悪いといえばそれまでなんですが、5年前ぐらいに前の状況に戻ってしまいました(2008年は例外として、2005年ぐらいからは派遣っぽいお仕事ではなく、請負の仕事メインでやっていました)。
ここ5年ぐらいの自分の仕事は、自力で切り開いてやっていた感じなんで、今の状況が『自分の会社の普通』なわけなのですが、いざやってみるとギャップの大きさに苦しみます(主に意識面で)。いろいろ消化できていないことが多いので、この解消は2011年の課題ですね。




という感じに、いい感じで振り返えれたので、KPT法もどきでまとめてみます。
Keepは継続すること、Problemは問題があるので改善すること。新しくチャレンジすること(振り返りとは関係ないものあり)

Keep

  • ajn中心に勉強会に今年と同じぐらい参加
  • hadoop関連の情報にアンテナをはる

Problem

  • ブログの役割を見なおす
  • コーディングの時間を増やす
  • お仕事のもやもやを解消

Try

はじめての試みでしたが、自分の感覚より2010年の収穫はたくさんありました。
客観的に現状が確認できてよかったように思います。
今後も続けていきたいですね。というわけで、2011年中に振り返りのブログ記事を書くのは裏目標かな(笑)。

2010年下半期ニコマス20選 〜kashisanの場合〜

ニコマス20選に参加します。

2010年7月1日〜2010年12月31日の間に投稿されたニコマス新作

1人のPにつき1本ずつ

20本以内をブログやマイリストで公開して参加エントリー

※分かる範囲でP名を表記していただけると助かります

ということなので、これにならって記載していきます。
選考基準としては、自分をアイマスに引き戻した、架空戦記物、卓マス物と、印象にのこった動画をチョイスします。
結果的に有名どころばかりになりましたが、それは気にしない。

では、早速。



2010年下半期ニコマス20選



D
介党鱈P


自分をアイマスの世界に引き戻したシリーズ。
初見では、明け方まで見続けるはめになりました(笑)。





D
わりばしP


自分を卓マスの世界に引き込んだシリーズ。
非常に丁寧な説明で、まったくTRPGをやったことない自分でも楽しむことができました。





D
ブリッツP


自分を卓マスの世界に定着させたシリーズ。気がつくと、リプレイまで読む人になっていましたよ(笑)。





ここからはPV系です。


D
さぼてんP


振り付けだけじゃなく、時代まで再現している。いろいろ思い出させてくれたすごい作品。ほんと感動しました。
さぼてんPは他にも衝撃的な作品が多くて、票が割れてしまいそうなのが今から心配です。
他の作品もこれを選ばないなんてありえないレベルがいくつかあって、今回は苦しい選択でした・・・





D
G様P


この人も1作品選ぶのが難しいPの1人。
春香のギター演奏が衝撃的だったので、こいつをチョイス。






D
大胸筋矯正ブラジャ氏


第5回MMD杯の作品。これも演奏系ですが、MMDの可能性を感じさせるとても完成度の高い作品です。





D
べすP


バックダンサーが腐った死体を選べる発想に敗北です。
どうしたらこんなことが思いつくのか不思議ですね。





D
ドリ音P


今年、大活躍のドリ音P。この人も、票が割れてしまうのが心配になるPの一人ですね。
人力の世界では頭一つ抜けてる感があり、どこまでいってしまうんだろう、って感じです。






D
カブキンP


「4人で向こう側に行ってみました」(動画の説明文より)

・・・いや、こんな素敵でカッコいい2次元へのダイブは初めてみました。
あんた達最高だよ!





D
木っ端っP


こちらは春香を3次元に連れてきました、って作品ですね。
実写との合成が美しいです。派手な演出も好みですね。
若干、埋もれ気味なので、もっとアクセス数が伸びて欲しい作品です。





D
だいすP


ネタかと思ったら、ガチ以外のなにものでもなかった。技術力はもちろんですが、センスに脱帽。
走るシーンに注目。





D
FRISKP


だいすPとは違ったベクトルで、センスが異次元。
すばらしくオシャレな作品です。





D
ブイヒサP


色使いにセンスを感じさせる作品。
作品全体の華やかで暖かな雰囲気がとてもすばらしいです。
3作目と迷いましたが、こちらをチョイスしました。
次の作品が楽しみなPの一人です。





D
ぎょP


シンクロ枠。
曲とダンスのシンクロがすばらしい。
見ていて気持ちいい作品です。





D
F-san


表情がすばらしい。この動画のおかげで、恋の抑止力が好きになってしまいました(笑)。
デビューしてからメキメキと実力をつけていて注目しています。今後の活躍に期待。





D
合作
@まさたかP うしわかP おくるだP お茶P カズヤP 島P しょじょんP シラカワP deadblue238P tloP 魔汁P


アイマスP達のセンスと技術力がどんだけすごいか嫌でもわかる作品。
まったく、こいつらどうかしてるゼ(褒め言葉です)。





D
合作
映像担当:うしわかP 友P
楽曲担当:Die棟梁P
ロゴデザイン:orgoneP


映像が綺麗(ニコニコでは異次元)、センスがすごい、そしてピアノ演奏まで。
アイマスプロデューサー達の技術力がわかる作品。





D
0907P合作


ライブ会場にいるような臨場感。異次元の技術力による手抜き。
最後のKosmos Cosmosは鳥肌ものです。
個人的には宇多田ヒカルのライブ並を上回る感動がここありました。





D
淫の蘭P


本気で削除されるんじゃないかと心配してしまうぐらいの再現度。すごい感心してしまったので、これは選ばざるをえない。






D
fumi-A


半年の時間と等価交換で人体錬成。その愛情と労力にただただ頭が下がります。
まさに、プロの変態(いちおう褒めてるつもり)。