Hatena::ブログ(Diary)

Ryoの開発日記 RSSフィード

            "生きる"を科学する



大学時代の研究 || ddkの日記 || tyouiifanの日記 || Yoshikuniの日記
あなくつと愉快なソフトウェアたち|| CLKs
Ceekz Logs||RyoのFacebook||Ryoのmixi|| 登 大遊@筑波大学情報学類の SoftEtherVPN日記
はてなブックマークをマッシュアップした情報推薦サービス
TOFU-G||高校時代の活動|| 分散マシン操作ライブラリ Svengali
Linkedin|| Google+||個人サイト( ryogrid.net )|| ひらめいったー
Ryoのつぶやき ||Ryoに響いた言葉 ||Ryoの本棚 ||そのうちやりたい
My Profile by iddy Subscribe with livedoor Reader FriendFeed でフィードにアクセス

2013-03-06

神林式数字暗記術

脳トレの一種としてn-back課題というものがあって、少しだけやっていたことがあった。


 Nバック課題

 http://ja.wikipedia.org/wiki/N%E3%83%90%E3%83%83%E3%82%AF%E8%AA%B2%E9%A1%8C


 n-back課題Webで体験できるサイト

 http://cognitivefun.net/test/5


n-back課題についていいかげんに説明すると、任意サイズの縦横同じ個数のマス目があって、その中で以下をやるもの


 1)ランダムにマス目が点滅していくのでそれを順番に覚えていく

 2)点滅する度に、そこの点滅のn個前の点滅が同じ場所であるかをYes or Noで回答する


とりあえず、本稿では雰囲気だけ分かってもらえば良いので、上記の体験できるサイトに行って青いボタンを押してみて欲しい。


で、この課題をやっていたのだけど、点滅したマスを覚えておくというのが難しく、なかなかうまくできなかった。

そこで、編み出したコツが点滅の順番を一筆書きで追いかけて、その形を覚えておくという方法

これを駆使することで大分できるようになった。


このテクニックを応用したのがタイトル数字暗記術。

数字をマス目にマッピングして、数字列を一つずつ追いかけていった軌跡を一つの形として覚える。

# ちなみに、これをやるときは指で軌跡を描くなどすると、体の感覚も駆使できるので更に良い。



こうすると、何も工夫しないと短時間で忘れてしまうところが、長い間・確実に覚えておける。


あと、記憶って、いろんな形態で頭に入れておくと忘れにくいので、本稿のテクニックと併せて以下などを組み合わせると更に記憶の強度があがる。


 ・語呂合わせ

 ・数字関係を覚える (ex: 4832なら4x8=32、248なら倍々、2525なら5の2乗が2つ、とか)


さすがに、数字を観る度に上述のテクニックをやっているわけではないが、どうしても一定期間は覚えておかないといけないような数字があった時は駆使して覚えるようにしている。

我ながらなかなか良いテクニックだと思っているので、本稿で共有しておく。


【応用】

任意情報数字マッピングすることでこのテクニック適用できる(と思う)

# 自分はやっていないのだが...


 ・ひらがな母音、子音に番号をつければ、数字2つでひらがな一文字が表現できる。

 ・アルファベット → A〜Zを10個ずつに分割して並べれば、分割グループの番号とグループ内のインデックスの2つの数字で1文字が表現できる


やる気のある人がいたら試してみて効果のほどを報告して欲しい。

2012-01-21

仕事を速くしたい - 作業時間プロファイリング-

仕事パフォーマンスを向上させたい」

仕事を速く終わらせたい」

働く人の誰しもが思うことだと思う。

今回はこれらについて考えてみる。


まず作業を大きく2つに分類してみた。


  • A. 重要なことに頭を使う (設計、計画、コードの書き方...etc)
  • B. Aに付属するどうでもいいこと
    • ・手を動かしている時間
    • ・頭を使ってはいるがどうでもいいことはコチラ(考えたことを文章化、言語化する時間等)

Aは経験を積むか、頭が良くならないとどうにもならないが、

Bは工夫したり、適切なツールを使うことで短縮できるはず。


で、Bは思っているより大きな割合を占めているのではないかというような気が最近している。

では仮にこの仮定が正しいとすると、そのようなBは何か。


分析するために、作業内容をそれなりに細かい単位まで分解してみた。

# かなり適当です


 http://ryogrid.net/~ryo/dist/working_profile.pdf


"個別に挙げた"がメイン。

"まとめてみた"は"個別に挙げた"の中に共通に現れるものブレークダウンしたもの

"常に発生"は何をするにも必要となる動作をくくり出したもの


これらのうちのどこに時間がかかっているのだろう。

各々の割合を知りたいが、毎日自分が繰り返していることなのに良く分からない。

# 人もプロファイラとかで解析できれば良いのになぁ。


以下の情報ありましたら教えてください。

> 皆様


# twitterreply頂く形でもOK

# こちらの方がすぐ反応出来て良い?

2011-09-18

名古屋の人たちが参加しているオフ会勉強会を捕捉する(1)

日々、TLを見ると周りの人達はいろんなイベントに参加していたりする。

自分もそれらのイベントに参加したいが、事前に開催情報を知ることが出来ていないので参加のしようがない。


といっても方法がまったく無いわけではなくて、勉強会であれば、IT勉強会カレンダー( http://bit.ly/qpPgrS ) とかを見るという方法はある。しかし、IT勉強会カレンダーは大量にイベントがありすぎて、自分場合どれに参加すれば良いか決められないし、そもそも日々開催されているイベントのうちどれだけが網羅されているのか良く分からず、これに頼って良いのかか不安能動的にチェックするというのも面倒くさくて、自分場合は続かない。

# Googleカレンダーを使っている人は自分のにインポートすれば良いかもだけど、あの量をそのままインポートしても辛いものがある


そこで、自分のTLや、自分作成したlistの中で発言されたイベント情報を収集するスクリプトを書いてみたので紹介する。


動作概要

指定したリストのTweetsから、指定したキーワードのいずれかを含む Tweet抽出し指定したディレクトリテキストファイル形式で書き出す。

ファイルは日毎で作成される。

コード ( collect.rb )

# -*- coding: euc-jp -*-
require 'rubygems'
require 'pp'
# for Twitter
require 'twitter'
# for Userstream
require 'userstream'

require 'kconv'

CONSUMER_KEY = "<取得した値を設定>"
CONSUMER_SECRET = "<取得した値を設定>"
OAUTH_TOKEN = "<取得した値を設定>"
OAUTH_TOKEN_SECRET = "<取得した値を設定>"

LIST_NAME = "<自分で作ったリスト名を設定>"

FILE_OUT_PATH_BASE = "./"

KEYWORDS = ["オフ","勉強会"]

# @brief 指定されたリストのメンバを返す
# @param [in] list_name 取得するリスト名 ( String )
# @param [in,out]
# @param [out]
# @retval 所属するユーザ screen_nameリスト( Array <String> )
# @note Twitterクラスの初期化(認証)が完了した後で呼び出すこと
def get_list_members(list_name)
  if list_name == ""
    return nil
  end

  list_names_arr = Array.new()

  cursor_num = -1
  loop do
    result = Twitter.list_members(list_name, {:cursor => cursor_num})
    result[:users].each{ |elem|
      list_names_arr << elem.screen_name
    }
    cursor_num = result[:next_cursor]

    break if cursor_num == 0
  end

  return list_names_arr
end

class TweetAnalyzer

  def initialize()
  end

  # @brief 文字列がキーワード群を含むか判定する
  # @param [in] str 検索対象文字列 ( String )
  # @param [in] keyword_arr キーワード群 ( String )
  # @param [in,out]
  # @param [out]
  # @retval true いずれかのキーワードが含まれた
  # @retval false どのキーワードも含まれない
  # @note Twitterクラスの初期化(認証)が完了した後で呼び出すこと
  def is_contain_keyword(str, keyword_arr)
    keyword_arr.each{ |keyword|
      if str.index(keyword) != nil
        return true
      end
    }

    return false
  end

  # @brief 与えられたテキストを処理する
  # @param [in] tweet_text tweetテキスト ( String )
  # @param [in,out]
  # @param [out]
  # @retval 無し
  # @note Twitterクラスの初期化(認証)が完了した後で呼び出すこと
  def process_tweet(tweet_text)
    # キーワードを含んでいるようであれば保持
    if is_contain_keyword(tweet_text, KEYWORDS) == true
      ofile_path = FILE_OUT_PATH_BASE + Time.now().strftime("%Y-%m-%d") + ".txt"
      `echo "#{tweet_text.tosjis()}" >> #{ofile_path}`
    end
  end
end

# ログイン(1)
Twitter.configure do |config|
  config.consumer_key = CONSUMER_KEY
  config.consumer_secret = CONSUMER_SECRET
  config.oauth_token = OAUTH_TOKEN
  config.oauth_token_secret = OAUTH_TOKEN_SECRET
end

# ログイン(2)
consumer = OAuth::Consumer.new(
  CONSUMER_KEY,
  CONSUMER_SECRET,
  {:site => 'https://userstream.twitter.com/'}
)
access_token = OAuth::AccessToken.new(
  consumer,
  OAUTH_TOKEN,
  OAUTH_TOKEN_SECRET
)

list_members = get_list_members(LIST_NAME)

analyzer = TweetAnalyzer.new()

userstream = Userstream.new(consumer, access_token)
userstream.user do |status|
  begin
    # 指定されたリストに含まれるユーザの発言のみ抽出
    if status[:text] && ( list_members == nil || list_members.include?(status[:user][:screen_name]))
      analyzer.process_tweet(status[:text].toeuc())
    end
  rescue => e
    p e
  end
end

使い方

必要なgemインストールする

gem install userstream twitter


1.API認証キーを設定する。

まず、以下の4つを取得する。取得方法はコチラ ( http://bit.ly/qDrJtM ) を参照。

取得できたらコードの同名の定数に設定。

  • ・CONSUMER_KEY
  • ・CONSUMER_SECRET
  • ・OAUTH_TOKEN
  • ・OAUTH_TOKEN_SECRET

2.キーワードを集めるリスト名をLIST_NAME定数に設定する。

リストを指定しない(TLのtweets全てを指定)する場合は空文字("")を設定。上のコードでは私が作ったnagoyaリスト ( http://twitter.com/#!/list/ryo_grid/nagoya ) になっている。

# ちなみに、このリストは名古屋近辺在住(とおぼしき)方々のリストで、コレ ( http://bit.ly/nCM7Pp ) を使って芋づる方式で作成ソーシャルハックおいしいです^p^


3.フィルタをかけるキーワードをKEYWORDS定数に設定する。

上のコードでは"オフ"と"勉強会"の2つが設定されている。

他にも足したい方はどうぞ。


4.あとは以下で起動するだけ。

ruby collect.rb

バックグラウンドで実行するならこんな感じ?

nohup ruby collect.rb 2>&1 > /dev/null &


自分は以下に作成して、Webからアクセスできるようにしている。


http://ryogrid.net/~ryo/dist/nagoya_evt_tweets/


能動的にチェックしようとするとうまくいかないので、自分作成されたファイルURLケイタイ(スマートフォン)にメールするようcronを設定している。

% crontab -l
55 23 * * * /bin/sh /home/ryo/cron_script/mail_evt_txt.sh

% less /home/ryo/cron_script/mail_evt_txt.sh
#! /bin/sh

echo "http://ryogrid.net/~ryo/dist/nagoya_evt_tweets/"`date +%Y-%m-%d.txt` | mail -s "nagoya_evt_tweets "`date +%Y-%m-%d` xxxxxxxxxxxxxxxxx@xxx.xxx -c ""

これから

Tweetの選別方法が単純すぎるのでもう少し賢くするつもり。

例えば、"オフ"というキーワードを設定した場合、"オフィス"とか"オフライン"なんてのも引っかかってしまう。これはあんまり

ひとまず、正規表現でも使うのかな。


あと、Tweet全文はいらないのでキーワードだけ抜き出してカウント数でランキングするとかしたい。

これをやるためには、形態素解析とか必要な気がするけどRubyで出来るのだろうか。

複数文字列から一致するキーワード抽出することができれば形態素解析しないで済むだろうが、処理コストリーズナブルな範囲に収まるだろうか。Rubyだとアルゴリズムが賢くても厳しいかな。


先に言っておく

Twitterクライアントフィルタかければ良いじゃんとか思った人もいるかもしれない。

しかし、それだと自発的にチェックしないとダメで続かないのである

その点、今回のスクリプトを使えば、メールで強制的に読ませるとかできるので良い。

2011-06-26

今日つぶやき

Powered by twtr2src