こんにちは、@ryota-ka です。
僕もそろそろすごいHをたのしく学びたいとか思ってしまうお年頃なのですが、僕みたいなクソザコ初心者プログラマーが使える言語なんてPHPくらいしかないわけですよ。
でも心配は御無用、周囲の人から「PHPer(笑)」とかバカにされているあなたでも大丈夫!今日はみんな大好きPHPを使って関数型プログラミングを勉強していきましょう!
月別アーカイブ: 2014年12月
Alfred Workflowsの作り方 — Python Ver. —
この記事はCAMPHOR- Advent Calendar 2014の22日目の記事です.
こんにちは,yaitaimoです.
今回は,Macユーザな私の大好きなランチャーである,Alfredを更に便利にするためのAlfred Workflowsについてのお話です.
Pythonでローディングのぐるぐるを表示する
この記事はCAMPHOR- Advent Calendar 2014の21日目の記事です。
こんにちは、@morishin127です。
今日はPythonで処理中のぐるぐるを表示する方法を紹介します。
これです。
ノンデザイナーでもできる!写真を使ったイケてるメイン画像の作り方
こんにちは、あんみつ(@murata_atsumi)です。
この記事はCAMPHOR- Advent Calendar 2014の20日目の記事です。
私ブログが超苦手で普段からあんまり書かないから、何書こうか迷ったのですが、
一応CAMPHOR-には主にデザインの部分で関わることが多いので、
デザインのことを書こうと思います!
UnityFree + LeapでUnityちゃんを投げを作る
ProjectileとHelm
この記事は CAMPHOR- Advent Calendar 2014 の13日目の記事です。
@ivstivs と申します。CAMPHOR-だと少数派のEmacsを使ってる人です。
今回はEmacsで割と統合的なプロジェクト管理を実現するProjectileについて、Helmという拡張と一緒に簡単に紹介してみようと思います。
iOS 初心者が Swift を使って3日でゲームを作った話
この記事は CAMPHOR- Advent Calendar 2014 11日目の記事です。
こんにちは、@ryota-ka です。いきなりですが、割とタイトル詐欺です。どのあたりが詐欺かと言うと、
“iOS初心者が”
-> 某社のインターンで、デスマ的に40時間ぐらいで iPhone アプリのデザインあて (w/ Objective-C) をしたことはあったので、まったくの CocoaTouch 初心者というわけではないです。“3日でゲームを作った”
-> 実は、以前 JavaScript で書いたブラウザーゲームとして、ある程度実装してたものの焼き回しなので、最初からアイディアを考えたわけではないです。しかも、確かにベースシステムはほぼ出来上がりましたが、細かいところは実はできてません。忙しかったのだ。
その上作ったゲームに関して書くわけでもないんですが、まぁそれでも初めて Swift に触れたということは事実ですし、12月1日の午前4時から始め、途中風邪やらバイトやらで大変だったんですが、どうにかこうにか3日でゲームのベースシステムはほとんど完成したので、その間に思ったこととかを書いてみます。やめて、石とか投げないで。
本当は「Swift と SpriteKit を使ってゲームを作ってみよう!」的な記事になればよかったのですが、残念ながら余裕が全然ありませんでした……
Java の MigLayout
この記事は CAMPHOR- Advent Calendar 2014 9日目の記事です。
こんにちは、@akaaariiiiin です。
今回は、Java のレイアウトマネージャ MigLayout を紹介します。
続きを読む
Python 3でお手軽並列計算 ~concurrent.futures を使った ngram 抽出~
この記事は CAMPHOR- Advent Calendar 2014 5日目の記事です。
こんにちは @Shtr28です。自然言語処理の研究とかしてます。
今日は研究してる時に便利だった concurrent.futures モジュールを紹介します。
Future は並列計算のパターンのひとつです。
今回はテキストを使って機械学習するときによく使う ngram を Future で並列計算します!
日本語を形態素解析器 mecab で分かち書きして、一行ずつ ngram を計算します。
フルのコードはここ(gist)。
メインの並列化のコードはここ。
1 2 3 4 5 6 7 8 9 10 |
def multi_process(): # kgram に対して識別番号を順番にふるための dict kgram2id = defaultdict(lambda: len(kgram2id)) # 並列計算のプロセスプールを確保! with concurrent.futures.ProcessPoolExecutor(max_workers=4) as executor: # プールにプロセスが余ってたら sentences に sent2kgram を実行! for res_kgram in executor.map(sent2kgram, sentences): # 非同期に返ってくる計算結果に対して 副作用がある操作を実行! res_kgram = map(lambda x: kgram2id[x], res_kgram) return kgram2id |
ProcessPoolExecutor(max_workers=4) が非同期に計算するプロセスを用意してくれます。
(おなじインタフェースで ThreadPoolExecutor もあります。が、CPython だと GIL というロックがかかるのであまり速度が上がりません。:sadpanda: )
あとは executor がよしなに非同期に sentences に対して sent2kgram を計算してくれます。
そして非同期計算が終わった順に executor がよしなに generator を返してくれるので、副作用がある操作(kgram2id[x])もここで出来ます。
青空文庫か取ってきた「吾輩は猫である」の冒頭に対して手元のMacBook Air(プロセッサ 1.7 GHz Intel Core i7, メモリ 8 GB, Python 3.4.2)で実行すると、
1 2 |
single_process: 218.09ms multi_process: 135.92ms |
実行時間が短くなりました!実際研究で使った時は File IO が絡んでて、もっと激的に効果がありました。Syntaxもシンプルですし asyncio より気軽に使えるんじゃないでしょうか。お試しあれ。フルのコードはここ(gist)。
明日は @yaitaimo の記事です。お楽しみに。
〜参考にさせてい頂いたサイト〜
python 3.4.2 標準ライブラリ 17.4. concurrent.futures – 並列タスク実行
python3のconcurrent.futures