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

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

ソフトバンク同士の通話料0円になるために必須の”新”スーパーボーナスの内容わかる

2006-10-25 22:41:25 | Weblog

 ソフトバンクの予想外割、つまり、ソフトバンク同士間の通話料0円にするための前提となる、新スーパーボーナスの内容(今のボーナスプランが、ちと変わるようだ)が、もう、載っていますね!(26日発表されることになっている)。

ここ
ソフトバンク、「新スーパーボーナス」で何が変わる?
http://k-tai.impress.co.jp/cda/article/news_toppage/31680.html


 なお、ソフトバンク同士の通話料0円にするための、ソフトバンクの予想外割(ゴールドプランのこと)を利用するには、新スーパーボーナスへの加入が必須となります。




 上記のニュースによると(以下斜体は、「ソフトバンク、「新スーパーボーナス」で何が変わる?」から引用)

 現在のスーパーボーバスは、こんなかんじ


端末は分割払いで購入し、店頭で端末購入時に支払うのは頭金となる。以降毎月残金を返済していく形となるが、月々の支払い額と同額の割引が用意され、ソフトバンクを契約している間はこの残金は相殺される。新規または機種変更のタイミングで加入し、加入して3カ月目から返済がスタートし、24回払いで返済していく。つまり返済が完了するまでは27カ月かかることになる。

 なお、途中で解約した場合は、返済が終わるまで残りの端末代金を支払わなくてはならず、機種変更であっても同じように返済し続ける必要がある


 つまり、端末は、スーパーボーナスの場合、頭金を払うだけで、あとは3ヶ月据え置きの24回分割払いで払うため、その間、機種変更したり、解約したりしたら、その端末のお金を払わなきゃいけない。ってこと。。

 もっというと、
・ゴールドプランに入って、ソフトバンクの2880円の割引を受ける
・半年ぐらいして、MNPで、Docomoやauに変えたいとする
・で、変えたとしても、スーパーボーナスの分割した端末代金は払う
(=2重払い)っていうこと。

 もっともっというと
・ゴールドプランに入って、ソフトバンクの2880円の割引を受ける
・1年ぐらいして、機種変更したいと思って変更した
・で、変えたとしても、スーパーボーナスの分割した端末代金は払う
(=2重払い)っていうこと。

 ただし、ソフトバンクを契約している間は、その端末の分割払い分程度のお金を(継続)割引する。

 つまり、

   分割した端末代金-継続割引料金=ほとんど費用負担なし!
 
 という仕組みになっていた。




 新ボーナスプランにおいては、上記計算式

   分割した端末代金-継続割引料金=ほとんど費用負担なし!

 の、分割した端末代金は支払わなくてはいけないのは、同じ。
 ところが、この「継続割引料金」部分の記載がないそうだ。

 でも、ゴールドプランには、継続割引があるそうな。。。??

 なんか、すげー複雑だぞ。。。(>_<!)

 ただ、ひとついえそうなのは、多分、初めに書いた、半年とかで会社を変えた場合は、分割した端末料金は払わなきゃならないって言うのは、同じなんだろうな。。


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

予想外割、ソフトバンク以外は通話割高で、むしろウィルコムのよさを際立たせてしまった。。。

2006-10-25 17:38:37 | Weblog

 きのうのソフトバンクの予想外割のまとめのつづきです。




 昨日の段階では、こんなかんじ

<23日>
 2880円で、ゴールドプランに入ると、通話とショートメールがソフトバンク同士だと無料になると発表。

 この時点では、ゴールドプランは
(1)データ通信定額サービス「パケットし放題」
(2)「スーパー安心パック」
(3)留守番電話などの付加機能をパックにした「スーパー便利パック」
の3つに入らないといけない。かつ、上記3つは、解約できないといっていた。
なので、3つのサービス期間が終わると、2025円を追加した4905円(最低、これに
YAHOO!ケータイをつけるともっと高くなる)といっていた

<24日>
 本家に書いたとおり、ITPROによると、上記3つのサービスは、解約できる。
 つまり、解約して、2880円のままでもOKと、発表を変える。
 この変更になった理由は、ITPROの記事によると、ソフトバンクモバイル本社で、情報が錯綜していたため。。


<24日>
 それにくわえ、S!メールも無料化になった(ソフトバンク間だと思うけど。当然)

で、続き




<24日(続き)>

ケータイWatchに
ソフトバンクの「予想外割」は本当に安いのか
http://k-tai.impress.co.jp/cda/article/news_toppage/31660.html


という記事が出る。
つまり、この2880円のプランは、上記までの話にくわえ
(以下斜体は上記ニュースより引用)


ソフトバンク同士の通話が無料となるのは1日のうち約20時間。21時~24時59分の約4時間は完全な無料ではなく、この時間帯の1カ月間の累計通話時間が200分(3時間20分)を超える場合、30秒毎に21円の通話料金が発生する。


というわけで、21時から、翌朝1時(って、多くは、この時間にかけるよね)にかける人は、3時間20分以上かけると、電話料がかかる。

 さらに、なお、テレビ電話機能「TVコール」の通話料金は他社携帯電話・PHS宛の通話料金の1.8倍相当になるということで、割高。

そして、他社にかける場合は

 他社携帯電話・PHSおよび固定電話に電話をかけた場合、従来の通話料金よりも割高な通話料となっている。例えば、従来のソフトバンクの料金プランでは、昼間1分あたりの通話料金が15.75円~52.5円程度だが、ゴールドプランでは30秒あたり29.4円~30.45円(1分あたり58.8円~60.9円)となる。なお、ゴールドプランには無料通話は含まれない。


ってことで、ほんとーに得なのか??という話になってくる。




<25日>

ソフトバンク・ゴールドプランの落とし穴
http://e.willcomnews.com/

などというサイトが、Gooブログランキングに入ってくる。

ここでは、予想外割と、ウィルコムを比較している。
たしかに、会社利用で、どっちがいい??とか考え出すと、W-ZERO3のほうが。。。
っていうことにも、なりかねない
(逆に値段や条件が近くなってしまったので、ウィルコムを意識しはじめてしまった)

 ウィリアムのいたずらの知り合いの会社でも話題になったけど、
 「これって、むしろ、ウィルコムのサービスのよさを際立たせてしまっただけでは」
 との意見が。。(^^;)

いまここ。




<26日(予定)>
・予想外割導入日
 →ショップはだいじょうぶなんすかねえ(^^;)

26日にも「予想外」の発表をすると、すでに宣言している
(リンク先の記事の一番最後の段落参照)




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

Javaの画面表示-その12:SWTによる画面表示(その2:1画面用のソース)

2006-10-25 16:44:23 | 業務のモデル化

 シリーズJavaの画面表示のつづきです。
 現在は、SWTについてやっています。
 前回はSWTとAWTなどの違いについてと、インストール方法について書きましたので、今回は手順についてとソースと、問題点です。

 今回のは、あくまでも、第一画面のみを出す方法です。
 このとき、第二画面を出すと、おかしなことになります。




■手順
 SWTで、1画面だけ書く場合は、以下のような手順になります。

●はじめに(initAppData内)
1.DisplayとShellを取得します
2.各種部品を生成して、部品に対する設定をします
3.Shellをオープンします
4.表示されている間(isDisposed() ==false)以下のループをします
  ディスプレイのreadAndDispatch()がfalseなら、スリープする
5.4の条件が成立しない(=disposeされた)ら、ディスプレイもdisposeします
  →これで終了する

●再描画(DispAppData)
 AWTのときと同じです

●終了(freeAppData)
 画面を消す場合は、disposeする

●内部クラスgamen1_HandleEvent(SelectionAdapterの拡張)
   のwidgetSelected(SelectionEvent e)
 AWTのactionPerformedとおなじ。




■ソース

 ということで、第一画面をまとめると、こんなソースになります。
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;

import java.util.*;

public class gamen1 {
	
	//	共通領域
	public HashMap	map = null;

	//	モデル
	public Shori	shori = null;	
	//	画面項目項目
	Display		ff;
	Shell		f;
	Button		b1;
	Button		b2;
	Text		t1;
	
	int		seikai 	=	0;
	int		phaseNo	=	0;
	int		curno	=	0;

	/*
	 * 	生成
	 */
	public gamen1(HashMap map)
	{
		this.map = map;
		map.put("gamen1",this);

		this.shori = (Shori)map.get("shori");

		initAppData();
	}

	/*
	 * 	表示
	 */
	public void initAppData()
	{
		
		//	シェルを作成する		
		ff = new Display();
		f = new Shell(ff);
		f.setText("test");
		f.setSize(240,320);
		f.setLayout(null);

		//	アクションを作成する
		gamen1_HandleEvent al = new gamen1_HandleEvent();

		//	ラベル
		Label l1 = new Label(f,SWT.NULL);
		l1.setLocation(10,30);
		l1.setSize(100,30);
		l1.setText("早うちの練習");

		Label l2 = new Label(f,SWT.NULL);
		l2.setLocation(10,120);
		l2.setSize(150,30);
		l2.setText("これは、練習文です。");

		Label l3 = new Label(f,SWT.NULL);
		l3.setLocation(10,70);
		l3.setSize(100,30);
		l3.setText("以下の文を打とう!");
	
		//	テキスト
		t1 = new Text(f,SWT.NULL);
		t1.setLocation(10,160);
		t1.setSize(150,80);
		
		//	ボタン作成		
		b1 = new Button(f,SWT.NULL);
		b1.setLocation(120,70);
		b1.setSize(100,30);
		b1.addSelectionListener(al);
		b1.setText("挑戦する");

		//	ボタン作成		
		b2 = new Button(f,SWT.NULL);
		b2.setLocation(10,250);
		b2.setSize(100,30);
		b2.addSelectionListener(al);
		b2.setText("打ち終わった!");

		//	表示
		f.open();
		DispAppData();

	   	// ウィンドウが破棄されるまでループ
    	while (f.isDisposed() == false)
    	{
      		if (ff.readAndDispatch()	==	false)
      		{
        		ff.sleep();
      		}
	    }
    	ff.dispose();

	}

	/*
	 * 	再描画
	 */
	public void DispAppData()
	{
		//	画面間引数を受け取る		
		String rensyu = "";
		if ( map	!=	null )
		{
			rensyu	= (String)map.get("rensyu");
			if (rensyu	==	null )
				rensyu = "";
		}

		//	画面表示
		if ( t1 != null )
		{
			t1.setText(rensyu);
		}

	}
	
	/*
	 * 	終了
	 */
	public void freeAppData()
	{
		//	2度目にもとってきたときのため、初期化
		map.remove("rensyu");
		phaseNo	=	0;
		curno	=	0;

		String dis = (String)map.get("dispose");
		if ( dis == null )
			return;
		if ( dis.equals("yes")	==	true )
		{
	    	f.dispose();
			map.remove("gamen1");	
		}
	}
	
		
	/*
	 * 	イベントリスナー
	 */
	private class gamen1_HandleEvent 
			extends SelectionAdapter
	{

		/*
		 * 	ボタンが押されたときの処理
		 */
		public void widgetSelected(SelectionEvent e) 
		{

			Object o = e.getSource();

			if ( o.equals(b1)== true)
			{	//	挑戦する
				System.out.println("挑戦する");
				
				//======================//
				//	内容の取得     //
				//======================//
				map.put("rensyu",t1.getText());
				
				//======================//
				//	処理	      //
				//======================//
				if ( shori	==	null )
					return;
				shori.shori1();

				//======================//
				//	次の画面処理   //
				//======================//
				phaseNo	=	1;
				curno	=	1;
				DispAppData();
				return;
			}

			if ( o.equals(b2)== true)	
			{	//	打ち終わった!

				//======================//
				//	内容の取得     //
				//======================//
				map.put("rensyu",t1.getText());

				//======================//
				//	処理	      //
				//======================//
				if ( shori	==	null )
					return;
				shori.shori2();
				
				//======================//
				//	次の画面処理   //
				//======================//
				//	第二画面表示
				gamen2 g2 = (gamen2)map.get("gamen2");
				if ( g2 == null )
				{
					g2 = new gamen2(map);
				}
				else
				{
					//	再描画
					g2.DispAppData();
				}
				//	消す
				freeAppData();
			}
		}
	}
}





ただし、上記にも書いたように、これで、第二画面を出そうとすると、おかしくなります
(第二画面も、第一画面と同じ修正をしても、異常終了します)
それについては、次回のこのシリーズで。。。

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

携帯から遠隔操作できるロボの「キーワード抽出コマンド変換技術」って、人工無能のことじゃ(^^)?

2006-10-25 14:36:36 | Weblog

ここのニュース
携帯から遠隔操作できるロボで子供を見守る実証実験
http://k-tai.impress.co.jp/cda/article/news_toppage/31667.html


おお、ケータイ電話から、ロボットを操作できるようになったのですね!
ま、ウィリアムのいたずらが今までも書いているように、そこまでなら
考え付くし、さらに(以下斜体は上記ニュースより引用)、

実験ではiモーション対応端末が利用される。システム上は、携帯電話に限らずインターネット接続できる端末であれば良いとのことだが、同社は「今回は、一般的に普及している携帯電話で利用できるようにした」と説明している。


っていうことで、インターネットがつながればOK,っていうことは、バンダイのネットタンサーにも競合しそう。。。

 ただ、これ、それだけじゃなく、将来的には。。

同プラットフォームには自由文を解析して、コマンドに変換する


 ここまでは、「おお、すげー!」なんだけど。。


「キーワード抽出コマンド変換技術」が採用


うん?キーワードをコマンドに変換するって。。。
それ、人工無能のことじゃ(^^;)

モノは言いよう??
P.S なんか、世の中は、だんだん、いもうとデスクトップ実現に近づいているような。。
このコンセプトを出した、インプレスは、すごいかも(^^;)



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

Excel仕様書からプログラムソースを生成するマクロを、公開してみる

2006-10-25 12:57:01 | ケータイ

 昨日の
仕様書からプログラムソースを生成する方法(Excelの仕様書編)
のその2として、Excel仕様書から、プログラムソースを書き出す、一般的なマクロプログラムを公開してみたいと思います。
 ちなみに、これは、シリーズBREWで複数画面を開発する場合の方法論の一部です。




■仕様

以下の雛形ファイル(ファイル名hina1.txt)
void initFunc(IKHUser *pUser)
{
	$#$CELL B2$#$	*pMe;

	if ( pUser	==	NULL )
		return;

	pMe	= ($#$CELL B2$#$ *)pUser->pMe;

	switch(pUser->kind)
	{
$#$REP 5$#$
	case	USER_ITEM_$#$KETA A$#$:
		$#$KETA K$#$_InitAppData(pMe);
		pUser->val	=	pMe->garea;
		return;
$#$REPEND A$#$
	}
}

と、以下のようなExcelファイル(シート名 画面一覧)

を入力としたとき、


以下のファイル(ファイル名out1.txt)
void initFunc(IKHUser *pUser)
{
	fukusu1	*pMe;

	if ( pUser	==	NULL )
		return;

	pMe	= (fukusu1 *)pUser->pMe;

	switch(pUser->kind)
	{

	case	USER_ITEM_GAMEN1:
		gamen1_InitAppData(pMe);
		pUser->val	=	pMe->garea;
		return;

	case	USER_ITEM_GAMEN2:
		gamen2_InitAppData(pMe);
		pUser->val	=	pMe->garea;
		return;

	case	USER_ITEM_GAMEN10:
		gamen10_InitAppData(pMe);
		pUser->val	=	pMe->garea;
		return;

	}
}

を出力するマクロを作成しなさい。

注:
ここで示したものと、少し変えています。

・Excelシート、実際にはK列は、非表示にします。なお、K列は写真のように
 =LOWER(A行数)の感じで、式が入ってます

・雛形ファイルの制御タグ($#$で囲まれた文字列)は、以下のとおり

$#$REP 行数$#$ 繰り返し(指定行数から開始)
$#$REPEND 桁$#$ 繰り返し終了(シートの現在行の桁が空白なら繰り返し終了)
$#$CELL セル$#$ 指定したセルが入る
$#$KETA 桁$#$  繰り返し時、指定された桁が入る





■マクロのソースコード

マクロのソースはこちら。
Public outdata As String
Public lpstr_pos As Integer
Public lpgyo As Integer

Sub shiyoToFile()

    Call makefile("hina1.txt", "画面一覧", "out1.txt")
    MsgBox "終わりました"

End Sub

Sub makefile(infname As String, shname As String, outfname As String)

            '//=========================//
            '//     雛形を読み込む      //
            '//=========================//
    Open infname For Binary Access Read As #1
    fsize = FileLen(infname)
    Seek #1, 1
    indata = Input(fsize, #1)
    Close #1

            '//=========================//
            '//     書き出し内容作成    //
            '//=========================//
    str_pos = 1         '   開始ポイント
    outdata = ""
    tag_pos = InStr(str_pos, indata, "$#$")
    
    Do While (tag_pos > 0)
                        '直前まで書き出し
        outdata = outdata & Mid(indata, str_pos, tag_pos - str_pos)
                        
                        '制御内容終わりを探す
        end_pos = InStr(tag_pos + 3, indata, "$#$")
        If (end_pos = 0) Then
            str_pos = tag_pos + 3
            Exit Do
        End If
        
                        '制御内容コピー
        tag_data = Mid(indata, tag_pos, end_pos - tag_pos + 3)
        
                        '  制御内容ごとに処理
        str_pos = chgTagToStr(Replace(tag_data, "$#$", ""), end_pos + 3, shname)
        
        
            '   次のタグ位置を探す
        tag_pos = InStr(str_pos, indata, "$#$")
    Loop
            
            '   最後の残りを書き出し
    outdata = outdata & Mid(indata, str_pos)

            
            '//=========================//
            '//     作成データ書き出し  //
            '//=========================//
    If (Dir(outfname) = "") Then
                            '   なければ、なにもしない
    Else
        Kill outfname       '   ファイルがあったら、削除しておく
    End If
    
    Open outfname For Binary Access Write As #1
    fsize = FileLen(outfname)
    Put #1, 1, outdata
    Close #1

End Sub

Function chgTagToStr(tag As String, next_str_pos As Integer, shname As String) As Integer
    
    If (Mid(tag, 1, 6) = "REPEND") Then
        lpgyo = lpgyo + 1
        cellpos = Replace(Mid(tag, 7), " ", "") & CStr(lpgyo)
        celldata = Sheets(shname).Range(cellpos)
        If (celldata = "") Then
            chgTagToStr = next_str_pos
        Else
            chgTagToStr = lpstr_pos
        End If
        Exit Function
    End If
    
    If (Mid(tag, 1, 3) = "REP") Then
        lpstr_pos = next_str_pos
        lpgyo = CInt(Replace(Mid(tag, 4), " ", ""))
        chgTagToStr = next_str_pos
        Exit Function
    End If
    
    If (Mid(tag, 1, 4) = "CELL") Then
        cellpos = Replace(Mid(tag, 5), " ", "")
        celldata = Sheets(shname).Range(cellpos)
        outdata = outdata & celldata
        chgTagToStr = next_str_pos
        Exit Function
    End If
    
    If (Mid(tag, 1, 4) = "KETA") Then
        cellpos = Replace(Mid(tag, 5), " ", "") & CStr(lpgyo)
        celldata = Sheets(shname).Range(cellpos)
        outdata = outdata & celldata
        chgTagToStr = next_str_pos
        Exit Function
    End If

    chgTagToStr = next_str_pos

End Function


今回示したものは、条件分岐が無いので、かなり限定的です。
条件分岐があるものは、そのうち示します。
(まず、ないものを説明してからでないと、複雑になってしまうから、
 2ndとして、後日条件分岐付きを示します)

で、これを、どのように貼るか&ボタンを押すと、動くようにする方法は、
このエントリに書ききれそうもないので、
いったんここで区切って、次回書きます。



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

PHPやPerlでExcelを読み書きするまとめ

2006-10-25 10:26:34 | PHP

 サーバーがWindowsであれば、IISのASP(アクティブサーバーページのほう)でExcelのオブジェクトをCreateして、操作できるし、
 サーバーでJavaが使えれば、POIJExcelApiでできる。

じゃ、レンタルサーバーみたいな、
   サーバーのOSがLinuxでPerlとPHPしか使えない場合は??
   でもExcelを読み書きしたい場合は?

というので、調べてみたメモメモ
(メモなので、本当にできるかどうかは、確かめていません。)




■Perlの場合
よみ:Spreadsheet-ParseExcel-0.2603
  http://search.cpan.org/~kwitknr/Spreadsheet-ParseExcel-0.2603/ParseExcel.pm

かき:Spreadsheet::WriteExcel

参考サイト
  Spreadsheet::WriteExcel - Perl で Excel ファイルを出力
  Spreadsheet::WriteExcel = Perl で Excel 出力
  Spreadsheet::WriteExcel = Perl で Excel 出力(2)



■PHPの場合
読み:Spreadsheet_Excel_Reader(SourceForge)
http://sourceforge.net/projects/phpexcelreader/

書き:Spreadsheet_Excel_Writer(PEAR版)
   PHP Class版もある。

参考サイト:
  PHPでExcelファイルの入出力
(真っ白になる場合は、エンコードをUTF8に)
  Excelファイル形式でのデータダウンロード(PEAR版)



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