木曜日, 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ドルから

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

Flask の Blueprint のテンプレート問題

  Flask の Blueprint は、ルート、静的ファイル、テンプレートをまとめて管理できます。しかし、テンプレートが指定できません。 ここでは、Blueprint の template_folder の問題点と回避策を説明します。 Blueprint のテンプレート問題...