サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
ytakano.hatenadiary.org
Debian squeezeのgit-coreにgit-daemonが入ってなかったのでソースから入れる. まず,checkinstallを入れる. $ sudo apt-get install checkinstall 次に、git-1.7.1のソースを取ってきて,コンパイル. $ wget http://kernel.org/pub/software/scm/git/git-1.7.1.tar.bz2 $ tar xjfv git-1.7.1.tar.bz2 $ cd git-1.7.1 GUIは使わないのでオフに. $ ./configure --with-tcltk=no $ make git-daemonを別のディレクトリに移す. $ cd .. $ mkdir git-daemon $ cp git-1.7.1/git-daemon git-daemon/ $ cd git-d
GnuPGとはChain of Trustによる信頼モデルに基づいたPKIであり,これを用いると,署名,暗号化などを行うことが出来る.SSLなどの方式では,信頼できる第三者の存在(例えばVeriSignなど)が必要であるが,GnuPGではそれが必要ない.その代わり,どの公開鍵を信用するかといったことが,完全に自分に任されてしまう. まずは,Mac Portsを使ってインストール. $ sudo port gnupg2 次に,公開鍵と秘密鍵を作成. $ gpg2 --gen-key Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) Your selection?ここは,RSAで問題ない.古い
DNSのポイゾニング方式で児童ポルノサイトがブロッキングされたみたいなので,体験してみた.今回はSo-netのDNSサーバを利用して体験してみようと思う.アクセスするサイトは,http://dvdkodomo.com/ となる(閲覧注意). So-netのDNSサーバは,以下となる. dnss1.so-net.ne.jp (202.238.95.24) dnss2.so-net.ne.jp (202.238.95.26) digでdvdkodomo.comをひいてみると以下のようになる. $ dig @202.238.95.24 dvdkodomo.com ; <<>> DiG 9.6.0-APPLE-P2 <<>> @202.238.95.24 dvdkodomo.com ; (1 server found) ;; global options: +cmd ;; Got answer:
boostにはメモリプールをやってくれる親切なobject_poolと言うライブラリがある.この使い方は至って簡単で,テンプレートの引数にクラスを渡してプール用のオブジェクトを作成するだけとなる.指定したクラスの生成を行いたい場合(new classに相当)はconstruct関数を,削除したい場合(delete classに相当)はdestroy関数を呼び出すだけである.サンプルプログラムは以下のとおりとなる. #include <iostream> #include <string> #include <boost/pool/object_pool.hpp> class obj { public: std::string str; obj() { } virtual ~obj() { std::cout << "delete: " << str << std::endl; } }; i
最近,Stackless Pythonの実装を追いかけており,理解したところまでメモがわりに記録しておく.コードを読んでも,詳しいところはすぐ忘れちゃうからね. 読むコードは,Stackless Pythonの3.12(http://www.stackless.com/svn)となる.Stackless Pythonとは言っても,基本的な部分はCPythonと殆ど変わらないので,Pythonを読むときの参考になるのではないかとも思う. Stackless Pythonの説明はStackless Python入門 - NO!と言えるようになりたいで行ったので,興味があれば参考にして頂きたい. Pythonのオブジェクトを表す構造体 少し見たところ,Pythonではオブジェクトを表す構造体は,構造体メンバの先頭にPyObject,またはPyVarObjectという構造体を持つようである.たとえ
元ネタは,gccのwikiより. http://gcc.gnu.org/wiki/DeadlySins P. J. Brownが1979年に書いた"Writing Interactive Compilers and Interpreters"(インタラクティブなコンパイラとインタプリタの製作)が出典らしいが,コンパイラやインタプリタじゃなくても当てはまることが結構あって面白かった. 考える前にコードを書く コンパイラ制作者と全く同じ知識を,ユーザが持っていると仮定する 適切なドキュメントを書かない 言語規格を無視する to treat error diagnosis as an afterthought(あとからの思いつきでエラー診断を扱う?ちょっと意味が分からない) 絶対起きないことと,起こりそうにないことを同等に扱う コンパイラのエンコーディングを,データフォーマットに依存させる(これ
foo.m_bar と書くべきところを,foo.bar と書いていたら,foo.m_bar なんじゃないのと指摘してくれた.なんだこれは.たまげたなあ.凄い(確信). こんなかんじで書いていると, class ssl_info { public: ptr_cdpi_ssl m_client; }; void func() { get_ssl_obj(info.client, b1); } このようにエラーを出すのだ. /home/ytakano/program/c/catenaccio_dpi/src/cdpi_mongo.cpp:394:22: error: no member named 'client' in 'my_event_listener::ssl_info'; did you mean 'm_client'? get_ssl_obj(info.client, b1); ^~
追記:ハッキリ言ってこの正規表現はネタなので,実際に素数判定を行いたい場合は,もっと別な賢いアルゴリズムを使ったほうが良いです 正規表現で素数が判定できるという記事を見たので試してみた. http://www.noulakaz.net/weblog/2007/03/18/a-regular-expression-to-check-for-prime-numbers/ この記事によると /^1?$|^(11+?)\1+$/ という正規表現を使うと,素数判定が出来るらしい.ある整数 n が素数かどうか判定したい場合は,"1" * nという文字列がこの正規表現にマッチするかどうかを調べればよく,マッチすれば非素数,マッチしなければ素数となる.ただし,"1" * n は,例えば,n が 4 ならば "1111" と 1 が 4 回連続して続く文字列となる. Rubyで書いた素数判定プログラムはこん
CEDETなるものを使うとわりと簡単にできるらしいので,導入してみた. http://cedet.sourceforge.net/ ダウンロードして解凍して,コンパイルを適当に行う. $ cd cedet-1.0pre7 $ make $ pwd /path/to/cedet-1.0pre7.emacsに設定を追加 ;; CEDET (load-file "/path/to/cedet-1.0pre7/common/cedet.el") (require 'semantic-gcc) (semantic-add-system-include "/opt/local/include" 'c++-mode) (semantic-add-system-include "/opt/local/include" 'c-mode) (semantic-load-enable-gaudy-code-he
Unixを使っていると,/usr が全然ユーザー用じゃなくどう見てもシステムのための物だったり,/etc が事実上設定ファイル置き場となっていたり,/var がログファイル置き場となっていたりと,名が体を現していなくて奇妙な感覚を覚える.もっと分かりやすい名前の付け方があったんじゃないかと,Unixユーザーならば誰もが思うはずだが,これに対する解答がredditに投稿されており,その内容が非常に面白かったので,軽く翻訳してみた. Anyone know why /var and /etc weren't named something like /etc and /cfg? http://ja.reddit.com/r/linux/comments/cpisy/anyone_know_why_var_and_etc_werent_named/c0ua3mo 昔々,システム7が使われていてU
n次元空間上にある二点間のユークリッド距離を計算する方法を考える.なお,それぞれの点は,n個の要素を持つfloatの配列で表されるとする. 単純に考えると,以下のような関数で計算可能となる. float dist(const float *v1, const float *v2, int len) { float dist = 0.0; int i; for (i = 0; i < len; i++) { float d; d = v1[i] - v2[i]; d *= d; dist += d; } return dist; } コンパイルオプションに-O3をつけたときの,アセンブリコードは以下の通りとなる.ちなみに,gccのバージョンは4.2.1となる. .text .align 4,0x90 .globl _dist _dist: pushl %ebp movl %esp, %ebp
radix tree,PATRICIA tree,PATRICIA trie,基数木,パトリシア木,など色々な名前で呼ばれている木構造をC++で実装した.radix treeとは,IPのルーティングテーブルや転置インデックスなどに使われるデータ構造である.詳細はWikipediaでも見て欲しい.激しく車輪の再発明だが,なかなか良さげな実装が無かったのでしょうがない.しょぼい実装だが,折角作ったので公開しておくとともに,自分が忘れないために使い方をメモしておく. ソースはここから入手出来る.http://github.com/ytakano/radix_tree 使い方 基本的な使い方はSTLのmapと同じとなる.以下はサンプルコード. #include <string> #include <iostream> #include "radix_tree.hpp" using namespac
元ネタは Vassilis Athitsos, Michalis Potamias, Panagiotis Papapetrou, and George Kollios. Nearest Neighbor Retrieval Using Distance-Based Hashing. In ICDE, pp. 327–336. IEEE, 2008. Locally Sensitive Hashing(LSH) 多次元データのK近傍探索を行う場合に使われるのがLocally Sensitive Hashingである.同じく多次元データの探索技術として木構造の一つであるKD木を使ったものなどもある. をオブジェクトの空間とし,上で定義される距離測度をとする.また,となるハッシュ関数族をで表す.ただし,は整数全体の集合を意味する.いま,であるとき,全てのに対して, となる実数が存在する場合,
オブジェクトへ関数を定義する SpiderMonkeyを使えば,JavaScriptからC言語で書かれた関数を呼び出すことが出来る.サンプルによると,JSFunctionSpecの配列を定義して,JS_DefineFunctions関数を呼び出すことで,C言語の関数がJavaScriptの任意にオブジェクトに定義されるようだ.実際のコードは以下の通りとなる.(このコードはC言語じゃなくて,C++言語だが基本的な違いはない) #include <js/jsapi.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <iostream> JSBool myjs_rand(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval); J
利用するホストOSはMacOS X Snow Leopardで,まず,普通にBootcampを使ってWindows 7をインストールする.ここら辺の説明は割愛.インストール後のディスクは以下のようになる. Current MBR partition table: # A Start LBA End LBA Type 1 1 409639 ee EFI Protective 2 409640 318914599 af Mac OS X HFS+ 3 * 319178752 488396799 07 NTFS/HPFS Macのブートシーケンスにはインテルの提唱した新しい規格であるEFIが採用されているため,第一パーティションはEFIのために割り当てられている.これは,デバイスファイルで言うところの/dev/disk0s1に相当する. また,MacOS Xは第二パーティションの/dev/dis
Why Do People Hate Java? http://ja.reddit.com/r/programming/comments/b7eo5/proggit_why_do_people_hate_java/c0lc00n にあった返答が面白かった. 個人的なJavaの感想だが,良い言語であるかもしれないが,Javaを使うぐらいならPythonを使うし,Webサイト構築したいならApacheやLighttpdと親和性の高い他の言語を使いたくなる.Tomcatなどわざわざ運用したくないのだ.OS依存のところを書こうとするとやはりC/C++でないと難しくなってしまう.利点といえば,そこそこ多くのOSで動くGUIアプリを移植性を考えずに書けるぐらいか.だがそれも,Qtなどの登場で色あせてしまったように思える.tcl/tkという選択肢もあるか.つまり何をいいたいかというと,Javaを使う理由
SourceForgeのインターフェースが異常に使いにくくなってしまったので,他に安住の地を求めてたら,CodeReposとGitHubがよさげだったので,そのうちのGitHubを使うことにした. とりあえず,gitをインストール (Mac) $ sudo port install cogito git-core Gitに名前などを登録 $ git config --global user.name "Your Name" $ git config --global user.email "mail@mail.com" 新規プロジェクトローカルをGitHub上で作成したあと,ローカルにプロジェクトを作成 $ mkdir project $ cd project $ touch README Gitを初期化 $ git init ファイルを追加してコミット -a オプションは,更新したファイ
ニコニコ動画のランキングを久々に見たら,薄い水色の背景に薄い青文字で書かれてて,異常に見にくい色合いとなっていた.プレゼン資料をこんな色合いでつくったら真っ先に修正を喰らうレベルだが,ふざけて居るんだろうか?黄色の背景も見にくいし,何を考えてこんな色にしたんだろうか. やるなら,右上に勲章っぽい画像を貼り付けたりするのでいいのに,やたら見にくくしてるなこれ.
Slope One Predictors for Online Rating-Based Collaborative Filteringを読んだメモ1 (http://d.hatena.ne.jp/ytakano/20081002/1222970856)の続きで,D. Lemire and A. Maclachlan, "Slope One Predictors for Online Rating-Based Collaborative Filtering", In SIAM Data Mining (SDM'05), Newport Beach, California, April 21-23, 2005.のメモです slope oneは英語版のWikipediaにも多少載っていますが,英語が読めるなら,元の論文を参照した方がよいでしょう.(http://en.wikipedia.org
Recommender Systems 2007(http://recsys.acm.org/2007/)で発表された論文である,Bhaskar Mehta, Thomas Hofmann, and Wolfgang Nejdl, Robust Collaborative Filtering, In Proceedings of the 1st ACM Conference on Recommender Systems, ACM Press, October 2007, pp. 49–56. を読んだメモです.この論文では,ある種の攻撃に耐えられるような,頑強な協調フィルタリングの手法を提案していますが,その説明は後日行うことにして,今回は,関連研究に挙げられていた,特異値分解を用いたレコメンデーションアルゴリズムについて説明を行いたいと思います. 特異値分解 ある任意のm x n行列は下
Connecting Nearest Neighborモデルとは,スケールフリー性,クラスタ性,スモールワールド性を満たすソーシャルネットワーク的なグラフを生成するアルゴリズムの一つです.何かしらのシミュレーションなどに使えるのではないかと思います. アルゴリズムは以下を繰り返すだけとなります. 1-pの確率で新たなvertexを作成.ランダムに既存のvertexを一つ選ぶ.新たなvertexと選ばれた既存のvertexを結びつける. pの確率で,ランダムに選んだpotential edge一つを本物のedgeへと変換する. ちなみに,potential edgeとは次のような,潜在的なedgeです. 例えば,以下のようなグラフがあった場合のpotential edgeは,1と3を結ぶedgeとなります. 2 / \ 1 3また,以下のようなグラフであった場合は,1-5,1-3,5-3,2
C++でURLEncodeなプログラム無いか探していたけれど,boostのregexを使った巨大な奴とか,やたら凝ったやつしかなくて,もっとシンプルな奴が欲しいのに,それぐらい誰かのせておけよと思ったので,載せておく. #include <iostream> #include <string> #include <stdio.h> std::string encode(const std::string &str) { std::ostringstream os; for (int i = 0; i < str.size(); i++) { char c = str[i]; if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '-' || c == '_' || c =
WWW 2008(http://www2008.org/)で発表された論文である,"Trust-Based Recommendation Systems: an Axiomatic Approach"を読んだメモです.この論文は公理に基づいて,Recommendationシステムの解析をしようというモノですが,いまいち分からなかったので,詳細は省きます^^; ですが,この論文中で紹介されていた,Personalizing PageRankが面白かったので,メモっておきます. 普通のPageRankでは,ネットワーク(有向グラフ)の繋がり全てを再帰的に走査し,どのノードが重要かをランクづけます.しかしながら,Personalizing PageRankでは,あるノードにとって,他のノードはどれぐらい重要かと言うことを,ランダムウォークを用いて求めます. ランダムウォークのアルゴリズムは以下の
Zipf分布といえば,べき乗則でおなじみの分布です(http://en.wikipedia.org/wiki/Zipf%27s_law).一方,Zipf-MandelbrotはZipf分布を一般化したものだそうです(http://en.wikipedia.org/wiki/Zipf%E2%80%93Mandelbrot_law). Zipf-MandelbrotのPDFは f(x) = c / (x + b)^aとなるわけですが,今回はより単純な形式である, f(x) = 1 / xというPDFに従う乱数を生成する方法を説明します. まず,CDFを求めてみます.ただし,PDFの積分は ∫f(x) dx = ln(x) + C (Cは積分定数)であるけれど,F(0) = 0なのでCDFは F(x) = ln(x)となります. 次に,F(x)の逆関数をもとめます. y = ln(x) e^y
SIGCOMM 2008の併設ワークショップである,WOSN 2008で発表された,"Analysis of Social Voting Patterns on Digg", Kristina Lerman, Aram Galstyan, (http://conferences.sigcomm.org/sigcomm/2008/workshops/wosn/program.php)を読んだメモです. この論文では,Digg(http://digg.com/)を解析し,ニュースの伝搬がどのようにして行われるかを明らかにしています.ちなみにDiggとは,アメリカで有名なソーシャルブックーマークサービスであります.はてなブックマークと違い,DiggにはFan機能と呼ばれるものがあり,お気に入りの人を指定できたりもします.Twitterのfollowをイメージすればよいでしょう. まず始めに,この
並行言語であるErlangでPeer-to-Peer Network技術の一つである分散ハッシュテーブルを実装してみたところ,わずか1000行程度で実現できました.ノードが頻繁に出たり入ったりする,いわゆるchurn下でもそれなりの性能が出せたので,SourceForge.netで公開してみます.興味のある方はどうぞ. http://sourceforge.net/projects/ermdia/ 内部アルゴリズムはKademliaと呼ばれるものを利用しています.BitTorrent等でおなじみのアルゴリズムですが,データのput/getなどの通常のメッセージの交換時にルーティングテーブルをアップデートするため,ルーティングテーブルの維持コストがChord等に比べて低いという特徴があります.実装もそれなりに簡単で,過去にSymphonyと呼ばれる分散ハッシュテーブルを実装したのですが,それ
はてブの注目の動画が急速に劣化した件について http://d.hatena.ne.jp/umeten/20080317/p1 各個人で気に入った動画をブックマークしたところ,アイマスやボーカロイドの動画が「注目の動画」欄に大量に出現することになりました.これが意味することは,アイマスやボーカロイドの動画の方が,他の動画より注目度が高いということであります.つまり,これまではアイマス動画等は大きな潜在的需要を持っていたのに,情報のフィルタリングというボトルネックにより表に出てこなかったのですが,ボトルネックが解消されて一気に潜在需要を満たす形で噴出したことに他なりません.これはすなわち,潜在需要を満たした,つまり効用が最大化されたことになると考えられ,劣化したのではなく,実は進化したのであることに気がつきます. 「注目の動画」急速劣化問題について http://beta.g.hatena.
「格差に不満83%」は良い傾向だ http://banmakoto.air-nifty.com/blues/2008/02/8_d3dd.html この記事を読んで、意外というより不思議に思ったことがあります。 皆さんは、私が何を「不思議に思った」か分かりますか? 日本人の不満率が高すぎる? いや、そうではありません。 私が不思議に思ったのは、主要国では格差が大きい国ほど不満を感じる割合が低いと言うことです。 不満を感じる人が米国52%、英国56%、フランス78%、これって、格差の大きさと完璧に反比例していますね。 OECDによる「貧困層」の定義によると,貧困層とは国民の平均所得の50%以下の所得しかない人々の事を指します.少し古い情報かも知れませんが,2006年にOECDが発表した情報によると,日本における貧困層の割合は,13.5%であり,一位アメリカの13.7%に次いでワースト二位とな
ついに民放連が動画共有サイトでの映像無断使用に対策へ http://gigazine.net/index.php?/news/comments/20071123_nab/ 民法がついに動画配信サイトへのアップロードの取り締まりを始めような気配である.しかしながら,彼らの言い分にも一理あり,例えば,アニメやドラマなどはDVDとして売り出すといった,二次や三次使用が行われる.二次や三次使用での売り上げは,制作会社及びクリエータの収入となるため,それらについては自重すべきだろう. しかしながら,ニュースや報道についてはその範疇に当たるのか疑問である.電波使用料というのがあるが,総務省の見込みによると2007年度は653億円の収入が見込めるそうだが,テレビ局はあわせて5%しか払っておらず,80%以上が携帯利用者,つまり国民の金でまかなわれている.これを見ると,テレビ局は非常に優遇されていることがわ
次のページ
このページを最初にブックマークしてみませんか?
『NO!と言えるようになりたい』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く