4.22.2014

おーよーじょーほーしょり ~応用情報処理技術者試験~

平成26年度春期の応用情報処理技術者試験受けてきました。
結果は午前は大丈夫、午後は単純な正解率がおそらく63%前後、というあやふやなライン上。
記述の採点と配点次第でどうなるか・・ というところ。

基本の時もそうだったが会場に来ないやつもやっぱり多いのだ。
統計では出席率6割ほどらしいが受験した教室では半分も居なかった。
駅から試験場の大学まではすごい行列だったのでこりゃ教室もびっしりかなと思ったが。

3人掛けの長テーブルに2人ずつ、両端に座るような席だ。
そして実際は教室内のほとんどの人が3人掛けテーブルを独り占めしていた。たまに2人でテーブル1つ使ってるのを見るとククク不運な奴と感じるくらい。前後のテーブルが空いてるんだからずれて座れば良いのにとか思ったりw(午前試験を欠席した時点で不合格が確定するので、言えば午後試験は空いてる席に変えてもらえるかも知れません)
どうも教室ごとに空席率はかなり違うようだ。チラッと見た感じ高度試験の教室はほぼ空席が無いように見えた(俺も頑張らねば・・)。応用情報も受験番号が若い方の教室は空席が少ないようだ。受験番号は申込日付で決まると思うので、やはり早めに申し込むような人の方がやる気があるということだろう。
自分は締切日の時間ギリギリで申し込んだので一番端のやる気ない人たちの教室になったということだ。
これから受ける人は敢えて遅めに申し込むとテーブル独り占め出来て集中できるかも。
(その代わり遅めに申し込むと遠い試験会場に飛ばされるらしいので止めといた方が無難です)

申し込んだけど結局勉強できなくて来ない、ってのはまぁ仕方ないと思うが、来なかった人の分で無駄になる問題冊子、答案用紙の束がかなりの分量でドサッっと捨てられるのがもったいない気がした。

試験内容と反省
 結果的に試験対策が午前の対策に偏り過ぎ、午後の対策を軽視し過ぎと感じた。
 試験対策の方法として、「午後は国語と割り切って午前の知識を付けることに重点を置くべき」と書いていたり、「午後の文章問題は問題文に答えがあるので落ち着いて読めば答えられる」と書いてあったりする。
実際午後の過去問をやってみると用語や知識を問う問題は選択問題なので「午前対策+常識」で正解に近付くことができたし、記述問題は問題文から一行抜き出すだけだったりで、これならいけるかなと思って油断していた。

午前
 分からなかった問題だけやけに記憶に残るので終わった後は多少不安にはなる。しかし全体としては普通かなと思った。帰ってからの自己採点で65/80の正解。午前は試験中も終わった後も手応え普通という感じ。

午後
問1 セキュリティ(必須問題)

 いきなり必須問題というのが僕が使ってた教本の情報と違っていて、度肝を抜かれる。しかし元々セキュリティは選択しようとしてたので影響無いと心を鎮める。(2013年度の教本を読んで分かったつもりになってたが、公式の試験要項を見てなかった。こういう人、意外と多かったと思うw)
 開始直後、問題文に虫食い[a]、[b]を見つけたので、ふむふむ「当てはまる用語をア~キから選択しなさい」的なやつだなと思って設問を見ると「適切な字句を答えよ」だと・・。おぃおぃ話が違うじゃないかぁ、やだなぁもう。と半笑いしつつ、ざっと問1の設問を見ると選択問題は無く、全て記述問題。ここでちょっと焦り始める。
 1問を平均25分くらい、情報システム開発、データベースあたりは15分から20分くらい、という目論見だったが問1に30分ほどかけてしまった。しかもあまり自信が無い。
(4/8)

問3 アルゴリズム(以降は選択問題)

 問1に少し時間がかかり、自信も無かったので、アルゴリズムは20分くらいで確実にいきたい。が、急いで読んだせいか、何を書いてるのか理解できなかった。ここで完全に焦ってしまう。概要は無視してプログラムコードとその内容説明と設問だけを見て考えることにするが、全体で何をしているのかよく分かってないのでコードも理解できない・・。うさぎ、亀、うさぎ、亀、amari、amari・・。
 問3開始から10分くらい経っても何も記入できない、というか何も理解していない・・。これじゃ実質何もしてないのと同じじゃないか、など余計なことを考えたり、時計を見て経過時間と残り時間を計算したり無駄なことをやり始める。
焦燥感が強くなり、この時点で顔が白くなっていたと思う。
さらに試験監督が何事か声を上げる。この声に死ぬほどビビり、俺半分泣き始めるw(「13:40なので退室しても良いです」というだけだったのだが・・)
 この歳で試験会場で泣きそうになってる自分に笑えてきて逆に開き直ったかもしれない。さらに10分ほど考え、結局コードの穴埋め2つほど埋めただけで問3は後回し、あるいは問題選択を問2に変えるか後で決めることにした。

問6 データベース
 かなり心が折れてたので本当は得意な情報システム開発をやりたかったが順番にやることにした。その前に問4、問5をチラ見したがなんかすげぇ数式が書いてあり、見なきゃよかったと後悔する。
 こころが乱れたまま始めたが、過去問でもおなじみのE-R図の虫食いを埋める、という問を自信満々で記述する。続いて簡単なSQLの虫食いもすぐに記述する。これでかなり落ち着きを取り戻した。今回、簡単なSQLと複雑なSQLの2つが出題されていて、助かった。自信を持って答えられる問題が続くと安心する。急いでいたのでざっと見直し含めて15分~20分ほど。
(ちなみに答え合わせしてみると自信があった割に正解率はぜんぜん低かった・・)
(6/9)

問8 情報システム開発

 引き続き得意分野。親クラスの関数の実装は空にして子クラスで実装する、みたいな記述問題が嫌な感じだったが多分伝わるだろうと思った。(実装を空(から)にする、というのは用語として正しいんだろうか・・) 
後でまた見直すとして15分ほどで次に進む。問3を飛ばしてることを含めても、ここで時間的には遅れを取り戻した気になる。
 シーケンス図に操作盤を描画のシーケンスを記入する問題、場所を盛大に間違える。あ~ぁ、分かったのに・・配点高そう・・。
(8/9)

問9 プロジェクトマネジメント
 落ち着いたところでこの辺から文章問題。と思いきや知識が必要な設問も多いんじゃないか?。
 それに虫食いの[a]、[b]が長文の最初と最後に分かれててやりずらい。内容もイマイチ分からん。オフコンって何?ソースコードを移行?何?みたいな感じ。それでもW課長の言いたいことは半分くらい分かった気がする。やはり過去問より苦労した。でも文章読解に頼った割には良い正解率。
(4/7)

問10 サービスマネジメント

 引き続き文章問題。と思いきや計算も必要?
 直列のサービスの稼働率の計算だから掛け算だよなぁとは思うが「0.999*0.999*0.998」という筆算では絶対やりたくない計算・・。時間が余ったら計算するとして、「1 -0.001 -0.001  -0.002」で0.996だ、と仮記入。他は知識が乏しいものの、文章内容と常識だけで記述を埋めていく。G課長の言い分はよく分かった。これも読解に頼った割に良い正解率。
(4/7)

問3 アルゴリズム再び
 一応問2をチラ見する。が、プログラマなのにアルゴリズムを選択しないてのはどうなん?と思い問3をやり直すことにする。完全に落ち着きは取り戻しているし。
 まだ時間もあるのでコード穴埋めは後にしてn=88の場合でアルゴリズムをトレースする。割り算しまくり、こういう単純作業も心を鎮めるのに良い。α、βが埋まり、安心する。
 トレースしたことでコード穴埋めも徐々に分かってくる。しかしループが2つでそれぞれのループ条件が穴埋めになっている問題、どちらも同じループ条件だった。なので同じ答えを書いてしまったが、片方はWhile(True)でIF文にBreak条件、もう片方は素直にWhileのループ条件なので逆だった。こんな難しい問題でこんなくだらない引っかけに引っかかるとは・・。
ちょっと見直せば分かったのに、どうしても分かった答えより分からない答えを考える方に力が入ってしまうもんだ。
結果的になんとか半分くらいは取れたかな?
ビッグオー記法はどうしても慣れない。最初はO(n)、O(n)だよなぁこれ、と思って記入したが、これじゃ解答として変だよなぁ、と思って首をひねりながらO(n)、O(log n)と書き直した。結局O(1)、O(n)が正解で、せっかく合ってた1問を落としてしまう、悔しい。
(5/9)
(ちゃんとやってれば7/9まで伸びたなぁ。7/9なら安心できたのに、これで落ちてたら悔しいなぁ。)

最後に問10の「0.999*0.999*0.998」の筆算に挑戦する。が、正気の計算とは思えん・・。0.996と書いたままギブアップ。全体で 31/49、63%。

結果的には0.996で正解なんだけど、正しい解法を。
「(1-0.001)*(1-0.001)*(1-0.002)」と考えるらしい。すると順に計算でき、「(1-0.001-0.001+0.000001)*(1-0.002)」→
「(1-0.002+0.000001)*(1-0.002)」→
「 1-0.002+0.000001-0.002+0.00004-0.0000002」→
「 1-0.004  + その他ゴミ」で0.996が求まる。なるほどぉ。。
(実際こういうのはJavaScriptとかで「0.999*0.999*0.998」一発だから・・)

配点によるんで安心は出来ないけど、正解率は6割超だし、、通ってくれぇ・・・(>人<)

すっかり集中力が切れているので何とも言えないが、他の問を見た感じ、この問題選択以外ありえなかった。他はすげぇ数式とかいっぱい載ってるのとかあるし無理無理・・。
でも今はもう基本情報の午後問題も解けないくらいダメダメになってるから、わかんねぇ。

すげぇ数式はサービスが直列とか並列で繋がってる時の稼働率の計算式だった。少し整理するだけで正しい選択が出来るだろうけどあの雰囲気であれ見たら慌てちゃうよなぁ。

なんとか受かりました

4.17.2014

Sichuan style Bean-starch Vermicelli

麻婆豆腐の素はよく見かけるのに麻婆春雨の素は何故かあまり売ってない。
そこで丸美屋の麻婆豆腐の素を使い、豆腐を春雨に置換えて作ってみたが普通に美味しい麻婆春雨が出来た。

麻婆春雨はリンク先にあるように”麻婆の素と春雨と具材のセット”として売ってる。おそらく材料全てが保存食なのでセットパッケージにして利鞘を稼いでいるのだ。

実際に麻婆豆腐の素と春雨を別々に買うと同じ金額で倍くらいの量が買えた(李錦記とかは分かんないけど丸美屋はそう)。(具材は入ってないのだが)ネギと挽き肉を足してより安く、より美味しく上がると思う。
豆腐と違って乾燥した春雨は保存が効くので良い。

ちなみに豆腐も春雨も豆由来(大豆or緑豆)の食物。
英語で言うと "bean‐curd"(豆腐) と "bean‐starch vermicelli"(春雨)。
麻婆の英語が単に"Sichuan style"というのは意外。これは「四川風」の意味しかないんでないかな?

重要な注意:豆腐を春雨に置換える場合、乾燥した春雨を入れると水を吸うので豆腐を使う場合よりも水を多めに入れないとずっしりと固まって味がすごく濃くなる。片栗粉を入れる前に水分量を丁度よく調整するのだ。

JavaScriptでClass的なものを定義する

/**
 * 唯一のGlobalオブジェクトとして作る。
 * アプリケーションのプログラムは全部MyAppの下にぶら下げる。
 */
MyApp = {
   version : '1.0.0'
};
/**
 * パッケージ
 */
MyApp.graph = {};

/**
 * 点を現すクラス。
 */
MyApp.graph.Point2D = function(x_, y_) {
   this.x = x_;
   this.y = y_;
};
MyApp.graph.Point2D.prototype = {
   getX : function() {
      return this.x;
   },
   getY : function(){
      return this.y;
   }
};

/**
 * 四角形を左上の点と右下の点で現すクラス。
 */
MyApp.graph.Dimention = function(topLeft_, bottomRight_) {
   this.topLeft = topLeft_;
   this.bottomRight = bottomRight_;   
};
MyApp.graph.Dimention.prototype = {
   getAreasquare : function() {
      var self = this;
      var width = Math.abs(self.topLeft.getX() - self.bottomRight.getX());
      var height = Math.abs(self.topLeft.getY() - self.bottomRight.getY());
      return width * height;
   }
};
/**
 * 一応のメイン関数
 */
MyApp.main = function(){
   var p1 = new MyApp.graph.Point2D(1,1);
   var p2 = new MyApp.graph.Point2D(10,20);
   var d1 = new MyApp.graph.Dimention(p1, p2);

   var areas = d1.getAreasquare();
   alert(areas);
};

// テスト実行
MyApp.main();

必要なものは全てサンプルコードの中に

スクリプト言語で本格的なクラスや設計が必要になるっていう状況はその時点で何か間違っているのかもしれない。
しかし、クライアントサイドのJavaScriptが動作と処理のほとんどを占めるというWebアプリケーションを作ったことがあるのでメモ。
ブラウザ上のユーザインターフェースはJQueryなどのライブラリを使い、クラス設計や内部処理はPureJavaScriptでやるという方法で十分作れるということが分かった。
クラス変数はコンストラクタとなるfunctionの処理でthis変数に定義、そして関数はprototypeに定義するのがポイント。
JavaScriptは関数言語なので正確にはクラスではないのだがクラスと同等なものを実現できるので良しとする。
あとクラスを継承したいときは面倒なのでライブラリのextends関数を使った(大抵のJavaScriptライブラリに用意されていると思う)。でも少し調べればライブラリを使わないでも実装できるはず。
ソースをファイル分割したりpackage管理したりというのは人力でフォルダ管理するしかないか。

4.10.2014

IXMLDOMDocument2 の PopulateElementDefaultValues

マイクロソフト社の、世界中で使われているプログラミング言語の、とあるプロパティ名「PopulateElementDefaultValues」。
情報が欲しくて検索すると7件だった。
これはなかなかすごいと思う。内2ページはMSDNなのでそれを除くと世界に5ページしか情報が無い。
思わず世界で6ページ目になるためにエントリー。
そして情報は何も載せないという罠・・・
単純にMSDNを訳すると
「xmlドキュメントに対してValidate関数を呼んだ時に、DTDに沿ってデフォルトの要素等が作られるかどうか」で良いのだろうか。Trueに設定すると作られるようになる。自動で作られた要素もSaveすると一緒に保存されるらしい。DTD自体あまり使わないから情報少ないのかな?
まぁ今まで世界で誰も言及していないプロパティ(msxmlの)なのでこんな感じで。

(まんまとGoogle検索の2番目に載ったじぇω)

4.08.2014

Host1Free当選

Host1Freeという無料VPSに登録を申し込んでいた。
無料で自由に使えるLinuxが貰えるなんてうまい話だが、それ故に競争率が高く、申し込んでも早々には使えないものだ。記憶では1年くらい前に申し込んでたのだが…。それがつい先日使えるようになったよ、というメールが来ていた。さて何に使おうか(決めてないのか)。

先週アコギを買ってしまった。
それが買って数日は調子よく弾いてたものの、よく見るとネックが捻じれてるのに気がついた。が~~ん。
楽器屋でネックの状態を確認しなかったのは実はこの動画の影響だ…。「ネックを見てもあんま分かんない」と動画では言うが、楽器屋によっては目視で分かるほど捻じれたものを新品として置いていることがあるのだ。新品でもやはりちゃんとネックの状態は目視で確認してから買うべきだった…。
ネックの捻じれは反りとは違い、文句なく交換対象という認識なのだが、はたして楽器屋は何て言うだろうか…。買って3日も経ってないのにこうなってるということは間違いなく買ったときからこうなってたんだが…。保証期間内どころか1週間以内に連絡してるのだから返品か同等品と交換が妥当だと思うのだが…。

VPSの使い道も無いので写真を載せてみる。。
http://maxwaltham.dip.jp/
(追記)
交換してもらいました!対応してくれた楽器屋に感謝!やっぱり全然違うじゃん。
素人目でもネックの状態だけは確認してから買うべきだ。
こっちの方がましってだけで、細かく見るとやっぱり工作精度はあまり良くないかもなぁ。最初のアコギだから仕方ないか…。エレキとは一回り価格帯が違うんだろうなぁ。

Host1Freeを使い始めてから何をやったか忘れないようにメモを残しておくべきだ。
update-rc.d で要らないサービスをザクザク削る。
sendmail関係はautoremove,purge。
pythonも必要になったら入れ直せばいいしってことでautoremove,purge。
/etc/localtimeをTokyoにリンク。
Apache2をautoremove,purgeしてLighttpdに入替え。
root以外の通常用ユーザを作成。

規約のためにプロキシソフト(ApacheのプロキシとかSquiedとか)は入れてはいけない。
いまのとこHttp公開ディレクトリに静的ファイルを置いて遊んでるだけ。
あとLighttpdで認証が必要なゾーンを作って仲間内だけにファイルを渡すことが出来るようにした。
(これがもっと前に使えてれば20Mずつに区切ってチマチマとメールを送らなくて済んだのだ)
「2週間アカウントが不活動で誰もそのWebサイトにアクセスしなければアカウントは削除される」ってのは厳しいなぁ。ある程度のサイトコンテンツを作って少なくとも2週間に1アクセスあるようなサイトにすればいいってことだろうか。
(追記)
DynDNSが無料じゃなくなってた!すごい久々にログインして、無料のまま使えたので全然気付かなかった。結構衝撃。なんか月一回操作しないといけないらしいのでieServerに切り替えた。
Host1Freeからメールが来ていた。こっちも毎月確認メールが来て「更新」って操作をしないと鯖が消えるようだ。まぁ面倒だけど家賃振込みみたいなもんだと考えると無料だし全然いいかなぁ。

4.04.2014

視力検査は部屋を暗くして

去年の年末くらいにメガネを新しくしました。
個人的に右目が効き目で左目は弱視気味(乱視もあって矯正しても右目のようには見えない)。

前回は、左は乱視も近視も強めのレンズ(忘れたが近視-2.50Dくらい、乱視も結構な数値)、右は近視のみ-2.00Dのレンズ、これで大体左右が揃って視力1.0前後の完全矯正という眼鏡だった。
こんなんなので調整が難しいが今回はもっときっちり測って右目は-1.75Dで十分、左目はさらに強くした方がバランスが良くなるという結果だった。右目は矯正を弱くしても視力的が変わらなかった。左とのバランスはとても良くなって快適になった。(しかしそのうち左目は失明するんじゃないかと思ったりw 乱視が強くレンズを通して丸いものを見ると明らかに楕円に潰れているのが分かるくらい。)

いつも眼鏡屋で度数を測ってもらうんだけど、この計測の時に眼鏡屋の照明がちょっと影響するんじゃないかと思う。普通、眼鏡屋の店内は昼間のように明るくなっているだろう。すると瞳孔が絞られ、本来の視力にピンホール効果が加わった結果になるんじゃなかろうか。今回お世話になった眼鏡屋は、眼鏡を陳列している明るい店舗は1階部分、視力を測る機械(と鼈甲とかの高級眼鏡)は少し暗めの2階にあった。瞳孔が完全に開いた状態と毛様体を脱力させた状態で測ってこそ正しく測れるはずだ。そのために照明まで気を遣ってるとするとすごく良い眼鏡屋だと思う。まぁ照明が影響するってのは気のせいかも知れないけど。(実際、視力検査室の照明とランドルト環の背景のバックライト輝度はそこそこ影響を与えるようで、どの程度の明るさ、コントラストを保つべきか決まってるらしい)

Wikipediaの近視の項目が断定的過ぎてちょっとイラつく話。
近視の原因は分かってないはずなのに環境は影響しないって言う方向にかなり恣意的に持って行ってる。
なんでそんななんだろうと思ったらこの情報は視力回復トレーニングの商材宣伝と繋がってると考えると納得できる(少し調べればそういった宣伝サイトがWikipediaを逆に引用しているのが分かるだろう)。
Wikipediaもそういう用途に使えるというのは驚きだ。まぁ誰でも書けるものだし近視の項目を積極的に編集する人は少ないようなのでそういうことが出来るのだ。

英語版Wikipediaの近視(Myopia)の項目は参考文献と論文の引用が100を超える。日本版は3つだけだ。この対比をどう捉えるか。

眼鏡関係の記事:眼鏡は弱めが良いか