2012年2月13日月曜日

ライフログとりはじめてみた

お久しぶりです。

最近はまったくダラダラとすごしてしまっております。

休憩期間…ということにしてます。。。

さて、久しぶりに何かやったので残しておく、、、

ライフログをしっかりとってみよう!!ということで
色々設定してみました!!

考えている環境としては以下になります。
*Twitterに情報を発信するだけのお手軽ログ
*iPhoneから行える
*一日分のログを確認、記録、保持(自動化)


基本的にはWebでググると色々でてきますので
それを参考に好きな組み合わせにしました。
http://cyblog.jp/modules/weblogs/6586
例えば↑とか。

組み合わせ
aTimeLogger
で何やってたかのログ
これはTwitterに自動でログが投稿されます。

Dayta
で食費とかを管理。
これってつぶやきしてくれるらしいのだが、
まだつぶやきが確認できてない…w

ツイエバ
でEvernoteにその日のつぶやきをノートとしてまとめる。

前々からEvernoteは使ってましたが、
たま~にしか使ってなかったのでノートはぐちゃぐちゃでした。

そこに新たにログを追加していくのも汚くなるので、
別アカウントを取得し、
今のアカウントと、ノートブックを共有させました。
便利ですね~

同じアカウントでタグで分けるよりも、
iPhoneから見た時には別ノートの方が見やすかったりします。

ただ、権限が閲覧のみなので、ちょっとここの記録を
修正したいな~とか、
ちょっと気持ちをメモしておくかっ
ってときには同じアカウントの方がいいかもしれません。

ただ、私はおそらく、そんなことはしないだろう!と
(少なくともiPhone上からは)
思っているので、わざわざ別ノートにしました。

あとで編集したければそのアカウントで入ればOK。
(そこまでして編集したい内容なんてないだろうけどw)

あ、あと
つぶせん
というアプリもいれました。

Twitterにつぶやくこと 専門のアプリです。
定型文を100個まで登録できるので、
毎日行っていることとかはこれで楽々つぶやけます。

あとは、すぐに今日のつぶやきを確認&別途つぶやくように
普段つかってるTwitterアプリとは別のアプリのデフォルトを
このログ用のTwitterアカウントにしておいた、とかですかね。

これで何かいい効果があるかはわかりませんが、
いちいち今日あった出来事だけをmixiの日記に書くような
めんどくさいことはしなくてもよさそうです。
(Twitterにつぶやいてればそれも元からいらなかったような
気もしますが。)

まあ
とりあえずやってみます。

自動化の設定はしたものの、
結局つぶやくところは手動なのが若干気に食わないような
そこは手動じゃないとだめだろ~みたいな心の葛藤が…

行動すべてを自動で取得しておいてくれるようだとすごいな
もはや犯罪の領域かな…w

効果がよさそうだったら
そのうち感想でも書こうと思いますーーーー

2012年1月3日火曜日

Io2日目:ちょっとだけ

あけましておめでとうございます。

新年最初のプログラミングは、Ioでした。

さて、Io2日目ですが、正月ボケでめっちゃつかれまして、
すごく中途半端なところで力尽きました;;

やった軌跡だけ残しておきます。

while文とfor文の制御構文と、
演算子を追加しました。

以下、ログ

C:\Users\->io
Io 20110905
Io>
==> nil
Io> i := 1
==> 1
Io>
==> nil
Io> i slotNames
==> list()
Io> i type
==> Number
Io> while( i <= 11, i println; i = i + 1); "This one goes up to 11" println
1
2
3
4
5
6
7
8
9
10
11
This one goes up to 11
==> This one goes up to 11
Io> for(i,1,11,i println); "This one goes up to 11" println
1
2
3
4
5
6
7
8
9
10
11
This one goes up to 11
==> This one goes up to 11
Io> OperatorTable
==> OperatorTable_0x1364f48:
Operators
  0   ? @ @@
  1   **
  2   % * /
  3   + -
  4   << >>
  5   < <= > >=
  6   != ==
  7   &
  8   ^
  9   |
  10  && and
  11  or ||
  12  ..
  13  %= &= *= += -= /= <<= >>= ^= |=
  14  return

Assign Operators
  ::= newSlot
  :=  setSlot
  =   updateSlot

To add a new operator: OperatorTable addOperator("+", 4) and implement the + message.
To add a new assign operator: OperatorTable addAssignOperator("=", "updateSlot") and implement the updateSlot message.

Io> OperatorTable addOperator("xor",11)
==> OperatorTable_0x1364f48:
Operators
  0   ? @ @@
  1   **
  2   % * /
  3   + -
  4   << >>
  5   < <= > >=
  6   != ==
  7   &
  8   ^
  9   |
  10  && and
  11  or xor ||
  12  ..
  13  %= &= *= += -= /= <<= >>= ^= |=
  14  return

Assign Operators
  ::= newSlot
  :=  setSlot
  =   updateSlot

To add a new operator: OperatorTable addOperator("+", 4) and implement the + message.
To add a new assign operator: OperatorTable addAssignOperator("=", "updateSlot") and implement the updateSlot message.

Io> true xor := method(bool, if(bool, false, true))
==> method(bool,
    if(bool, false, true)
)
Io> false xor := method(bool, if(bool, true, false))
==> method(bool,
    if(bool, true, false)
)
Io> true xor true
==> false
Io> true xor false
==> true
Io> false xor true
==> true
Io> false xor false
==> false
Io>


今年もよいお年になりますように。

2011年12月4日日曜日

Io言語に触れてみた

"7つの言語 7つの世界"の2言語目
Ioに突入です。

Ioの1日目

検索するときには、【Io 言語】で検索する。

環境:Windows7 Home 32bit
*Ioのインストール
Javaとかでよくある、インストール手順みたいなのが
あるかと思ったが、Ioという名前からして
検索しても特にHITしなかったので、とりあえず
前に進むことにした。


http://iolanguage.com
から、iobin-win32-current.zipを落としてきた。

それを解凍して、README.txtを読んだら
まぁいい感じにやってくれ、みたいな感じを受けたので
いい感じにやることにした。

IoLanguage-win32-20111103.exe
をダブルクリックすると解凍される。

IoLanguage/io.exe
があるので、それをダブルクリックすると、
ウィンドウが立ちあがる。
とりあえずこれで会話ができる。

*まずは挨拶


Io> "Hi ho, Io" print
Hi ho, Io==> Hi ho, Io


次は打った履歴
Io> Vehicle := Object clone
==>  Vehicle_0x157e550:
  type             = "Vehicle"

Io> Vehicle message := "This is message."
==> This is message.
Io> Vehicle message
==> This is message.
Io> Vehicle message = "Message is updated."
==> Message is updated.
Io> Vehicle message
==> Message is updated.
Io> Vehicle timer ::= "10 min"
==> 10 min
Io> Vehicle timer
==> 10 min
Io> Vehicle setTimer("20 min")
==>  Vehicle_0x157e550:
  message          = "Message is updated."
  setTimer         = method(...)
  timer            = "20 min"
  type             = "Vehicle"

Io> Vehicle timer
==> 20 min
Io> Vehicle timer = "30 min"
==> 30 min
Io> Vehicle timer
==> 30 min


VehicleはObject をclone して
そこにmessage slot を定義している。

 "="   は、slotの名前が定義されているものの値を変える。
 ":="  は、slotの名前がなければ作成する。
 "::=" は、slotの名前がなければ作成し、setterも作る。

Io> Vehicle type
==> Vehicle
Io> Vehicle slotNames
==> list(timer, type, setTimer, message)

すべてのオブジェクトにはtype メソッドがある。
オブジェクトの種類を表す。


Io> Car := Vehicle clone
==>  Car_0x17853a8:
  type             = "Car"

Io> Car slotNames
==> list(type)
Io> Car type
==> Car
Io> Car message
==> Message is updated.
Io> ferrari := Car clone
==>  Car_0x157e820:

Io> ferrari slotNames
==> list()
Io> ferrari type
==> Car
Io> ferrari message
==> Message is updated.


ここまでの関係を簡単に図にすると、



Object

Vehicle

Car  --インスタンス--> ferrari



Ioのタイプは単なる便宜的な道具にすぎない。
大文字で始まる名前を持つオブジェクトに、typeスロット
が設定される。
ferrariのtype が Car となっているがそれが嫌なら以下のようにする。

Io> Ferrari := Car clone
==>  Ferrari_0x16df5d0:
  type             = "Ferrari"
Io> Ferrari slotNames
==> list(type)
Io> Ferrari type
==> Ferrari


ferrariは、typeスロットなし
Ferrariは、typeスロットあり

先頭文字が、大文字か小文字かの違いだけ。
動作にはまったく変わりはないそう。

*メソッド

Io> method("This is method." println)
==> method(
    "This is method." println
)
Io> method() type
==> Block
Io> Car drive := method("Vroom" println)
==> method(
    "Vroom" println
)
Io> ferrari drive
Vroom
==> Vroom
Io> Ferrari drive
Vroom
==> Vroom

スロットの内容を取得する方法として
getSlotがある。


Io> ferrari getSlot("drive")
==> method(
    "Vroom" println
)
Io> ferrari getSlot("type")
==> Car
Io> ferrari proto
==>  Car_0x17853a8:
  drive            = method(...)
  type             = "Car"


特定のオブジェクトのプロトタイプを取得するには
次のようにする。

Io> Car proto
==>  Vehicle_0x157e550:
  message          = "Message is updated."
  setTimer         = method(...)
  timer            = "30 min"
  type             = "Vehicle"



すべての名前付きオブジェクトが含まれる、
マスター名前空間、Lobbyがある。

Io> Lobby
==>  Object_0x1416388:
  Car              = Car_0x17853a8
  Ferrari          = Ferrari_0x16df5d0
  Lobby            = Object_0x1416388
  Protos           = Object_0x1416328
  Vehicle          = Vehicle_0x157e550
  _                = Object_0x1416388
  exit             = method(...)
  ferrari          = Car_0x157e820
  forward          = method(...)
  set_             = method(...)
 
 
 


*リストとマップ
まずはリスト

Io> toDos := list("One", "Two", "Third")
==> list(One, Two, Third)
Io> toDos size
==> 3
Io> toDos append("Four")
==> list(One, Two, Third, Four)
Io> numList := list(1,2,3,4)
==> list(1, 2, 3, 4)
Io> numList average
==> 2.5
Io> numList sum
==> 10
Io> numList at(1)
==> 2
Io> numList append(5)
==> list(1, 2, 3, 4, 5)
Io> numList pop
==> 5
Io> numList prepend(0)
==> list(0, 1, 2, 3, 4)
Io> numList isEmpty
==> false
Io> numList push(5)
==> list(0, 1, 2, 3, 4, 5)

次はマップ
Io> pika := Map clone
==>  Map_0x157b490:

Io> pika atPut("home" , "Tokyo")
==>  Map_0x157b490:

Io> pika at("home")
==> Tokyo
Io> pika atPut("like" , "FPS")
==>  Map_0x157b490:

Io> pika asObject
==>  Object_0x16d9690:
  home             = "Tokyo"
  like             = "FPS"

Io> pika asList
==> list(list(like, FPS), list(home, Tokyo))
Io> pika keys
==> list(like, home)
Io> pika size
==> 2

*シングルトン
Io> Highlander := Object clone
==>  Highlander_0x177f3a8:
  type             = "Highlander"

Io> Highlander clone := Highlander
==>  Highlander_0x177f3a8:
  clone            = Highlander_0x177f3a8
  type             = "Highlander"

Io> fred := Highlander clone
==>  Highlander_0x177f3a8:
  clone            = Highlander_0x177f3a8
  type             = "Highlander"

Io> mike := Highlander clone
==>  Highlander_0x177f3a8:
  clone            = Highlander_0x177f3a8
  type             = "Highlander"

Io> fred == mike
==> true
Io> Highlander == fred and Highlander == mike
==> true

Highlanderは1人。
fred も mike も等しくなる。


普通に作ると等しくはならない。

Io> one := Object clone
==>  Object_0x15727f0:

Io> two := Object clone
==>  Object_0x1579780:

Io> one == two
==> false


*Object clone を破壊する。
  Object clone := "xxxxxxxxxxxx"
とか書くと、
以降はオブジェクトを一切作成できなくなる。
元に戻すには、プロセスを終了する必要がある。

逆にいいことは、以下のこと。
 オブジェクトを形造っている演算子とスロットに
 自由にアクセスできるため、数行の短いコードで
 ドメイン固有言語を作成できる。

*セルフスタディ

 *Ioのいくつかの問題点
  *検索しづらい
  *日本語リソースが少ない
 *質問に答えてくれるIoコミュニティ
  *http://tech.groups.yahoo.com/group/iolanguage/
  *Ioプログラミングガイド
   *http://xole.net/docs/IoGuide_ja.html
 *Ioのイディオムに関するスタイルガイド
  *http://en.wikibooks.org/wiki/Io_Programming/Io_Style_Guide
 
 
 確認してみよう:
 *Ioは強く型付けされた言語化、それとも弱く型付けされた言語か?
Io> 1+1
==> 2
Io> 1 + "one"

  Exception: argument 0 to method '+' must be a Number, not a 'Sequence'
  ---------
  message '+' in 'Command Line' on line 1


 *0は真か偽か?空文字列は?nilは?
Io> 0 and true
==> true
Io> "" and true
==> true
Io> nil and true
==> false

 *プロトタイプに存在するスロットを確認するには?
Io> Car proto slotNames
==> list(timer, type, setTimer, message)
Io> Vehicle slotNames
==> list(timer, type, setTimer, message)
Io> Car slotNames
==> list(type, drive)

 試してみよう:
 *スロットの名前を指定して格納されているコードを実行せよ
Io> ferrari drive
Vroom
==> Vroom
Io> ferrari getSlot("drive")
==> method(
    "Vroom" println
)
Io> ferrari getSlot("drive") call
Vroom
==> Vroom

driveはメソッドだったので、callをつけた。

 *ファイルからIoのプログラムを実行せよ。
c:\IoLanguage>io ../code/io/test.io
Hello, world

これは、パスを通しておくと楽ですね。

コンピュータ
⇒システムの詳細設定
⇒環境変数
⇒Path
に、c:\IoLanguage
を追加すればOK.

コマンドプロンプト上で、io
と打てば、io.exeが起動します。

先ほどの例も、
c:\code\Io>io test.io
Hello, world

となる。



*おわり
Ioはわかりやすくて、書きやすい。
楽しい言語だ。

量が増えてきたら、頭が混乱してしまいそうだけど、
適宜メモとか取りつつ書いていけば
けっこう使えそう?
すぐにコードが打てたのもよかった。

落としてくるだけ。

それではまた次回。

2011年11月27日日曜日

メタプログラミング?

7つの言語 7つの世界のRuby 3日目です。

モジュールについていろいろとありました。

method_missingは使い勝手がよさそう。
色々使えちゃうからどう使うかをよく考えないとかな。


最後の問題のところに関するところは
ちんぷんかんぷんな感じでしたw

頭が固いのか
単純に勉強時間が足りないだけなのか

途中まではmoduleって便利だねーと思っていたのに。

moduleに定義されていないメソッドの呼び出しがあったときとか、
そのmoduleをincludeしているクラス側に定義されていると
そのクラスの方のメソッドが呼び出される。
とかね。

今回ので少し混乱した。
混乱した感想?心境?を書いとこう。
  • moduleがいっぱいあるよ~
    moduleでmethod_missingは使えないのか~
  • moduleの中にclassって定義できるのか?
  • classの中にmoduleって定義できるのか?
  • あ~頭が寝てる~
  • なまってる
  • 体は筋肉痛、頭は脂肪まみれ、アンバランス


けど、一応ある程度は理解したから
今日はここまでで、また寝て起きたら
復習するとしよう。

寝て起きれば、次見た時には
なんだ!全然むずかしくないじゃん!!
っていう不思議な現象を待ちます。

完全にただの感想だけになりましたが、
あとで復習するっていう
宣言にしておきましょう。

復習するぞ!!

ちゃんと理解すること。

2011年11月20日日曜日

オープンクラス

Rubyのオープンクラス


クラスの定義をいつでも変更できる。

class NilClass
  def blank?
    true
    print "NilClass\n"
  end
end

class String
  def blank?
    self.size == 0
    print "String\n"
  end
end

["", "person", nil].each do | element |
  puts element unless element.blank?
end

実行結果

c:\code>ruby blank.rb
String

String
person
NilClass

まず最初の
""
が、Stringクラスなので、
Stringクラスに定義したblank?が呼ばれる。
そして、self.size==0がtrueとなるので、
unlessの左辺は実行されない。
(unlessはifの反対、falseのときに実行される。)

次に、"person"だが、
これもStringなので、Stringクラスのblank?が呼ばれる。
そして、self.size==0がfalseとなるので、
unlessの左辺が実行される。
その結果、personという文字列が表示されている。

最後に、nilだが、
これはNilClassなので、NilClassのblank?が呼ばれる。
そして、これが呼ばれた時には無条件でtrueを返す。
よって、unlessの左辺は実行されない。
よって、表示はNilClassと出力されるだけである。

オープンクラスは便利。

使えるようになっていきたい。


2011年11月19日土曜日

人生を振り返る

最近すごく寒いですね。

鼻水ずびずびです。



さて、今日は”人生を振り返る”ということについて書きます。
23歳の若造がもう振り返るのか!とか言われるかもしれませんね。

人生ってなんでしょう。
人それぞれ価値観が違うので、何をして生きていたいとか違うと思います。

人生というとちょっと大きいので少し小さくして考えていきましょう。

人生=80年くらいですかね。
1年、これも少し大きいですけど、1年の抱負とか考えますよね。
じゃあ3か月、これは考えてない人が多いかな?
1か月、このくらいは考えるでしょう。
1週間、これも予定とかあるから考えざるをえないでしょう。

1日、これって意外と曖昧なんじゃないかと思うのですが
どうでしょう。

会社員の方は1日の大半を働いていると思います。
私も会社員なので、朝7:30に家を出て、帰ってくるのは
21時くらいですかね。
なので、13時間半は会社のために動いているわけです。

残りは10時間半ですね。
ここから睡眠時間と食事の時間、フリーの時間になるわけです。
・睡眠時間は6~7時間くらい
・食事は30分くらい
なので
・フリー時間は3~4時間ですね。
今は仕事が忙しくないのでそこそこフリー時間があります。


平日はまぁ働いているので3~4時間のフリーなので
一旦置いておきます。



休日の時間についてお話しましょう。

理想の休日
って考えたことありますか?

一日フリーだったら?
あなたはどんな風に過ごしたいですか?
どんな風に過ごせたら幸せですか?

理想の休日を考えるにあたって、
どんな行動をするかは人それぞれでいいと思います。

ただ、それが数年後、何十年後、その行動をとっていて
自分が後悔しないかを考えれば、理想の行動へとつながるはずです。

それを念頭に、理想の一日の流れを作ってください。

時間がたっぷりある時はその理想の一日に沿って行動すれば、
後悔しない人生が待っています。

時間がたくさんないときは、理想の一日と比較して、
ここの部分はできるけど、こっちはできない、
と判断して行動を制限すればよいでしょう。

理想の一日の中でも優先度・重要度を作っておくと
スムーズに決まると思います。


理想の一日ができたら、次です。

明日の予定を立てる、です。

もう理想ができたわけですから、それに沿ってあとは
作るだけです。

休みの日に何時間もだらだらと寝ているのは
理想の一日に組み込まれているのでしょうか?
組み込まれているのならそれでいいですが…
(そんな人がいたら何かお勧めしますのでそれを
だまされたと思ってやってみてください。
人生が変わります。)

睡眠時間を6時間とすると、残りは18時間です。
何をしましょうか。

理想が人脈を広げたいのであれば、
外へ出かけて誰かとお話すればいいでしょう。

女の子と遊びたいのであれば、
ナンパして、仲良くなって、遊んで
という流れでいいでしょう。

スキルアップがしたいのであれば、
計画的に勉強を行えばいいでしょう。

好きなことをすればいいわけです。
好きなことをし続けていれば、後悔も少ないでしょう。
(遊んでばっかりで何も考えていないのでは後悔もあるかも)

自分の将来に対しての目標があり、それに向かうのが
苦しくても楽しいのであれば、
それを理想の一日に組み込みましょう。

そうすることで、一日一日、理想へと近付いていきます。

一日くらいだったらその計画通りに行動できるはずです。
それを繰り返していくだけです。

30歳、40歳になってから
今まで何をやっていたんだろう。
とか後悔しないように、楽しく過ごしましょう。

━━━━━━━━━━━━━━━━━━━━━━━━━━
追記:ジョブスがいいこと言ってます。






2011年10月27日木曜日

JUnit触ってみた

今度会社の研修でJavaで開発するということで、
JUnitとか使うのかなとか思いつつ、
ちょっと触ってみました。

JUnitは普通に
http://www.junit.org/
からjunit-4.9.jarが最新だったのでそれを落としてきました。

それを以下のlib内にコピー

プロジェクト名
┣src
┗lib
  ┗junit-4.9.jar
(ProjectName\lib\junit-4.9.jar)


junit-4.9.jarを右クリック
ビルド・パスに追加
参照ライブラリーに追加されていればOK.

追加してもなんだか反映されないぞっ
ってときはF5とかで更新してください。

あとは、適当にテストコードを書けばOKです。

ためしに書いた雰囲気をつかむ用。
(特にテストしたいソースがなかったので
内容は超適当)

package hello;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

public class HelloWorldTest {
   
    @Before
    public void before(){
        System.out.println("テストが呼ばれる前に実行される。");
        System.out.println("■開始");
    }
   
    @After
    public void after(){
        System.out.println("テストが呼ばれた後に実行される。");
        System.out.println("■終了");
    }
   
    @Test
    public void testNormal(){
        String[] actual = { "Hello", "World", "!!" };
        assertThat(actual,is(actual));
    }
   
    @Test
    public void testFailed(){
        fail();
    }
}
 久しぶりにEclipseを使ったせいか、ショートカットキーの忘れが激しくて少し書きづらかった…
少しめも…
Ctrl+Shift+M: import補完(なんか選択している単語についてだけだったのは気のせい?
  Alt +Shift+T: JUnitテストを実行

実行結果はこんな感じ。


@Beforeと@Afterは
casesetupとteardown。
1つ1つのテストが実行される前に実行される
初期化メソッドと、後始末メソッドです。

テスト開始時と終了時に1回だけ実行したい場合には、
@BeforeClassと@AfterClassアノテーションを使えばOK。

@Ignoreを使うと、テストメソッドと認識されない。

@Test(expected=NumberFormatException.class)
とか書くと、NumberFormatExceptionがthrowされることを
期待するテストメソッドとなる。



あと、他に
EclEmmaというのも入れました。
これは、実行されたコードを色付きであらわしてくれます。
そして、どの何%実行されているとかもみれるので、
すべてのコードの組み合わせを網羅しているかのチェックにもなります。
(だからといって、仕様を全て満たしたという意味ではない。
あくまでコードは全て通ったかどうかのチェック)

これは、Eclipseのメニューの
[ヘルプ]
⇒[新規ソフトウェアのインストール]
⇒ロケーションに、http://update.eclemma.org/と入力
⇒EclEmmaを選択
⇒次へ、とかを選択してインストールをする。
⇒再起動

実行するとこんな感じです。
緑が実行されたコード
赤は実行されなかったコード


それにしても、このブログ使いづらいかもw

画像を簡単に追加はできるんだが、
追加されるところが少しずれて、
自分で修正が結構必要。カーソルのところに
追加されるんじゃないの?

まぁいいや。

Cのテストよりも色々できそうな雰囲気を感じ取りました。
Javaの他のテストフレームワークは使えるほど
いい感じのがたくさんあるのかな。


EMMAとStrutsアプリでカバレッジ取得ができるみたいなので
テストするときにはこれは役にたってくれるのかな。

そしたらStrutsを使うことになってしまうけれど。

目的別、フレームワークの長所短所をもっと知る必要が
ありますね。

眠い。
ショーシャンクの空に
という映画をやっと見る機会ができたので、
見ようと思っていたはずなのに
JUnitに負けた!!

早く名作みたい。
それではまた次回。