たにしきんぐダム

プログラミングやったりゲームしてます

はてな×ドワンゴ合同ハッカソン@京都 に参加してきました!

先日開催された はてな×ドワンゴ合同ハッカソン@京都 に参加してきた!

dwangohatena.connpass.com

お弁当もお菓子も飲み物も懇親会も無料だし 楽しかったし最高な感じでした

作ったもの

github.com

ニコニコ動画の検索をターミナルから出来る nicoterm というものを作ってみました.

(シェルスクリプトをがっつり(?)書くの初めてでだいぶアレな感じ...)

この nicoterm まだプロトタイプ程度の完成度で色々と追加したい機能があるので そこらへん整備したらまた改めて発表しようかと思っています. (コードもリファクタリングしないと見せられたものじゃないので...)

作るものを決める

ニコニコの検索APIを使って コマンドラインからニコニコ動画を検索できるCLIクライアントでも作るかぁという感じにしました. (クソザコなのではてなの認証をコマンドラインからうまいこと行うやり方が分からなかった...)

コンテンツ検索APIドキュメント

使う道具を決める

コマンドラインツールを作るのだから golang とか使えれば良かったのですが golang 全然触ったことなかった & そんなに難しいコードにはならないかなと思ってシェルスクリプトで書いてみることにしました.

シェルスクリプトは ループの仕方や関数宣言も怪しい感じでしたがググれば何とかなるやろという感じでした. 結果的には勉強になって良い体験になった気がします.

実際に作る

周りでは結構チーム開発したりしてたけど 僕は特に友達と参加というわけでも無かったのでボッチでやりつつ 同じテーブルになった人とかに進捗聞いたりしてワイワイ開発してました.

隣のチームがドローン飛ばしたりしてて激しい感じだった(結局ドローンは使ってなかった)

発表

5分程度で成果物を発表しました.

「ターミナルからニコニコ動画検索したいですよね」という出だしで適当に発表した. あんまり人前で成果物を発表するのに慣れてなかったのですごく簡単な紹介しかできなかったのですが もっと準備して詳しく説明できれば良かった...

他の人の発表

  • はてなブックマークの未読を無くすアプリケーション
  • はてぶのコメントを画面上に流すアプリ
  • ニコニコのコメントのみからその動画を当てるクイズアプリ
  • ニコニコ静画から機会学習を使って俺の嫁探しできるアプリ
  • ツイッターの友達のはてなブックマークから友達がどんな記事を読んでるか分かる便利アプリ

などなどありました. 皆ユーモアも技術力もある作品作ってて面白い! 自分ももっと面白いものを作りたい!

まとめ

他の参加者の方だけでなく はてなドワンゴのエンジニアの方ともかなり交流できて凄く楽しかったです! またこういうハッカソンがあったら是非参加したいです.

主催である はてなさん・ドワンゴさん ありがとうございました!

PyCon JP 2015 に参加してきました!

10/9 ~ 10/12 に開催された PyCon JP 2015 (PyCon JP 運営 — PyCon JP) に参加してきました 10/9 はチュートリアル 10/10, 10/11 に講演等があり 10/12 に開発スプリントという感じで 僕は10/10 ~ 10/12 で参加してきました.

まとめ記事

すでにTogetter や スライド, flicker が公開されているので そちらを見ると雰囲気がつかめるかと思います.

カンファレンス一日目

午前

基調講演を聞いたあとは とりあえず企業ブースを適当に回ったり 無限コーヒーを飲みながら久しぶりに会った大学の先輩と話したりしてた

その後は プレゼンテーション:Python と型ヒント (Type Hints) | PyCon JP 2015 in TOKYO を聞いて型型言ってたりしてたら午前の部が終わり

お昼ご飯は PyCon JP さんが用意してくれたお弁当屋さんの弁当を外の講演のベンチで食べながら次の講演はどこ見に行くかとか話してた

IMG_0191www.flickr.com

ガパオご飯とグリーンカレー食った

午後

食後の眠気と端末の充電したさからソファに座って充電しながら先輩とAndroidの話をしてたらスタッフに写真撮られてた(Pythonの話してなくてごめんなさい) そのままブースを見たりコーヒーを飲んでたらコーヒーブレイクへ お菓子がめちゃくちゃ美味かったです.

その後は プレゼンテーション:tse - Pythonによるテキスト整形ユーティリティ | PyCon JP 2015 in TOKYO を聞いてPythonワンライナー機運を高めたりしてた便利そう

そんなこんなしてるうちにLTの時間に

その後はパーティー! IMG_7185www.flickr.com

知り合いとばっかり話してたし楽しかったけど もっと色んな人と交流すれば良かったなぁという感じです(LTとかできたら話すネタにもなったんだろうけどネタがない…)

カンファレンス二日目

午前

基調講演を聞いた後は適当にジョブフェアーの発表を聞いたり ポスターセッション見たり コーヒー飲んだり

pyexperiment っていう研究用ライブラリが便利そうだなって思った 研究でPython使うようになったらお世話になるかもしれない duerrp/pyexperiment · GitHub

そしてそのままランチタイムへ 二日目はシリアンライス食った

午後

またもや食後の眠気からコーヒーを飲みつつ休憩してた(オープンスペースとかで面白イベントやってたらしいし行けば良かった…) 眠気がとれたら プレゼンテーション:uWSGI/Dockerを利用したWebサービス運用事例 | PyCon JP 2015 in TOKYO を聞いて uWSGI と gunicorn の比較とか聞いて良い知見を得ていた.

その後はコーヒーブレイクだったのですが NOC(Network Operation Center)見学ツアー をやっていたので見学してきました. ネットワーク監視のあれこれを聞いたり 人がよく通る箇所は床ではなく天井に這わしてやるとか細かいところまで考えた配線技術は素晴らしいなあと思いました.

その後は遅れてコーヒーブレイクをとって プレゼンテーション:PyPIデビュー 2015 | PyCon JP 2015 in TOKYO を聞いたりした 僕も便利ライブラリ作りたいです.

その後のLTでは pysqldf とか便利そうだな〜 って聞いてた SQLおじさん見習いとしても pandasをSQLで操作する芸を身につけていきたい

github.com

モノタロウ楽しそうな会社ですね

クロージング

いよいよクロージング モノタロウ侍君とじゃんけんして勝ち残ったら商品が貰えるみたいなイベントがありましたが全然勝てませんでした… (PyCharm Pro とか iPad もあったしすごい)

IMG_7577www.flickr.com

開発sprint

ドキュメント翻訳したいとは思っていたけれど sphinx分からないし…という感じだったので 何も分からないにも関わらずsphinxチームに加えさせて頂いてsphinx環境を作ったり入門したりしてた (ありがとうございました) transifex の Django ja チームに加えて頂いたので翻訳頑張るぞ!

まとめ

  • ネットがめちゃくちゃ安定してるし 常にスタッフがそこらへんにいて安心だった (おつかれさまでした!)
  • 電源確保が難しい
  • モノタロウ侍かわいい…
  • YAPCと比べて大人しめな感じがした 会場の雰囲気も落ち着いた感じで良かった
  • ご飯が美味しかった
  • 結構海外からの方が多かったけどだいたい日本語ペラペラだった. もっと国際交流したい

来年もっと強くなって行きます!!!

英和辞書検索をポップアップからシュッと出来るChrome拡張作った

概要

辞書検索Webアプリとか Chrome拡張とかあるけど

  • そのWebページにアクセスしなくちゃいけなかったり
  • Chrome拡張からの検索結果が新しいタブで開かれたり
  • 調べたい単語を選択状態にしなくちゃいけなかったり

とイマイチ使い勝手がよいものが無かったので ChromeExtensionのポップアップの部分で検索・検索結果の閲覧が出来る感じのChrome拡張を作った.

こんな感じ Gyazo

ボタンがあるけど普通にフォームに検索したい英単語を入力してEnterキー押せば検索結果が出るのでサクッと辞書検索できます.地味に便利.

インストール

Chromeウェブストアにアップロードしてあります. インストールはこちらからどうぞ.

chrome.google.com

GitHub

tanishiking/dejizo-eiwa-chrome · GitHub

注意

現状 英熟語の検索はできないっぽい

この拡張機能のバックエンドには デ辞蔵 REST版API の無償公開版を利用しています.

無償公開サービスのURLです。365日24時間動作していますが稼働保証はございません。

このため この Dejizo Eiwa Chrome も稼働保証はございません. ご了承ください.

PHP でジェネレータを作ったり遅延評価してみる

ジェネレータを作ったり遅延評価するのが流行っているようなので、PHP5.5.0から導入されたジェネレータを使って同様のことをPHPでもやってみようと思いました。

PHPイテレータ、ジェネレータ

PHP 5 は、foreach のような反復処理を可能とするよう オブジェクトを定義する手段を提供しており、IteratorIteratorAggregateなどを実装することによってオブジェクトの反復処理の方法などを細かく指定することができます.

ジェネレータ

先ほど述べたインターフェースを実装することによって反復処理を可能とするオブジェクトを実装することもできますが、ジェネレータを使えば簡単に実装することができます.

早速いくつか簡単なジェネレータを実装してみます。

以上のように内部ではcurrent()メソッドで現在自身が保持している要素を出力し、nextメソッドで次の要素に進むということをしているのですが、同様の処理をforeachで行うことができます.

以下はフィボナッチ数列を無限に返すジェネレータです.

遅延評価

PHP で yield を使ったジェネレータを作成すると遅延評価されていることはこれまでの例から分かることと思います. イテレータを引数にとってイテレータを返す関数を利用することで, より複雑な処理を行うことができます. このようなイテレータを生成する関数はPHP には標準では存在しません. (lstrojny/functional-php · GitHubnikic/iter · GitHubのような外部ライブラリは存在しますが…)
それらの関数を模倣してみます.

実際の例は以下

PHPではデフォルトではリストを受け取ってリストを返すarray_map() やarray_fileter() などは存在しますが、イテレータを受け取ってイテレータを返すようなmap, filter などが存在しないので3~27行目で独自に簡易的に実装しています.

ダミー画像なしでImageFieldを含むFormのテスト

たとえばこんなフォームのテストをしたいとき

from django import forms

class HogeForm(forms.Form):
    name = forms.CharField(max_length=100)
    image = forms.ImageField(upload_to='images/')

テスト用のダミー画像を用意するのもいいが、ダミー画像なしでテストする方法として、PILとSimpleUploadedFileを使ってアップロードされた画像ファイルっぽいものを作ってテストできる。


gistff7336608fca2c889955

使い方

from django.test import TestCase
from your_app_name.forms import HogeForm
from inmemory_image_generator import get_image_dict

class HogeTest(TestCase):
    def test_hoge(self):
        img_dict = get_image_dict()
        param = {'name': 'foo'}
        form = HogeForm(param, img_dict)
        self.assertTrue(form.is_valid())

こんな感じでテストできて便利