21 Apr 2013, 11:32

githubに新しいリポジトリを作成してローカルのリポジトリをアップロードする

ローカルで書いたコードをGithubに上げる方法を人生のウチでもう3回も調べている気がするので、ここらでメモしておきます。ああ、モノ忘れが激しい。。。

ローカルでgit リポジトリを作成して作業

リポジトリを作成して、いろいろほげほげ作業します。今回は、このリポジトリをgithubで公開したいとする。

$ git init

githubとの間でSSH通信を確立する

githubとローカルPCをつなぐ通信はSSH通信を利用します。なので、まずは鍵を生成。sshがどうもパソコンに入っていな場合は、もってこよう。詳しくは、ここの過去記事を参照のこと。

SSHを使いこなそう!Windows上のCygwinからvmware上のUbuntuにパスワードなしでSSH通信するまでのまとめ | Futurismo

(この記事のせいでローカルで持っていた鍵が紛失したため、githubとの設定を今やり直している。。。(T_T))

鍵を生成します。ここではRSA暗号方式を利用する。パスワードはとりあえずなしで。

$ ssh-keygen -t rsa

.ssh/配下にid_rsa(秘密鍵)と、 id_rsa.pub(公開鍵)が生成される。id_rsa.pubをgithubに登録する。

ブラウザからgithubにアクセスする。

GitHub

ログインして上のツールバーから[Account Setting] > [SSH Keys] > [Add SSH key]を選択する。

github

鍵を入力する画面が現れるので、titleとkeyを入れる。ここでのkeyはid_ras.pubを入れる。

$ cat id_rsa.pub

[Add Key]を押すと、githubアカウントのパスワード入力が求められるので入力して完了。登録が完了すると、登録完了メールが飛んでくる。

github上にリポジトリを作成

githubにローカルと連携したいリポジトリを作成する。ツールバーの[Create Repositry]を選択。リポジトリ名を入力して、詳細の説明を入力。

Public/Privateで公開と非公開を選択できる。

Initialize this repository with a READMEにチェックを入れるとREADME.mdというファイルが作成される。リモートとローカルの連携がややこしくなるので、初めはチェックをいれない。

Add .gitignoreで.gitignoreの選択もできるが、すでにローカルで.gitignoreがあるので、ここではNoneを選択。

ここでは、embedded_testing_with_unity_and_cmockという名前のリポジトリを作成する。[Create Repositry]を選択して作成。

github2

作成すると、クイックセットアップの方法が表示される。

image

ここでは、既存のリポジトリをコマンドラインでgithubにアップロードしたいので、以下を実行する。

$ git remote add origin git@github.com:tsunera/embedded_testing_with_unity_and_cmock.git

このコマンド、によってoriginがこの長いURLであることを覚える。あとは、git pushコマンドで、ローカルリポジトリをgithubにブッシュして完了。

$ git push -u origin master

20 Apr 2013, 10:51

ストレス社会を乗り切るために!cygwinとemacsの起動が遅い場合の高速化2選(emacsclient)

私はWindows上でCygwinとEmacsをガリガリ使っているひとですが、悩みは

起動が遅いことヽ(`Д´)ノ

である。cygwinの起動は10秒くらい、emacsも5秒くらいかかり、イライラする。

そこで、そんなストレス社会を薬物に頼らずに乗り切るために、起動高速化のための方法を調べてみたので、まとめてメモしておく。

Cygwin起動高速化の方法(/etc/bash_completion)

私はCygtermでCygwinを起動している。起動時にcygwinはいろいろな設定をしているのだが、特に時間がかかる原因が

/etc/bash_completion

の読み込みらしい。なので、この/etc/bash_completionを読み込まないように設定する。行頭にreturnを挿入することで解決。

以下の記事が参考になった。

Cygwin 1.7 の起動が遅い@ Windows 7 x64 | Mazn.net

# この項は今後も調べたら追加するかも。。

Emacs起動高速化の方法(emacsclient)

次に、emacsの起動。

Emacsは起動時にいろいろな設定ファイルを開くので、時間がかかるのは仕方がないEmacsは一度立ち上げたらめったに落とすものではないのだ。それが正しい使い方なのである。

しかし、簡単な設定ファイルを開こうとする度に5秒待たされたのでは溜まったものではない。そんなときに役に立つのが、EmacsServerとEmacsClientだ。

EmacsServerを立ちあげると、以後にemacsで編集をするときは、emacsClientからServerに通信してすでに開いているEmacs上で編集することがデキる。つまり、emacsを起動しなくても編集できる。

EmacsServerの立ちあげ

Emacsサーバを立ち上げるためには、Emacs上で

“M-x server-start”

と打ち込む。これだと、いちいちコマンドを打ち込まないといけないので、起動設定ファイルに以下を入力することで、起動時に自動でサーバを起動できる。

自分の場合は、$HOME/.emacs.d/init.el)に以下の設定を追加した。.emacsでもよい。自分の設定に合わせて。

; server start for emacs-client
(require 'server)
(unless (server-running-p)
  (server-start))

または、デーモンを起動しておけば、ウィンドウを閉じていてもバックグラウンドでサーバが立ち上がる。コマンドラインから以下のコマンドを叩く。

$ emacs -daemon

また、emacs daemonの終了は以下の通り

$  emacsclient -e ‘(kill-emacs)’

再起動も含め、シェルにしておくとよい。

 

EmacsClientで編集する

いつもは、emacsでファイルを編集しようとしていたものを、emacsclient.exeで編集する。

$ emacsclient .bashrc

Waiting for Emacs…

これでサーバ上でファイルが編集できる。もっと便利にするためには、aliasを切るとよい。これもcygwin起動ファイルに以下を追加。(自分の場合は.bashrc)

alias emacs=“emacsclient.exe -nw”

デフォルトでemacsclientを使うように指定する。”-nw”オプションをつけることで、今開いているターミナル上でファイルが編集できる。閉じるときは”Ctrl + x + #“で。

参考:emacsclientを使おう – Life is very short

これで、ストレスにつぶれてこの世を呪うことなく生きることができる。

20 Apr 2013, 07:50

Expect コマンドでパスワードなしでログインする方法(telnet,ssh,scp)

前回、sshを使ってパスワードなしでログインする方法を書きましたが、linuxのコマンド”expect”を利用することでも、パスワードなしでログインできたのでメモします。

環境

前回と同じように、CygwinからUbunsuサーバに接続してみる。

  • 接続先: ubuntu
  • 接続元: cygwin

expectコマンドの紹介

expectコマンドは対話型シェルを実現するためのコマンド。デフォルトでは入っていないようなので、手に入れる。インストール方法は省略します。

覚えるべきコマンドは以下の5つ。

  • set timeout
    設定した秒数の間、標準入力から応答がないとexpectは、終了します。
  • spawn
    自動で実行したいコマンドを指定します。
  • expect
    指定された文字列を待ちます。
  • send
    指定された文字列(「”」に囲まれた文字)を先に実行したコマンドのジョブに送信します。
  • interact
    実行ジョブの標準入出力をキーボードと画面にします。端末からログインしたのと同じ状態になります。

サンプルスクリプト

telnet,ssh,scpでのパスワードなし接続方法を書きます。
ubuntuサーバにtsu-neraユーザでログインします。

telnet

#!/bin/bash

# ログイン情報を入力
hostname=ubuntu
username=tsu-nera
password=*********

# expect コマンドを実行
expect -c "
# タイムアウト値の指定
set timeout 20
# spawnで新しいジョブ生成
spawn telnet $hostname

# login
expect login:
send \"$username\n\"
expect Password:
send \"$password\n\"

# spawnジョブを通常の通信にする
interact
"

ssh

#!/bin/bash

# ログイン情報を入力
hostname=ubuntu
username=tsu-nera
password=*********

# expect コマンドを実行
expect -c "
# タイムアウト値の指定
set timeout 20
# spawnで新しいジョブ生成
spawn ssh -l $username $hostname

# login
expect password:
send \"$password\n\"

# spawnジョブを通常の通信にする
interact
"

scp

ファイルパスは第一引数で指定します。

#!/bin/bash

# ログイン情報を入力
hostname=ubuntu
username=tsu-nera
password=*********

# ファイルパスは第一引数で
if [ "$1" != "" ]; then
    filepass=$1
else
    echo "Error: Input File Path"
    exit 1
fi

# expect コマンドを実行
expect -c "
# タイムアウト値の指定
set timeout 20
# spawnで新しいジョブ生成
spawn scp $username@$hostname:$filepass .

# login
expect password:
send \"$password\n\"

expect $
"
exit 0

17 Apr 2013, 23:15

リモートシェルの終了ステータス確認する方法のメモ

rshを利用してリモートホスト上のシェルスクリプトを実行すると、シェルスクリプトの成功・失敗にかかわらず終了ステータスはrst/sshの終了ステータスが返る。たとえば、リモートシェルが失敗した場合でも、通信が成功すると、終了ステータスは成功となる。

たとえは、これだと終了ステータスは正常終了の0がかえる。

#!/bin/bash
rsh tsu-nera@192.168.118.129 fail_shell
echo "$?"

こんなときは、コマンド実行結果をローカルファイルにリダイレクトして、その中身を見てみるとよい。ローカル側で $? が解釈されないように\$?とする必要があることに注意。

#!/bin/bash

# リモートシェル実行
rsh tsu-nera@192.168.118.129 "~/bin/fail_shell;echo \$?" > tmp

# ファイル出力から変数に代入
tail -n 1 tmp >> tmp2; rm tmp
read RESULT < tmp2;    rm tmp2

# 結果判定
if [ $RESULT -eq 0 ]; then
    echo "Shell Sucess"
    exit 0
else
    echo "Shell failed"
    exit 1
fi

もっとシンプルな書き方がある気がする。。。

13 Apr 2013, 04:13

SSHを使いこなそう!Windows上のCygwinからvmware上のUbuntuにパスワードなしでSSH通信するまでのまとめ

OpenSSHには、個人的に何度も苦労しているので、ココらへんで接続確立手順をまとめておこうと思う。

環境

  • SSHサーバ Ubuntu  Ubuntu 12.10 (vmware上で起動)
  • SSHクライアントCygwin  1.7.17-1(Windows 7上で動作)

Windows上のCygwinからvmware上のUbuntuにSSHするまでを目指す。

OpenSSHとは

OpenSSHについてもまとめておく。OpneSSHとは、SSH通信をするためのフリーソフト/ツール。SSHとは、暗号技術を利用して安全に情報をやりとりするためのプロトコル。SSHのウレシイところは、パスワードなしで自由に他のコンピュータと通信ができるところだ。公式サイトはココ。

OpenSSH

OpenSSHに必要なもの

サーバ側の設定

UbuntuにSSHサーバをインストールする。以下のコマンドで取得。

$sudo apt-get install openssh-server

次に、SSHサーバの設定ファイルを編集します。これも管理者権限でオープン。

$sudo emacs /etc/ssh/sshd_config

PasswordAuthentication というの項目をyesに変更。PasswordAuthenticationはパスワード認証を許可するかどうかの設定。defaultではコメントされている。また、今回はRSA暗号を使うため、設定ファイルでRSAを有効にしておく。

# Change to no to disable tunnelled clear text passwords
PasswordAuthentication yes

RSAAuthentication yes
PubkeyAuthentication yes

最後に設定を反映するために、サーバを再起動します。

$sudo /etc/init.d/ssh restart

 

クライアント側の設定

cygwin側にもSSHクライアントを導入します。setup.exeからopensshを取得してインストールします。

OpenSSH通信の確立

クライアント側で鍵生成

クライアント側で暗号鍵を生成します。ここではRSA暗号方式を採用。一番有名なので。以下のコマンドで$HOME/.sshに秘密鍵と公開鍵が作成される。パスワード入力が求められるが、ここではなにも入れずにEnterをおす。

  • id_rsa(秘密鍵)
  • id_rsa.pub(公開鍵)

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/TSUNEMICHI/.ssh/id_rsa):
Created directory ‘/home/TSUNEMICHI/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/TSUNEMICHI/.ssh/id_rsa.
Your public key has been saved in /home/TSUNEMICHI/.ssh/id_rsa.pub.
The key fingerprint is:
78:af:12:31:f3:e2:b5:12:93:cc:8d:97:5e:36:5b:5c tsu-nera@TSUNEMICHI-VAIO
The key’s randomart image is:
+–[ RSA 2048]—-+
|                 |
|                 |
|                 |
|      +.      E  |
|     o.OS…   |
|      X.*.+ o    |
|     . O +.+     |
|      + o..      |
|       o.        |
+—————–+

クライアントの公開鍵をサーバに送信

クライアントの公開鍵をサーバに送ります。安全のために、ここではscpコマンドを使うのがよいでしょう。

$ scp ~/.ssh/id_rsa.pub  tsu-nera@192.168.118.129:
The authenticity of host ‘192.168.118.129 (192.168.118.129)’ can’t be established.
ECDSA key fingerprint is 3e:0c:49:ce:a0:14:79:82:bd:88:02:9d:1a:7c:d3:c0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.118.129’ (ECDSA) to the list of known hosts.
tsu-nera@192.168.118.129’s password:
id_rsa.pub                                  100%  406     0.4KB/s   00:00

サーバ側で公開鍵の認証登録をする

ここからは、サーバの設定です。まずは、クライアントの公開鍵を保存するためのディレクトリを作成。アクセス権限は自分だけに与えます。そうしないと、パスワードを聞かれる。(ココてハマった)

$ mkdir .ssh
$ chmod 700 .ssh

$ ls -al|grep ssh
drwx——  2 tsu-nera tsu-nera  4096  4月 13 12:49 .ssh

次に、クライアントの公開鍵をauthorized_keysというファイルに覚えます。覚えさせたら、クライアントの公開鍵はすみやかに削除しましょう。

$ cat id_rsa.pub >> .ssh/authorized_keys
$ rm id_ras.pub

.ssh/authorized_keysのアクセス権限も変更します。

$$ chmod 600 .ssh/authorized_keys

ちなみにauthorized_keysてはなくauthorized_keys2の場合もあるらしい。Ubuntuではauthorized_keysがデフォルト。うまくいかない場合は、設定ファイルで以下の項目を確認するとよい。

$ grep AuthorizedKeysFile /etc/ssh/sshd_config
AuthorizedKeysFile %h/.ssh/authorized_keys

クライアント側からアクセスしてみる

準備完了。クライアント側からアクセスしてみる。

$ ssh  tsu-nera@192.168.118.129
Welcome to Ubuntu 12.10 (GNU/Linux 3.5.0-18-generic i686)

Last login: Fri Apr 12 20:50:51 2013 from 192.168.118.1

アクセスできたら、サーバ側の設定ファイルでパスワード認証を解除する。

# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no

最後に設定を反映するために、サーバを再起動します。

$sudo /etc/init.d/ssh restart

[http://www.youtube.com/embed/yaNiOf-7X_o?rel=0]

12 Apr 2013, 08:00

Windows上のcygwinからvmware上のUbuntuにtelnetするまでのメモ

Windows上のcygwinからvmware上のUbuntuにtelnetをしようとしてハマったのでメモ。
Ubuntuには、defaultではtelnetができないようで、ツールを入れて設定が必要。

なにもしていないと、以下のように接続拒否される。

$ telnet 192.168.118.129
Trying 192.168.118.129…
telnet: Unable to connect to remote host: Connection refused

Ubuntuでtelnetをするためのツールをインストール

Inetutils-inetdをインストールする

netutils-inetdとはTCP/UDPを受信してプログラムを実行するサーバだそうで。以下のコマンドでインストール 。

Ubuntu 窶錀 hardy の inetutils-inetd パッケージに関する詳細

$ sudo apt-get install inetutils-inetd

tenletdをインストール

telnetdとは、telnetを受信するためのサーバ(デーモン)だそうで。以下のコマンドでインストール。

Ubuntu 窶錀 hardy の telnetd パッケージに関する詳細

$ sudo apt-get install telnetd

接続許可するIPアドレスを設定

/etc/host.allowに許可するIPアドレスを追加する。

$ sudo emacs -nw /etc/host.allow

許可するIPを追加する。追加したIPを後ろについて以下の一行を追加。

in.telnetd: 192.168.101.1

まとめてこんな書き方もできる。

  • クライアントのIPアドレスを指定する場合 in.telnetd: 192.168.XXX.2
  • 同一のネットワーク内のクライアントを許可する場合 in.telnetd: 192.168.XXX

inetdサーバを再起動

以下のコマンドで再起動する。

/etc/init.d/inetutils-inetd restart

これで接続できるようになった。

$ telnet 192.168.118.129
Trying 192.168.118.129…
Connected to 192.168.118.129.
Escape character is ‘^]’.
Ubuntu 12.10
tsunera-virtual-machine login: tu-nera
Password:

参考

12 Apr 2013, 03:22

[TopCoder日記] SRM 576, Division 2

久しぶりのTopCoder参戦 & 悲しい惨敗。。。

C++ の vector配列の使い方がわからず苦戦してた。

vector配列は動的配列なので、vec.push_back(hoge);で初期化する必要があったのだった。

Level1の問題は解けたのだが、Eclipse上ではテストは通ったがarena上ではテストが通らず、時間切れとなった。なぜだろう。

Level1 determineHumidity

N個のパーティションで区切られた空間ごとに水滴を垂らす。

水滴の数は、配列intensityで与えられる。水滴は長さLのスポンジによって受け止められる。

スポンジの位置は配列leftEndで与えられる。

スポンジには上から並べられているので、同じ位置の上下でスポンジがあるときは、下のスポンジには水滴はたらされない。

L個のスポンジにそれぞれたらされる水滴の数を求めよ。

 

10 Apr 2013, 23:05

Eclipseの比較エディタでWinMergeを使うためのメモ

Windowsで差分比較をするための有名なソフトとして、『WinMerge』があります。Eclipseでコードを比較するとき、『External diff Tool』というプラグインを入れることで、Eclipseから外部比較エディタとしてWinMergeを開くことができます。

image

以下、導入をメモ。

External diff Toolプラグインの導入

以下のサイトからプラグインをダウンロードします。

External diff Tool

ダウンロードしたら解凍して、plugins配下にある以下のような名前のファイルをEclipseの起動フォルダにあるplugins配下にコピーします。

  • com.leucht.eclipse.externaldiff_0.1.1

あとは、Eclipseを再起動して完了です。

WinMergeの導入

WinMergeはフリーのWindows用差分比較ツール/マージツールです。日本語化してあるサイトがあるので、そこから落としてくるのがよいでしょう。

WinMerge 日本語版

落としてきたら、インストーラを起動してインストールします。

EclipseからWinMergeを使ってみる

EclipseからWinMergeを使うための設定をします。

image

  1. [ウインドウ] > [設定] > [一般] > [比較/外部ツール]を選択。
  2. 外部diff実行可能ファイルにWinMergePortable.exeを指定します。

あとは、比較したいファイルやフォルダを2つ選択して、右クリックから[比較] > [相互(外部ツール)]を選択すれば、WinMergeが比較エディタとして立ち上がります。

注意することは、Eclipseの現在のワークスペース配下に比較するファイルやフォルダがないと、正しくパスが入力されないこと。あとは、いちいち比較するファイルを選択するのもやや面倒ではあるな。。。

24 Mar 2013, 23:05

[セルゲイ・ブリンのTED]Google Glass が開く未来。人間は無限の記憶力を手に入れられるか?

Googleの創業者の一人であり技術部門担当社長でもある、セルゲイ・ブリン(サーゲイ・ブリン)がTEDに出演してGoogleGlassについて語っている動画を発見した。

情報の元がTEDではなくて、TED Leaksというのがとても胡散臭いが、内容は本物だろう。

Sergey Brin talks about Google Glass at TED 2013

[http://www.youtube.com/embed/rie-hPVJ7Sw?rel=0]

How It Feels [through Glass]

これはGoogleから公開されている動画。TEDの冒頭で使用されている動画と同じもの。

[http://www.youtube.com/embed/v1uyQZNg2vE?rel=0]

Amazing Google Glasses Demonstration by Sergey Brin

別の動画でこんなのも見つけた。30分くらいかけたデモンストレーション動画。

[http://www.youtube.com/embed/fDOfvIzvImQ?rel=0]

想像以上にクールなデバイスだ

GoogleGlass、想像以上にクールでスマートなデザイン。ファッションの一つとしても遜色ない。まあ、初めは異様に見えるかもしれないが、みんなでやれば問題ない。

アイカメラのように、見たものをカメラやビデオに記録することが強調して紹介される。また、視覚情報から検索したりできるらしい。[OK.Glass!]という掛け声が合図のようだ。

iPhoneの登場のように、人々のライフスタイルを根底から変えてしまいそうな魅力を放つ。
2013年には、早くも市場に現れるとも言われている。

『欲しい情報がその時に向こうからやってくる世界、
                                                          それを15年前に思い浮かべた』

ブリン氏は語る。そして、それを実現する最初の姿がこのGoogleGlassだともいう。

自分の存在の証明になるデバイス

記憶は、自分自身が思い出さなければ、忘れてしまう。その瞬間がそこにあったのかどうかも、誰も証明できない。だからこそ、大事なことは何度も何度も、記憶の中で思い出さなければ、そしてその行為は積極的に実施するべきだ。

そんなことを高校生のころから今日まで、ずっと思ってきた。だから日記をつけたり,ライフログを積極的に取るようにしてきた。そんな、自分の昔からの考え方を変えてしまうような衝撃を受ける。

過去はクラウド上に記録されて、蓄積される。人間は実は見たものを全て脳のなかで覚えているという話も聞く。覚えているが、思い出せないだけだという。GoogleGlassを使えば、記憶は無意識のうちに、クラウド上のストレージデバイスに記録される必要に応じて、検索できる。これは、なんと素晴らしいのだろう!

GoogleGlassは人間の記憶力の進化かもしれない。人間はコンピュータを手に入れ、無限の記憶力を手に入れた。

23 Mar 2013, 12:04

Eclipseのチーム同期化ビューのメモ

仕事での版数管理システムについて、今まではClearCaseを使っていたが、先週から社内で開発した新版数管理システムになった(うわっ、ありえない・・・)

ネットで検索してもなにも情報が出てこないし、Jenkinsとか今風のツールとの連携も皆無な,このソフトだが、Eclipseのプラグインがあるのが救い。

このEclipseプラグインは、CVSやSVNと同様なリポジトリとの同期化機能が備わっているようだ。というわけで、Eclipseの同期化について調べてみたので、メモします。

チーム同期化について

Eclipseの同期化機能をつかうと、ローカルリポジトリとリモートリポジトリの同期ができる。CVSの機能を元に調べた用語を書く。

130323_01

同期の種類について

以下の3種類がある。

  • 更新
    リモートリポジトリの更新をローカルリポジトリに反映する。
  • コミット
    ローカルリポジトリの更新をリモートリポジトリに反映する。
  • 同期化
    リモートとローカルの差分をマージする。

同期化のモードについて

image

  • 着信モード
    ローカルからリモートへマージ可能なものが表示される。自動マージ可能
  • 発信モード
    リモートからローカルへマージ可能なものが表示される。自動マージ可能
  • 着信・発信モード
    リモートとローカル相互でマージ可能なものが表示される。自動マージ可能
  • 競合モード
    リモートとローカル相互でマージが必要だが、自動マージできない場合に表示される。
    この場合は、手動マージが必要。手動マージはファイルを開くと比較ビューが現れる。
    手動マージできなく、強制的に上書きマージする方法もある。
  • 上書きして更新
    リモートの修正をローカルに強制マージ
  • 上書きしてコミット
    ローカルの修正をリモートに強制マージ

参考