foo are you, man.

基本的には技術ネタ書きます. 備忘録的な感じで行きます!

応用情報技術者試験に合格した

長らくブログの更新がストップしており申し訳ないです。(空虚に向かって)
最後にブログを更新してから今まで結構色々な事があったんですが、筆不精なものでブログを更新するまでには至りませんでした。

さて、なんだか分かりませんが応用情報技術者試験に合格してしまいました。一先ず試験結果をば。

f:id:importable:20160617173310p:plain:h500

午後が中々にギリギリですね…。でも合格は合格です。しかし本当に驚きました。ちなみにAPを受けようとしてからここまでの経緯は次の通りとなっています。


基本情報に合格したのでAPも受けてみるか〜と軽い気持ちで試験に申し込みを行う

APまで春休みがあったので、そこで勉強しようとして全く勉強しなかった。FEの参考書は暇な時に眺めていた。

試験直前(多分2週間ぐらい前)から過去問を解き始める。過去問道場を使い続け、基本的には午前問題しか解かなかった記憶です。正答率は60〜70%をフラフラ。駄目かこれ〜となった。ちなみに午後に関しては必須であるセキュリティ分野をチョロっとやってました。

試験本番。午前問題では今までやってきた過去問と殆ど同じ問題が何問も登場して少し驚いた(噂には聞いていたけど)。午後に関しては事前までどれを選択しようかなぁって悩んでたぐらいだった。

試験終了後、とりあえず午前の採点はすっかと思い午前だけ採点した。結果70点を超えていたので「午後もやっときゃよかったなぁ」と後悔した次第。

合格してるやんけ!(驚愕)


ざーっと書きましたが概ねこんな感じです。

応用情報技術者試験を受けた感想

FEの知識がそこそこ残っている状態受けたのが功を奏したのかな〜と思っています。それに加えて、過去問って本当にそのまんま出るんですねと思うぐらいそのまんまで出てきたのでそれは確実に拾いました。
今年は午後問題、結構簡単だったかも?しれません。特にアルゴリズムの問題が結構簡単だった様な気がしました。それこそクイックソートだのヒープソートだのが出れば泣く泣く捨てていたかもしれませんが、今回のライフゲーム問題は落ち着いてプログラムを読めばサクサク解けました。
後はあまり覚えていません。

勝因?

普段趣味でちょこちょこプログラムを書いているのがここに来てやっと効果を発揮したのかな〜なんて薄っすら思っています。というのも、問題で出てくる設定が何処かで見たことあるなぁというものが多かったからです。特に、タッチパネルの問題!これはArduinoを触っているお陰か楽しんで解けました。後はやっぱりライフゲームです。ライフゲームにハマっていた時期があるのでその時得た知識を使えたのかもしれません。

使っていた本とか

勉強に使用していた本を書いておきます。

キタミ式イラストIT塾 基本情報技術者 平成28年度

キタミ式イラストIT塾 基本情報技術者 平成28年度

2016 応用情報技術者 午後問題の重点対策 (午後対策シリーズ)

2016 応用情報技術者 午後問題の重点対策 (午後対策シリーズ)

恐らくどちらもド定番というか、応用情報とか基本情報とかで調べると上位に出てくる本ですよね。個人的にきたみ先生のFE参考書はとてもオススメです。APを受ける前にパラパラ眺めていたんですが、これも結構効いた気がします。
APの参考書に関してはセキュリティ分野は全部こなして、後はあまり触りませんでした。でも凄い詳しく書いているので(その分文字は多いですが)もっと読みこめば午後の点数はさらに上がった気がします。
後はやはり、過去問の数をこなすべきです!情報技術者試験での定石ですが、これは本当に正しいと思います。

今後はどうするか

多分高度試験は受けないと思います。個人的にはAPが取れた時点で満足です。もし次資格にチャレンジするとしたらハードウェアとかそっち系かな〜と思っています。

HerokuにてFlask-SocketIO使う時に503エラーが出る時の対処法

HerokuにてWebSocketを使う時にUnexpected response code: 503が出てしまい上手く通信が出来ない場合があります。

Socket.IOはWebSocket以外にもAjaxポーリングだとかJSONポーリングだとか様々な通信方法に対応しており状況に応じて臨機応変に変更してくれる機能をもっております。
Herokuに関しては今年の初めぐらいにWebSocketに正式対応したみたいでWebSocketを使ってワイワイ通信できます。

が、冒頭にも書いたように何故か急に503エラーが出て通信ができなくなりました。そこでググってみた所色々と引っ掛かり“Unexpected response code: 503” in Chrome. Perhaps having to do with socket.io on heroku?では以下の行を追加すれば直るよ!と書いてありました。

io.configure(function () { 
  io.set("transports", ["xhr-polling"]); 
  io.set("polling duration", 10); 
});

さてコレですがFlask-SocketIOではどう書くのでしょう…
そこで、SocketIOオブジェクトのrunメソッドの引数を調べてみました。
結果transportsとclose_timeoutをごにょごにょすればいいっぽいと分かりました。

socketio.run(app,transports=['websocket'],close_timeout=10)

こうしてあげてデプロイ->ページに接続した所無事503エラーが消えたのでした!
ちなみにtransportsはリストで渡し、Flask-SocketIOでは'websocket', 'xhr-multipart', 'htmlfile', 'jsonp-polling', 'flashsocket', 'xhr-polling'の6つに対応している様です。

HerokuにFlask-SocketIOをデプロイする方法

Webソケットを簡単に扱えるFlask拡張モジュールのFlask-SocketIOをHerokuにデプロイするにはどうしたらいいか色々調べたので忘れない為にも書いておきます。

Flask-SocketIOのGitHubリポジトリのIssuesに答えがありました。
Broken with gunicorn #16
Herokuにデプロイする際に同梱するProcfileに

web: gunicorn --worker-class socketio.sgunicorn.GeventSocketIOWorker module:app

を書きます。ただしmoduleとなっている部分はスクリプトファイルの名前を指定します。hoge.pyならmoduleの部分はhogeとなります。
それと恐らくmodule:appのappの部分はFlaskのインスタンス名だと思います。(伝統的にFlaskはappを使うから特に問題は無いかも…?)
それとrequirements.txtには忘れずにgunicornを追加してください。

こんな感じで上手く行けばHerokuでFlask-SocketIOが動くと思います。チャットとかFlaskを書く感覚でサクサク書けたりするので表現の幅がとても広がりますね!

焦電型赤外線センサモジュールSE-10をArduinoで動かす場合の注意点

久しぶりにブログ更新です。
春休みに入ったのでブログもちょくちょく更新していきたいと思います。

さて、焦電型赤外線センサSE-10をArduinoで動かそうと思って少し嵌ったので健忘録として。
SE-10のデータシートを見ると電源電圧は5-12VとなっているのでArduinoの5Vを入力したのですが動作が安定しませんでした。

そこで電源装置で7Vあたりを入力した所上手く動きました。
どうやらSE-10内部にあるレギュレータが5Vに降圧しているらしく5V入力では安定しないようです。
SE-10自体は5~12Vで対応しているので9V電池を電源にすると良いかもしれません。

現状報告

久しぶりのブログ更新となります。

最近ようやく辛かったテストも終わりねんがんの(?)夏休みに入りました。
といっても悲しいかな理系、夏休みは一ヶ月ぐらいしかありません。
作りたいものの計画とか紙に書いておかないと曖昧模糊として駄目かなーと思って焦っています。

さて、テスト終わりに秋葉原に行ってきたわけですが色々と買ってきました。紹介とかそれ使ってどうするのか今後の目標とか書いていきたいと思います。


①独習Java
 夏休み中Javaをある程度まで書けるようにしておきます。というのも大学2年から授業で使う言語は完全にJavaに移行するみたいなのでその為の準備となります。みんなにわからない部分聞かれても答えられなきゃね!
 パラーっと読みましたが、初学者には辛い本だろうなーというのが第一印象。それと、Cに慣れた人がいざJavaを始めるぞと思ってこの本を手に取るとオブジェクト指向関係の話題でぐぬぬとなってしまうかも。
 Javaに関してはよく言われていますがメソッド名が長い!これに限ると思います。それと配列の宣言方法が微妙に受け入れ難いです。

②atmega328-PU、水晶振動子、セラミックコンデンサetc...
 以前からArduino互換機を作ろうと思っていたのでその為に買ってきました。しかし互換機と言ってもUSBのシリアル変換部分もリセットスイッチも実装せずに殆ど最小構成で行こうと思っています。買ったその日にatmegaにはブートローダを書き込んだのでプログラム書き込み時はArduinoに直接刺して書き込みたいと思います。


ひとまずこんな感じとなりました。
まとまった開発の時間が取れるのはいまのうちなので色々と挑戦していきたいと思います。
現段階ではWebページとArduinoを使った自販機に作成でもしようかなとなんとなく思っていますが果たして完成するのでしょうか……

ディスプレイ無しでRaspberry Piをセットアップした時のIPアドレス

4kとかそこらで変えるRaspberry Pi。小さいパソコンだけに、その利点を活かすべくラズパイ自体にはあまりごちゃごちゃと周辺機器は接続したく無いですよね。
自分の場合ですがラズパイ自体には一回もディスプレイは接続したことはありません。


さて、LANにラズパイを参加させてあげるとDHCPさんのお陰でプライベートIPアドレスが振り当てられる訳ですが、ラズパイセットアップwithoutディスプレイを行うにはこのIPアドレスを何とかしてでも知る必要があります。
もちろんルータによっては設定画面から接続されている機器のIPアドレスがわかったりもするので自分で差分チェックすればめでたくラズパイのIPアドレスは取得できます。
しかし我が家のルータはどうやらそういった機能は無いようでした。


さて、ここでMACアドレス解決のarpとかブルートフォースよろしく総当りでping飛ばしまくるソフトとか色々ありますが自分の場合Pythonでサクッとスクリプトを書いてあげました。

import os
for val in range(256):
    os.system("ssh pi@192.168.0.%d"%val)

我が家のプライベートIPアドレスはクラスCなので192.168.0.はハードコーディングです。
あとはsshを叩いてくれるのでスクリプトを動かして放っておけばそのうちラズパイに接続されてるだろうっていうアレです。
自分の場合192.168.0.3だったのですぐ終わりましたが環境によってケースバイケースです。
しかも、正確には192.168.(0~255).(0~255)なのでこのスクリプトでは歯が立たない場合もあるはず。。。


突っ込みどころ満載ですが、Pythonを使えばこういう事も簡単にできるよ!っていうアピールということでw(シェルスクリプトでいいじゃん!っていうのは置いておいて)
ちなみに見事ラズパイのIPアドレスが割り出せ、sshでログインできたらあとはtightvncserverとか入れてあげて仮想デスクトップでGUI操作できるようにしておけばかなり便利だと思います!
それでは!

osascriptコマンドでコケた話

こんにちは!
いやー毎日に毎日暑いですね。
天気も安定しないし、ジメジメだしであんまり良い気分ではありませんがそれでも着実に夏が迫ってくるように感じられて心弾みます。

さて、今回ですが事の発端は久しぶりにApplescriptを書くかと思ったところから始まります。(本題は後のほうなので飛ばして読んでも大丈夫です)
現在ブラウザで見ているページのURLとタイトルをコマンドラインで"miteru"とか打ってTwitterで呟くスクリプトを書くかーってことで、ページのURLとタイトルはApplescriptを使ってサクッと取ってこようとしました。

サクサクっとtell application "Safari"してあげて、Applescriptは書き終えました。
そこで動作を確認してみるかと

osascript show_url.scpt

してみると、

osascript[6869:507] Error loading /Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types:  dlopen(/Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types, 262): no suitable image found.  Did find:\n\t/Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types: no matching architecture in universal wrapper\nosascript: OpenScripting.framework - scripting addition "/Library/ScriptingAdditions/Adobe Unit Types.osax" declares no loadable handlers.\nshow_title.scpt:49:53: execution error: Safari got an error:

みたいな感じでズラズラーっとエラーが出てきやがりました。

なんだこれはと思い、"osascript Error loading"でggってみると、結構色々と出てきてどうやらAdobe Unit Typesってのが悪さをしているようでこいつはx86、つまり32bitOSでないと動かないらしいです。
でも以前Applescriptでほげほげした時はosascript、エラー吐かずに使えたようなと思いを巡らすとAdobe関連といえばCS5の体験版を入れていました。
まぁ、それはともかくとしてフォーラムを読みあさるとどうやら

arch -i386 osascript hoge.scpt

として、使用するアーキテクチャi386にスイッチし32bit環境?としてコマンドを動かすことができるみたいです。(よくわかっていない)
へーこんなことできるのかと思いつつ試してみると、

arch: posix_spawnp: osascript: Bad CPU type in executable

???????????
またエラーが出てきたぞ?
とまぁ、もうなんだかここまで書いて申し訳無いのですがこのエラーに関しては特にノータッチなので割愛します。

さて、解決方法に入ります。
単刀直入に申し上げますと、Unit type conversion error | AppleScript | Photoshop | Mac OS X 10.6ここに行き、64bitに対応しているAdobe Unit Types.osaxを落として、/Library/ScriptingAdditions/に入っている既存のosaxファイルと置き換えてあげれば解決しました。

Macを使い始めて3ヶ月程度が立ちますがなんだかエラーにめげずに頑張れる様になった気がします。
というかエラーが出ないと心配になったりもします。
とまぁ今日はこのへんで!

参考文献:
Osascript error
OS X 10.6, CS4, osascript and Adobe Unit Types Problem