コミュニケーションが苦手だ。

 コミュニケーション能力をつけるために

 私はコミュニケーションが苦手で、以下の事象にぶつかり悩むことがある。

  • 友人との会話は最低限は出来ていると思うが、仕事だとうまく会話が出来ないことがある
  • 自分の意図や想いがうまく伝わらないことがある
  • 悪意のない話をしていたつもりが、相手にとって傷つく会話だった
  • 話の論点がずれてしまい、話がかみ合わないことがよくある
  • 相手の想いを汲み取ることが出来ていない
  • 強気で人に接したり、相手と駆け引きができない

 自分のめざす道に、この欠点は致命的だった。今後どうしたら改善できるか?学生時代に何をしていたらアドバンテージがあったか?考察してみた。

 腹をわって話をした回数は、コミュニケーション能力に比例する
 「友達100人できるかな♪」という歌や、「何人と付き合った」など、交友がおおければ良いという風潮がある。ただ、浅く広い交友関係は、コミュニケーション能力には全くもって結び付かないことを実感した。コミュニケーション能力をつけたいという場合、下記の点から、交友の総量よりも腹を割って話ができる友達や恋人を作ることを専念するとよいと思う。

腹を割って話をするには

  1. 自分の意図や想いを伝えなきゃいけない
  2. 相手の想いを汲み取らなきゃいけない

 この二つがあって初めて強気で人に接したり、相手と駆け引きができる。この駆け引きの「失敗→成功のスパイラル」を繰り返すことによって、話がかみ合うように、論点をずらさないような会話スキルが身に付くと考える。

 こういった局面の経験数が多い人は、コミュニケーション能力が高い傾向にある。特に自分の周りの下記に該当する人は、割合が多い。

  • 学生時代にサークル等の活動などのリーダーをやっていた人
  • 会社の役職についている人
  • 昔から連絡をとり続けて、たまに遊んでいる友人がいる人
  • ケンカが多いけど、長い間つきあってるカップルや既婚者

 特に会社の役職者は、部下や役員などと、真剣な話をする機会が多いため、コミュニケーション能力が高い人が多いですよね。初めから能力が抜き出ているわけではなく、積み重ねて、今のスキルがあるんだろうなと思う。部下からは「給料少ない」「仕事やりがいない」「やめたい」と言われ真剣に向き合ったり、会社全体からは「利益あげろ」と言われ・・・。やってる人からしたらたまったもんじゃないんでしょうが。

 じゃあ何をすればいいか
 腹をわって話をする回数が増えるような環境化に身を置くこと。
 かなりパワーを使い、あげくかなりマゾイ。ですけど経験値は高いです。本を読んだり講習会とかいくよりよっぽど有益かと思います。

 探せば自分が仕事上でどんな立場であっても、そのような環境に一歩踏み出すことは可能かと思います。真剣に付き合う恋人を作るとか、何かのまとめ役になるとか(大小限らず)、思ったことがあったら上司や部下と話してみるとか、このような機会を一歩ずつ増やしてチャレンジしていくことがコミュニケーション能力をつける一歩なのではないでしょうか。

 と、自分へ「がんばろう」の意思をこめて。

Ubuntu12.0.4で無線LANアクセス

 市販の無線LAN子機はほぼ公式的にLinuxに対応はしていないが、以下の手順で無線LAN接続は可能です。今回使用した無線LAN子機は以下。だいたい500〜1000円くらいですかね。

PLANEX 11n/g/b対応 150Mbpsハイパワー無線LAN 携帯電話用USBアダプタ GW-USNano2-M

PLANEX 11n/g/b対応 150Mbpsハイパワー無線LAN 携帯電話用USBアダプタ GW-USNano2-M

ドライバのインストール

 付属CDのドライバはWindows用なので、Linuxの場合は別途ダウンロードしなくてはいけない。以下サイトからLinux版の8192cuをダウンロードする。
 http://218.210.127.131/downloads/downloadsView.aspx?Langid=4&PNid=48&PFid=48&Level=5&Conn=4&DownTypeID=3&GetDown=false&Downloads=true#RTL8192CU

ダウンロードしたファイルを解凍しインストール


$ unzip RTL8192CU_linux_vx.x.xx.zip
$ cd RTL8192CU_8188CUS_8188CE-VAU_linux_vx.x.xxxx.xxxxxxxx/
$ sudo sh install.sh

ドライバのロード確認


lsmod |grep 8192
 8192cuが表示されれば、ドライバはロードできています。

既にインストール済のドライバが使用されないようにする設定

 今のままだと、再起動時にドライバが認識されない。blacklist.conf、modulesを編集し、再起動時も、ドライバが認識されるようにする。

  • blacklist.confの編集

$ vi /etc/modprobe.d/blacklist.conf
最下行に以下を追記する
blacklist rtl8192cu

  • modulesの編集

vi /etc/modules
最下行に以下を追記する
8192cu

無線LANに接続

 あとは、子機をUSBに挿すとネットワークマネージャーのアプレットSSID(ステルス有)を自動で認識してくれるので、接続するSSIDをクリックして、キーを入れれば接続ができます。

TwitterAPIを使って、新規ツイート、タイムライン表示をしてみる。OAuth認証。

OAuth認証を使用して、新規ツイートと、最新の10件を取得できるプログラムを作ってみる。

準備

PEAR使って、必要な二つのライブラリ落とします。x.x.xには自分に合う環境のバージョンを指定

pear install --alldaps Services_Twitter-x.x.x
pear install --alldaps HTTP_OAuth-x.x.x

アプリの登録

 TwitterAPIを使用するのに、まずTwitter上にアプリを登録しなくてはいけない。
詳しくは以下を参照。http://pentan.info/web_service/twitter/register_app.html


 使用するアプリの登録が終わったら、以下の二つのキーと三つのURLをメモする。プログラム作成時に使います。
 ※使用するアプリのSSLサーバー構築していない場合は、httpsではなく、httpとしてメモをとっておきましょう。

    • Consumer key
    • Consumer secret
    • Request token URL
    • Authorize URL
    • Access token URL

登録時の注意点として、AccessLevelをアプリの用途によって変更しなくてはいけません。デフォルトはRead-Onlyになっています。今回はツイートすることと、タイムライン取得できるプログラムを作成するため、Read and Writeにする必要があります。

アプリの作成

イメージとしては以下のようなプログラムを作ります。
テキストボックスに入力された文字をツイートする機能と、タイムラインを表示する機能です。

プログラム

プログラムの流れは以下です。 

    1. コンシュマ/シークレットキーを使用して、リクエスト/シークレットトークンを取得
    2. 認証URLにリダイレクト
    3. アプリの認証を許可し、PINコード取得
    4. リクエスト/シークレットトークン、PINコードを使って、アクセス/シークレットトークンを取得
    5. 以後は、コンシュマ/シークレットキー、アクセス/シークレットトークンを使用してAPIを呼び出す。
<?php

// 出力形式、文字コードの指定
header('Content-type: text/html; charset=UTF-8');

// コンシュマキー
define('CONSUMER_KEY', 'ここに自分のコンシュマキーを入れる');
define('CONSUMER_SECRET', 'ここに自分のコンシュマシークレットキーを入れる');

// パッケージの読み込み
require_once ('Services/Twitter.php');
require_once ('HTTP/OAuth/Consumer.php');


try{
	session_start();

	// 各トークン未取得の場合
	if (
		empty($_SESSION['request_token']) && empty($_SESSION['access_token'])
	) {
		// HTTP_OAuth_Consumerインスタンスを作成
		$oauth = new HTTP_OAuth_Consumer(CONSUMER_KEY, CONSUMER_SECRET);
		// リクエストトークン取得:getRequectToken(リクエストトークンURL、コールバックURL)
		$oauth->getRequestToken('http://api.twitter.com/oauth/request_token','自分のコールバックURL');

		// リクエストトークン格納
		$_SESSION['request_token']        = $oauth->getToken();
		// リクエストトークンシークレット格納
		$_SESSION['request_token_secret'] = $oauth->getTokenSecret();

		// OAuth認証ページへリダイレクト:getAutorizeUrl(Authorize URL)
		$url = $oauth->getAuthorizeUrl('http://twitter.com/oauth/authorize');
		header('Location: ' . $url);
		exit;
	}

	// リクエストトークン取得済み、アクセストークン未取得の場合
	if (
		isset($_SESSION['request_token'],$_GET['oauth_verifier']) && empty($_SESSION['access_token'])
	) {
		// 各パッケージクラスのインスタンスを作成
		$twitter = new Services_Twitter;
		$oauth = new HTTP_OAuth_Consumer(CONSUMER_KEY,CONSUMER_SECRET,$_SESSION['request_token'],$_SESSION['request_token_secret']);
		// アクセストークンを取得getAccessToken(Access token URL)
		$oauth->getAccessToken('http://twitter.com/oauth/access_token',$_GET['oauth_verifier']
		);

		// アクセストークン格納
		$_SESSION['access_token'] = $oauth->getToken();
		// アクセストークンシークレット格納
		$_SESSION['access_token_secret'] = $oauth->getTokenSecret();
		// リクエストトークンの割り当てを解除
		unset($_SESSION['request_token']);
		unset($_SESSION['request_token_secret']);
	}

	// アクセストークン取得済みの場合
	if (
		isset($_SESSION['access_token'])
	){
		// 各パッケージクラスのインスタンスを作成
		$twitter = new Services_Twitter;
		$oauth = new HTTP_OAuth_Consumer(CONSUMER_KEY,CONSUMER_SECRET,$_SESSION['access_token'],$_SESSION['access_token_secret']
		);
		// OAuth認証でツイッターにアクセス
		$twitter->setOAuth($oauth);
		// フォーム作成
		twForm();
		// メッセージが入力され「Tweet」が押された場合、ツイートする
		if ( isset($_POST['tweet']) && 0 < @strlen($_POST['tw_msg']) ){
			$twitter->statuses->update($_POST['tw_msg']);
			echo "ツイートしました";
		// 「Timeline」が押された場合、最新10件のタイムライン情報を表示
		} else if (isset($_POST['timeline'])){
			$result = $twitter->statuses->home_timeline(array('count'=>10));
			echo '<pre>';
			print_r($result);
			echo '</pre>';
		}
		exit;
	}
} catch (Exception $err) {
	// エラーメッセージ表示
	$err->getMessage();
}

// フォーム作成用関数
function twForm() {
	echo "<form name=\"twf\" method=\"post\" src=\"tw.php\">";
	echo "いまどうしてる?:<br>";
	echo "<input type=\"text\" name=\"tw_msg\" size=\"100\"><br>";
	echo "<input type=\"submit\" name=\"tweet\" value=\"Tweet\"><br>";
	echo "<input type=\"submit\" name=\"timeline\" value=\"Timeline\"><br>";
}

?>

sambaでフルアクセス(認証なし)の共有フォルダ作成

sambaでフルアクセス(認証なし)の共有フォルダ設定。
何回か調べなおしているので、備忘録としてメモ。


# mkdir /home/samba ※共有用フォルダ作成
# chmod 777 /home/samba ※共有用フォルダの権限変更
# vi /etc/samba/smb.conf ※samba設定ファイル編集
【smb.conf編集】
[global]
unix charset = UTF-8Linux文字コード
dos charset = CP932 ※Windows文字コード

#host allowをアクセス許可するIPに変更(下記の例の場合「192.168.xxx.xxx」のホスト全て許可)
hosts allow = 127. 192.168.

security = share ※認証なし

# 最終行に以下7行追記
path = /home/samba ※ 共有フォルダ指定
writable = yes ※ 書き込みOK
guest ok = yes ※ ゲストユーザーOK
guest only = yes ※ 全てゲストとして扱う
create mode = 0777 ※ フルアクセスでファイル作成
directory mode = 0777 ※フルアクセスでフォルダ作成
share modes = yes ※複数人が同一ファイルに同時アクセス時に警告

samba再起動

# /etc/rc.d/init.d/smb restart

AmazonEC2無料枠 見落としがちなルール

先日、AmazonEC2の登録からインスタンス起動までの記事を書きました。

無料枠でやっているつもりが、課金されてた!・・なんてことがないようにもうちょっと詳しく書こうと思います。(2012/06/07時点での記載なのでそれ以降は変更があってもご了承)

アマゾン ウェブ サービス(AWS) には無料使用枠について以下のように記載されています。


<2012/06/07 サイトから抜粋>


AWS 無料使用枠(1ヵ月毎):
Amazon EC2 Linux マイクロインスタンス使用 (613 MB メモリと、32ビットと64ビットプラットフォームサポート)750時間 – 毎月継続的に実行するのに十分な時間*
Amazon EC2 Microsoft Windows Server マイクロインスタンス使用 (613 MB メモリと、32ビットと64ビットプラットフォームサポート)750時間 – 毎月継続的に実行するのに十分な時間*
Elastic Load Balancing 750時間に加え 15 GB 分のデータ処理*
Amazon Elastic Block Storage 30 GB に加え、100万 I/O、スップショット ストレージ 2 GB*
Amazon S3 ストレージ 5 GB、20,000 Get リクエスト、2,000 Put リクエスト*
Amazon DynamoDB 100 MB のストレージ、書き込み容量 5 単位、読み取り容量 10 単位**
Amazon SimpleDB マシン時間25時間とストレージ 1 GB**
Amazon SWF ワークフロー実行1,000個までは無料。アクティビティタスク、シグナル、タイマー、マーカー合計10,000個と30,000ワークフロー日も無料で使用可能**
Amazon Simple Queue Service 100,000 リクエスト**
Amazon Simple Notification Service 100,000 リクエスト、100,000 HTTP 通知、1,000 Eメール通知**
Amazon Cloudwatch 10メトリックス、10 アラーム、100万 API リクエスト**
すべての AWS サービスを総合して、帯域幅「送信(アウト)」15 GB。*
これらのサービスに加え、AWS のアプリケーション構築・管理に役立てていただくため、AWS Management Console を無料でご利用いただけます。


一見これをぱっとみてしまうと、「お、普通に個人利用で使う分には無料で使えそうだな」と思ってしまいます。

見落としがちな個所 1 (Elastic IP アドレスについて)

しかし、別ページのわかりずらい個所にAmazon EC2(安全でスケーラブルなクラウド上の仮想サーバー)| AWS以下のように書かれています。
Elastic IP アドレス


使用中の Elastic IP アドレスには料金は発生しません。

$0.01/添付されない Elastic IP アドレス/時間
$0.00 / Elastic IP アドレスのリマップ - 最初の100リマップ/月
$0.10 / Elastic IP アドレスのリマップ - 100を超える場合の追加リマップ/月

まず先にElastic IP (以下EIP)を説明すると、EIPとは各インスタンスに、グローバルIPを割り当てる機能です。

これを割り当てないと、Start,StopするたびにIPが変更されてしまう可能性があります。

無料使用枠について話は戻しまして、インスタンスが「起動」しているIPに対してEIPを割り当てても無料なのですが、「停止」しているインスタンスに対して、EIPを割り当てたまま放置しておくと1hに$0.01課金されます。といった内容です。わかりずらい。。

停止したまま放置しておくのは注意!こんなことになってしまいますw$0.14・・。14時間放置した後に気付いたので課金されてしまいました。。。



無料枠がわからないうちは、細目にAccountActivityチェックした方が良いかもですね。

見落としがちな個所 2 (インスタンスについて)

まず、マイクロインスタンス使用1つに限ります。二つ以上使うと課金されるので注意です。インスタンス数には依存しない)

そしてインスタンスの種類によって、有料と無料があるので注意です。
※以下のように、無料のインスタンスには★マークがついています。


インスタンスタイプはt1.microにしましょう。こちらも★マークがついています。


とりあえず、運用開始時はAccountActivityをまめにチェックしましょう。ご利用は計画的に!

AmazonEC2、申し込み→インスタンス作成(windows 2008 Server R2)→リモートデスクトップ接続まで

AmazonEC2の申しこみから、リモートデスクトップ接続まで。今回のインスタンスwindows 2008 Server R2。

AWS アカウントを以下のサイトから新規作成しましょう。
http://aws.amazon.com/jp/ec2/
予めアカウント作成準備は以下です。5分ほどで完了します。

  • 電話(携帯、会社、自宅どれでも)→登録過程でAmazonに電話で暗証番号を入力しなくてはいけません。
  • クレジットカード
  • メールアカウント(フリーのメールアドレスでOK)

※クレジットカード→料金はクレジット決済されるので必要です。AWS新規アカウントには無料使用枠があります。無料使用枠を超えたり、オプションつけると課金が発生します。詳細はここ料金 - Amazon EC2 | AWS
ちなみに無料使用枠は2012/06/03時点は以下です。

インスタンスの新規作成

作成する前に、無料使用枠について調べておきましょう。

サインアップしたら、Amazon EC2 Consoleを使用しましょう。なぜだかIEを使うとかなり重いです。他ブラウザで接続するのがお勧めです。Chromeだと快適でした。
1. サインアップ後のトップ画面からAmazon EC2 Consoleを選択

2. サインアップを選択

3. EC2タブを選択

プライベートkeyの登録

インスタンスのプライベートkeyを登録します。リモートデスクトップ接続するときに必要になります。
1. key pairsを選択

2. create key peirsを選択

3. 好きな名前をつけます。OKボタン押下後に、プライベートkeyファイルのダウンロードが始まる。このファイルはリモートデスクトップ接続設定にて必要になるので大事に保存する。ブラウザのセキュリティが高いとダウンロードできないので注意です。

インスタンスの新規作成

1. instancesを選択

2. launch instanceを選択

3. Classic Wizardを選択

4. instanceタイプとinstance数を設定

5. 特にこだわりがなければそのまま次へ

6. 特にこだわりがなければそのまま次へ

7. ここでFireWallを設定します。リモートデスクトップで接続したい場合は3389を開放しておきましょう。
下記ではwebサーバの80とSQLServer1433開放もしています。環境に合わせてポート開放しましょう。

8. 確認画面です。OKなら次へ

9. instances一覧に新規作成され、stateがrunningになっていると思います。これでインスタンスが起動していることになっています。停止したい場合は、instance Actionボタンからできます。

作成したインスタンスリモートデスクトップ接続

1. instances一覧から接続したいインスタンスにチェックを入れ、instance Actionから接続アカウント作成します。

2. ファイル選択にてさきほど作成したプライベートkeyを設定し次へ

3. パスワードが表示されるので大事に保存。リモートデスクトップで接続するパスワードです。

4. instances一覧から接続したいインスタンスにチェックを入れ、Connect

5. ショートカットをダウンロードを押すと、デスクトップにショートカットができます。

6. ショートカットをダブルクリック。次へ

7. すると、ログイン画面が表示されるのでユーザ:Administrator パスワード:さきほど発行したパスワードを入力すれば使えるようになります。

PHPで空白区切りの絞り込み検索キーワードをSQL文に反映

PHPで絞り込み検索キーワードをSQL分に反映

検索サイトでは下記のように、キーワードに空白を区切って、データを絞り込むようなものが多いと思います。

スペースで区切られた検索キーワードを基に、SQL文を発行します。

以下は、組み立てられたSQL文をweb上に表示させているだけです。実際には、DBに検索するような形になります。まあこんな検索なんてないですけど。SQL構文はなんでもよかったんで気にせず。

explode関数で単語を分割し、分割された単語の分だけwhere句に条件を足していきます。


<html>
<head></head>
<body>
	<?php
	//POST送信されたデータを$text1へ
	$text1 =@$_POST["text1"];

	//SQL(テーブルから列を抽出する
	$sql ="SELECT 列名 FROM 表名 ";
	//キーワードが入力されているときはwhere以下を組み立てる
	if (strlen($text1)>0){
		//受け取ったキーワードの全角スペースを半角スペースに変換する
		$text2 = str_replace(" ", " ", $text1);

		//キーワードを空白で分割する
		$array = explode(" ",$text2);

		//分割された個々のキーワードをSQLの条件where句に反映する
		$where = "WHERE ";

		for($i = 0; $i <count($array);$i++){
			$where .= "(列名 LIKE '%$array[$i]%')";

			if ($i <count($array) -1){
				$where .= " AND ";
			}
		}
	}


	?>
	<form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>">
		<table>
			<tr>
				<td><input type="text" name="text1"></td>
				<td><input type="submit" value="検索" name="sub1"></td>
			</tr>
		</table>
	</form>
	<?php
	//組み立てたSQL分を表示する
	echo "<p>組み立てたSQL分: ".$sql.@$where;

	?>
</body>
</html>