• カテゴリ コンピュータ の最新配信
  • RSS
  • RDF
  • ATOM

blog - コンピュータカテゴリのエントリ

SELinuxとhtpasswd

カテゴリ : 
コンピュータ
執筆 : 
kuha 2013-09-25 09:03
SELinuxを有効にしていると、コンテンツのディレクトリの外にあるhtpasswdのファイルにアクセスできなくなり、.htaccessとhtpasswdでBasic認証ができない。

SELinux状態確認するには、
# getenforce
SELinux有効の場合 Enforcing
SELinux無効の場合 Permissive

SELinux無効化するには
# setenforce 0
とする。有効化するには、引数に1を指定する。

SELinux設定ファイル /etc/sysconfig/selinux を編集すれば、システム起動時にSELinuxを有効化・無効化を指定できる。
#SELINUX=enforcing
SELINUX=disabled

ちなみに .htaccessの中身は、たとえば
AuthUserFile /home/user/conf/.htpasswd
AuthGroupFile /dev/null
AuthName "Enter please !"
AuthType Basic
require valid-user

Mac OSXのMax/MSP/Jitterにkinectをつなぐ

カテゴリ : 
コンピュータ » Max/MSP
執筆 : 
kuha 2012-11-09 17:31
ゼミスペのiMacにMax/MSPからkinectにアクセスできるようにつなげました。ソフトはJean Marc氏のjit.freenect.grabです。
http://jmpelletier.com/freenect/

Mac用のkinectドライバは、 OpenKinectプロジェクトのlibfreenect libraryを使っているようで、Xbox360用kinectでもちゃんと動きます。

ダウンロードパッケージは、以下にまとめてあります。
https://github.com/jmpelletier/jit.freenect.grab/downloads#download_64612

ダウンロード、解凍後、Cycling 74フォルダに移動後、使えるようになります。

helpを立ち上げ、kinectをデバイスopenし、qmetroでサンプリングすると、デプス映像とRGB映像がキャプチャされます。

motorでkinectの仰角を動かしたり、3D加速度センサの値を取得したりなどは、すぐにできますが、Jitterの知識がないと、応用は難しそうです。
AppleのText To Speechは,テキストファイルを人間の声で読み上げてくれるソフトウェアだが,AppleScriptを使えば、読み上げた声をaiffなどのオーディオファイルに保存することができる.

以下のスクリプトは、Web上にあるテキストをダウンロードして、テキストファイルに保存し,それをTTSで読み上げた音声をaiffファイルに保存する.
このスクリプトをTwitToSpeechというフォルダに保存し、デスクトップに置いて使用する.
処理の流れは以下の通り.

読み上げボイスは,Kathy
このスクリプトを保存するフォルダ名(TwitToSpeech)とフォルダの置き場(desktop)を指定する.
 読み上げられるテキストファイルtextPath(test.txt)と音声ファイルaiffPath(test.aiff)がこのフォルダに保存される.
tweetURLで目的とするURLを指定する。

try - end tryでは、"URL Access Scripting"を使って、tweetURLで指定したWeb上のコンテンツをテキストファイルtextPath(test.txt)に上書き保存する。

テキストファイルの中身をシェルのcatコマンドを使って、tweetWordsに入れて、TTSで読み上げた音声をオーディオファイルaiffPath(test.aiff)に保存する.

最後のコメントアウトされている行は,テキストの内容をダイアログボックスに表示させて確認するときに使う.

set voiceOfHuman to "Kathy"
set folderPath to (path to desktop folder from user domain as text) & "TwitToSpeech:"
set textPath to folderPath & "test.txt" as Unicode text
set aiffPath to folderPath & "test.aiff"
set tweetURL to "http://blossom.media.t-kougei.ac.jp/~kuha/tweet02.php?c=5&d=0"

try
	with timeout of 30 seconds
		tell application "URL Access Scripting"
			activate
			download tweetURL to file textPath replacing yes with progress
		end tell
	end timeout
on error
	display dialog "Download Error"
end try

set tweetWords to do shell script "cat " & (POSIX path of textPath)
say tweetWords using voiceOfHuman saving to aiffPath
--display dialog stringOfMessage

ただし、"URL Access Scripting" は、OSX Lionから廃止になったので,上のスクリプトが使えるのは、Snow Leopardまで.
Lion以降からは、OSXのコマンドのcurlを使って,do shell script "curl http://・・・ "などとする.

以下の例は、curlを使った例。
ちなみに、curlは、Lionだけでなく、Snow Leopard以前でも使える。

tweetURLで指定したURLの内容をcurlで、tweetWordsに入れ、write でtextPathで指定したテキストファイルに保存している。

set voiceOfHuman to "Kathy"
set folderPath to (path to desktop folder from user domain as text) & "TwitToSpeech:"
set textPath to folderPath & "test.txt" as Unicode text
set aiffPath to folderPath & "test.aiff"
set tweetURL to "http://blossom.media.t-kougei.ac.jp/~kuha/tweet02.php?c=5&d=0"

try
	with timeout of 30 seconds
		set tweetWords to do shell script "curl " & tweetURL
	end timeout
on error
	display dialog "Download Error"
end try

try
	set saveFile to open for access file textPath with write permission
	set eof of saveFile to 0
	write tweetWords to saveFile
end try
close access saveFile

say tweetWords using voiceOfHuman saving to aiffPath
--display dialog stringOfMessage

Google Maps APIのMap styleの変更

カテゴリ : 
コンピュータ » プログラミング
執筆 : 
kuha 2012-10-26 20:30
Google Maps APIのMap featuresは、道路、景色、ビルなど地図上の要素で、これらを指定して、地図のスタイルやデザインを変えることができる。
https://developers.google.com/maps/documentation/javascript/reference?hl=ja#MapTypeStyleFeatureType

これらのstyleを個別に指定するには、Stylersのcolor, hue, saturationなどの要素をMap featureごとに指定すればよい。

以下の例は、stylesをグローバルにJSON形式で定義し、paintRoad()とpaintLandscape()という関数で、colorを別個に指定している。

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <style type="text/css">
      html { height: 100% }
      body { height: 100%; margin: 10px; padding: 10px }
      #map_canvas { height: 100% }
    </style>
    <title>Google Maps API Styled Maps サンプル</title>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
    <script type="text/javascript">
    //<![CDATA[
			   
var map;
var latlng_koogei = new google.maps.LatLng(35.463536,139.32945);
// stylesをグローバルで定義
var styles = [
	{
		featureType: "road",
		elementType: "geometry",
		stylers: [
			{ color: "" },
		]
	},
	{
		featureType: "landscape",
		elementType: "geometry",
		stylers: [
			{ color: "" },
		]
	}
];

function initialize() {
	//地図の設定
	var opts = {
		zoom: 15,
		center: latlng_koogei,
		mapTypeId: google.maps.MapTypeId.ROADMAP
		//mapTypeId: google.maps.MapTypeId.SATELLITE
		};
	map = new google.maps.Map(document.getElementById("map_canvas"), opts);
}// initialize()の最後

function paintRoad() {
	var value = document.getElementById("mapcolor1").value;
	styles[0].stylers[0].color = value;
	map.setOptions({styles: styles});
}
function paintLandscape() {
	var value = document.getElementById("mapcolor2").value;
	styles[1].stylers[0].color = value;
	map.setOptions({styles: styles});
}

//]]>
</script>
  </head>
  <body onLoad="initialize()">
    <p>Google Maps API Geo Codingサンプル</p>
    <div id="map_canvas" style="width:500px; height:300px"></div>
    <div>
      道路の色を#rrggbbで入力:
      <input id="mapcolor1" type="textbox" value="#ff0000">
      <input type="button" value="Paint" onclick="paintRoad()">
    </div>
    <div>
      景色の色を#rrggbbで入力:
      <input id="mapcolor2" type="textbox" value="#00ff00">
      <input type="button" value="Paint" onclick="paintLandscape()">
    </div>
  </body>
</html>
Google Maps APIで表示する地図は、styleOptionsを使ったスタイル付き地図で配色などのグラフィカルな要素を変更できる。

Google Maps JavaScript API v3 Styled Maps
https://developers.google.com/maps/documentation/javascript/styling?hl=ja

stylesというJSON形式のデータで、オプションを指定する。
たとえば、

var styles = [
{
	featureType: "road",
	elementType: "geometry",

	stylers: [
	{ color: "#FF00FF" },
	]
}
];

のようにJSONで定義されたデータで構成される。[]で囲われた部分が配列で、{}で囲われた部分がオブジェクトである。

これにアクセスするには、JSONはオブジェクトと配列を組み合わせた形なので、オブジェクトの部分は、.(ドット)でプロパティ値を書いてつなぎ、配列の部分は[0]などのように、添字の数字で指定する。

alert(styles[0].stylers[0].color);

styles[0].stylers[0].color = "#FF0000";

などとする。
この例は、最初の行で、color属性の値を画面に出力し、
次の行で、color属性の値を書き込んでいる。
JSONで、twitter APIにアクセスして、特定のハッシュタグを持つつぶやきを取って来て、表示するには、たとえば、JQuerryだと、

<html> 
<head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
var showResults = function() {
  var keyword = $('#text1').val();
  var count = $('#num1').val();
  var query = encodeURI(keyword);
  $("#message").html('<ul>');
  $.getJSON('http://search.twitter.com/search.json?callback=?&q=%23' + query + '&rpp=' + count,
    function(data){
      $.each(data.results,function(){
        $('#message').append('<li>' + this.text);
      });
    }
  );
  $("#message").html('</ul>');
}
</script>
<body onLoad="showResults()">
Hash Tag : <input type="text" id="text1" value="museum">
How many : <input type="text" id="num1" value="5">
<input type="button" value="submit" onclick="showResults()">
<div id="message"></div>
</body>
</html>

などとする。この例は、ハッシュタグ#museumのつぶやきを取ってくる。

また、phpだと、

<?php
$hashtag = "museum";
$count = "10";
$url = "http://search.twitter.com/search.json?callback=?&q=%23{$hashtag}&rpp={$count}";
$json = file_get_contents("$url");
//jsonを連想配列に変換
$data = json_decode( $json , true ); 
//配列の中身を表示する
$str03 = "";
foreach ($data as $key1 => $val1) {
    foreach($val1 as $key2 => $val2) {
    //[resules][番号][text]を表示
        $str01 = $val2[text]."";
        echo "01 = $str01<br>";
		$str02 = preg_replace("/http(\S)+/i","",$str01,-1);
		$str02 = preg_replace("/RT /","",$str02, -1);
		$str02 = preg_replace("/[#@](\S)*\s/i","",$str02, -1);
		$str02 = preg_replace("/[#@](\S)*$/i","",$str02, -1);		
	    echo "02 = $str02<br>";
		if(preg_match("/^[!-~ ]+$/", $str02)) {// 半角英数字の場合だけ
		    echo "03 = $str02<br>";
			$str03 .= $str02;
		}else{
		    echo "03 = <br>";
		}
    }
};
echo "<p><b>$str03</b></p>";
?>

などとする。
この例は、http://や#ハッシュタグや@返信などの文字を削除し、半角英数字の文字のみ残している。

PHPでXMLを解析, twitter APIと連携

カテゴリ : 
コンピュータ » プログラミング
執筆 : 
kuha 2012-09-29 04:15
PHP5では、XMLの扱いが便利になっている。
たとえば、Twitter APIで取得したXMLを解析して、特定のタグ(XMLではノードという)ではさまれた文字列を抽出するのは、とてもシンプルに書ける。

twitter APIから特定のユーザのつぶやきを取ってくるには、以下の通り。

<?php
  $username = 'kuhalabo';  
  $url = "http://twitter.com/statuses/user_timeline.xml?id={$username}&count=20";
  $rss = simplexml_load_file($url); 
  foreach ($rss->status as $i) {  
    $val = $i->text;  
    echo "<p>" . $val . "<br />";  
  }
?>

エクセルで最大値検索など

カテゴリ : 
コンピュータ
執筆 : 
kuha 2012-03-18 08:20
エクセルで、ある項目の最大値をテーブルから検索する場合、配列数式を使うとよい。

=MAX(IF(検索する項目のセル範囲=検索する項目,検索する値のセル範囲)) と入力し、Shift+Ctrl+Enter で数式を確定すると、数式は { と } でくくられ、配列数式として機能する。

その後、rank関数を使って、項目の値の順位を決める。

最後に、rank関数の順位順に並べるには、VLOOKUP関数を使う。
たとえば、
=VLOOKUP(rankの順位,rank関数のあるセル範囲,表示したい項目の列順,FALSE)
などとする。

こうすれば、項目が最大値順に自動的に並べられるので、このセル範囲を「挿入」-「名前」-「定義」で定義して、「データ」-「入力規則」の「設定」タブの「元の値」を「=セル範囲名」としておくと、常に最大値順にソートされたプルダウンメニューから値を選べる。

これは、PHPとSQLでは頻出だが、データベースなしのエクセルだけでも、SQLのSELECT文みたいなことができる。

iOS University Programの流れ

カテゴリ : 
コンピュータ
執筆 : 
kuha 2011-06-01 08:38
University Programで取得したライセンスでiPhone/iPod touch上でアプリケーションを動かすまでの大まかな流れ。

1. Certificates
キーチェーンアクセスにPrivate Keyを作成
他のMacに移すにはPrivate Keyを保有し、移行先のキーチェーンアクセスにPrivate Keyを追加
2. iOS developer
iOS Provisioning PortalからCertificatesをダウンロードし、developer_identity.cerをキーチェーンに追加
3. Devicies
DevicesにiPhone/iPod touchを登録
App IDsにてApp IDを登録。acjp.tkougei.XX01など
ProvisioningにてProfileを作成
Provisioningをダウンロード
Provisioning名.mobileprovision
ProvisioningファイルをXcodeのOrganizerのSummaryのProvisioningに追加
4. XCode
XcodeのプロジェクトのTargets内のアプリケーション名のInfoを表示
Build(ビルド)タブのCode Signing(コード署名)のコード署名IDの「Any iOS Device」をiPhone Perpheral:[自分のcertificate名]を選ぶ。
プロパティタブの識別子にApp IDを入力。acjp.tkougei.XXXX
ビルドと実行でDeviceでアプリケーションが動く

Apple developers
LinuxなどのコマンドラインからMySQLのCREATEUSERとかをバッチで一括で実行するには、以下のとおり。

まず、MySQLのCREATEUSERで一人分のユーザを登録するシェルスクリプトのバッチファイルをfoo.shなどとして保存する。
以下の例では、引数に文字列 *** を指定すると、MySQLのアカウント名は user*** 、パスワードは、 pass*** となる。さらに、アカウント名と同じ名前のデータベースを作成して(CREATE DATABASE)、全権限を与えている(GRANT ALL PRIVILEGES)。MySQLサーバはlocalhostとしている。

name=`printf user"$1"`
passw=`printf pass"$1"`
echo "CREATE USER '$name'@'localhost' IDENTIFIED BY  '$passw';"
echo "GRANT USAGE ON * . * TO  '$name'@'localhost' IDENTIFIED BY  '$passw' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;"
echo "CREATE DATABASE IF NOT EXISTS  \`$name\` ;"
echo "GRANT ALL PRIVILEGES ON  \`$name\` . * TO  '$name'@'localhost';"
echo ""

次に、foo.shをすべてのアカウント分を実行するシェルスクリプトをfoo.sh.txtなどとテキストファイルにする。この例では、文字列として、001, 002, 003 .....といった3桁の連番を指定する。このテキストファイルは、エクセルのオートフィルなどで連番の数字を生成すると簡単に作成できる。結果として、アカウント名は、user001,user002,user003......となる。

sh foo.sh 001
sh foo.sh 002
sh foo.sh 003
sh foo.sh 004
sh foo.sh 005
....


さらに、以下のように、foo.sh.txtを実行すると、人数分のCREATEUSERを実行するMySQLのスクリプトが書き出されるので、テキストファイルmysql_foo.sh.txtに保存する。

sh foo.sh.txt > mysql_foo.sh.txt

最後に、以下のようにmysql_foo.sh.txtに保存されたスクリプトをMySQLに読み込ませて実行し、アカウントを生成する。

mysql -u hoge -p < mysql_foo.sh.txt

なお、-pオプションにパスワードを記述するとパスワードを聞かれない。
スポンサードリンク
検索

blogカテゴリ一覧

blogger一覧

blogアーカイブ