Archive for category Computer

SSH Portが22以外のサーバとSVN

クソみたいなサーバにクソみたいなセキュリティを付与したいのがクソ人間たる所以。

例えば、ポート番号が7777だとする。
キーも用意しました、と。
これでSSH接続すると時はただ単にポートをかえて接続すれば良い。
MacならTerminal.appで

McLaren% ssh hoge@hoge.net -p 7777 -i ~/ssh_key/my_id_rsa

WindowsならPuTTYでポート番号を指定して接続すれば良い。

で、SubVersionでポートが違う場合、意外と面倒くさい。
なのでちょっとメモ。

まず、Macで接続する場合。
最初にTerminalでSSH接続し、鍵をkeychainに登録する。
これが無いと今回の方法では通らない。

~/.subversion/config
このファイルに

[tunnels]
myssh = /usr/bin/ssh -p 7777

という記述を追加する。
mysshの部分は各自好きずき。
で、チェックアウトする際に

McLaren% svn checkout svn+myssh://hoge@hoge.net/svn/myrepos

と指定してやると、mysshの設定で接続してくれる。
おそらく

[tunnels]
myssh = /usr/bin/ssh -p 7777 -lhoge

とかしてやれば

McLaren% svn checkout svn+myssh://hoge.net/svn/myrepos

で指定できるかも?

で、Winで接続する場合。
コマンドラインが無くて面倒なので、もっと便利なTortoriesSVNを使う。

まず、PuTTYのpagent.exeを立ち上げる。




普通にやったのではだめなので、設定ファイルを編集。

下記のように変更。

[tunnels]
myssh = "C:/Program Files (x86)/PuTTY/plinkw.exe" -P 7777

これで行ける。

・・・簡単に書いたけど、Macは2ヶ月前に数日かけて解決し、Winの事例も今日2時間くらいかかった。。
こういうのが一番つらい。

そんだけ。

Post to Twitter

, , , , ,

No Comments

Macにzsh-develを入れる。

忘れちゃったのでメモ。
MacPortsが入っていること前提。
入れ方わかんない人は古い記事まで。

Variantsはこんな感じ。

McLaren:~ yuxx$ port variants zsh-devel
zsh-devel has the variants:
doc: Install extra documentation
examples: Install configuration examples
mp_completion: Install port(1) completion file
pcre: Add regular expressions support in builtin functions through PCRE
universal: Build for multiple architectures

早速インストール。

McLaren:~ yuxx$ sudo port install zsh-devel  +mp_completion +pcre

で、終了時に

If you want MacPorts' zsh as login shell, you should run:
% sudo sh -c "echo '/opt/local/bin/zsh' >> /etc/shells"
% chsh -s /opt/local/bin/zsh
--->  Cleaning zsh-devel

なんて出なかったら

McLaren:~ yuxx$ sudo port uninstall zsh
--->  Deactivating zsh @4.2.7_0+dp_completion+mp_completion
--->  Cleaning zsh
--->  Uninstalling zsh @4.2.7_0+dp_completion+mp_completion
--->  Cleaning zsh

でアンインストール。

で、続き。
さっきの指示通りにする。

McLaren:~ yuxx$ sudo sh -c "echo '/opt/local/bin/zsh' >> /etc/shells"
Password:
McLaren:~ yuxx$ chsh -s /opt/local/bin/zsh
Changing shell for yuxx.
Password for yuxx:

こんな感じ。
うまく行かない場合は /opt/local/bin へのPATHをもう一度通し直すと良かったりする可能性もある。

zsh最強シェル入門

著者/訳者:中島 能和

出版社:翔泳社( 2008-12-04 )

定価:

Amazon価格:¥ 2,592

単行本(ソフトカバー) ( 272 ページ )

ISBN-10 : 479811815X

ISBN-13 : 9784798118154


Post to Twitter

, , ,

No Comments

NewsFireの移行

Macで小粋なRSSリーダと言えばNewsFire。
これ、昨日DLしようとしたらVer.2を機にAppStoreで有料化したらしい。

まぁ、それはそれとして手持ちのMacBook Airからバイナリと設定を移行することに。
バイナリはファイル共有で簡単に「アプリケーション」から複製した物を置いて送ればOK。
で、設定ファイルが若干手間。

保存先は例によってLibrary以下
~/Library/Application Support/NewsFire
これを持っていく。

Sauber% cp -a ~/Library/Application\ Support/NewsFire .
Sauber% tar cjf NewsFire.tar.bz2 NewsFire

あと、もう一つ必要で
~/Library/Preferences/org.xlife.NewsFire.plist

これらをファイル共有して移動先に持っていく。
例によって解凍&移動。

McLaren% tar xjf NewsFire.tar.bz2 
McLaren% cp -a NewsFire ~/Library/Application\ Support/

あと、

McLaren% cp org.xlife.NewsFire.plist ~/Library/Preferences/

も忘れずに。

Post to Twitter

, ,

No Comments

FreeBSDなphpのdate設定

なんか、cactiと言うログツールの設定中、バッチにてdate関連のエラーが。
どうやら設定していなかったと言う。。。

/usr/local/etc/php.ini
を編集。

date.timezone = Asia/Tokyo

以上。

プログラミングPHP 第2版

著者/訳者:Rasmus Lerdorf Kevin Tatroe Peter MacIntyre

出版社:オライリー・ジャパン( 2007-10-23 )

定価:

Amazon価格:¥ 4,000

大型本 ( 448 ページ )

ISBN-10 : 4873113423

ISBN-13 : 9784873113425


Post to Twitter

,

No Comments

Thunderbirdのデータ移動 (Mac to Mac)

MacBook Pro 17″ (Early 2011)を購入したのを機に、初代MacBook Airからあらゆる環境を移行しようと思ってる。
で、メールアカウントもここに登録しているので、Thunderbirdから移行することに。
ちなみに、このアカウントは昔から使っているアカウントが脈々と受け継がれたもの。
結構大切だったりする。

で、実作業の備忘録。
まず、元データのあるマシンでの作業。
Thunderbirdのデータは
~/Library/Thunderbird/Profiles/(ユーザごと固有の値).default
以下に保管されている。
便宜上(ユーザごと固有の値)を以下「hoge1foo9bar」とする。
これをとりあえず圧縮することにする。

Sauber% cp -a ~/Library/Thunderbird/Profiles/hoge1foo9bar.default .
Sauber% tar cjf hoge1foo9bar.default.tar.bz2 hoge1foo9bar.default

こんな感じ。
この圧縮作業、意外と時間がかかった。
ちなみにディレクトリ容量は1.6GB。。
圧縮しても428MBくらいあった。。。

このファイル(hoge1foo9bar.default)をファイル共有とかで移行先に送る。

次からは移行先での作業。
Thunderbirdをインストールしてない場合はインストール。
で、さっきのファイルをやっぱり
~/Library/Thunderbird/Profiles/
に設置する。
そこで解凍する。

McLaren% tar xjf hoge1foo9bar.default.tar.bz2 hoge1foo9bar.default

今度は
~/Library/Thunderbird/Profiles/profiles.ini
のPathを編集する。
(存在しない場合は一度Thunderbirdを立ち上げてみる。)
このとき、Thunderbirdは閉じておくこと。

[General]
StartWithLastProfile=1
[Profile0]
Name=default
IsRelative=1
Path=Profiles/hoge1foo9bar.default

で、起動すればあら不思議、普通に使えちゃいます:-)

アマゾンのサーバでエラーが起こっているかもしれません。
一度ページを再読み込みしてみてください。

Post to Twitter

No Comments

Javaと例外

Javaで標準クラスを使う限り例外機構の実装はTry-Catchで決まりそう。
自前クラスをわざわざ用意するのは無駄なので標準クラスを使いたいところ。
なので、あまり好きじゃないけどTry-Catch文で試す。
前回の引数をとる続編として、引数をどんどん掛け算して行く。

Try-Catch文の書き方は

try
{
/* 処理 */
}
catch( 受け取るエラーのException型 変数 )
{
/* 処理でこけた後の処理 */
}

となる。
try文で処理をテストして、エラーが出た瞬間にcatch文へ進む。
catch文で例外の型に合致する箇所でパラメータを受け取り、適宜処理をする。

ArgumntsCalc.java

class ArgumentsCalc
{
public static void main( String args[] )
{
int argc = args.length;
double tmp, ans = 1.0;
for( int i = 0; i < argc; ++i )
{
try
{
ans *= Double.parseDouble( args[i] );
}
catch( NumberFormatException e )
{
System.out.println( e );
}
}
System.out.println( "result is " + ans + "." );
}
}

こんな感じ。
エラーが起きたらとりあえずエラー内容を出力する。
実行結果は下記の通り。

McLaren% javac ArgumentsCalc.java
McLaren% java ArgumentsCalc 2.0 5 x
java.lang.NumberFormatException: For input string: "x"
result is 10.0.

独習Java 第4版

著者/訳者:ジョゼフ・オニール

出版社:翔泳社( 2008-05-29 )

定価:

Amazon価格:¥ 3,456

大型本 ( 528 ページ )

ISBN-10 : 4798117153

ISBN-13 : 9784798117157


Post to Twitter

, , ,

No Comments

Javaと引数

Javaで引数をとってみる。

引数を複数とって、その数と引数自体を表示し、その長さも表示したい。
実行方法は

McLaren% java ArgumentsTest x y z abc

とする。

で、こんな感じのコードを書いてみた。

ArgmentsTest.java

class ArgumentsTest
{
public static void main( String args[] )
{
int maxLen = args.length;
System.out.println( "total arguments count is " + maxLen + "." );
for( int i = 0; i < maxLen; ++i )
{
System.out.println( "\tcurrent arguments is \"" + args[i] + "\"." );
System.out.println( "\t\tlength is " + args[i].length() + "." );
}
}
}

Javaでは引数がmainで取得したString型の変数に集約される。
と言うのも、引数の数を取得したければ .lengthを付け足せばそのメンバ変数に引数の数が入っている。
各々の引数は配列毎に格納されるので、その中で長さを取得したければ .length()メソッドを呼び出せば文字列長を取得することが出来る。

実行結果は下記の通り。

McLaren% javac ArgumentsTest.java
McLaren% java ArgumentsTest x y z abc
total arguments count is 4.
current arguments is "x".
length is 1.
current arguments is "y".
length is 1.
current arguments is "z".
length is 1.
current arguments is "abc".
length is 3.

独習Java 第4版

著者/訳者:ジョゼフ・オニール

出版社:翔泳社( 2008-05-29 )

定価:

Amazon価格:¥ 3,456

大型本 ( 528 ページ )

ISBN-10 : 4798117153

ISBN-13 : 9784798117157


Post to Twitter

, ,

No Comments

Javaと標準出力と変数など

Javaを弄ろうと思って本読んでる。
で、とりあえずさっきHello Worldも出してみたわけ。

PHPべったりで、Cを少し勉強した俺からして、「Javaってどんな感じかなぁ。」というのが知りたかった。
まず、文字出力メソッドがおおらか。
例えば、下記のようなコードは普通に通る。

PrintTest.java

class PrintTest
{
public static void main( String args[] )
{
int num = 10000;
System.out.println( "num is " + num );
}
}
McLaren% javac PrintTest.java 
McLaren% java PrintTest      
num is 10000

なんか、JavaScriptと同じと言うか、この部分はJavaをそのまま流用したような実装になってるんだなぁ、と。

配列に関してもおおらか。
気持ち悪い書き方だけど、下記コードと実行結果。
ArrayTest.java

class ArrayTest
{
public static void main( String args[] )
{
int nums[];
nums = new int[10];
for ( int i = 0; i < 10; ++i )
{
System.out.println( "current num is " + nums[i] );
}
System.out.println( "end" );
}
}
McLaren% javac ArrayTest.java
McLaren% java ArrayTest      
current num is 0
current num is 0
current num is 0
current num is 0
current num is 0
current num is 0
current num is 0
current num is 0
current num is 0
current num is 0
end

new、mallocと言うよりはcallocと言う雰囲気。
まぁ、メモリ確保した後すぐに中身入れ替えちゃうような時は無駄な気がするけど、事故るよりは良いってことなんでしょうな。

あと、面白いのは

arrayVarName.length

とすると、そのまま配列の個数が取得できる。

class ArrayTestWithInit
{
public static void main( String args[] )
{
int nums[];
nums = new int[10];
int max = nums.length;
System.out.println( "nums length is " + max );
for ( int i = 0; i < max; ++i )
{
nums[i] = i;
}
for ( int i = 0; i < max; ++i )
{
System.out.println( "current num is " + nums[i] );
}
System.out.println( "end" );
}
}
McLaren% javac ArrayTestWithInit.java
McLaren% java ArrayTestWithInit      
nums length is 10
current num is 0
current num is 1
current num is 2
current num is 3
current num is 4
current num is 5
current num is 6
current num is 7
current num is 8
current num is 9
end

こう言うことも出来る。

独習Java 第4版

著者/訳者:ジョゼフ・オニール

出版社:翔泳社( 2008-05-29 )

定価:

Amazon価格:¥ 3,456

大型本 ( 528 ページ )

ISBN-10 : 4798117153

ISBN-13 : 9784798117157


Post to Twitter

,

No Comments

いろんな言語でこんにちは[ Java篇 ]

JavaでのHello World。
Mac OSXで動作確認済み。
あ、コンソールのみね。

class HelloWorld
{
public static void main( String args[] )
{
System.out.println( "Hello World!" );
}
}
McLaren% javac HelloWorld.java
McLaren% java HelloWorld 
Hello World!

独習Java 第4版

著者/訳者:ジョゼフ・オニール

出版社:翔泳社( 2008-05-29 )

定価:

Amazon価格:¥ 3,456

大型本 ( 528 ページ )

ISBN-10 : 4798117153

ISBN-13 : 9784798117157


Post to Twitter

, ,

No Comments

Zend Frameworkと戯れる -じゃんけんゲームを作ってみる-

とりあえず、タイトル通りのことをやってみた。
Hello, World!じゃつまらないので、名前入れてもらってじゃんけんの手を選んでもらってCPUと対決しましょう、という感じ。
まず、ディレクトリ構成を考えることに。
サブドメイン(xxx.yuxx.netのxxxの部分)を切ってやっても良いんだけど、便利な設定してないから、UserDir(xxx.yuxx.net/~hogeの~hogeの部分)でやることに。
しかもドキュメントルート(このアプリの頭はやっぱつかいたくなかったからディレクトリを一段したにした。
URL的にはhttp://test.yuxx.net/~yuxx。

以下、treeコマンドより。(超便利w)

zend_test_prj
|-- public_html
|   `-- zend_test
|       |-- .htaccess
|       `-- index.php
`-- web_app
`-- zend_test
|-- controllers
|   `-- IndexController.php
|-- models
`-- views
`-- scripts
`-- index
|-- index.phtml
`-- pon.phtml

public_html以下が公開ディレクトリで、web_appがプログラムの場所。
まぁ、web_appはプログラムは権限さえあればどこ置いたって良いんだけどね。
名前も本来はapplicationsが推奨だし。。

で、まず公開領域にある.htaccessを置きましょう、と。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

一行目でURLを変換出来るようにmod_rewriteをOnに。
4行目で「js、ico、gif、jpg、png、css以外はindex.phpへ送る」と言う設定。
Flashとかをこのディレクトリ内に置いて使うんだったら適宜設定を。
2行目と3行目は別に必要ないんだけど、そのディレクトリ内にURLで叩かれたディレクトリ、あるいはファイルがあった場合はそっち優先で見に行くよ~と言うおまじない。

お次は同じ場所に設置するindex.php。

<?php
ini_set('display_errors', 'On');
require_once 'Zend/Controller/Front.php';
Zend_Controller_Front::run('../../web_app/zend_test/controllers');

2行目は一応エラー表示させたいので置いといた。
この程度のプロジェクトだからそうそうエラーは出ないだろうけど、それでも俺みたいな脳たりんには重要だったりする。
もちろん、リリース時には外すけど:-)
で、重要なのは3行目と4行目。
3行目は基本的にこういうもの、と言うことで。
4行目はこのファイル「index.php」の場所から見ての相対パスで、IndexController.phpがどこにあるか、と言うこと。
今回の場合、ドキュメントルートがそもそも1階層深かったり、アプリケーションルートもそれに合わせて深くしたりしているから、チト長い書き方になってしまったかね。。。

で、用意したテンプレはこんな感じ。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html, charset=UTF-8">
<title>じゃんけん</title>
</head>
<body>
<center>
<h1>じゃんけんゲーム</h1>
<?php if (!empty($this->errMsgs)) { ?>
<?php   foreach ($this->errMsgs as $currMsg) { ?>
<span style="color:#ff0000"><?php echo $currMsg ?></span><br />
<?php   } ?>
<?php } ?>
<form action="<?php echo $this->baseUrl(); ?>/index/pon" method="post">
お名前<?php echo $this->formText('pName', $this->escape($this->pName)) ?><br />
<?php echo $this->formRadio('pMethodKey', $this->pMethodKey, null, $this->methodNames) ?>
<br /><?php echo $this->formSubmit('', 'ポン!') ?>
</center>
</body>
</html>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html, charset=UTF-8">
<title>ポン!</title>
</head>
<body>
<center>
<h1>CPU &gt; <?php echo $this->cpuMethod ?></h1>
<?php echo $this->escape($this->pName)?>さんは<?php echo $this->pMethodName?>を出したのでの<?php echo $this->result?>です。<br />
<a href="<?php echo $this->baseUrl(); ?>">戻る</a>
</center>
</body>
</html>

では、web_app/zend_test以下のcontrollers/IndexController.phpを見ていこうか。
ちなみに、このコントローラーはデフォルトだと一番最初にアクセスされるコントローラクラスと言うことになる。

<?php
// load base components.
require_once 'Zend/Controller/Action.php';
class IndexController extends Zend_Controller_Action
{
private $_methodNames = array(
0 => 'グー',
1 => 'パー',
2 => 'チョキ'
);
private $_resultNames = array(
0 => 'あいこ',
1 => '負け',
2 => '勝ち'
);
// Index action
public function indexAction()
{
$this->view->assign('methodNames', $this->_methodNames);
}
public function ponAction()
{
$req = $this->getRequest();
$errMsgs = array();
$pName = $req->getPost('pName');
if ($pName == null || $pName == '') {
$errMsgs[] = '名前を入力して下さい。';
}
$pMethodKey = $req->getPost('pMethodKey');
if ($pMethodKey == null || $pMethodKey == '') {
$errMsgs[] = 'あなたの手を選択して下さい。';
$pMethodKey = null;
} else {
$errFlg = true;
foreach ($this->_methodNames as  $key => $methodName) {
if ($pMethodKey == $key) {
$errFlg = false;
break;
}
}
if ($errFlg == true) {
$errMsgs[] = 'もう一度選択して下さい。';
}
}
// index、ponの両方で必要なデータのアサイン
$this->view->assign('pName', $pName);
if (!empty($errMsgs)) {
// indexで必要なデータのアサイン
$this->view->assign('errMsgs', $errMsgs);
$this->view->assign('pMethodKey', $pMethodKey);
$this->view->assign('methodNames', $this->_methodNames);
// indexをレンダー
//            $this->render('index/index'); // なぜかこれだと動作しない。
$this->getHelper('viewRenderer')->setNoController()->setScriptAction('index/index');
// 処理修了
return;
}
// CPUのじゃんけんの手をランダムで出す
srand(time());
$cpuMethodKey = rand() % 3;
// じゃんけんの結果を計算
$result = ($cpuMethodKey - $pMethodKey + 3) % 3;
// ponで必要なデータのアサイン
$this->view->assign('pMethodName', $methodName);
$this->view->assign('cpuMethod', $this->_methodNames[$cpuMethodKey]);
$this->view->assign('result', $this->_resultNames[$result]);
}
}

今回はMVC(モデル・ビュー・コントローラー)デザインの内、DBを使ってないからModelは用意せず、コントローラー内でバリデート(エラーチェック)を行った。
Postされた値は$this->getRequest()で取ってくることが出来る。
また、ビューでデータを使うためには他のフレームワーク同様アサイン(追加)しないといけない。
アサイン方法は$this->view->assign(‘ビューで使うための変数名’, データ)という感じ。
ビューファイルで使うときは先ほどのビューに書いてあるとおり、$this->ビューで使うための変数名 と言う風に取ってこれる。
とまぁ、こんな感じ。
じゃんけんのルーチンは自分で検証してみてくだされ。

出来上がったクソアプリは下記の通り。
http://test.yuxx.net/~yuxx/zend_test

一応まとまったソースは下記。
zend_test_prj.tar.bz2
zend_test_prj.zip
お好きな方をどうぞ。

お粗末。

Zend Framework 徹底マスター

著者/訳者:藤野 真吾

出版社:ソーテック社( 2009-04-11 )

定価:

Amazon価格:¥ 26,137

単行本 ( 592 ページ )

ISBN-10 : 488166669X

ISBN-13 : 9784881666692


Post to Twitter

, ,

No Comments