読者です 読者をやめる 読者になる 読者になる

技術めいた何か

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

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

(自分用)2016年四半期(1〜3月)まとめ

2015年の末にこんな物を書いた。

atofaer.hatenablog.jp

今日で2015年度も終わりなので、今年入ってからの出来事(1〜3月)をまとめることにした。

1月

2015年まとめの11月の項で触れた湘南キャンパスで開催されたIntel Edisonの大会の本番に参加した。ペットボトルロケットペイロードとしてIntel Edisonを搭載し、各チームで自由に設定したミッションを遂行するというものだった。

他のチームが3-4人であるのに対し、自分たちのチームは2人構成であったため正直なところ辛かった。自分はIntel Edisonで動作させるプログラムを担当。相方はペットボトルロケット本体の制作を担当。

自分たちのチームは打ち上げたロケットから撮影した地上の緑地割合を算出するミッションを設定し、本番も無事遂行することができた。

審査基準は本番の成果云々だけでなく、2ヶ月ほどの制作のなかで記録した作業日報の中身も重視されていたようだ。

一応、最優秀賞を頂いたが、審査員のほとんどが本番欠場したとあるチームの作業日報の出来が良かった(さらには欠場しなければ賞を取っていただろうとも)といっていたので賞を貰っても複雑な気分だった。

大会はオープンだったが、とあるチームが欠場したため、大学系列校同士の競技会になってしまったのが残念。

 

2月

2月の中旬から下旬にかけて、普通自動車免許(普通AT)を取得するためにいわゆる免許合宿に行ってきた。ゴーカートでコースアウトする実績を持っているので正直自分にはとても無理だと思っていたが、合宿の毎日欠かさず乗るというスケジュールのおかげで最短日数(たしか15日)で卒業できた。

免許合宿に平行して、学生部のプロジェクトでABC2016Springに向けてゲーム制作に関わった。とはいえ、合宿期間中はルームメイトに迷惑をかけれないため、ハングアウトでの週末オンラインミーティングは(音声では)参加できなかった。

ルームメイトへ迷惑をかけずに済んだが、開発メンバには迷惑をかけてしまったと思う。ごめんなさい。

 

3月

2月に免許合宿は無事卒業できたがあくまで、実地試験免除になるだけなので、免許センターへ本免許試験を受けに行った。が、1回目が1点足りず不合格。(仮免は満点だったのでなめてた。)翌日に再度試験を受けて合格。免許を手に入れた(普通AT)

3/12に青山学院大学で開催されたABC2016Springに参加した。

ブースの方はあまり、いられなかったが、多くの人が遊びに来てくれたと聞いたので満足。

3/17にサバフェス2016に参加した。

初参加。サバフェス自体は第三回目らしく1,2回めはチューニング大会やらでコアなことをしていたらしい。

今回はハッカソンだった。

作成した物に関しては前の記事にまとめてある。

atofaer.hatenablog.jp

大学の有志でチームを結成し、結果として学生賞をいただくことができた。

が、それ以上に参加者の大半を占めている社会人の方々から今回の制作に関する貴重なお話を聞くことができ、大変勉強になった。

また、偶然にも通っている大学のOB/OGの方が複数人参加していた。

その中のひとりがセキュリティ・キャンプの卒業生で、セキュキャンへの参加を勧められた。

全国大会へ参加するには予選を通過しなければならないので一筋縄ではいかながいが、学生のうちにしか挑戦できないことの1つなので予選に応募してみようと思う。

あと、会場で知り合った、高校生と少しばかり話をした。

自分とは違って実績あるし、凄いと思う。凄い凄いとばかり、言っては安直なので失礼かもしれないが、凄い。応援したいし、応援してる。彼には是非やりたいことを頑張って欲しい。

あと、U22プロコンで会えるといいねという話をした。(彼はともかく自分は1次通過できるのかよ…)

 

サバフェス2016で改造したnecomimiをつかったお話(ラズパイ/サーバー編)

今年始めて?の投稿。

先日、IDCフロンティアさん主催(03/28 21:17修正:協賛でした…ごめんなさい)のサバフェス2016に同期2人と先輩1人の計4人で参加してきました。
先に先輩がnecomimi改造のハード周りについて記事を書いていました。

dwight.hatenablog.jp

自分の担当した範囲で発表したプロダクトのサーバー周りについてを書いておきます。

※necomimiについてと、necomimi→ラズパイまでのデータの流れについてはここでは省略するので、上記記事を読んでおくことをおすすめします。

 

先輩の記事ではラズパイにシリアルで改造したnecomimiからデータを送信するところまでの説明がありました。

自分の担当範囲はラズパイでの受信データのパースとidcfクラウドで立てたサーバーへの送信及び、サーバー上でsqliteへの保存です。

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

f:id:atofaer:20160328194111p:plain

パーサはOSSのパーサであるpythinkgearを用いました。
本当は自分でパーサを書きたかったのですが、10日間の開発期間では成し遂げられず…。 

パーサの仕様はthinkgear_communications_protocol [NeuroSky Developer - Docs]に詳しくのっているので後ほどパーサ作成にチャレンジしたいところです。

ラズパイからIDCFのサーバーへの転送はweb socketをつかいました。
実装はこちらを参考にサーバー側はtornado、ラズパイ(クライアント)側はwebsocket-clientをつかいました。

本番はnecomimiの機嫌が悪くなかなか思ったようにデータが取れなかった時があったりしましたが、無事に終えることができて嬉しく思っています。

具体的なコードはGitHub上のプライベートレポジトリにあるので、後ほどメンバと整理整頓をしてから公開できたらと思います。

実は上の図の処理のあとにRuby on Railsでページに表示したりetc…といった機能があるのですが、それは@hotu_taの担当なのでバトン投げます〜

 

(自分用)2015年まとめ

2年後3年後に自分が何をしていたか振り返れるように、忘れないうちに2015年を振り返っておく。

 

1月

センター試験があった。2日目終了後に偶然、中学の同期と再開したのはよい思い出。

結果は(お察し)

 

2月

引き続き、入試祭り。事故(自己)採点で一喜一憂。

 

3月

祖母と京都、旅行。また、京都へいきたいなぁ。

 

4月

今の大学へ進学。
何か、始めたいと思い、ICTRATと放送研究会へ入会。

 

5月

MacBook Proを購入。届いて2日後にFile Vaultを中断するために、初期化しようとして、パーティションごと吹き飛ばした。しかもアクセス権限がどうとかでOSXの再インストールができない罠にハマった。なんとか治した。

・Ocuben #2に参加。初めての勉強会参加でドキドキ。著作権の話が印象的でした。

しかし懇親会に参加できない罠にハマる。

 

6月

MacWin8.1を入れた。この頃からOSXの使用頻度が急激に下がる。

 六本木で開催された 祭 with Android に行った。クレーンしたり、ラムネ飲んだり、太鼓叩いたり。
Nexus Playerの試遊もした。

 

7月

・Fxosアプリ学生限定ハッカソンに参加。自分、@hotu_taとICTRATの先輩の3人で参加。
@e_ntyoや@takanakahikoあたりと知り合ったのもこのあたりだったような…?(よく覚えてない)
Androidの会 学生部に入部。

 

8月

ICTRAT関連で、某イベントを手伝った。当日も、忙しかったが、事前学習もなかなか大変だった。

 

9月

秋学期、始まる。土曜日に授業を入れてしまったことは今でも後悔している。はてな×ドワンゴハッカソンや、patch work tokyoに行きたかった…。

 

 10月

学生部の一員としてOSC 2015 Tokyo/Fall に参加。午前中は授業であったため、午後から。
出展作品プロジェクトへの貢献度0でした。うわぁぁぁ。ごめんなさい。

 

11月

学生部

・前回の分の挽回のために、新規プロジェクトへ参加。かりちゃん曰くC++コーディング規約はゆるい方らしい

・初、開発合宿。某ホテルの会議室に篭ってコーディング。学ぶことが多かった。実際に顔を合わせてコーディングしたのは7月のハッカソン以来だったかも。
初LTもこの時。帰りに食べた大盛りカレーのインパクトは絶大だった。

大学関連

・ドココン#1に参加。参加者が少ない(ほとんど知り合い)。ロボPの方も少数ながらも来てくれた。
発表内容はcle_analysisについて(スライドはあげてない)

・本キャンパスの方のIntel Edisonの大会に参加することに。。。
思うことはいろいろある。

 

12月

 ドココン#2に参加。発表内容はHTML5 + JSで楽しい画像処理

楽しいかどうかは別として、HTML5+JSは画像処理の入門者には書きやすい組み合わせだと思ってる。参加者は相変わらず。

以上

来年は

大学の友人(しかも複数人が別々に)ラジコンカーをつくろうとしているので、自分も参戦しようと思う。
あとは、U22プロコン

その他
LTmatch出たいなぁ。。。

CLE_Analysis ver0.0.9公開

CLE_Analysis Version0.0.9を公開しました。

更新内容

・キャンパスの住所を含めるオプションを追加した。
・提案する指定期間を変更

ソースコード(Github)

cle_analysis 0.0.8公開

cle_analysis 0.08を公開しました。

更新内容
・時間割り情報が適切に出力されない問題を修正
 
@hotu_taが報告してくれました。

原因:キャンパス判定の部分に誤った変数を使用していた

f:id:atofaer:20150929174314p:plain

あほ実につまらないミスですね。いやぁ、夜中の作業とソフトウェアテストには細心の注意を払うべきですね。

ソースコード(GitHub)