プログラマメモ2 - programmer no memo2

FLASH - 今週の調べたこととか 2011/02/26

今週いろいろflash(actionscript3)関連で調べていたので、ちょっとメモ
専門用語が整理できてないので、わかりずらいけど。

  • コンストラクタはひとつしか書けないぽい。
  • addChildするのにaddChildAtというのがあって追加する位置(レイヤー?)を指定できる。これがあると背景、置きたいもの、前景という配置が自由にできる。
  • イベント設定はaddEventListenerで、このjavaのswingとかさわってたからすんなり理解できる。で、無名関数が使えるのがいい感じ。
  • ボタン上にオブジェクトを配置して、スクリプト上からアクセスできないっぽい。ボタンは使いたかったのは、たんに押されるという処理が簡単かなと思っただけなので、支障はないけど。
  • enterFrameというイベントの受けを設定するとフレーム単位での呼び出される。
  • flash上で作成したライブラリのリンケージ名とスクリプト側でのクラス名をあわせると、実行時に同じようにあつかってくれるぽい。なので、定義したクラスからデザインしたオブジェクトにアクセスできる。この辺の流れは別にまとめておきたいな。

Flash - ボタン上のダイナミックテキストにはどうやらアクセスできないようだ。 2011/02/20



ボタン上のダイナミックテキストにはどうやらアクセスできないようだ。
これに気がつかず、ずーと、いろいろためしていた。。。。
とりあえずSimpleButtonからMovieClipに変更してなんかできたような気がする。

jsoup html parser  - スープ? 2011/02/19
2011/02/20


年に一度は弄びたくなるhtml parserです。

なかなか決め手がなかったのですが、jsoupよさげです。
Jquery風のapiなのできっと便利なのでしょう。

というわけで使ってみます。
下記のようなHTMLがあります。
preタグのテキストだけとりだしたいわけです。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=shift_jis">
<title></title>
</head>
<body>
<pre>
<b>SEGMENT SPACE MANAGEMENT</b> { <b>AUTO</b> | <b>MANUAL</b> }
</pre>
</body>
</html>


そしてコードです。
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class TestHtmlParser {

public static void main(String[] args) throws IOException, URISyntaxException {
a();
}

static void a() throws IOException, URISyntaxException{

File file = new File(TestHtmlParser.class.getResource("doc-files/segment_management_clause.htm").toURI());
Document doc = Jsoup.parse(file, "Shift_JIS");

Elements tags = doc.getElementsByTag("pre");
Element tag = tags.get(0);
System.out.println(tag.text());
}

}


結果はこんな感じ
SEGMENT SPACE MANAGEMENT { AUTO | MANUAL }

楽観ハイタ 2011/02/19

DBの楽観排他(ロック)の方法についてです。
まず「楽観的ロックとは」、ですが、とりあえず、がちがちにロックしないという感じでしょうか。
「先に更新したもの勝ち」ぐらいの理解でいいのかな。対称となる悲観的ロックは、ロックとってる間は誰もさわらせないぜぐらいの理解でよろしいか。

で、つぎに、どう実現するのか。
排他したいテーブルに楽観排他用の列を追加します。
考え方は単純に、自分が更新しようとする対象行が、更新するその瞬間に同一であることが保証できればよいわけです。
変更するまえと変更するその瞬間に楽観排他用列が変更されてないことを確認したのち、更新をかけます。
SQLならwhereで同一であることをチェックしつつ、楽観排他用列もちがう値で更新します。

楽観排他列を数値にして、更新するさいにインクリメントするというのが常道っぽいです。で、この楽観排他のための列に時間表現の型を使うってのもある。

vmware fusion(Mac版)にFreeBSD-1.0-RELEASEを入れたいのだけど 2011/02/14

数年前からの野望としてVMWare上にFreeBSDを入れて最新版までアップグレードして育て上げるという野望があるのだけども、どうしてもFreeBSD-1.0-RELEASEを入れる方法がわからない...

僕がBSDさわったのは21世紀になる境目ぐらいなのだけれども、黒い悪魔のあのかわいらしい姿にそそのかされて書籍についていたリリースの2は何度もインストールしたのはおぼえている。あの頃はインストールすることが楽しかったわけだ。

で、古いmacを中古で買ってきて、NetBDをインストールしたりしして楽しんだりしたなー。ペンギンにはどうも萌えることができず、Linuxをインストールしても、BSDをインストールした感じの高揚感はなかった。

インストールするだけで、別にカーネルいじるとかドライバ書くとかそこまではいかなかったのはちと残念。

どうやったらVMWareにFreeBSD-1.0-RELEASEをインストールできるのだろう?もしかして根本的に無理?なのかな。

おらくる キャラクターセットが違うサイト同士でのレプリケーション 2011/02/05

前回のプログラマメモ2: おらくる。基本レプリケーションにチャレンジです。その3 キャラクタセットが違う編から、キャラクターセットが異なるサイト同士でのレプリケーションは、列長セマンティックがBYTEの場合、あきらかに格納データのサイズの違いが発生します。
NCHAR,NVARCHAR2であれば問題ないのでしょうが、その他の文字を格納するためのCHAR,VARCHAR2とか問題ありですね。
列長セマンティックスがせめてCHARであれば、文字単位で計算するのでまだ問題がなさそうにみえます。

ふとした疑問として、実際、oracleを使用している現場でどれぐらいの割合で、この列長セマンティックスを文字単位で設計しているのだろう思ったりしてます。BYTEがデフォルトだからたいていのところはBYTEなのかな。

[delphi] https_file_getter - Indy使ってます。 2011/02/05
2011/02/05

delphiです。ことの発端は、httpsなファイルを取得したいという話から。windowsな環境で、いろいろ工夫すればデフォルトの環境でできるかなと思ったけど、せっかくだからdelphiで。

delphiですとIndy使うと簡単にできるということらしい。
コンソールアプリケーションとして作成してます。

まずは論よりコード

program https_file_getter;
{$APPTYPE CONSOLE}

uses
SysUtils, IdHTTP, IdSSLOpenSSL, Classes;

var
IdHTTP: TIdHTTP;
SSLIO: TIdSSLIOHandlerSocketOpenSSL;
paraCount: integer;
MS: TMemoryStream;// 使ってないけどね。
FS: TFileStream;
url: String;
filename: String;

begin

(*
一番目の引数はターゲットURL
2番目の引数は出力するファイル
*)
try

(*
コマンドライン引数を処理部
*)
begin
// コマンドライン引数の数
paraCount := ParamCount;

if paraCount = 0 then
begin
Writeln('*** 引数[1]必須 url [2]option 出力ファイル名');
exit;
end;

if 0 < paraCount then
begin
// コマンドラインから文字列を取得
url := ParamStr(1);
end;

if 1 < paraCount then
begin
// コマンドラインから文字列を取得
filename := ParamStr(2);
end;

end;

(*
Indyを使っている部分
*)
begin
IdHTTP := TIdHTTP.Create();
SSLIO := TIdSSLIOHandlerSocketOpenSSL.Create(nil); // これじゃないとhttpsできないよ
SSLIO.SSLOptions.Method := sslvSSLv3;
IdHTTP.ReadTimeout := 10000;
IdHTTP.ConnectTimeout := 10000;
IdHTTP.IOHandler := SSLIO;

// filenameがあれば
if 0 < Length(filename) then
begin
// fmCreate : ファイルがなければ作成、あれば再作成
FS := TFileStream.Create(filename, fmCreate);
// これだけストリーム書き出せるけど、巨大なファイル対応できる?
IdHTTP.Get(url, FS);
FS.Free;// これ必要?
end
else
begin
// 標準出力するだけ
Write(IdHTTP.Get(url));
end;
end; // Indy使ってる部分終了

except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);

end;

end.

(*
どこまで大きいファイルに対応できてるんだろう?

*)


最初の引数でurlを指定します。
二番目の引数で、取得したファイル名を指定。
なければ標準出力に出力します。エンコードは気にしてないので、リダイレクトしても役にたたないです。

https(SSL)に対応させるためにオープンソースのライブラリを利用してます。
これないとだめ
ssleay32.dll
libeay32.dll


参考

ちなみに高機能なコマンドにwgetとcurlがあります。windowsならcygwinとかで使えると思う。
wgetとcurlの根本的な違い - ctrlshiftの日記