2013年7月31日水曜日

Rubyで楽しい形態素解析(JUMAN編)

こんにちは!B4のmozukuです!
今回紹介するのは

RubyでJUMANによる形態素解析をやってみよう

です。

JUMANって?

京都大学の黒橋・河原研究室で作られた日本語形態素解析機です。
新バージョン7.0では
  • 非反復形オノマトペ、長音記号による非標準表記などの自動認識
  • Wikipediaから抽出した辞書の拡張
  • 自動辞書(Webテキストから自動獲得された辞書)
などが備わっており、今までの解析機ではうまく解析できなかった文章を解析できる
ようになっています。

そんなJUMANを今回はrubyで使ってみるということをやってみたいと思います。

JUMANの起動

JUMANにはサーバモードという機能が備わっており
juman -S
というコマンドでクライアントからの通信を受けて解析するサーバモードを立ち上げることができます。

こいつをrubyで使って解析結果を得てみましょう。

JUMANとのソケット接続

JUMANとの接続のためには以下のようなrubyのソースを書きます。
require 'socket'
juman_s = nil
until juman_s
  begin 
    juman_s = TCPSocket.open("localhost", 32000)
  rescue
    STDERR.print "Juman Connection Error Reconnection...\n"
    sleep 5
    retry
  end
end

STDERR.print "connect!"
接続が正しく行われればconnect!というメッセージがコンソール上に表示されるはずです。

JUMANで解析する

次に解析部についてみてみましょう。
juman_s.write("RUN -e2\n")
while f = gets
  juman_s.write(f)
  while true
    f = juman_s.gets
    print f
    break if f.to_s == "EOS\n"
  end
end
上のソースは標準入力を受け取り、形態素解析し出力するというものです。

実際に解析してみる

解析結果はこのような感じで取得できると思います!
すごい!こんな簡単に連動ができちゃった!!!
あとはもう使いたい方法にあわせて使い方をカスタマイズするだけです。

おわりに

今回は自分が使ってみたJUMAN-rubyの連動についてまとめました。
いろいろはしょり過ぎて伝わってるかは微妙ですが、記事を見て「簡単そうだし触ってみようかな!」とかおもってもらえたら嬉しいなって思います!
以上mozukuでした!

2013年7月30日火曜日

田胡研月例たこパレポート

3年生への警戒心が高まって来ました、B4の塚本です。

本日は月末の火曜日、月例ミーティングの日でした。(過去記事参照)
田胡研では月例ミーティングの後、恒例行事としてたこ焼きパーティが開催されます。
今日の記事ではそのたこパの様子をレポートしたいと思います。

2013年7月29日月曜日

three.js


three.jsを最近やってます.

・簡単に何が出来るか・・・
HTMLで3Dのプログラムが書けるjavascriptのライブラリです.
3Dは見てたら酔っちゃうので,嫌いなんですが技術は好きなのでやり始めました.

・つまづき
実際,様々なwebページを見ればsampleがあるのでテストとして動かそうとしたら,Google Chromeで「XMLHttpRequest cannot load (ローカルファイル)」というエラーがでてきました.
ローカルファイルでAjaxで通信しようとしたらでるエラーみたいです.


Google Chromeの「プロパティ」「リンク先」の最後に「--allow-file-access-from-files」をつけてChromeを再起動したら,エラーは消えます.


・3Dのプログラムについて

最低限必要なもの

material 3Dにする物体
scene   物体を貼り付ける
camera  視点
light   光源
renderer 表示するプログラム


もちろんキーボードイベントなども使えるし,光源の光の調節や視点も移動できるのでおもしろいプログラムがかけます.

さまざまなサイトがあるので使い方はそちらで確認してください.
最後にこの前書き始めたプログラムを載せます.

物体が一つあり,operateオブジェクトにより十字キーで視点が移動できるプログラムです.
楽しいと思うので是非!


(function(){
 var width = $(window).width();
 var height = $(window).height();
 var radian = Math.PI/180;

 var x =100;
 var y =100;
 var z =-400;
 var camera   = new THREE.PerspectiveCamera(40, width / height, 1, 1000); // カメラ作成。画角40、距離1?1000の部分を表示できる。
   
 var scene    = new THREE.Scene(); // シーン作成
 var renderer = new THREE.WebGLRenderer(); // レンダラ作成
   
 var KEY_CODE = {
  ENTER: 13,
  UP: 38,
  DOWN: 40,
  LEFT: 37,
  RIGHT:39,
  HIDARITE:191,
  MIGITE:226,
  BACKSPACE: 8,
  SHIFT: 16,
  TAB: 9,
  T:84,
  R:82
 }; 
 var okomeum = {
  init :function(mesh){

   camera.position.set(x, y, z); // カメラの位置はz軸の-400
   camera.position.z = 500;

   
   // sceneの後
   var light = new THREE.AmbientLight( 0xffffff );  // 真っ白を1として
   scene.add( light );
   
   renderer.setSize(width, height);
   
   function render(){
    renderer.render(scene, camera);
   }
   window.onload = function(){
    document.getElementById('canvas-wrapper').appendChild(renderer.domElement);
    render();
   }
   okomeum.square();
   okomeum.operate();
  },
  square :function(){
   var geometry = new THREE.CubeGeometry(100, 100, 100); //ジオメトリー(座標)x,y,z
   //ランバード反射行うマテリアル(表面)
   var material = new THREE.MeshLambertMaterial({
    color:0xffffaa,
    map: THREE.ImageUtils.loadTexture('./okome.jpg')
   });
   var mesh     = new THREE.Mesh(geometry, material); // 立方体と材質を結びつけてメッシュ(オブジェクト)作成
   scene.add(mesh);
  },
  operate :function(){
   $('html').keydown(function(e){
   
   switch(e.which){
    
    case KEY_CODE.RIGHT: // Key[→]
     camera.position.x += 5;
     renderer.render( scene, camera );
     break;
    
    case KEY_CODE.LEFT: // Key[←]
     camera.position.x -= 5;
     renderer.render( scene, camera );
     break;
     
    case KEY_CODE.UP: // Key[↑]
     camera.position.z -= 5;
     renderer.render( scene, camera );
     break;
     
    case KEY_CODE.DOWN: // Key[↓]
     camera.position.z += 5;
     renderer.render( scene, camera );
     break;
    case KEY_CODE.HIDARITE:
     camera.position.y += 5;
     renderer.render( scene, camera );
     break;
    case KEY_CODE.MIGITE:
     camera.position.y -= 5;
     renderer.render( scene, camera );
     break;
    case KEY_CODE.T: 
     camera.rotation.y -= 0.1;
     renderer.render( scene, camera );
     break;
    case KEY_CODE.R: 
     camera.rotation.y += 0.1;
     renderer.render( scene, camera );
     break;
   }
  });
  }
 };

    $(document).ready(function(){
 okomeum.init();
 
 });
 
})();


2013年7月26日金曜日

研究室紹介的ななにか

どーも!Uchiyamaです!

今更ながら研究室紹介をしようかと思ってみたりしてます。
べべべ別に書くネタがないからとかじゃないですよ??


2013年7月25日木曜日

OpenALについて-その2-

どもども、「知ってる人は知っている。知らない人はまぁ覚えなくてもいいんじゃね?」
wakaでございます。

少し時間が空いてしまいましたが、前回の記事に引き続きOpenALについて書いていきたいと思います。
・・・っと言ってもまだ自分自身がOpenALのリファレンスをしっかり理解しきれていなので読まれる皆様のお役に立つかはわかりませんが・・・

では、今回はOpenALのデータ型の紹介と関数について触れていきたいと思います。

OpenALライブラリのプリミティブ(スカラ)データ型はシームレスな統合が出来るようにOpenGLのデータ型を模しているそうです。保証最小サイズはOpenGLデータ型のために明記されているが、実際はC言語のどの型が選ばれるかは実装次第に任されているらしいです・・・
↑表ツール的なものがなかったので画像で勘弁してください
これがOpenALライブラリのデータ型になります。参考にしてください。



次は、関数について書いていきたいと思います。


alcOpenDevice()は英語を少しでも読める方なら気づかれるを思いますが、デバイスをオープンするための関数になります。
devicenameのところにオープンしたいデバイスの指定をします。
しかし、これを試したところalcOpenDevice(NULL);こんな感じで値にNULLを入れると適当なデバイスをオープンしてくれるみたいです。
ちなみに、NULLが返り値で返ってくると「エラー」です。

ALCdevice *device;
device = alcOpenDevice(NULL); 
↑こんな感じにソースコードの中に書いてみました。




alcCreateContext();も上記を同じように読んだままの意味の関数になります。
deviceには、上記(alcOpenDevice())で開いたデバイスを指定する。
attrlistには、いろいろを指定をすることができる。
しかし、これもNULLを入れておけば問題なく動いてくれた
ちなみに、返り値がNULLだと「エラー」。

ALCcontext *context;
context=alcCreateContext(device,NULL);
↑ソースコードにはこう書いてみました。




alcMakeContextCurrent();の関数は、コンテキストをカレントするためのものである。
コンテキストを使用するようにするもの、返り値がALC_TRUEなら「成功」、ALC_FALSEなら「失敗」となる。

alcMakeContextCurrent(context);
↑ソースコードの中にはこう書いてみました。


ちなみに、ここまではALCによるOpenALの準備する部分なので、実はまだOpenAL本体のいじっていません。
しかし、この準備をすることによってOpenALを使用することができるようになります。


それではOpenAL本体の話に・・・といきたいところですが、これ以上書いて行くと長くなってしまうので今回はこの辺にしたいと思います。

次回はOpenALライブラリの関数に関することを書いていきたいと思います。
それではまたいつの日か~~~

終わりに・・・
・・・もし次回までにopenALのリファレンスの理解ができないないようなことがあれば全く関係のない違う記事を書いているかも・・・ボソ

2013年7月24日水曜日

今月のスイーツ田胡研!! 入荷編

皆さんこんにちはNashioです.

最近暑いですねー.
なんてお決まりのつまらない挨拶をしてしまいたくなるくらい暑いです.

そんな暑さに対抗して田胡・柴田研究室では先日,今月の飲み物入荷がこそこそ行われました.


上の写真がそのときに入荷した飲み物,お菓子の写真です.
今月はすこし多めの入荷でした.

入荷したものは以下のとおりです.
  • 午後の紅茶 ミルクティー
  • ソルティーライチ
  • 桃の天然水
  • コカ・コーラ
  • C.C レモン
  • C.C サイダー
  • 爽快ビタミン
  • カルピスウォーター
  • 緑茶
  • 烏龍茶
  • 駄菓子 いろいろ
スイーツ田胡研では研究室外の方の購入も歓迎しております.
特にコンピュータサイエンス学部の3年生は研究室見学がそろそろ終盤に入ってきていると思います.
研究室見学・説明会ついでにスイーツ田胡研のご利用をお待ちしております.

おまけ

田胡・柴田研究室の研究室説明会の残りは今週木曜日(2013年7月25日)が最後になります.
まだ説明会に参加をしていない方はぜひ研究室へおこしください.

また,見学については田胡・柴田研究室ではいつでも受け付けております.
気軽に研究室へおこしください.

研究室一同お待ちしております.

2013年7月23日火曜日

Chromeで実ファイルの読み書きをする[導入編]

みなさん,お久しぶりです.
大学院修士1年の古谷です.

今日はChrome Packaged Apps を使った,ファイルの読み書きを簡単なテキストエディタを例に説明します.
まずは,Packaged Appsについて紹介します.

2013年7月22日月曜日

Makefileを書いてみる その2

B4のtyadです。 今日は前回のMakefileのについての続きです。

前回はMakefileをつりあえず使ってみました。
今回はもう少し詳しく説明します。


依存関係

最初の例では依存ファイルは1つでした。
しかし依存ファイルが以下のように2つ以上の場合、
sample: main.c hoge.c 
 gcc -o sample main.c hoge.c
このようにMakefileに記述していると、main.c、hoge.cのどちらかが更新されただけで、
main.c、hoge.c、両方のコンパイルが行われてしまいます。 そこで、
main.o: main.c
 gcc -o main.o -c main.c 
hoge.o: hoge.c
 gcc -o hoge.o -c hoge.c 
smaple: main.o hoge.o
 gcc -o sample main.o hello.o
とします。こうすることでmain.cからmain.o、hoge.cからhoge.oが生成され、sampleはmain.oとhoge.oから生成されます。
そのため、hoge.cのみが更新された際にはhoge.oがコンパイルされ、 依然コンパイルしたmain.oを利用してsampleがコンパイルされます。
これにより、コンパイルの効率化が図れます!便利!


自動変数

さっきのMakefileを書いていると、
何回も同じファイル名を書くことがありましたが、これは面倒ですね。
そこでMakefileの自動変数というものを利用します。
main.o: main.c
 gcc -o $@ -c $^
hoge.o: hoge.c
 gcc -o $@ -c $^
sample: main.o hoge.o
 gcc -o $@ $^
「$@」がターゲットファイル名、「$^」が依存するすべてのファイル名となります。 これでさっきのMakefileと全く同じ動作をしてくれます。便利! 自動変数はこの二つの他にも、
  • 「$% : ターゲットがアーカイブメンバだったときのターゲットメンバ名
  • 「$<」 : 最初の依存するファイルの名前
  • 「$?」 : ターゲットより新しいすべての依存するファイル名
  • 「$+」 : Makefileと同じ順番の依存するファイルの名前
  • 「$*」 : サフィックスを除いたターゲットの名前
などがあります。


変数とマクロ

Makefileの中で変数を自分で定義することができます。 またマクロの置換も行えます。
SRC = main.c hoge.c
OBJ = $(SRC:%.c=%.o)
sample: $(OBJ)
 gcc -o $@ $(OBJ)
ここでは「SRC」という変数に「main.c hoge.c」を代入し、 「%」記号によってマクロの置換で「OBJ」という変数に「main.o hello.o」が代入されています。


関数の利用

Makefileには変数に代入された文字列を操作するための関数もあります。 一例として、$(patsubst pattern,replacement,text)という関数を使って、
SRC = main.c hello.c
%.o : %.c
 gcc -o $@ -c $<
OBJ = $(patsubst %.c,%.o,$(SRC))
sample: $(OBJ)
 gcc -o $@ $(OBJ)
このように書くことで、textからpatternに一致するものをreplacementに置換できます。 他の関 数はいっぱいあるので機会があれば調べてみてください。


まとめ

変数や自動変数、マクロ、関数を使うことで、Makefileをプログラム的に書くことができ、
非常に便利になります。
また、依存関係の記述は大規模プログラムの開発では、重要になると思います。
今日紹介したもの以外にも、様々な書き方があるみたいです。
Makefileは奥が深いですね!



2013年7月19日金曜日

HTML5のフォーム機能

HTML5ではフォームに様々な拡張機能が付けられます。が、未だに使った事がなかったのでまとめてみました。

文字を予め表示しておく(placeholder)

名前欄に「名前を入力してください」といった文字や入力例を予め表示しておく事ができる機能です。以前(かなり前)自分はjQueryなどを用いて実現していましたが、placeholder属性を付与するだけで簡単に実現ができるようになっていました。

例とソース


上記の例のように入力すべき内容を表示しておく事で省スペースになります。また、入力例を表示する事で誤入力を防止できる効果も大きいようです。

入力すべき内容を指定する(type/pattern)

HTML5ではtype属性でURLやメールアドレスなど種類の指定を行う事で正しく入力されているか判断してくれます。間違った値が入力されていればsubmitした時にブラウザ側が警告を出してくれます。

また、pattern属性によって正規表現も使用する事ができます。指定した正規表現にマッチしなければtype属性による指定同様にブラウザ側が警告を出してくれます。

例とソース

例外な入力は送信先でも弾く事は必須になるとは思いますが、送信する前に警告してくれるのは大きな利点ですね。

アクセス時に自動的にカーソルを入力待ち状態にする(autofocus)

使ってる分には気づきにくいですが、autofocus属性をつけた入力部はページにアクセスした際に自動的にカーソルが当たります。主にアクセスして即時使う部分、検索部に使われます。Googleにアクセスするとわかりやすいと思います。

ソース

<input type="text" placeholder="カーソルがくる予定" autofocus>

このブログ内だと上手く機能しなかったので表示例は省略しました。

他にもHTML5で追加されたフォーム機能は多いですが、よく使いそうな機能を紹介してみました。各ブラウザがどう対応しているかは以下のURLが参考になると思います。

node.jsで作る!デスクトップアプリケーション

また遅刻しましたB4の塚本です。

以前の記事でHTML/CSS/JavaScriptを使った、ハイブリットアプリ開発を紹介しました。


Monacaでは、スマートフォンアプリに加えてwin8アプリの開発が可能ということでしたが、
今回はWindows/Linux/Mac OSX全てに対応したアプリを開発する方法を紹介します。


2013年7月17日水曜日

CoffeeScript入門

どうも,B4のktaroです.
今回は,CoffeeScriptについて記述したいと思います.
まず,CoffeeScriptって何?新しいプログラミング言語?と思っている方の為に解説から.
CoffeeScriptとは・・・
  • プログラミング言語の一種.コードはJavaScriptに変換される
  • JavaScriptと比較して
    • 簡潔
    • 可読性が高い
    • コードを短く記述できる
  • RubyやPythonに影響を受けている
つまり,
「JavaScriptより高性能なRuby・Pythonライクなプログラミング言語」
という事です.

ソースコードはGitHubで公開されており,注目を集めているプロジェクトです.

そんなこんなで,さっそくコードを書いていきたいと思います.
今回は,
  • Mac OS X
  • Node.jsの実行環境導入済み
  • npmのインストール済み
という環境で記述します.
Node.jsとnpmがインストールされていない方は,Google先生に質問するか,CoffeeScriptのサイトに実行環境があるので,そこで実行してみてください.
まずnpmでCoffeeScriptのモジュールをインストールしてパスを通します.
#CoffeeScriptモジュールのインストール
npm install coffee-script
#zshrcに記述
cd
vi .zshrc
export PATH="$PATH:/$HOME/node_modules/coffee-script/bin"
source .zshrc
これだけで,実行環境の設定は終わりです.簡単ですね. 次に,恒例のHelloWorldを表示させます. 任意のファイル(拡張子->.coffee)を作成し,記述します.
#hello.coffee
hello = ->
 console.log("Hello World")
hello()
これだけです.このファイルを先ほど導入したcoffeeコマンドによりコンパイルします.
coffee -c hello.coffee
コンパイルが成功すると,hello.jsというファイルが同ディレクトリに作成されます. 新しく作成されたファイルの中身を覗いてみましょう.
(function() {
  var hello;

  hello = function() {
    return console.log("Hello World");
  };

  hello();

}).call(this);
たったあれだけのコードだけで,変数定義,関数定義,クロージャーもしっかり記述されています.便利ですね。実行します.
node hello.js
Hello World
表示されました!やったね! これだけのコードでは,よくわからないと思うので,とりあえずFizzBuzzのコードを書いてみたいと思います.
#FizzBuzz 1~15
for i in [1...16]
 if i%3 is 0 and i%5 is 0
  console.log 'FizzBuzz'
 else if i%3 is 0
  console.log 'Fizz'
 else if i%5 is 0
  console.log 'Buzz'
 else
  console.log i
CoffeeScriptでは,!===といった曖昧な演算子を使わず, ===であるisを利用します. また括弧やセミコロンも省かれます. 同様にコンパイルを行い,作成されたファイルを見てみましょう.
(function() {
  var i, _i;
  for (i = _i = 1; _i < 16; i = ++_i) {
    if (i % 3 === 0 && i % 5 === 0) {
      console.log('FizzBuzz');
    } else if (i % 3 === 0) {
      console.log('Fizz');
    } else if (i % 5 === 0) {
      console.log('Buzz');
    } else {
      console.log(i);
    }
  }
}).call(this);
実行します.
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
表示されました!やったね! 今回は簡単な説明だったので,興味を持った方はいろいろ調べてみてください.
では,今回はこの辺で終わります.ありがとうございました.

2013年7月16日火曜日

就職活動の記録

こんにちは、小林です。
今回は、就活開始(12月)から内定のもらった5月までに就職活動を書きたいと思います。
3年生のこれからの就職活動の参考にしてください。

2013年7月15日月曜日

Makefileを書いてみる その1

暑いです。B4のtyadです。

今日はMakefileについて紹介します。
長くなりそうだったで今日と来週の月曜の2回に分けます。
細かい説明は2回目に回すとして、
1回目はとりあえず簡単に使ってみるところまでを紹介します。


Makefileとは

Makefileとは実行可能プログラムの生成および保守を簡単に行うためのコマンド「make」に使用されるファイルです。
簡単にいうと、コンパイルと再コンパイルを簡単にしてくれるコマンドの設定ファイルのようなものです。

2013年7月12日金曜日

言葉で遊ぼう!テキストセグメンテーション

どうも、暑くてすっかり籠りきりなmozukuです!
今回は自分のプロジェクト人工無能をやる上で学んだことの一つ

テキストセグメンテーション

について簡単に紹介したいと思います。

テキストセグメンテーションとは

ベタ書き状態のテキスト(ニュース記事や物語の文章)を意味段落に区切っていくことです。テキストセグメンテーションを行う事によって、従来は着目したいキーワードが含まれているテキスト、ページ全てを対象として分析や評価を行なっていて、分析には雑音となるデータが分析に多く含まれてしまっていました。(これによってもちろん評価値は影響を受けます。)テキストセグメンテーションによって着目したいキーワードを含む意味段落の抽出が行えることによって、質の高いデータの塊を利用することができるようになるわけです!

区切りのルール

現在でも様々な区切りルールが研究されています。代表的なものとしては
  • 語彙的結束性
  • 文脈変化を評価するパラメータ
といった統計的情報を用いたものや、
  • 接続詞や副詞などの品詞情報
  • 文頭表現や表層的情報の組み合わせ
といった統計的情報と表層的情報を組み合わせた手法
  • 確立統計モデルに基づく手法
などがあります。

区切り方

原理は単純で結束性や評価パラメータなどを実数値や平均値でプロットします。プロットの結果意味段落の境界があればそこは低いパラメータとなります。

つまり、その極小値からテキストの意味的な区切りが求められるわけです。

おわりに

今回はちょっと学術的なアプローチの活動もやっているよ?という紹介でした。内容が少し短いですね…?
テキストセグメンテーションについてほんのさわりを説明しましたが、実際は
  • どういった場面で
  • 従来の手法との違い
  • 得られた結果とその分析
といったもう少し活用事例を踏まえた上で研究されている論文を見て回り、自分の利用しようとしているものにはどのアプローチが適しているかといったことにまで踏み込んで行くこととなります。

知識は力です。なりふり構わず突進し続けるのもいいですが、自分の武器を増やしていくという事もたまにはいいかもしれませんよ。


短いですが以上です!mozukuでした!
(勉強したことをロジックとして生かしていくのも難しいです。)


2013年7月11日木曜日

目からうろこの?Gitトラブル対処術

こんにちはNashioです.

Git講座第3回ということで,今回が最終章トラブル対処術講座になります.
Gitを使っていると時々トラブルが起こることがあります.
その時の対処法をいくつか紹介して行きたいと思います.

Git講座をまだ見ていないという人はGit講座入門編Git講座中級編を見てくださいね.

Gitトラブル対処術

git status編

まずGitを使っていて真っ先に直面するトラブルとして,「なんでうまく~できないの???」ってやつですね.
特にPushがうまくいかないケースが多い気がします.
このトラブルに関しては,正しいやり方をしていれば起こらないはずなんですが,ついうっかりしていて起こってしまうことがあります.

こんな時に便利なのが,statusコマンドです.
使い方は以下のとおり
$ git status
このコマンドを実行することによってその名の通り現状のステータス(状態)を確認することができます.
なにもしていない状態ならば以下のような表示になります.
$ git status
# On branch master
nothing to commit (working directory clean)
英語を見ての通り(頑張って読みましょう.英語は大事です)現在どこのブランチにいるのか,コミットの状態は,作業はしているのかが分かります.

では,新しいファイルを作成するとどうなるでしょう
$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       hoge
nothing added to commit but untracked files present (use "git add" to track)
こんな感じになります.英語を読んでみると「git addしろ」みたいなことが書いてあります.なのでaddをしてあげましょう.

このような感じでコミットをしてないときはコミットしろと表示されます.
このコマンドを使えば何をしなければいけないかがわかるので便利です.

git reset編

次にあるのは「変更作業してたけど,うまくいかないから元に戻したい」というケースですかね.
これに関してはresetコマンドが用意されています.

オプションがいろいろあってややこしいのでじっくり見て行きましょう.

まず知っておかなければならないのがGitの作業履歴は3層構造で管理されているということです.
最後にコミットされた位置を記憶しておくHEAD,変更点を管理するインデックス,変更を行うワーキングツリーがあります.
上の図は最後のコミットから何もさぎょうをしていない状態の図になります.
何もしていないのでワーキングツリー,インデックス,HEADは同じ場所を示しています.

この状態から変更をするとワーキングツリーが移動し,addをするとインデックスがワーキングツリーと同じものになります.

上の図が変更をした際の動きです.
上の図が変更後addをしたものです.commitの-aオプションはインデックスとHEADをいっぺんに移動しちゃうオプションなので何気なく使っていた人はこのへんがわかりにくいかもしれません.

ここまではGitの内部的なお話でした.
ここからはresetコマンドのオプションがどのようなものなのかについてお話します.

resetコマンドには主に使われるオプションとして--soft,--mixed(または未指定),--hardがあります.
それぞれの動作を上記の内部的なお話をもとに解説していきます.

まずは--softオプションです.
コマンドは
$ git reset --soft HEAD
で実行されます.
動作としては,HEADをHEADに移動し,ワーキングツリーとインデックスはそのままというコマンドです.

察しの良い人は気づいていると思いますが,このままのコマンドではなにも変更されませんw.
--softオプションはHEADの位置を更に前に戻すときに使われます.
使い方は,
$ git reset --soft HEAD~
このようにします.
HEADの後ろに付いている”~”の数によってどこまで戻るかを示します.
1つ前のコミットの状態なら1つみたいな感じですね.

主に前のコミットを取り消したいときなどに使います.

続いて--mixed(または未指定)オプションです.
コマンドは
$ git reset (--mixed) HEAD
で実行されます.
動作としては,HEADとインデックスをHEADに移動し,ワーキングツリーはそのままというコマンドです.
addを取り消したいときなどに使います.

--softの時と同様にHEADの後ろに”~”をつけることによってその位置まで戻ります.

最後は--hardオプションです.
コマンドは
$ git reset --hard HEAD
で実行されます.
動作としては,HEADとインデックスとワーキングツリーをHEADに移動するコマンドです.
完全に前のコミット状態に戻ります.

変更した黒歴史をなかったコトにする時などに使います.

他の時と同様にHEADの後ろに”~”をつけることによってその位置まで戻ります.

resetコマンドは動きを理解することが少し大変ですが便利なので使ってみましょう.

git stash編

最後は「やべ,ブランチ切る前に作業始めちゃった」時の対処法です.
そんなときはstashコマンドを使いましょう.

stashコマンドはワーキングツリーの状態をスタックに一時的に保存するものです.
使い方は,
$ git stash
これでワーキングツリーの内容がスタックに保存されます.
あとはブランチを切り,ブランチに移動後
$ git stash pop
をすることでワーキングツリーの内容が戻ってきます.やったね

おわりに

今回はトラブルにあった時の対処術について紹介をさせて頂きました.
しかしながら紹介したコマンドの使い方はこれだけではありませんし,トラブルもこれだけではありません.
ですがここまでお付き合いいただけた皆さんなら,もう自力でトラブルに対応出来るようになっているはずです.

3回に渡るGit講座を通じてみなさんのGitライフが有意義なものになっていただけると嬉しいです.

2013年7月10日水曜日

研究室配属から4年の夏まで -episode of Uchiyama-

おはこんばんちは!Uchiyamaです。
この前友達に「俺って変?」と聞いたら、「変」と即答されました。はい。変人です。

さくっと書くネタが思いつかなかったので、3年生の皆さんが気になるであろう、
就活開始から4年生の夏までの流れみたいなものをざっくり書こうと思いますです。

※Uchiyamaの経験なので全ての人に当てはまる訳では無いです。
が、Uchiyamaは割と早くから説明会などがあったので、全体的な動きが早いです。
つまり、多くの皆さんはUchiyamaよりは余裕を持って準備したり就活ができると思います。

OpenALについて


ども、wakaです。
何か今回、投稿者がいないようなので、急遽私に担当が回ってきてしまいました。
*興味がある人は読んであげてください。*

 さて、今回は今取り組んでいるOpenALについて進展があったのでそれについて書いて行きたいと思います。
 「・・・おーぷんえーえる??なんだそれ?」、と思う方が多いと思います。実際私も知って一か月もたっていないです(^ ^;
OpenGLを知っている人はいましたが・・・
ちなみに私はOpenGLもよくわかっていません。


1.OpenALとは何ぞや???
   OpenAL(Open Audio Library)と言って、クロスプラットフォームのオーディオAPlであるフリー  ソフトであり、マルチチャンネル3次元定位オーディオを効率よく表現するように設計されたサウ  ンドライブラリ。
 なんか、OpenGLに似ているらしいよ・・・
 OpenGLを知らない人は、お気に入りのブラウザで検索してね♪
 
 では、次に開発環境のを整えていくために、インストール方法について書いていきたいと思いま  す。 
 (今回の開発環境はUbuntuだったのでそれに対するやり方になります。OpenALはさっきも言った ようにクロスプラットフォームなので大体同じような感じでインストールできるよ。)


2.OpenAL関係ソフトのインストール

インストールするパッケージ及びライブラリ








 ↑以上が、OpenALを利用ために必要なものになります。
 パッケージ及びライブラリの簡単な説明
 ・1行目 libopenal-dev
   OpenALのAPI
 
 ・2行目 libalut-dev
   OpenALのユーティリティツールキット開発ファイル
 
 ・3行目 libalut0
   OpenALののユーティリティツールキット
 
 ・4行目 oss-compat
   オープンサウンドシステムの互換パッケージ
   ("oss-compat"については必ず必要かどうか未確認・・・)
 
 これで開発環境は整いました。
  それでは、プログラムについてのお話をしていきたいのですが、話が深くなってしまうのでソー  ス は次回にしたいと思います。
  次回を待てない方は、サンプルソースがその辺に落ちていると思いますので、これから書くコン パイルなどに目を通してから試してみてください。


3.コンパイル方法
 今回はC言語で開発を行っていくのでC言語でのコンパイルのみ上げさせていただきます。
 ほかの言語でためそうとしている方が見ていたらごめんなさい。




 ここ注意していただきたいのが後ろについている「-lalut」になります。
 「-lalut」をつけないおyコンパイルしようとするとコンパイル時に、
 「undefined reference to '~~~~'」と出てきてしまいます。
 ↑これは、「そのメソッドなどが定められているライブラリがリンクされていない」と言われてしまう ので、気を付けてください。
  *gccのオプションについては個々で自由につけてください。

以上で、コンパイルまでできたと思います。
 運がいい人は、このまま実行すると音が出てくると思います。

 コンパイルできて、実行ができなかった人は、サンプルコードが悪いのではなく、OSにオーディオ関係のドライバが入っていなかったり、必要なパッケージソフトが入っていなかったりしていると思います。
 ↑この辺の人たちについては、次回に解決策などを描いていきたいと思っているのでもうしばらくお待ちください。

 コンパイルすらできない、という人は、パッケージやライブラリがうまくインストールできていない、もしくはVM上で実行しようとしていませんか?
 仮想OSでは音はなりませんからね。

まぁ、雑ですがこんな感じで今回は終わりにしようと思います。
次回も引き続きOpenALについての記事を書いて行こうと思っていますので、興味のある方はまた読んでください。

最後まで読んでいただいてありがとうございました。
きっと、あなたは心の広い方でしょう。

2013年7月8日月曜日

CSSの優先順位

なんとなく理解していた気になっていたCSSの優先順位について(個人的には)今更まとめてみます。

記述による優先順位

/* 全ての要素に文字色黒 */
*{
color:#000000;
}

/* p要素に文字色赤 */
p{
color:#ff0000;
}

/* class『schweppes』要素に文字色緑 */
.schweppes{
color:#ff0000;
}

/* ID『orangina』要素に文字色青 */
#orangina{
color:#0000ff;
}

というようなCSSがあり、指定された全ての条件を持つ要素があった場合(pタグかつclassが『schweppes』かつID指定が『orangina』だった)、文字色は青になります。これはIDによる指定が一番優先順位として強いためですが、この優先順位は指定の方法によってポイント式になっているようです。
ID指定100ポイント
class指定10ポイント
要素指定(h1,div,p等)1ポイント
アスタリスク指定0ポイント
これらのポイントは加算式なので、以下のようなCSSでどちらの条件も含んでいる要素があった場合、
/* 110ポイント */
#orangina .schweppes{
color:#ffffff;
}

/* 101ポイント */
#orangina p{
color:#000000;
}

ID指定とクラス指定によってポイントが高くなった上のスタイルが優先されます。また、優先順位が同じだった場合は後から読み込まれるもの(一番下に書いたもの)が優先されます。
入れ子構造にして指定していくだけで反映されていたため、自分はあまり競合した事がなかったのでポイントを意識した事がありませんでした。今後複雑なCSSを書いていて思い通りに反映されない場合等はこのポイントを考慮して組んでいくと良さそうです。

CSSの記述方法による優先順位

CSSをどこに書くか(どこで読み込むか)でも優先順位が変わってきます。優先順位は以下の通りでした。
インライン(タグに直接書く) > headタグ内(htmlに記述) > 外部CSS
個人的に意外だったのはhtmlに記述するほうが外部CSSより優先順位が高かった事でした。外部CSSは後から読み込まれたほうが優先されるため、上書き式でhtml内に記述したものも上書きしてくれるのかなと思っていましたがそんな事はありませんでした。
見なおしてみると、状況は限られていますが思ったよりも落とし穴がありました。今後気をつけたいと思います。

2013年7月5日金曜日

twitter API 1.1に対応させなければ! 


こんにちは、B4の西崎です.

自分のサイトで自分のツイートを表示しているのですが、2013年06月11日にお亡くなりになってました…

twitterAPIのvar1.0が廃止されたらしいですね.

ということで,var1.1に対応させるべく,調べて使えるようにしました.


そこで2点重要そうな変更点を見つけました.


  • API var1.1ではSSLの利用が義務付けられ,非SSLのリクエストはいずれ受け付けられなくなる.
  • 出力フォーマットはJSONのみがサポートされ,XML,RSS,ATOMの各レスポンスフォーマットはAPI var1.0とともに廃止となる.



ぼくの場合は,データをXMLで受け取っていたのでそこを直しました.


$vRequest = $connection->OAuthRequest("http://api.twitter.com/1/statuses/user_timeline.xml","GET",array("count"=>"10"));
$oXml = simplexml_load_string($vRequest);
元々上のようにxml形式のデータをうけとっていたので,var1.1で使えなくなってしまいました.


$twObj = new TwitterOAuth($consumerKey,$consumerSecret,$accessToken,$accessTokenSecret);
$req = $twObj->OAuthRequest("https://api.twitter.com/1.1/statuses/user_timeline.json","GET",array("count"=>"10"));
$tw_arr = json_decode($req);
このようにjson形式でデータを受け取ると使えるようになりました.


あとは,githubから更新されている'twitteroauth.php'と'OAuth.php'をもらってきて古いものと置き換えれば動くようになると思います.


2013年7月4日木曜日

研究室見学スタート!!

こんにちはNashioです.

昨日7月3日より東京工科大学コンピュータサイエンス学部の3年生を対象とした研究室見学がスタートしました.

それに伴い,我が田胡・柴田研究室でも本日の3限の時間を利用して研究室紹介が行われました.

その際の写真ですね.
皆さん田胡先生のお話を真剣に聞いていました.

田胡・柴田研究室としては,優秀な学生に多く来ていただきたいのですが,
本日は4名しか来ていただけなかったので今後はもっと多くの学生に来ていただけると嬉しいです.

研究室見学のアドバイス

ここからは話が変わって研究室選びのポイントを紹介したいと思います.
一個人の意見なので参考程度に知っておいていただけると嬉しいです.
研究室見学を行う際のポイントは以下のとおりです.
  • 自分が何をやりたいかを考えておく
  • 研究室になにを求めるのかを考えておく
  • 研究室見学にたくさん行く
  • 説明を聞くだけでなく直接先輩に話を聞く
こんなかんじですかね.
まず,「自分が何をやりたいかを考えておく」というのは,研究といってもコンピュータサイエンス学部では論文を発表する研究と,ものを開発する研究の2種類が主にあります.
大体どちらをやりたいかを明確にしておいたほうが選ぶポイントになると思います.

つぎに「研究室になにを求めるかを考えておく」ですが,これについては就活の支援をしてもらうことをあげる人が結構いたりします.
開発がしたいのか,論文を発表したいのか,就活の支援をしてほしいのかどこに重点を置くかでも選ぶ研究室は変わってくると思います.

研究室の特徴を周りからのウワサだけでは本当のことをしることは難しいため「研究室見学にたくさん行く」ことが必要です.
自分の考えを持ち,実際に研究室へ行ってみて感じることが大切だと思います.

その中で,「説明を聞くだけでなく直接先輩に話を聞く」ことで本当の研究室活動内容を聞くことで自分に合うか,やりたいことができるかを判断しましょう.

研究室は最低1年半活動を行う場所です.
自分に合わないところで1年半過ごすのは大変なことなので上にあげたことを参考にしながら研究室選びをしていただけるとうれしいです.

今後の田胡・柴田研究室の見学日情報

田胡・柴田研究室では毎週火曜日・木曜日の3限の時間に研究室紹介を行なっています.
研究室紹介の際は先生からお話があるだけでなく,まわりに先輩がいるので話を聞くことができます.

また,田胡・柴田研究室はいつでも研究室の見学を受け付けています.
気軽に研究棟A611に足を運んでください.
(入り口は入りにくいと思いますが頑張ってノックしてみてください)

田胡・柴田研究室についての情報が知りたければこのブログを読むか,
田胡研ウェブサイトを見る,または研究室に足を運んでください.

たくさんの3年生の見学をお待ちしています.

2013年7月3日水曜日

rubyのバージョンを管理する話

どうもB4のktaroです。

最近rubyの勉強を始めたのですが、バージョン云々で怒られたのでrbenvを利用してバージョン管理を行えるようにしました。
ということで、今回は「rubyのバージョン管理を簡単しよう!」という記事を書きたいと思います。

環境は、

OS:Mac OS X 10.8.4(Homebrew導入済み)

以上です。
Windowsは、Gitから引っ張ってきましょう。
Macを買いましょう。

まずは、Homebrewのアップデートします。アップデートは大事です。
#Homebrewのアップデート
brew update
次に、rbenvruby-buildをインストールします。
#rbenvのインストール
brew install rbenv

#ruby-buildのインストール
brew install ruby-build
次にパスを通します。今回はzshrcに書き込みます。
#zshrcへの書き込み
vi ~/.zshrc
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
source ~/.zshrc

#PATHが通っているかの確認
echo $PATH
以下のコマンドを入力してrbenvがインストールされているかも確認してください。
#rbenvのバージョン確認
rbenv -v
rbenvがインストールされているのがわかります。 次に、opensslreadlineをインストールします。この辺は説明は省きます。
#opensslのインストール
brew install openssl

#readlineのインストール
brew install readline
ここからやっとrubyのバージョンを切り替えるところに入ります。 前置きが長かったですね。 初めに、rbenvでインストールすることの出来る様々なバージョンを確認してください。
rbenv install -l
めちゃくちゃ長いので、途中までの画像です。 ここから今回は「1.9.3-p429」をインストールしたいと思います。
#指定したバージョンのインストール
rbenv install 1.9.3-p429
インストールが終了したら、以下のコマンドを実行してみてください。
#インストールされているバージョンの確認
rbenv versions
先ほどのバージョンがインストールされていることがわかります。 *マークがついているモノが現在反映されているバージョンです。 では、反映させます。
#反映
rbenv global 1.9.3-p429
rbenv rehash
これで、自分の好きなバージョンが管理できるようになりました! ここまで書きましたが、田胡研に入るとこの作業を一発で終わらせることのできるスクリプトがあります。 この作業を行うのがめんどくさければ、ぜひ田胡・柴田研究室へ!

2013年7月2日火曜日

JSONとは何か?

こんにちは小林です。
今回はJSONについて書きたいと思います。

JSONとは何か?

JSONとはデータを送受信するときのデータ形式の一つです。
主にJavaScriptとJava,PHP等でデータの送受信するときに使いますが、
形式が単純なので、他の言語でも送受信に使われています。
中身が理解しやすい形式になっているので、人の手による読み書きがやりやすいです。

JSONの内容

JSONデータを保存するときの拡張子は.jsonです。
中身の例
{"classroom":"6年2組",
"teacher":"A先生",
"student":[{"id":1,"name":"B川"},{"id":2,"name":"C山"},{"id":3,"name":"D海"}]}
このJSONデータをJavaScriptで表現すると
{
teacher : "A先生",
classroom : "6年2組",
student : [{id:1,name:"B川"},{id:2,name:"C山"},{id:3,name:"D海"}]
}
となります
JSONはJavaScriptの表記法を元に作られているので、ほとんど同じです。
違う点は
JSONではteacher,classroom等の名前はダブルクォーテーションで囲わないといけないくらいです。
いくつか例を挙げて説明します。
配列
["red", "blue", "green","black"]
[]で囲むと、その中身は配列になります。
JavaScriptだと
var color = ["red", "blue", "green","black"];
という表現になります。

オブジェクト
{"id":1,"name":"koba"}
{}で囲むと、その中身はオブジェクトになります。
JavaScriptだと
var member = {id : 1,name:"koba"}
という表現になります。
JSONでは文字列、数字以外でもtrue,false,nullも扱うことができるので、
ほとんどのプログラミング言語で扱うことができます。

まとめ

・JSONは異なるプログラミング言語でデータのやり取りをしたい時に使えるデータ形式
・[]で配列,{}でオブジェクトを表すことができる。
Webアプリケーションを作るときには、使う機会が多いと思うので、覚えていて損はないと思います。
情報量は少ないですが、以上で終わります。ありがとうございました。

2013年7月1日月曜日

スイーツ田胡研-駄菓子編-

 記事だけ作って満足してしまい、うpが少し遅れてしまいました。
いつの間にかもう7月・・・
最近とてつもなく時が過ぎていくのを早く感じているwakaです。

 今日は田胡研の人気のスイーツをランキング形式で紹介する予定でしたが、
初心者でもならないようなトラブルを起こしてしまった影響で勝手ながら記事を変更し、
今日新しく入荷してきた定番駄菓子「うまい棒」の軽く紹介をしていきたいと思います。
まぁ、見ている感じコーンポタージュが一強のような感じはあるような・・・
そこで今回こんなのを入荷してきました。



黒糖味シュガーラスク味です。
wikiで調べて知っていたけど、なかなかお目にかからない味だったので好奇心で買ってきて
しまいました。あと、「納豆」もあったので買って行こうとも思いましたが、とてつもない批判が
飛んできそうなので自重しました。

人柱になった感想
 普通に美味しかったと私は思います。
黒糖は少しサイズが小さくて普通のに比べると固かったです。
味は麩菓子に近いような感じ?
シュガーラスクはなんと真ん中に穴が空いてなかったΣΣ(゚Д゚;)
味はラスクをスナックでやってみた的な感じ?でした。←まんまじゃねーか


最後に・・・・
 田胡研スイーツの入荷は有志なのでこれからも協力して行きたいと思います。
・・・とか言いながら、今回が初めての入荷だったり・・・

今まで入荷してくれていた方々には感謝です。
ありがとう。