ギリシャ文字のチートシート (一覧表) を作った
英語表記も入れてあるので、Tex や プログラムの変数名も間違えずに書けますね。
・Greek Letters Cheat Sheet (PDF)
念のためライセンスですが、Creative Commons – 表示 2.1 日本 としておきます。
すばる舎 (2016-08-23)
売り上げランキング: 2,892
英語表記も入れてあるので、Tex や プログラムの変数名も間違えずに書けますね。
・Greek Letters Cheat Sheet (PDF)
念のためライセンスですが、Creative Commons – 表示 2.1 日本 としておきます。
JavaScript で逆行列と行列式の値を求める
逆行列と行列式の値を求める C のソースをブラウザ上から実行できるよう、JavaScript で書きなおしたもの。
以前、行列式の値の求め方、逆行列の作り方の C 言語プログラム | BlueSky Lab. というプログラムを公開したのですが、最近になって再び話題になったので、今度はコンパイラ不要で Web ブラウザ上から実行できるよう、JavaScript で書き直しました。
工学部や理学部の 1 年生がこの時期に必ず習うものですね。
逆行列も行列式の値も、画像処理やパターン認識などでよく利用されるものなので、JavaScript より C で公開したほうが価値があるのですが、デモのときにはやはり JavaScript のほうが勝ります。
今日は、某研究関係の用事で別府の APU 立命館アジア太平洋大学に行ってた。
学生なのに出張で地元に帰るとか、考えたこともなかった。
キャンパスがとてもインターナショナルな雰囲気。
講義棟とか事務局とか。ポールからぶら下がっている旗を見てテーマパークかと思った。
標高が高いから眺めもよい。寒くて風が強いけど。
ジャークチキン。留学生が多いので、食堂のメニューも多国籍。
宗教上の理由で肉が食べれない人でも大丈夫なように、配慮している、らしい。ハラルっていうのかな。
今まで、国立や私立の大学を訪問したなかでも、APU だけは他とは全く違った雰囲気だった。
設備や環境はもちろんだけど、オフィスの方とお話した印象が全くビジネスマンだったので驚かされた。
最近、毎日のように後輩から就活の仕方を聞かれてて、同じことをいちいち答えるのが面倒臭いし、常識もないようなアホとかもいて疲れるから、少し参考になればと思ってアップしておく。
ちなみに、私は大学院に進学するけど、実は元々就職する予定で某大手 SIer にほぼ内定してたんですよ。(実際には、大学院へのオファーが来る少し前で、内定出すから推薦書出して、って流れになったので辞退した。)
就活の仕方には、学校や学部ごとに違う点が多々あるので、あくまで地方国立大、情報系学科男子、ソフトウェア・IT・情報通信関連志望の場合と思って読めばよいです。できるだけ主観的にならないように、基本的なことをまとめてみた。予算がなかったので、たくさん企業を受けたわけじゃないけど、知ってる限りで書く。あくまで体験談です。
・就活のしかた プレゼン版もあります。
企業研究とか
推薦応募と自由応募
服装とかバッグとか髪型とか (男性の場合)
メールの送り方
○○株式会社 ○○部 ○○○係 ○○○○様
はじめまして、私は○○大学○学部○○学科の○○○○です。-本文-
それでは、どうぞよろしくお願いいたします。
—
○○大学○学部○○学科 ○○○○
***@***.ac.jp 000-0000-0000
会社説明会 /OB 訪問 (第 1 段階)
履歴書とか ES (エントリーシート) とか (第 2 段階)
Web テスト・適性検査 (第 3 段階)
面接 (第 4 段階)
その他の選考方法
移動とか
正直、何がウケるのか
情報源
ためになる本とか
後輩にプレゼントしたい!就活本
完全版は名ばかり?
レイアウトは見やすいけど、極端すぎる!!
あったほうがいいでしょ
企業選びにはこれ!
データが多少貧弱
企業の雇用条件をチェック!
就職活動必需品
出題傾向を掴むには良書
某外資証券会社で玉手箱の超ハイレベル版出ました
便利な情報
筆記対策の1冊目
1200社の筆記情報
就活の全体像
地図というよりは羅針盤
共感できるSE人生です
実践的な内容で参考になりました
うまくいかないときは
タイトルにドキっとして
Webデザインとグラフィックの総合情報サイト – MdN Interactive – web creators最新号 – 2008年8月号
「宅配便の配達状況 API」が Web デザイナー向け情報誌の「Web Creators 8 月号 (6 月 28 日発売) 」に掲載されました。
P.144 から始まる、「WEB API PROGRAMMING!」という、WEB API とその使い方を紹介する連載内で掲載されています。
記事をかいてくださったのは、なんとウノウの中澤直也氏で、まるまる 1 ページも割いて紹介してくださっています。(中澤氏のブログ Carpe Diem)
ページ下部には「歌詞リーダー」や「Amazon リンク作成」も紹介してくださってます。しかも実名入りだったのでちょっとびっくり。
他には、「お菓子の虜 Web API:お菓子の虜」や、「姓名判断API」が掲載されていました。
「お菓子の虜」はマッシュアップに頼らずすべて自力でデータベース化してて凄いと思う。
大学の生協売店にも並んでいたのでなんだか嬉しかった。
なぜかこの時期に「行列式の値」と「逆行列」を作成するプログラムを毎年書いている気がして、その都度作るのが非常に面倒臭いので、今後も困らないようにアップしておく。
行列式の値の求め方
・2 次の場合
たすきがけで簡単に解ける。
double a[2][2]={{1,2},{4,-1}}; double det=0.0; det=a[0][0]*a[1][1]; det-=a[0][1]*a[1][0]; printf("%f\n",det); // -> -9.000000
・3 次の場合
サラスの方法で簡単に解ける。
double a[3][3]={{1,8,9},{-3,2,1},{4,1,5}}; double det=0.0; det=a[0][0]*a[1][1]*a[2][2]; det+=a[1][0]*a[2][1]*a[0][2]; det+=a[2][0]*a[0][1]*a[1][2]; det-=a[2][0]*a[1][1]*a[0][2]; det-=a[1][0]*a[0][1]*a[2][2]; det-=a[0][0]*a[2][1]*a[1][2]; printf("%f\n",det); // -> 62.000000
・4 次以上の場合
通常の計算では 3×3 以下の余因子行列を作成して、符号を掛けた上で足し合わせるやり方を使うと思う。
これをプログラムで実装するには、再帰または多段ループが必要になり計算量も多い。
特に 5 次以降になると面倒。
でも、上三角行列を作って、対角部分 (左上から右下) を掛け合わせれば、簡単に行列式の値を求めることができる。
このやり方だと非常に簡単。
double a[4][4]={{2,-2,4,2},{2,-1,6,3},{3,-2,12,12},{-1,3,-4,4}}; double det=1.0,buf; int n=4; //配列の次数 int i,j,k; //三角行列を作成 for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(i<j){ buf=a[j][i]/a[i][i]; for(k=0;k<n;k++){ a[j][k]-=a[i][k]*buf; } } } } //対角部分の積 for(i=0;i<n;i++){ det*=a[i][i]; } printf("%f\n",det); // -> 120.000000
逆行列の求め方
何といってもやはり掃き出し法が簡単。2 次から n 次まで対応。
掃き出し法の他に、LU 分解で解く方法もあります。
double a[4][4]={{1,2,0,-1},{-1,1,2,0},{2,0,1,1},{1,-2,-1,1}}; //入力用の配列 double inv_a[4][4]; //ここに逆行列が入る double buf; //一時的なデータを蓄える int i,j,k; //カウンタ int n=4; //配列の次数 //単位行列を作る for(i=0;i<n;i++){ for(j=0;j<n;j++){ inv_a[i][j]=(i==j)?1.0:0.0; } } //掃き出し法 for(i=0;i<n;i++){ buf=1/a[i][i]; for(j=0;j<n;j++){ a[i][j]*=buf; inv_a[i][j]*=buf; } for(j=0;j<n;j++){ if(i!=j){ buf=a[j][i]; for(k=0;k<n;k++){ a[j][k]-=a[i][k]*buf; inv_a[j][k]-=inv_a[i][k]*buf; } } } } //逆行列を出力 for(i=0;i<n;i++){ for(j=0;j<n;j++){ printf(" %f",inv_a[i][j]); } printf("\n"); } /* 出力 2.000000 2.000000 -1.000000 3.000000 -4.000000 -5.000000 3.000000 -7.000000 3.000000 4.000000 -2.000000 5.000000 -7.000000 -8.000000 5.000000 -11.000000 */
プログラムは Microsoft Visual Studio 2008 および Fedora 9 の gcc で実行確認済み。
手元に Linux のマシンがなかったので、稼働中の Web サーバを使って動作確認した。
アクセス元のホストの国籍を Apache のログからアクセス解析して、って頼まれたけど、どうしたらいいのかわからなくてスクリプトを書いてみた。
いろいろ調べたら、PHP の PEAR::Net_Whois を使えば、Whois 情報を取得できることがわかった。
サーバーに PEAR::Net_Socket と PEAR::Net_Whois をインストールする。
$ pear install Net_Socket $ pear install Net_Whois
でも、$whois->query() を行うときに、検索先の Whois サーバを指定しないといけない。
InterNIC のサイトを見る限り、IP アドレスの第 1 オクテット目ごとに、地域インターネット レジストラ (RIR) が決まっているらしい。(IP アドレスの割り当て状況)
それを参考に IP アドレスから、PEAR::Net_Whois を行う関数を作った。以下の通り。
function getWhoisFromIPAddr($ipaddr){ //Include PEAR::Net_Whois require_once("Net/Whois.php"); $whois = new Net_Whois; //Split IPaddr into 4 octets. preg_match("/^(\d{1,3}).(\d{1,3}).(\d{1,3}).(\d{1,3})(.*)/",$ipaddr,$oct); //Choose WHOIS server by 1st octet. if($oct[1]<=40){ $server="whois.arin.net"; } elseif($oct[1]==41){ $server="whois.afrinic.net"; } elseif($oct[1]<=57){ $server="whois.arin.net"; } elseif($oct[1]<=61){ $server="whois.apnic.net"; } elseif($oct[1]==62){ $server="whois.ripe.net"; } elseif($oct[1]<=61){ $server="whois.apnic.net"; } elseif($oct[1]<=76){ $server="whois.arin.net"; } elseif($oct[1]<=95){ $server="whois.ripe.net"; } elseif($oct[1]<=113){ $server="whois.arin.net"; } elseif($oct[1]<=126){ $server="whois.apnic.net"; } elseif($oct[1]<=132){ $server="whois.arin.net"; } // elseif($oct[1]==133){ $server="whois.apnic.net"; } elseif($oct[1]<=140){ $server="whois.arin.net"; } elseif($oct[1]==141){ $server="whois.ripe.net"; } elseif($oct[1]<=144){ $server="whois.arin.net"; } elseif($oct[1]==145){ $server="whois.ripe.net"; } elseif($oct[1]<=149){ $server="whois.arin.net"; } elseif($oct[1]==150){ $server="whois.apnic.net"; } elseif($oct[1]==151){ $server="whois.ripe.net"; } elseif($oct[1]==152){ $server="whois.arin.net"; } elseif($oct[1]==153){ $server="whois.apnic.net"; } elseif($oct[1]==154){ $server="whois.afrinic.net"; } elseif($oct[1]<=162){ $server="whois.arin.net"; } elseif($oct[1]==163){ $server="whois.apnic.net"; } elseif($oct[1]<=170){ $server="whois.arin.net"; } elseif($oct[1]<=171){ $server="whois.apnic.net"; } elseif($oct[1]<=185){ $server="whois.arin.net"; } elseif($oct[1]<=187){ $server="whois.lacnic.net"; } elseif($oct[1]<=188){ $server="whois.ripe.net"; } elseif($oct[1]<=191){ $server="whois.lacnic.net"; } elseif($oct[1]==192){ $server="whois.arin.net"; } elseif($oct[1]<=195){ $server="whois.ripe.net"; } elseif($oct[1]==196){ $server="whois.afrinic.net"; } elseif($oct[1]<=199){ $server="whois.arin.net"; } elseif($oct[1]<=201){ $server="whois.lacnic.net"; } elseif($oct[1]<=203){ $server="whois.apnic.net"; } elseif($oct[1]<=209){ $server="whois.arin.net"; } elseif($oct[1]<=211){ $server="whois.apnic.net"; } elseif($oct[1]<=213){ $server="whois.ripe.net"; } elseif($oct[1]<=216){ $server="whois.arin.net"; } elseif($oct[1]<=217){ $server="whois.ripe.net"; } elseif($oct[1]<=222){ $server="whois.apnic.net"; } elseif($oct[1]<=255){ $server="whois.arin.net"; } else; //Exec query to chose WHOIS server. if($server){ return($reply=$whois->query($ipaddr,$server)); } else{ return(0); } }
133 で始まる IP アドレスといえば専ら、日本政府の機関、日本の国立大学法人 (うちの大学もそう)、日本の IT 企業のアドレスだから、APNIC なはずだけど、エラーがでるので、ARIN に問い合わせしている。
本来なら、エラーメッセージをもとに 2 次検索すべきなんだろうけど面倒なので省略する。
Whois 情報が返ってくるので、それを引数にしてに以下の関数を実行する。
function getCountryByWhois($result){ preg_match("/country:( )*([a-zA-Z]{1,3})/i",$result,$country); if($country[2]){ return($country[2]); } else{ return(0); } }
2 つの関数は、以下のようにして使える。
echo("Who is 133.62.198.174 ?<br />\n"); $result=getWhoisFromIPAddr("133.62.198.174"); echo("Country: ".getCountryByWhois($result));
実行すると、「Country: JP」とカントリーコードが出力される。
蛇足だけど、IP アドレスから会社名や法人名を調べるには、JPNIC のサーバ (whois.nic.ad.jp) に対して、$whois->query() を行えばよい。海外の企業も各国の下位レジストラの Whois サーバに置き換えれば検索できる。
erf, erfc (誤差関数, 相補誤差関数) を求める PHP の関数
PHP には erf(), erfc() がなかったので、Ruby に Math.erf(), Math.erfc() として実装されている C のソース を PHP に移植しました。
関数には困らないはずの PHP に統計処理に必要な関数がなかったので、 Ruby 本体のソースコード (C 言語) を探してきて PHP で書き直した。
数値計算を伴うプログラムでは言語を選ぶときに、数学関数の豊富さも考慮したほうがよさそう。Ruby 勉強しようかな。
smartdialog.js
「Yahoo!画像検索」や「Lightbox」のように、画面全体にレイヤーを重ねてダイアログを表示するJavaScriptのライブラリです。
他のライブラリと比較して、任意の色を背景色に選ぶことができ、CSSファイルや透過画像が不要だという長所があります。
必要だったから作ったので、ついでに公開。
JavaScriptのライブラリを作ったのも、JavaScriptでオブジェクト指向プログラミングを実践したのも初めてなので、バグが残っているかも。glayer.jsを一部参考にさせていただきました。
Yahoo!画像検索では、LightBox風UIを実装してから使い勝手がよくなった。
Flickrに登録されている画像が優先されて表示されるっぽいけど、日本語版も登場する予兆かな。しかし、FlickrでCCライセンスで公開している画像を「(C) All right reserved.」と著作権表示するのはまずい気がするんだが。