C++プログラマにとって、『Effective C++』はバイブルのような存在です。どれくらいバイブルかというと、皆さんの使っているGNUのGCCコンパイラには、EffectiveC++のコーディングガイドラインに従っているかどうかチェックするためのコンパイラオプション『-Weffc++』が、あるくらいです。 しかし、その内容は決して初心者向きではなく、実際に買ったはいいが、書棚の肥やしになっているような人たちも多いと思います。そこで、そのような初心者の人たちに EffectiveC++ を読み解くために各章のエッセンスをまとめたガイドラインを書いてみました。 C++はもう時代遅れとよく言われますが、組み込み系からビジネスシステムまで、幅広くカバーできる言語は、C++以外にありません。C++を知っていれば、おそらくどのような業界にも通用するでしょう。ITプログラマを自負するのであれば、C+
届いたのは先月初くらいでした。 Kindle 3G Wireless Reading Device, Free 3G + Wi-Fi, 6" Display, 3G Works Globally - Latest Generation 自宅と会社の往復40分のひまつぶしが欲しかったのです。朝は日が差すので、iPadやケータイのようなバックライトで見せる機器は使えません。夜は街灯しかないので、紙媒体の書籍はおあずけになってしまいます。 で、反射型のディスプレイのため、日が差しても見やすく、ブックカバーに偽装した読書灯がオプションとして用意されていたため、夜道でも読める、ということでKindleとなりました。 一月くらい運用してみて、だいぶ生活に融け込んだと思うので、下記。 3G通信機能 Webkitを採用したフルブラウザがインストール済みであるため、たいがいのサイトは見るのに困りません。が、
■ Kindle3向け自炊本作成手順、(おれ的)ベストプラクティス 注意: この記事は古くなっており、現時点ではベストでもなんでもなくなっている。進化した「Kindlize手法」についてはKindle3向けdot by dotな自炊PDFを(真面目に)作成するを参照されたい。 あれこれ試行錯誤の末、自分的にだいたい納得できるクオリティの自炊本作成手順ができたのでメモっておく。対象はKindle3。 例えばiPadをはじめとする大型タブレットだとこういう苦労はあまりなくて、気にせずフルカラーかグレースケールでスキャンしてPDFにしてしまえば難なく読めるんだろうけど、Kindle3やSONYのアレみたいなモノクロの5~6インチ画面向けにはいろいろ最適化が必要だ。だからKindleダメというわけじゃなくて、この軽さ、小ささ、そしてE-Inkの美しさを享受するためにちょっとした手順が増えることは厭
Today I created a tiny script called cppref, a wrapper for documents on cppreference.com. Blurbs are: docs are bundled with the interface, no network access required works like man(1) or info(2) or perldoc(2) It looks like follows. $ cppref You are here: C++ Reference C++ Reference C++ General Topics * C++ Strings * C++ I/O * FAQ + C++ String S
ocamljs は OCamlから JavaScript へのトランスレータだ。前回の記事と順番が逆になってしまったけれど今回はocamljsについて書く (基本的に http://jaked.github.com/ocamljs/ 以外のことは書いてないです。)。 JavaScriptは歴史的経緯とその簡潔さからwebブラウザで使われているが,静的型付けでないので信頼性の面でいまいち不安だったり、言語の使いやすさの面でもパターンマッチの構文が無いとか、まともなモジュールシステムがないとかで良くない。 ocamljsを使えば、比較的安全・簡潔に大規模かつ動的なwebページを構成できるかもしれない。 ocamljsは残念ながらまだ成熟しているとはいえないが、実は既にすごく高機能だ。 現バージョンで既に DOM や jQuery を OCaml から操作できるし、いざとなれば JavaScri
追記:「東京Node学園#1「非同期プログラミングの改善」のエッセンス」というスライドで、似たようなテクニックが使われているのを見た(p.32-)。 そんなにスジは悪くないのかもしれない。 JavaScriptでは非同期的に関数を呼ぶことが多い。例えばimgタグのロードが終わったら次にAを処理して、それが終わったらBをして…など。 こういうときCPS形式でプログラムを書くはめになる。 func1(arg1, function(res1){ func2(arg2, function(arg3, res2){..})}) かようにJavaScriptでは関数リテラルがすこぶる扱いづらい -- 'function' とか 'return' とか {} のネストとか…あとカリー化するにも一苦労 -- JavaScriptプログラマはどう書くんだろう? こういう非同期呼び出しをうまく同期的に記述する
Language.CはHaskell用の、C言語のソースコードを構文解析するライブラリである。 Language.CはパーザとともにC言語の構文木に相当するデータ型を提供しており、C言語のソースコードをHaskellのデータとして操作可能である。このため、Language.CはC言語のコードを色々と解析・変換するのに便利である。さらに意味解析に役立ついくつかの補助関数も定義されている。 組込みソフトウェアに関する研究で必要になったため、Language.C を用いてC言語のソースコードを変換する簡単なプログラムを書いた。 動機 JHC (Haskellのコンパイラ;ISO C互換のコードを吐く)は Haskellのソースから C99のコードを生成する ツール(ARMバイナリを生成するコンパイラ)の制約でgcc 2.95(19991024)しか手元にない。 gcc 2.95はC89しか受け付
CIL (C Intermediate Language) CIL is a front-end for the C programming language that facilitates program analysis and transformation. CIL will parse and typecheck a program, and compile it into a simplified subset of C. For example, in CIL all looping constructs are given a single form and expressions have no side-effects. This reduces the number of cases that must be considered when manipula
速さが足りない!!!!! そんな時はプロファイリングの時間ですね。 Rubyには標準添付ライブラリとして profile というプロファイラがついてくる。でもこのライブラリはあまりに遅すぎて実用に耐えないから、多分誰も使っていない。ほとんどのRubyistは ruby-prof を使っていることだろう。 今回はこの ruby-prof を使って Ruby プログラムのプロファイリングする方法を紹介する。 計測する(ruby-prof) ruby-profはrubygemsで簡単に入る。 $ gem install ruby-profruby-profというコマンドラインツールがインストールされる。これを使うと、プログラムを変更することなく手軽にプロファイリングを行うことができる。ruby-profコマンドのusageは以下のとおり。 ruby_prof 0.9.2 Usage: ruby_
This article will get you into the little world of Meryl, which is a minimalist web framework built on nodejs. With its small sized code base, it is very simple to use, fun to play and easy to modify. Unlike other full-stack web frameworks, Meryl tries to keep some core features minimal and powerful and leave the rest for you. With about 140 lines of core code Meryl implements some basic fundament
Railsでは、 config/application.rb で config.autoload_paths << Rails.root.join("lib") と書いておくと、例えば $ cat lib/my_library.rb class MyLibrary : endみたいなファイルが置いてあれば、Railsアプリ内で MyLibrary クラスを特にrequireしなくても使える。これは ActiveSupport::Dependencies というクラスが const_missing をフックして、 autoload_paths にあるディレクトリの中から適切なファイルを自動requireしてくれるから。 これは大変便利なので、Railsじゃないアプリから使いたい。 やりかた require 'active_support/dependencies' ActiveSupport
Valgrind(ヴァルグリンド、[ˈvælɡrɪnd])は、メモリデバッグや、メモリリークの検出、スレッドエラーの検出、プロファイリングなどを行うための仮想機械を利用したソフトウェア開発ツールである。Valgrindという名前は、北欧神話におけるヴァルハラへの入り口の名に由来している[2]。 Valgrindは元々x86上のLinux用のメモリデバッグツールとして設計されたが、開発が進んだ結果、バグ検出やプロファイラといった動的解析ツールのための汎用のフレームワークとなっている。Valgrindは多数のLinux関連のプロジェクトで使用されている[3]。 Valgrindは、本質的にはJITコンパイラ(バイナリ変換)の技術を用いた仮想機械である。クライアントプログラム(元々のプログラムの意、以下同様)そのものがホストのプロセッサで直接実行されるわけではない。代わりにVEXと呼ぶライブラリ
Linux 上で開発をしている人なら知らない人はない(たぶん)と思われるメモリデバッグツールの Valgrind。これを使えば、メモリリークや解放済みメモリアクセスなど、メモリに関するバグつぶしの効率は飛躍的に改善します。 これがありゃー、Purify いらねーじゃん、って感じ。私は普段 Linux で開発しているので、使いまくりです。 さて、この Valgrind を iPhone の開発に使えないかと探していたら、すでにやってる人がいました。 iPhone: Testing your Application with Valgrind 残念ながら、実機ではデバッグできません。Valgrind は Intel CPU にばりばり依存しているので、ARM は無理なんです。だけど、iPhone Simulator なら動くという話。 手順をまとめておきます。 こちらから、Mac OS X 版
スタックトレースの取得 (callee/caller/argumentsの利用) JavaScript (in 『JavaScript 第3版』) 呼び出された関数の中では、arguments プロパティを利用できる。arguments は実引数を保持している。 以下コード例では、「a, b, c」が仮引数、「5, 1, 9」が実引数になる。 function max(a, b, c){...} max(5, 1, 9); arguments のプロパティを手繰り、呼び出し階層を求めることができる。 プロパティ関連図は以下。IE 6.0、Firefox 1.0.6で確認を行なった。 概念的には以下が成り立つ(IEでは動作もする)。 ok(arguments.caller == arguments.callee.caller.arguments); ok(arguments == argum
1つ前の記事「JavaScriptをいかに高速化するか、IE9、Firefoxの取り組み」では、IE9とFirefoxにおけるJavaScriptの高速化について紹介しましたが、そもそもJavaScriptの実行速度はなぜ遅いのでしょう? その理由について、Mozilla Japanテクニカルマーケティング担当の浅井智也氏が、スライド「Trace Monkey」でポイントをまとめています(このスライドはタイトルから分かるとおり、Firefoxの当時の新しいJavaScriptエンジン「Trace Monkey」を紹介するために1年以上前に作成されたスライドですが、1つ前の記事を見ると、ここで示された課題はいまも変わっていないようです)。 全67枚のスライドの20枚目から24枚目の5枚を以下に紹介します。 JavaScriptが遅い原因は、以下の4点にまとめられています。 インタープリタ型言
Thank you, Firebug. You made the web amazing for all! The story of Firefox and Firebug are synonymous with the rise of the web. We fought the good fight and changed how developers inspect HTML and debug JS in the browser. Firebug ushered the Web 2.0 era. Today, the work pioneered by the Firebug community through the last 12 years lives on in Firefox Developer Tools. Switch to the latest version of
2010/10/27にCanvas共有Websocketサーバーを作動させて以来、サーバーがのべ三度にわたりダウンするという問題が発生していました。原因の究明を進めていたところ、一部ダウンする状況の再現及び対処法を突き止めましたのでご報告申し上げます。なお、ダウン中にアクセスされ、Canvas共有を体験なさることが出来なかった読者の方々には深くお詫び申し上げます。これからもダウンの折には早急な原因の解明と対処に努めますので、どうか今後ともよろしくお願いいたします。 サーバーダウン時のエラー出力の内容 node.js:63 throw e; ^ Error: ECONNRESET, Connection reset by peer at Stream._readImpl (net:304:14) at IOWatcher.callback (net:454:24) at node.js:76
忙しさにかまけてここの存在をしばらく忘れてしまっていました。 ここんとこ色々なコンパイラを読んだり書いたりしているのですが、構文木の実装にもいろいろなやり方がありおもしろかったので書いときます。読んだ処理系にだいぶ偏りがありますがご了承ください。 バリアントを使う 関数型言語で言語処理系を作るならやはりバリアントでしょう。 例えばocamlならば type expression = { pexp_desc: expression_desc; pexp_loc: Location.t } and expression_desc = Pexp_ident of Longident.t | Pexp_constant of constant | Pexp_let of rec_flag * (pattern * expression) list * expression | Pexp_funct
僕は、2010年4月に起業しました。 起業した後、後輩に 「起業しようか悩んでます。」 とよく相談されるようになりました。 僕自身は、決まって「早く起業した方がいい!」と言っています。 ただし、僕も含めいろんな人が「起業すると、楽しい事ばかりじゃない!」と言ってくれると思います。 でも、実際に「何が大変か」を教えてくれる人はほぼ皆無かと思います。 (凄く言いづらいですし、言うとカッコ悪い事が答えだからです。。。) よく本とかに書いてある、苦悩の1つは「資金繰り」に関する事です。 でも僕はもっと本質的な「人間の嫉妬」や「挫折」と言うメンタル的な苦悩を書きたいと思います。 僕が感じた限りではこの自分に負ける苦悩こそが1番つらいと思います。 この「人間の嫉妬」や「挫折」に負けるときというのは、「プレッシャーに押しつぶされた」時だと思っています。 僕もつい先日までプレッシャー
GHCのコードを眺めていてmain-isというオプションがあることに気づきました。これを使うとmainとして使用する関数を変える事ができるみたいです。 試しにC言語風のmainを書いてみました。 -- Cmain.hs module Cmain() where import Main (main) import System (getArgs, getProgName) cmain :: IO () cmain = do progname <- getProgName args <- getArgs let argv = progname : args argc = length argv in argv `seq` argc `seq` main(argc, argv) 引数の第0要素にはCと同じく実行ファイル名*1を入れました。 これを使って、catプログラムを書いてみました。(見た目
科学者とあたまを書いたひとだけれども、この名前どっかで聞いた事があるなと思ったら, 昨日劇団青年座の人の講演で聞いたのだった。 「フユヒコ」という劇団青年座の公演が明日NHKで放送されるらしいです。冬彦ってのは寺田寅彦のペンネームらしい。 http://cgi4.nhk.or.jp/hensei/program/p.cgi?area=001&date=2008-12-12&ch=31&eid=9950 おもしろそうだから観てみようかな。 ところで小柴先生が同じような事を言っていたのを思い出した。このインタビューは面白い。 一流の理論家は、「自分の理論では、ここまでは使えるけれど、これから先は分からない」という適用限界をいつも意識している。ところが二流の理論家というのは、自分が名前を覚えた、あるいは、使った理論で何でもやれると思ってしまう。二流の理論家に困らされるのは、新しい実験計画が出てき
C言語にコピーGCを実装できるような気が突然したので、 家に帰って早速作ってみた。 C言語から使えるGCとしてはBohemGCが有名であるが、 あれはmark-and-sweepだったはずなので、 あんまりパフォーマンスはよくないと思われる。 (mark-and-sweepはストレージに比例する時間、 コピーGCは生きているデータに比例する時間がかかるゆえ) なお、今回の実装は原理的にはジェネレーショナルにするのもたやすいので、 潜在的パフォーマンスはもっと高いと言える。 今回の実装を説明する。 int with_gc(int (*f)(),int heap_size=1024*1024); void *gc_malloc(int size); void force_collect();with_gc() は後述。 gc_malloc() はメモリを確保する関数。 確保したメモリは参照が外
XMLHttpRequest (XHR) は、JavaScriptなどのウェブブラウザ搭載のスクリプト言語でサーバとのHTTP通信を行うための、組み込みオブジェクト(API)である。 すでに読み込んだページからさらにHTTPリクエストを発することができ、ページ遷移することなしにデータを送受信できるAjaxの基幹技術である。 XMLHttpRequestを利用したWebアプリケーションは非常に多く存在し、例として、Google マップ、Facebookなどが挙げられる。 XMLHttpRequestは、マイクロソフトがOutlook Web Access 2000のダイナミックHTMLによるウェブインターフェースに活用するため、1999年公開のInternet Explorer 5においてActiveXオブジェクトとして実装したのが始まりである[1]。その後、2001年にMozillaプロジ
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015. Learn moreSee full compatibilityReport feedback The FormData interface provides a way to construct a set of key/value pairs representing form fields and their values, which can be sent using the fetch(), XMLHttpRequest.send() or navigator.sendBeacon() methods. I
最近C++を使う時間が長いのでががーっと C++批判文章を書き上げてみる…。 (注:以下の文章において、C言語とはC/C++をさすものとお考えください) gotoは今から30年以上も前のダイクストラ先生による撲滅運動の 甲斐もあってかどうなのか、今日では良くないものの代名詞のように なっている。良くないということの主な理由はプログラムの流れが 見えにくくなる、等のようなのだが、実際のところどの程度のものかは よく分からない。C言語において、例えばループ構文を使わずにすべてを gotoでまかなおうとするとこれはほとんど自明に、確かに大変である。 例えばfor文なら、 for (A;B;C) body というものは、これを形式的に A _continue_for: if (B) goto _break_for; C goto _continue_for; _break_for:; このように変
2010年12月05日02:57 カテゴリAndroid JavaScript+HTML+CSSでAndroid開発?PhoneGapを使ってみた Tweet JavaScript+HTML+CSSでAndroid開発ができるという、PhoneGapを使ってみました。 今回はTitaniumとは違い、問題なく設定できました。 環境 今回テストした環境です。 WindowsXP Eclipse AndroidSDKの設定済み 以上の状態ではじめました。 AndroidSDKの設定については、 http://blog.livedoor.jp/shizuku_kun/archives/51455230.html を参考にしてください まずダウンロード http://www.phonegap.com/download より、zipを落とし、展開します。(今回は0.9.2でした) Eclipse上の
7 Reasons to Switch to the Dvorak Keyboard Layoutの翻訳。 ちょっと見づらいですがどうぞ。 頻出用語 QWERTY配列 みなさんご存知のキーボード配列。 Dvorak配列 ドヴォラックと読む。ワシントン大学のDvorak博士が考案した配列。 ボクのパソコンを借りている友人が言った。 「キミのキーボードなんか違うね。入力してもちんぷんかんぷんな文字が出るよ!」 ボクは微笑みながら答えた。 「何の問題もないよ。むしろキミのキーボードの配列がおかしいんだ」 ~ Dvorak最強伝説 ~ -Dvorak配列に切り替えるべき7つの理由- Dvorak配列がQWERTY配列と比べて如何に素晴らしいかレクチャーすることはとても長くなります。 友人は調子を合わせて私の話を聴いてくれました(ちなみにこれは何度かありました)が、私はDvorak配列に切り替えるべ
iPhoneアプリ、買ってますか? つい"ポチッとな"してしまう仕掛けの数々に、Appleの計算高さが見え隠れしてしまうのですが。それはさておき、不定期に発生する「期間限定セール品」、そのお知らせを効率よく知る方法はないものでしょうか? 先日、コナミの「フロッガー」を67%OFFで購入したのですが、私はたまたま情報を入手できたからいいものの、セール情報自体知らない人も多いはず。売り手 / 買い手ともに、もったいない話だと思うんですよねえ。 さて、今回も『第331回 Cocoa対応で大きく変わった「Emacs 23.1」(1)』に続き「Emacs 23.1」(Cocoa Emacs) について。筆者の「~/.emacs.el」から、Cocoa Emacsに必要 / あれば便利な設定を抜粋する形でお届けしたい。 海上忍氏が利用中の「.emacs.el」(抜粋)はこちらからダウンロードできます(
【シェアな生活】所有と消費が美しい、という時代は終わったのか?――『ブックシェアカフェ』菅谷洋一氏インタビュー(1/4) 所有と消費が美しい、という時代は終わったのか? かつて僕たちの周りにはモノが溢れかえっていた。誰もが欲しいものを手に入れ、自分自身で所有したがった。でも、それって本当に自分で所有する必要があったんだろうか。たまにしか使わないものを自分の部屋に置いておくことに意味なんてあったんだろうか。一回しか読まない本を本棚に並べる理由なんてホントのところはないんじゃないだろうか。 たまにしか着ない服、たまにしか乗らない車。それってレンタルでいいんじゃないだろうか。時代が変わり、”所有と消費”そのものの意味が再考されているような気がする。 積極的な非所有、楽しみのための”シェア” もちろん、高額なものに関しては”節約”のために『非所有』を選択する場合もある。 しかし、それだけではなく、
前回日記を書いたときから一回も練習をしていないことに気づいた。 もうすぐそこに迫ってきているというのに。 テキサスに行ったときは メダルを持ち帰ってきます、などと臆面もなく言っていたが、 今回はとてもじゃないが何も期待できない。 こんなに何もせずに勝てるわけないじゃない。 それはそれとして。 Round2のときにデュアルコアが使えてれば後一問通ったのに、と思って Round3のときに準備したテンプレートでも公開してみることにする。 Round3が終わったときには、やっぱりプログラムはオーダーだ、 とか思って東京Local大会には持っていかなかったのだが、 計算機の気まぐれで通るという綱渡りになってしまったので、 Finalにはやっぱり持っていこうと思う。 あまり大きなテンプレートはバグが入っていたら怖いから、 できれば避けたかった所なのだが致し方あるまい。 #include <iostre
マルチスレッドなプログラムを書いていると、スレッド間で共有する変数へのアクセスを正しく直列化できているか、という点が常に問題になります。どうせなら、正しく書けているかコンパイル時に確認したいよね、ということで、以下のような C++ テンプレートを書いてみました。 template <typename T> class cac_mutex_t { public: class lockref { protected: cac_mutex_t<T>* m_; public: lockref(cac_mutex_t<T>& m) : m_(&m) { pthread_mutex_lock(&m_->mutex_); } ~lockref() { pthread_mutex_unlock(&m_->mutex_); } T& operator*() { return m_->t_; } T* ope
既に mattn さんが、「Big Sky :: ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い!」で紹介してくださっています (mattn さん、アドバイス&バグ情報ありがとうございます!) が、いまさら C++ で JSON パーサを作りました。それは、以下の3点を満たすものがなかったから。 ヘッダファイル only boost 等、他の重たいライブラリに依存しない array や object が STL にマッピングされる コードは、coderepos に置いてありますので、よろしければお使いください (picojson.h)。 なお、現時点での制限事項として、 \n や \r, \uXXXX といったエスケープの処理が未実装rev. 34232 で対応しました (含サロゲートペア) 空白文字の判断基準が RFC と異なるrev. 34277 で空白と
$Id: index.html,v 1.6 2004/07/20 23:08:12 aamine Exp $ この文書は書籍『Rubyソースコード完全解説』のHTML版です。 ただし初校段階の原稿をベースにしているため、 書籍では修正されている間違いが残っている場合があります。 予め御了承ください。 2004-02-16 に全章を公開しました。 目次 まえがき 序章 第 1 部「オブジェクト」 第 1 章「Ruby言語ミニマム」 第 2 章「オブジェクト」 第 3 章「名前と名前表」 第 4 章「クラス」 第 5 章「ガーベージコレクション」 第 6 章「変数と定数」 第 7 章「セキュリティ」 第 2 部「構文解析」 第 8 章「Ruby言語の詳細」 第 9 章「速習yacc」 第 10 章「パーサ」 第 11 章「状態付きスキャナ」 第 12 章「構文木の構築」 第 3 部「評価」 第
とまぁ当初の予定より長々と書いたのですがたぶんこれで最後。インフルエンザ的な何かでディレイが生じました。 なんとなく、「基本的にはよくできてるけどそこらこちらに欠点もあるんだなー」という私の感覚が伝わってくれてたら嬉しいです。一般的に自分が多少なりと関わってるものは欠点がだんだん見えてくるって効果もあるとは思うんですが、 Chrome や社内なんかと比べてもやはり、寛容というか大雑把というか適当というか、そういう面が多分にあるように思います。 しかしまぁこれは私にとってはいいことで、それだけ初心者でもそれなりに手伝うスキがあるってことでもあるからです。そのへんは 50% のものを 80% にする方が 80% のものを 100% にするより好みだという話で、まぁ人によって違うんではないかと思います。 コードが難しいとかも私としてはむしろ楽しく感じすらする部分で、ドキュメントが無いとかもドキュ
C++が他のオブジェクト指向言語と比べて難しいのは、やはりメモリ管理をプログラマが自分でしなければいけない点だと思います。よくよく注意しないと、削除し忘れたり、同じオブジェクトを2度削除してしまうというエラーが発生します。このノートでは、オブジェクトを「値オブジェクト」と「参照オブジェクト」というカテゴリに分け、詳細設計の段階で注意すべき点を整理しておきたいと思います。 0. はじめに 私自身今までいくつかのプログラミング言語を使ってきましたが、C++ が他のオブジェクト指向言語と比べて難しいのは、やはりメモリ管理をプログラマが自分でしなければいけない点だと思います。例えば、 Person* person = new Person(); と生成したオブジェクトは、使い終わったら次のように削除しなければなりません。 delete person; 生成してすぐ削除するなら簡単なのですが、実際に
HEADS UP! This article was written for an older version of node. More up-to-date information may be available elsewhere. Part I of this series explained basic object graphs and visually described references, closures, and basic inheritance in JavaScript. Part II compared different styles for doing object-oriented programming in JavaScript. Now in Part III we'll get creative and look as Ruby's obje
WebKit のコードについて。 Google 社内のコードを見慣れてると、 WebKit のコードはまず、オープンソース的な感じというか、ありていに言うとコメントが圧倒的に少ないように感じます。特に内部についてわかってない人もわかるようなコメントを書く気は基本的に無いらしく、冗長気味なコメントを書くとむしろ削ってちょとレビューされたりします。偉い人死んだらどうするのかなー的な。 あとは関数名とかもイマイチなのが多いように思います。個人的な体験で一番印象的だったのは HTML parser 内にあった parseSpecial という関数でした。この special ってのは textarea, script, style, iframe なんかの中にあるタグが無視されるような種類のものを指していたのですが、 special って命名はアレだなぁ…と。そう思いつつ WebKit の人はみん
なんかしばらく WebKit について書いてみたいと思います。開発するために必要な基本的なこととかより、まぁなんか個人的に話として面白いと思ったことについて。 とりあえず WebKit 内のコンポーネントの構成とかから。 WebKit ってのはまぁライブラリなわけで、かつ Win/Mac/Linux などで動いてるので、「WebKit を使って書いたら portable なコード一個管理したら OK」的な感じなのかなーと思うんですが、その実 WebKit API は環境ごとに少しずつ違う物体だったりします。 例えば Windows だったら COM を使ったり Mac だったら ObjC だったり gtk とか kde もそれぞれのシグナル配送モデルを使って色々やったりとか。 portable なライブラリっていうと portable に書けない部分は最小限のライブラリを環境ごとに実装して
なんか TCC だの WebKit だのを触っていると、ツリー構造を何度もなめてて同じコードを何度も通る感じになって、デバッガの breakpoint がイマイチ機能しない時があります。そういう時は printf を仕込んだり条件付き break を使ったりとかするわけですが、まぁそういうもののオルタナティブとして tracer を書いてみました。 http://github.com/shinh/fugatrace Mach-O と ELF 両方で動かにゃならんので適当に Ruby で GDB を使ういい加減な作りになっています。名前は hogetrace リスペクトで。 出力としてはこんな感じ。 http://shinh.skr.jp/dat_dir/trace.html.gz 重要なオプションは -g と -b と -R で、 -g は gdb の rbreak を使って正規表現で b
先日、 プログラムの動作をトレースするツールとして ftrace を公開しました。 その後 KLab では引き続き機能拡張を行っており、関数に渡された引数を表示 するような改良を行いました。引数が解ると自作した関数の意図しない動作を 追うときにとても便利そうです。 以下からダウンロードしておためしください ftrace-0.92.tar.gz 注意点 x86(32bit) な環境でしか動作しません デバッグ対象のプログラムは -g と -finstrument-functions フラグを付けてコンパイルされている必要があります。 依存するライブラリは glib1.2, libelf, libdwarf です debian sarge の方は $ apt-get install libglib1.2-dev libelfg0-dev libdwarf-dev を実行すると ./config
C言語で書かれたソースコードを読んでいるとき、関数ポインタから呼び出されている機能の実体がどこに書かれているのかを探すのに苦しんだ経験はありませんか? 私はあります、いっぱいあります!! そんなときはどうするかというと・・・ 手順1: まずは気分転換をする! 手順2: そして気合いを入れ直す! 手順3: さらに気力で読み砕く! 手順4: 最後に根性で発見する! これが、ごく一般的な作業手順(?)かと思います・・・(ごめんなさい嘘です) でもまあ、実際にここまで出来れば、そのプログラムの大まかな構成とか癖みたいなものはだいたい把握できているはずなので、他の関数ポインタについてもある程度当たりをつけて見つけだすことが出来るようにはなるかと思います。 ・・・・・が、、できれば気合いと根性を使わずに追えるなら追いたいのが人情ですよね。 straceやltraceを使えばシステムコールやライブラリコ
でかいソフトウェアの、大量のソースコードを短時間で読む必要が生じたので、その補助ツールとしてptrace(2)ベースのLinux用関数トレーサを自作しました。こういうツール上でまずソフトウェアを実行してみて、どのファイルのどの関数がどういう順で呼ばれるか把握おけば、いきなりソースコードの山と格闘を始めるより楽かなーと思いまして。せっかく作ったので公開します。 http://binary.nahi.to/hogetrace/ straceはシステムコールだけ、ltraceは共有ライブラリ(DSO)の関数呼び出しだけ*1をトレースしますが、このツールは、実行バイナリ中の自作関数の呼び出しもトレースします。例えば再帰で1から10まで足し算するソースコードを用意して % cat recursion.c #include <stdio.h> int sum(int n) { return n ==
こんにちわ。Perl はあまり得意ではありませんが Vim はある程度使いこなせる、Zimbu兄さんこと mattn です。口癖は「カッコつけんなよ」です。 さて、最近の Vim 界は Unite というプラグインが流行り出しています。 Unite がどんな物かについての説明文は、手前味噌ですが私のサイトをご覧頂けるとなんとなく分かるかと思います。「unite.vim」でググると幾らかヒットするかと思います。本来は何かしらを選択させるUIライブラリの一種となります。 さて、今日はこの unite.vim と Perl を使って音楽プレーヤを作ります。 音楽プレーヤと言っても音楽ファイルのフォーマットやらなんやらを Perl でやるという訳ではありません。 メディアプレーヤの「rhythmbox」を使います。他のメディアプレーヤでも良かったのですが DBusというインタフェースにより外部から
最近のVim界隈では、バッファセレクタの新しい形の一つであるUniteが注目を浴び始めています。 Shougo's unite.vim at master - GitHub unite all sources https://github.com/Shougo/unite.vim Uniteはバッファセレクタという単純な概念に縛られた物ではなく、候補選択を行うユーザインタフェースとして提供されるライブラリ的な代物です。 Uniteにはバッファやファイル、MRU(Most Recently Used)等、通常候補選択しそうな物がUnite sourceとして既に含まれていますが、プラグインを書く事で自分で定義した候補選択がUI付きで実現出来る事になります。 Uniteはまだ発展途上ではありますが、今日はどれだけ少ないコードでUnite UIが使える様になるかを皆さんに伝えるべくUniteプラ
The Barracuda CSP tag language This article will show you how to use the server side tag language integrated into the Barracuda Embedded Web-Server. It is suggested that you read the introduction to Barracuda prior to reading this article. Server side scripting, a method used in web-servers to dynamically create HTML, is typically used in embedded devices as a way to dynamically create a user inte
普通のやつらの下を行け: Cで動的コード生成・実行 スクリプト言語には動的にコードを生成して実行する機能を持ったものが多くあります。 普通のやつらの下を行けの第3回として、今回は C による動的なコード生成と実行に取り組んでみたいと思います。 今回書いたコードの main() 関数は以下のようなものです。 int main(int argc, char **argv) { assert(argc == 2); define(int, add, (int x, int y), "{ return x + y; }"); define(int, mul, (int x, int y), "{ return x * y; }"); define(int, add_argv1, (int x), "{ return x + %d; }", atoi(argv[1])); printf("%d\n"
普通のやつらの下を行け: assert_caller() 以前に、低レベルプログラミングを愛好する知人が「普通のやつらの下を行け」を口癖にしていました。当時は何を言っているのかと聞き流していましたが、自分も最近になってようやく低レベルプログラミングのおもしろさがわかってきました。今回は「普通のやつらの下を行け」企画の第一弾として assert_caller() なるものを作ってみたいと思います。 assert_caller() とは assert_caller() とは、特定の関数からの関数呼び出しだけを通すためのアサーションです。たとえば、次のように foo() の先頭で assert_caller(main) と書いた場合、 foo() は main() からしか呼び出せなくなります。他の関数から foo() を呼び出した場合はエラーメッセージとともに異常終了します。 void foo
$Id: readingcode.html,v 1.13 2003/12/06 00:01:08 aamine Exp $ 2006-05-02 gonzui 追加。thanks: 冨山さん 2003-12-03 ltrace と sotrace を追加 2003-12-03 ツールのところに DDD を追加。thanks: 和田さん 2003-05-27 VCG, SXT などについて追加。thanks: 梅沢さん 2003-05-27 これもすっかり忘れていた strace, ktrace, truss, etags などについて追加 2002-08-30 すっかり忘れていた ctags を追加 2002-07-07 匿名希望さんからメールでいただいた情報を追加 (動的コールグラフ) 2002-06-13 日記経由でいただいた意見をもとに文章を追加。thanks: 柳川さん、まつもとさ
本をそのまま送ると裁断機でバラバラにした後、スキャンしてPDFデータなどに変換してくれるという、電子書籍時代が始まっているにもかかわらず既存の出版社がノロノロしているその間隙を縫うかのようなタイミングで出現したサービス、それが「BOOKSCAN」です。その舞台裏がどうなっているのかを実際に行って取材してきました。 結論から言うと、2010年4月の設立から約7ヶ月が経過、その間に新規参入業者が山ほど出現しましたが、「BOOKSCAN」はさらなる劇的な進化を遂げて差別化に成功しており、最初の頃からは考えられないレベルに到達していました。正直、わずか7ヶ月でここまでできるのだという意味では、まるで海外のスタートアップ企業のようなスピード感と、アイディアを形にする確かな技術力を感じます。 戦慄すべきその恐るべき舞台裏の中身は以下から。BOOKSCAN(ブックスキャン) 低価格・書籍スキャンサービス
リアルアクセス解析を運営している、前職の先輩でもある小川卓さんが、 このたび「ウェブ分析論」という、Google Analyticsなどをメインとした、 アクセス解析に関する本を出されたのでインタビューに行ってきました。 インタビューの趣旨としては、 「複雑な設定が必要ない、知らないと損しそうなGoogle Analyticsの使い方を教えてください!」 と、Twitterで相談し、実際にインタビューさせていただきました。 僕も結構Google Analyticsを使いこなせてるつもりだったのですが、 かなり勉強になったので、共有します! 今回は主に、「サイト内検索機能」を使った活用方法がメインとなります。 ◆今回教えてもらった、知らないと損しそうなGoogle Analyticsを完全に使い倒す方法 1・ サイト内検索設定をしよう! 2・ サイト内検索ワードをアナリ
今年の頭に一部で話題になったZen Coding、多くの方がブログに解説を書いて下さっているので目にした方も多いかもしれません。そのZen Codingの世界初となる解説本「HTML+CSSコーディングが10倍速くなる Zen Coding」が本日11月26日に発売されました。 今回は共著者として、「Dreamweaver Town Meeting in Tokyo」で同じくZen Codingを取り上げたYahoo! JAPANの岡部さんに協力いただきました。 本書は、Zen Codingを知らないWeb制作に携わってる方はもちろん、もう少し敷居を低くというか、業務上ちょっとしたHTMLを書かなくてはならないWebディレクターの皆さん、オンラインストアや企業のブログの更新担当の皆さんにも、いろいろなエディタに対応し始めているZen Codingを使っていただきたく比較的やさしめな内容にな
Suicaの開発プロセスについて触れておきたいと思います。すでにいろいろなところでしゃべったり書いたりしたことなので、ここでは裏話的に。 ことの発端は、1995年にJR東日本の非接触自動改札機(まだSuicaという名前はなかった)の開発担当者が、私のところに相談に来た所から始まります。ICカードを使う改札機については、すでに10年以上研究されており、技術的にはほぼ現在と同じレベルに近付きつつありました。 しかし、実際に試作してテストしてみると、ちゃんと通れない人が半数近くに登りました。特に実験に参加した重役達の評判は悪く、「私のは5回に一回しか通してくれない。2割バッターだ」などと、開発部長が会議の席で罵倒される場面もあったりして、開発中止直前に追い込まれていたそうです。 原因はある程度分かっていました。お財布ケータイやセキュリティカードに慣れた現代の皆さんなら、カードを当てる場所はすぐに
MUJIブランドから、iPad向けのアプリNOTEBOOKが発売になりました。無印良品のソフトウェア、しかもApple向けというだけでも十分ニュースなのですが、私にとってはさらにうれしい事件でした。この開発チームが知った顔ばかりなのです。 開発主体となった、Takram Design Engineering の創設者、田川欣哉@_tagawa君は、学生の頃から私のオフィスで働いれくれた元スタッフです。特に2001年以降の数年間は、私のオフィス兼自宅に住み込んで文字通り24時間片腕となってくれました。 その彼が、サン・マイクロシステムズからGoogleを経てtakramにやって来た川原英也@hideyaさんとともに、このプロジェクトのために集めた面々は、以下の通り。 CyclopsやTagtypeキーボードを私と一緒に製作したソフトウェアエンジニアの本間淳@2SC1815J 君 。On th
日本の Kindle ユーザが待ち望んだことの一つが本日(1/25)実現されました。それは Kindle で日本のマンガを買って読むこと。日本のマンガが作品が買える上に、その著者が「大東京トイボックス」のうめ先生とあっては、もうたまらない。僕はソッコーでポチってしまいました。 おそらく日本初の Kindle マンガ 昨日までうめ先生(@ume_nanminchamp)は Twitter 上で自身の作品の電子書籍化に取り組んでいる旨を公表されていましたが、本日無事に Amazon の承認がおりたようで、Kindle Store から購入可能になっています。その作品がこちら、「青空ファインダーロック」(AOZORA Finder Rock (Kindle Edition))です。 AOZORA Finder Rock (Kindle Edition) もともとは日経エンターテインメントに掲載さ
こんにちは。プログラマ定年を迎えたのであとは悠々自適に日々過ごそうと思ってるはせがわです。 JavaScriptで記号プログラミングを行う基本的な取り組を説明します。 jjencodeなどで使っているテクニックです。 まず最初は数字の作り方。 +[] // 空の配列にプラス演算子で数値の 0 ~[] // 空の配列にビット反転で -1 ~{} // 空のオブジェクトにビット反転で -1 -~[] // 空の配列にビット反転で-1、-1に単項マイナスで +1 -~-~[] // +1 にビット反転で -2、-2 に単項マイナスで +2 このように、空の配列や空のオブジェクトに数値用の演算子を適用することで、任意の数値を記号だけで生成することができます。 次に文字の作り方。 ![] // 空の配列に論理否定で false !![] // 空の配列に論理否定を2回で true (![]+"")
New in version 2.2. Redisでは、実際にクライアントと通信をするポート以外に、サービス用チャンネルを開いてすべてのノードはこのチャンネルを使って直接接続しあいます。TCPのベースのポート+4000番が使われるため、クライアント向けに6379番のポートを使用している場合には、10379番を使用します。ノード間の通信には、バンド幅と速度に最適化されたバイナリプロトコルを使用します。クライアントとの通信では通常はアスキープロトコルを使用しますが、いくつか変更があります。ノード同士は、クエリーをプロキシー(転送)することはありません。 ノード間の通信内容¶ 各ノードは、PING/PONGと同時に、自分が通信した上で判断した周辺ノード情報(Gossip/うわさ話)も一緒に送信します。
HEADS UP! This article was written for an older version of node. More up-to-date information may be available elsewhere. This is the 7th in a series of posts leading up to Node.js Knockout on how to use node.js. This post, cross-posted from GitHub, was written by James Bracy, founder of Redis To Go. Redis To Go is a dead simple solution for managed Redis instances. Node.js is a perfect platform fo
Seq is a node.js library for chainable, asynchronous flow control. With Seq, you can turn complicated nested callback logic into a cleaner and more straightforward pipeline-style. Even the error handling is chainable! Plus, you can do fancy things like set limits on the number of parallel tasks executing at once. Here's a simple example of Seq that executes some shell commands and reads files. //
Vincent Driessenさんの "A successful Git branching model" を翻訳しました。 元記事はこちら: http://nvie.com/posts/a-successful-git-branching-model/ (翻訳の公開と画像の利用は本人より許諾済みです) このブランチモデルの導入を補助してくれる、git-flowというGit用プラグインがあるそうです。 翻訳の間違い等があれば遠慮なくご指摘ください。 A successful Git branching model この記事では、私のいくつかのプロジェクト(仕事でもプライベートでも)で約一年ほど導入して、とてもうまくいくことがわかった開発モデルを紹介する。しばらく前からこれについて書くつもりだったんだが、今まですっかりその時間を見つけられずにいた。ここでは私のプロジェクトの詳細については書
Tokyo 2.0 Tokyo2.0 Special — Tokyo Biggest Tech Party Ever 2010 Events + Tokyo2.0 Vol. 34 — MoMo 6th Anniversary Events + Tokyo2.0 Special — Geeks On A Plane 2010 Events + Tokyo2.0 Vol. 33 — Human Machine Interaction Events + Tokyo2.0 Vol. 32 — Tokyo Next Mobile App Star Events + Tokyo2.0 Vol. 31 — Mobile Web Convergence Events + Tokyo2.0 Special — Tokyo Biggest Tech Party Ever Events + Tokyo2.0 V
C++0xになると、C++03でごちゃごちゃした部分がだいぶ すっきり書けるようになるので、C++0xでの入門はこんな感じになるよー、 という気持ちで書きました。 1. Hello World C++0xでの入出力には、IOStreamというものを使用します。 <<演算子でどんどんつないでいきます。 以下のプログラムの読み方は 「標準出力(cout)に"Hello World"という文字列と、改行(endl)を出力する」 です。 #include <iostream> int main() { std::cout << "Hello World" << std::endl; return 0; } Hello World coutとendlを使用するには、 #include <iostream> のように、という標準ライブラリのファイルを読み込む必要があります。 2. コメント 行コメント
参考: http://d.hatena.ne.jp/faith_and_brave/20100201/1264997004 「C++0xになると、C++03 でごちゃごちゃした部分がだいぶすっきり書けるようになる」 らしいですが、C++0xを待たなくてもBoostを使えばだいぶすっきり書けるので、 BoostでのC++入門はこんな感じだよー、という気持ちで以下略。 この記事はC言語をある程度理解していることが前提です。 1. Hello World C++/Boostでの出力はC++標準の IOStream ライブラリと Boost.Format を組み合わせて行います。 例として、C言語のprintfを用いた Hello World を、C++/Boostを使って書き直してみます。 #include <stdio.h> int main() { printf( "%s\n", "Hell
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く