ウニ’s blog

勉強した結果を書いていきます

いぬにアクションカムを取り付ける(1)

犬用のアクションカムマウンターが高い!
なんか適当でも行けるんじゃないかと思って、WIMIUS Wifi 4K付属のクリップで首輪にアクションカムを装着して、強行撮影した。

結果

だめだった。首輪に連動してメチャクチャな動画になってしまった。


WIMIUS Wifi 4Kを犬に装着

道具

WIMIUS Wifi 4KはやっすいパチモンのGoProです。普通に使える。

付属のクリップはこれ
f:id:uni8inu:20170102002101j:plain

いぬ。 f:id:uni8inu:20170102002305j:plain

全然使えん

動画のカット編集ソフト探したけど、Filmora全然駄目だった。
無料版で出力すると、半透明ロゴありえないぐらいうざい。
だめだこれ。

動画編集 - 動画編集がフリーでできるソフト10選

結局youtube自体の動画編集ソフト使うことに。
編集時間かかかりまくるのでこの方法は良くない。動画編集方法をなんとかしたい。

終わりに

マウンター高えよ、と思ったら結構値段下がってた。ヨドバシで\4000ぐらい。
\7,000超えてたと思ったけどなあ…
\4000だと変に工作するよりやすいので次は買います。
(終わり)

【Python3】requestsにthreadを使用すると非常に効果的

crawler,rest api等でrequestsにてgetを大量に投げる場合、ボトルネックになるのはI/Oバウンド。
入門Python3には以下の事が書いてる。

  • スレッドはI/Oバウンド問題の解決のために使う。
  • CPUバウンド問題では、プロセス、ネットワーキング、イベントを使う。

requests.get()している部分をworker threadとして切り離し、Queueにてタスクを管理するとかなり高速化できる。 計測結果とサンプルコードを記載する。

結果

requestsにて10回google検索結果を取得した結果。

タイプ 総実行時間(sec) response.elapsed合計値(sec)
thread 0.6119930744171143 0:00:01.050656
non thread 5.603970766067505 0:00:01.089367

9.3倍早く終る。素ん晴らしい!
総実行時間がresponse.elapsed合計値以下になってるのが感動する。

サンプルコード

non thread版

# non_thread.py

import datetime
import requests
import time

baseurl = "http://www.google.co.jp/search?hl=ja&q="

query_list = ['inu','neko','tori','sakana','kinoko','hebi','usagi','uma','hituzji','kabutomushi']
responses = []

start_time = time.time()

for q in query_list:
    responses.append(requests.get(baseurl+q))

elapsed_time = time.time() - start_time
print("total_time : {}".format(elapsed_time))

requests_time = datetime.timedelta()
for r in responses:
    requests_time += r.elapsed

print("requests_time : {}".format(requests_time))

thread版

# thread.py

import datetime
import queue
import threading

import requests
import time

def query_worker(query_queue):
    query = query_queue.get()
    responses.append(requests.get(baseurl + q))
    query_queue.task_done()

baseurl = "http://www.google.co.jp/search?hl=ja&q="

query_list = ['inu','neko','tori','sakana','kinoko','hebi','usagi','uma','hituzji','kabutomushi']
responses = []

# queueを設定
query_queue = queue.Queue()
for q in query_list:
    query_queue.put(q)

start_time = time.time()

# Thread start
while not query_queue.empty():
    w_thread = threading.Thread(target=query_worker, args=(query_queue,))
    w_thread.start()

# wait all thread are ended.
query_queue.join()

# total running time
elapsed_time = time.time() - start_time
print("total_time : {}".format(elapsed_time))

# http response total time
requests_time = datetime.timedelta()
for r in responses:
    requests_time += r.elapsed
print("requests_time : {}".format(requests_time))

参考

入門 Python 3

入門 Python 3

p330 11.1並行処理あたりを参考。
この本読みすぎてボロボロになってきた。

その他

PythonはGIL(グローバルインタープリタロック)が効いているのでCPUバウンド問題に対応するのにスレッド化は適さないので注意。逆に遅くなるよ!
あとはcrowlerを高速化しすぎてサーバーに怒られないように注意。

終わりに

高速化成功すると。気分いいですね。 並行処理、並列処理技術はめちゃめちゃ奥が深いので、まずは浅瀬で水浴びする程度から使っていきたい。
(おわり)

Javaで学ぶデザインパターン入門を読む

プログラムが肥大化した。非常に改修しにくくなってきてツライ。再構築しよう。
ついでに、もっと良い構造にできないかデザインパターンを調べよう。
10年以上前に買ってなんとなく読んで以来ほったらかしだった、Javaで学ぶデザインパターン本を読んだ。

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

AbstractFactoryパターンとVisitorパターンが難しい。

あとは、以前読んだ感覚と同じで、サンプル内容を超えて、実際問題に適用する時に壁があると感じる。
だけど、まぁ一読しておく取っ掛かりになるかもしれないので、読んでよかったと思う。

終わりに

発売日2004年か…。年取ったなー。
(おわり)

PythonでECサイトを作る(3)

コア処理修正。したけど、精度が落ちたので殆ど破棄。こういうこともある。
あとは相変わらず処理速度がくっそ遅い。なんとかしないと・・・。
対応策としては、プロセス分割すればいいのでは?とさっき思いついたので、明日ためそうと思う。

あとはサーバー構成検討し始めた。
GoogleCloudPratform使おうと思うけど、なんか入門する以前の状態で足踏みしてる感あり。正月ボケかなあ。
あまりCloud全般の知識がない感じだが、とりあえずHeroku的なPasSで良いと思うので、GoogleAppEngineを試してみよう。
(おわり)

名も無き戦士のソウルを作る(1)

フロム・ソフトウェアのdarksoulsが大好きなので、名も無き戦士のソウルを作る。
2017年はソウル吸収していきましょう。

この記事は、大晦日ハッカソン2016の発表物です。

f:id:uni8inu:20170101221543j:plain

結論

失敗した。

大晦日ハッカソン2016 まとめ

togetter.com

やりたいこと(やりたかったこと)

以下の仕様を満たすものを作りたい。

  • 握りつぶすと、煙が出まくる
  • 煙が体にまとわりつく
  • 煙が消える
  • 潰した時にソウル破壊音が出る

構造検討

まずは煙をどうやって生成するのか。仕組みの案出し。

  1. ドライアイス+水で作る
  2. 舞台演出用スモークマシン(用の液体)で作る
  3. 煙玉にうまく着火する
  4. 液体窒素で作る

案2.を採用

ARuFaさんスモークマシン(煙を作るやつ)でなんかやってたので、それを見てスモークマシン(用の液体)でいけそうと判断した。

srdk.rakuten.jp

準備

スモークマシン用の液体と熱源がいる。
手元で煙を発生させるので、あまり炎は使いたくない。

検討した結果、駅弁を温める仕組みが使えると考えた。
生石灰+水である程度の熱が得られるようだ。
そららを考えつつ、色々準備した。
f:id:uni8inu:20170101225738j:plain

買った液体はこれ。

実験

調べると、生石灰:水 = 100:32で最適な熱が発生するようだ。
あとは、握りつぶした瞬間に急激に煙を生成して欲しいので、速やかに熱が発生できるか調べたい。
100gの生石灰に水32gを投入した。

f:id:uni8inu:20170101224029j:plain
一瞬で100℃超えた!良い感じだ。

ポータースモーク専用液は200℃ぐらいになっても全然煙が出なかったので、駄目かと思った。
色々弄っていると、どうやら風を当てる必要があったようだ。
ドライヤーで風を当てるとすごい量の煙が出てきた。ようし。
f:id:uni8inu:20170101224258j:plain
写真にはうまく写ってないが、めちゃめちゃに煙が出ている。さすが専用液。

あとは、専用液+生石灰で煙が出れば、基本的な煙の生成部分はOK。
画面奥は助手の甥っ子。

f:id:uni8inu:20170101225027j:plain  

専用液は非水成分が多いようで、生石灰と全然反応せずに、全く温度が上がらなかった。
当然煙も発生せず。
残念ながら、今回のハッカソンはここでリタイア。👤

終わりに

ソウルはいつか作りたいと思っていたので、今回は残念だった。
めげずに別の案でも検討を進めたい。

ハッカソンは、溜め込んでたチャンスをやるタイミングとしてすばらしい機会だ。
今年も色々参加していきたい。 (おわり)

エクストリームプログラミング本を読む(1)

積んでたエクストリームプログラミング本。むずかしい。
翻訳のせいもあるかもしれないが、アジャイルサムライ本の気楽さが薄く、硬い感じ。
今はせめて、できるところ、気になったところだけでも実践していこう。

エクストリームプログラミング

エクストリームプログラミング

気になったところ

エクストリームプログラミングから引用

  • 気がついたらふりかえろう

    振り返りは「公式」の機械に限定すべきではない。配偶者や友人との会話、休暇、ソフトウェアとは関係のない読書や運動といったもの全てが、今どのように仕事をしているのか、なぜそのように仕事をしているのかを個人で考える機会となる。食事やお茶をともにすれば、非公式な場で一緒に振り返ることもできる。

そうする。

  • 品質については、出来る限りのことをやろう

    品質が心配だからといって、なにもしないことの言い訳にしてはいけない。きれいに実装する方法がわからなければ、出来る限りのことをすればいい。

そうする。

  • テストは2つの視点を持とう

    ダブルチェックの恩恵を完全に手に入れるために、XPには2セットのテストが用意されている。一つは、プログラマーの視点で書かれたテストだ。システムのコンポーネントを徹底的にテストするものである。もう一つは、顧客やユーザーの視点で書かれたテストだ。こちらはシステム全体の操作をテストするものである。

テスト書かないとなあ…

  • 常に設計しよう。実装後に分かることなんて沢山ある。

    前持った設計は必要だが、最初の実装ができるだけで十分である。それ以上の設計は実装後に設計の本当の制約が明らかになってから行えばよい。XPの戦略は「何も設計しない」ではなく「常に設計する」である。

これは素晴らしい。刃の切っ先のような考え方だ。

  • Once and Only Once

    私の知る強力な設計方法は「Once and Only Once」である。これは、データ、構造、ロジックなどは、システムの一つの場所に存在すべきであるというものだ。

これなにかで見たな、と思ったらPythonの思想だった。

  • 作り過ぎが最大のムダ

    TPSの精神的指導者である大野耐一氏は、最大のムダは「作り過ぎのムダ」だと言っている。何かを作り、それが売れないとなると、作った労力の行き場がない。

アジャイルサムライで言うところのスパルタ式リリースを目指していきたい。
一気にでかい結果を出そうとすると大抵、その前に力尽きてしまうので…。

参考

qiita.com

There should be one-- and preferably only one --obvious way to do it. たったひとつの冴えたやりかたがあるはずだ。

終わりに

ちょっと頭が良くなったら、見直します。

2016年振り返り

完了したり、完了してないやつもあり。
おもったより技術書読めなてない事が分かった。
積み本増えるだけなので、もっとターゲットを絞り込んでいきたい。

完了してないやつ

2017年は

一番興味があることに取り掛かりなさい、ってどっかの人が言ってたので、
完了してないやつを救わずになるべくそうしていきます。

あとはChanier または Tensorflow全然やれてないのでやっていきたい。