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

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

まんが制作をフルデジタル化-共同印刷、ケータイにマンガを二次利用するには?

2006-08-30 23:53:10 | Weblog

 日本証券新聞8月31日号(30日夕方にすでに売られている)の5面に、(「パチスロメーカーが口臭測定器!?-アビリット」の下)

”まんが”制作をフルデジタル化 共同印刷 2次利用が楽に

という記事がある。そこから引用すると(以下斜体は上記記事より引用)

 共同印刷(7914)はこのほど、「まんがフルデジタル制作ライン」を構築、”まんが”制作工程の完全デジタル化により、ウェブ配信や携帯電話などへのデータの2次利用を簡単にした。


 たしかに、たしか、以前は漫画って、写研のマシンを使ってたような気が。。。
 でもフルデジタルってことは、スキャンするんじゃなくって、イラレとかで作るのかなあ??




 で、問題に思うのは、デジタル化して、たしかにWebでは見えるのはわかるんだけど、ケータイで見れるの?
 つまり、4コママンガみたいにだいたい大きさが決まっているのはいいけど、連載マンガなんかだと1コマのカットがちがって、極端な場合1ページ1コマとかあるじゃない。。
 そういうのを、ケータイ用に圧縮しちゃうと、文字の部分が見えなくなってしまう。

 じゃあ、ってんで、噴出しの部分を消して、下に文字を出す。。。としても、噴出しの部分は絵をかかれていないから、ここの部分を消したら。。。。どんな絵をだしたらいいかわかんない。
 なので、この考えもX

 ありえるのっていうと、
・噴出しの部分の文字を、マーキー(文字がぐるぐる動くやつ)にする
・噴出しの部分をクリックすると、下に大きなもじで読めるように、文字が出てくる
 ってかんじかな。どちらも噴出しの部分と文字の内容がわかんないといけない??


 

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

SNSは、利用者が多いと他のWeb2.0と同じになってしまう。なのでビジネスモデルは必要

2006-08-30 17:28:44 | Weblog

 SNSについて2つの話題を見た
mixi にも越えがたい壁が立ちはだかってきたのだろうか
http://ohnishi.livedoor.biz/archives/50237883.html


もうひとつは、
利用者を集めるのが先か、ビジネスモデルを決めるのが先か
http://blog.tokuriki.com/2006/08/post_227.html


 SNSの場合は、他のネットビジネスとちがって、特殊性があると思います。
 ちょっと考えて見ましょう。
 かりに全世界の人が、mixiに入ったとします。
 その場合、mixiは、ほかのWeb2.0サービスをやっている会社、たとえば「はてな」などと、どこが違うのでしょうか?

 ってかんがえると、SNSの場合、会員が限定されているので(招待制なので)、意義があるといえそうです。世界中の全員参加では、いみなさそうです。

 ぎゃくに1人しか参加しないとすると、どうなるでしょう。
 これも、こまります。ネットとして成立しません。




 1人では少なすぎ、世界全員では多すぎるとすると、その間のどこかに適切な人数というものがあるはずです。会社としては、そこを目指していくことになります。

 そして、その目標会員数に達したら、どうなるでしょうか?

 会員は増やせない(増やすべきでない)けど、資源は、増えていきます。皆さんブログを書けば、その分増えます。
 ということで、資源をどんどん使い、経費はかかります。

 したがって、一定会員数のときでも、どんどん資金が儲かるビジネスモデルがないと、SNSは破綻するってことになります(他のネットビジネスの場合は、利用者を増やせば切り抜けられる)。これをいつ、構築するかです。タイミングによっては、間に合わず資金がショートしてしまいます。

 なので、SNSの場合は、ビジネスモデルが早い段階で必要だと思います。




 一方、ここに指摘されている、ALEXAのmixiのトラフィック統計(リーチ)グラフ、そのブログでは、図をみて、今年の2月をピークに、急激なブレーキがかかったように、トラフィック量が伸び悩んでいるかも見える状態と分析していますが、ウィリアムのいたずらは、そうはみません。

 これは、材料待ちのグラフです。基調は、いまのところ、上に行きたがっている。

 これは、もみ合いのようにも見えますが、2006年の初めに急落したリバウンドが、高く行き過ぎてしまったので、そこと急落ラインの間で、もみ合いになってしまったものと思われます。しかし、その下値は、支持線となって、切りあがっているので、この状態では、下方とは言い切れません。
 かといって、上値も抵抗線になってしまっているので、もみ合いです。
 これを超えるには、ここで、なにか好材料がでて、それに反応しないとあがらないと思います。

 という意味でこの図からいえることは、mixiユーザーは何か新しいもの、好材料を求めてるとしかいえません。そしてそれに答えないと、たしかにグラフは(上に行かないことを確認したので、今度は下に下がって)反落すると思います。





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

Javaで基本操作(おまけ):splitによるCSVファイル読み込み

2006-08-30 15:16:03 | JavaとWeb

 JavaでCSVやタブ区切りファイルを読み込む場合、本によっては、java.io.StreamTokenizerを使ったりしてるけど、これって、数字と文字が混在する場合(住所など)は、ちと面倒になってくる。
 さっきのブログにあるようにJavaのv1.4以降であれば、splitが入ってるので、こいつを使うと、簡単に処理できます。
 つまり、

1.ファイル全体を読んできてしまう

  File f = new File(ファイル名);
  byte[] b = new byte[(int) f.length()];
  FileInputStream fi = new FileInputStream(f);
  fi.read(b);
  String s = new String(b);
  とすると、sにすべてのデータが文字列で入ってきます。

2.改行でsplitして、レコードのString配列をつくる
  String[] strrec = s.split("¥n");

3.そのString配列の1要素ごとに、タブ(あるいはカンマ)で
  きって、セルにわける(ここでは、1レコード分をVectorにいれてる)
  Vector rec = new Vector();
  for (int i = 0 ; i < strrec.length ; i ++ )
  {
    rec.add(strrec[i].split("¥t"));
  }

こんなかんじでsplitを使ったものを書いておきます
(このあと、タブ区切りファイルを使って、いろいろやりたいことがあるので)




■仕様
test.txtというファイル名で、以下の内容のファイルがあります。
9508	GASDAQ	栗原恵	13:50	7,340
9511	GASDAQ	大山加奈	13:00	43,450
9512	GASDAQ	木村沙織	13:04	59,900
9554	GASDAQ	菅山かおる	14:03	31,650


これを、以下のように、セルは:で区切り、1行ごとに改行し、
レコードの前に番目と付けます

0番目:9508:GASDAQ:栗原恵:13:50:7,340
1番目:9511:GASDAQ:大山加奈:13:00:43,450
2番目:9512:GASDAQ:木村沙織:13:04:59,900
3番目:9554:GASDAQ:菅山かおる:14:03:31,650


これを実現するため、Csvクラスにreadというメソッドを
以下の仕様で作成します

public static Vector read(String filename);
引数 filename 読み込むタブ区切りファイル
返り値 null   エラーあり
    それ以外 レコード
     Vectorの1要素が1レコードで、型はString[]



■呼び出し側ソース
そのCsv.readを呼び出すソースはこんなかんじ
import java.io.*;
import java.util.*;

public class test {
	/*
	 * 	メイン処理(呼び出し元)
	 */
	public static void main(String[] args) {
		int i,j;
		
		//	タブ区切りファイルの読み込み
		Vector rec	=	Csv.read("test.txt");
		if ( rec	==	null )
			return;

		//	内容表示			
		for(i = 0 ; i < rec.size() ; i ++ )
		{
			System.out.print(i+"番目");
			String[] cell = (String[])rec.elementAt(i);
			for(j = 0 ; j < cell.length ; j ++ )
			{
				System.out.print(":"+cell[j]);
			}
			System.out.println();
		}
				
	}
}

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



■タブ区切り読み込みクラス
 実際にsplitを使って読み込むクラス(上記説明内容のもの)は、
以下のとおり
import java.io.*;
import java.util.*;

/**
 * CSV、タブ区切り読み書き
 */
public class Csv {
	public static Vector read(String filename)
	{

		//==================================//
		//				//
		//	ファイル読み込み		//
		//				//
		//==================================//
		String s = null;		//	入力文字列

		//	ファイル読み込み
		try
		{
			File f = new File(filename);
			byte[] b = new byte[(int) f.length()];
			FileInputStream fi = new FileInputStream(f);
			fi.read(b);
			s = new String(b);
		}
		catch(Exception e)
		{
			return null;
		}	
		if ( s	==	null )
		{
			return null;
		}
		
		//==================================//
		//				//
		// 文字列をVectorに入れる     //
		//				//
		//==================================//
		Vector rec = new Vector();
		if ( rec	==	null )
		{
			return null;
		}

		s = s.replaceAll("¥r","");	// ¥rがあったとき対策
		String[] strrec = s.split("¥n");
		int i;
		for (i = 0 ; i < strrec.length ; i ++ )
		{
			rec.add(strrec[i].split("¥t"));
		}

		return	rec;
	}
}

(上記< > ¥は、本当は半角)
エラー処理はまじめにやっていません(nullを返すだけ)



こんなかんじ。

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

Javaで基本操作(その6):文字列操作 その2(文字列操作)

2006-08-30 11:31:48 | JavaとWeb

 Javaで基本操作シリーズその6、今回は、文字列操作の2回目。実際の文字列操作になります。



■文字列の比較
 これは、よく言われるように、=でなく、equalsメソッドを使うことになります。
 もちろん、比較のcompareToを使って、0だったら、一致でもOKです。
 ちなみに、s1.compareTo("abcdefg")とやっとき、
    s1が"abcdefg"より小さければ、マイナスの値
    s1が"abcdefg"より大きければ、プラスの値
 が返ります。




■文字列操作
 文字列の操作は、Stringのメソッドで行うことになります

・1文字をcharで取り出す charAt
・バイト配列をとってくる getByte
・文字列の長さを知る   length

●文字位置を探す
・indexOf
 その文字列が含まれているところ(先頭位置)がかえる。
 文字列は、0からはじまる。(1文字目は0、3文字目は2)
 indexOf(文字列,開始点)は、開始点以降で、一致する文字列を探す

・lastIndexOf
 おわりから探すときはlastIndexOf、その場合も、返り値は先頭を0とした
先頭からの位置が返る

●部分文字列(VBAでいうMid)
・substring(開始点,終了点);
 終了点は省略可能。その場合、文字列の最後までを返す。
 ただし、VBAのMidとJavaのsubstringでは、引数の意味が違うので注意
(midは開始点と文字数、文字は1文字目は1、
 substringは開始点,終了点、文字は1文字目は0)

●置換
・replaceとreplaceFirst、replaceAll
 文字を置換するという場合、ある文字をある文字(どちらも1字)へ変えるならreplaceでOKだが、普通、置換というと、ある文字列をある文字列(1文字とは限らない)に変えることを、さしますよね。

 この場合、
  replaceAllなら、該当文字列全部、
  replaceFirstなら、該当文字が複数あったら、はじめの文字列だけ
置換します。
 ただし、replaceAllやreplaceFirstは、文字列を指定するのでなく、
正規表現指定ですので、"abc*df"だと、abc*dfという文字ではなく、
違う意味になってしまいます。なので、特殊な文字を含む場合は注意です。

●文字を切る
・split
 これは、引数の文字が現れると、そこできります(その文字は入りません)
たとえば"abcafg"で切る文字を"a"にすると
   String[0] 空文字列(1文字目の"a"の前に文字はない)
   String[1] bc
   String[2] fg
と入ります。
 カンマ区切りのようなものの場合、便利です。
 ただし、これも、正規表現なので、引数に注意です。


●正規表現のもの
 このほか、正規表現を使えるものにmatchesがあります。これは、文字列が、
その正規表現どおりになっているかを確認します。
 splitやreplaceAllも、正規表現なのですが、実際には、そこに普通に文字列
をいれて使う場合が多い気がします。

 なお、正規表現のものは、バージョン1.4から入りました。
 バージョン1.3では使えませんので注意です。

●それ以外
trim()は両端のスペースを(あれば)カットします。それ以外は、あんまり使わないと思います。まあ、Stringのjavadocをみて、使えそうなのがあれば。。。




■サンプルソース
 それらのメソッドを使ったものは、こんなかんじ
/*
 * 文字列テスト
 */
public class test {

	public static void main(String[] args) {
		String s1 = new String("abcabc");

		//	charAt,getByte
		System.out.println("3文字目:"+ s1.charAt(2));
		byte b[] = s1.getBytes();
		System.out.println("cと同じ?(なら0):"+ (b[2]-'c'));

		//比較
		System.out.println("abcdefと比較:"+ s1.compareTo("abcdefg"));
		System.out.println("文字列一致:"+ s1.compareTo("abcabc"));

		//	文字の長さ
		System.out.println("長さ:"+ s1.length());
		
		//場所を返す
		int pos1 = s1.indexOf("a");
		int pos2 = s1.indexOf("a",1); //2文字目以降
		System.out.println("aの場所:"+ pos1 + " 2文字目以降" + pos2);

		//反対から探す
		pos1 = s1.lastIndexOf("a");
		pos2 = s1.lastIndexOf("a",1); //2文字目以降
		System.out.println("aの場所:"+ pos1 + " 2文字目以降" + pos2);

		//部分文字列
		String s2 = s1.substring(1,2); // 2 文字目から 3 文字目まで
		System.out.println("部分文字列:"+ s2);

		//置換
		String s3 = s1.replace('b','c');
		System.out.println("bをcに:"+ s3);

		//==============================//
		//		正規表現	  //
		//==============================//

		//	部分にきる
		String s4[] = s1.split("a");
		System.out.println("aで、切ってみた");
		for(int i = 0 ; i < s4.length ; i ++)
		{
			System.out.println(i+"番目:"+s4[i]);
		}
		
		//	一致するか
		System.out.println("abcで書かれてる:"+s1.matches("[abc]*"));

		//	置換
		System.out.println("abをはじめだけカット:"+s1.replaceFirst("ab",""));
		System.out.println("abを全部カット:"+s1.replaceAll("ab",""));
		
	}
}

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

ちなみにreplaceAll(指定文字列,"");は、指定文字列を空文字列に変換=>結果として指定文字列をカットします。



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