入力欄の追加に成功しても Ruby が処理できないなら意味がないよね!

2013年6月13日 0:54:39
この更新日を見ての通り、追加に成功してから数日経っているw
もー、うまくいかずだめかと思った。
でも、動いた。
独学である。うっひょー!
それでは、
「 Form の入力欄を追加し POST 送信されたものを商品コード順に並べ替えた上で CSV に書き込む一連の流れ 」
をどうぞ
ruby -v
ruby 2.0.0p195 (2013-05-14) [x64-mingw32]

#!C:/Ruby200-x64/bin/ruby.exe
# encoding: utf-8

print "Content-Type:text/html\r\n\r\n"

require "cgi"
require "csv"
cgi = CGI.new
code = 100
for i in 1..1500
	code += 1
	eval("No#{i}         = cgi.params['No#{i}']")
	eval("Code#{code}    = cgi.params['c#{code}']")
	eval("Syohin#{code}  = cgi.params['s#{code}']")
	eval("Nedan#{code}   = cgi.params['n#{code}']")
end
no = ""
addBango = cgi.params["addBango"]
ab   = addBango[0].to_i
for i in 1..ab
	eval("AddNo#{i}     = cgi.params['addt#{i}']")
	eval("AddCode#{i}   = cgi.params['addc#{i}']")
	eval("AddSyohin#{i} = cgi.params['adds#{i}']")
	eval("AddNedan#{i}  = cgi.params['addn#{i}']")
end
code = 100
for i in 1..1500
	code += 1
	if eval("Syohin#{code}[0] != ''")
		if eval("Syohin#{code}[0] != nil")
			eval ("no = Code#{code}[0]")
			eval ("Write#{no} = [] ")
			eval("Write#{no}.push(Code#{code}[0])")
			eval("Write#{no}.push(Syohin#{code}[0])")
			eval("Write#{no}.push(Nedan#{code}[0])")
		end
	end
end
no = ""
for i in 1..ab
	if eval("AddSyohin#{i}[0] != nil")
		if eval("AddSyohin#{i}[0] != '' ")
			eval ("no = AddCode#{i}[0]")
			eval ("Write#{no} = [] ")
			eval ("Write#{no}.push(AddCode#{i}[0])")
			eval ("Write#{no}.push(AddSyohin#{i}[0])")
			eval ("Write#{no}.push(AddNedan#{i}[0])")
		end
	end
end

cateList = ["ビール","サワー","梅酒","ソフトドリンク","ノンアルコール","日本酒","焼酎","マッコリ","ハイボール","ウイスキー","カクテル","お茶ハイ","ふんわり鏡月","オプション"]

for m in 1..14
	no    = 100 * m
	eval("Write#{no} = []")
	eval("Write#{no}.push('#{no}')")
	eval("Write#{no}.push('#{cateList[m-1]}')")
	eval("Write#{no}.push('値段')")
end

filename = "ItemList.csv"
filepath = "../htdocs/DB/#{filename}"
#ans = FileTest.exist?(filepath)
#print "#{ans}"

# CSVに書き込む(追記)する前に初期化します。
File.open(filepath, "w") { |file| file = nil }

for no in 100..1500
	begin
		if eval("Write#{no} != nil")
			CSV.open(filepath, "a") do |csv|
				eval("csv << Write#{no}")
			end
		end
	rescue
		next
	end
end
print 1


おれしかわからんだろうw
やっていることは、
eval を使って、cgi.params から値を取り出し、動的に連番が振られた変数に入れています。
しかし完成した今、cgi.params はhashだったかな、それでいけるらしいが。
独学だししょうがないね。
同様に通常の input とは別に追加された name=addt15 とかの項目を追加して作成された値も eval を使って取り出し、変数に入れます。

no = ""
code = 100
for i in 1..1500
	code += 1
	if eval("Syohin#{code}[0] != ''")
		if eval("Syohin#{code}[0] != nil")
			eval ("no = Code#{code}[0]")
			eval ("Write#{no} = [] ")
			eval("Write#{no}.push(Code#{code}[0])")
			eval("Write#{no}.push(Syohin#{code}[0])")
			eval("Write#{no}.push(Nedan#{code}[0])")
		end
	end
end

ここは、変数(Syohin#{数字}[0])が空白、 nil じゃない時、
入力された商品コードを 変数( no ) に入れます。事前に no = '' しとかないとだめ;;これで数日つぶした;;
んで、変数(Write#{no}) のように、Writeに商品コードを付与することで幸せになります。
あとは、変数(Write#{no}) に、各種項目を .push していきます。
同じように追加された項目も変数(Write#{no}) に、配列を入れていきます。

filename = "ItemList.csv"
filepath = "../htdocs/DB/#{filename}"
#ans = FileTest.exist?(filepath)
#print "#{ans}"

# CSVに書き込む(追記)する前に初期化します。
File.open(filepath, "w") { |file| file = nil }

for no in 100..1500
	begin
		if eval("Write#{no} != nil")
			CSV.open(filepath, "a") do |csv|
				eval("csv << Write#{no}")
			end
		end
	rescue
		next
	end
end
print 1

CSV に書き込んでいきます。
ファイル名、ファイルパスを決めます。コメントアウトの部分はファイルパスが正しいかどうか true or false が ans に格納されます。
ファイルを消さず、ファイルの中身を消しています。
次の for 文、 if 文
連番を使用してありもしない cgi.params を格納してきたので、nil じゃないものを書き込む必要があります。
あとはそのまんま。しかしこの書き込むコードも数日かかったなあー。
Write#{no}は 配列 じゃないとだめです。これがみそだったわ;;
当初、ただの文字列を << 追加していったのに一向に書き込みがされていない。
んでググりにググった結果、違いを見つけた!配列だった!["a","b","c"]
よく気づいた!よくやった!
nil じゃないものを1行ずつ書き込むので、"a"の追記モードです。
Write#{no}は商品コードですので、それを for 文で増やしていくので結果的に商品コード順の配列が書き込まれることになります。

javascript の DOM button click で table の中身に form の入力欄を追加することに成功した

2013年6月10日 14:47:16
既存の入力フォーム以外に1行ずつ項目を追加していきたい。
どうしていいものかわからなかったので、まず、テンプレからコピー作戦でいこうと思った。

しょうがないので 別ウィンドウ でサンプルを作ったぜフォー!

よって、1行追加するためのテンプレートを作成する。

<section class = "none">
<table>
	<tbody>
	<tr id="template">
		<td name="通し番号"><input type="text" value=""></td>
		<td><input type="text"  value=""></td>
		<td><input type="text"  value=""></td>
		<td><input type="text"  value=""></td>
		<td><input type="text"  value=""></td>
		<td><input type="text"  value=""></td>
		<td><input type="text"  value=""></td>
		<td><input type="text"  value=""></td>
		<td><input type="text"  value=""></td>
		<td><input type="text"  value=""></td>
	</tr>
	</tbody>
</table>
<//section>


上記が1行で追加されるテンプレ。
section class = none は、display: none; にしてテンプレを表示しない設定にしています。
name = 通し番号 は通し番号を振っているので数を数える。
表示しないなら tr から記述してもいいのではと思うが、 table から記述しないと table に属していないとみなされ id を取得できない。
で、その後、ボタンをクリックしたときにテンプレを最後に追加するように javascript する。

function addInputbox ( n ) {
	var tooshiBangoLen = document.getElementsByName("通し番号").length;
//	alert(tooshiBangoLen);
	var templateTr = document.getElementById("template");
//	alert(templateTr);
	var addTableTr = templateTr.cloneNode(true);
	var idName = "tabletest";
	var tableId = document.getElementById(idName);
	var newaddTR =  tableId.appendChild(addTableTr);
}

通し番号は +1 して代入したいところだが、実はテンプレート自体も name = 通し番号 の名前が付いているので+1する必要はない。正しい数はむしろ-1
var addTableTr = templateTr.cloneNode(true);
templateTr をコピーします。(true)は、子もコピーするかしないか。trueする falseしない。
var tableId = document.getElementById(idName);
var newaddTR =  tableId.appendChild(addTableTr);
既存の table の tbody に id=tabletest を設定しています。
table id=tabletest ではなく tbody id=tabletest に設定するのがポイント
tbodyの最後に、appendChild(コピーしたオブジェクト)を挿入。

しかしこれだけではただ、入力フォームが追加されただけで、POST送信できない。
さらに属性を設定していかなかいと意味がない
appendChild ~の次の行に追加する

var tableId = document.getElementById(idName);
var newaddTR =  tableId.appendChild(addTableTr);
// 1列目 通し番号
newaddTR.childNodes[1].childNodes[0].name = "addt" + tooshiBangoLen;
newaddTR.childNodes[1].childNodes[0].value = toBanLen;
// 2列目 商品コード
newaddTR.childNodes[3].childNodes[0].name = "addc" + tooshiBangoLen;
newaddTR.childNodes[3].childNodes[0].value = "";
// 3列目 商品名
newaddTR.childNodes[5].childNodes[0].name = "adds" + tooshiBangoLen;
newaddTR.childNodes[5].childNodes[0].value = "";
	※以下略
newaddTR は新しく追加されたオブジェクト。
childNodes[x] は順番に子供に番号が振られている
td とか
で、いろいろ

alert(newaddTR.childNodes[0].tagName)
とかやったりして、tdがどの数字になっているのか割り出した。
すると奇数、1、3、5が Table の TD を指しているのがわかる。
そこでさらに

alert(newaddTR.childNodes[1].childNodes[0].tagName)
これで 新しく追加されたオブジェクトの [1] の [0] が input であることがわかった。
あとは簡単。.name = で POST 用に名前を付ける。
.value = には連番振っているので toBanLen

ruby CGI の GET で送った値を利用する。ファイルのコピー貼り付けをやったぜ

2013年6月5日 21:47:53

#!C:/Ruby200-x64/bin/ruby.exe
# encoding: utf-8

print "Content-Type:text/html\r\n\r\n"

require "cgi"
require "csv"
require "FileUtils"
cgi = CGI.new
t   = Time.now
tY  = t.year
tM  = t.month
tD  = t.day
tH  = t.hour
tm  = t.min
tNo    = cgi.params["tNo"]
toriNo = cgi.params["toriNo"]
tM     = "%02d" % tM  if tM  < 10
tD     = "%02d" % tD  if tD  < 10
tH     = "%02d" % tH  if tH  < 10
tm     = "%02d" % tm  if tm  < 10
DateName    = "#{tY}#{tM}#{tD}"
TimeName    = "#{tH}#{tm}"
LogFileName = "#{tNo[0]}_#{toriNo[0]}"
cPath = "../htdocs/T1/temp-UriageTable#{tNo[0]}.csv";
pDir  = "../htdocs/tempLog/#{DateName}"
FileUtils.mkdir_p(pDir)
dirf = "#{pDir}/tempLog#{LogFileName}_#{TimeName}.csv"
FileUtils.copy( cPath , dirf )
if FileTest.exist?(dirf)
	print 1
else
	print 2
end


#!C:/Ruby200-x64/bin/ruby.exe
# encoding: utf-8

print "Content-Type:text/html\r\n\r\n"

require "cgi"
require "csv"
require "FileUtils"

ruby の初期設定
今回は CSV をいじるわけではないので csv はいらない。
ファイルのコピペは FileUtils が必要。

t   = Time.now
tY  = t.year

t に日付と時間が代入される。上記の通り各種メソッッドで数値として代入される。

cgi    = CGI.new
tNo    = cgi.params["tNo"]
toriNo = cgi.params["toriNo"]

params で GET の値をゲットできる。
送付方法は test.rb?send=2&okuru=1
cgi.params["send"] ==> 2
cgi.params["okuru"] ==> 1
となる。
あ、そうだ、ちがうわwwwwwwwwww
配列です。
send = cgi.params["send"]
send = ["2"]
send[0] = 2
こうなります。配列から取り出す必要があるようだ。
なんでいかないのかと思ったら配列でしたわ。

FileUtils.mkdir_p(pDir)
FileUtils.copy( cPath , dirf )
if FileTest.exist?(dirf)
	print 1
else
	print 2
end

FileUtils.mkdir_p( 記載されているパスのディレクトリを全て作成します。 )
FileUtils.copy ( コピー元の path , コピー先の path )
いろいろやってるのは、日付のフォルダを作って、ファイル名を時間によってきめてるだけです。
コピーが成功したら true されるのかと思って print 1 if FileUtils.copy( cPath , dirf ) ってやったんだけど
print 1 は実行されなかったので、コピー先が存在するかどうかの if文 でやってみました。
というか エラー として別に値が飛ぶのかしら。まー、コピーミスとかまずないので、これでおk。
あとは、前回の 「cgi を ruby にして ajax? の DOM みたいな感じ」記事をご覧いただきたい。

PHP の csv ファイルの中身を消す(0にする)

2013年6月5日 16:11:26
ファイルそのものを消すわけじゃない。
ファイルの中身を消す。

setlocale(LC_ALL,'ja_JP.UTF-8');
$dir    = "temp.csv";
$handle = fopen( $dir , "w+" );
ftruncate( $handle, 0 );
fclose( $handle );

青森県民が誇る工藤パンの「イギリストースト」

2013年6月3日 22:26:19
なぜか無性にこのパンが食いたくなる。
ふとパンコーナーに立ち寄ったらチョコクリームバージョンが出てた。
工藤パン イギリストースト チョコクリーム
おもわず手に取ってしまった。
味は想像通りの変化球なし。
だが、ノーマルのこのパンは相変わらずの至高の味。
工藤パン イギリストースト
なんなんだろうな、この絶妙のバランス。
おやつになるし、昼飯には食えるし。
画像はあえてでっかくしてやった

CGI で使うために Ruby をいじり中。 CSV を読めたのでメモ。

2013年5月30日 2:22:19
test.csv

17:00,40,ビール中ジョッキ,2
17:05,40,カシスオレンジ,2

CSVtest.rb

#!C:/Ruby200-x64/bin/ruby.exe
# encoding: utf-8

print "Content-Type:text/html\r\n\r\n"

require "cgi"
require "csv"
cgi = CGI.new
cp  = cgi.params["tesutesu"]
dirf = "test.csv"
x = 0
OrderTime  = Array.new
TorihikiNo = Array.new
Syouhinmei = Array.new
Suuryou    = Array.new
CSV.foreach(dirf) do |row|
	OrderTime[x]  = row[0]
	TorihikiNo[x] = row[1]
	Syouhinmei[x] = row[2]
	Suuryou[x]    = row[3]
	x += 1
end
print OrderTime[0] + TorihikiNo[0] + Syouhinmei[0] + Suuryou[0] + "\n"
print OrderTime[1] + TorihikiNo[1] + Syouhinmei[1] + Suuryou[1]


require "cgi"
require "csv"

CSV には require "csv" が必要。

cgi = CGI.new
cp  = cgi.params["tesutesu"]

GET で送られてきた tesutesu の値で CSV をなんやかんやするには params["tesutesu"] でなんやかんや。

dirf = "test.csv"
CSV.foreach(dirf) do |row|

これで1行ずつ読む。
1行を row に入れる。

OrderTime  = Array.new
TorihikiNo = Array.new
Syouhinmei = Array.new
Suuryou    = Array.new
OrderTime[x]  = row[0]
TorihikiNo[x] = row[1]
Syouhinmei[x] = row[2]
Suuryou[x]    = row[3]

今回の場合配列にした。
row には配列として代入される
あ、さりげなく ruby のバージョンは 2.0.0 にしちゃいました。
ruby -v
ruby 2.0.0p195 (2013-05-14) [x64-mingw32]

先月の VirtuMVP の件でやっぱりどうも終わった

2013年5月28日 23:01:49
ASUS P8H67-V に VirtuMVP を導入して早一ヶ月経ちました。
ライセンスが切れました。
もうあの速さは戻ってこない・・・
VirtuMVP を使用しないで爆速を得られる方法はないものか。
やっぱりマザーボードを変えるしかないんでしょうね…。

cgi を ruby にして ajax? の DOM みたいな感じ

2013年5月23日 23:32:08
apache2 ちゃんに cgi(.rb) をできるようにしておく(これもメモにしようと思ったけどどう httpd.conf したかわからない・・・)。
(a href="javascript:ajaxruby();")ここをクリック(/a)して cgi(.rb) に飛ばし、データが返ってきたらテキストを変える
ということをやってみたので、そのメモです。

まず test.rb を apache2 の cgi 設定フォルダ (cgi-bin/) の中に保存する。
test.rb

#!C:/Ruby193/bin/ruby.exe
# encoding: utf-8

print "Content-Type:text/html\r\n\r\n"

require "cgi"
cgi = CGI.new
cp  = cgi.params["x"]
print cp

最初の1行目は ruby 本体のファイルパス。 path を通してれば ruby だけでいいはず。(ググってチラ見なので詳しい記述はわかりませんw)
2行目 test.rb の文字コード

print "Content-Type:text/html\r\n\r\n"

に関しては、http://d.hatena.ne.jp/tilfin/20080118/1200653984さんのブログより。
ruby の cgi の情報が少なすぎてやっと辿り着いたのがココでした。ありがとうございます!動きました!

cp  = cgi.params["x"]

この1行にどんだけ時間費やしたことかwwwwwwwwwwww
最初はよくわからんまま、POST で送信してたんだ。POST ってかっこいいじゃん?
しかし html の a href で javascript で飛ばすんだから、 name=" " ってどうすればいいのかわからないので、
params[" "] ←ここがどうもわからなかった。
数時間、いや数日かかっただろうな。自力ですからwプログラミングなど独学の知識。経験も何もない。
そこで GET にしてみよう!と、よく気づいたよw
cp という変数に GET で送られてきた値を入れている
そして最後に print でいいのか知らんが値を返却できたので、 print cp

以下のコードはhttp://allabout.co.jp/gm/gc/24097/#2を少し改良。
test.php の中の javascript

function requestTest ( data , method , async ) {
	var rq   = new XMLHttpRequest();
	var filename = "test.rb";
	if ( method == "GET" ) URI = "../cgi-bin/" + filename + "?x=" + data;
	rq.open ( method , URI , async );
	rq.onreadystatechange = function() {
		if ( rq.readyState == 4 ) {
			on_loaded ( rq );
		}
	}
	if ( method == "GET" ) data = null;
	rq.send ( data );
}
function on_loaded( rqobj ) {
	res = rqobj.responseText;
	alert ( res );
}

rq で XMLHttpRequest オブジェクト作成
filename に cgi ファイルの名前
if ( method 略 は、最初POSTでやってたんで、付け加えました。この状態でPOSTで送ると、URI 変数が GET のみに生成されているのでエラーになります。
+ "?x=" + data; これで、cgi に、x=data を送っています。
URI = cgi-bin/test.rb?x=data; の状態になっています。

rq.open ( method , URI , async );

open は 初期化。この3つでおk。
method は "POST" か "GET"
URI はそのまんま 送信先。ここもうまくいかず悩みました。このtest.php からみた相対パスです。※実際のファイルパスじゃなく、WEB上でのパス。この場合、1個上のフォルダのcgi-bin/test.rb 。
async は非同期とうい訳。 true か false 。この場合は true です。
rq.onreadystatechange はサーバーとの通信状態が変化したら、onreadystatechangeが呼び出されます。
コピペなのでこの辺はようわからんwwwww。

if ( method == "GET" ) data = null;
rq.send ( data );

これは、GET である場合、deta は null にしないといけません。
data を送信します。


if ( rq.readyState == 4 ) {
	on_loaded ( rq );
}
function on_loaded( rqobj ) {
	res = rqobj.responseText;
	alert ( res );
}

readyState は
0 未初期化
1 読み込み中
2 読み込み済み
3 処理中
4 完了
4 であるとき on_loaded ( rq ) を実行、オブジェクトを渡す。
res = rqobj.responseText テキストデータとして res に渡す。
値を受け取ることができたので、
これを利用して DOM をすればおっけえええい。
すっげええええ日数かかった。まずルビーで死んだ。その後、どうやったらデータを受け取れるのかわからなかった。
ググって出てきてよかった;;ありがとうv
test.php の中の a href による javascript 呼び出し

	<a href="javascript:requestTest('test', 'GET' , true );">ここをクリックしてね!</a>

ブロックをリンクした時の firefox の範囲がおかしいので解決してみた件

2013年5月14日 2:05:18
前の記事を書いたあと、すぐに解決したんだがここにのっけてなかった。
それは <div class="w600px"> <a> <div class="box w600px"> </div> </a> </div> のように、
ブロックをリンクしたすぐ外側にブロックと同じ大きさで囲むと範囲が正しくなります。
親要素の描画範囲になるなら親の描画範囲を小さくしてやるだけのことです!。
text-align:center; をさせたいなら margin:auto; も忘れずに。

前回の firefox だと範囲がおかしいよねの実験
しょうがないからここに例を出そう div class=blocka-A
処置を施すとこんな感じ
しょうがないからここに例を出そう div class=blocka-A

php 配列の数をカウントする
$_POST の配列の数とか $_POST["x"] の中身が存在するのかとか

2013年5月9日 14:48:41
javascript で動的に form で送る数が変わる場合、
送った先の for文で取り出す場合に、何回繰り返せばいいのかわからないので、 count を使うことにした。
今回はそのメモです。

setlocale(LC_ALL,'ja_JP.UTF-8');
$cnt     = count ( $_POST ) / 2 + 1;
for ( $i = 1 ; $i < $cnt ; $i++ ) {
	${"line".$i}  =  $_POST["line".$i];
	${"suu".$i}   =  $_POST["suu".$i];
	if ( strcmp ( $_POST["line".$i], "" ) ) {
		echo ${"line".$i} . "    " .  ${"suu".$i} . "
\n"; } }
count() / 2 + 1 は、今回の場合2種類あるので÷2、for文用に+1しないといけない。
もし、何種類あるかもわからない場合は、連想配列だったかなーそれを使うといいとかかググったきがする
それなら送るときに種類の数を $_POST["syurui"] で数字を送ってもらった方が早いキガス。
あと、動的な変数の記述で勉強になった。
$line1 と連番とか数字を付ける場合は ${ "この文字と". $i . "ではさむ" }のように (結果→$この文字1ではさむ)
{}の中で文字と、変数をつなげることができる。
これは知ってたので$_POST[{ "あ" }] にやろうとしたらできなかった。
上記のように $_POST[ "あ" . $i }] でよかった { } はいらないみたい。
これで小一時間悩んだwなんでー?wていうw
あと大事なのがもう1個
$_POST["anything"] の中身があるのかどうかという if文。
issetだと入っていようが入ってまいが true を返すという。
そこでググると 最初の文字と 次の文字を比較して <0 >0 =0を返すという。
つまり中身が空白の0と同じ場合 0 = false
1文字でも入っていた場合 >0 = true (0ではない)

javascript でdiv の子、 div タグを追加してさらに class とか追加しちゃう件

2013年5月9日 1:19:39
メモメモ
下記のコードは、確実に俺しかわからんだろうが、やってることは、
引数xは行数
x行目の値をn値に変更した履歴を、Gx というidを付ける。
別の div MejirushiG と div MejirushiS に書き込んでいるような状況
追加した div に名前をつけ ( addG ) そこに setAttribute() に クラスとスタイルシート名をぶっこむ。

function addDiv(x,n) {
// 連番で id 登録してるので
	Gstr  = "G" + x;
	Sstr  = "S" + x;
	var FindId = document.getElementById(Gstr);
	if ( FindId == null ) {
		// 複数回編集されるので null (id未作成)の場合、こちらを実行
		var divG    = document.createElement("div");
		var divS    = document.createElement("div");
		var idGyou  = document.getElementById("MejirushiG");
		var idSuu   = document.getElementById("MejirushiS");
		divG.id     = Gstr;
		divS.id     = Sstr;
		var addG    = idGyou.appendChild(divG); // つづり間違えてるの気付かず、どんだけ時間つぶしたことかwwwwwww
		var addS    = idGyou.appendChild(divS);
		FindId.innerHTML                        = x;
		document.getElementById(Sstr).innerHTML = n;
		addG.setAttribute("class","InlineBox box wpx40");
		addS.setAttribute("class","InlineBox box wpx40");
	} else {
	// すでに id 発行済みの場合はこちら
		document.getElementById(Sstr).innerHTML = n;
	}
}

この機能は、スタンダード 権限を持つアプリケーションからのみ利用できます。

2013年5月7日 3:49:35
なんだよこれええええ
単語登録したいと思いちょろっと IME いじったらこんなん出てきた!
プロパティも開けねえ!
ググると、 IE のセキュリティタブのチェックボックスを外すとあるが、はずしても駄目だった。
もう少し調べると、辞書の位置を変更するといいというもの。
変更してやったぜ!
バッチリ動いたぜ!
変更して解決すんなら根本的なセキュリティの解決になってない気がすんだが。

ブロックをリンクにしたときの firefox の範囲がおかしい・・・よね?

2013年5月5日 2:45:00
HTML5 になってぶっとぶぐらい「おーっ」となったのがブロック要素を a で囲むことができるようになったこと。
さっそく使っているわけだが、どうもわからんのが一つ。
まず画像を見てほしい。

わかりづらいと思うけどw説明しよう
表示されている画像は左側半分。右側にはこれと同じものが左右反転のようになる。
で、 div の入れ子で、最後の div に a /a で囲んでブロックのリンクとしている。
まず朱色っぽい色(#FF8072)が大枠の DIV padding を上下左右に指定中。
次に背景が白(#FFFFFF)そして width:100%; padding: 2%; を指定。
そして問題のボタン(div) は左側しか映っていない。
margin: auto; width: 400px; で真中寄せにしている状況。
スタイルシートは、
a:hover > div[class~="buttonSelect"] {
しかし、a div /div /a のように囲んでいるにもかかわらず、
上記画像の黒い線の中からボタンがリンクの範囲となっているのだ。
クシャクシャとしたのがマウスの位置だと思っていい。プリスクだとマウスが撮れないw

firefox と IE とでクリックできる範囲はどうですか?
しょうがないからここに例を出そう div class=blocka-A
firefox と ie とで範囲が違うんだが俺だけなんかな

この状態で、「んじゃ IE はどうなのか」と思ってやったらびっくらこいた。
ちゃんとした div のみの範囲で選択された。

これが全体像。マウスが映らないのが残念だが、ちゃんと角が丸い( border-radius )div 上が選択範囲となっている。
firefox の場合、親 BOX の padding からリンクがスタートしているようになってるんだよなああ。
で、どうするかというと強引に div class = "sutairusi-to" onclick="tobe();" のように onclick で処理するというw
リンクじゃなくなるので、 sutairusi-to:hover のみの指定でよくなる。
もしかしてスタイルシートの記述がおかしいのかな~?
おかしいならなぜ IE はちゃんと動作するのか
ま、いいやww

MPC-HC x64 でせっかく買った DVD の字幕が表示されない。の原因がわかった。

2013年4月29日 0:23:16
長年 Media Player Classic を愛用してきた。
今のパソコンの前のパソコンからだ。結構長い。
長いこと古いままのものを使用していたので、ふとバージョンがどうなってるのか気になって久しぶりにバージョンアップをした。
そのせいなのかどうかわからないが、買った DVD を再生すると字幕スーパーが表示されなかった。
今までどうだったのかというと普通に表示されていた。
「 何かをしたからだ 」を考えても、やったことと言えばバージョンアップぐらいだ。
しかしバージョンアップぐらいで字幕が出なくなるもんなのか。
その前に設定もいじった記憶がある。
「 MPC-HC 字幕表示されない 」でググっても書いてるのはみんな
「 操作 > 字幕の言語 > 有効にする 」ばかり。
なってるんです;;;;
他には、
「 他のプレイヤーで再生されないようであれば、字幕ファイルが壊れている可能性があります 」
買ったやつが壊れてるわけないでしょう;;;
ウィンドウズメディアプレイヤーではバッチリ再生されたし!
他のプレイヤーで再生されたってことはやっぱMPCの設定しかない。
そこでググってはオプションググってはオプションを行き来し、
English の英語発音カッコイイ思いながら作業してました。

で、わからず一度はあきらめ、 WMP で再生してたんです。

しかし今回、設定を見つけました。
OK ボタンのすぐ上の * を見てほしい

「 外部フィルタ(例えば DirectVobSub)は、すべてのレンダラーに字幕を表示させます。 」
と書いてる!

バージョン: 1.6.5.6336 (744df1c)
(バージョンによって表記がないと思うので一応使っているバージョンの画像貼っときます。)
で早速、外部フィルターの項目へ

あった。あるわ。
そして再生するとバッチリ再生された。キタコレ。
っていうメモでした。いるかわからんけど同じ境遇の方へのメモです。

先日の VirtuMVP の件でやっぱりどうもダメだ

2013年4月28日 1:35:28
3連投になってしまった。
今回は前回までの疑問点を試してみた(試してない)
「 非ライセンスだからアプリを登録できない 」
違いました。
→パソコンを再起動したら登録されていました。
で、D-mode I-mode のどちらも試してみたが爆速は得られなかった。
設定を変えるには edit なんだが aviutl を選択できない。なんじゃこりゃ。
なんかしたら aviutl の値 ( D <=> I ) を変更できたんだよな、再現不能。
設定も再起動しないと反映されないようだ。
しかももう一つ思ったが、 aviutl.exe もそうだが x264.exe もじゃね?と思って追加したがダメだった。
俺はもうダメだ。諦めた。
「 もしかして VirtuMVP なくても QSV出力 ができるんじゃないか 」
VirtuMVP アンインストールしてやってないのでわからん。
が動作環境にVirtuが書いてないから必要ない?
「 QSVencちゃんの画質 」
エンコのプロじゃないので、ググった値をそのまま入力している人間なのでどうもわからん。
しかし、今回ちょっといいっぽい設定にしたらなんかいい感じだった。
てことで H67 でグラボ刺してますが QSVEnc ちゃんでいきます!
この速さはやっぱり抜け出せないです;;

先日の VirtuMVP の件でやっぱりどうも気になる。

2013年4月27日 14:41:49
アンインストールして長時間モードで我慢している中、気になったことがあった。
なんで「 ゲームプログラム exe 」を登録しただけで効果が発揮するのに、aviutlはQSV出力プラグインを通さないといけないのか。
詳しくないのでわからんが、一つ考えたのが
「 もしかして aviutl というプログラムを登録すれば自動的に使われるんじゃないか 」
「 もしかして VirtuMVPインスコしなくてもディスプレイアダプタに登録されている状態なら Virtu 使わずに QSV出力ができるんじゃないか 」
と思ったわけです。

そこでもう一度インストールw
アプリケーションの登録で一つ気づいた。
aviutl がリストにない。1行1行探したが出てこない。
さらにもう一つ気づいた
About タブの License Status が License Not Activated - 30 days left
非ライセンスの試用期間中だった。
こ、これは非ライセンスだから「アプリを登録できるけど反映されない」のか?!
絶対そうだわ・・・

ググると、この会社がマザーボードと正式なライセンスを認証させたマザーボードであればOKらしい
それ以外のマザボ、H67は非ライセンス 試用なわけだ。

そこで一つ疑問が。
じゃあ、なぜ aviutl の QSV エンコが使用できたのか?
もしかして Virtu たんいらない子なんじゃね・・・ま、まさか・・・。
てことで今回はいろいろ設定しなおしてエンコまでする時間がないので、
アプリ登録後 Virtu を再起動もしていないし。もしかしたら再起動で登録されてるかも知れん。

後日報告。

ASUS P8H67-V i7-2600k にグラボ。んで Virtu MVP そして aviutl の QSV

2013年4月27日 0:30:11
タイトルに内容をぎゅーって詰め込んだ。
このパソコンにしてグラボを刺すことなく生活してきた。
というか刺さなくても 2600k パワーで十分だった。
激しい 3Dゲーム をすることなかったのでぜんっぜん必要なかった。

ところが今年、あの伝説のシムシティが発売するじゃないか。
そこで思い切って買ってしまった。型番は言わないw
なんかイロイロおかしいゲームだけどまーよい。シムシテーの話じゃない。

エンコの話だ。
グラボに変えてから気づいた エンコ時間がくそおせえ。
びっくりするぐらい遅い。
ついにintelちゃんが壊れたかと思った。
が、脳裏をよぎったのが CPU のアレを使ってないんじゃないか
intelちゃんのハードウェア アクセラレータとやらを!

ぐぐったらやっぱりそうだった。
その辺の説明はその手のサイトの方が詳しいので略。

結論から言うと可能だった。成功した。がしかし、駄菓子菓子・・・。は後述。

※自分はグラボ→HDMI→ディスプレイの状態。

まず手順
  1. delete で BIOS を起動。
  2. アドバンスモードへ。
  3. なんだっけ「 詳細 」かな 項目に 「 ノースブリッジ 」ってやつ
  4. その中に 「Initiate Graphic Adapter」「iGPU Multi-Monitor」ってのがある
  5. 「Initiate Graphic Adapter」は関係ないと思うんだけど一応設定した。 値は、【 PEG/ IGD 】
    意味は PciExpressのGraphicsとInternalGraphicsDevice ようわからん。
  6. 「iGPU Multi-Monitor」を有効にする
  7. 保存して退出し Windowsちゃんを起動
  8. そうすると「 デバイスマネージャー 」の「 ディスプレイアダプター 」が2つになる(はず)
  9. VirtuMVP を公式からダウンしてインスコ
  10. VirtuMVP を起動して application にaviutlを追加する
  11. aviutl 用のプラグイン QSVEnc をダウンロードし ReadMeをよく読んでインスコ
  12. aviutl のプラグイン出力に表示されればおk!
  13. これでおk
出力すると、早い。なつかしいぞこの感じ。
が、再生してびっくりした。
画質がよろしくないようです。(もう消しちゃったので気のせいだったのかも?・・・。)
ビットレートの指定できるので1500kbpsに指定。
いつも1500なのに明らかにちょっと1500じゃない(気がする)。
設定がおかしいのかな・・・
いつもやる拡張h264出力より設定の項目数も少ないし(だからと言って使いこなせないがw)
で・・・アンインスコして・・・戻しちゃいました・・・。
ってことなので、超おっそい状態でエンコしてます。

CSS3ベンダープレフィックスについて

2013年4月27日 0:03:12
box-sizing のつながりとしてメモ。
現在表示されているページは -moz-box-sizing: border-box; と指定しているので、
firefox 以外のブラウザで表示させた場合に box-sizing がうまく反映されていません。
-moz- の他のブラウザ用の記述のメモ
ひっさびさに table 使ったわw
ブラウザベンダープレフィックス
Firefox-moz-
Internet Explorer-ms-
Opera-o-
Google Chrome
Safari
Android 標準
-webkit-

div {
	-moz-box-sizing:	border-box;
	-ms-box-sizing:		border-box;
	-o-box-sizing:		border-box;
	-webkit-box-sizign:	border-box;
}

box-sizing のメモ

2013年4月25日 19:59:01
もう width と padding の値でぐぬぬぬしてて、毎回そのたびになんだっけ・・・とぐぐってたので、
メモります。

.tesutesu {
	width: 300px;
	padding: 15px;

	-moz-box-sizing: border-box;
}

-moz-box-sizing: border-box;
はボーダーを含んでwidthの指定サイズ
-moz-box-sizing: content-box;
は通常通り
-moz-はベンダープレフィックス。各ブラウザ別に記述するためのもの
上記の場合だと firefox のみに反映される

php で csv を読み書きのメモ 【どんどん追記】

2013年4月25日 23:20:40
読み書きが多いのでメモ。
ファイルパス中に $hensu を使っても問題ない。
下記の上段の場合、1行ごとに各列名の配列に入れちゃうパターン。
下段は、1行のみのcsvの場合の上書き方式。


<?php
	setlocale(LC_ALL,'ja_JP.UTF-8');
	$dir = "ファイルパス.csv";
	$handle = fopen( $dir , "r" );
	$p = 0;
	while( $data = fgetcsv ( $handle, 1000, "," ) ) {
		$Aretu[$p] = $data[0];
		$Bretu[$p] = $data[1];
		$Cretu[$p] = $data[2];
		$Dretu[$p] = $data[3];
		$p++;
	}
	fclose( $handle );
?>
<?php
	setlocale(LC_ALL,'ja_JP.UTF-8');
	$No00 = sprintf("%02d", $tableNo );
	$dir = "../ファイルパス/$No00.csv";
	$handle = fopen( $dir , "w+" );
	
	fputcsv( $handle, Array( $A, $B, $C ) );
	fclose( $handle );
?>

while文 で1行ずつ書き出していくパターン

<?php
	$dir = "ファイルパス.csv";
	$handle = fopen( $dir , "r" );
	while( $data = fgetcsv ( $handle, 1000, "," ) ) {
		$a = $data[0];
		$b = $data[1];
		$c = $data[2];
		$d = $data[3];
		
		echo "<div>";
		echo "$a ";
		echo "$b ";
		echo "$c ";
		echo "$d<Br>";
		echo "</div>";
	}
	fclose( $handle );
?>


javascriptを使わず、CSSだけで「マウスクリックでDIV表示/非表示」が可能となる。

2013年4月24日 19:52:10
javascriptを使わず、CSSだけでは不可能だと思っていたが、なんとできるようだ。
ぐぐってびびった。すごいと思います!
こちらのサイトをご覧いただきたい。http://coliss.com/articles/build-websites/operation/css/css-tutorial-timed-notifications-with-css-animations-by-codrops.html
なんと実現している。
くわーしく見てみると、クリックした判定はチェックボックスで行っている。

このボタン(div "button")を押すと、(div "warosu")が出現します。
div class = "warosu" が出現しました。
すごいと思います!
もう一度クリックすると、div class = "warosu" が display: none; になります。

簡単に説明すると、
ぶったまげたぜ!すごいと思います!
※スタイルシートの記述は ( .cssbutton {} ) の125行目から167行目まで
開いてみてね! blog.css

divを横に並べる、css

2013年4月24日 18:57:28
忘れないようにメモ。
以下のコードは、横に並べたいdivにcssを適用する。
2つ並べたいときはその2つのdivに適用する。

<div>
	<div class = "inlinebox bCr2 bgCr2">1つ目のBOX</div>
	<div class = "inlinebox bCr3 bgCr3">2つ目のBOX</div>
</div>

こんな風にコレだけを記述しとけば、複数に適用できる。

inlinebox{
	display: -moz-inline-box;
	display: inline-block;
	/display: inline;
	/zoom: 1;
	vertical-align: top;
}

よく使うお気に入りカラーコード

2013年4月24日 18:26:05
よくお邪魔するサイト: http://www5.plala.or.jp/vaio0630/hp/c_code.htm
#fa8072
#ffa07a
#ffe4e1