ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

ロリポップでPHP、ファイル書き出しを実行すると、Permission denied

2005-11-17 21:52:18 | JavaとWeb

 で、さっきのブログのつづき。
 PHPで、XML書き出しのファイルをつくって、ロリポップにftpで送信した(ごめん、さっきのブログのxmlwrite.phpで、rnとなっているのは、¥r¥nを半角で書いたもの。""は、”¥”を半角で書いたもの、また¥マークが消えてしまった。pre内でも、だめなのか。。)。

 そして、testフォルダを作成し

 testfile.htmに、usernameにテキトーに名前を入れて実行すると。。。

 失敗する。

 fopenで、Permission deniedになる。以降、エラーメッセージいっぱいで失敗する。

 ロリポップサーバーのPHPで、Permission deniedになっている人、いっぱいいるみたいですね(検索するとひっかかる)

 結論から言おう。こうするとなおる。

 testフォルダと、送信した3つのファイル(testfile.php,testfile.htm,xmlwrite.php)のすべての属性を755にする。

 そうすると、エラーがでなくて、作成できる。

 しかし、ロリポップは、たしか、この属性にすることを、勧めてないよね。
パーミッションについての最後、「設定するパーミッションの値」

 で、ウィリアムのいたずらはどうしたか。。。

 このファイルを削除した。

 ロリポップでテストしないようにしよう(^^)v

 以上。

 (ロリポップでやりたい人は、属性をロリポップ推奨のものに変えてね)



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPでXMLを出すプログラムを作ってみましたで、ロリポップで実行すると。。

2005-11-17 21:32:06 | JavaとWeb

 最近、PHPのお勉強をはじめました。
 ということで、PHPでプログラムつくってみました。

 こんなプログラム。
 みなさん、Webからフォームの内容をメールで送りますよね。
 でも、いちいちメールでくるのは、めんどう。
 サーバーに、XML形式で書き出しておいて、あとでFTPでそのXMLファイルをうけとるんでいいよ!っていうことも、ありますよね。

 そんな場合のために、フォームで入力された内容を、XMLで書き出すプログラムをつくってみました。
 データを入力してもらう、ユーザーフォームは、こんなかんじ
<HTML>
<BODY>
<form method="post" action="testfile.php">
username:<input type="text" name="username">
<input type="submit" name="submit" value="実行">
</form>
</BODY>
</HTML>


 で、testfile.phpというファイルにPOSTで飛ばしている。そのtestfile.phpの内容は、こんなかんじ。
<HTML>
<BODY>

<?php
	include("xmlwrite.php");
	xml_write("./test/test.xml","doc","Shift_JIS",$_POST);
?>
かきだしました
</BODY>
</HTML>


つまり、実際のXML書き出しの中身は、xmlwrite.phpというファイルの中に、
xml_wtriteという関数で書いている。
その関数の
 第一引数は、書き出し先ファイル名(xmlファイル)
 第二引数は、ルートのタグ(docというタグがルート)
 第三引数は、日本語のエンコード(今回は、Shift_JIS)
 第四引数は、書き出すデータを連想配列の形で(今回は、POSTの中に入ってるデータ全部)
ということになります。

で、実際のxml書き出しプログラムである、xmlwrite.phpの中身は、こちら

</tb>
<?php

//*=====================================================*/
//	引数をXML書き出し				*/
//	引数 	fname	書き出しファイル名		*/
//		roottag	ルートのタグ名		*/
//		encode	日本語エンコード		*/
//		val	書き出し内容(連想配列)	*/
//*=====================================================*/
function xml_write($fname,$roottag,$encode,$val)
{
	$file = fopen($fname,"w");

		//------------------------------//
		//	XMLヘッダ書き出し    //
		//------------------------------//
	$buf ="<?xml version=\"1.0\" encoding=\"" . $encode."\" ?> \r\n";
	fputs($file,$buf);

		//------------------------------//
		//	XMLルート書き出し    //
		//------------------------------//
	fputs($file,"<".$roottag.">\r\n");

		//------------------------------//
		//	XML本文書き出し	    //
		//------------------------------//
	foreach($val as $key => $oneval)
	{
		fputs($file,"<".$key.">" . $oneval . "</".$key.">\r\n");
	}


		//------------------------------//
		//	XMLルート終了	    //
		//------------------------------//
	fputs($file,"</".$roottag.">\r\n");

	fclose($file);
}
?>


で、このとき、testfile.phpで、書き出し先を、./test/test.xmlとしているので、testというフォルダをつくって実行すれば、うまくいきそうである。

 普通うまくいく。
 
でも、ロリポップではうまくいかない。

その理由は。。。長くなったので、次の記事で書く。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

バレーボールとソフト開発の対比を、「天才セッター中田久美の頭脳」をもとに述べよ。

2005-11-17 16:04:26 | Weblog

 本家のほうのブログに、トラックバックがついていて、そのトラックバック、『天才セッター中田久美の頭脳(タクティクス)』から、中田さんと(スポーツライターの)二宮清純さんの対談から引用して、最後にアナタにとって「レシーブ」とはどんなものですか?とまとめてあったので、ソフト開発の観点から、答えてみましょう。

 以下、斜体は、そのトラックバックの人が、『天才セッター中田久美の頭脳(タクティクス)』から引用した部分です
 (つまり、中田久美さんの本からの引用ということになる)。

 その引用に対して、下の部分が、ウィリアムのいたずらの答え=ソフト開発の場合です。




二宮:いまの全日本の試合を見ていると、サーブレシーブで崩されていることが多いですね。そうするとせっかくのコンビネーションも活かせない。

 いまのシステム開発でみると、要件定義部分で、崩されていることが多いですね。そうすると、せっかくの開発の生産性向上も生かせない。

中田:そうです。だから、決定力よりも、サーブレシーブの重要性を私なら優先しますね。(中略)サーブレシーブって、センスなんですよ、これは。サーブレシーブのいい人は、球質をみれば分かります(回転がつかない「軽いボール」ほどセッターが扱いやすくなる)。

 そうです。だから、新しい技術導入(XPとか)よりも、要件定義の重要性を私なら優先しますね(中略)要件定義って、センスなんですよ、これは。要件定義の渋い人は、要件定義に使っている言葉を見れば分かります(へんに技術を使っていない「分かりやすい定義」ほど、アーキやSEが扱いやすくなる)

二宮:球質は腕の感覚に左右されるんでしょうか?

 要件定義に使う言葉は、技術力の感性に左右されるんでしょうか?

中田:手の出し方だと思うんです。(中略)腕を一度吸収させてボールを出せるかどうかなんです。

 要件への手の出し方(分解の仕方)だと思うんです。(中略)一回要件をためて、(要素技術にわって)要件を実現可能な要素技術に再構成して出せるかどうかなんです。

二宮:腕を一度吸収させる。名人のセリフですね(笑)。

 要件を一回ためる。修羅場とおってきた人のせりふですね(苦笑)

中田:いやいや(笑)。極端に言えば、ボールが当たる瞬間に腕を一瞬、引く。はじくのではなく、いったんボールの勢いを(スポンジのように)止めて、腕にボールを乗せて、そこから体全体でボールにコントロールをつけて送り出す(それにはヒザの柔らかさも必要)、という感じだと思います。

 いやいや(自嘲)。極端に言えば、ユーザーから要件が提示された瞬間に、一瞬、言葉を受け入れる。たんにユーザーの要件をそのまま、まとめたり(あるいは、新しい技術をそのまま適用するのではなく)いったん要件を受け止めて、その要件に、自分の知識から、できそうな要素技術をもってきて、その要素技術を組み合わせて、「これはいける!」という技術的な全体シナリオ(=全体アーキテクチャ、フレームワークといってもいい)を作成したうえで、できそうな形に要素技術にコントロールをつけて、それを、言葉に再構成して送り出す(それには、自分自身の、できそうな要素技術と適用手順のストックも必要)、という感じだと思います。

二宮:自らの腕でボールを殺し、自らの腕を離れる時には再びボールに生命を吹き込む。それをミクロのタイミングでやってのけるわけですから、これは職人芸ですよ。

 自らの技術ストックで、要件をとめて、その要件をユーザーに説明するときは、再び要件に、できそうな要素技術を吹き込む(再構築して技術的シナリオを話す)。それをミクロのタイミングでやってのけるわけですから、これは、技術ヲタクですよ。

中田:ちなみに、レシーブしたときのボールのスピードは、攻撃のスピードとは関係ありません。攻撃のスピードは、常にトスの高さだけで決まります。

 ちなみに、要件定義を開始したときからの開発期間の長さは、PGからSTまでの開発期間とは関係ありません。実際のPGからSTまでの開発期間は、つねに、要件仕様書が完全に定義されてからの長さだけで決まります(=要件定義を早く始めても、要件定義でまごついていると、開発の時間はありません。PGの期間を取りたければ、要件定義を早く終わらせてください)。




 こんなかんじかなあ。。

 なお、この意見に反対意見があることは知っています。

 要件定義のときに、技術的な判断を入れるな!という流派です。

 「コピーされるほど儲かるシステム」のメルマガで取り上げている本に書かれているのは、その流派です。しかし、現実には、開発に来る以前(営業レベル)で、技術的に「これを使おう」という方針が決まってしまっています。
 したがって、要件定義の段階で、ある程度、技術的めどをつけて、その観点から構築していかないと、実際には、システム開発でなくなります。この要件定義の段階での、技術的な適用に失敗しているため、システム開発ができないというのが最近のシステムの問題の現実です。

 要件定義の技術的な適用の失敗とは、すぐに思いつくので2つ(もっとあるかもよ)。

 1つは、あまりに、自分の知識がとぼしく、どんなものでも、同じやり方でやろうとするため、技術的に無理が出て、失敗する(例:DBのエンティティを切り出すのに、佐藤さん流派や、はぶさんの方法だけを使って、ボトムアップで構築するだけしか芸がないやつ。逆にトップダウンでエンティティを決めて、正規化するだけしか能がない、昔の一種(今のソフ開)テキストみたいなやつ。
 実際にデータベーススペシャリストのテキストには、両方載っているし、ふつう、両方できないと、行き詰る)

 もう1つは、実際に、どういう作業をするのかの知識がとぼしく、正しく予測ができていないで、当初の技術的なシナリオにくらべ、想定外のことだらけになってしまい、収拾がつかなくなるケース(例:前のブログのBREWの営業のケース)

てなかんじで、答えになってるかな。。

あ、問いの答えになってないって。。
問い「アナタにとって「レシーブ」とはどんなものですか?」の
答え「要件定義」です。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

BREWへ、Cプログラムを移植する作業項目、あるいはいい加減な営業の話

2005-11-17 13:47:01 | ケータイ

 うーん、世の営業はいい加減だ。

 一般に、BREW(auのEZアプリ)のソースコードは、Cで書きます(もしくはC++,Cが多い)。

 で、 あるCのプログラムがあります。このとき、
 「ソースがあれば、大丈夫、コンパイルすれば動きますよ!」
 と、豪語した営業がいるそうな。。。

 おいおい、そしたら、BREW対応パッケージソフトなんて、つくんの簡単ジャン!
 KDE for BREWとか、GNOME FOR BREWとかできんのかい!!

 営業って、いいかげんだよね!!




 あるCプログラムをBREWに移植するのに、すくなくとも、いますぐ思いつくこととして、こんな作業がある(もっとあると思うけど)

■■ そのプログラムがGUIを含んでいる
 作り直したほうが早いと思う

■■ そのプログラムが、ファイルインターフェースを含んでいる
 fopenなどのファイル関数部分を、ラッパーにして、中身をBREWの関数で書く。

 つまり、fopenなどのファイルの関数は、BREWではIFILE関数になるので、その部分を
 FILE *fopen(char *fname,char *attr)
 {
      //ここに、プログラムを書いてね!
      //えらーのときは
   return NULL;
 }

みたいなかんじで、プログラムを、オープンから、読み書き、クローズ、色々かくことになる。もちろん
typedef struct _FILE
{
	IFileMgr *pIFileMgr;
	IFile	*pIFile;
} FILE;

っていうかんじで、FILE構造体の中に、IFILEMGRと、IFILEのポインタを持っておき、それを使って操作する。ただし、この場合、アプリのフォルダにあるファイルになる。共通のデータフォルダアクセスは、また違う関数を使ってラップすることになるので注意(とくに、ここがBREW2.1とBREW3.1で仕様が変わっているので注意)

■■ そのプログラムが、SOCKET、HTTP通信有
 ラッパー関数を作って、その中身をHTTPは、IWeb関数、SOCKETは、ISocketで記述するということは、ファイルと同じだが、そもそも、その通信ができるかどうか確認すること。

 つまり、BREWのサービス概要1.0版では、

 一定時間内に無操作状態が続いた場合はユーザへネットワーク接続を継続するか否かの「継
続確認用ポップアップ」画面を表示し、ユーザの許可が得られない場合にはその後の接続保持の為の
パケット送出等ユーザ操作を契機とした通信の再開以外を一切禁止します。なお、このパケット送出
を停止するまでの無操作タイマー時間を「5 分間」と規定します。


 という規定がある(82ページ)。

 逆に言うと、5分以上、つなぎっぱなしにしているアプリはない。
 なので、ずーっとつなぎっぱなしにしていて大丈夫かどうかのテストが必要(これ以外の情報をしゃべるとまずいかもしんないので、言わないが、とにかく、確認してみよう!問題点が出てくる場合がある)


■■ それ以外の入出力がある
 そもそも、できるかどうかを考えよう。
 このとき、SDKがあるかないかを確認すること。
 たとえば、USBの端子があるということと、USBを操作できる(SDKに、その関数がある+その機種がその関数に対応している)ということは、まったく別問題である。

■■ それ以外の、ふつうのソース部分

 以下の注意が必要(思いついたもの)

●メモリー関係:memcpy(a,b,100);といった関数が、MEMCPY(a,b,100);になるように、大文字の関数になっているので、ラップするか、ヘッダーファイルで置き換えるように定義する。

●staticでとっているところ:BREWは、基本的にStatic禁止なので、staticにしなくてもすむように書き換える。

●計算:浮動小数点になると、関数を使わなければいけないという仕様がある(あった?)。
 そのため、そこの計算をおきかえるわけだが、215.6+312.3のように、計算は、関数と違い単純にラップをかけられない(operatorでかけられないよねえ。。たぶん??かけられるのかな??)
 なんで、そこの部分、書き換えになる。最新版(BREW3.1)でも、浮動小数点をやるときには、関数使わないといけないかどうかについては、未確認。

■■ 作業の進め方。
 とりあえず、ARMコンパイラで、小さな部分に分けて、コンパイルして、エラーになったら、上記の対策を行うことになる。




 てなわけで、単にコードをリコンパイルすればいいだけじゃなくって、結構細かい作業がはいる。
 そういうことを頭に入れないで、営業が適当なことを言うと。。こまったちゃんになる。

 まあ、BREWに限ったことじゃ、ないけどね。。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする