2014年5月14日水曜日

ターミナルでカメラプレビューしてみよう

こんにちは、僕です。

aaskypeとかいうの作ってみました、全然すかいぷじゃないです。

なんか、作ってみたら面白かったのでブログ記事書いてみます。

もともとのアイディアは下の記事のパクリです。(思想から変換アルゴリズム)
http://d.hatena.ne.jp/tompng/20120601/1338550060

まあ、ざっくり何を下かというと。

ターミナルでインカメの画像を濃淡AAにして確認できるようにしました。

こんな感じです。

なんか、インカメの画像をみれてる感ありますよね。
すこし解像度をあげてみます(文字サイズを小さくしてみます)
濃淡AAの表現力ぱないですね。

技術的なお話

濃淡AAへの変換は本家のアルゴリズムとほとんど同じで以下の用になっています。

あとは最初はprintfで出力してたのですが、遅いってなってputsにかえて早くなりました。しかし、各フレームごとに順次書き出ししているので遅いです。

ソースコードは以下にあるので時間がある人はみてみてください。

skypeという名前がついてるのに全然Skypeじゃないのは勘弁してください

夢のターミナル生放送

このプログラムとhttp://screenx.tv/を組み合わせることによりターミナルを使った生放送ができました!!(実証済み)

以上です。


2014年4月9日水曜日

高専プロコン競技部門練習場にツイッターボットを導入したお話

競技練習場のツイッターボット(@KPCP2014)を作りましたー。

別にそんなに難しい話じゃないんですけどね。

一応、(自分なりに)お行儀よく書いてみたから記事にしておきます。

TwitterのAPIを叩くためのライブラリはPythonで有名なTwitterライブラリであるtweepy(https://github.com/tweepy/tweepy)を使いました。(競技場はPythonで書かれています)

ふつうにやった場合。
ー> HTTPの通信のレスポンスを返す間にTwitterのAPIにアクセスしてツイートする。


_人人人人人人人人_
> お行儀が悪い <
 ̄Y^Y^Y^Y^Y^Y^Y ̄
だって、HTTPのレスポンスを返す間に他のところにHTTPリクエストを送るとかなんかエグいじゃないですか。
今回はツイートだけできればいいのでQueueにツイートをためておいて。Workerプロセスを立ち上げておくことでツイートを行う機構を作ってみました。

今回使ったQueueを作るシステムはRabbitMQを使いました。

今回作ったTweetBotシステムは
├── bot_client.py
├── bot_server.py
└── messages
    └── update_ranking.tpl

ツイートのJinja2のテンプレートをmessagesの中に配置します。(Jinja2なのはWeb側に使ってるフレームワークがFlaskだからです)
あとは、ツイートサーバとなるbot_server.pyを
nohup python bot_server.py &
みたいな感じで実行してやって。

ツイートを行いたいPythonスクリプトにて
import bot_client
bot_client.tweet(テンプレートファイル名, パラメータ...)
みたいな感じで関数を呼んでやればツイートを行うことが出来ます。

まとめ

いつもみたいに適当にツイート機能を実装してしまえばよかったんですけど、そろそろ、Python+Flask環境から簡単に構築できるツイートボットシステムが欲しかったので作ってみました。作った奴はまとめてgithubにあげてあります。(https://github.com/higumachan/python_tweet_bot)暇があったら見てみてください。

2014年4月2日水曜日

ICT委員会(team.老害)の勢力をあげて高専プロコン競技部門の練習場を作ってみた(爆速開発)

ICT委員会(team.老害)の勢力をあげて高専プロコン競技部門の練習場を作ってみた(爆速開発)

高専プロコン競技部門のルールも公開されたので
高専プロコン競技部門の練習場をICT委員会 team.老害で作ってみました。

担当

  • @orisano 問題作成プログラムを作成
  • @maruuusa83 サーバの設定・デプロイ環境の構築などのインフラ担当
  • @goya813 回答ファイルの評価プログラムを作成
  • @higumachan725 その他の開発と手動ソルバー
  • @marin72_com 広報担当

実際にやったこと

ICT委員会いつもの構成(Python+Flask+MongoDB)でWebシステムを構築しました。

具体的には@orisano@goya813の作ったシステムを結合して。データベースのつなぎやWebUI等を作って。@maruuusa83の構築してくれたサーバに置くお仕事です!

普段あんまり好きじゃないCSSを書きました

本当にCSSは好きじゃないです!
でも、必要だし今回は他の人に分担されてない仕事は僕がやるという暗黙の了解があったので書きました。
最初はbootstrapを使おうとしたのですが。そもそも、あんまりあのデザインが好きじゃないし使い方もすぐに腹落ちしてこなかったので、素で書くことにしました。
幸いにもかさはらさんが作ってくださっていた3年前のプロコンの時の練習場があったのでそのデザインを参考にしながらCSSを書くことで事なきを得ることが出来ました。 
ありがとうございました! かさはらさん

手動ソルバーを書く

今年の問題は問題だけ出されても画像処理が絡んでしまうのできっと練習場公開してからしばらくは誰も投稿してくれないだろうなと思いました。
そしたら

悲しい

じゃないですか… それなので、手動ソルバーを作りました。

開発言語はcoffeescriptです

もしかしたら、なにそれ美味しいの? って人もいるかもしれないですが、javascriptにコンパイルすることの出来る良い言語です。javascriptのレガシィっぽい部分を取り除きpythonみたいなコードを書くことが出来ます。更に僕は情弱なのでJavascriptのプロトタイプ?とかを使ってclassっぽいことをしている概念がよくわかりません。しかし、coffeescriptを使えばpythonみたいな感じでclassを使うことが出来ます。(書き方に少し癖がありますが…)

とっても楽しいです

みなさんもぜひ試してみてください!!

あと、canvasを自分でゴリゴリするのは嫌だったのでkineticjsというライブラリを使いました。このライブラリもよく使うライブラリなのですがcanvasの面倒くさいところを全部肩代わりしてくれるので大好きです。

広告を厳選する

せっかくだし、ネタな競技部門の人に注目されやすい(要出典)商品をamazonさんから選んで貼り付けました!

そんなこんなで出来たのが

高専プロコン競技部門練習場です

みなさんがいっぱい使ってくれると嬉しいなぁと思っています!

2013年12月9日月曜日

にゃおちゃんがかわいそうだ

※『ICTAdventCalender』参加中。9日目の記事です。

皆さんこんばんは@higumachanです。

本日はICTAdventCalenderの9日目ですね!なんか、昨日は一年生の後輩ちゃんがいい投稿してくれました。しかし、僕はそんなこと出来ないのでまた作ったもの紹介でもしようかなと思います。

では、本日紹介するものを作った経緯はこの人です。

@orisano

顔画像だからNGっぽいけどコレTwitterアイコンなので…

ICTAdventCalenderの最初のはてブの記事でこのような場面がありました
なっさまにちなんで725がにゃおちゃんのスターです。最初は連打ツール使ったのかと思ったんですけどね。

「全部手動でやってます」

Oh…

「なぜ?」と聞いてみました。

「自動は愛が無いと言われた…」

可哀想に…愛って…

にゃおちゃん…いつも可哀想…
椅子投げられそうになるし…(なっさまに)
プログラム書くか寝るか死ぬかどれかにしろって言われるし(まっさまに)

ということなので、今回はにゃおちゃんを救って見ようかと思ってこんなの作ってみました。

命名:nyao_saver

綴りが間違ってるかも…

今回は私事ながら最近はまってるChromeExtensionです。

何をするものかというとですね…もうわかってますよね!

自動的にはてなスターを送れます

えっ? 愛がどうとかってどうなのかって? 部員が部員のために作ったもんだぞ!愛が無いわけ無いだろ!(注:僕はけっしてホモではありません)

使い方!

git clone git@github.com:higumachan/nyao_saver.git

そして取り込んで!

適切なはてなブログに飛んで!(知らない人で試しちゃいけません)

出てきたデフォルトっぽいアイコンをクリック

送りたいスターの数を入力してSubmit

エラー処理なんて微塵もやってませんだって、1時間で作った突貫工事ですもの!

ちなみに僕のブログはBloggerなので試せませんごめんなさい…

ソースとかはここに載ってるので暇な人は見てください。(適当です)

以上支離滅裂なICTAdventCalender 9日目でした!

2013年3月13日水曜日

かわいいぼたんジェネレータを作ってみた!

前作ったこれを改造したものです

だれでも、簡単に◯◯ちゃんかわいいと呟くことの出来るボタンを作ることができます。

どのように作るかと言いますと

まずしたのページにてボタンを作るボタンをクリックします

次に1つだけの入力フォームにかわいいと呟きたい相手の名前を入力します(ちゃんは自動的につくので気をつけてください)

すると、

大体は前回と同じなのですが、今回実装した面白いことを2つほど紹介したいと思います。

  1. 画像を自動的に取得してくる
  2. タイトル画像の自動生成

まず、1についてなのですが、NAVER画像で項目について検索をかけてそのレスポンスをスクレイピングするだけです。

ソースは以下のようになってます。

これは前回書いた記事のクローラファーム上で動いています

これで、画像のurlを取得して表示という流れです。

2つ目は文字列を受け取ってPILで処理して画像に変換! …と言いたいところですが…今回はインチキをしましたw

このロゴジェネレータさんを使ってまた、クローリングでかいけつしました。

パラメータをつけてPOSTで送ってやるだけなんですけどね!

少し、BaseCrawlerを書きなおして置かないとダメなところも出てきてしまったので。書きなおしたりもしてやりきりました。

以下はソースです

色とかも弄れるのでパラメータが多いですね…

最近クローリングばっかりで問題解決してる気がするので。少し反省してちゃんとした解決方法も模索出来るようにして行きたいな〜と思っています。

2013年3月10日日曜日

クローラファームを作ってみたかった

なんだか久しぶりの更新な気がする


今回はなんだか最近クローラを書く事が増えてきました。
なぜなんでしょうね? まあ、TwitterAPIを常に監視したり、RSSリーダーで取って来たサイトの中にまで入ったり、アニメのデータベースが欲しいなーとか思ったり、様々な用途でクローラを書きます。

そこで最近懸念しているのがサーバでクローラを動かすときに書いたスクリプトをサーバで勝手にnohupでデーモンっぽく動かしてる。
ほとんど処理同じなのに毎回書いたりしてたのです。(正直打鍵スピードのおかげであんまり時間は気になってなかったんだけど)

そこでその懸念の解決の為にちょっと、頑張って見ました。


まず、毎回同じ事を書いている事に対する解決として、ベースのクラスを作ってしまえばいいじゃん。

ってことで、こんな感じのクラスを作りました

これで、こいつを継承して、scrapingとpre_scrapingをオーバーライドしてやればおk

こんかいは、HTMLのスクレイピングをする事を前提で作っちゃったのでBeautifulSoupを使ってスクレイピングしてますが。ゆくゆくはいろんなのを切り替えて使えるようにします。(必要になったら)

まぁ、使ってる例はいくつかgithubに上げてるきがします。

次に、なんか一つ一つのクローラがデーモンっぽく動いてて気持ち悪いという問題

それは、クローラをまとめて置くデーモンっぽいものを作ってそれを常に動かしておくというたちを作ってみました。

なんか、タスクキューとかも勉強してみたかったのでRabbitMQを使ってみました。

RabbitMQというのはタスクキューを作ってくれる奴ですね〜。公式のドキュメントがPythonを使ったサンプルが乗っていたのでこいつを選びました。

こいつを使って、任意の位置にクローラのスクリプトを配置して、適当なスクリプトからクロール命令するとQueueに溜め込まれてクロールをして行くという、システムを構成しました。


├── crawlers
│   ├── BaseCrawler.py
│   ├── BaseCrawler.pyc
│   ├── SampleCrawler.py
│   ├── SampleCrawler.pyc
│   ├── __init__.py
│   └── __init__.pyc
└── worker.py

このように/crawlers以下にクローラを配置して行き。

このような感じでスクリプトを指定して、クロールするurlを入力すれば解決です。

ここにリポジトリを上げているので、気になる人はご覧ください(最小構成ですのであしからず)

これから

まだ、エンジンの指定が出来なかったり、クローラの追加がscpだったりして、あれなので。
1. HTMLだけじゃなくJSON,feedなどもスクレイピングできるようにする
2. Jenkinsとかとうまく連携してgit pushでクローラを追加するような仕組みにする

というのが当面の目標ですかね。

2012年12月31日月曜日

みんなに触発されて僕も一年を振り返ってみます

なんか、ICTの方々みんな一年振り返ってるので僕も振り返ろうと思います。

しかし、僕は今年あんまり何にもやってないので自己嫌悪に陥りそうですwww

高専プロコンへの参加

こいつが今年で一番大きかったイベントですかね!

開発メンバーは @pinkroot, @Fokker_50,さーりゃん,@norimoto1225, @tanishi345, @harukin0213, @XxxVr と僕の8人でした。 楽しいメンバーが揃ってたと思います。デスマをした夜も楽しかったです!

僕の役目としてはネットワーク周りの絡む部分の設計から実装までをやりました。これのお陰でクローラー関連の技術には強くなりました。
そして、下に後輩(1年生)が二人ついて自分の下について開発してもらいました。最初は正直いって自分は実装だけしたかったし、人に何か教えたりするのは苦手なのであんまり気乗りしませんでした。
しかし、蓋を開けてみれば、ふたりともがんばって僕の定義したXMLのサブセットをガリガリ書いてくれましたし、@harukin0213はなんだかんだで僕に叱られつつ、ライブラリの一つの機能を仕上げてくれましたし、@XxxVrも僕に煽られながらも記事を一つ仕上げてくれました。

ふたりともよく頑張ってくれたので本当に良かったです!ふたりともありがと!

なんだかんだで、コンテストで賞とかとったことなかったのでそれがコンプレックスでした。でも今回のプロコンで優秀賞(準優勝)がとれてなんか肩の荷が降りた感じがしました。本当にチームのみんなには感謝していますし、結構ワンマンな気質のある自分ともうまくやって来れて本当にありがとうございました!

インターンシップ

授業の一環で言ったインターンシップですが本当に大きな成長をすることができました。

僕はSummerTimeStudioという沖縄県内のゲーム開発会社へ行きました。 ゲーム会社ということもあり、人気があったのか沖縄高専から7人位行っていましたし、デザイナーの方のインターンもいたのでオフィスの中はすごく人が多かったですww

インターンの内容はどれくらい話していいのかわからないので多くは語りません。

でも、僕がICT委員会に入るきっかけとなったゆうすけ先輩と再会できましたし、自分の面倒を見て下さったえんじさんには本当に良い人でいろんな面白いお話を聞くことができました。

ゲームを作る技術だけじゃなくて、働き方というのを多く学ばせていただきました。本当に良い体験ができましたありがとうございます!

ピンク先輩とのWebアプリ開発

@pinkrootさんと一緒にいっぱいWebサービスを作りました

何を作ったかとか忘れてしまいましたがwww、開発力の向上としてとても自分の力になりました。やはり、実装力だけあってもそれを使わなきゃ意味無いですし正直訛ってしまいます。なので、本当に湯水の如くアイディアを出してくれる@pinkrootには感謝していますし、正直@pinkrootさんがいなくなる来年に一抹の不安感じますwwwまあ頑張りますが! 

逆求人フェスティバルに参加した

逆求人フェスティバルに謎のつてで参加させていただきました。

自分のプロフィールとかやってきたこととかを登録して、企業側がこの人に会いたいっていう感じで出して企業が学生を選ぶって形の求人イベントでした。正直初めての就職活動ですし、その時点でも自分はまだ就職にするか、進学にするかを決めていなかったので、場違い感がありましたし、しかも、学生一人ひとりにブースが用意されているのですが、自分のブースの両隣が東大生という始末wwwすこし運営に悪意を(ゲフンゲフン)

しかし、全部で9タームある面会が自分は全部埋まりました!

結構いま有名な企業さんとかも自分のところへ来ていただいて、とても良かったです!

僕は進路を就職ではなく進学に決めてしまいましたが、この経験を次に生かしていきたいと思います!

xHago3に登壇

忘れていました、なんかシステム作って意外と好評でした。

いつも、ローテクな感じのサービスをライブラリをジャブジャブ使って開発していて、開発速度は上がっているのですが、ガリガリとした実装力が落ちて来ている気がしました。なのでWebSocketのサーバをTCPレイヤのライブラリの上に実装してみました。といっても、プロトコルをちょいちょい実装するだけなのですが、それをうまく使いスライドの上にツイッターTLを流すようなシステムを作って発表しました。

まとめ

正直、後半に行くにつれて息切れしてる感がありますが今年はとても充実していて楽しい一年間でした。理由としてはやはりICT委員会がうまく周り出したということです。僕はこの委員会に入って4年ですが1年の時とは全然雰囲気が違って良い感じになっています。(正直今の一年生が羨ましいですww)しかし、ICT委員会は技術者集団としての色を失って来てしまいつつあるのでそこのところは少し心配です。やはり、僕らは技術力があってなんぼなので早く後輩達にも技術力をつけていって欲しいです。(まあ修行しろと) そんな感じです。僕はあんまり目標とか立てないので来年の抱負とか書きませんwww