金曜日, 1月 16, 2009

JFileChooser: Directory Selection



Java's JFileChooser is a handy UI component in file(s) or directory(directories) selection. As with all Java OOP classes, the set up of the JFileChooser class goes through four steps: 1. instantiate the class 2. set the parameters 3. show off the class 4. wait for the return value (is modal). The JFileChooser class works fine with file selections -- selecting a single/multiple files, setting file extension filters, and retrieve a new file name if the file does not exist.

The trouble is, the case with a directory/directories selection. The JFileChooser class can filter out all the file names, and that part is ok. But when the user enters a new directory name, the filtering would hinder the class to get the non-existent directory name. The user can not select non-existent directory name.

Here shows DirFilter class that can avoid the situation and let the application have the choice either to create or reject the user request.



class DirFilter extends javax.swing.filechooser.FileFilter
{
public String getDescription()
{
return "Directories";
}
public boolean accept(File file)
{
if(file.exists())
{
if(file.isDirectory())
{
return true;
}
else
{
return false;
}
}
else
{
file.mkdir();
return true;
}
}
}



The idea is, to set up a filter for the JFileChooser class, by passing the filter class to JFileChooser. Then the application can decide whether to create a directory of the specified name or to discard it. The filter class should be the one that FileFilter interface be implemented. A word of caution is that there are java.io.FileFilter and javax.swing.filechooser.FileFilter -- the latter should be specified.

The following shows the setting of the new filter class via addChoosableFileFilter() method.



JFileChooser dlg=new JFileChooser(".");
dlg.setDialogType(JFileChooser.SAVE_DIALOG);
dlg.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
dlg.addChoosableFileFilter(new DirFilter());
int retval=dlg.showDialog(this,null);
if(retval==JFileChooser.APPROVE_OPTION)
{
...

木曜日, 1月 08, 2009

DIVタグをネストすると、マージンをとった場合にIE7とFirefoxで結果が違う。

Nested DIV -- Firefox3
Nested DIV -- Firefox3
Nested DIV -- IE7
Nested DIV -- IE7

DIVタグをネストすると、マージンをとった場合にIE7とFirefoxで結果が違う。IE7は内部のブロック要素のマージンの長さだけ外部のブロックのサイズを変更する。Firefoxでは、なぜか内部のマージンに合わせて外部のブロックも移動する。しかも不可解なことに、外部ブロックにボーダーをつけると位置が移動する。要注意。

ソースはこちら→ div.html

日曜日, 1月 04, 2009

The Art of UNIX Programming

The Art of UNIX Programming という本があって面白く書いてある。記述のどこまでが反語なのか計りかねるところがまた興味深い本である。さらに、おそらくは日本などでも散見される意見がちりばめてあってより熟考を迫られる。

まず、意図的にはUNIXに檄を飛ばす内容となっている。そのための、現状の把握の過程が書かれている。数々の、名の知れた頭のよい人たちのウインクが見えるような本である。立場から、マイクロソフトにはまったく「反対」を唱え、協調あるいは融和、妥協など交渉する気配を見せていない。これは政治的闘争というものに他ならない。政治問題化しては問題は解決しない。Windowsプラットフォームの問題点として、文書形式がプロプラエタリなバイナリであること、アプリ間でデータの交換がやりにくいことなどを列挙しているが、問題の解決方法として、Windowsと対決するなどまったく現実的ではない。政治的リアリティとしては、その筋からWindows製品にも多くの注文が寄せられ、さまざまな改変が加えられている。Word文書形式のオープン化などは、強い要望によって成し遂げられた改革である。XML形式での文書データの交換形式の普及は、UNIX対Windowsの対決より、より実際的であり、効果的な解決方法である。

本書には、プログラムに関するポリシーであり助言が書かれている。簡略化すること、モジュール化すること、「美しく入り組んだ構成物」は矛盾という。データ構造が重要なこと、最適化がコードを重く長くすること、「まず動かし、正しくして、速くせよ」というKent Backの台詞を引用している。が、固陋なまでにC言語を使い、Java言語をスクリプト扱いする記述には、「Javaのほうがずっとスマートに美しく書ける」「CのライブラリよりJavaのクラス構造」といいたい。

しかし、銃保有があたかも反体制であるかのように書くのはまったくばかげている。

日曜日, 12月 21, 2008

仮想マシンでUbuntuを動かす

Windows上で、VMWareなど仮想マシンを使うと、UbuntuなどLinuxマシンを動かすことができる。

仮想マシンに置く、システムのイメージが大きいため、ダウンロードに時間がかかることに注意。

まず、VMWare Playerをダウンロードする(登録が必要)。

起動したPlayerから、「Download」アイコンをクリックして、イメージの置いてあるサイトにアクセスする。

Ubuntu
など必要なシステムのイメージを選択し、ダウンロードする。

ダウンロードしたいファイルが、BitTorrent形式のものであれば、Vuzeなどをインストールしてダウンロードする。

ファイルが7-Zipなどの形式で圧縮されていれば、解凍用アプリをダウンロードして解凍する。

Playerから、イメージを選択して起動する。

パスワードは、イメージの置いてあるサイトに記載されている。

月曜日, 12月 15, 2008

正式版となったGoogle Chromeを試す

GoogleのChromeブラウザの製品版が出たというので、早速使ってみると、軽くて速い。とまどったのは、ブックマークの登録。右クリックにも、メニューにも項目がない。ドキュメントによると、登録にはアドレスバー左の星印をクリックする。ちょっとひっかかる設定ではある。

Javascriptに関して言えば、Firefoxと異なり、document.documentElement.scrollTop に設定はなく document.body.scrollTop を使わねばならない。同様に、screen.width には設定はなく、screen.availWidth を用いなければならない。バグかと思われたのは、moveTo() と resizeTo() を続けると、最後の設定しか有効でない点。つまり、moveTo() を最後に持ってくるとウインドウのサイズの設定が崩れ、resizeTo() を持ってくるとウインドウの位置が左上(0,0)に設定される。

正式版となったGoogle Chromeを試す (2008-12-12)

木曜日, 12月 11, 2008

グーグル社長が交代、ソニー出身の辻野氏が就任

Googleは9日、Googleの日本法人社長に、2009年1月からソニー出身の辻野氏が就任すると発表したという。

グーグル社長が交代、ソニー出身の辻野氏が就任 (2008-12-9)

日曜日, 12月 07, 2008

ブラウザ間の差違

ブラウザ間の差違による調整は、ブラウザ開発社が各社で規格を適宜変更するため、困難である。ブラウザ規格が統一されていれば、ページ製作者の苦労は軽減される。OSが統一されていれば、プログラマの仕事の大半がより創造的なものになる。しかし、WindowsおよびIEの絶対的な支配権力を要求することは、独裁下の官僚のぐちにすぎない。すべての人間が理解できる程度に同じであることを要求するのは、独裁的支配権を要求するのと同意である。異なる団体間の調整をすることは、同じであることを強要するものではない。しかし、IEのバグをかばわなければならない理由はない。Internet Explorerには、背景がスクロールで出現したり消えたりするバグがある。ズームを指定すると直るという。ほかに、IEには、改行で隙間が開くというバグがある。さらに、IEでは、DIVのスタイルがテーブルのスタイルより優先される。

月曜日, 12月 01, 2008

IE8 does not support filter:alpha ...

The hell with it -- IE8 does not support filter:alpha. It works without DOCTYPE specification but not with any of the type being spedified at the top of the page like as you would do just like a good citizen that follow all those laws and orders. Just specify IE7 mode and it works fine with the filter:alpha css or whatever. This. Here.

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

金曜日, 11月 28, 2008

雑感

妙に気張ったサイトがあるが、必要もないのにリフレクションの類を使うのは意味がないだけでなく、コンセプトをあいまいにするという欠点がある。

「あ、IEがサポートした!」など一喜一憂したくない。さらに悪いのは、「あ、IEがサポートしてない!」である。この対処法はいくらもあるが、基本線に徹するのもひとつの生き方である。ところが、基本中の基本と考えているようなことがサポートされていない場合などあり、その解決だけで時間がかかる。

最初から汎用性のない機能を説明するなどまったくテキストとして方針がなっていない。その辺の配慮が、教育的配慮というものである。他人の造ったプログラム言語を説明するには、それなりの配慮がいる。もっともよく使う演算子、関数に、決まった形式がなかったり指定されていなかったり冗長であったりすると、汚いプログラムになる。

Firefoxで対応していない機能もある。ブラウザでルビに対応しないのがあり、不便である。括弧書きはいかにもよくない。日本語に特有な機能であり、ブラウザの開発にも開発者およびサポーターの使う言語に依存する部分がある。

火曜日, 11月 25, 2008

PHP: Encrypting the Passwords

Nowadays, you need passwords everywhere, to access to blog admin page, to view member-only BBS, to read articles only available to the selected few, etc. All those sites require passwords. The passwords should be secured at a safe place and they should be safely protected -- encrypted. In PHP, crypt function does the work. It encrypts in a pattern that can be set by another secret keyword.

 
crypt($password,"ea")


Here the secret seed of this encryption is "ea" (happens to be my initials). This is a one way ticket to the password protected world -- there is no way to reverse the encryption unless you decipher the mechanism of PHP's encryption. In the real world checking of passwords, simply compare the resulting mysterious bunch of digits and letters with with the passwords that you would like to check -- with the encrypted ones, with the same secret seed.


strcmp(crypt($entered_password,"ea"),$password_stored_somewhere)==0


Notice that the string comparison is done with strcmp -- it is PHP's ancient trap. Never compare strings with == operator. PHP's inherent conversion machine might convert the string to some integer (or to any type) before doing the comparison.

土曜日, 11月 01, 2008

IE6で透過PNG

IE6では、そのままでは透過PNGを表示できません。しかし、フィルターを使うと表示が可能です。スタイルシートなどに組み込んで使います。こちらのページでは、ページのヘッダー部分でスタイルを指定しています。


filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='title.png');


「IE6でどうやって透過PNG表示するの」
「知らない」
「フィルタ使えばいいんだよ」
「あ、知ってる」
「...」

金曜日, 10月 17, 2008

PHPの配列

PHPでは、配列をハッシュのように使えます。便利です。値を変数に置くと、読みやすいコードを書くことができます。


$springEquinoxDay=(int)(20.8431 + 0.242194 * ( $year - 1980))
- (int)((double)($year - 1980)/4) ;
$springEquinox=array(3,$springEquinoxDay,"春分の日");

$automnEquinoxDay=(int)(23.2488 + 0.242194 * ( $year - 1980))
- (int)(($year - 1980)/ 4);
$automnEquinox=array(9,$automnEquinoxDay,"秋分の日");

$official_holidays=array( array(1,1,"元旦"),
array(2,11,"建国記念日"),
$springEquinox,
array(4,29,"昭和の日"),
array(5,3,"憲法記念日"),
array(5,4,"みどりの日"),
array(5,5,"こどもの日"),
$automnEquinox,
array(11,3,"文化の日"),
array(11,23,"勤労感謝の日"),
array(12,23,"天皇誕生日"));



春分の日・秋分の日の算出方法は、こちらを参照させていただきました。

水曜日, 10月 15, 2008

PHPでのログイン管理

PHPでのログイン管理において、クッキーを使ってセッション番号によって判別する方法を示します。

session_start();
$sessionid=session_id();

if(strcmp($_SESSION['sid'],$sessionid)!=0)
{
$user=$_REQUEST['user'];
$password=$_REQUEST['password'];

if(strcmp($user,$user_cfg)!=0)
{
header('Location: index.php?message=noUser');
}

if(strcmp($password,$password_cfg)!=0)
{
header('Location: index.php?message=noPassword');
}
if(strcmp($user,$user_cfg)==0 && strcmp($password,$password_cfg)==0)
$_SESSION['sid']=$sessionid;
}

セッション番号を記録し、現在のセッション番号と比較するのに、ここではセッション変数を用いています。

セッション変数$_SESSION['sid']に記録されたセッション番号と、session_id()で得られる現在のセッション番号を比較します。もし一致しなければ、ログイン情報をチェックし、一致しなければログイン画面index.phpに移行します。一致すればセッション変数に現在のセッション番号を記録します。

月曜日, 10月 13, 2008

職人芸

昨日は、お隣さんに、庭を拝見させていただいた。日本風の邸宅から、見事に手入れされた庭木が見える。いわく、「刈り込みというのはね」「職人芸なんですよ」「自然に」「はさみが動く」「理論じゃない」。先が見えなければ、刈り込むにもうまくいかないだろうと意見を述べたのだが、「いや、そうじゃない」「波長があって」とおっしゃる。

そんなに技術を魔術にしては困る、それじゃあいったいどうやって教わればいいんだろう、と思ったのだが、あくまで確信をこめて「どこに植えたらいいかって、それさえまったく飲み込めない人間もいるんですよこれが」とこれはまた頓着なくおっしゃる。

興味深く思ったのは、そういえばコンピュータに関しても似たような言い回しがあって、やはり「波長が」と言うのである。「どうも合わない」と思われるノリのブログもあれば、結果が明日になって出てくるようなコンパイルはしたくないという波長もある。しかし、他人に「Javaとは波長が合う」と言っても、Javaでプログラムを組み、別言語を使用したことがなければ、意味は通じない。「つまらないことに引っかからなくてすむから書きやすい」といっても、これも抽象的な話である。

だから、ようするにそういうことであろうと結論付けている。ようするに、Javaプログラムの書きやすさなど、説明しようとすれば「あるべきところに、ちゃんと備わっている」としか言いようがない。それは、類まれなる設計のよさからくるものであり、使う人の質と数によるものであり、ひいては設計したチームのリーダーシップによるものである。

ちなみに、植物を植えつけるなら分散して、いくつかの株に分け、どの場所がもっとも適しているかを見るのが安全である。日当たりと水はけと風通しと、植物でも科によって種によって、好む場所が違う。ある程度の見当をつけたら、さまざまに試みるのがコツというものだと思っている。

土曜日, 10月 11, 2008

C++/CLI でのプログラミング

先日、Visual C++ 2005 Expressでプログラムを書いていて、理解できないコンパイルエラーに悩んだ。何かと言うと、このコンパイルがキーワードチェックをしない。

array<int>^ array={5,4,3,2,1};
array<int>^ test;

分かってみればどうということもないが、「type 'int' unexpected」と出るので、構文のどこがまずいのか、探し出すのに手間取った。

C++/CLI では、Managed C++ をさらに改良した構文を用いて、どこかしらJavaの方式を継承した気配の言語が実装されている。現行のC++からの移行というより、整合性のある構文で、いわく違和感のないプログラム形式を目指しているという。

デリゲートとは、クラス構造を超えてメソッドにアクセスするポインタである。なんと足し算、引き算がある。メソッドを足された順に呼び出すという。

メタなクラス記述用クラスである属性クラスを使える。複数指定でき、引数もとる。Javaのアノテーション機能のことだという。しかし、Javaではドキュメンテーションにしか使わない。

タイプをメタで記述するテンプレートもある。ジェネリックもある。ジェネリックであればMSILで使えるという。制限もつく。推測でタイプを決めるという。

packがないのはプログラムでコンポーネントを記述するメリットを生かしていないと思う。

火曜日, 10月 07, 2008

PHPの出力を取得し、文字コードを変換する

PHPでは、include()関数を使って別のPHPプログラムの出力結果を読み込む方法があります。

 
include("news/news.php");


読み込む際に、同時に日本語文字コードの変換を行うやり方を以下に示します。

 
ob_start();
include("news/news.php");
$eucContents=ob_get_contents();
ob_end_clean();
$utf8Contents=mb_convert_encoding($eucContents,"UTF-8","EUC-JP");
echo $utf8Contents;

水曜日, 9月 24, 2008

Compare.java

The following is a Java command line tool that searches each line of the file in another file specified. To compile,

javac Compare.java

To run the program,

java Compare data.txt file.txt



import java.io.*;

public class Compare
{
public boolean contains(String str, String text)
{
boolean found=false;
if(0<=text.indexOf(str))
{
found=true;
}
return found;
}

private String readFile(String fileName)
{
String text="";
try
{
FileInputStream fis=new FileInputStream(fileName);
InputStreamReader isr=new InputStreamReader(fis,"utf-8");
BufferedReader reader=new BufferedReader(isr);
String line="";
while((line=reader.readLine())!=null)
{
//System.out.println(line);
text+=line+"\n";
}
}
catch(Exception e)
{
e.printStackTrace();
}
return text;
}

public void compareLine(String org, String dest)
{
String text=readFile(dest);
try
{
FileInputStream fis=new FileInputStream(org);
InputStreamReader isr=new InputStreamReader(fis,"utf-8");
BufferedReader reader=new BufferedReader(isr);
String line="";
while((line=reader.readLine())!=null)
{
if(contains(line,text))
{
System.out.print("o ");
}
else
{
System.out.print("x ");
}
System.out.println(line);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}

public static void main(String args[])
{
if(1<args.length)
{
Compare compare=new Compare();
compare.compareLine(args[0],args[1]);
}
}
}

木曜日, 8月 28, 2008

PHPによるデータベースアクセス

PHPでは、PDOというクラスを使うと、MySQLなどデータベースへのアクセスが簡潔に記述できます。クエリ操作など、データベース関連の関数が抽象化されているので、データベースに非依存のコードを書くことができます。例外処理機能があるので、よりわかりやすいコードを書くことができます。

手順としては、クラスをインスタンス化し、メンバ関数を実行します。結果はオブジェクトとして返されるので、メンバ関数を使用すると順次値を引き出すことができます。返される値は、デフォルトで連想配列および数値を引数とする配列となります。



try
{
$dbh=new PDO('mysql:dbname='.$MYSQL_DATABASE.';host='.$MYSQL_HOST,$MYSQL_USER,$MYSQL_PASSWORD);
$dbh->query("SET NAMES UTF8");

$sql="select * from photos where data_no=".$data_no;
$photoSet=$dbh->query($sql);

if(!empty($photoSet))
{
while($row=$photoSet->fetch())
{
echo $row['filename'];
}
}
}
catch (PDOException $e)
{
echo $e->getMessage();
}
$dbh=null;



オートインクリメントで値を設定している場合には、
lastInsertId()
を使うとインデックス値を得ることができます。


$dbh->query($sql);
$data_no=$dbh->lastInsertId();

金曜日, 8月 22, 2008

フォームでブラウザが勝手に文字コードを変換

フォームで日本語の文字列を受け渡す場合に、ブラウザが勝手に文字列をEUCやShift-JISなどに変換してしまう場合があります。

エンコードされた文字列がなんであるかを知りたい場合に、mb_detect_encoding 関数を使うことができます。

まず、フォームにhidden属性で、テスト用の文字列を指定します。

<input type="hidden" name="JapaneseEncoding" value="テスト用文字列">

フォームから値を受け取るPHPのページで、mb_detect_encoding 関数を用いて文字コードを判定します。

文字コードが判定できれば、mb_convert_encoding 関数を用いて、コード変換することができます。

$encoding=mb_detect_encoding($_REQUEST['JapaneseEncoding'],"ascii,jis,utf-8,euc-jp,sjis");
mb_convert_encoding($str,"utf-8",$encoding);

木曜日, 8月 21, 2008

PHPでHTMLタグを取り除く

PHPでは、HTMLを「文字通り表示する」 htmlspecialchars($str) という関数がある。

不等号が含まれる文章やコードなど、HTMLタグをそのまま表示するときに使う。

それでは、その逆の「タグを除去する」関数があるかといえば、特に設定されていない(らしい)。

正規表現を使うと、それらしきものができる。しかし、クォートで囲まれたカギ括弧などには対応しない。

contents$str="<html a=\">\">contents</html>";
echo mb_ereg_replace("<[^>]*>","",$str);

クォートで囲まれたカギ括弧などは、特別に指定しなければならない。

echo mb_ereg_replace("<[^>]*\".*\"[^>]*>","",$str);

グルジア語について


グルジア語について リンク集

サバイバル・グルジア語 (音声つき、おすすめ)
グルジア語の数体系
グルジア語のアルファベット
グルジア語 (Wiki)
グルジア文字 (Wiki)
グルジア語のすすめ
グルジアへ旅立つ人のためのグルジア語
FONTS.GE (グルジア語フォント)
グルジア文字をローマ字に変換してくれるサイト
THE GEORGIAN LANGUAGE (文法まとめ)
Georgian Language (学習サイト)
グルジア語の能格
グルジア語文法 (単行本)
【動画・アニメ】 The Magic Egg (jadosnuri kvertskhi)

グルジア語はフランス語のように、20進法(vigesimal)をとる。20*n+m の形で、65であれば、3x20+5と表す。

グルジア語の語変化で、母音を省略して短縮する(syncope)という形がある。megobari(友人) < megobrebi(友人、複数)

数あるグルジア語のアルファベット表記のなかで、現在使われているものは、Mxedruli, Mkhedruli (軍隊の、世俗の)という。

グルジア語では、me iaponeli var.(მე იაპონელი ვარ, 日本人です)のように、SOVの文型をとることができる。

sakartvelo (グルジア国)というのは、kartveli (グルジア人)に sa~o をつけたものという。

グルジア語をローマ字化する際に、放出音(ejective)の表記が標準によって異なるため、注意が必要である。さらに、グルジア文字での表記での放出音が酷似している。 პარასკევი (p'arask'evi, 金曜日)という単語をみてほしい。კპვとすべて異なる文字である。კがkの放出音、პがpの放出音、ვはvを表す。

ちなみに、グルジア語で、NOはアラ არა (ara)といい、千をアタシ ათსი (atsi)という。

グルジア語の人称代名詞とコピュラ 動画

単数複数
1
მე ვარ (me var)
ჩვენ ვართ (chven vart)
2
შენ ხარ (shen xar)
თქვენ ხართ (tkven xart)
3
ის არის (is aris)
ისინი არიან (isini arian)


名詞の格変化の基本形 → Noun Declension 

主格 Nominative
ეს არის წიგნ (is aris ts'igni)
これは本です
~は
呼格 Vocative
მზე! (mzeo!)
太陽よ!
~よ!
対与格 Dative
წერს წერილ (ts'ers ts'erils)
手紙を書く
~を、~に
所有格 Genitive
იმერეთის მხარე (imeretis mxare)
イメレティ地区
~の
具格 Instrumental
მე ვწერ ფანქრით (me vts'er pankrit)
私は鉛筆で書く
~で
副詞格 Adverbial
მეგობრად (megobrad)
友人として
~として


規則動詞の活用
წერ (to write)

単数
複数
1
წერ (vts'er)
წერ (vts'ert)
2
წერ (ts'er)
წერ (ts'ert)
3
წერ (ts'ers)
წერენ (ts'eren)


規則動詞の過去形



単数
複数
1
დავწერე (davts'ere)
დავწერეთ (davts'eret)
2
დაწერე (dats'ere)
დაწერეთ (dats'eret)
3
დაწერა (dats'era)
დაწერეს (dats'eres)


グルジア語で動詞の命令形、書け!(da-ts'er-e, დაწერე)は、直訳で書いた!と過去形(アオリスト)となる。

グルジア語の動詞は、アラビア語と同じように語根から派生形を作る。派生形の、人称と数による変化形は、基本形とは異なる。派生形は、語根の前につく母音(PV)と、後につく要素(P/FSF)を変化させ、-d 形、-i 形などの変化形がある。

-i 形では、დახატავს (da=khat'-av-s) を დაიხატება (da=i-khat'-eb-a) のように、PVに i を、P/FSFに eb に変化させる。-d 形では、ააშენებს (a=a-shen-eb-s) を აშენდება (a=shen-d-eb-a) のように、PVを取り除き、P/FSFに d を加える。派生系の人称と数による変化形は以下のようになる。



単数
複数
1
ავშენდები
(a=v-shen-d-eb-i)
ავშენდებით
(a=v-shen-d-eb-it)
2
აშენდები
(a=shen-d-eb-i)
აშენდებით
(a=shen-d-eb-it)
3
აშენდება
(a=shen-d-eb-a)
აშენდებიან
(a=shen-d-eb-ian)


数詞(基数)

1. ერთი erti
2. ორი ori
3. სამი sami
4. ოთხი otkhi
5. ხუთი khuti
6. ექვსი ekvsi
7. შვიდი shvidi
8. რვა rva
9. ცხრა tskhra
10. ათი ati
11. თერთმეტი (tertmet'i)
12. თორმეტი (tormet'i)
13. ცამეტი (tsamet'i)
14. თოთხმეტი (totkhmet'i)
15. თხუთმეტი (tkhutmet'i)
16. თექვსმეტი (tekvsmet'i)
17. ჩვიდმეტი (chvidmet'i)
18. თვრამეტი (tvramet'i)
19. ცხრამეტი (tskhramet'i)
20. ოცი (otsi)

met'i とは"more"を意味するという。

30. ოცდაათი, otsdaati
40. ორმოცი, ormotsi
50. ორმოცდაათი, ormotsdaati
60. სამოცი, samotsi
70. სამოცდაათი, samotsdaati
80. ოთხმოცი, otkhmotsi
90. ოთხმოცდაათი, otkhmotsdaati
100. ასი, asi
200. ორასი, orasi
300. სამასი, samasi
1000. ათასი, atasi

曜日の表し方

日曜日ქვირა (kvira)
月曜日ორშაბათი (orshabati)
火曜日სამშაბათი (samshabati)
水曜日ოთხშაბათი (otkhshabati)
木曜日ხუთშაბათი (khutshabati)
金曜日პარასკევი (p'arask'evi)
土曜日შაბათი (shabati)

昨日 გუშინ (gushin)
今日 დღეს (dghes)
明日 ხვალ (khval)

グルジア文字は、アルメニア文字との類似が指摘されており、ギリシア文字あるいはパフラヴィー文字から発展したものと考えられているという。(ルイ・ジャン・カルヴェ「文字の世界史」)

この本では、パフラヴィー文字がパルティアで使われたと書いてあるが、パフラヴィー語は、サーサーン朝ペルシアの公用語である。

パルティア(247BC頃~226AD)はイランで国の祖として称えるサーサーン朝ペルシア(226-651)の始祖アルダシール1世より前の古代王朝で、共通語としてギリシア語とアラム語を使用したという。ヴォロガセス1世の時代には非ヘレニズムの風潮が高まり、パフラヴィー語を使用したという。ゾロアスター教の勢いが強まるのは、非ヘレニズムの動きからという。

サーサーン朝ペルシアはゾロアスター教を国教としているが、聖典「アヴェスター」はアヴェスター語で書かれており、サーサーン朝の時代にすでに解読が困難になっていたという。教祖ザラスシュトラの直言とされるガーサー部分は解釈が分かれるという。アヴェスター語はサンスクリット語ときわめて近いという。アラム文字を基本としたアルファベットであるアヴェスター文字で記述するという。

火曜日, 8月 05, 2008

Google Maps ストリートビューが凄すぎて2ちゃんは祭りに

GoogleMap では(ちょっと衝撃的な)ストリートビューが公開されました。

さっそく、近所の散歩を楽しんできました(実際に散歩するより楽しいかも)。

GoogleMap (ストリートビューボタンをクリック)

すごい。

一般メディアおよび新聞、IT関連のニュースメディアを含め、なぜ書いていないのか不思議。と、よく考えてみると、米国では先に公開されていることに気づきました。なんだ。

Google Maps ストリートビューが凄すぎて2ちゃんは祭りに (2008-8)

水曜日, 7月 30, 2008

PHP: ランダムなファイル名を返す関数

Windows環境のApache+PHPでは、tempnam()関数が正常に動作しないようです。仕様かもしれませんが、拡張子は.tmpが自動的についてしまうし、プレフィックスの指定が3文字になるようです。ランダムなファイル名を返す関数を作ってみたので、参考になればと思います。

引数にファイル名の長さを指定してください。


function tempFile($length)
{
$alphanumeric="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$len=strlen($alphanumeric);
$name="";
for($i=0;$i<$length;$i++)
{
$index=rand(0,$len-1);
$name.=substr($alphanumeric,$index,1);
}
return $name;
}

金曜日, 7月 25, 2008

iPhoneという奇跡


iPod はトラブルフリーである。なにせ、マニュアルがない。実際、説明抜きでも分かるほど使いやすい。感に入ったように「うん、いいね。ぜんぜん違う」「なるほどね。これ皆んな欲しがるわけだ」という返答をもらっている。そうだと思う。動画を動かして、映画など見ていると特に大きなその画面の無駄のないスペースの使い方がアートだと思う。

iPhoneという奇跡 (2008-7-13)

土曜日, 7月 19, 2008

WikiにおけるJavaの記述

Java の基本コンセプトは、無論のこと「仮想化」である。そのためには、言語仕様が明確であることが要求される。毎月、あるいは半年毎に変わる仕様にあわせて、仮想マシンを作りたいと思う技術者はいない。

言語仕様もさることながら、ライブラリの仕様もはっきり定義されていなければならない。このあいだ作り上げたプログラムが、ライブラリのAPIを勝手に変更されたために、意味もない警告を出してくる状況は、決して快いものではない。

言葉がいいかげんに使われるものではなく、遊びではないように、プログラミング言語を規定する側はより一層の思いやりを必要とする。プログラムは、単なるアルゴリズムの記述ではあるが、それを読み解くのはコンパイラだけではなく、記述するのは人間だからである。

Java言語の表記法が、C言語に近いのは、時代、社会的背景によるものである。しかし、Javaでは、ベタにメモリアドレスを扱うC言語とは異なり、より安全で自然なプログラミング言語である。範囲外の配列の引数は、例外処理される。オブジェクトはもちろん、それとして扱うことができる。

Java

火曜日, 7月 08, 2008

PHPの変数には、文字通り、どんな型の値を放り込むことが可能です

PHPの変数には、文字通り、どんな型の値を放り込むことが可能です。つまり、数値や文字列を返すはずの関数の返り値に、FALSEを返し、例外処理ができます。例として、ゼロでの割り算を例外処理したい場合のコードを挙げておきます。


function divide($x,$y)
{
if($y!=0)
$result=$x/$y;
else
$result=FALSE;
return $result;
}

$x=10;
$y=0;
$z=divide($x,$y);
echo "$x divided by $y equals to ";
if($z)
{
echo "$z";
}
else
{
echo "... undefined

";
}


PHPでは、変数に型を自由に指定できるため、型を含めて判断したい場合には、見慣れない===(イコールサインを3つ重ねた演算子)や!==など使うことができます。

PHPの比較演算子

木曜日, 7月 03, 2008

PHPについて -- 型変換、可変変数、グローバル変数

PHPは、サーバーサイドで動くスクリプト言語ですが、これがとても便利。やみつきになります。使っていて、PHPの言語仕様で、気づいた点を3つ。


1.PHPでは、文字列が数値にキャスト(型変換)できる。全角数字を半角に変換するには、mb_convert_kana()を用いる。


$a=(int)"10";


$str = mb_convert_kana($str, "a");
$a=(int)$str;


2.PHPでは、文字列を変数として評価することができる。(Lispでいう、eval)


$variableName="newVariable";
$newVariable="value";
echo $$variableName;


3.PHPでは、関数を定義する際に、外部変数(グローバル変数)は関数内でそれと指定せねばならない。関数内での外部変数への代入は、外部変数そのものの値を変えない。


$globalValue=100;
function summit($politicalFactor)
{
      global $globalValue;
      return $globalValue*$politicalFactor;
}
$globalValue=summit(1.3);

水曜日, 7月 02, 2008

「Firefox 3」がギネスブックに認定,公開初日ダウンロード件数の世界記録

一日で最多のダウンロード数をギネス記録にしよう!という、6月17日に行われた「ダウンロード・デイ」。Firefox 3のダウンロード数は800万を超え、見事世界記録を達成したとのこと。現時点で、ダウンロード数は2870万件とか。

「Firefox 3」がギネスブックに認定,公開初日ダウンロード件数の世界記録 (2008-7-3)

土曜日, 6月 28, 2008

Firefox3の新機能

Smart Location Bar
Firefox3の新機能といえば、表示(V)-ズーム(Z)-拡大(I)あるいは縮小(O)で、画像を含めてページが拡大・縮小できる、ということに先日、気がついたのですが...既出でしょうか。スマート・ロケーションバーは、確かに便利。日本語のページタイトルが出てくるのでありがたい。印刷関係の機能は、IEのほうが便利なような...IEだと、選択した部分だけプレビューして印刷が可能で、紙が無駄になりません。

「Firefox 3」が公開、その内容に迫る (2008-6-18)
Firefox 3 - 機能概要
Firefox 3 ダウンロード

木曜日, 6月 26, 2008

GenaratePassword.java

As the name suggests -- this snippet generates an 8-letter password (that's all).


public class GeneratePassword
{
public static void main(String args[])
{
String alphanumeric="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
int len=alphanumeric.length();
for(int i=0;i<8;i++)
{
int index=(int)Math.floor(Math.random()*len);
System.out.print(alphanumeric.charAt(index));
}
}
}

火曜日, 6月 24, 2008

端末は2万3000円から iPhoneで料金プラン

「iPhone(アイフォーン)」
アップル社の iPhone がついに7月11日に発売。昨日23日、ソフトバンクモバイルはついに料金設定を発表したようです。端末が8GBのもので2万3040円、16GBのもので3万4560円(等差数列ですねこれは)。インターネット接続が定額の「パケット定額フル」プランで月々7280円からの2年間契約が条件とか。

端末は2万3000円から iPhoneで料金プラン (2008-6-23)
iPhone 割賦で月々960円から ソフトバンク発表 (2008-6-24)
端末は2万3000円から iPhoneで料金プラン (2008-6-23)

火曜日, 6月 17, 2008

Firefox3のダウンロード・デイは、19日 2:00 まで


Firefox3のダウンロード・デイは、2008 年 6 月 18 日 17:00 (日本時間では翌 19 日 2:00) まで。

Firefox 3は、確かに速い。タブの切り替えが瞬時に行われます。ダウンロードページのURLは重いので、リンクに直接飛ぶと、とどこおりなくダウンロードできます(そちらをメールしてくれればいいのに>Mozillaグループ)。

Windows版ダウンロード

#なんでIEじゃいけないの、とか聞かれたらどうしようかと思う(しかし、会社では「もしかして、反マイクロソフトなの」と言われた)。

Firefox 3 無料ダウンロード

ダウンロード状況を、地図で表示する素敵なサイトがこちらに → Firefox 3 の灯

「Firefox 3 の灯」とは]

「Firefox 3」の市場シェアが早くも6%台に--Net Applications調査 (2008-6-20)

日曜日, 6月 15, 2008

LED基礎知識


7月の洞爺湖サミットが近くなり、地球温暖化の話題が多く語られています。

ニュースでは、「エコ」「省電力」な製品として、LEDの話題がとりあげていました。LEDの照明灯というものがあるそうです。LEDは確かに省電力です。東芝のE-COREという製品では、40W相当の明るさのもので5.3W、60W相当のもので7.8W。そして、寿命が長いのがLEDの特色とかで、カタログスペック40000時間。気になるCO2排出量は、クリプトンランプ比較で約10分の1(40W)、約7分の1(60W)。

LEDの寿命は、何で決まるのか...松下のサイトに説明がありました。

LED基礎知識
E-CORE[イー・コア]は消費電力1/7で白熱灯器具と同等の明るさを実現した高効率ダウンライトです
動画で見るLED基礎知識

金曜日, 6月 13, 2008

バックアップ

バックアップにどのメディアがいいかと調べてみると、ブルーレイは、メディアが単価430円(25GB)、プレーヤーが2万5800円。DVD-R DL規格のDVDで、9.4GB、単価795円。1TBのハードディスクが15400円。

#バックアップはこまめに

水曜日, 6月 11, 2008

Google Map API: Longitude and Lattitude

The Google Maps API offers an address look-up and one of the feature is
that the engine can search for the lattitude and longitude of the
specified query. The first thing you need to do is to access here
(Sign Up for the Google Maps API) and get an API key. Then a php file,
something like this one will do the search for you.

火曜日, 6月 10, 2008

iPhone、低価格が魅力に 来月発売、機能や戦略に課題も

アップル社はソフトバンクモバイルを通して、iPhone を日本で販売すると発表。

米アップル:iPhone、低価格が魅力に 来月発売、機能や戦略に課題も (2008-6-11)

日本語の iPhone のデモをリンクしようと思ったのですが、ちょっと見つからない。店頭で、実際に操作することをオススメします。「すばらしい操作性」「秀逸なデザイン」「持っていたい一品」だと思います。

【iPhone】情報小出しで“狂想曲”増幅 アップルのしたたか戦略 (2008-6-10)

低価格設定で、端末販売台数を伸ばすことのほうが重要、という戦略だとか。

アップルがiPhone 3Gを披露、価格は199ドルから

気になるのは、通信料ということでしょうか。

金曜日, 6月 06, 2008

Firefox 3、リリース日に24時間最多ダウンロード記録に挑戦

6月中旬に発表のFireFox3、高速・安定化を目指して改善されてるそうです。

「Gecko 1.9 レンダリングプラットフォームを基盤としており、描画速度や安定性が向上する。また文字と画像を同じ縮尺のままページを拡大・縮小するフルページズーム機能やSQLiteを活用したブックマーク機能など、数多くの新機能を備える」

Firefox 3、リリース日に24時間最多ダウンロード記録に挑戦 (2008-5-29)

さらに、ダウンロード数でギネスブックに挑戦する!イベントが。

FireFox3 の一日のダウンロード数を競うイベントがMozilla Foundations から発表。

国別に色分けされたマップが、サイトに載ってます。

ギネス世界記録への挑戦
より良い Web 体験を楽しもう Download Day



ちなみに、FireFoxのシェアは、18.41%(Net Applications発表、2008年5月)。



Safari 6%突破 Firefox 3すでにOpera超え、IEは純減 (2008-6-5)

(会社でFirefox3のダウンロード・デイの話をすると、「ダウンロードすると、なんか得するわけ?抽選かなんかで景品でもつければ」「ダウンロードの際に、サーバーがパンクしないのか」と言われた。)

日曜日, 6月 01, 2008

和電国際:アップルとの「iPhone」販売に合意

香港の和電国際は29日、iPhone販売でアップル社と提携に合意したという。ソフトバンクはiPhoneを提供する、という情報があるという。マイクロソフトはWindows 7で、iPhone 形式のタッチスクリーンを導入するという。

和電国際:アップルとの「iPhone」販売に合意 (2008-5-29)

ところで、iPod って、これ中国製なんですよね。

機械部品がないっていうか。

金曜日, 5月 30, 2008

迷惑メール法の改正案が成立、事前同意無しの広告メール送信は違法に

迷惑メール法の改正案が、今日30日に国会を通過して成立、6ヶ月以内に施行されるというニュース。米国では、240億円の罰金が科せられたケースがあったり、この世界もすこしは動いてるフンイキがあります。迷惑メール対策、送信者のアドレスの検索方法というのがあるわけですが、行政が絡むと安心。個人ではなかなか対策の立てにくいものがあります。

迷惑メール法の改正案が成立、事前同意無しの広告メール送信は違法に (2008-5-30)
迷惑メール送信、全面禁止に 改正法成立 (2008-5-30)
迷惑広告規制の改正メール法成立 (2008-5-30)
迷惑メールに240億円 米、過去最高の支払い命令 (2008-5-14)
spamの被害に遭い始めたら

木曜日, 5月 29, 2008

青空文庫専用ビューアー「Aozora Viewer」最新版、表示を高速化

青空文庫の読める、Javaベースのアプリ(の最新版)が公開。いいですねえ。フォントがずれるきらいはあるけれども、縦書きで読めます。

青空文庫専用ビューアー「Aozora Viewer」最新版、表示を高速化 (2008-5-28)

水曜日, 5月 28, 2008

クラスをアンロード・リロードする

いまさら、でもちょっと気付いたことを...

Javaで初期時のインスタンス化において読み込んだクラス定義は、forName()でインスタンス化してもアップデートされない。forName()は、クラス名を動的に指定することができるが、動的な読み込みのためではない。ClassLoaderを使うと、クラスを定義するパスを動的に指定できるが、動的な読み込みのためではない。

クラス定義は、ローダーを指定し、クラスとローダーを共にアンロードしても、アンロードしないようである(JDK6.0、Windows環境で)。明示的に指定させない理由は、理解しがたい。使用する際には、その事実を念頭においてプログラムしなければならない。

日曜日, 5月 25, 2008

「JavaOne 2008レポート」見えてきたJava SE 7

Javaの新しいバージョン、Java SE 7 が議論されているとか。

つまんない変更を加えて、そんなことよりも仮想マシンの普及に力を入れて欲しい、とわりに深刻に悩む毎日なわけですが、「モジュール」、「プロファイル」が導入されるというニュース。

オブジェクト指向言語では、C言語で言う構造体を、「カプセル化」しており、クラス構造体のメンバ変数へのアクセス権を指定できます。Javaでは、さらにクラスをまとめた「パッケージ」を指定し、DLLのように扱うことが可能です。「モジュール」では、複数のパッケージをまとめ、アクセス権を定義するということらしい。「プロファイル」とは、rt.jar のサブセットだそうです。「言語仕様・管理」については、例外の複数指定、javadocの形式変更・追加、ファイルIOの強化、JMXその他野心的な改変が語られているらしい。

「JavaOne 2008レポート」見えてきたJava SE 7 (2008-5-24)

It took me some time before I realize that the package private is the default setting of all the Java variables and methods when they are set within a class. The modifiers are only public and private and the possibilities of module thing coming in the next version of SDK, I was to reaffirm what those are. The Java tutorials used to write something like the default being public. Yeah, I am sure of that.

金曜日, 5月 23, 2008

iPod touch

iPod touch の操作性はすばらしい。

まず、全画面タッチスクリーンは、画面の大きさが違う。まさに「全画面表示」である。操作に必要な、大きなボタンがオーバーレイで表示され、捜査が終了すると消える。

LANでネットにつなげる強みは大きい。youtube がそのまま閲覧できる。青空文庫、Gutenberg サイトへ飛べば、本がそのまま読める。

iPod touch に、ZiPhone というフリーのソフトを用いると、おなじみのフリーソフトがインストールできる(フリーソフトによる脆弱性で、プラットフォームがWindows程度にオープンになるという経営上の不安がIT記事には散見される)。

サードパーティアプリを使うと、辞書も使える。

日曜日, 5月 18, 2008

OpenOffice 2.4

OpenOffice 2.4 は、日本語変換エンジンを独自で持つらしい。起動と動作が速くなっている。PDF変換すると、画像にするため、フォントの質がよくない。

OpenOffice 2.4

タイ語

タイ文字の子音は、高中低の声調を持つ。サンスクリット語を記述するのに、サンスクリット語の音にあわせて文字をあて、それぞれ声調が異なるためという。しかし、現代タイ語ではすでに音価を変えているため、無気音は中子音、鼻音は低子音というルールしか適応できないらしい。

「iPhoneが日本に上陸する日」

メディアの記事を読んでもまったく業界の戦略は読めず、主導権のありばもはっきりせず、なぜかIT関係者には人材があまりにも少ないというイメージが付着するのは避けたい。

「iPhoneが日本に上陸する日」という本が昨年発行されている。

日曜日, 5月 11, 2008

プログラムを書く人の、さまざまな動機

プログラムを組むことに批判的な記事は、大手メディアの体質によるものである。プログラムを動かして楽しむ読者に対する配慮がまったくなく、その感動を語ることも少ない。コードの巻き方を伝授するくらいなら、プログラムを動かして便利になる生活を語ったほうが、いわば教育的ではある。

キーワードは、「自作アプリ」であり、「カスタマイズ」である。生活に密着した、その人ならではのアプリの開発は、商品価値を高めるばかりではなく、社会的現象として、現代の文化の欠かせない要素である。そして、プロブラム作成は、職業ライターの権威であると同時に、すべての人間に開かれた技術であるべきである。開かれた技術とは、著作権を反故にすることではない。そして、技術を提供するということは、社会参加の重要な行為である。著作権とは、公開の是非を著作権の持ち主が保有するということに他ならない。

ゲームソフトの作者と、カスタム・ソルーションのアプリ作者兼メンテ作業員と、IT技術の解説者、消費者側に立つべき企業の商品開発方針はもちろん異なる。しかし、ここでは、マシンを使う人間はすべて消費者(=ユーザー)であることに留意すべきである。ユーザーがもっとも使いやすい、手になじむ、自分のものと思えるマシンとは、つまり便利に使えて、信頼性があり、そして要求を聞いてくれるアプリがあってこそである。

プログラミング言語でいえば、信頼性とはライブラリの充実と着実な実装であり、使いやすさは情報量に多くの部分を依存する。必要な機能が実装されていないライブラリで、先人と同じ苦労をすることは、少なくとも技術の進歩とは言いがたい。Javaの存在で、モバイル機器を含む多くのプラットフォームで、自由が確保され、生活がこんなにも豊かになることを改めて強調したい。

土曜日, 5月 10, 2008

JavaアプリをPalmのPRC形式に変換して起動する

iPodやiPhoneで6月にもJavaが正式サポートされる可能性があるそうです。早速、モバイル用のJava、J2MEで書いてみました。試みに、Palmマシンで動かしてみましたので必要なツールなどここに書きとめておきます。

5月10日現在、最新のWTK(ワイヤレス・ツールキット)は、WTK2.5.2で、MIDP2.1、CLDC1.1まで使えるようです。しかし、Palmマシンで動かすには、PRC形式に変換しなければなりません。ここでは、WTK1.0.3についてくる PRC Converter Tool を使用しました。

まず、WTK2.5.2を立ち上げて、プロジェクトを作成し、設定(Settings)のAPI Selection をMIDP1.0にします。プログラムが無事コンパイルできたら、ProjectメニューのPackageから、Create Packageを選択し、JARファイルに圧縮します。

次に、WTK1.0.3を立ち上げて、File メニューのUtilities から、PalmOSEmulator を選択します。右上にGenerate PRCという表示がでてきますのでクリックすると、PRC Converter Toolが起動します。JARファイルを選択して、FileメニューからConvertを選び、PRC形式に変換します。

あとは、PRCファイルをPalmマシンに送るだけです。実際に動くまで、必要なファイルを探すのに苦労したのでここに書いたことが役に立てば幸いです。もっとも、ベストな方法であるかどうかの保障は当然ながらありません。

書いてみたアプリはこちら→ Java をモバイル機器で動かす

水曜日, 5月 07, 2008

ボーダフォン、iPhoneを新たに10か国で販売開始

ボーダフォンは6日、新たに10カ国でiPhoneを売り出すと発表

ボーダフォン、iPhoneを新たに10か国で販売開始 (2008-5-6)
3G iPhone日本発売はいつ? (2008-5-7)
3G iPhone発売に対応?--AT&T、6~7月の休暇取得を禁止 (2008-5-7)
3G対応「iPhone」は199ドルか--AT&T価格をFortuneが報道 (2008-5-1)
中国のiPod所有者の88%はiPhoneに興味あり,米Pearl Research社が調査 (2008-4-10)

マスコミで見えてくる政治、というのは、民主主義とは微妙に異なる。マスコミとは、イメージを作り上げる政治である。コンテンツ作成者の、腕の見せ所ではあるが、その「なんとなく」「本格的みたい」な自民党のイメージは、山口補選を注視してきた人間にとっては歯がゆいものである。

政治とは、仲介業でもある。いやがる人間を捕まえて、なんらかの妥協案を強制し、「役に立っている」といいたがるものである。胡錦涛は「おしん」を称賛したという。しかし、「スポコン」モノは、コンテンツ作者の間でも敬遠される傾向にある。

政治といえば、アップルのジョブズ氏はやたらに人気があるという。カリスマ性というらしいが、カリスマ性のない指導者を見慣れている日本人には、まったく驚愕に値する。ソフト配布を一元化するという。CNETに類似する仕組みがあるが、発表されるソフトの多さは、マシンの強みである。ニッチという市場はあるが、先に独占すると携帯アプリ的な収入が見込めるという目算はある。

面白い企画だと思わせるのは、やはり政治であり、コンテンツ作成者の腕がかかっている。iPhone、iPodはすばらしいマシンである。自由に使いこなせれば、消費者としてこれほどのメリットはないだろうと思う。

火曜日, 5月 06, 2008

ProGuard: Javaバイトコードの軽少化・最適化・難読化に

Obfuscator というツールがあり、Java プログラムをコンパイルしたバイトコードの逆コンパイルを防ぐという。最適化も行うという。なかなか完成度の高いツールで、頼りにできそうなありがたいプログラム、ダウンロードはこちら → ProGuard

自作アプリで試してみたところ(Tibetan.jar)、4.2kのものが3.9kに。

ちなみに、Tibetan.jarはチベット語入力アプリです。チベット語を入力して画像に落とせます。使い方は、JARファイルをダウンロードして起動。

java -jar Tibetan.jar

チベット語に興味のある方、どうぞ。

月曜日, 4月 28, 2008

サン、iPhone向けJVMの開発意向をあらためて表明――アップルとの交渉を継続

サン・マイクロシステムズ社は、アップル社に、iPhone向けのJVM開発への協力を要請しているという。

サン、iPhone向けJVMの開発意向をあらためて表明――アップルとの交渉を継続 (2008-4-25)

オープンな規格で広い世界が展開しているプラットフォームのほうが、使い捨てる技術より、労力、投資のわりに見返りが大きいということを、(改めて)強調したい。

国内販売に関して、アップル社との提携の話がいくつかの企業と進められているという。

ヘルプもチュートリアルもなしに、プログラムを書くのは困難を伴うが、Javaなら可能である。言語設計がいいからである。携帯アプリ用のJavaはAPIがいくらか異なるが、スマートな基本設計がプログラムの作成を容易にしている。オブジェクト指向のライブラリ設計には、抽象クラスとインターフェースクラスの構成が、コンポーネントとその動作を別に記述することのできるJavaライブラリのメリットを発揮している。

Sun Java Wireless Toolkit for CLDC 2.5.2
MIDPプログラミング入門

日曜日, 4月 27, 2008

MFCで拡大印刷する

チベットの旗を(印刷紙)4倍にして印刷するにはどうするか。

MFCで書いたので、そのコツをまとめておくと...

ページ数を規定する。印刷する画像のサイズを計算してSetMaxPage(int)で指定する。OnBeginPrinting()などで行う。

CDCのオフセットを指定する。ページ数を取得して、位置を指定する。OnPrepareDC()で行う。

OnDraw()で、CDC::IsPrinting()のときに、印刷用に画像を描画する。

MFCで拡大印刷する Morph-1.0.0.zip Free Download

日曜日, 4月 06, 2008

オンラインでチベット語を入力するアプリ

Javaでチベット語入力用アプレットを作ってみました。

Tibetan Online Keyboard

フォントはTibetan Machine Uni を使っています。

チベット語についてのメモ

チベット文字の表示

ང་རི་པིན་ནས་ཡིན། (日本人です)

木曜日, 2月 14, 2008

Java is the nicest thing to have.

What this administration did was to distort opinions so that the targets will be directed to somewhere that is irrelevant to thier teams. But what we say is true and will be true for the foreseeable future, and the situation will exactly be the same if they do not take actions. Their stores won't motivate the people here to do better
jobs nor to get better skills. They do not have pride in their works. It will take forever to get their job done.

Java is the nicest thing to have.

Here is the Grep.java program I've just written.

Java JDK

日曜日, 2月 03, 2008

Unicode Hex Representation

I just happened to have had some needs to know the unicode hex for certain unicode characters. Here are the javascript that does the conversion from the given unicode string to its hex representation. Please feel to take it from here.

Unicode Hex Representations

土曜日, 2月 02, 2008

ソニー、デジタル一眼「α」初のライブビュー搭載の「α350」など発表

ソニーは、デジタル一眼レフ「α100」の後継機種の「α200」を2月に、ライブビュー付の「α350」を3月に発売すると発表したらしい。

ソニー、デジタル一眼「α」初のライブビュー搭載の「α350」など2機種 (2008-2-1)

フォーカスが早くなり、高感度になる、α350では画素数が1420万画素ということらしい。

土曜日, 1月 26, 2008

To implement Emacs styled "kill-line"

What I found out today is that emacs styled "kill-line" is really a thing that makes you feel you're in fact using the program like a part of you. Just because it will get you to a part of the program, it indeed is going to make you feel better using the software. That kind of application is something that all of us would have to want to program.

To look at what "kill-line" is, try the Java applet editor in my Zhuyin page. The popup menu of the Java applet editor shows the "Cut Line" that is much like "kill-line" and delete the text from where the caret is to the end of the line. "Copy Line" does just as you assume, it selects the portion of line to the end and that part is copied to the system clipboard.

In case you want to know the beautiful Java lines that can accomplish these tasks, here are the codes.


boolean isLineEnd(char ch)
{
return (ch=='\u2029'||ch=='\u2028'||ch=='\u0085'||ch=='\n'||ch=='\r');
}

public int getLineEndPosition()
{
int index=-1;
String text=textArea.getText();
if(!text.isEmpty())
{
int pos=textArea.getCaretPosition();
index=pos;
int len=text.length();
while(!isLineEnd(text.charAt(index)) && ++index<len);
}
return index;
}

void cutLine()
{
int start=textArea.getCaretPosition();
int end=getLineEndPosition();
textArea.setSelectionEnd(end);
textArea.replaceSelection("");
}

void copyLine()
{
int start=textArea.getCaretPosition();
int end=getLineEndPosition();
textArea.setSelectionEnd(end);
textArea.copy();
}

Java is wonderful. >> C/C++ only programmers

Java is wonderful. If anything, I could complain just a few things, like sometimes, they use English that is not entirely correct in the sense that makes me feel that some English speaker is making fun of Japanese. Maybe it is too much of programming on my part (^^;) but anything that is uncertain about the language is just painful. Here is this Java compiler error message. The error message must convey the precise meaning of what is going on in the program -- and not in other part of the world. ^^

Please remove or make sure it appears in the correct subdirectory of the classpath.

木曜日, 1月 24, 2008

Javaで書いたプログラムがもっとも古びず、長持ちする

けったいな意見の持ち主がいて、プログラムを書くと「マイクロソフトに利用されている」という。しかし、プログラムを書くのはプログラマで、プログラムを使うのはユーザーである。同様に、政治的意見を持つのは国民で、政治の結果をもろにかぶるのは市民である。

Javaで書いたプログラムがもっとも古びず、長持ちする。プログラマとしては他に換えがたいメリットがある。95で書いたプログラムは、もう目にする機会もない。

こちら、自作ソフトのページ↓です

Java Programming

月曜日, 1月 21, 2008

Suppose you want to use my OnScreenKeyboard class.

What is good about Java is, as they say -- write once, run anywhere. It means that the everything you write won't be wasted in a way that not only you can have it but also that you have it on your way. Java classes are extendable. Only thing that the programmer must be aware of is to set the classpath right.

In case you want to use my OnScreenKeyboard class, download (easai.jar).
The OnScreenKeyboard class is in easai.util package so import the package to use the class.

import easai.util.*;

...

OnScreenKeyboard keyboard
=new OnScreenKeyboard("Taiwanese",this);
keyboard.init();

OnScreenKeyboard constructor takes a string argument that specifies the language and an ActionListener. This ActionListener is a wonderful thing that makes this component usable for any of the application you wish.
You just have to set the ActionListener to receive all the output from the OnScreenKeyboard application.


public void actionPerformed (ActionEvent e)
{
String command=e.getActionCommand();
String ch=command.substring(0,1);
int pos=textArea.getCaretPosition();
textArea.insert(ch,pos);
}



Please have a look at this application that uses the OnScreenKeyboard class if what is describe above is not entirely clear to you.

/* TaiwaneseApplet.java -- Zhuyin on screen keyboard
*
* Copyright (C) 2008 Erica Asai

* This program is free software;
* you can redistribute it and/or
* modify it under the terms of the
* GNU General Public License
* as published by the Free Software
* Foundation; either version 2
* of the License, or (at your option)
* any later version.
*
* This program is distributed in
* the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without
* even the implied warranty of
* MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the
* GNU General Public License
* for more details.
*
* You should have received a copy
* of the GNU General Public License
* along with this program; if not,
* write to the Free Software
* Foundation, Inc., 59 Temple Place
* - Suite 330, Boston, MA 02111-1307, USA.
*
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import easai.util.*;

public class TaiwaneseApplet extends JApplet implements ActionListener
{
JTextArea textArea=new JTextArea(15,50);
JButton clear=new JButton("Clear");
JButton larger=new JButton("Font Size (+)");
JButton smaller=new JButton("Font Size (-)");
OnScreenKeyboard keyboard
=new OnScreenKeyboard("Taiwanese",this);

public void init()
{
keyboard.nButtons=10;
keyboard.init();

clear.addActionListener(this);
larger.addActionListener(this);
smaller.addActionListener(this);

JPanel control=new JPanel();
control.setLayout(new FlowLayout());
control.add(larger);
control.add(smaller);

JPanel textPanel=new JPanel();
JScrollPane textScroll=new JScrollPane(textArea);
textPanel.add(textScroll);
textPanel.add(clear);

JPanel panel=new JPanel();
BorderLayout layout=new BorderLayout();
panel.setLayout(layout);

JPanel keyboardPanel=new JPanel();
keyboardPanel.setLayout(new BorderLayout());
keyboardPanel.add(keyboard,BorderLayout.CENTER);
keyboardPanel.add(control,BorderLayout.SOUTH);

panel.add(keyboardPanel,BorderLayout.NORTH);
panel.add(textPanel,BorderLayout.CENTER);

JScrollPane scroll=new JScrollPane(panel);
add(scroll);
}

public void actionPerformed(ActionEvent e)
{
String command=e.getActionCommand();
if(0<command.length())
{
if(command.equals("Clear"))
{
textArea.setText("");
}
else if(command.equals("Font Size (+)"))
{
keyboard.resizeFont(2);
}
else if(command.equals("Font Size (-)"))
{
keyboard.resizeFont(-2);
}
else
{
String ch=command.substring(0,1);
int pos=textArea.getCaretPosition();
textArea.insert(ch,pos);
}
}
}
}



The way to set the classpath right is a bit technical. The package name of the OnScreenKeyboard class is "easai.util". As that all the Java classes are organized in the most familiar way of directories, You must store the class file in the directory named easai/util as follows.


+--easai--util
--+
+--your Java application directory


Then compile your Java application with a proper classpath option.


javac -classpath ".;.." *.java


Visit this site (http://easai.00freehost.com/Zhuyin/index.html) to see how it runs.

土曜日, 1月 19, 2008

Character.UnicodeBlock: To obtain the character set

In line with the InputContext article the other day to alter keyboard setting and the font range, I would like to present here the following code to obtain the character set and set the locale for the InputContext.

With the use of Character.UnicodeBlock.of(char), and the returned value of the UnicodeBlock information, the locale can be set -- manually. Suppose you have a JTextArea and the cursor is on the area of the text that you want to add some input.

Bopomofo (Zhuyin) is a set of alphabets that is universally used in Taiwan. In the following code, the character under the cursor is examined and the locale is set to Locale.TAIWAN if it is a Zhuyin character.


int pos=textArea.getCaretPosition();
String text=textArea.getText();
char ch=text.charAt(pos);
Character.UnicodeBlock block=Character.UnicodeBlock.of(ch);
Locale current=Locale.US;
if(block==Character.UnicodeBlock.BOPOMOFO)
current=Locale.TAIWAN;

木曜日, 1月 17, 2008

Sun Microsystems to buy MySQL

What does it mean for us, for Sun Microsystems to buy MySQL? The answer: BB+.

Sun Microsystems' ratings unaffected by agreed MySQL acquisition - S&P (2008-1-17)

But for MySQL users, it's a blessing. It means (probably) formal driver supports, documentation supports and package distribution under Java JDK.

I use MySQL with a jdbc driver and from Java application, DB access is as easy as ever. Just like Java. Here is how to open a database connection.


Class.forName(driver).newInstance();
connection = DriverManager.getConnection(openDBString+database,user,password);
statement=connection.createStatement();


I say, Java is wonderful. How about this? To browse through the database and print out whatever satisfies the condition, the following does the job.


ResultSet rs = statement.executeQuery("SELECT * FROM "+tableName+condition);
ResultSetMetaData meta = rs.getMetaData();
int nCol=meta.getColumnCount();
while (rs.next())
{
String buf=template;
for(int i=1;i<=nCol;i++)
{
String columnName=meta.getColumnName(i);
System.out.println(columnName,new String(rs.getBytes(i),"UTF8"));
}
}


I say, Java is wonderful.

...

I will declear new and then they must delete it. > obsolete programmers

But it is new you know.

...any problems? ^^

月曜日, 1月 14, 2008

Select and set a locale for InputContext from the available locales list

Yesterday, I wrote in this blog about InputContext and how to set the language environment. Here are some more codes for listing up all the available languages, from which you can select the Locale and set it for the InputContext for your application.


Locale locales[]=Locale.getAvailableLocales();


A word of caution is that not all listed locales are available for InputContext -- of those, only that has both the language code and the country code can be set to use. But once you have the array of strings for the available locales, this input dialog will do the job nicely to put all locales in scrollable pane and wait for user input. Here, names is the string array that contains the list of locales.


Object selectedValue = JOptionPane.showInputDialog(null,
"Select a locale", "Language",
JOptionPane.INFORMATION_MESSAGE, null,
names,names[0]);


Perhaps it gets more clearer if you look at the code so I put it right here. Here all the locales that only have either the country code or the language code are filtered out. This is what this following code does: the list of locales will be presented and then when a value is selected, the locale will be set for the InputContext.

As of 2008-1-16, the code has been modified so that the list will be sorted out in alphabetical order.

   public void langList(JMenuItem mi)
{
int x=mi.getX();
x+=mi.getWidth();
int y=mi.getY();
Locale locales[]=Locale.getAvailableLocales();
String names[]=new String[locales.length];
String languages[]=new String[locales.length];
String countries[]=new String[locales.length];
int index=0;
for(int i=0;i&lt;locales.length;i++)
{
languages[index]=locales[i].getLanguage();
countries[index]=locales[i].getCountry();
if(!languages[index].isEmpty() && !countries[index].isEmpty())
{
names[index]=locales[i].getDisplayName();
index++;
}
}
int nLocales=index;
int sortedIndex[]=new int[nLocales];
String sortedNames[]=new String[nLocales];
for(int i=0;i&lt;nLocales;i++)
sortedIndex[i]=i;
for(int i=0;i&lt;nLocales;i++)
{
for(int j=i+1;j&lt;nLocales;j++)
{
if(0&lt;names[sortedIndex[i]].compareTo(names[sortedIndex[j]]))
{
int t=sortedIndex[i];
sortedIndex[i]=sortedIndex[j];
sortedIndex[j]=t;
}
}
}
for(int i=0;i&lt;nLocales;i++)
{
sortedNames[i]=names[sortedIndex[i]];
}
if(0&lt;nLocales)
{
Object selectedValue = JOptionPane.showInputDialog(null,
"Set Language Environment", "Language",
JOptionPane.INFORMATION_MESSAGE, null,
sortedNames,sortedNames[0]);
int i=0;
if(selectedValue!=null)
{
while(!((String)selectedValue).equals(names[i]) && ++i&lt;nLocales);
if(i&lt;nLocales)
{
Locale newLocale=new Locale(languages[i],countries[i]);
inputContext.selectInputMethod(newLocale);
}
}
}
}

日曜日, 1月 13, 2008

InputContext and IME

I had such an unpleasant time looking through pages about IME -- as if everybody is using languages that use alphabets only. But for the most of us who use not only alphabets but also other scripts, here are some pieces of advice. Just a few lines -- but you can control IME from Java applications.

InputContext inputContext=null;
inputContext=frame.getInputContext();
inputContext.selectInputMethod(Locale.JAPAN);

This turns on Japanese IME. If you alter the locale to Locale.TAIWAN, or instantiate the class with language and country codes as:
Locale locale=new Locale("hi","IN");

then you can turn on the IME of your choice from your Java application.

土曜日, 12月 08, 2007

「リンクしてあるテキスト」をちりばめたマップ

最近ウィキペディアを見ていて気づいたのは、メディアの種類が増えたこと。内容の充実と共に、投稿されている音声ファイルや動画が、ネットメディアのよさをフルに生かしている。もちろん、ウィキの最大のメリットは、テキストにリンクが張られていて、気になるキーワードを深く掘り下げて検索できること。

そこで発見したのは、この「高雄市」のページにある「リンクしてあるテキスト」をちりばめたマップ。地図の画像の上に、テキストが重ねてあって、リンクが張ってある。HTMLをこのように使うと、クリッカブルマップが自然にHTMLで表現できることに、いたく感動したので、さっそくアプリを作ってみました。

なにって、このアプリ。画像を読み込んで、自由な位置にテキストを置いて、リンクを張る。これを、HTMLのコードとして出力すると、クリッカブルマップをどんなページにも埋め込めるモノで、LabelMapというプログラムを起動したら、File|Open で画像を読み込む。マウスで好きな位置をクリックして、テキストを入力。右クリックでポップアップメニューの、Set Link でURLアドレスを打ち込んで...という作業を繰り返して、書きたいテキストをすべて入力。あとは、File|Export to HTML を選択すると、該当するHTMLコードが表示されます。あとは、編集するなりコピーするなり、HTMLのページに埋め込んで利用します。

ダウンロードはこちらから。

LabelMap

日曜日, 12月 02, 2007

IEのツールバーを作成する

IEでは、レジストリで設定すると右クリックでアプリを登録できるが、セキュリティのためかメニューにはその機能がない。右クリックを禁止するサイトでスクリプトを走らせるには、新たなメニューバーをコンパイルしないとならない。バランスの悪い対処法といえる。

とつい思ったのだが、マイクロソフト社公式サイトでは、KBBARなるサンプルコードが置いてある。それを用いると、DLLの形式で、ツールバーが作成できる。

多少つかえたのが、COM関連のクラスであるが、ここに、ページのURLを取得するコードを記述する(エラー処理は省略)。

CComBSTR url;
m_pBand->m_pIE->get_LocationURL(&url);

さらに、選択されたテキストを取得するコードを以下に示す。

IHTMLDocument2 *pDoc;
m_pBand->m_pIE->get_Document((IDispatch**)&pDoc);
IHTMLSelectionObject *pObject;
pDoc->get_selection(&pObject);
IHTMLTxtRange *pRange;
pObject->createRange((IDispatch**)&pRange);
CComBSTR selectedText;
pRange->get_text(&selectedText);

これを走らせると、メニューではなく、ツールバーからDLLを起動できる。

月曜日, 11月 26, 2007

フランスで海賊行為者のウェブアクセスを禁じる新制度

フランスで、海賊ソフトを取り締まる新制度が発表されたという。独立機関が、ネットユーザーに警告し、アカウントを停止させる可能性があるという。引き換えに、デジタル著作権管理(DRM)による保護をはずし、機種間でのプロプラエタリーな規格を禁じるという、過激な制度である。

違法ソフトの摘発は、企業などで使われている海賊版を摘発することで可能といえるが、個人に対し、違法MP3ファイルのダウンロードを検出することは現在のところ不可能である。この際、違法ファイルの保持が顕著、という指摘でさえ不可能である。ごく一部の対象を取り締まることは、法の下の平等を保障しない。つまり、ある個人を違法ソフトで摘発すると、法律の恣意的な適用となる可能性が高い。

効果的なのは、個人相手ではなく、供給側に規制をかけることである。違法ファイルを置くサイトへの警告は、少なくとも日本では行われている。中国の違法DVDの販売は、中国国内での著作権をも損なうという主張がある。訪中しているサルコジ仏大統領は、中国の著作権について言及したという。中国側の反応は伝えられていないが、効果を期待したい。

フランスで海賊行為者のウェブアクセスを禁じる新制度 (2007-11-26)
フランス政府が、オンラインの海賊行為対策のため特別機関を設置へ (2007-11-26)
訪中のサルコジ仏大統領、人民元上昇を促す (2007-11-26)

火曜日, 11月 20, 2007

米アマゾン、電子書籍参入を発表・新聞や雑誌も入手可能

アップル社の iPod の成功は、デザインや機能もさることながら、魅力的なコンテンツを手ごろな価格で便利に入手できる、という「社会的要因」によるもの――という認識が、電子機器メーカーの経営者陣にあるかどうかは知らないが、他のMP3プレーヤーと「競争にならない」市場を作り出したアップル社の目覚しい発展は、技術を持つ各社が消費者の利便性を考えて「もう少し政治的に連動することができたら」可能である市場の開拓への感慨をもたらすものである。

このたび米アマゾンは、電子書籍に参入するという。有償で電子ブック「キンドル」を販売し、コンテンツをネット配信するという。価格設定は、書籍で9.99ドル、新聞が月5.99~14.99ドル、雑誌が月1.25~3.49ドル。OEMはHon Hai Precision Ind. Co., Ltdといい、ネット回線のキャリアはSprintだという。創業者でCEOのジェフ・ベゾス氏は、「思いついたら60秒」で本を入手できるメリットを語っているという。

ここで、電子化された書籍など、素直にデスクトップで読めばいい、というナイーブな意見の持ち主には、著作権がらみのコンテンツの利用法についての考慮を要請するものである(笑)。プロの情報を、正規ルートで入手する方法というのが、現在のインターネットでは実現していない現状があるからである。そして、さらに価格設定を含め、利便性を最優先し、著作権保護をも可能にする米アマゾンのマーケティング手法と、iPod の成功を考えて欲しい。

電子ブックで先行するソニーなどは、ネットからダウンロードして「貸本」が読める、「リブリエ」を発売していた。米国では、電子ブックリーダーとして現在も販売している。性能比較しているサイトがあるが、技術屋の物悲しさを覚えるように思う。リブリエを実践で使う利用者にとっては、投資してもいいと思わせる有益な情報が、支障なくタイムリーに入手できることが、デザインや機能より優先する、最大の懸念であるからである。

トラブル・フリーな既製品をブラックボックスで販売するのは、日本企業の得意技とされている。しかし、そこには消費者の利便性という決定的な要素が軽視されているように思える。消費者の利便性の本当の意義とは、企業による人権侵害にも似たサービスの強要を言うのではなく、あくまで「社会的」なメリット、最大多数の幸福を目指したものだという面を強調したいものである。

アマゾン・コム、書籍用の電子端末発売 (2007-11-20)
米アマゾン、電子書籍参入を発表・新聞や雑誌も入手可能 (2007-11-21)
Amazonの電子ブックリーダーKindle公開、399ドル (2007-11-18)
Front company and OEM for Amazon Kindle is… (2007-11-19)
Amazon Kindle vs. Sony Reader (2007-11-19)

火曜日, 11月 13, 2007

中国人ジャーナリスト逮捕事件、ヤフーが和解を決定

米ヤフーは、中国当局に提供した情報によってジャーナリストが拘束された訴訟で和解を決定したと発表したという。国境なき記者団によると、ヤフーが中国当局に提供した情報により、「ネット上の体制批判者」とされる少なくとも4人が禁固刑を受けているという。

中国人ジャーナリスト逮捕事件、ヤフーが和解を決定 (2007-11-14)

木曜日, 11月 08, 2007

中国当局への情報提供、米公聴会でヤフーCEOに批判

メロドラマのようだ、と思ったのは、ヤフーに対する米上院委員会の茶番である。ちょっと面白いので、リンクをたどって見てみると、「いやがらせ」というのは実は法的処置をしなくてすむように、米国IT企業への弁護だということが分かる。ほら、われわれも黙ってみてるわけじゃない、と有権者に訴える目的の、「金の絡まない」(=企業にとっては時間つぶし以外の意味を持たない)制裁である。

中国当局への情報提供、米公聴会でヤフーCEOに批判 (2007-11-8)

火曜日, 11月 06, 2007

画像を壁紙に設定する

コードを直接ネットに載せると、「恥をさらすようだ」という意見が(笑)あるが、くだらぬことに時間を割きたくないプログラマのために、画像を壁紙にするコードを載せておく。

あまり誇れるコードでもない、というのは、情報がなくてBMPの一時ファイルにする方法しか見つからなかったせいで、ある画像を画面の大きさにして壁紙に設定するだけのコードである。

なにかの役に立つかどうか分からないし、「いちおう」などと照れる必要もないだろうが、以下がそのコードである。

void CMyView::Setasdesktopbackground()
{
CImage image;
int screenWidth=::GetSystemMetrics(SM_CXSCREEN);
int screenHeight=::GetSystemMetrics(SM_CYSCREEN);
int bpp=m_pImage->GetBPP();
if(image.Create(screenWidth,screenHeight,bpp))
{
HDC hDC=image.GetDC();
SetStretchBltMode(hDC,HALFTONE);
m_pImage->Draw(hDC,0,0,screenWidth,screenHeight);
CString fileName=L"c:\\Windows\\Web\\Wallpaper\\background.bmp";
HRESULT res=image.Save(fileName);
image.ReleaseDC();
if(!FAILED(res))
SystemParametersInfo(SPI_SETDESKWALLPAPER,NULL,
(PVOID)fileName.GetBuffer(),SPIF_UPDATEINIFILE);
}
}

日曜日, 11月 04, 2007

MFC:プリンタ印刷をカスタマイズ

先日、MFCライブラリを使ってプリンタ印刷をカスタマイズする機会があったので、気づいたことを書いておこうと思う。

MFCでは、CScrollViewなどCView派生クラスを使えば、印刷はCView::OnFilePrint()をメニューに登録し、呼び出すだけで印刷ができる。この際には、OnPreparePrinting()を再定義してDoPreparePrinting()の一行を記述する必要がある。CView::OnFilePrintPreview()を使えば何を変更することもなくプレビューができる。

縦横(Portrait/Landscape)など印刷する紙の向きなどカスタマイズする際には、CWinApp派生クラスで定義されている、m_hDevModeを変更する必要がある。m_hDevModeは外部からアクセスできないため、CWinApp派生クラスで値を変更せねばならない。つまり、このようなコードを書かねばならない。

void CMyApp::SetOrientation(short orientation)
{
CPrintDialog printDlg(FALSE);

BOOL bRet=GetPrinterDeviceDefaults(&prinDlg.m_pd);
if(bRet)
{
DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(m_hDevMode);
pDevMode->dmOrientation=orientation;
::GlobalUnlock(m_hDevMode);
}
}

CView派生クラスでは、DoPreparePrinting()を呼び出す前にCWinApp派生クラスで定義された上記のSetOrientation()を呼ぶと、紙の向きがカスタマイズできる。

BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo)
{
int imageWidth=m_pImage->GetWidth();
int imageHeight=m_pImage->GetHeight();

CPhotoAlbumApp* pApp=(CMyApp*)AfxGetApp();

short orientation=DMORIENT_PORTRAIT;
if(imageHeight<imageWidth)
orientation=DMORIENT_LANDSCAPE;

pApp->SetOrientation(orientation);
return DoPreparePrinting(pInfo);
}

上記のコードでは、m_pImageで指定されているCImageの縦横の長さに応じて、デフォルトでの紙の向きが指定される。

流れとしては、OnFilePrint()では、OnPreparePrinting()が呼び出され、OnPreparePrinting()を再定義してDoPreparePrinting()を呼び出すと、そこではDoPrintDialog()が呼ばれ、その際にはCWinApp派生クラスのm_hDevModeが指定されるので、OnPreparePrinting()においてDoPreparePrinting()の前にm_hDevModeを指定することになる。

火曜日, 10月 30, 2007

ヤフー検索には「アダルトフィルタ」がついている。

ヤフー検索は、グーグルの向うを張って努力しているらしい。言語指定がグーグルより正確であるのみならず、ヤフー検索には「アダルトフィルタ」がついている。高・中・低とフィルタのレベルを指定するようになっている。デフォルトでは中になっている。

言語指定がいいかげん、というのは、言葉に思い入れのある人間には重大な欠陥で、「我輩は猫である」の英訳を考えれば分かるように、翻訳で失われる情報は考えられているよりも大きい。「天下り」の英訳はgolden parachuteだという。パラシュートでは、失われる血税のにおいが伝わらない。

天下りは、恩義の貸し借りではなく、組織だった官僚と業界との癒着である。現職時代に予算を約束し、退職後に天下って団体から退職金その他で億円を稼ぐ。恩義を返す「必要」はないので結局は組織的な癒着、賄賂である。

防衛省、613人天下り 山田洋行含む242社に (2007-11-6)

ところで、IE7のグーグルバーには、グーグル・サジェスト機能がデフォルトではついていない。

日曜日, 10月 28, 2007

ふと気づいてみると、IE7は遅い。

ふと気づいてみると、IE7は遅い。いつのまにか、FireFoxのほうがロード時間が短くなっている。一瞬の真っ白画面がなんともいえない。もっとも、マイクロソフトのサイトは、どのブラウザを使っても遅い。

しかし、まだシェアはあるはずだ。と思うので、右クリックでJavascriptを走らせるのを書いてみた。レファレンスなどこのへんにある(microsoft.comsxlist.comAdding Entries to the Standard Context Menu)。

マイクロソフトのこのサイト。リンク切れなどあってしようもないサイトである。っと、驚いたことに、リンク切れで戻ってみると、リンクタグが失せている。あきれ果てたサイトである。ないリンクには飛べない。

結局、スクリプト探しに一日はつぶさずにすんだが、数時間は優にかかった。なんてことだ。Javaで標準化されていれば、数分で終わったものが、Javascriptであるだけでこれほど手間がかかる。変数型を指定しないJavascriptのどこがいいのか理解できない。

とぶつぶついいつつ書いたのがこれ。

<script language="JavaScript">
var win = external.menuArguments;
var doc = win.document;
var txt=doc.selection.createRange();
txt.execCommand("Copy");
</script>

書いたというほどでもないが、このへんをClipboard.htmlなどに放り込んで、レジストリに指定してやると起動する。場所はここ。HKEY_CURRENT_USER\Software\Microsoft\Internet ExplorerMenuExt

こんな記事を発表したくはなかったのだが、なにやら書かねばならない「圧力」を感じるので、仕方がない。ビルマの鉱山労働者の気分である。書かせる動機がカネではないと、どうしても強制労働になる。気のせいだといってしまえばそれだけだが、義務化された強制労働を美徳とするのは、確かに社会正義とはいえない。

しかしまあ、なんでJavascript関連サイトには、いやらしいアドとか多いんだろ。やめてほしい。とさらにぶつぶつ言いながら書いたのが、改変したテキストをクリップボードにコピーするスクリプト。

<textarea id="holdtext" style="DISPLAY: none"></textarea>
<script language="JavaScript">
var win = external.menuArguments;
var doc = win.document;
var txt=doc.selection.createRange();
holdtext.innerText = txt.text+"a";
textarea = holdtext.createTextRange();
textarea.execCommand("Copy");
</script>

もうひとつ気づいたことといえば、このブログサイトでは、タグがそのまま表示されない。HTMLとして解釈されるので、タグはすべて&lt;ではじめなくてはならない。

しかし、マイクロソフトのマニュアルは、以前より丁寧に記述してあることに気づいた。

var url = win.location.href;

この指定で、URLを得ることができる。すばらしい。

最後にもう一言。グーグル検索だと、言語が正確に指定できない。ヤフー検索のほうが正確である。それに、検索エンジンに、ドメインを排除するオプションがあってしかるべきだと思う。

土曜日, 10月 27, 2007

FireFox のアドオンを削除する

今日、ちょっとショッキングなことに、FireFoxのアップデートがてら、アドオンが使えなくなって、さらに悪いことに別のアドオンを導入すると動作が不安定になって使えなくなった。なぜか、Mouse Gesturesの設定が手動になっており、なぜだ、と思いつつAll-in-Oneを導入すると本体が立ち上がらなくなった。起動したとたんにクラッシュする。

なにが一番ショックだったかといえば、そこで安易にも自分がIE7を使い始めたことにある。IE7用のMouse Gesturesはちゃんと存在する。タブ機能もついている。なに不自由なく競争相手のIE7が使えたことに、反マイクロソフトだかなんだかのガッツを失った自分がいる。

なにも、苦労するために人生を生きているわけじゃない。なぜIE7を使っちゃいけないんだ、と思えば、FireFoxが新しくて機能が新鮮だったころを思い出す。あのころは、やる気のないIEのシェアがなぜ大きいのか理解できず、よろこんでFireFoxを宣伝したものである。確か、プロモーションもどきのバナー運動などあった。

この一連のはなしの落ちは、「アドオンを手動で削除」というつまらない結末。なにがおもしろくて、このコンピュータを使いながらの手動作業。ディレクトリを探して(ホームディレクトリのApplication Data|Mozilla|FireFox|Profilesの下のディレクトリ中のextensionsにある)削除して問題解決。(失礼しました)

水曜日, 10月 24, 2007

リチャード・ストールマン講演会

FSFの創始者であるストールマン氏の講演が秋葉原で開催され、講演に行かれた方のブログがアップされているので、興味深く読ませていただいた。

消費者の利便性が、本当の自由(フリー)を意味する、というストールマンの主張は、マイクロソフトのセキュリティーより利便性を優先する方針を連想させる。マシンよりも消費者優先の方針は、企業倫理として認識してもらいたいものである。DRMが視聴者の利便性を損なうとして、DRMフリーの曲が、アップルから高めの値段設定で販売されているという。

ストールマンはGPLライセンスのソフトが、私企業によって利用され、かつソフトの改変を不可能にする「Tivo化」に反対しているという。GPLライセンスが著作権を守り、私企業による悪用を防ぐものだという主張である。その際の著作権の定義は、他のGPLライセンスの著作物を自由に利用する権利であると同時に、企業がGPLライセンスの著作物を利用してパテントとすることを防ぐことを可能とする権利である。

アップル、DRMフリーの音楽配信「iTunes Plus」をスタート (2007-5-30)
[雑記]リチャード・ストールマン講演会 (2007-10-24)
リチャード・M・ストールマン(2007-10-24)

日曜日, 10月 21, 2007

ストールマン氏、1年ぶりの来日が決定:フリーソフトウェア運動を語る

あのリチャード・ストールマンが来日するという。

著作権によってコードが読めず、特許によって技術が使えない、著作権と特許によってぼろ儲けする企業は究極的にプログラマには利益を還元しないと主張し、FSFという組織を立ち上げ、GNUというプロジェクトで著作権も特許も主張しないソフトの一群を「公共のため」に提供している人物である(と理解している)。

公共のため、という部分で、(米国で)共産主義と罵られ、あるいはサポートと関連書籍で儲けるというビジネスモデルとして説明されることがある。「公共のため」のソフト、にまつわる、共産主義的な官僚主義、計画経済的な弊害は、実際のところ、日本で見ることができる。税金泥棒が、年間予算一千億円の総産研で、「フリー」として使われないソフトをやる気のない態度で配っていたり、政府が発表されない金額でフォントを買い上げて配っていたり、予算を数億かけて使われないフォントが開発されたりする。税金は、確かにフリーではないとここで特に強調したい。

しかしながら、プログラマのコミュニティーは存在し、ストールマンの主張した「コードを自由に提供できる」環境が、人々の生活を向上させていることは、恩恵を受けた人間として、はっきり断言できる。情報を享受・提供できる場の存在が、ソフトを発展させ、プロジェクトを成功させることが、資本主義の形態をとらずに可能であることは、その形態が万能ではないことを示している。人類の共有財産、あるいは事実上のコミュニティーの私有財産、という形態が、より適した分野が存在するといえる。

さまざまな伝説の付きまとう個性的な人物で、このたびの来日では、秋葉原、専修大、銀座で講演を行うという。銀座での講演は、全国情報サービス産業厚生年金基金(JJK)会館で行われ、特定非営利活動法人フリーソフトウェアイニシアティブ理事長が解説するということを特記したい。「フリーソフトウェア運動とは何か、なぜフリーソフトウェアは我々にとって重要なのか、今後どのように展開していくのか」という常に存在する問いかけに、議論が深まることが期待される。

ストールマン氏、1年ぶりの来日が決定:フリーソフトウェア運動を語る (2007-10-2)
リチャード M. ストールマン氏 特別講演会
リチャード M. ストールマン講演会 〜 フリーソフトウェア運動とGPLv3の現在〜

Election means voters must vote upon a set of rules that applies to EVERY SINGLE ONE OF US. Setting an arbitrary delegate and telling citizens to increase taxes is not the way democracy goes. Our taxes are on-going problems of ours. How much we have to pay this year depends on how those bureaucrats set them.

火曜日, 9月 11, 2007

ビデオカメラ、赤外線モード



デジカメの動画撮影機能が手軽で、久しくビデオカメラを使う気になれなかったが、最近、Handycam を手に入れて気に入っている。最近のビデオカメラには、赤外線モードがついており、暗闇でも撮影ができる(写真)。面白いことに、ソニーのHandycamの液晶画面は、タッチスクリーンであり、指定した場所に焦点が合うようになっている。難点といえば、miniDVなど機械部分があると、バッテリーの持ちがよくない。

金曜日, 8月 31, 2007

家電リサイクル料金

経産省は、家電リサイクル法の対象として、薄型・プラズマテレビと衣類乾燥機を加える予定という。

現在リサイクル法で指定されている家電4品目(エアコン、テレビ、冷蔵・冷凍庫、洗濯機)については、リサイクル料金を引き下げる予定という。

新たな動きとして、アメリカにおいて、ソニーはソニー製品の回収を自社で行うとし、他社の製品も有償で受け付けると発表している。

薄型テレビ、衣類乾燥機も対象に=家電リサイクルで-経産・環境省 (2007-8-31)
経産・環境省、家電リサイクル料金引き下げ要請へ (2007-8-21)
ソニー、米で自社製品を無償リサイクル (2007-8-17)

台湾エイサーはブルーレイ陣営に・次世代DVD規格

ゲートウェイ買収で話題となったエイサーは、次世代DVD規格として共にブルーレイ・ディスク(BD)を推進すると発表。

エイサーがゲートウェイ買収で合意、レノボ抜きPC販売世界3位に
台湾エイサーはブルーレイ陣営に・次世代DVD規格 (2007-8-31)

月曜日, 8月 27, 2007

デジタル一眼レフ 上級機種、争い熾烈 ニコン、キヤノン新製品

Sony DSC-P150

手持ちのデジカメの画質が良く、グレードアップする方法に迷っている。他のコンパクトデジカメ、コンデジと比較しても格段にいい。デジタル一眼レフにするかどうか。価格が高く、製品として後ろ向きなため、踏ん切りがつかない。コンデジのほうが使いやすく、画質もモニタで見るとそこそこ、ではしかたがない。

デジタル一眼レフ 上級機種、争い熾烈 ニコン、キヤノン新製品 (2007-8-24)
デジタル一眼レフカメラ

日曜日, 8月 26, 2007

ロシアの廃線探検2

ヒマネタをあつめたGigazineというサイトがあり、一部で「大うけ」だという。

ロシアの廃線探検2
任天堂のWii、ついに販売台数でXbox360を抜き世界一へ

資本主義の発展は、要するに金に色がないことに基づく。どんなにばかげて見えても、個人の選択で投資する、購買することで計画経済をこえる方向性が確保される。税金に寄生するプログラマに、「ソフト開発計画」でアジアのLinuxを作って公開すると、Windowsの利便性は、得られない。

木曜日, 8月 23, 2007

MFCで、ファンクションキーの入力を検出する

MFCでフレームが分割されていると、ファンクションキーなどの入力が、フォーカスのあるウィンドウにいかない。ファンクションキーは、アクセレレーターキーとして、リソースでIDを指定する。フォーカスのあるウィンドウを判別するには、以下のような手段がとれる。

CWnd *pWnd=this->GetFocus();
if(pWnd->IsKindOf(RUNTIME_CLASS(CJukeBoxView)))
...
else
...

日曜日, 8月 19, 2007

アイスランド語、イヌクティトゥット語

アイスランド語は、9世紀の北欧語をよく保存するという。ノルウェー語(ブックモール、ニューノルスク)、スウェーデン語、デンマーク語に近い言語で、ドイツ語、英語に近い単語も多い。3性4格、不定形と定形がある。発音面でいうと、歯擦音が多く、穏やかな印象を与える。

アイスランド語には、英語、ドイツ語などと類似する格変化があり、属格でsつく。過去形でt/ðがつく。面白いのは、frá, aðなど英語の前置詞に似たものがあり、I have (to have)がhef (hafa)となる。

CDエクスプレス アイスランド語

アイスランドは、人口30万の漁業立国であり、観光客は150万人にものぼるという。一人当たりGDPは37000ドルを超え、自動車保有台数が日本より多い。漁業権がらみでEUに加盟はせず、独自通貨を持つという。NATOに所属し、去年米軍が撤退している。沿岸警備隊には150人が勤務するという。輸出のうち半分以上を水産品が占め、水力、地熱などのエネルギーをアルミ精錬に利用するという。

アイスランド語でアイスランドは「イスラント」(Ísland)であり、島のことは「エイヤ」(eyja)という。

フェロー諸島には48,219人、グリーンランドには、56,385人が居住し、それぞれデンマーク語のほか、フェロー諸島ではフェロー語、グリーンランドではカラーリット語(イヌイット系)が使用される。

イヌクティトゥット語のフォントはヌナブト準州政府制作のフォントページからダウンロードできる。

水曜日, 8月 15, 2007

NHKのラジオ語学講座

NHKのラジオ語学講座は、テキストが有料でオンラインで読めない上、さらにAMラジオでないと放送を聞くことができない。iPod などMP3プレーヤーで聞くにしても、ラジオ放送を録音し、何らかの方法でダウンロードしなければならない。

公共放送である英BBCのサイトでは、スコットランド・ゲール語、ウェールズ語を含めて、言葉の学習用のサイトに自由にアクセスできる。

Learning English

スコットランド・ゲール語は、アイルランド語と同じ起源を持つ、ケルト系の言語だという。

Beag air Bheag
スコットランド・ゲール語
Scottish Gaelic

金曜日, 7月 20, 2007

オーストロネシア諸語

オーストロネシア諸語は、インドネシア語、マレー語、フィリピノ語、ハワイ語、ミクロネシア、ポリネシア、メラネシア、マダガスカルのマラガシ語(Malagasy)語を含む、マダガスカルからイースター島までの地域で使われる言語からなる語族である。大きく分けて、東オーストロネシア諸語(オセアニア諸語)、西オーストロネシア諸語に分類される。オセアニア諸語は、タヒチ語、トンガ語、フィジ語、モトゥ語、トラック語を含む。西オーストロネシア諸語は、タガログ語、マレー語、インドネシア語、ジャワ語、チャモロ語(北マリアナ諸島)、パラオ語(ベラウ)を含む。台湾のオーストロネシア諸語の帰属は、議論が分かれているという。

言語年代学(glottochronology)によると、東オーストロネシア諸語は、紀元前2、3000年から、西オーストロネシア諸語は紀元前1000年から分化したとされている。Otto Dempwolff によると、原始オーストロネシア語は、母音をaieu、子音をptTck bdDjg q mnnyng lrR hszZ wyとする CVCVC, CVCCVC形の語を持つ言語であるという。Andrew Pawley, Robert Blust によると、名詞から動詞へ派生、前辞、後辞によるアスペクトや態の指定、音節の繰り返しによる表現、否定詞、形容詞、数詞が動詞として使用される、人称代名詞が主格、所有格、目的格をとり、1人称複数に、聞き手を含むものと含まないものが区別されること、などを特徴とするとしている。

台湾のオーストロネシア諸語は、北部と中央部のものに大別され、北部では、アタヤルAtayal語、セーディクSeedik語、サイシヤットSaisiyat語が、中央部ではアミAmi語、パイワンPaiwan語、ブヌンBunun語、サオThao語などが使用されているという。カナブKanabu語、サアロアSaarpa語、ツォウTsou語などは、帰属が不明という。

西オーストロネシア諸語のいくつかに存在する、そり舌音は、サンスクリット経由だという。母音は、マアニャン語、マラガシー語で4つ、マライ語、バリ語で6つ、スンダ語で7つ、ジャワ語で8つあるという。

東インドネシア諸語は、マカッサル海峡からフォーヘルコップ半島にかけて使用されている言語で、ブギBuginese語、シジャイSidjai語、ドゥリDuri語、マンダルMandar語、ケンダリKendari語、ムナMuna語、ブトゥングButung語、シッカSikka語、エンデEndeh語、ソロルSolor語、ハヴHavunese語、スンバSumba語、アンボンAmbon語、ブリBuli語、ミニャフインMinyafuin語、ビガBiga語、アスAs語、ボンベライ半島・セラム半島の小言語群などが含まれるという。サレラ湾以西は帰属が不明という。

このような言語に対する資料はネット上に少ないため、英語での表記が欠かせない(検索のため)。表記のゆれがあり、マダガスカル語と、マラガシー語、マラガチー語は同じものである。

講座言語 第6巻 (6) (単行本)

月曜日, 7月 16, 2007

ハフマン符号

ハフマン符号という、「文字を数値化する」アルゴリズムがある。数値化する際に、01で表される符号の長さを「最大限に短くする」アルゴリズムである。符号の長さには、理論値というものがあり、その長さは情報の複雑さを表すエントロピーによって制限される。ハフマン符号化アルゴリズムでは、その最短の符号を計算することができる。

ハフマン符号化アルゴリズムは、通常、ツリー(木)と呼ばれる図で表されることが多い。文字の出現頻度によって、ツリーを構成していくという形をとる。この場合のツリーとは、二分木と呼ばれるもので、上からたどっていくと、「葉」の位置に配置された文字の符号が表現できるというものである。



この図はミシガン大学のサイトからお借りしたものであるが、頂点から末端まで、0・1と書かれた枝を追っていく。最終的に、Aにたどり着くまでには「100」、Eでは「0」、Iは「1011」、Oで「11」、Uで「1010」と、符号がツリーによって表現できていることが分かる。この符号(100,0,1011,11,1010)は、AEIUOの各文字を、重複なく表現できており、途中でどの文字であるか分からなくなる、ということがなく、一意に表すことができる。そして、この符号は、可能な限りでの符号のうちで、もっとも短いものである。

このツリーを構成するには、文字の出現頻度、つまり文字の使われる確率によって、ツリーの「バランス」を決めていかねばならない。すべての文字が、同じ確率で出現するのであれば、すべて同じ長さの符号を表すツリーを構成する。分布に偏りがあれば、よく使われる文字を短く、出現頻度の低い文字を長く符号化するように、ツリーを構成する。

ツリーの構成方法を正確に述べると、出現頻度の低い文字を「分岐」の左右に配置するということを繰返す、というものである。まず、出現頻度の低い文字を2つとり、ツリーを構成する。そして、そのツリーの合計値を新たな要素の確率値とし、再び、出現頻度のもっとも低い要素を2つとり、ツリーを構成する。このようにツリーを構成すると、常に出現確率の低い文字の符号が長くなる。

なぜなら、確率の低い文字は、先にツリーを構成しており、新たに出現確率の高い文字を加えた場合、その符号の長さは常に長くなっていく。だから、上段の文字の出現確率は、下段の文字の出現確率よりも、常に高い。新たに選択された文字は、ツリーより短いか同じ長さの符号を持つ。なぜなら、出現確率の低い要素が先にツリーをつくるからである。

ハフマン符号化には、静的アルゴリズムと、動的アルゴリズムがある。

火曜日, 7月 10, 2007

エネループ




エネループという充電式の乾電池は、放電しないという。使い捨ての乾電池に比べ、充電式の乾電池が、「すぐ使えなくなる」ということがない、という。実際に商品のパッケージをあけて使ってみると、乾電池をそのまま使用することができた。

エネループ

エネループは人気商品らしく、ギフトセットまである。電圧が1.2Vと通常のアルカリ乾電池より低いため、使えない機器がある。純国産の製品だという。

エネループ/パナループ(緑パナ) 性能試験

日曜日, 7月 08, 2007

書籍検索サービス「Googleブック検索」、日本語版開始

書籍の全文検索が可能な、「Googleブック検索」が7月5日開始されたという。検索結果は、全文や一部で表示される。英文のほうが充実しており、「All art is quite useless.」と検索すると、「The Picture of Drian Gray」の全文が読める仕組みになっている。

書籍検索サービス「Googleブック検索」、日本語版開始 (2007-7-5)
グーグルと慶應義塾 蔵書検索で提携 12万冊、世界に公開 (2007-7-8)
Googleブック検索

国会図書館では、「近代デジタルライブラリー」で、大正期の資料約7,200タイトル(約15,700冊)、明治期の資料約240タイトル(約270冊)のスキャン写真を公開している。

近代デジタルライブラリー

日曜日, 6月 24, 2007

フィリピノ語(タガログ語)

フィリピノ語(タガログ語)は、フィリピンの公用語で、表記はローマ字。

CDエクスプレス フィリピノ語
ゼロから話せるフィリピノ語―会話中心

フィリピノ語は、語順が日本語、インド・ヨーロピアン系の言語と異なり、述語が主語に先行する。Erica ang palayaw ko.(Erica my nickname is). 格の適用範囲も異なる。May sulat sa inya si Erica.(I have a letter for you of Erica).

フィリピノ語では、日本語における「御」のように、po が丁寧さを表し、なんとなくユニークなのが、Thank you po.(サンキュー・ポ) Ekskyus po.(エクスキュース・ポ)などいう用法で、とにかく、po が丁寧さを表現するという。

フィリピノ語と、インドネシア語は、オーストロネジア語族に属し、単語レベルで lima (5), mata (eye), ito (this, ini in Indonesian) 類似するが、 ANG形、NG形、SA形に変化する代名詞、動詞の活用に応じて指定される主語、補語、目的語など、文法的にはかなり異なる。

フィリピノ語では、(母音とn以外で終わる)形容詞に、「な」をつけて非修飾語につなげる。偶然にも、日本語と同じ発音となる。masarap na mangga (マサラッなマンガ、おいしいマンゴー)

「北朝鮮の核実験」は nuclear test ng Hilagang Koreaで、韓国は Timog Korea となる。この場合、ng は、所有・所属を表すという。

東外大言語モジュール | フィリピノ語

タガログ語の否定疑問文に対する返答は、日本語と同じように、英語とOo (Yes)/Hindi (No) が逆である。つまり、Oo, hindi siya masaya sa Tokyo.(ああ、東京は住みにくい) となる。しかし、語中の一語を否定することも可能らしい。

フィリピノ語文法入門

フィリピノ語のNG形は、所有・所属を表すと説明されているが、naman ng, pwede ng, や動詞など、主部、述部を表す場合があり、とにかく所有格とは違う概念を表す。他の言語では、所有形にならない場合でも、NG形をとる。数詞、疑問詞がNG形をとり、この場合は「~の」という訳語が当てはまる。isang long-range Taepodong-2 (一発のテポドンミサイル) anong oras (何時) 小辞、人称代名詞にNG形をとる名詞を続ける場合、小辞、人称代名詞にNGがつく形となる。Meron ka bang oras? (いつ到着したのか)

Filipino Linker

ANG形は、「主語のマーカー」として、続く語が主語となるが、定冠詞としての働きを持つため、アラビア語の定冠詞に近い役割を果たす。

フィリピノ語では、動詞が派生形をとり、VSOの文型をとる。フィリピノ語には、アラビア語と同じく、a,i,u しかなかったという。フィリピノ語は、開音節の語が多く、親しみやすい。

日本語では、~する、という風に動詞を作るが、フィリピノ語では、mag- (マッグ)という接頭辞(行為者焦点の接頭辞)をつけることによって、動詞を作ることができる。taksi (タクスィ、タクシー)という単語は、magtaksi (マッグタクスィ、タクシーに乗る、不定相)という動詞になる。これを変化させると、nagtaksi(ナッグタクスィ、完了相), nagtataksi(ナッグタタクスィ、未完了相), magtataksi(マッグタタクスィ、未然相) となる。行為者焦点の接辞には、ほかに ma-, mang-, -um- などある。

Sige, magtaksi na lang tayo. (じゃあ、タクシーでも乗っていこうよ。)

magkape (コーヒーを飲む)というのもある。Magkape muna kayo.(まずコーヒーでも飲んで。)

耳で覚えるはじめてのフィリピン語

mag- 動詞のアプレットを作ってみました。 → Filipino Mag- Verbs

フィリピノ語の動詞変化では、不規則な d → r 音の交替がある。dagdag (to add), magdaragdag, dating (to arrive), darating, damdam (to feel bad), magdaramdam, dampot (to pick up), darampot (dadampot), dasal (to pray), magdarasal (magdadasal)

フィリピン語の um 動詞は自動詞、mag 動詞は他動詞、となる派生形があるという。Sumara ang pinto. (The door closed.) Magsara ka ng pintuan. (You shut the door.)

フィリピンの経済特区への出資は、日本が4割を占めるという。

【フィリピン】製造業が中核、デリマ長官NNAに語る (2007-7-2)

フィリピンの言語は、中央フィリピン語と北部フィリピン語に大別され、国語であるフィリピノ語(タガログ語)は、中央フィリピン語に含まれる。中央フィリピン語には、そのほかビコルBikol, Bicol語、スバノンSubanon語、セブアノCebuano, Sugbuhanon語、ヒリガイノンHiligaynon語、イロゴIlogo語、ガパンパンガンKapampangan語が含まれる。北部フィリピン語には、イロカノIlocano,Iloko語、ボントゥBontoc語、イフガオIfugao語、イスネグIsneg語、イシナイIsinay語、カリンガKalinga語が含まれ、パンガシナンPangasinan語を含む分類があるという。どちらにも属さない、マナナオMananao語、ティルライTiruray語、ビラアンBilaan語、タガビリTagabili語、イロンゴットIlongot語、カシグランCasiguran語、タウ・スグTau Sug語、サマルSamal語などもあるという。

土曜日, 5月 26, 2007

ビルマ語の表示

ビルマ語の使用範囲 出典:University of Texas Libraries -- Perry-Castañeda Library Map Collection
ビルマ語の使用範囲


ビルマ語のフォントには、独自規格のものと、ユニコード対応のものがある。ビルマ語WikiではUnicodeに対応しているが、独自規格を使うサイトも多い。

MyaZediフォントは、独自規格のフォントである。フォントを使用するには、TrueTypeフォントをダウンロードし、Windowsのフォントフォルダ(C:\Windows\Fonts)コピーする必要がある。

Myanmar3フォントは、Unicode規格のフォントである。フォントを使用するには、圧縮ファイルをダウンロード・解凍し、mm3.ttfをWindowsのフォントフォルダにコピー、実行ファイル(Keyman)を走らせる(インストール方法は、Installation.txtを読むこと)。

Padaukフォントは、Unicode規格のフォントで、インストールするとIEでの表示が可能になる。Tools -- Internet Options -- Fonts ダイアログで、Language Script にMyanmarを選び、Padaukを選択するとビルマ語が表示される。


アウン・サン・スー・チーをビルマ語で表記すると

Aung San Suu Kyi

စုဳကည္ MyaZedi規格
စုကြည် Unicode 5.1規格


ビルマ語は、モン文字から派生したビルマ文字を使う。子音は33の文字で表すが、26文字を一般には使用する。単母音はa,i,u,e,ɛ,o,ɔ の合計7つに、軽声がある。声調は、下降調、低平調、高平調の3つ。韓国語のパッチムのように、末子音がある。韓国語のように規則的な変化ではないが、清音の表記で濁音で読むことがある。介子音というのがあり、y、w、h音を子音と組み合わせて発音する。無声鼻音という変わった発音があり、hm, hn, hɲ, hŋ, hl など、ハの音を先行させ、発音する音がある。母音は、子音の上下左右に配置し、声調ごとに異なる表記をとるため、煩雑である。さらに、末子音をとる場合、母音の発音が変化する。

エクスプレス ビルマ語

ビルマ語の表記で気づいたのは、介子音の表記にバリエーションがある、ということである。つまり、ဝ(ワスウェ)などとの合成文字を作る代わりに、分離して表記するやり方がある。その際には、မ္ဝのように、子音にシェトをつける。モン人မ္ဝန္‌လူမ္ယုိး

フィリピノ語(タガログ語)では、日本語における「御」のように、po が丁寧さを表すが、ビルマ語では pa (ba) となる。ビルマ語声調の発音では、高平調をより強調し、下降調は短母音として発音する。

オンラインでビルマ語が入力できるように、アプレットを組んでみました。フォントはMyaZediを使用しています。

Burmese Online Keyborad

ビルマ語で、宝石をヤダナーといい、警察はイエーアヤーシィー、泥棒をタコーという(「旅の指さし会話帳・ミャンマー」)。

金曜日, 5月 04, 2007

モンゴル語のオンラインコース

東外大のサイトに、「モンゴル語文法モジュール」があって、詳しい解説がレッスンごとに読めるようになっている。「大学のフンイキ」を楽しめるのもさながら、図書館でも資料を集めるのが困難なモンゴル語の教材があって、すばらしいと思う。難を言えば、演習問題に、枠からはみ出たり、語順が逆だったりする設問があって、フィードバックするべきだと思わせるところがある。

モンゴル語文法モジュール

モンゴル語には未来形がなく、現在形と同じ形をとる。-на/нэ をつける。疑問形は、-хをつけ、疑問を表す助詞をつける。コピュラ動詞の疑問形だけは、現在形の場合、байна уу の形をとる。語幹は、子音で終わる場合に母音を挟む。 ь で終われば、и に変化させる。否定形は、-хをつける形にгүйをつける。

モンゴル語では、Хэдэн төгрөг вэ? だという。э の長母音はそれらしいが、短母音は и と発音しているように聞こえる。Хэд という疑問詞に、「隠れた н 」が付く形式で、モンゴル語の活用には、「隠れた г 」というのもある。

疑問文には、男性名詞・女性名詞の後で、уу/үү をつけるが、長母音・二重母音の後では、それぞれ юу/юү となる。疑問詞がつくと、вэ/бэ がつくが、в・л・м・н の後では、бэ がつくという法則がある。

動詞の変化は4つ。終止形・希求形・形動詞形・副動詞形。なんと助詞ではなく、補助語幹なるものがある。過去・終止形は、-лаа/-жээ/-в(文語) で、-лааで主観が含まれるという。-жээは、р、сで終わる動詞の場合、-чээの形をとる。例外は、短母音1音節の、モンゴル文字での表記が母音で終わる動詞。ав-чээ(取った)、өг-чээ(与えた)は例外的に、-чээの形をとる。短縮形は、-ж/-чで、сで終わる動詞の場合には、-жをとる。

-в/-л уу の接続するとき、子音字で終わる動詞には短母音がつき、 語幹末の ь を и に変える。

疑問文は、疑問詞なしで-л уу?-ж уу?-в уу?、疑問詞の着く場合には-лаа?-ж вэ?-в?。

副詞と形容詞は変化しない。

モンゴル語で、辞書をビチクという(単なるだじゃれである)。

モンゴルの行政区画「アイマグ」のアプレットを作ってみました。→ Aimags -- Mongolian Provinces

PHP: 定数を扱う

プロジェクトごとの定数を扱うクラス Config\Constants の紹介です。 <?php namespace Config; class Constants {     public const DB_USER = "linguist...