技術めいた何か

1人の大学生によるIT系の記事群

Xperia X Performanceのレビュー(後編)

 

前編はこちら

 

後編では、ノイズキャンセル、Smart Watch3との連携と指紋認証について書こうと思います。

 

まずは、ノイズキャンセルについてイヤホンは画像のものを使いました。

WALKMAN Z(NW-Z1000)に付属していたものです。

 

f:id:atofaer:20160615013134j:plain

 

さて、果たして認識するのか・・・!?

 

f:id:atofaer:20160615013139j:plain

 お、、、

f:id:atofaer:20160615013133p:plain

認識してる!!!

試しに音楽を聞いて見たところしっかり、騒音(主に兄弟のいびき)が軽減されています!!!

 

 

次は、Smart Watch3との連携について

f:id:atofaer:20160615005246j:plain

画像はGoogle Fitの運動時間を表示したものです。

(当日の円グラフを表示することも可能なのですがもたもたしていたら日付が更新されてしまったのでごめんなさい)

先週の土日にほとんど家を出ていないことがわかりますね。。。

 

SW3は使い始めてからそれなりに経つのですが、単体でのGPS搭載が嬉しいです(方向音痴なので)

あと、やはりSONY製品同士ということもあり、親和性は高いです。

また、どちらも防水対応なのでアウトドア スポーツでも安心ですね。

(時期が早いので試せませんでした。残念。)

 

最後に指紋について。

適当な指を登録してかざすと・・・

f:id:atofaer:20160615013140p:plain

 

 

f:id:atofaer:20160615013141p:plainほら見てください、奥さん!!!すごい躍動感ですよ!!

といった具合に、ワンタッチでロック解除ができる指紋認証

画面のロック解除以外にもGoogle Playでアプリや映画を購入するときの認証にも使えます。

 

ちなみに登録はこんな感じ

f:id:atofaer:20160615013143j:plain

f:id:atofaer:20160615013142j:plain

f:id:atofaer:20160615013144j:plain

指をペタペタ付けたり離したりするとゲージが溜まっていって・・・

f:id:atofaer:20160615013145j:plain

 

f:id:atofaer:20160615013147j:plain

こんな具合に登録ができます。

 

ところで、気になりませんか・・・

指以外で登録できるかが・・・

 

ということティッシュチャレンジ!!!

f:id:atofaer:20160615013148j:plain

結果は・・・

f:id:atofaer:20160615013149j:plain

残念ながら失敗。

何度もペタペタしないとならないのですが、ティッシュだとなかなかゲージが溜まらず、終了〜。

やはり、ドコをとっても同じようなパターンだからでしょうか。

 

最後に

Xperia X Performanceを3週間程お借りして、Xperiaの利用をより具体的にイメージすることができました。

欲しいのだけど貯金がそこを尽きそうなのでバイトしてからね^q^

メタルボディつるつるして気持ちいいですよ!!!

Xperia X Performanceのレビュー(前編)

遡ること2週間ほど前、5/26(木)に品川の某所で行われたXperiaアンバサダーミーティングに参加してきました!

atofaer.hatenablog.jp

というのが前回のエントリ。

 

今回はXperiaアンバサダーミーティングでお借りしているXperia X Performanceの簡易的なレビューをしたいと思います。(前編)

 

今回お借りしたのは Xperia X Performanceのドコモ版(SO-04H)です。

色はライムゴールドです。

 

f:id:atofaer:20160615005249j:plain

f:id:atofaer:20160615005250j:plain

さららさした触り心地で手に馴染みます。

 

大きさ比べをしてみました。(Nexus9で撮影)

f:id:atofaer:20160615005242p:plain

左から

普段使いのASUS ZenFone5

今回お借りしているXperia X Performance

私が初めて持ったAndroid端末のSONY WALKMAN Z (NW-Z1000)

イオシスで3000円で投げ売りされていた IS02

です。

Nexus5も所有しているのですが、友人に貸し出し中なので比較できず。。。

ベゼル幅が抑えられているため、同インチのZenfone5とくらべても一回り小さい印象です。

 

厚さの違いはこんな感じ。

f:id:atofaer:20160615005244j:plain

Xperia X Performanceが薄いですね。

 

Antutu3Dベンチの結果(Antutu本体は貸出機の制限なのかインストール出来ませんでした。)

f:id:atofaer:20160615005247j:plain

f:id:atofaer:20160615005251p:plain

 ↓はNexus9での結果です。

f:id:atofaer:20160615005252p:plain

Xperia X PerformanceがNexus9の結果を上回っているので、3Dのパフォーマンスはなかなか良いと思います。

 

今回はこの辺で。続きは後編にまとめます。

(ノイズキャンセルとSW3との連携について)

セキュキャン全国大会2016の応募用紙(前半)

はい。勉強不足です。素人に毛が生えた程度の応募用紙・・・。

 

2週間程前セキュリティ・キャンプ全国大会2016に応募しました。

セキュリティ・キャンプ(以下: セキュキャン)は初めての応募です。

 

2016/06/14 13:08追記:セキュキャンお祈りされました。来年も頑張ります。

 

応募期間終了後から続々と応募者の方が自らの応募用紙を晒していたのですが、みなさんプロすぎて、流れに乗れなかった、というか怖かったのが本音です。

現時点では当落メールは届いていないのですが、いつ届くかもわからないので当落結果が届く前に、公開してしまおうと思いました。

 

身バレ()しそうな部分は省略しています'''文'''で囲ったところは実際の応募用紙には載せていないコメントです。

 

提出したのは締切日の午前3時頃だったはず。計画的に書くべきだと実感しました。

深夜に書いた物が大半です。文体の乱れあり。誤字脱字のオンパレードです。

特に2-3は深夜のテンションと妄想による産物です。許してください許してくださいゆるしt

 

イカが応募用紙です。温かい目で見守ってやってください。。。

 

共通問題 【1-1】:あなたが今まで作ってきたものにはどのようなものがありますか? いくつでもいいので、ありったけ自慢してください。

1.'''ごめんなさい黒歴史です(別のHNで活動していた頃に作ったものについて書きました)'''

2.大学のポータルサイト上の週間カレンダーから情報を抽出してGoogleカレンダーにインポート可能なcsv形式にするスクリプト(ブックマークレット形式)
これも、自分用に作成し、公開した。履修登録した予定と自分の遊びなどその他の予定を一括で管理したく作成した。
最大のメリットは授業予定だけでなく、年度頭に決まっている祝日授業の有無や大学の行事の情報を含めた大学に関する予定の多くをGoogleカレンダーで確認し管理することができることである。
また、Googleカレンダーを利用することでGoogleのサービスとの親和性が非常に高くなる。
私は、スマートフォンも時計もAndroid搭載のものをつかっているのでこれの恩恵を最大限にうけることができている。
特に気に入ったのはGoogle Nowのおかげで「xxという授業に間に合うにはhh:mmまでに(現在地を)出発」という案内をスマートフォンや時計から受け取ることができることである。
これのおかげで遅刻が減りました。
なによりもプライベートの予定と授業を含めた大学の予定を一括で管理できるので、予定のバッティングが減りました。
また、時間と授業名以外にも、教室名、教員名の取得とカレンダーへの登録を行うように組んだので教室の場所をど忘れしても無事に教室にたどり着くことができるようになった。
これも、大学の友人や先輩に使ってもらえてフィードバックを得ることができ、使用感について聞いてうれしく思ったり、問題点を指摘されて改善につなげることができた。

3.猫耳型脳波デバイス改造した健康状態を確認するサービス(チームで開発)
今年の3月にサーバーフェスタ2016~Health Engineering with IoT~というハッカソンで作成した制作物。
大学の同期*2+先輩*1+私 の計4人で参加した10日程度の大会で作成した。
脳波で健康状態を判定する近未来的なデバイスを作り上げることができました。
私は、脳波データの解析部分とサーバー周りを担当しました。ハードウェア部分(猫耳型脳波デバイスの改造)、同期の二人はwebのフロントとプレゼンの準備をそれぞれ担当しました。

10日間の制作や当日の各チームの発表を聞き、ハッカソンでは万全なセキュリティ対策をする暇も余裕もないが、実際に本格的に物を作って運用するとしたらIoTのセキュリティはどうなるのだろうかという疑問が浮かびました。

 

 

共通問題 【1-2】:それをどのように作りましたか?ソフトウェアの場合にはどんな言語で作ったのか、どんなライブラリを使ったのかなども教えてください。。

1については'''同上の理由により削除'''

2についてはブックマークレットであるため、Javascriptで記述している。
初版では大学のポータルサイトに1週間分表示されている”カレンダーの内容を取得->の先送りボタン”
の繰り返しで指定期間分の情報を取得していた。そのため、初版のスクリプトは手で行う作業を自動化しているに過ぎなかった
しかし、ポータルサイトChromeを使って解析していくうちにポータルサイト上の週間カレンダーはAjaxを使ってサーバーからカレンダーの情報を取得していることが分かった。そのため、現在はAjaxを用いて必要期間分の情報を取得するようなスクリプトに作り変えてある。
もちろん、アクセス多過で大学から怒られないように授業コード(これもサイトを解析して内部で利用されていることがわかった)をみて同一授業の情報について取得済みであれば詳細情報(教室、場所、教員名など)の取得を行わないようにしてある。

3については私の担当した範囲では当初は自身で脳波のパーサーを作成しようとしたのですが、あえなく断念。
採取的にはPythonのPythinkgearというパッケージを用いて脳波の解析を行いました。
シリアル通信について学んだり、websocketを使ったサービスの実装ができた良い機会でした。
なによりIoTのセキュリティについて考えるきっかけとなったので参加してよかったと思っています。

 

'''誤字が目立ちますね・・・(「最終的には」が「採取的には」になってる)'''

 

共通問題 【1-3】:開発記のブログなどあれば、それも教えてください。コンテストなどに出品したことがあれば、それも教えてください。

'''このブログとgithubのリンクを貼った'''

 

共通問題 【2-1】:あなたが経験した中で印象に残っている技術的な壁はなんでしょうか?(例えば、C言語プログラムを複数ファイルに分割する方法)

C言語による文字列処理。具体的にはXMLパーサの実装。
実装にポインタを使う必要があるだけでなく、文字の処理用関数がスクリプト言語ほど充実していないためsubstringなどは自分で実装する必要があったため。
また、メモリ管理を怠るとメモリリーク等を起こすこともあり、当時は扱いが非常に難しいと感じた。

 

共通問題 【2-2】:また、その壁を乗り越えるために取った解決法を具体的に教えてください。(例えば、知人に勧められた「○○」という書籍を読んだ)

まず、ポインタについては「苦しんで覚えるC言語のサイトを再度読んで実装に必要なあいまいな点をつぶすように努めた。
また、substring等の実装は紙に実装に何が必要か考えた。
また、実際に書いた処理をデバッガで追って各所で想定通りの動作をしているかを確認して理解を深めた。バグが見つかった時も問題点や現状を紙に書いて混乱しないように工夫した。
メモリリークはデバッガを利用して目星をつけて、その後、コメントアウト等を利用して該当箇所を絞った。


共通問題 【2-3】:その壁を今経験しているであろう初心者にアドバイスをするとしたら、あなたはどんなアドバイスをしますか?

何がわからないのか、あるいは何が不安要素なのかを自分のやりかたで(私は紙に書いた)まず外に出して、そして整理しよう。
次に、わからないところは調べる。調べてわからなかったら知ってそうな人に聞いてみる。周りにいなかったら質問サイト(stackoverflowや、c言語なんでも質問掲示板)等で聞いてみる。
その時には、相手に失礼のないようにまた、初めて見る人でも状況が理解しやすいようになるべく詳細に書くようにしよう。
もし、実装している最中に自分の考えたアルゴリズムや構造がわからなくなりそうだったり、混乱しそうになったら、紙や画面に図形をかいたり、箇条書きのロジックを書いたりして視覚情報にしてみよう。
それを見ながら実装に移れば混乱は未然に防げるはずだ。

上を抑えたうえで、技術的なアドバイスは例えば、文字列操作のポインタを扱うからインクリメントやデクリメント、前置、後置の挙動や、よく使う文字処理の関数についてはちょっとでも不安になったら調べると良いよ。メモリリークについては、最近のVisual Studioであれば下にメモリ使用量が出てくるからテストコードを書いてメモリの使用量の変化を見れば発見があるかもしれないよ。

 

'''は、はずかしすぎる。。。なんだこの口調は・・・!!!妄想の産物だ。なんか変な脳内物質が作用して奇妙な物語を構成してしまったに違いない。「〜かもしれないよ」ってお前は何様だー(爆ぜる)'''

 

共通問題 【3-1】:あなたが今年のセキュリティ・キャンプで受講したいと思っている講義は何ですか?(複数可) そこで、どのようなことを学びたいですか?なぜそれを学びたいのですか?

7-B 組込みリアルタイムOSとIoTシステム演習
私がプログラミングを始めたきっかけが'''同上の理由により削除'''ということもあり、組み込みシステムについて非常に興味があります。
割り込みや例外を処理するリアルタイムOSの仕組み、や汎用システムと実際にはどこが異なるのかを学びたいです。
組込み機器に多く用いられているリアルタイムOSやIoTで必要になる通信ソフトウェアにについて理解を深めたいと考えています


3-B フィジカル・リバースエンジニアリング入門
私は、ソフトウェアやウェブサイトの解析が好きで、共通問題1で述べたスクリプトを作っているときも楽しくて仕方ありませんでした。また、某携帯ゲーム機を改造電池パックを使ってハックしたという記事を見たことがるのでそれに関係がありそうということもあり、興味があります。
物理的なリバースエンジニアリングの方法だけでなく、ソフトウェアでは難読化等の対策があるが、ハードウェアではどのように対策をするのか、そして説明文にある限界とは何なのかについて学びたいです。
ハードウェアよりの解析はあまりやったことが無いのですが、"物理的"な解析に挑戦してみたいと考えました。


1-C 公開鍵暗号のハードウェア実装と攻撃~ICカードが持つ脆弱性とその対策~
来年以降の研究テーマとして暗号理論を扱いたいと考えています。Suicaなどの交通系ICやマイナンバーカード、あるいは学生証などICが埋め込まれているものが身の周りに多くあることもあり、将来扱いたい暗号理論と身近なテーマであるためやってみたいと考えました。
また、軽くて小さく、あまり金銭的コストをかけることができないものが多いICカードでどのような対策が行われているのかを知りたいです。
また、観察したり、解析したりすることが好きなので、電力解析攻撃という単語に興味がひかれました。

共通問題 【3-2】:あなたがセキュリティ・キャンプでやりたいことは何ですか?身につけたいものは何ですか?(複数可) 自由に答えてください。

来年度以降、情報セキュリティの研究をするにあたって必要となるセキュリティへの理解を深めたいです。
また、興味のある分野のこともあまりよく知らない状態にあるので、これから学習したり、研究したりするときの足がかりにしたいと考えています。
また、講師の方々は研究職の方が多くいらしているのでセキュリティの研究になるには何が必要なのかについて知る第一歩にしたいです。
・探求する心

 '''

_人人人人人人人人_
> ・探求する心 <
 ̄Y^Y^Y^Y^Y^Y^Y ̄

 

なんか湧いてるよ!!!

'''

 

共通問題部分は以上になります。いやー恥ずかしい。深夜のテンションだからといって言い訳できないよこれは。。。黒歴史生成器ですね。

セキュキャンの講師の方々は皆プロなのに舐めてかかったような回答だ。恥ずかしい。

もういい年なんだから生意気言うのはほどほどにしないとなぁ(自戒)

 

後半(選択問題)は気が向いたら投下します。

 

初めてXperiaアンバサダーミーティングに参加した話(Xperia X Performance)

久々の投稿です。

 

遡ること2週間ほど前、5/26(木)に品川の某所で行われたXperiaアンバサダーミーティングに参加してきました!

今回はXperiaアンバサダーミーティングを写真とともに振り返りたいと思います。

 

 

まず、イベント自体の感想について

率直にいうと楽しかったです。

こういった類のガジェット系のイベントは初参加でしたが、開発チームの方に直接質問することもでき大変充実した時間を過ごすことができました!

画像はXperia飯です(今回は和洋選べるお弁当でした!おいしかったです!画像は和)

 

f:id:atofaer:20160613224228j:plain 

質問したこと

・国内版の裏面の下部のコーティングについて

その部分がメタル仕様でないことについては発表時点で気になっていたので今回、質問しようと決めていました。

回答を要約すると、

「通品品質の向上のため。日本国内のユーザーの求める通信品質は海外のユーザと比べると高い傾向にあり、それを満たすため」

といった内容の回答をいただくことができました。アンテナ云々というのはなんとなくわかってはいましたが、、、仕方がが無いのでしょう。

 

・各キャリア(Docomo ,au,Softbank)のハードウェア仕様の違いはあるのか

回答を要約すると

「基本は同じ」

らしいです。あとは、通信の部分は各キャリア向けにチューニングをしているとのこと。

 

当日した質問は異常です。

 

 

以下スライドとコメント。

※スライドの写真は他社スマホで撮影したものです

 

 冒頭に、Xperiaのプロモーションの映像を紹介していただきました。

(映像はXperiaの宣伝Twitterの方で紹介されているものと同じです)

f:id:atofaer:20160613225610p:plain

 

 

 

次に、いままでのXperia ZシリーズとXシリーズの方向性の違いについて

f:id:atofaer:20160613224230j:plain

Xperia Xの3大特徴について

 

f:id:atofaer:20160613224232j:plain

ぶ、ブレブレ(泣)

 

加工は色によってヘアライン加工とサンドブラスト加工に分かれています。

ちなみに私が今回お借りしたのはサンドブラスト加工のものです。

 

f:id:atofaer:20160613224234j:plain

インセルタッチパネルによって全面ガラスのカラーリングが可能になったそうです

f:id:atofaer:20160613224235j:plain

 

 

お次はマシンスペックについて

CPUはZ5と比較して約2倍、GPUは1.4倍高速化(凄い)

さらに通信速度(Docomo)も

Z5: 225Mbps→ X Performance : 275Mbps と向上

f:id:atofaer:20160613224236j:plain

 

CPUの性能向上によってゲーム等のレスポンスも向上

 

f:id:atofaer:20160613224237j:plain

CPUの次はバッテリーについて

CPUのチューニングにより消費電力を大幅に削減したことにより日常使いに大幅に削減できているようです。

f:id:atofaer:20160613224238j:plain

 

バッテリーの充電についても新しいアルゴリズムの導入によってバッテリーの負荷を軽減

f:id:atofaer:20160613224239j:plain

 

放熱性能についてはChipと背面メタルの採用によって放熱性能がZ5と比べて30%向上

 

f:id:atofaer:20160613224240j:plain

 

次は、カメラについて!

インターフェースの説明等もありましたが私が特に気になったのは「オートフォーカス」について

イメージセンサから取得した情報から距離情報のマッピングを行うのですが、X Performanceでは新しい方式を採用し、オートフォーカスの性能を上昇させています。そのアルゴリズムの概要について説明をしていただけました(が撮影禁止なのでスライドはありませんごめんなさい)

写真のスライドはXperia Z5のものの説明です。

f:id:atofaer:20160613224243j:plain

f:id:atofaer:20160613224244j:plain

f:id:atofaer:20160613224245j:plain

f:id:atofaer:20160613224247j:plain

f:id:atofaer:20160613224248j:plain

f:id:atofaer:20160613224246j:plain

 

次はフロントカメラについてノイズ除去の技術によって暗いシーンでも鮮明な写真の撮影が可能

f:id:atofaer:20160613224251j:plain

f:id:atofaer:20160613224249j:plain

 

次は、ディスプレイについて

SONYブラビアで養った技術を用いることでディスプレイの色域を美しく表現

スライドにもあるようにOne SONYを目指したものであるとのこと。

f:id:atofaer:20160613224254j:plain

f:id:atofaer:20160613224257j:plain

f:id:atofaer:20160613224255j:plain

 

次は、オーディオについて、

f:id:atofaer:20160613224301j:plain

マイク穴の位置については天板と底面に採用することで、通話と動画撮影における集音の両立をしているそうです。

f:id:atofaer:20160613224302j:plain

 

また、ノイズリダクションについては新しいノイズキャンセリング技術によって微小なノイズを正確に除去

 

f:id:atofaer:20160613224259j:plain

Z5にもあったバイノーラル録音がチューニング見直しによって進化

 

グラフにするとこのようになるそうです。

f:id:atofaer:20160613224305j:plain

 

 

 

感想と気になった部分のスライドは以上になります。

本体のレビューについては次回ということで!

 

 

HTML5+Javascriptでドット画像への変換をしてみた

HTML5 + JSで画像処理の第3弾

前回は去年(2015)の8月に2値化処理やってみた旨を記事にしました。

atofaer.hatenablog.jp

今回は、指定画像を元にドット画像を生成する処理を書いてみました。

処理の流れは以下のようになりました。

  1. 画像読み込み
  2. 縦の辺の長さと横の辺の長さの公約数を求めて配列に格納(ドットの辺の長さ)
  3. ループで各ドットの矩形内のrgb値から1ピクセルごとのhue値(色相/0-359)を求める。また、その時のrgb値を連想配列に入れていおく
    hue値が重複した時は古いrgb値が優先される
  4. 3の1ループ毎に求めたhue値を6つのグループに分ける
    1. 330〜||〜29
    2. 30〜89
    3. 90〜149
    4. 150〜209
    5. 210〜269
    6. 270〜329
  5. 矩形内のhue値のグループ分けが済んだら、一番要素数の多いグループを特定
  6. 5で特定したグループのhue値を昇順にソートして中央値(偶数の時は中央の二値の小さい方)を求める。
  7. 6で得たhue値から、連想配列からrgb値を得る
  8. 7で得たrgb値でドット内の矩形を塗りつぶす

ソースコードGitHubにあげてあります。

github.com

最後に

一通り処理を書いた後に、調べたところ、ベクトルを使う方法があるみたいですね。

それはまたの機会に。。。

TwitterのタイムラインでおっぱいツイートをふぁぼるBot?つくった

みなさん。こんばんはおっぱいって男のロマンであふれていますよね。

そんなロマンに溢れるおっぱいツイートの感動を共有したい。でも私は深夜帯に非常に弱く、いまエントリを書いているこの時点で活動限界超えてます。

そんなこんなでタイムラインを確認できない時間であっても、おっぱいをふぁぼりたい。。。。。そんな願いを叶えるべく、GASでおっぱいツイートを検出するスクリプトを書きました。眠いヒャッハー。

 

具体的な挙動。

・ホームタイムライン上でおっぱい、オッパイ、オッぱい、oppai、oっぱいなど、おっぱいととれるツイートをなるべく検知してふぁぼる(お気に入り)登録する。

ただそれだけ。

 

実装はGASで、おっぱいの検出は正規表現つかって以下の手順でおこなっています。

  1. 全角ひらがな → 全角カタカナ に変換
  2. 半角カタカナ → 全角カタカナ に変換
  3. 全角カタカナ → ヘボン式ローマ字(例外でヷ、ヺはva、vo、ちいさい文字(ァとか)はx+ヘボン式ローマ字:ァ→xa) に変換
  4. 最後にoxtupai、oppaiで検出。
  5. おっぱいおっぱい。

1、2に関しては

qiita.com

を使わせていただきました。ありがとう御座います。(対応表の手間省けたのですごく楽だった。)

3の全角カナ→ヘボン式ローマ字は対応表がなかったので自作。しんどい。

1-4で正規表現を山程つかった。おなかいっぱいおっぱい。

 

oauthは

yoshiyuki-hirano.hatenablog.jp

を参考にしました。(おっぱいネタにつかってごめんなさい)

 

githubに上げるべきですよね。あげますね。あとはお好きにどぞー。

github.com

おっぱいおっぱい

 

4/23 0:52追記

例外処理書き忘れていたのと、空白を含むおっぱいに対応しました。あと、ツイート取得数もミスしていたので修正。

学内用に学生証から学生IDを読み取って、統計情報を表示するソフトを作ってる話

先日、タイトルの通りのソフトのソースをGitHubに挙げたのは良いが、放置気味だった。大体はできているので実装について記事に残そうと思う。

ソースコード(GitHub)

ソフトについて 

概要:

通っている大学(東海大)の学生証から、学生IDを読み取って統計情報を表示したりして効果的な新入生勧誘を支援するWindowsアプリケーション

 作ろうと思ったきっかけ:

お金欲しい(切実)。大学に入学して1年が経過しようとしていたので、1年生の最後になにか作ろうと思った。

 使用想定ケース:

サークル、プロジェクト、部活等の勧誘時、
訪れた新入生や、在校生の統計情報を得る。
訪問回数が多い学生の学生IDの特定機能(ランキング表示)を使うことで興味を持ってくれた学生に積極的にアピールできる
統計情報に基づいた学生IDメールへの一斉送信機能(未実装)で効果的にお知らせを配信。

開発環境:

Visual Studio Community 2015

C++風のなにか(Cっぽくなっている…)、Win32Api

PaSoRi:RC-S330

 

と、ソフトの概要、使用想定ケースは上記のような感じ。

実装について

実装は大きく分けて以下の3つです。

  1. PaSoRi(felicaリーダー)経由で学生証から学生IDを読み取る
  2. 読み取った学生IDを管理(追加、検索、削除、保存、復元)するデータ構造の部分
  3. 読み取って得た統計結果をグラフやランキングに表示(つまり、UIまわり)

 

1.PaSoRi(felicaリーダー)経由で学生証から学生IDを読み取る

学生証からの学生IDの読み取りにはオープンソースfelica系のカードの読み書きができるライブラリである、felicalibを使いました。

ソニー公式のライブラリを使わなかった理由は、

  1. Lite(無料)版は商用利用が不可能だったこと。
  2. Lite版は試用版のようなスタンスであると感じたため。

ⅰに関して、最初はICTRATで使ってもらってプロモーションした後に他団体に売りつける使ってもらうという、つもりだったので商用利用できた方が後々いいよなぁと。
結局のところ、ICTRATは解散したので、オープンソースにしたわけですが。
オープンソースのライブラリを採用したおかげでオープンソース化も問題なくできました。めでたしめでたし。

ⅱ.不自由なく使いたかった。それだけ。

 

学生IDのあるアドレスを調べるのにはFeliCa Raw Viewerを使いました。
アドレスがわかったあとは、felicalib: felicalib.hや、先人の知恵を元に読み取り部分の実装をしました。あとは、win32apiのCreateThreadを用いて読み取り部分はUIスレッドと分離して処理させています。

 

2.読み取った学生IDを管理(追加、検索、削除、保存、復元)するデータ構造の部分

 学生IDをただ単に格納するだけであれば、ハッシュを使えば良いのですが、グラフを表示するにあたって、ワイルドカード検索を実装した方が良いと考えたので別の方法を模索することに。
考えた結果、オレオレ木構造(既存の木構造であれば名前を教えてください)を思いつき、学生証IDをキャンパスガイドの8ページ目の学生証の項の通りに学生IDを要素ごとに分解してそれぞれノードに格納(ラベル付け)するという形を取ることにしました。キャンパスガイドの学生ID"5BJI1199"を例にとると、
レベル0はrootノード(すべての親)、5がレベル1、Bがレベル2、JIがレベル3、1がレベル4、1がレベル5、99がレベル6といった具合です。
多分探索木であるが、B木とは異なり、枝の最大数は特に設けられていません(各レベルに新要素があれば動的に追加される)。実装のしやすさ重視でバランスの悪い木になりやすいです。。。
ですが、この木構造のおかげで"?"が指定されている要素の該当レベルの時はすべてのノードを参照という形をとることで、ワイルドカードの"?"の実装は比較的ラクにできました。

あと、データ処理まわりは再帰処理だらけになりました。(仕方ない)

 

3.検索等で得た統計結果をグラフやランキングに表示(つまり、UIまわり)

 正直、UIは苦手です。が、Win32apiというレガシーなものを使っていてもせめてグラフだけは、現代に近づけたいと思い、フラットデザイン(にしたつもり)のドーナツグラフを実装(Pie関数で円グラフに白い円を重ねているだけ)。ランキングに至っては表示できているだけで、UI/UXとしてはもの足りない感じ。あとはGDIでやっているのをGDI+で書きなおしてジャギーを無くしたい。

 

実装については以上。UI周りの進捗は7割くらい。本文にも書きましたが、メール送信部分はできてません。

最後に

どっかしらの団体でつかって欲しいなぁ。GitHubに挙げてるので各自修正したいところがあったら修正してもいいんだよという感じ。
プルリク送ってくれると生きながらえます(精神的に)。他大の人も各大学のフォーマットに合わせればいけるのではと思う次第です。