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

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

ニコニコ動画のWebサイト版?ニコニコブックマーク(21:00ごろ修正)

2007-06-08 20:20:17 | Weblog

ここの記事
今度はWebにコメント貼り付け「ニコニコブックマーク」
http://www.itmedia.co.jp/news/articles/0706/07/news109.html

によると(以下斜体は上記記事より引用)


ニコニコ動画のWebサイト版か!? Webページの上にユーザーのコメントを自由に貼り付けられる実験的なサービス「ニコニコブックマーク(仮)」が登場した。

Webページの上にユーザーのコメントを自由に貼り付けられる実験的なサービス「ニコニコブックマーク(仮)」が登場した。

動画にコメントを付けられる「ニコニコ動画」の静止画版のようなサービス。URLを投稿するとWebページのキャプチャ画像を取得。キャプチャの上の好きな位置に、ユーザーがコメントを貼り付けられる。


(20:40ごろ訂正)
ってかいてある。

にこにこブックマーク http://www.nicob.jp/

をみると、Webサイトに、コメントが確かについている。

 これだと、コメント拒否してるブログをここに載せて、コメントを書く。。なんてーのも、出来るんじゃあ、とおもったら、もう、やってるね


P.S はじめ、勘違いしてました。
 サイトにいって、確認したら、Webサイトにコメントするみたいなかんじになってます。
。。。って、著作権とか、大丈夫なんだろうか(^^;)
(21:00ごろ修正)もう、コメントをつけてないブログを、にこにこブックマークにあげてコメントをつけてるものを発見したので、文章を訂正。



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

開発の初めから順番に書いていってみる その57:プログラミング(19)入出力の自動生成7

2007-06-08 14:44:20 | 開発ネタ

 シリーズ「開発の初めから順番に書いていってみる」の続きです。
 設計手順には、要求分析、外部設計、内部詳細設計・プログラミング、単体テスト、結合テスト、総合テスト、運用テスト及び運用とあります。
 現在プログラミングです。
(プログラミング以前は、ここ http://www.geocities.jp/xmldtp/index_kaihatsu.htm

 プログラミングでは決定表と自動生成のお話をします。
 今、DB入出力の自動生成をやっています。

 DB入出力は、JDBCで行うのですが、JDBCアクセス部分は、
  execute
  selectExecute
 で行い、それは、ここで説明しました。

 その上の部分として、テーブルごとに用意した、
  ・select
  ・update
  ・insert
  ・delete
 メソッドから、SQLを発行し、executeとselectExecuteを呼び出すという話で、前回まででselect、insertをやったので、今日はdeleteとupdateをやります。




■delete文

DELETEは、

DELETE FROM テーブル名 WHERE 条件文

です。そして、WHEREは、selectのときのWHEREとおなじなので、
ここで説明しました。

ということは、

public int delete(Vector where)

で、
1.はじめに、"DELETE FROM userTBL"を書く
2.SELECT同様、WHERE句をつくる

ということになります。




■UPDATE文

UPDATEは、

UPDATE テーブル名 SET 項目名=値,・・・ WHERE 条件文

です。そして、WHEREは、selectのときのWHEREとおなじなので、
ここで説明しました。


また、SET句の項目名=値の部分は、WHERE句で、1行作る部分の
ANDが、,に変わっただけです。したがって、makeOneRecの区切りに,を
渡せば出来ます。

そこで、

1."UPDATE userTBL SET "をかきだす
2.setOneRec(makeOneRecの区切り,バージョン)を呼び出し、
  SET句を作る
3.SELECT同様、WHERE句をつくる

ということになります。




■ソース

それらをあわせると、こんなかんじです。
	/*
	 * 削除<BR>
	 * @param	Vector	where	対象、NULLのとき、全削除
	 * @return	int	0:OK,1:Error
	 */
	public	int	delete(HashMap taisho)
	{
		//	SQL文の書き出し
      	StringBuffer sqlbuf = new StringBuffer("DELETE FROM userTBL");
		if ( where	!=	null )
		{
			String	wstr = makeWhere(where);
			if ( wstr	!=	null )
			{
	      			sqlbuf.append(" WHERE " + wstr);
			}
		}
		return	execute(sqlbuf.toString());
	}

	/*
	 * 更新<BR>
	 * @param	HashMap	naiyo	set句の内容	
	 * @param	Vector	where	対象、NULLのとき、全削除
	 * @return	int		0:OK,1:Error
	 */
	public	int	update(HashMap naiyo,Vector where)
	{
		//	データチェック
		if ( naiyo	==	null )
		{
			return	-1;
		}
		if ( naiyo.size()	<=	0 )
		{
			return	-1;
		}

		//	SQL文の書き出し
      	StringBuffer sqlbuf = new StringBuffer("UPDATE userTBL SET ");
		String rec = setOneRec(naiyo);
		if ( rec	==	null )
		{
			return	-1;
		}
		sqlbuf.append(rec);

		String	wstr = makeWhere(where);
		if ( wstr	!=	null )
		{
	      	sqlbuf.append(" WHERE " + wstr);
		}
		
		return	exec(sqlbuf.toString());
	}

(上記< > ¥は、本当は半角です)

いつもどおり、userTBLというテーブルにおいて
name
pass
auth
という項目があったときを想定していますが、
こんかいは、項目はかんけいないですね(^^;)




ということで、書き出すべきSQLについて、トランザクションを考慮しない場合は全部説明しました。



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

一般的な編集ソフトの作り方 その9:メモリ上への要素展開(位置決め)。

2007-06-08 11:04:17 | Weblog

ワープロやドローイングソフトなどの編集ソフトを作る上での一般的な考え方を考える「一般的な編集ソフトの作り方」です。

 いま、メモリ上に、要素を展開したとき、必要なメソッドは何で、どこにおくか?という話をしています。
必要なメソッドは、
<<メソッド>>
・insert
・delete
・read
・write
・print(表示)
・位置決め

 で、今まで、insert,delete,print,read,writeはやったので、今回は位置決めについてです。




■位置決めとは?

 位置決めとは、削除、追加などの編集が行われた場合、今までの位置を動かさないといけないときがあります。
 たとえば、文字列が挿入されたなどという場合、挿入箇所以降の文字は、一般に動くことが多いです。削除されてもそうです。
 このとき、もう一度位置を決めなおすことを言います。
 再評価などといわれるかと思いますが、「再評価」っていうと、何を評価するの?ってなってしまうので、ここでは、位置決めとしておきます。




■位置決めまでの動き

 位置決めをするまでの動きなのですが、
1.編集されます=挿入とか、削除がおこります。
2.挿入されたものの、大きさ(幅と高さなど)を設定します
3.挿入したことを、親に伝えます
   =>この親に伝えるとき、伝えるメソッドが、位置決めメソッドです。




■親の位置決めメソッドのなかでの作業
 ここでやることは、子供の位置をすべて決めることなのですが、以下の作業内容を行います。

1.子供の位置を、あらかじめ決まっているアルゴリズムに基づき
  すべて決めます

  →このアルゴリズムは、まちまちです

2.決まった位置を、子供に通知し、セットしてもらいます
  →このとき、幅や高さも変えてしまう場合は、子供が、孫の位置決めを
   しないといけません
  (例:文字が追加され、親の要素である行は、1行内に抑えるため、
   10%幅を抑えた(=90%の大きさにした)。
   この場合、行は、文字に幅の変更を伝え、文字幅変更された場合の
   ロジックを動かします。
    この結果、孫の要素である、ルビ位置が変更になります)

  →しかし、孫の位置決めに失敗(孫をその位置に置けない)場合、
   1に戻ります。
   (例:さっきの10%幅を抑えた場合、ルビの幅も圧縮されますが
    そこまで、ルビが圧縮できない、文字が重なるうーというときは、
    孫に拒否されます。そうすると、子も、文字幅変更を拒否、
    親が再度決定するということになります)

3.親の兄弟姉妹、親の親などに通知しないといけない場合は、
  その処理をします。


  →文字の例で言うと、1行に収めようとしたけど、ルビに拒否された
   場合、仕方ないからあまった文字を次の行に送ります。
   このとき、OKが出たら、まず、その位置をセットした後で、あまった
   文字を、次の行に送ります。=次の行からみたら、文字が挿入された
   ことになるので、次の行における挿入処理が走り、位置決めが行われ
   ます。

   さらに、そうやって行ったら、親の枠がいっぱいになってもなお、
   文字があふれてしまった場合、あふれ文字として処理する場合もあり
   ますが、行が自動的に増える場合もあります。

   行が増える=横書きなら枠の高さ、縦書きなら枠の幅が広がるという
   ことで、行の親の、枠の幅変更処理をすることになります。




■位置決めをまとめると。。

まとめると、

●位置決め処理
  1.子供の位置を決める
  2.子供の位置変更通知
      →子供に否定されたら1へ
  3.派生処理を兄弟姉妹/親に通知

となります。3は、ない場合もあります。
1、2は、永遠と拒否されるとループしてしまうので、
その可能性があれば、どこかでとめることを考えないと
いけません。
(でも、そもそも、拒否されることはないのが普通です)

また、位置決め以外に、幅、高さ変更というのもあります

●幅、高さ変更
 1.その幅になることが可能かチェック
    →可能でないとき、拒否で抜ける
 2.その幅を前提として、子供の幅、高さ調整
    →子供から拒否されたら、拒否で抜ける
 3.子供がOKなら、それで位置決めして、子供に通知
 4.自分の幅を変更して抜ける→変更OK

ただし、要素によっては、幅や高さは変更不可というものが
あります。この場合、このロジックはありません。




■メソッドのまとめ

では、ここまでのメソッドをまとめると、

●insert
  子供をinsertする。手法はだいたい決まっている

●delete
  子供をdeleteする。手法はだいたい決まっている

●read
  自分を読み込んだ後、子供を呼び出す。
  考え方は、だいたい決まっている

●write
  子供の書き出しデータを受け取った後、自分を付け足す。
  (前に付け足すか、後に付け足すかは場合による)
  考え方は、だいたい決まっている

●print(表示)
  自分を表示し、子供を表示する。
  どちらを先に表示するか、また、表示などは、その要素ごとに
  考えないといけない

●位置決め
  上記のとおり。親が子の位置を決め、場合によっては他に通達する
  また、幅や高さ変更も必要になることがある。
  その要素ごとに考えないといけない。

 逆な言い方をすると、要素ごとに表示方法と位置決めが決まれば、あとは、パターンに当てはめてしまえばOKっていうことになります。




 ということで、メソッドの説明は終わりです。




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