いちご30%off原材料名:いちご、増粘多糖類、着色料、殺虫剤(メタミドホス含む)

| CALENDAR | RECOMMEND | ENTRY | COMMENT | TRACKBACK | CATEGORY | ARCHIVE | LINK | PROFILE | OTHERS |
スポンサーサイト

一定期間更新がないため広告を表示しています

| - | - | - | posted by スポンサードリンク -
javascript 多重継承 インターフェイスの実装 22:44
javascript は プロトタイプ・ベース のオブジェクト指向プログラミング言語。
javascript でのオブジェクトの継承はプロトタイプ・オブジェクトに継承したいオブジェクトをすることで実現できる。

以下は単なるオブジェクトの継承

var superObject = function(){
this.soProperty = "super";
this.soMethod = function(){
alert( "You called method 'soMethod', that is super object." );
}
}
var subObject = function(){}
subObject.prototype = new superObject();

alert( subObject.prototype.soProperty ); // "super"
subObject.soMethod() // "You called method 'soMethod', that is super object."


複数のオブジェクトを継承する場合、二つ目以降のオブジェクトをコンストラクタ内で継承したいオブジェクトのコンストラクタを呼び出すことで継承できる。

var superObject1 = function(){
this.soProperty1 = "super1";
this.soMethod1 = function(){
alert( "called soMethod1" );
}
}
var superObject2 = function(){
this.soProperty2 = "super2";
this.soMethod2 = function(){
alert( "called soMethod2" );
}
}
var subObject = function( id ){
this.subObjectId = id;

this.extension1 = superObject1;
this.extension1();

this.extension2 = superObject2;
this.extension2();
}
subObject.prototype = {
subMethod : function(){
alert( "called subMethod" );
}
}

var instance = new subObject( "instance" );

alert( instance.soProperty1 ); // "super1"
instance.soMethod1() // "called soMethod1"

alert( instance.soProperty2 ); // "super2"
instance.soMethod2() // "called soMethod2"

alert( instance.subObjectId ); // "instance"
instance.subMethod(); // "called subMethod"





JUGEMテーマ:WebProg


| 開発ノート | comments(9) | trackbacks(8) | posted by スネ夫 -
NS_ERROR nsSessionStore.js 08:20
firebug のコンソールに以下のメッセージが吐かれた。

[Exception... "Component is not available" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: file:///C:/Program%20Files/Mozilla%20Firefox/components/nsSessionStore.js :: sss_saveState :: line 1909" data: no]
file:///C:/Program%20Files/Mozilla%20Firefox/components/nsSessionStore.js
Line 1909

メッセージ中にある nsSessionStore.js に軽く目を通してみると、さまざまなオブジェクトの名前に component あるいは event などといった語が使われていた。

ちょうどオブジェクト名にこれらの語を用いるようなスクリプトを作っていたものだから バッティング が起きたのかもしれないと思い、それまで読み込んでいたjsライブラリ、スクリプトを一度すべて切り離して実行(単なるHTMLファイルの読み込み)したが相変わらずエラーが出た。

また、このエラーはページを読み込んで2〜3秒経った頃に現れる。

追記
やはりすべてのwebページにおいてこのエラーは現れるみたいだ。

JUGEMテーマ:WebProg


| 開発ノート | comments(0) | trackbacks(0) | posted by スネ夫 -
php 好きな関数 04:31

ふと思った。
おれは die() がすきだ。

今、顧客へのメール送信アプリケーションを作っている。
これは prototypejs や YUI などの AJAXライブラリ を用いて、まったく画面遷移のないものになる予定。

ブラウザから AJAX.Request() を飛ばして、サーバーが JSON形式 に成型されたレスポンスを返す。
そのレスポンスを返す際に die() を用いている。
レスポンスを出力すると同時にスクリプトを停止させることが出来るとても便利な関数のように思える。

array() もすきだ。
array() がすきというより、配列がすきだ。
配列を用いて変数を一元管理することが出来る。
配列を用いずに $smarty->assign() を何行にも渡って書き連ねるのは見苦しいと思う。
テンプレートを記述する際にその力を感じることが出来る。

また、 array_merge_recursive() なんかは挙動を把握するのに時間がかかる。
一言で言うとイミフ。
| その他 | comments(0) | trackbacks(0) | posted by スネ夫 -
マジックが・・・したいです・・・ 22:01
最近うちのbnp(ボローノートパソコン)のRAMを拡張した。
ひょっとしたらこれでMO3いけんじゃね?と思った俺は早速インスコしてみた。
DirectX9ってのもインスコして準備万端
で起動してみると・・・・











動かなかった。






どうでもいいが行間空けてみた。
こういう行間のとり方が昨今の日記愛好家達にはうけるらしい。
縦スクロールさせんじゃねぇ。横スクロールはもっとうざいが
「昨今の日記愛好家達にはうけるらしい。」って・・・
何様よおれ。

ビデオメモリがタリンらしい。
グラフィックカードを換装しなきゃならないがそんなことはせん。
つぎPCを買うときまでお預けだ。

MyBNPのスペック
ただし、メモリは拡張してあり、640MB。

MyBNPってかっこいいな。MySQLみたいです。ありがとうございました

JUGEMテーマ:Magic:the Gathering


| Magic Online(mtg関連) | comments(0) | trackbacks(0) | posted by スネ夫 -
iアプリ サーバー(php) との連携 画像バイナリファイルの送信 00:21
画像ファイルをサーバーにアップロードする処理。

iアプリソース

import com.nttdocomo.ui.*;
import com.nttdocomo.io.*;
import com.nttdocomo.system.*;
import javax.microedition.io.*;
import java.io.*;
import java.util.*;
import java.lang.*;

public class TransportImage extends IApplication {
Panel mainPanel;
Button transportImage;
public void start() {
mainPanel = new Panel();
transportImage = new Button("画像選択");
mainPanel.add(transportImage);
TransportImageListener til = new TransportImageListener();
mainPanel.setComponentListener(til);
Display.setCurrent(mainPanel);
}
class TransportImageListener implements ComponentListener{
public void componentAction(Component c,int type,int param){
if(c == transportImage){
Dialog confirmationDialog = new Dialog(Dialog.DIALOG_YESNO,"確認");
String confirmationText = "画像をサーバーへ送信します。";
confirmationDialog.setText(confirmationText);
int dialogButtonType = confirmationDialog.show();
if(dialogButtonType == Dialog.BUTTON_YES){
try{
ImageStore selectImage = ImageStore.selectEntry();
InputStream imageInputStream = selectImage.getInputStream();

Random rand = new Random();
String sessionId = Integer.toString(rand.nextInt());
byte[] imageByte = new byte[50000]; // 転送ファイルサイズ上限
boolean loopFlag = true; // while文用フラグ
int length = 500;
int readLength = length;
int i = 0;
while(loopFlag){
HttpConnection con = (HttpConnection)Connector.open(
"http://localhost:80/test/IAppliImageTest2.php?sid="+sessionId,
Connector.READ_WRITE,
true);
con.setRequestMethod(HttpConnection.POST);
con.setRequestProperty("Content-Type","text/plain");
OutputStream out = con.openOutputStream();
if(readLength < length){
String endOfFile = "EndOfFile";
OutputStreamWriter writer = new OutputStreamWriter(out);
writer.write(endOfFile);
writer.close();
readLength = 0;
loopFlag = false;

}else{
int offset = i * length;
readLength = imageInputStream.read(imageByte,offset,length);
out.write(imageByte,offset,length);
out.flush();
out.close();
con.connect();
con.close();
++i;
}
}catch(Exception e){
System.out.println(e.toString());
Dialog errorDialog = new Dialog(Dialog.DIALOG_INFO,"警告");
errorDialog.setText("エラーが発生しました。");
errorDialog.show();
}
}
}
}
}

}



サーバー側ソース(php)
<?php
$session = new session();
mb_internal_encoding('SJIS');
$data = null;
$file_source = fopen('php://input','rb');

while(!feof($file_source)){
$data .= fgetc($file_source);
}
if($data == "EndOfFile"){

$hex = bin2hex($_SESSION["part_of_image"]);
if(preg_match('/^ffd8.*$/',$hex)){
$file_extension = ".jpg";
}elseif(preg_match('/^474946.*$/',$hex)){
$file_extension = ".gif";
}else{
$file_extension = ".dat";
}

$unique = uniqid('image_');
$file_name = $unique . $file_extension;
$image_file = fopen('./image/'.$file_name ,'wb');
fwrite($image_file,$_SESSION["part_of_image"]);
fclose($image_file);
}else{
$_SESSION["part_of_image"] .= $data;
}
fclose($file_source);

class session{
var $sid;

function session(){
$tmp_dir = "./tmp";
session_save_path($tmp_dir);
if($_REQUEST[sid]!=NULL){$this->sid=session_id($_REQUEST[sid]);}

session_start();
$this->sid=session_id();
}
}
?>

JUGEMテーマ:WebProg


| 開発ノート | comments(0) | trackbacks(0) | posted by スネ夫 -
iアプリ サーバー(php) との連携 14:34
iアプリを作り始めることに。
やっぱりサーバーと連携が取れるアプリケーションを作りたい。
iアプリからサーバーへテキストを送信し、サーバーは受け取ったテキストを処理する。
という感じのヤツを作ることに。
サーバーの処理は受け取ったテキストをメールで送る。

iアプリソース:ConnectTest090208.java
import com.nttdocomo.ui.*;
import com.nttdocomo.io.*;
import java.io.*;
import javax.microedition.io.*;

public class ConnectTest090208 extends IApplication {

Panel panelObject;
Button buttonObject;
SetComponent componentListenerObject;
TextBox textObject;

public void start() {
panelObject = new Panel();
buttonObject = new Button("送信");
textObject = new TextBox("テキストを入力して下さい",20,5,TextBox.DISPLAY_ANY);
// コンポーネントを配置
panelObject.add(textObject);
panelObject.add(buttonObject);
// イベントリスナーを設定
componentListenerObject = new SetComponent();
panelObject.setComponentListener(componentListenerObject);
// パネル表示
Display.setCurrent(panelObject);
}

class SetComponent implements ComponentListener{
public void componentAction(Component c,int type,int param){
// コンポーネント「送信」ボタンが押された時
if(c == buttonObject){
// メッセージ送信確認ダイアログ
int dialogType = Dialog.DIALOG_YESNO;
String dialogTitle = "確認";
Dialog dialogFrame = new Dialog(dialogType,dialogTitle);
dialogFrame.setText("送信します。");
/*
* dialogFrame.show()でダイアログを表示
* Display.setCurrent(dialogFrame)ではダメ
* int dialogButtonTypeで押されたボタンタイプを受け取る
*
*/
int dialogButtonType = dialogFrame.show();
// yesボタンが押された時
if(dialogButtonType == Dialog.BUTTON_YES){
sendData();
}

}
}
public void sendData(){
String textData = textObject.getText();
OutputStream out;
// HttpConnection型のリソースはtry〜catchの中に記述しなければならない。
HttpConnection con = connectToServer();
try{
con.setRequestMethod(HttpConnection.POST);
con.setRequestProperty("Content-Type","text/plain");
out = con.openOutputStream();
OutputStreamWriter buffer = new OutputStreamWriter(out);
buffer.write(textData);
buffer.close();
out.close();
con.connect();
con.close();
} catch(IOException e){

}
}
public HttpConnection connectToServer(){
HttpConnection con;
OutputStream out;
con = null;
// HttpConnection型のリソースはtry〜catchの中に記述しなければならない。
try{
con = (HttpConnection)Connector.open(
"http://localhost:80/test/IAppliConnectionTest.php/",
Connector.READ_WRITE,
true
);
}
catch(IOException e){

}
return con;
}
}
}

HttpConnection型のリソースを扱う際はtry〜catchのなかに記述しないといけない。

サーバー側ソース:IAppliConnectionTest.php

<?php
mb_internal_encoding('SJIS');
$data = "";
$fileSource = fopen('php://input','r');
while(!feof($fileSource)){
$data .= fgetc($fileSource);
}

$to = "receiver@example.com";
$cc = "";
$bcc = "";
$sender = "sender@example";
$subject = "test";
$message = $data;
$header = "From: ".$sender;
mb_send_mail($to,$subject,$message,$header);
?>


今回はまった罠
iアプリからデータをPOSTで送信しているので、サーバ側では当初$_POSTでデータを受け取ろうとしていたが誤り。
参照:PHP入出力
| 開発ノート | comments(0) | trackbacks(0) | posted by スネ夫 -
java クラス メソッド フィールド 修飾子一覧 17:47


修飾子
iアプリを作ってみたくなってjavaをやり始めた。
修飾子があやふやなのでまとめる事にした。


修飾子一覧
public 全てのクラスから利用可能であることを示す。
protected このクラス内および、同じパッケージ内のクラス類から利用可能。
private このクラス内からのみ利用可能。
(なし) このクラス内および、同じパッケージにあるクラス類、更にこのクラスを継承したクラスからのみ利用可能。
abstract 抽象クラス、または抽象メソッドである事を示す。(クラス、メソッドのみの修飾子)
static このクラスのインスタンスを生成せずに直接利用可能であることを示す。
final 変更を禁ずる。
クラスに用いる修飾子
public 全てのクラスから利用可能であることを示す。
protected このクラス内および、同じパッケージ内のクラス類から利用可能。
private このクラス内からのみ利用可能。
(なし) このクラス内および、同じパッケージにあるクラス類、更にこのクラスを継承したクラスからのみ利用可能。
abstract 抽象クラスである事を示す。
static このクラスのインスタンスを生成せずに直接利用可能であることを示す。
final このクラスの継承を禁ずる。
メソッドに用いる修飾子
public 全てのクラスから利用可能であることを示す。
protected このクラス内および、同じパッケージ内のクラス類から利用可能。
private このクラス内からのみ利用可能。
(なし) protectedの範囲に加え更に、このメソッドのクラスを継承したサブクラスから利用可能。
abstract 抽象メソッドである事を示す。
static このクラスのインスタンスを生成せずに直接利用可能であることを示す。
final このメソッドのオーバーライドを禁ずる。
フィールドに用いる修飾子
public 全てのクラスから利用可能であることを示す。
protected このクラス内および、同じパッケージ内のクラス類からのみ利用可能。
private このクラスからのみ利用可能。
(なし) protectedの範囲に加え更に、このフィールドのクラスを継承したサブクラスから利用可能。
static このクラスのインスタンスを生成せずに直接利用可能であることを示す。
final このフィールドの変更を禁ずる。


抽象メソッドというのがいまいち。。。
抽象クラスとインターフェースの使い分けもいまいち、、、


JUGEMテーマ:WebProg


| 開発ノート | comments(0) | trackbacks(0) | posted by スネ夫 -
javascript 変数、関数のバッティング 21:07
今日は以前制作したスクリプトの修正を行なった。
リクエストされた物件の情報を表示、その情報の中には物件の位置情報もあり、それはGoogleMapで表示する。

ただ一件だけの情報を表示する際は何の不具合もなかった。
これが、二件以上の物件のレコードを表示しようとしたら、GoogleMapが最後の一件または最初の一件だけ表示されるという不具合が起きる事が分かった。

問題はtplファイルに直接javascriptのコードを記述している事にあった。
このtplファイルを表示する件数だけループしてdisplayしていたので結果的にMap表示用のdivのidも重複するし、もちろん変数名・関数名も重複した。
そこでこのテンプレートにそれぞれループの順番を変数として割り当て、その変数を
[変数名]_{ $var }
[関数名]_{ $var }
のような感じで末尾に付し、応急処置とした。

本来ならばtpljsとを分離させるべきだが、急げとのことでこのような分かりやすいやり方をとった。

JUGEMテーマ:WebProg
| 開発ノート | comments(0) | trackbacks(0) | posted by スネ夫 -
javascript IEでの 文字コードエラー 18:41
エラー
IEで表示を確認したところ、エラーが出た。
エラーメッセージには
'GMap'は作成されていません。
とでていた。
そんなあほな、ちゃんとインクルードしとるがな。
表示を確認する前にjavascriptは触っていなかった。
cssと関連するphptplファイルの文字コードを変えただけだった。
IE以外では正常に表示されている。
少し悩んで、あることを思い出した。
script要素にcharset属性があることを思い出した。
charset="utf-8"としたらバグは消えた。

JUGEMテーマ:WebProg

| 開発ノート | comments(0) | trackbacks(0) | posted by スネ夫 -
MySQL DB 文字コード 20:03
トップページなどに用いる記事の編集・管理ツールを作成していたところ、記事を挿入した際以下のエラーが出た。
Incorrect string value: 'XXX' for column 'YYY' at row 1
文字列'XXX'は列'YYY'の値にふさわしくない文字とのこと。
文字コードの問題というのはなんとなく解ったが、具体的にどう対処していいか分からなかったのでとりあえずIncorrect string valueでぐぐってみた。

色々と出てきたが、
alter database 〜DB名 character set utf8
このクエリを発行したら以下の様になった。

character_set_clientutf8
character_set_connectionutf8
character_set_databaseutf8
character_set_filesystembinary
character_set_resultsutf8
character_set_serverutf8
character_set_systemutf8

phpファイルの文字コードもutf8だし、これで問題解決と思いきやそうはいかなかった。
mysql_client_encoding()という関数で戻ってくる値がlatain1だった。
この関数はphpでMySQLに接続に使った、クライアントの文字コードを返すらしいので、どうやらphpの文字コードに問題があるようだった。

そこでphp.iniの以下の項目を

mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = Shift-JIS

から

mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
mbstring.http_output = Shift-JIS

へ変更するとinsertする事が出来た。

しかし、insertされたデータを見ると文字化けが起きていたので、
さらに

mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
mbstring.http_output = UTF-8

としたら文字化けは起こらなくなった。
JUGEMテーマ:WebProg
| 開発ノート | comments(0) | trackbacks(0) | posted by スネ夫 -
| 1/2 | >>