以前作った Seq2Seq を利用した chatbot はゆるやかに改良中なのだが、進捗はあまり良くない。学習の待ち時間は長く暇だし、コード自体も拡張性が低い。そういうわけで最新の Tensorflow のバージョンで書き直そうと思って作業を始めた。しかし深掘りしていくと Seq2Seq の詳細を分かっていなかったことが発覚したのでここにまとめる。間違いを見つけたらコメントか @higepon まで。 Seq2Seq のすべてを解説するのではなく、Tensoflow/nmt/README.md のチュートリアルをベースにする。読んだだけでは、理解できなかった部分を補っていく形で進める。 必要とされる前提知識 DNN の基礎。構造、training、 loss とかそういう話。back prop は別に理解できなくても可。 RNN の基礎。RNN が時系列の扱いに向いているとか。RNN の構
日本語版がでました。すぐ買うべし。 SOFT SKILLS ソフトウェア開発者の人生マニュアルposted with amazlet at 16.05.18ジョン・ソンメズ 日経BP社 売り上げランキング: 1,272 Amazon.co.jpで詳細を見る Soft Skills: The Software Developer's Life Manualは残念ながら日本語訳が出ていない。でも英語でも読む価値はある。とても平易な英語で書かれてる。どこかの出版社さん翻訳だして欲しい。空前のブームになるに違いない。 Soft Skills 。alc.co.jp によればソフトスキルは「対人的な交渉・指導・意思疎通などをうまく行える能力(または知恵)」のことらしい。そのタイトルからも分かる通り、プログラマ向けに書かれた本だがほとんど技術の話は書かれていない。プログラマとして生きていくための技術以外
Tech Lead(TL/テックリード)の役割。聞きなれない名前かもしれない。リードプログラマやテクニカルリードと呼ばれることも。過去にいくつものチーム(最大で10人以上)の Tech Lead をやってきた自分の経験を踏まえて書いてみる。 Tech Lead の主な役割 Tech Lead はエンジニア班長と言いかえるとイメージがわきやすいかもしれない 顧客に提供したい価値(プロダクトゴール)を正しく理解する エンジニアチームの生産性を可能な限り最大化。プロダクトマネージャ・デザイナと顧客に価値を提供する Product の Launch に責任を持つ Product の Launch 後のメンテナンスに責任を持つ エンジニアを過負荷から守る ときにはマネージャ、プロダクトマネージャのアイデア、スケジュールに NO を言う。代替案を提示する チーム内のテクニカルデザイン、採用技術などに責
1 on 1 (ワンオンワン) とは1対1のミーティングの事。ここでは毎週もしくは隔週で行われるマネージャとその部下(direct reports)であるソフトウェアエンジニアの 1 on 1 に焦点をあてる。よく 1 on 1 で何を話したらよいか分からない。話題がない。と相談されるので僕の思うところをまとめてみる。 僕はマネージャもソフトウェアエンジニアのどちらも経験があるので両側からの視点を提供できると思う。 マネージャ編 マネージャは 1 on 1 を部下のために開催しなければならない。自分のための時間ではないことを肝に銘じよう。部下には話したいことを何でも話してもらう。事前に「1 on 1 は君のための時間だよ」と説明しておこう。 1 on 1 が始まったら「何か話したいこと、気になることある?」と問いかけよう。焦ってはいけない。じっくりと待ってみよう。 たとえマネージャとしてプ
エンジニアからみた良いプロダクトマネージャ(以下PM)とは。rebuildfm #98で id:naoya さん(@naoya_ito)から PM についての話があったので便乗して書いてみる。※プロダクト(製品)マネージャはプロジェクトマネージャとは全然違う職種なので注意。 結論から先に。エンジニアから見た良い PM とは「つねにユーザーのことを考えた上でプロダクトに信念を持っている人」だと思う。それは当たり前じゃないか?と思った人は正しい。でも常にそれをできる PM は多くはない。幸いにも僕は多くの優秀な PM と仕事をさせてもらったのでそこから学んだことをまとめてみよう。 PM の役割 まずは PM の役割から見ていこう。スタートアップの CEO の役割からエンジニア、デザイナーをマイナスした感じと言ったら伝わるだろうか。 もう少し具体的に PM がやっていることを挙げてみよう。 自分
この記事は Evernote すばらしい!というものではない。面倒くさがりやが最終的にたどりついたのは2周半くらいして Evernote だったという話。 何か欲しい情報があったらどうするだろうか?多分 Google で検索する。何かメモをしたい場合は?ChangeLog メモ?howm? Simplenote?。もう Evernote でいいよ。消極的な意味で。設定とかほとんどいらない。マルチデバイス対応も簡単。(Dropbox とか組み合わせなくて良いんだぜ!) メモと一緒に図をくっつけて保存したい。plain text 以上に構造化してメモを取りたい。もう Evernote でいいよ。消極的な意味で。 何か保存したいときは Evernote でやれば、探すときも Evernote の中だけを探せば良い 例 旅行する。飛行機チケットの情報は Gmail に届いた予約確認メールを Web
Emacs で wdired と moccur-edit を使っていない人は(ry と思ったので紹介します。 wdired wdired ではファイルのリネームが超簡単になります。 mv やエクスプローラで F2 を押してリネームをしている人は wdired を使うべし。 dired で ~/tmp を表示すると以下の様になっているとします。 /home/taro/tmp: 合計 273 drwxr-xr-x 6 taro taro 928 2006-12-26 10:41 . drwxr-xr-x 66 taro taro 3632 2006-12-26 10:25 .. -rw-r--r-- 1 taro taro 2232 2006-11-24 21:36 EndsWithTest.cpp -rw-r--r-- 1 taro taro 670 2006-11-24 21:24 End
Mona OS プロジェクトでは多数の方のご協力を頂いており、よくパッチを提供していただくことがあります。 パッチとは、プログラムのソースの差分ファイルのことで、現在のソースファイルのバグを修正したり、新機能を追加する目的で第三者から提供されるのが一般的です。 オープンソースの世界ではパッチはよく使われており、Linuxの開発では1日にたくさんのパッチが送られてくるそうです。 私はMona OSではパッチを受け取って取り込む側で、パッチを作ることはほとんどなかったのですが、今回とあるPerlのライブラリ用にパッチを作る機会がありました。(まだ検証中なので送ってはいませんが・・・) 受け取り側の経験から、パッチ送付の際には以下の点に留意すると良いと思います。 コーディングスタイルをあわせる(TAB, インデント、命名規則等) どのような意図のパッチであるかの明快な説明をつける どのソースツリ
これよりも Hoge::Hoge(const string& initName) { this->name = initName; }これを使いましょうという話。 Hoge::Hoge(const string& initName) : name(initName) { } 理由は、初期化リストではstringのコピーコンストラクタのみが実行されるのに対して、コンストラクタでの代入では、コンストラクタ・代入が行われて効率が良くないから。 またメンバの name がもし仮に const であるならば(これは良くあることだが)、そもそも初期化リストでしか初期化できない。 代入を使うほうが理にかなっているというシチュエーションもあり、(大量組み込み型データメンバーの場合)、その詳細は、Effective C++ 【改訂第2版】 アスキーアジソンウェスレイシリーズ―Ascii Addison We
背景と動機 WebKit をいじっているとファイルの階層が深い。find-file でファイルを探すのが面倒。一度でも開いたことのあるファイルなら find-file のヒストリから簡単に開けるがそれでも大変だ。理想としては「えーと。ファイル名に Event と Mouse と Platform が入っていて拡張子が cpp のファイルがあるはずなので探してちょうだい」と言いたい。 環境 Emacs 23.3.1 OSX Lion 後述の anything.el は version 1.3.8 セットアップ anything.el の導入 auto-install.el をダウンロードし loadpath の通ったところに置く。 % wget http://www.emacswiki.org/emacs/download/auto-install.el (require 'auto-ins
kd tree を使った近傍点検索のメモ。 kd tree の日本語の説明はkd木 - 日本語版 Wikipedia。 近傍点検索の擬似コードがあり、日本語版の元となっているのはkd-tree - 英語版 Wikipedia。 実際に動くコードで分かりやすいものは弾さんのところ。404 Blog Not Found:algorithm - 最近点検索をkd-treeで。 他には An intoductory tutorial on kd-trees という PDF があるが難しい。 kd tree の構築は、平衡木にするためのロジックがいくつかある事をのぞけばとても簡単。弾さんのコードを読めば分かると思う。 近傍点の検索は k 次元で説明されているものが多く分かりづらいと思った。自分で単純な2次元の場合にして考えれば良い。 流れは以下の通り。 検索対象点 p を kd tree 上で bi
Java並行処理プログラミングを読み終えた。ここ 1 年に読んだ技術書の中でダントツのベスト。(2位はWorking Effectively With Legacy Code) 「Java の本だから関係ない」と思った人にこそ読んで欲しい。僕もここ数年 Java のコードなど一切書いていないが、この本を読んで得たものは非常に大きかった。 この本では マルチスレッドプログラミングにおける問題と背景、その対処方法 Java が提供している API の設計と実装 を解説している。分かりやすさとレベルの高さを兼ね備えたとても良い本。翻訳も最高。 僕はこの本を読んで、Java の並行処理プログラミングは、想像を遙かに超えて進化している事に驚きを隠せなかった。何回も twitter で Java すげーと叫んだ。 これを読んでしまうと、最近僕が熱心な Scheme も含めて、自分の身の回りにあるプログ
Subversionではコミットの前後などに hook してスクリプトを実行する機能があります。 スクリプトはリポジトリ側のhooks/ディレクトリに配置し、リポジトリ側で実行されます。 hookポイント以下のようなものがあり結構細かいです。 start-comit pre-commt post-comit pre-revpop-change post-revrop-change pre-lock post-loc pre-unlok post-unlck 早速やってみましょう。 まずはテスト用のリポジトリを作成します。 cd tmp mkdir testrepos svnadmin create ~/tmp/testrepos mkdir src cd src svn checkout /home/taro/tmp/testrepos . svn checkout file://home
前置き 自分の C++ レベルに絶望したので「ロベールのC++入門講座」を読んで再入門していく過程を日記に書いていきます。 「おまえはそんなことも知らずにコードを書いていたのか!」「それは間違い!」など叱咤激励募集中です:-) 読んでみたら、たくさんの驚きがありました。 スルーせずに読んでもらえると1つくらい役に立つことを提供できるかもしれません。 例えば5章のデフォルト引数に関数を使える例とか。 ルール 前置きはともかくはじめましょう。13:48にスタバで始めました。 読んで行くうえでいくつかルールを決めます。 知らなかったことは正直に知らなかったと書き、自分が読んで分かる説明を書く。 知識が曖昧だった所も同様に明確な説明を書く。 悩んだ内容を書く。 理解が怪しい所は必ずコードを書く。 さあ1章から読んでみよう。 1章 まずは使い方(13:50) 各 OS 毎に C++ の開発ツールを紹
前回は、XSモジュールを使うと処理が高速になる可能性があるという紹介をしました。 ただしXSモジュールの導入にはデメリットもあります。 C言語で実装しているという関係上、 モジュール変更のたびにリコンパイルが必要である メモリリークの危険性がある Perlの管理下にないメモリは自分で解放しなければなりません(詳細は後日) プラットフォーム間での互換性が保てない リコンパイルや修正が必要な場合が多い PerlのXSバージョンに左右される場合がある Perl単体のときと比べてデバッグが難しい などなど、クリアすべき点があります。 というわけで使いどころとしては、 Perlのコードで速度的にボトルネックになっている部分があり そのコードの仕様はほぼfixしている(変更が入る可能性は少ない) というような場合に、XSで処理を書いてみて、ベンチマークをとってみるという形が良いと思います。 なおXSに
(追記:2009/03/25) id:tokuhirom さんからコメントを頂きました。このベンチマークは問題があるそうです。 http://d.hatena.ne.jp/higepon/20050615/1118829090#c (追記:終わり) PerlにはC言語で書かれた関数を呼び出すためにXSという仕組みが存在します。 一部CPANモジュールでも使われているためご存知の方も多いと思いますが、今回はこのXSの簡単な利用方法を紹介したいと思います。 なおXSは、はてなでも使用しています。 さてXSモジュールを使うとうれしい事は C言語で書くことにより、処理が高速になる可能性がある 既存のC言語ライブラリ資産をPerlから利用することができる Perlがあまり得意でない、メモリ内などに存在するビット単位での細かなデータ構造を、あれこれできる などが挙げられると思います。 今回は、高速化に
入門 Ajaxposted with amazlet on 06.04.22高橋 登史朗 ソフトバンククリエイティブ (2005/11/15) 売り上げランキング: 65,811 Amazon.co.jp で詳細を見る Ajax 実装のための基礎テクニックposted with amazlet on 06.04.22増井 雄一郎 深津 貴之 川崎 有亮 台場 圭一 WINGSプロジェクト 佐藤 真介 技術評論社 (2006/03/23) Amazon.co.jp で詳細を見る JavaScript & DHTMLクックブック―Webエキスパート必携テクニック集 作者: ダニーグッドマン,Danny Goodman,村上列出版社/メーカー: オライリージャパン発売日: 2004/01メディア: 単行本購入: 2人 クリック: 36回この商品を含むブログ (63件) を見る Ajaxとは 最近
id:higepon:20050602:1117724735で、書いたデバッグ方法をオブジェクト指向っぽく。 var debug = new Debug('debug', true); function Debug(target, debug) { this.target = target; this.out = function(str) { if (!debug) return; var place = document.getElementById(this.target); if (!place) return; place.value += str + "\n"; } this.clear = function() { if (!debug) return; this.value = ''; } } <textarea cols=70 rows=30 id="debug"></t
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く