日記帳だ! with Tux on Libserver

二度目の大改造!! 日記帳…か?を継承し、より柔軟でパワフルなBlogに変身しました。

RSSに対応しています。リンク・コメント・トラックバックは自由にしていただいてほぼ問題ありません。
RSS購読方法、僕のリンク・コメント・トラックバックについての考えを読むことをおすすめします。

JavaScriptを有効にし、Cookieを受け入れ、以下のブラウザを使うことで完全なコンテンツが楽しめます。
Mozilla Firefox 3.0(Get Firefox)・Opera 9.6・Safari 3.2・Lunascape 4/5(Gecko)・Lunascape 5(WebKit)
Internet Explorer 7/8とそれを使うIEコンポーネントブラウザ(Lunascape・Sleipnirなど)

<< 過去

未来 >>

スポーツ大会が中止になった日

今日は学校がお休みでした。
なんのこっちゃということですが、今日はスポーツ大会の日だったんですね。
ところが新型インフルエンザの騒動で中止になったと。
じゃあ授業すればいいじゃないかという話なのですが、木曜日は特に非常勤の人の授業が多い日です。
ええ、そうなんですね。まぁ非常勤の人に頼ってる分は結構ありますから。
そうなると急に授業もできないと。じゃあお休みにするしかないねということ。
というわけで明日は授業はあります。
ところでなんで中止になったかということなのですが、
スポーツ大会が全校でやる行事だからですね。
もしウイルスを持った人がいれば、これをばらまきかねないと。
まぁ普通は大丈夫だと思うんですけど、そういう可能性は常にあることです。
ただ学校でもそれはせいぜいクラスの範囲ぐらいだけど、スポーツ大会だと体育館の中全部とかなりかねんと。
まぁそういうことだと思います。
ウイルス持ってる人がいるのかといえば、居てもおかしくはないですよね。
ただその人が感染しない可能性は結構あります。そういうもんです。
だから気付かん内にばらまいて、それで誰かに感染してしまうかもねって。
まぁ感染してしまう人がいるかどうかは知りませんけど。
心配しすぎじゃないのってのはもっともな話ですが、
一般にインフルエンザというのはカゼとしてはタチが悪すぎます。
まだインフルエンザでもB型はそこまでひどくないのですが、A型は相当ひどいですね。
ただ普通はこういうのは現実に感染者がいてから始まるものですが。
しかし少し気になってるのは、このことが決まったのは昨日の朝から昼の間なんですね。
一応、このスポーツ大会という行事は学生会あたりが取り仕切ってる行事なんですよね。
学生会に命令するまでもなく決まってしまっていたらしい。
まぁ唖然とする話ではありますよね。そりゃ学生主事に逆らえるわけはないのですけど。
下手すれば暴動起きてたかも知れませんね。幸いそんなことはありませんでしたけど。
まぁ今日は返却期限が迫ってる本を読みつつのんびりしてました。
案外なんてことはありませんでした。
台風などでお休みになることはたまにありますからね、それで慣れてたのかも。
さて、明日は授業あるからね。がんばって一週間を終えましょう。
Author : hidemaro
Date : 2009/05/21(Thu) 23:17
日常 | Comment | trackback (0)

三角関数の公式を思い出すオイラー

三角関数というと非常に大切な道具です。
不思議な話で中学生の時には使わなかったのに、高専に入って1年経つまでになれてしまった不思議な道具。
昔は1:2:√3とか言ってたけど、今は無意識にcos(π/3)=1/2とか出てくるものです。
やっぱり物理とかやっていると多かれ少なかれこうなるものです。
ただ、専門科目で三角関数をガリガリ計算することも多いので余計にですね。
数学の教員曰く、三角関数言えば電気だという。まぁそれぐらいのものです。
三角関数の計算は結構めんどくさいんですね。
当然と言えば当然ですがsin(α+β)=sinα+sinβとはなりません。
じゃあどうするんだといえば加法定理を使いまして、sin(α+β)=sinαcosβ+cosαsinβとなるわけです。
「咲いたコスモスコスモス咲いた」とかいう訳分からん覚え方ありますけどね。
cos(α+β)=cosαcosβ-sinαsinβとかいうのもあります。よく使う。
マヌケなことにこれを唱えながら三角関数をいじっている人がいるわけだから。
それはフレミングの左手の法則とかもそうですけどね。あれも大概だな。
加法定理だけならいいのですが、他にもいろいろ公式があります。
まず倍角の公式。cos(2α)=cos(α+α)=cos2α-sin2α…で終わらないから困る。
まぁこれだけで終わってればそんなに使い道はないと思うんですけどね。
実際にはsin2θ+cos22=1という関係を変形して、
cos2α=1-2sin2α=2cos2α-1なんてして使われます。
ただ倍角の公式として使うことはそうも多くなくて、cos2θ=(cos2α+1)/2として使われることがある。
なんとこれを使えば2乗を消せるんですね。というわけで積分で使ったりする。
これ結構便利なんですけど、この公式を覚えるのはとんでもない手間。
というわけで毎度加法定理からこの式を作るというマヌケなことをしている。
そんな人は結構多い。というぐらい使う公式は多い。
それとこれも積分関係で使うのですが、cosαcosβ=( cos(α+β) + cos(α-β) )/2という公式。
これは積和の公式とか呼ばれています。
実は三角関数同士の積は三角関数の和にできるんです。積分で使ったりする。
ただこれはcosαcosβ、sinαsinβ、sinαcosβの3パターンがある。しかも結構めんどくさい。
しかも加法定理から生成しようとすると結構めんどくさい。
出来ないことはないですけど。けどめんどくさいことには違いない。
というわけで公式集からコピペするのが常ですね。しょうがない。
ところでオイラーの公式という有名な公式がある。
e=cosθ+j sinθ
あ、虚数単位にjを使ってしもた。まぁいいですよね。数学の世界ではjじゃなくてiなので読み替えて。
結構いろんなところで使われて居るみたいです。
この公式を使えば加法定理を忘れても思い出せるというのは有名な話です。
ej(α+β)=e×eと変形できるから、
=(cosα+j sinα)(cosβ+j sinβ)=cosαcosβ-sinαsinβ+j(cosαsinβ+sinαcosβ)
ej(α+β)=cos(α+β)+j sin(α+β)となるはずなので実部と虚部を比較すれば、
cos(α+β)=cosαcosβ-sinαsinβ、sin(α+β)=cosαsinβ+sinαcosβとなるとわかると。
しかし加法定理を忘れるような人はちょっと問題がある気がする。
このオイラーの公式を使えば、2乗を倍角の公式を使って外す件も無理なく思い出せることが分かった。
というのはcosθ=(e+e-jθ)/2、sinθ=(e-e-jθ)/j2という風に書けるんですね。
まぁすぐに気付くと思いますけど。
それで(e+e-jθ)/2を2乗すると、
(ej2θ+2+e-j2θ)/4=(1+ (ej2θ+e-j2θ)/2 )/2 = (1-cos2θ)/2とわかりますねと。
なるほどうまいことできていると。
あと、積を和に直す件も、同様にやってやりますと、
(e+e-jα)/2 × (e+e-jβ)/2
=( ej(α+β) + ej(α-β) + ej(-α+β) + ej(-α-β) )/4
=( ej(α+β) + e-j(α+β) )/4 + ( ej(α-β) + e-j(α-β) )/4 = ( cos(α+β) + cos(α-β) )/2
という風に少々めんどくさいものの、導き出すことは不可能じゃないよう気にはなってきましたね。
ということを通信工学の授業でやってた複素数をガリガリする話の中で思いついた。
このオイラーの公式というやつは本当に働き者です。
それで実際に試してみればまぁまぁ簡単に変形できますねと。
加法定理だけを使って思い出すのは大変なのでアイデアだけ持って行きましょう。
そうすればどんなひどい積分でも大丈夫だと思う。
こんな変形積分ぐらいでしか使わないし。まぁそれは言い過ぎかも知れないけど。
Author : hidemaro
Date : 2009/05/20(Wed) 23:32
電気・数学・物理 | Comment | trackback (0)

クラスの顔がこれでいいのか、ヘッダーファイル

C++のヘッダーファイルというのは少々問題が多い。
例えば、メンバ変数に文字列を2つ持ち、それぞれに空白を足すプライベートなメソッド、
そして両方に空白を足すパブリックなメソッドがあるクラスのヘッダーファイルはこうなるだろうか。
#include <string>
class Hoge{
private:
std::string a,b;
void AppendSpaceToA(void);
void AppendSpaceToB(void);
public:
Hoge(const std::string &a,const std::string &b);
~Hoge(void);
void AppendSpace(void);
};
ここで少々気になることが出てくる。
1つはなんでプライベートなメソッドのことを、クラスの顔であるヘッダーファイルに書かなければならないのか。
もう1つはなんで変数を格納するためだけにincludeが必要なのか。
別にstd::stringの機能を使うことについては全く書いていないにも関わらずだ。
まず後者は、格納するデータのデータ構造が格納のために必要だから。
というのもC++のクラスというのは構造体とほとんど変わらない。
まぁイメージだけの問題なのですけど。
C++って実体が変数自体っていうのが普通です。
なので変数の形を作るためには格納するデータをよく知っている必要がある。
そのためには格納するデータの形を保持しているヘッダーファイルを読み込む必要があると。
そうなるとむやみやたらにデータ構造は変えられないと言うことです。
それは困るなぁと。そこでPimplイディオムっていうのが使われているそうです。
ヘッダーファイルの変数宣言はこんな調子。
class Hoge{
private:
struct impl;
impl *pimpl;
//以下同じ
これでメンバ変数のためだけにincludeの必要は無くなります。
ただ今の時点ではまだ引数などの型に使っているので必要ですが。
それで本体のソースコード。
#include "hoge.h"
#include <string>
struct Hoge::impl{
std::string a;
std::string b;
};
void Hoge::AppendSpaceToA(void){
this->pimpl->a.append(1,' ');
}
void Hoge::AppendSpaceToB(void){
this->pimpl->b.append(1,' ');
}
Hoge::Hoge(const std::string &a,const std::string &b){
this->pimpl=new impl;
this->pimpl->a.append(1,' ');
this->pimpl->b.append(1,' ');
}
Hoge::~Hoge(void){
delete this->pimpl;
}
void Hoge::AppendSpace(void){
this->AppendSpaceToA();
this->AppendSpaceToB();
}
まず最初にHoge::implの内容を定義。ここにメンバ変数を書くと。
それでコンストラクタでHoge::implの実体を確保してポインタを格納すると。
それでデストラクタでこれを破棄すると。
これでヘッダーファイルにはimplのポインタ、pimplをメンバに持つとだけ定めればいい。
ポインタなら用意しておくべきデータ構造は何のポインタでも一緒なので、
その中身までヘッダーファイルで示す必要は無いと。
というわけでさっきよりもすっきりとしたヘッダーファイルとなりました。
ただ、まだヘッダーファイルの#include <string>は取り除けていません。
というのも引数の型が定義されていないからですね。
じゃあいちいちincludeしなきゃいけないのかというとそんなことはありません。
std::stringっていうクラスがあるんですよってことをヘッダーファイルに書いてあげるだけでOKです。
その詳しい内容はヘッダーファイルに不要ですから。
というわけでstring.hの中身を探してstd::stringの定義を盗んできます。
namespace std{
template <class charT, class traits , class Allocator > class basic_string;
template<class _Elem> struct char_traits;
template<class _Ty> class allocator;
typedef basic_string<char, char_traits<char>, allocator<char> > string;
}
結構めんどくさいことを書いています。なんでこんなにめんどくさいの。
基本的にはFooクラスというものがあると書きたければclass Foo;と書くだけでOKですが、
std::stringの定義はかなり込み入っていて、テンプレートやらtypedefなど多用していてわかりにくい。
まぁ探してきて、こう書けばうまくいくことがわかったのでこう書いています。
こうすることにより、string.hを解釈する必要がなくなりコンパイルが速くなります。
まぁこれでC++のヘッダーファイルにまつわる問題はある程度解決しましたけど、
プライベートメソッドの問題は解決できませんねぇ。
調べたらインターフェース的なクラスと、具体的に実装するクラスを分けろとか書いてあったけどね。
しかしそこまでしないと無理なのだろうか。
まぁまたいろいろ考えてみます。
Author : hidemaro
Date : 2009/05/19(Tue) 23:27
C・C++ | Comment | trackback (0)

インフルエンザ騒ぎの日のマスク

最近、新型インフルエンザのことでいろいろ言っています。
まぁようわからんのは確かなのだが、新しいA型インフルエンザのウイルスがあるよという話です。
その程度の話なのですが、誰も抗体を持っていないというのが厄介です。
ただ想像されていた新型インフルエンザは強毒性だったけど、
現実にある新型インフルエンザは弱毒性なのでそこまで神経質にならなくてよいと。
まぁ実にそんなところです。
まぁそうは言っていたのですが、最近近畿で感染者が出たということで大騒ぎであると。
さっき書いた通り、何が怖いかというと、誰も抗体を持っていないと言うところです。
まぁ逆に言えばそれだけです。
だから対策は簡単でかからないようにすればよいと。
というわけで手洗いしましょうとかそういうことを言うわけです。
それで今日電車に乗って通学していたのですが、
なにやら運転士やら駅員やらがマスクつけてるんですね。
こういう人たちはいろんな人と触れることになるのでマスクをつけていると。
まぁ大切な事ですよね。少々息苦しいかも知れないけど。
あと乗客にもつけている人はそれなりにいたかな。
まぁさすがに運転士や駅員がつけてると驚くけど、乗客がつけてるのはそうも驚く風景ではない。
というのも花粉症の時期は結構いるんですよ。
だから見慣れていると。
というか日本では結構マスクをつけることに抵抗がないらしいんですね。
確かにマスク自体は結構身近なものですからね。
ただそうでない地域はかなり多いわけです。
そういうところだと感染している人すらマスクしないで歩くもんだから困ると。
僕もそれはおかしいと思うのだが、そうでないところだとマスクつけてたら不審者扱いされるから困ると。
まぁ実にそういうことで、まぁ仕方ないのかなと思わないこともない。
しかしなにやら言いますけど、普通のかぜの対策をすることが新型インフルエンザの対策になるのは明らかです。
冷静にやるしかないですね。
休校になった学校とかもあるらしいのですが、
まぁまれにインフルエンザで休校とかもあるのですから、大げさだけどそんなもんかと思うしかないですね。
しかしそうなると授業に支障出るからやめてほしいけど。
Author : hidemaro
Date : 2009/05/18(Mon) 23:25
日常 | Comment | trackback (0)

平城山を通る県境の上のお店

ずいぶん前に話題になってた気がするが、イオン高の原ショッピングセンターまで行ってきた。
ここでお店の実名が出るのは珍しいですが、それはこのお店が変だからですね。
このお店があるのは、平城・相楽ニュータウンのど真ん中、高の原駅の近所なのですが、
この平城・相楽ニュータウンというのは実に、奈良市・木津川市・精華町の3市町にまたがる新都市です。
学研都市の平城・相楽地区の一部ですね。だから研究所とかもあるみたいですよ。
平城というのは奈良市側の古い村の名前、平城村から、
相楽というのは木津川市側の古い村の名前、相楽村(さがながむら)と、相楽郡(そうらくぐん)にかけてあるのだと思う。
平城・相楽ニュータウンの相楽はそうらくと読むらしいですけど。
まぁ3市町にまたがるというだけならたまにあるかなと思うんだよね。
ただ、ここのおかしな所は、奈良市は奈良県で、木津川市・精華町は京都府なんですね。
実は2府県にまたがっています。それで県境が手に届くところにあるんですね。
この高の原駅は奈良市にあるけれど、この近辺の人は好んで使います。
ということは歩いて、県境を越えて駅まで行って、電車乗って、とかいうのを普通にしているわけです。
結構珍しいところだと思います。まぁそうでもないのかな。
それで、初めの話に戻るわけですが、
このイオン高の原ショッピングセンターっていうのは地図で見ると、奈良市右京一丁目と木津川市相楽台一丁目にまたがってるんですね。
県境をまたぐショッピングセンターなんです。珍しいですね。
事実、イオンのショッピングセンターでは唯一らしい。
大きなショッピングセンターです。まぁ今回はあんまり見れなかったけどね。
しかし県境をまたぐとなるとどんなものなのかなと思いますけど、
さっき言った通り、当たり前すぎることで誰も気にしないって言うのが真のところです。
ただ、警察の管轄だけは各府県をまたげないらしく、お店の中に線が引いてあります。
言われないと気付かないんですが、たしかにそんなものがあります。
それで住所表示はどうなってるのかと思ったのですが、これは単純明快でした。
主な玄関のある場所なので、木津川市相楽台一丁目の方になっています。
駅に近いのは奈良市側ですけど、駐車場のあるのが木津川市側なのでそっちが主な玄関なのでしょう。
というわけでお店の中は例え奈良県内でも、木津川市ということになります。
実際はどうか分かりませんけど、法人住民税なども木津川市に収めているのでしょう。
奈良市からすると固定資産税は入ってくるけどって感じですね。
また電話番号も木津川市と同じ番号みたいです。というかここは近所でも県外隣接になることがあるのか。
なんというか不思議な感じです。
特に電話番号はこのような場合開けてる方から持って来るものなのですが、
ここの場合は奈良からも木津からも開けているので、行政区分通りみたいです。
京都府内でも南山城村と笠置町は月ヶ瀬や柳生と同じ市外局番、すなわち奈良MAなんですけどね。
これは多分奈良から引いた方が楽だったからじゃないかな。そういうところは世の中たくさんあります。
冷静に考えると本当に不思議なところです。
なんでこんなところに県境があるんだろうと不思議になるぐらいです。
まぁ地理的には驚くところではないんですけど。
けど平城京の建設の時には、木津から木を運んだと聞きますけどね。
まぁそれぐらい昔から奈良に近いところです。まぁそう考えればわかるような気がします。
余談ですが、この平城・相楽ニュータウンの東端には、JRの平城山駅って駅があります。
まぁさっき平城山がなんやら言ってましたが、それにちなんだもののはず。
ただ非常に人気が悪いらしく、バスもあんまり来ないらしい。
それでJR使いの人が平城山駅から高の原駅までバス使おうと思ってもないなぁと言っていました。
調べるとあんまり人気がないらしい。まぁ残念な駅みたいです。
1人以外は他の駅で近鉄に乗り換えてから来たらしい。1人は平城山駅で降りて歩いてきたらしい。
Author : hidemaro
Date : 2009/05/17(Sun) 23:16
社会 | Comment | trackback (0)

数学の流儀と電気の流儀

虚数単位というと普通はiですね。
iってのはimaginaryのiです。架空のとかいう意味です。
まぁ虚数ってのが架空の数なんだからimaginary number言って、
それの基本となる虚数単位を表すにはiを使いましょうということだと思います。
ただ、これを電気関係ではjと表す。
なんでって電流を表すiと紛らわしいから。ほんまかいな。
なんでほんまかいなと言ったのかというと、出てくる場所が違うから。
電気で虚数というと一番始めに出てくるのは、正弦波交流回路の計算で使う複素数ですよね。
電圧とか電流とかインピーダンスとかを複素数で表すといろいろ便利であると。
まぁそういう話があるわけです。
このときiを使ってると電流と紛らわしいというのは一見正論ですが、複素数を表すとき使う文字って大文字なんだよね。
I=60+j80[A]とかいう風に書くんですね。正確にはIの上にドットを打つんですけどね。
だからそうも紛らわしくはないんですけどね。
けどこんなものは慣れですよね。いつのまにかjで書くことになれてしまった。
今は数学で複素数をやっているけど、時々間違えてしまいますね。数学ではiですから。
ちなみにjを使うときはj80のように、数字よりも何より前にjが来ます。この書き方は好きですね。
数学では80iのように書くけど、i と 2πsin xの積は普通 2πi sin xのように書くのであんまり統一感ないし。
始めに虚数だよってバンって書いてしまう方がありがたいですね。
もう1つの使い道はオイラーの公式ですね。
e=cosθ+i sinθ
っていう公式です。大切な式でして、実は回路の計算でも活用されてたりするんですね。
回路以外でも電気関係ならなんでも虚数単位はjなので、通信の教科書を見てもjを使っています。
ということはeの指数には虚数が来ることは予想しておかなければならないと。
まぁしかし、これもeの指数に電流が来ることはまずないので、あんまり紛らわしくないですよね。
ただ考えてて気がついたのだが、このeというのもまた電圧を表す文字なんだよね。
オイラーの公式で出てきたeは自然対数の底なんだけど、電圧を表すときにVとかvだけじゃなくてEとかeも使うんです。
ただしさっき言った通り複素数で表すときは大文字のEを使うので、E=100ej(π/2)とか書いてもあんまり紛らわしくないと。
ただ少々問題だと思ったのだが電圧を小文字のeと、自然対数の底のeを同時に使うときがあるなぁと。
というのは過渡現象の話ですね。
回路で小文字を使うのは瞬時値の式を表すときに使うものなんですよね。
e=100√2 sin(120πt+θ)[V]のように。
それでスイッチを入れた瞬間からt秒後の電圧を式で表すときにはもちろん小文字を使います。
それでスイッチを入れたら指数関数的に電圧が減っていくという答えがあるんですよね。
そのときこんな答えもありえるんじゃないかなと。
e=-V e-(R/L)t[V]とか。
実際はEとかeっていうのは起電力で使われることが多くて、
結局電池とか電源の電圧だから求めることが少ないのでまぁその点では少々安心。
けどL/R秒後には1/e倍になりますとか言ったら、普通に考えれば自然対数の底の逆数倍という意味ですけど、
もしかしたら電圧の逆数倍とかいう意味かも知れない。そうなってくると意味がわからない。
だから自然対数の底をεと表そうとかいうのをどっかの教科書で見た気がするけど、
まぁ流行ってないわ。だからeを使うしかないんだろうね。
まぁなんでこんな話をしたのかというと、回路解くために微分方程式解きましょうっていうのがあって、
そこで数学とは違うことをいくらか見たから書いたんだけどね。
さっきの虚数単位の文字が違う、来る場所が違うっていうのとか、
任意定数を、数学ではCを使って表すことが多いけど、
電気ではCは静電容量なので、任意定数にはAを使うことが多いようです。
それとか単にlog xとかけば10を底とする対数で、数学(特に微分積分)でよく使われる自然対数じゃないので、
明示的にloge xとか、ln xとか書かないとわかってもらえないとか。
lnはlog naturalの略らしい。自然対数って意味です。
10を底とする対数は常用対数といって、計算の分野でよく使われるものです。
電気関係ではデシベルとか。まぁあれも混乱防止のために明示的にlog10(V1/V2)とか書いてるのよく見るけど。
数学では気にしないようなことですけど、実用的な世界に行くといろいろあるようです。
とはいうもののeのように誰も気にしないようなものもありますけど。
まぁこんなもの慣れですね。
初めは自然対数のことをわざわざloge xとか書くのには慣れなかったけど、
いつの間にか底を書かないのが気持ち悪く感じるぐらいにはなってきたわけですから。
そんなもんです。
ただ怖いのは数学のテストで間違って虚数単位をjとか書いたりすることだな。
まぁ間違いじゃないんだけど…
もしかすると始めに「虚数単位をiとする」とか書いてあるかもね。それなら逆らいようもない。
けど書いてないだろうな。だからって許されるものじゃないだろうけど。
Author : hidemaro
Date : 2009/05/16(Sat) 23:18
電気・数学・物理 | Comment | trackback (0)

みんなで使う回数券

世の中には回数券というものがある。
電車に限らないけど、だいたい10枚の値段で11枚というような売り方です。
この割引率はだいたい1割です。正確には10/11=0.909なので、9.1%引きですけど。
まぁあんまり割はよくないですね。
ただ、バスの場合定期券の割引率がかなり悪いので、回数券も案外お得です。
ただ回数券ってある区間を反復して使うのが前提なので、なかなか使いにくい。
電車の回数券だと3ヶ月のうちにその区間を11回使うというのは相当使う人に限られます。
まぁそういう人のためのものなんですけどね。
それ以外の人でも回数券を使えないかって話ですが、
何人かで回数券をばらして使えばいいんですね。5人以上ならお得になりますよと。
近鉄の場合、回数券はカードで売られているのでばらすといってもそう簡単ではない。
そういうときは定期券・特急券自動発売機で一気に引き替えることができるらしい。
これなら1枚1枚引き替えなくてもいいからいいですよね。
まぁ紙式の回数券みたいに一部をあらかじめ渡しておくとかは出来ません。当日その駅で引き替える必要がある。
まぁこれも微妙ですけどね。だってたった9.1%引なんだから。
しかし、それは平日ラッシュ時でも使える回数券だからですね。
休日の場合は、近鉄ではサンキューチケットとかいうのを発売している。
820円以下の区間という制限はあるけど、なんと10枚分の値段で14枚もついてくる。
この場合の割引率は28.6%と非常に高い。というか休日だからって奮発しすぎだろ。
5人以上の旅行のときには検討してみるといいと思う。
あと、平日昼間・休日に使えるオフピークチケットは10枚分の値段で12枚。
さすがにサンキューチケットほどではないけど、16.7%引きでお得。
このうちサンキューチケットを使うことを考えていろいろ話をしていたわけだ。
それで定期券の乗り越しでこれを使えるかという話ですが、
これは問題ではありません。定期券と精算機に入れればOK。
別に複数人精算しても問題ないですね。1人だけなら定期券とカードを赤い改札機に投げればいいけど。
ただ、さっき言った通り、近鉄の回数券は事前にバラして渡しておくことができないんですね。
なので、その区間だけを乗る場合は、カードを持っている駅からしか乗れないんですね。
というか近鉄にしても他の会社にしてもJR以外はそうですけど、回数券は料金が同じなら使えるんですよね。
250円区間の回数券は奈良~高の原で買ったつもりでも、奈良~学園前とかで使っても問題ないわけです。
それと、回数券にお金を足して精算することは出来ますが、
当然ですが乗るときに回数券で精算するからと言って差額の90円だけで乗れるわけじゃないですよね。
最低の運賃以上の切符を買わないと乗れないと。
まぁ差額が最低の運賃を超えてたらいけるかもしれないけど。
そんなわけで行きは使えない人が結構多いことがわかりました。
あらかじめ多い駅のから乗る人に回数券を預けておくべきだったな。
逆に帰りは結構多くの人が使えることがわかった。
カード式回数券の盲点ですね。
カード式の回数券にちょっと否定的なことを書いてしまったけど、
同じく区間を繰り返し使う人に取ってはむしろ便利なんですよ。
だってカード1枚あればいいわけですから。
昔はいちいち切符に引き替えないとだめだったけど、今は直接投入でOKだし。
なのでその点ではかなり便利かなと。
両方とも選択できるのが一番うれしいよね。阪急はそうらしいけど。
まぁそれはともかく、使えるものは使って経済的にやっていきましょう。
Author : hidemaro
Date : 2009/05/15(Fri) 23:30
買い物・消費 | Comment | trackback (0)

演算子のオーバーロードで表示できる世界

C++で標準出力へHello world!!と表示するときはこんな風に書くのが一般的。
std::cout << "Hello world!!" << std::endl;
std::coutっていうストリームに"Hello world!!"って文字列を投げるというイメージ。
ただなぜか<<演算子なんて出てくるので困る。
なんでこんな不気味な方法を取ったのかって話ですが、
どうもこんな事情があるそうです。
演算子のオーバーロードというのはC++の名物ですが、こんな風にも定義できるらしい。
#include <vector>
#include <iostream>
#include <boost/foreach.hpp>
std::vector<int>& operator+=(std::vector<int>& self,int elem){
self.push_back(elem);
return self;
}
void main(){
std::vector<int> list;
list+=10; list+=20; list+=30;
BOOST_FOREACH(int &cur,list){
std::cout << cur << std::endl;
}
}
普通は二項演算子は1つ目の項の型のメソッドとして定めるのが普通なのですが、
こんな風にグローバル関数で定義することができるんですね。
しかもプリミティブ型同士以外ならなんでも定義できてしまうと。
こんなライブラリのクラスでさえ出来てしまうと。これはかなり恐ろしい。
それで一番初めの話の答えなんですが、std::ostreamと自作クラスの間で<<演算子を定義することで、
なんでもかんでも表示できるようになりますよってのが理由らしいです。
こんな調子。
#include <vector>
#include <iostream>
#include <boost/foreach.hpp>
template <typename T>
std::ostream& operator<<(std::ostream& stream,const std::vector<T>& list){
BOOST_FOREACH(const T& cur,list){
stream << cur << std::endl;
}
return stream;
}
void main(){
std::vector<int> list(10);
int i=1;
BOOST_FOREACH(int &cur,list){
cur=i; i*=2;
}
std::cout << list << "===END===" << std::endl;
}
std::ostreamとstd::vector<T>の間の<<演算子を定義すると。こんな調子です。
調子乗ってtemplateとか使ってるけど大した問題ではありません。
これで各要素を改行して表示することができるようになると。
取り扱いは他の文字列とかと一緒なんですね。
まぁこういうことができますよってのが<<演算子を使う理由らしいです。
C++ではこんな方法ですが、結構特殊なことだと思います。
.NET Frameworkの場合は一般にオブジェクトを表示するときには、System.Object.ToStringメソッドを使います。
これで文字列化して表示するのでオーバーライドしておきましょうと。
さらにフォーマットとかも指定できるようにしたいのならSystem.IFormattableを実装するとか。
まぁそんなところです。
これで自作クラスでもSystem.Console.Writeなどが使えるわけです。
ところがC++ではこういう仕組みを使いたければ演算子オーバーロードしろよと。
そういうことなんですね。あんまり親切じゃないですよね。
まぁこういう仕組みのないCのprintf関数なんかに比べたらよっぽど親切ですけど。
まぁとりあえずこれで自作クラスも表示できることがよくわかりました。
<<演算子をグローバル関数で定義するなんていうかなり違和感のある作業が必要ですけど。
まぁしかしなんで<<演算子を選んだんだろうね。
押し出すって感じがするからだろうか。
しかしあくまでもビットシフト演算子。それを忘れないようにしないとね。
Author : hidemaro
Date : 2009/05/14(Thu) 23:51
C・C++ | Comment | trackback (0)

HTTPでPOSTできるようになったC++

HTTPのPOSTについて調べていた。
というのもboost::asioでTCPの接続を用意してHTTPの通信をできるようになったのだが、
生のデータをやりとりするので少々めんどくさい。
なのでこれをうまいことラップして手軽に扱えるようにしようと。
まぁだからといってがちがちに固めるわけじゃなくて柔軟にも取り扱えるようにしようと。
そんなところです
実際のPOSTのリクエストはこんな調子でやっているらしい。
POST /foo.php HTTP/1.0
Host: www.example.com
User-Agent: hoge
Content-Type: application/x-www-form-urlencoded
Content-Length: 28

question=2%2F10&answer=0.2
まぁこんな調子です。なんとPOSTで送信するときもURLエンコードを施して送っているんですね。
なのでURLエンコードの作業を行うものが必要です。
さらにContent-Lengthに本体の長さを書いておかないといけないんですね。
まぁ必須ではないらしいんですが、実質必要です。
あとContent-Typeにはこの手の方法で送信する場合はapplication/x-www-form-urlencodedと指定しておかなければならない。
まぁそんなところです。
URLエンコードの部分は自作しました。
int HTTPClient::URLEncode(boost::asio::streambuf &buf,const std::map<std::string,std::string> &postdata){
std::ostream stream(&buf);
int size=0;
bool first=true;
for(std::map<std::string,std::string>::const_iterator cur=postdata.begin();cur!=postdata.end();++cur){
if(!first){
stream << '&'; ++size;
}else{
first=false;
}
for(std::string::const_iterator curc=cur->first.begin();curc!=cur->first.end();++curc){
if( ('0'<=*curc && *curc <= '9') || ('A'<=*curc && *curc <= 'Z') || ('a'<=*curc && *curc <= 'z')
|| *curc=='_' || *curc=='.' || *curc=='-' || *curc==',' || *curc==':'){
stream<<*curc; ++size;
}else if(*curc==' '){
stream<<'+'; ++size;
}else{
stream<< boost::format("%%%02X") % (int)((unsigned char)*curc); size+=3;
}
}
stream << '=';
for(std::string::const_iterator curc=cur->second.begin();curc!=cur->second.end();++curc){
if( ('0'<=*curc && *curc <= '9') || ('A'<=*curc &amp;&amp; *curc <= 'Z') || ('a'<=*curc &amp;&amp; *curc <= 'z')
|| *curc=='_' || *curc=='.' || *curc=='-' || *curc==',' || *curc==':'){
stream<<*curc; ++size;
}else if(*curc==' '){
stream<<'+'; ++size;
}else{
stream<< boost::format("%%%02X") % (int)((unsigned char)*curc); size+=3;
}
}
stream << "\r\n"; size+=2;
}
return size;
}
ひたすら自作ですね。
送信に使う boost::asio::streambuf に直接投げ込んでいくようにしてあります。
ポイントですが、0-9A-Za-z_.-,; のみはそのまま送信すればよいが、それ以外はスペースは+、それ以外は%2Fのようにする必要があると。
まぁ実際はそのまま送信できる文字はもうちょっと多いはずなのですが、とりあえずこれでOK。
あと書き込んだ文字数をカウントしておく必要もあるでしょう。
これはContent-Lengthで知らせるためのものです。
というわけでこんな風にして作成したstreambufを受け取ってヘッダーの送信後に投げ込むメソッド作って一件落着と。
POST用のメソッドに名前・値のmapを渡して、それで書きながら送るというのも1ついいとは思ったのですが、
ファイルを送信したいときのことなどを考えるとそうやって決め打ちするのはまずいかなと。
なのでこういうペアをURLエンコードするメソッドと送信するメソッドに分けてあるわけです。
まぁファイルをアップロードするときの方法は違うみたいなので。
まぁこの辺は調べないとなと。
というかURLエンコードする方法が唯一じゃないらしい。
まぁそれはさておき、とりあえずPOSTできるようになったんだからいいですね。
これでもうboost::asioのラップは終わりかな。
Author : hidemaro
Date : 2009/05/13(Wed) 23:48
C・C++ | Comment | trackback (0)

迷惑メールが大変なので引っ越した

昨日、携帯電話の電子メールアドレスを変更しました。
というのも迷惑メールがすごいのねぇ。
迷惑メールがすごいのはPCメールも一緒ですが、
PCの場合ある程度Mozilla Thuderbirdのフィルタで除去できるものの、
携帯電話の場合、標準のフィルタがかなり厳しい制限を掛けない限り実効性が期待できないので、
結局フィルタが使えず、迷惑メールがそのまま届いてしまうわけだ。
これの問題点はまず携帯電話の電池の持ちが悪くなることと、
本当に重要な電子メールに気づけないと。これは大きな問題ですね。
それで、My SoftBankからメールアドレス変更の手続きを行いました。
この変更はほとんどPCから行えます。ただパスワードは携帯電話のメールで取り寄せないとだめだけど。
ただ依頼はPCから出来るので、依頼したらじきにメールが届くのでこれを読めばOKと。
今までは?.vofafone.ne.jpのドメインだったのですが、今度からはsoftbank.ne.jpにしなければならないと。
さらばVodafone。
それで迷惑メールが届く理由を分析したのですが、おそらくメールアドレスが短いからかなと。
総当たりで発見したとしか思えない物なので。
そうなると1文字でも伸ばせば困難さはかなり増えることが容易に予想できるわけだ。
というわけで単純でも長いメールアドレスを作成することにした。
非常に覚えやすいけど、長いと。友人にもなんだこれはと言われたようなもの。
この結果、迷惑メールは全く来なくなりました。
これからも来なければいいと思います。
新しいメールアドレスはPerlのMail::Sendmailを使ったスクリプトで送信したけど、
送信元を旧メールアドレスにしておけば、受信制限してる人でもうまく受信できたみたい。
なんというザル。
mixiあたりのメールアドレスにして投げまくれば受信されてしまうってことじゃないか。
まぁこれで必要な人への連絡は終わったので、あとは必要か分からない人には会ったときに伝えることにしよう。
人が人に漏らす以外でメールアドレスが漏れる方法を予想してみたが、
まずはインターネット上に貼ること。PCのメールアドレスはこれで広く知られた気がする。
次に考えられるのは暗号化されていないSMTPの通信が盗聴されること。
暗号化されていないということは盗聴されることと考えて問題ありません。
現実的じゃないと見えるかも知れないけど、スイッチングじゃないHUBがあれば簡単にできるらしいです。
SMTPは普通暗号化しないので、盗聴の危険は十分にあり得ますね。
けどそれぐらいだとは思うんですよね。
あとは総当たりで発見されたものかなと。
ないユーザー名についてはエラーが返ってくるので、これで総当たりであるユーザー名を発見することができると。
まぁこれは設定で返られるんですが、SoftBank Mobileでは即エラーが返ってくるようになっています。
一般にはこれは便利ですけど、こういう場合は少々問題。
多分これで発見されたんじゃないかなと、もしSMTPから探されたら対処のしようはないけど。
というわけでこれでずっとそういうことと無縁な生活が送れたらと期待しておきます。
きっと大丈夫です。
Author : hidemaro
Date : 2009/05/12(Tue) 23:24
Linux・Net・Web | Comment | trackback (0)

Tools