ただいま整理中。
Blogspot (Blogger?) に移行しました!
タイムライン | 技術系 | TIPS | ライフハック系 | その他 | 左記カテゴリ以外は、右の欄の下のタグクラウドへ!
.

2010年08月13日

VBAのドキュメントの目次一覧

※[ブックマーク]ボタンの中に delicious, reddit, digg, Google+(G+) のボタンもあります。
Microsoftのヘルプ機能は、OSのそれにしろOfficeアプリケーションのそれにし
ろ、まったくひどいしろものだ。なにしろ、知りたい検索しても当該ページがで
てこない。
また、このヘルプ・ドキュメントそのものについても、同じ類のことがいえる:
一覧性が非常にひくいのだ──5万数万もの高い金を取りながら、電子マニュア
ルしか存在しないためだ。

最近、立て続けにそんな経験をしたので、ここにExcel2003 のVisual Basic Editor
のヘルプの目次をテキスト形式で一覧にし、示すこととする。これにより、マニュアル全体
を俯瞰することができ、Googleによってインデックス化されれば、検索性も増すであろう。

対象は、Excel2003のVisual Basic Editorのヘルプメニューを開いたときに出て
来るドキュメントだ。これらは開いたときの順番の通りに、項目を挙げている。
本来的には、順番で読むのに適さないが、資料としてこのままとする。

凡例
このテキストでは、■-□-◆の順に、ドキュメントの階層を表す。■がトップレ
ベルだ。
◆A-Zは、必ずしも、AからZまでの項目があるわけではない;実際には歯抜けと
なる項目が存在する。
(?)は、?アイコンを示す。
項目右端の★は、読むべき注目を表す。基礎的な概念について述べている項目に
付した。というのも、資料は必ずしも理解に適した順番で配列されているわけで
はないのだ。階層構造についても、同じことが言える。機会があれば、VBA版
『プログラミング言語C』を書いてみたい。


Visual Basic Editor のヘルプの目次一覧


■Microsoft Excel Visual Basic リファレンス
 □(?)Microsoft Office Excel オブジェクト モデル
 □新機能

  ◆(?)新しいオブジェクト
  ◆(?)新しいプロパティ(アルファベット順)
  ◆(?)新しいプロパティ(オブジェクト順)
  ◆(?)新しいメソッド(アルファベット順)
  ◆(?)新しいメソッド(オブジェクト順)
  ◆(?)新しいイベント
 □プログラミングの概念・・・★
  ◆ブックとワークシート
  ◆セルとセル範囲
  ◆コントロール、ダイアログ、ボックス、フォーム
  ◆イベント、ワークシート関数、図形
  ◆他のアプリケーションを使って作業する
 □コレクション
  ◆A-Z
 □オブジェクト
  ◆A-Z
 □メソッド
  ◆A-Z
 □プロパティ
  ◆A-Z
 □イベント
  ◆A-Z
 □列挙
  ◆(?)Microsoft Office Excel の定数


■Microsoft Visual Basic Documentation
 □Visual Basic ユーザー インターフェース
  ◆コマンド
  ◆キー
  ◆メニュー
  ◆その他
  ◆ショートカット
  ◆タブおよびダイアログ ボックス
  ◆ツールバー
  ◆ウィンドウ
 □Visual Basic プログラミングのヒント
  ◆(?)名前の二重定義の回避
  ◆(?)同じ名前のプロシージャの呼び出し
  ◆(?)Property プロシージャの呼び出し・・・★
  ◆(?)Sub プロシージャと Function プロシージャの呼び出し・・・★
  ◆(?)オブジェクト変数の作成・・・★
  ◆(?)再帰プロシージャの作成・・・★
  ◆(?)配列の宣言・・・★
  ◆(?)定数の宣言・・・★
  ◆(?)変数の宣言・・・★
  ◆(?)プロパティ設定時のコードの実行
  ◆(?)コードのループ
  ◆(?)For...Next ループの高速化
  ◆(?)引数の効率的な引き渡し
  ◆(?)関数からの文字列の取得
  ◆(?)オートメーションの概要
  ◆(?)条件付きコンパイルの概要
  ◆(?)名前付き引数と省略可能な引数の概要
  ◆(?)オブジェクト、プロパティ、メソッド、およびイベントの概要・・・★
  ◆(?)パラメータ配列の概要・・・★
  ◆(?)適用範囲と参照可能範囲の概要・・・★
  ◆(?)変数の有効期間の概要・・・★
  ◆(?)バリアント型 (Variant)の概要・・・★
  ◆(?)Visual Basic の構文の概要・・・★
  ◆(?)配列の使い方・・・★
  ◆(?)定数の使い方・・・★
  ◆(?)データ型の効率的な使い方
  ◆(?)Do...Loop ステートメントの使い方・・・★
  ◆(?)For Each...Next ステートメントの使い方・・・★
  ◆(?)For...Next ステートメントの使い方・・・★
  ◆(?)If...Then...Else ステートメントの使い方・・・★
  ◆(?)コードでのかっこの使い方
  ◆(?)Select Case ステートメントの使い方・・・★
  ◆(?)With ステートメントの使い方・・・★
  ◆(?)Visual Basic の名前付け規則・・・★
  ◆(?)アプリケーション間の連携
  ◆(?)Function プロシージャの記述方法・・・★
  ◆(?)Property プロシージャの記述方法・・・★
  ◆(?)Sub プロシージャの記述方法・・・★
  ◆(?)代入ステートメントの記述方法・・・★
  ◆(?)ファイルへのデータの書き込み・・・★
  ◆(?)宣言ステートメントの記述方法・・・★
  ◆(?)実行可能なステートメントの記述方法
  ◆(?)Visual Basic ステートメントの作成
 □Visual Basic 開発環境
  ◆(?)オブジェクト ライブラリの確認および参照設定の追加
  ◆(?)実行の継続
  ◆(?)ヘルプから使用例をコピーするには
  ◆(?)プロシージャの作成
  ◆(?)コードへの宣言の入力
  ◆(?)特定のステートメントの実行
  ◆(?)プロシージャの検索・・・★
  ◆(?)変数の定義の検索・・・★
  ◆(?)コード内の文字列の置換・・・★
  ◆(?)実行の再開・・・★
  ◆(?)コード内の文字列の検索・・・★
  ◆(?)タイプ ライブラリへの参照設定
  ◆(?)ブレークポイントの設定と解除
  ◆(?)プロジェクト プロパティの設定
  ◆(?)テキスト ファイルのコードへのインポート・・・★
  ◆(?)Visual Basic 環境オプションの設定
  ◆(?)コード ウィンドウの分割
  ◆(?)コード実行の開始・・・★
  ◆(?)コード実行の停止・・・★
  ◆(?)コード実行のトレース・・・★
  ◆(?)構文チェックの設定と解除の切り替え・・・★
  ◆(?)イミディエイト ウィンドウの使用
  ◆(?)オブジェクト ブラウザの使用・・・★
  ◆(?)プロジェクト エクスプローラの使用・・・★
  ◆(?)プロパティ ウィンドウの使用
 □Visual Basic ランゲージ リファレンス
  ◆定数
  ◆データ型
  ◆ディレクティブ
  ◆イベント
  ◆関数
  ◆グループ
  ◆インデックス/一覧
  ◆キーワード
  ◆メソッド
  ◆その他
  ◆オブジェクト
  ◆演算子
  ◆プロパティ
  ◆ステートメント
 □Visual Basic アドイン モデル
  ◆コレクション
  ◆イベント
  ◆メソッド
  ◆オブジェクト
  ◆プロパティ
 □Microsoft Forms リファレンス
  ◆(?)Microsoft Forms オブジェクト モデルの全体像
  ◆Microsoft Forms デザイン リファレンス
  ◆Microsoft Forms 開発者へのヒント
  ◆Microsoft Forms オブジェクト リファレンス


■Microsoft Office Visual Basic リファレンス
 □(?)Microsoft Office オブジェクト モデル
 □新機能
  ◆(?)新しいオブジェクト
  ◆(?)新しいプロパティ (アルファベット順)
  ◆(?)新しいプロパティ (オブジェクト順)
  ◆(?)新しいオブジェクト (アルファベット順)
  ◆(?)新しいオブジェクト (オブジェクト順)
 □プログラミングの概念
  ◆(?)Microsoft Office ソリューション開発者向けのセキュリティ情報
  ◆Office コマンド バーを使用する
  ◆Office アシスタントを使用する
  ◆(?)コレクションからオブジェクトを取得する
  ◆(?)OLE プログラム ID
  ◆(?)MSDN で MODI VBA のリファレンスを検索する
 □コレクション
  ◆A-Z
 □オブジェクト
  ◆A-Z
 □メソッド
  ◆A-Z
 □プロパティ
  ◆A-Z
 □イベント
  ◆A-Z
 □列挙
  ◆(?)Microsoft Office の定数



References
Microsoft Excel 2003; "Visual Basic のヘルプ"; Microsoft, メニュー>ヘルプ(H)
…… 続きを読む -->
posted by もふもふ at 23:59 | ロンドン ☀ | Comment(0) | TrackBack(0) | カテゴリ: 仕様・規格 | このブログの読者になる | 更新情報をチェックする

2010年05月10日

InfoViz APIドキュメンテーション(目次)

※[ブックマーク]ボタンの中に delicious, reddit, digg, Google+(G+) のボタンもあります。
API ドキュメンテーション
o Input JSON データの入力
o HyperTree
o RGraph
o SpaceTree

クイック・チュートリアル
o RGraph
o HyperTree
o SpaceTree
o TreeMap


API ドキュメンテーション全文
JSON をロードする
  Loader.js
 
Canvas クラス
  Canvas.js
 
可視化(Visualizations)
  Spacetree.js
  Treemap.js
  Hypertree.js
  RGraph.js
 
Graph クラス
  Graph.js
  Graph.Op.js
  Graph.Plot.js
 
Point (2D) クラス
  Complex.js
  Polar.js
 
アニメーション(Animations)
  Animation.js
 
その他(Other)
  AngularWidth.js
 
索引(Index)
  すべて(Everything)
  クラス群(Classes)
  関数群(Functions)
  ファイル群(Files)
posted by もふもふ at 13:52 | ロンドン ☀ | Comment(0) | TrackBack(0) | カテゴリ: 仕様・規格 | このブログの読者になる | 更新情報をチェックする

2010年04月14日

JavaScriptによるデータ可視化ライブラリ:InfoVis の概要訳

※[ブックマーク]ボタンの中に delicious, reddit, digg, Google+(G+) のボタンもあります。
InfoVisは、JavaScriptで記述されたデータ可視化ライブラリである。この種のライブラリは、Javaであれば、例えば、JUNG(http://jung.sourceforge.net/)などが存在する。

InfoVisにおいて、可視化対象のデータは、JSON形式のものを扱う。このため、このライブラリにはJSONを扱うためのAPIを含む(TreeUtil)。可視化関連のものは、Core.jsにて提供される。


InfoVisの概要が示されたページについて、日本語訳をおこなったのでここに示す。

url:
http://thejit.org/

download:
http://thejit.org/downloads/Jit-1.1.3.zip

license:
BSD(http://thejit.org/docs/files/Core-js.html)

概要:
http://thejit.org/docs/files/Core-js.html


●Core
Core.js

説明(Description)
JSONツリー構造を操作する共通ユーティリティ関数と、ライブラリとして、内部で使
用されているクラス・オブジェクトを提供する。
また、JSONツリー構造を操作する TreeUtil オブジェクトを、提供する。

作者(Author)
ニコラス・ガルシア・ベルモンテ(Nicolas Garcia Belmonte)

コピーライト(Copyright)
Copyright 2008-2009 by Nicolas Garcia Belmonte

ホームページ(Homepage)
http://thejit.org

バージョン(Version)
1.1.3

ライセンス(License)
BSD License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
     * Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.
     * Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.
     * Neither the name of the organization nor the
       names of its contributors may be used to endorse or promote products
       derived from this software without specific prior written permission.

 THIS SOFTWARE IS PROVIDED BY Nicolas Garcia Belmonte ``AS IS'' AND ANY
 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 DISCLAIMED. IN NO EVENT SHALL Nicolas Garcia Belmonte BE LIABLE FOR ANY
 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


サマリ(Summary)

Core.js        共通ユーティリティ関数とライブラリ内部で使用されるクラス・
                   オブジェクトを提供

TreeUtil    共通JSONツリー操作メソッドをいくつか
Functions
  prune        ツリー上でmaxLevelより大きな深さを持つノードを、クリアする
  getParent    idの識別子を持つノードの、親ノードを、返す
  getSubtree    指定したidにマッチするサブツリーを、返す
  getLeaves    ツリーの葉を、返す
  eachLevel    ツリー上の相対的に指定した深さ以下の深さのノードを、イテレートする
  each        ツリーのイテレータ
  loadSubtrees    requestメソッドによって新たにリクエストされたサブツリーを、葉に追加する
 
 
TreeUtil
共通JSONツリー操作メソッド。

サマリ(Summary)
Functions
  prune        ツリー上でmaxLevelより大きな深さを持つノードを、クリアする
  getParent    idの識別子を持つノードの、親ノードを、返す
  getSubtree    指定したidにマッチするサブツリーを、返す
  getLeaves    ツリーの葉を、返す
  eachLevel    ツリー上の相対的に指定した深さ以下の深さのノードを、イテレートする
  each        ツリーのイテレータ
  loadSubtrees    requestメソッドによって新たにリクエストされたサブツリーを、葉に追加する
 
posted by もふもふ at 22:57 | ロンドン ☁ | Comment(0) | TrackBack(0) | カテゴリ: 仕様・規格 | このブログの読者になる | 更新情報をチェックする

2008年05月19日

VMG: ケータイのメール保存形式

※[ブックマーク]ボタンの中に delicious, reddit, digg, Google+(G+) のボタンもあります。
読めるフリーソフトって、結構あるのね。OK

これで後顧の憂いは絶てる。
posted by もふもふ at 00:33 | ロンドン ☁ | Comment(0) | TrackBack(0) | カテゴリ: 仕様・規格 | このブログの読者になる | 更新情報をチェックする

2008年04月14日

g++: GNU C++ ライブラリ パートV チャプター 13. 文字列クラスString Classes
カテゴリ: 仕様・規格 | タグ: g++ String MFC CString

※[ブックマーク]ボタンの中に delicious, reddit, digg, Google+(G+) のボタンもあります。
チャプター 13. 文字列クラスString Classes

Table of Contents

シンプルな変換Simple Transformations
ケース・センシティビティCase Sensivitity
任意の文字型Arbitrary Character Types
トークン化するTokenizing
縮めてフィットShrink to Fit
CString (MFC)

シンプルな変換Simple Transformations

Here are Standard, simple, and portable ways to perform common transformations on a string instance, such as "convert to all upper case." The word transformations is especially apt, because the standard template function transform<> is used.
ここに string のインスタンスにおける、標準的でシンプルで、かつポータブルな共通の変換を実施するための方法を、示します。たとえば、「すべて大文字に変換する」といったものです。 単語の変換は、とくに適してます。なぜなら、標準テンプレート関数 transform<> が、使用されるからです。

This code will go through some iterations. Here's a simiple version:
これは、イテレーションをいくつか使用したコードです。シンプルなバージョンです:

   #include <string>
   #include <algorithm>
   #include <cctype>      // 古い <ctype.h>

   struct ToLower
   {
     char operator() (char c) const  { return std::tolower(c); }
   };

   struct ToUpper
   {
     char operator() (char c) const  { return std::toupper(c); }
   };

   int main()
   {
     std::string  s ("Some Kind Of Initial Input Goes Here");

     // すべてを大文字に変える
     std::transform (s.begin(), s.end(), s.begin(), ToUpper());

     // すべてを小文字に変える
     std::transform (s.begin(), s.end(), s.begin(), ToLower());

     // すべてを大文字に変えるが、変換結果を
     // 別の文字列変数に格納
     std::string  capital_s;
     capital_s.resize(s.size());
     std::transform (s.begin(), s.end(), capital_s.begin(), ToUpper());
   }
   

Note that these calls all involve the global C locale through the use of the C functions toupper/tolower. This is absolutely guaranteed to work -- but only if the string contains only characters from the basic source character set, and there are only 96 of those. Which means that not even all English text can be represented (certain British spellings, proper names, and so forth). So, if all your input forevermore consists of only those 96 characters (hahahahahaha), then you're done.
気をつけること は、これらの呼び出しはすべてグローバル Cロケールを含むことだ。これは、C関数の toupper/tolower の使用していることによる。 これは絶対的に動くとみなされるが、-- 文字列を構成する文字がベーシック・ソース・文字セット のみ であり、かつそれらの内の96種類の文字 のみ からなる場合 だけ、である。つまり、すべての英語テキストが表示できるわけではない (正式なブリティシュ・スペルや固有名詞など)。 だからもし入力文字列が、かならず96種類の文字だけからなるのであれば、変換される。

Note that the ToUpper and ToLower function objects are needed because toupper and tolower are overloaded names (declared in <cctype> and <locale>) so the template-arguments for transform<> cannot be deduced, as explained in this message. At minimum, you can write short wrappers like
また他に 気をつけることは、 ToUpper と ToLower の関数オブジェクトが必要だということ。なぜなら、 toupper と tolower は、オーバー・ロードされた名前だ( <cctype>と<locale> に宣言)。だから このメッセージ で説明されているように、 transform<> へのテンプレート引数は省略できない。 最小限では、下記のような短いラッパーが書ける

   char toLower (char c)
   {
      return std::tolower(c);
   }

The correct method is to use a facet for a particular locale and call its conversion functions. These are discussed more in Chapter 22; the specific part is Correct Transformations, which shows the final version of this code. (Thanks to James Kanze for assistance and suggestions on all of this.)
正しいメソッドは、特定のロケールのファセットを使い、そのロケールで決められた変換関数を使うことだ。この問題は、チャプター22でより詳細に議論される; パートの 正しい変換 に、このコードの最終版を示す。(これに助言と提案をしてくれたJames Kanzeに感謝。)

Another common operation is trimming off excess whitespace. Much like transformations, this task is trivial with the use of string's find family. These examples are broken into multiple statements for readability:
そのほかの一般にある操作は、不必要なホワイト・スペースのトリミングだ。変換のとき以上に、このタスクはトリビアである。stringの find ファミリを使用する。以下の例では、可読性を考慮して複数のステートメントに分割している。

   std::string  str (" \t blah blah blah    \n ");

   // 先頭のホワイト・スペースをトリム
   string::size_type  notwhite = str.find_first_not_of(" \t\n");
   str.erase(0,notwhite);

   // 末尾のホワイト・スペースをトリム
   notwhite = str.find_last_not_of(" \t\n");
   str.erase(notwhite+1);

Obviously, the calls to find could be inserted directly into the calls to erase, in case your compiler does not optimize named temporaries out of existence.
明らかに、コンパイラが存在しない名前つき一時変数を最適化しなければ、 find の呼び出しは、 eraseの呼び出しへと、直接的に挿入できる。


Prev      Up      Next
パート V. 文字列Strings      Home      ケース・センシティビティ
タグ:g++ String MFC CString
posted by もふもふ at 22:08 | ロンドン ☀ | Comment(0) | TrackBack(0) | カテゴリ: 仕様・規格 | このブログの読者になる | 更新情報をチェックする

2008年03月18日

Ruby: Mechanize GUIDE.txt 日本語訳

※[ブックマーク]ボタンの中に delicious, reddit, digg, Google+(G+) のボタンもあります。
追記2010/12/7:本内容は古くなったので、バージョン1.0.0のものに更新予定である。

http://mechanize.rubyforge.org/mechanize/ にある GUIDE.txt を訳してみた。 チュートリアルとしてよくできていると思う(原文的な意味で)。

  • ルー語っぽい箇所などを、若干修正[2008/3/31]
  • 訳微修正。SyntaxHighlighterでコード部分を整理[2010/8/5]

GUIDE.txt

Path:     GUIDE.txt
Last Update:     Tue Dec 04 19:36:28 -0800 2007
   

WWW::Mechanizeをはじめよう

このガイドは、Mechanize を使い始めるためのものです。このガイドを読み終わるまでに、ページをフェッチしたり、リンクをクリックしたり、フォームをうめてサブミットしたり、Webページ内から必要なデータを取り出したり、、と、お望みのいろいろな便利なことができるようになるとよいです。このガイドは、Mechanize を使ってできることの、表面的なほんとにちょっとしたスクラッチです。だけども、はじめるには十分な情報となるとよいです!

   

ページをフェッチしよう!

最初のことを最初に。mechanize を require して、新しい mechanizeオブジェクトを生成しましょう:

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new

さて、ページをフェッチするためのエージェントが使えます。グーグルをエージェントでフェッチしてみよう:

page = agent.get('http://google.com/')

なにがおこった? 我々は mechanize に対して、グーグルのメインページを取ってくるようにたのみました。Mechanize は、任意のセットされたクッキーを格納し、そしてグーグルが送ってきた任意のリダイレクトをたどりました。エージェントは、ページを我々に返しました。このページからデータを取り出したり、クリックするためのリンクを探したり、うめるためのフォームを見つけることができます。

つぎに、クリックするためのいくつかのリンクを探してみましょう。

   

リンクを見つける

Mechanize は、ページをGETしたり、POSTしたり、またはフォームをSUBMITしたとき、ページ・オブジェクトをひとつ返します。ページがフェッチされたら、エージェントはページをパースして、リンクの一覧表をページ・オブジェクト内に作ります。

それでは、グーグルのホームページをフェッチしたので、すべてのリンクを表示してみよう:

page.links.each do |link|
   puts link.text
end

リンクの一覧を表示できます。だけど、Mechanize はクリックするリンクを見つけるのに役立つ、いくつかショート・カットを用意してます。たとえば、テキストが ‘News’ であるようなリンクをクリックしたい、としましょう。ふつうは、このようにしなければなりません:

page = agent.click page.links.find { |l| l.text == 'News' }

でもMechanize には、ショートカットがあります。上記の代わりに、このようにできるのです:

page = agent.click page.links.text('News')

このショートカットは、「名前が ‘News’ であるような全てのリンクを探せ」という意味です。もしかしたら読者は「そのテキストのリンクは、複数ありうるのに!」と考えているかもしれません。そしてそれは正しい!もしクリック・メソッドに、リンクの一覧を渡した場合、Mechanize は最初のひとつをクリックします。もし二つ目のリンクをクリックしたいのなら、このようにやりましょう:

agent.click page.links.text('News')[1]

適切なリンクを以下のように探すこともできます:

page.links.href('/something')

もしくはそれらを一緒につなげて、適切なテキストと適切なhrefのリンクを探すこともできます:

page.links.text('News').href('/something')

これらのショートカットは、frame, iframe, formのようなものをフェッチしたときの任意のリストに対して、使えます。さて我々はリンクのクリックの仕方を知りました。つぎに、フォームをうめるようなもっと複雑なことをやってみましょう。

   

フォームをうめる

グーグルの例の続きをやりましょう。以下がコードです:

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new
page = agent.get('http://google.com/')

もしページが表示できれば、ひとつのfという名前のフォームがあり、2組のボタンと2,3のフィールドがあります:

pp page

いまフォームの名前がわかりましたので、ページをフェッチしてみましょう:

google_form = page.form('f')

Mechanize で、フォーム・インプット・フィールドにアクセスする方法はいくつかありますが、一番便利な方法は、オブジェクトのアクセッサを利用する方法です。では、フォーム上の ‘q’ という名前のフォーム・フィールドに、‘ruby mechanize’と入力して見ましょう:

google_form.q = 'ruby mechanize'

値をセットして、フォームを表示し、以下のような行が見えることを確認してください:

#<WWW::Mechanize::Field:0x1403488 @name="q", @value="ruby mechanize">

名前 ‘q’ に対応する値が変わっていた場合は、成功です!つぎにフォームをサブミットしてボタンを押し、結果を見てみましょう:

page = agent.submit(google_form, google_form.buttons.first)
pp page

今やったことは、検索フィールドに文字をいれて「検索」ボタンを押したのと同じことです。ボタンなしでフォームをサブミットした場合、テキスト・フィールドに入力してリターン・キーを打ったのと同じです。

コードを全部見てみましょう:

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new
page = agent.get('http://google.com/')
google_form = page.form('f')
google_form.q = 'ruby mechanize'
page = agent.submit(google_form)
pp page

ここまでで、スクリーン・スクレーピングをやってみました。フォームについて、もう少し深く見てみましょう。スキップしたくなる前に!

   

フォーム・テクニック応用編

このセクションでは、フォームで可能な入力フォームで違ったタイプの使用法について、触れたいと思う。パスワードやテキストエリア・フィールドは、テキスト・フィールドと同じように扱われ得る。セレクト・フィールドは、テキスト・フィールドにとても似ているが、関連するオプションがたくさんある。ひとつのオプションを選んだとき、mechanize はそれ以外のオプションを非選択にする (マルチセレクトでなければ!)

たとえばリスト上のひとつのオプションを選択しよう:

form.fields.name('list').options[0].select

今、チェック・ボックスとラジオ・ボタンを見てみよう。チェックボックスを選択するには、ただこのようにすればいい:

form.checkboxes.name('box').check

ラジオ・ボタンは、チェック・ボックスによく似ているが、同じ名前のその他のラジオ・ボタンをアンチェックする方法を知っている。チェック・ボタンと同じように、ラジオ・ボタンをチェックしてみよう:

form.radiobuttons.name('box')[1].check

Mechanize はまた、ファイルのアップロードも簡単にできる!ファイル・アップロード・フィールドを探し、ファイル名を教えてやるのだ:

  form.file_uploads.file_name = "somefile.jpg"

   

データをいじる

Mechanize は、HTMLをパースするために hpricot を使っている。これはなにを意味するか? mechanize で得たページを、hpricotオブジェクトのように扱えるということだ。 Mechanize をデータを取り出したいページのナビゲートに使った後、hpricotのメソッドで取り出せる:

agent.get('http://someurl.com/').search("//p[@class='posted']")
このパワフル・スクレーパに関するさらなる情報については、 HpricotBasics を参照してほしい。

WWW::Mechanizeをはじめよう

このガイドは、Mechanize を使い始めるためのものです。このガイドを読み終わるまでに、ページをフェッチしたり、リンクをクリックしたり、フォームをうめてサブミットしたり、Webページ内から必要なデータを取り出したり、、と、お望みのいろいろな便利なことができるようになるとよいです。このガイドは、Mechanize を使ってできることの、表面的なほんとにちょっとしたスクラッチです。だけども、はじめるには十分な情報となるとよいです!

   

ページをフェッチしよう!

最初のことを最初に。mechanize を require して、新しい mechanizeオブジェクトを生成しましょう:

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new

さて、ページをフェッチするためのエージェントが使えます。グーグルをエージェントでフェッチしてみよう:

page = agent.get('http://google.com/')

なにがおこった? 我々は mechanize に対して、グーグルのメインページを取ってくるようにたのみました。Mechanize は、任意のセットされたクッキーを格納し、そしてグーグルが送ってきた任意のリダイレクトをたどりました。エージェントは、ページを我々に返しました。このページからデータを取り出したり、クリックするためのリンクを探したり、うめるためのフォームを見つけることができます。

つぎに、クリックするためのいくつかのリンクを探してみましょう。

   

リンクを見つける

Mechanize は、ページをGETしたり、POSTしたり、またはフォームをSUBMITしたとき、ページ・オブジェクトをひとつ返します。ページがフェッチされたら、エージェントはページをパースして、リンクの一覧表をページ・オブジェクト内に作ります。

それでは、グーグルのホームページをフェッチしたので、すべてのリンクを表示してみよう:

page.links.each do |link|
   puts link.text
end

リンクの一覧を表示できます。だけど、Mechanize はクリックするリンクを見つけるのに役立つ、いくつかショート・カットを用意してます。たとえば、テキストが ‘News’ であるようなリンクをクリックしたい、としましょう。ふつうは、このようにしなければなりません:

page = agent.click page.links.find { |l| l.text == 'News' }

でもMechanize には、ショートカットがあります。上記の代わりに、このようにできるのです:

page = agent.click page.links.text('News')

このショートカットは、「名前が ‘News’ であるような全てのリンクを探せ」という意味です。もしかしたら読者は「そのテキストのリンクは、複数ありうるのに!」と考えているかもしれません。そしてそれは正しい!もしクリック・メソッドに、リンクの一覧を渡した場合、Mechanize は最初のひとつをクリックします。もし二つ目のリンクをクリックしたいのなら、このようにやりましょう:

agent.click page.links.text('News')[1]

適切なリンクを以下のように探すこともできます:

page.links.href('/something')

もしくはそれらを一緒につなげて、適切なテキストと適切なhrefのリンクを探すこともできます:

page.links.text('News').href('/something')

これらのショートカットは、frame, iframe, formのようなものをフェッチしたときの任意のリストに対して、使えます。さて我々はリンクのクリックの仕方を知りました。つぎに、フォームをうめるようなもっと複雑なことをやってみましょう。

   

フォームをうめる

グーグルの例の続きをやりましょう。以下がコードです:

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new
page = agent.get('http://google.com/')

もしページが表示できれば、ひとつのfという名前のフォームがあり、2組のボタンと2,3のフィールドがあります:

pp page

いまフォームの名前がわかりましたので、ページをフェッチしてみましょう:

google_form = page.form('f')

Mechanize で、フォーム・インプット・フィールドにアクセスする方法はいくつかありますが、一番便利な方法は、オブジェクトのアクセッサを利用する方法です。では、フォーム上の ‘q’ という名前のフォーム・フィールドに、‘ruby mechanize’と入力して見ましょう:

google_form.q = 'ruby mechanize'

値をセットして、フォームを表示し、以下のような行が見えることを確認してください:

#<WWW::Mechanize::Field:0x1403488 @name="q", @value="ruby mechanize">

名前 ‘q’ に対応する値が変わっていた場合は、成功です!つぎにフォームをサブミットしてボタンを押し、結果を見てみましょう:

page = agent.submit(google_form, google_form.buttons.first)
pp page

今やったことは、検索フィールドに文字をいれて「検索」ボタンを押したのと同じことです。ボタンなしでフォームをサブミットした場合、テキスト・フィールドに入力してリターン・キーを打ったのと同じです。

コードを全部見てみましょう:

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new
page = agent.get('http://google.com/')
google_form = page.form('f')
google_form.q = 'ruby mechanize'
page = agent.submit(google_form)
pp page

ここまでで、スクリーン・スクレーピングをやってみました。フォームについて、もう少し深く見てみましょう。スキップしたくなる前に!

   

フォーム・テクニック応用編

このセクションでは、フォームで可能な入力フォームで違ったタイプの使用法について、触れたいと思う。パスワードやテキストエリア・フィールドは、テキスト・フィールドと同じように扱われ得る。セレクト・フィールドは、テキスト・フィールドにとても似ているが、関連するオプションがたくさんある。ひとつのオプションを選んだとき、mechanize はそれ以外のオプションを非選択にする (マルチセレクトでなければ!)

たとえばリスト上のひとつのオプションを選択しよう:

form.fields.name('list').options[0].select

今、チェック・ボックスとラジオ・ボタンを見てみよう。チェックボックスを選択するには、ただこのようにすればいい:

form.checkboxes.name('box').check

ラジオ・ボタンは、チェック・ボックスによく似ているが、同じ名前のその他のラジオ・ボタンをアンチェックする方法を知っている。チェック・ボタンと同じように、ラジオ・ボタンをチェックしてみよう:

form.radiobuttons.name('box')[1].check

Mechanize はまた、ファイルのアップロードも簡単にできる!ファイル・アップロード・フィールドを探し、ファイル名を教えてやるのだ:

  form.file_uploads.file_name = "somefile.jpg"

   

データをいじる

Mechanize は、HTMLをパースするために hpricot を使っている。これはなにを意味するか? mechanize で得たページを、hpricotオブジェクトのように扱えるということだ。 Mechanize をデータを取り出したいページのナビゲートに使った後、hpricotのメソッドで取り出せる:

agent.get('http://someurl.com/').search("//p[@class='posted']")
このパワフル・スクレーパに関するさらなる情報については、 HpricotBasics を参照してほしい。

…… 続きを読む -->
posted by もふもふ at 01:46 | ロンドン ☁ | Comment(0) | TrackBack(2) | カテゴリ: 仕様・規格 | このブログの読者になる | 更新情報をチェックする

2008年03月16日

Ruby: OptionParser (optparse.rb) の使い方

※[ブックマーク]ボタンの中に delicious, reddit, digg, Google+(G+) のボタンもあります。

2014-05-13追記: OptionParser の網羅的機能については、「Ruby OptionParser クラスのリファレンス」 を参照してください。

OptionParser: コマンドライン・オプション解析のためのクラス

コマンドライン・オプションを解析するための方法として、従来からGNU の getopt 系のAPIが使われてきた (Getopt,GetoptLong)。Ruby ではこれらに加えて、optparse.rb の OptionParser クラスを利用する方法があるようだ。

もっとよむ
posted by もふもふ at 05:01 | ロンドン ☁ | Comment(0) | TrackBack(0) | カテゴリ: 仕様・規格 | このブログの読者になる | 更新情報をチェックする

2008年03月11日

g++: GNU C++ ライブラリ パート V (目次)
カテゴリ: 仕様・規格 | タグ: g++ C++ String 日本語 文字列

※[ブックマーク]ボタンの中に delicious, reddit, digg, Google+(G+) のボタンもあります。
パート V. 文字列Strings

Table of Contents

13. 文字列クラスString Classes

    シンプルな変換Simple Transformations
    ケース・センシティビティCase Sensivitity
    任意の文字型Arbitrary Character Types
    トークン化Tokenizing
    縮めてフィットShrink to Fit
    CString (MFC)
posted by もふもふ at 01:25 | ロンドン ☔ | Comment(0) | TrackBack(0) | カテゴリ: 仕様・規格 | このブログの読者になる | 更新情報をチェックする

g++: GNU C++ ライブラリ パート II チャプター 4. 型
カテゴリ: 仕様・規格 | タグ: g++ C++ 日本語

※[ブックマーク]ボタンの中に delicious, reddit, digg, Google+(G+) のボタンもあります。
チャプター 4. 型

Table of Contents

基本型Fundamental Types
数値的プロパティNumeric Properties
NULL

基本型Fundamental Types

C++は、下記の組込み型を持ちます:

  •  char
  •  signed char
  •  unsigned char
  •  signed short
  •  signed int
  •  signed long
  •  unsigned short
  •  unsigned int
  •  unsigned long
  •  bool
  •  wchar_t
  •  float
  •  double
  •  long double

これらの基本型は、ヘッダファイルのインクルードなしでいつでも使用可能です。これらの型は、C++またはCでまったく同じです。

これらの型のライブラリの部分を特定することは、禁止されます:その代わりPODを使います。
タグ:g++ C++ 日本語
posted by もふもふ at 01:17 | ロンドン ☔ | Comment(0) | TrackBack(0) | カテゴリ: 仕様・規格 | このブログの読者になる | 更新情報をチェックする

g++: GNU C++ ライブラリ パートI チャプター 2. セットアップ

※[ブックマーク]ボタンの中に delicious, reddit, digg, Google+(G+) のボタンもあります。
posted by もふもふ at 01:10 | ロンドン ☔ | Comment(0) | TrackBack(0) | カテゴリ: 仕様・規格 | このブログの読者になる | 更新情報をチェックする

2008年02月16日

g++: GNU C++ ライブラリ 日本語訳(目次)

※[ブックマーク]ボタンの中に delicious, reddit, digg, Google+(G+) のボタンもあります。
探してたのだがどうにも見つからなかったので、やってみた(まだ目次のみ)。
原書は、"The GNU C++ Library" (http://gcc.gnu.org/onlinedocs/libstdc++/manual/spine.html)
まだ途中です。適宜アップデート予定。
長すぎる、とSeeSaa様に怒られてしまったので、付録以降はとりあえず本稿では省きました。



GNU C++ ライブラリ

Copyright (c) 2008 FSF

Japanese Translation Copyright (c) 2008 もふもふ

ライセンス

Table of Contents

I. イントロダクション

    1. ステータス

        実装ステータスImplementation Status

            C++ 1998
            C++ TR1
            C++ 200x

        ライセンス

            コード: GPL
            ドキュメンテーション: GPL, FDL

        バグ

            実装のバグ
            標準ライブラリのバグStandard Bugs

    2. セットアップ

        ビルド構成の設定Configure
        ビルド

            必要なお膳立てPrerequisites
            Make

        テスト

            構成Organization
            命名規則
            ユーティリティ
            テスト・スイートの実行
            新しいテスト・ケース
            テスト・ハーネス詳細
            これから

    3. つかい方

        ライブラリ・バイナリ・ファイルのリンク
        ヘッダ

            ヘッダ・ファイル
            ヘッダの混載Mixing Headers
            C ヘッダと std名前空間
            コンパイル済みヘッダ

        名前空間

            使用可能な名前空間
            std名前空間
            名前空間を組み合わせて使うUsing Namespace Composition

        マクロ
        同時性Concurrency

            必要なお膳立てPrerequisites
            スレッド安全性
            アトミック
            IO
            コンテナ

        「例外」安全性Exception Safety
        デバッギング・サポート

            g++ の使用
            デバッグバージョンのライブラリ・バイナリ・ファイルDebug Versions of Library Binary Files
            メモリ・リーク狩りMemory Leak Hunting
            gdb をつかう
            捕らえなかった例外を追う
            デバッグ・モード
            コンパイル時間のチェックCompile Time Checking

II. サポート

    prefaceTODO:
    4. 型Types

        基本の型Fundamental Types
        数値プロパティNumeric Properties
        NULL

    5. 動的メモリ
    6. 停止Termination

        停止ハンドラTermination Handlers
        くどくどしい停止ハンドラVerbose Terminate Handler

III. 診断

    7. 例外

        例外クラス
        例外にデータを追加する
        打ち消しCancellation

    8. コンセプト・チェッキング

IV. ユーティリティ

    9. ファンクタ
    10. ペア
    11. メモリ

        アロケータ

            要求仕様Requirements
            設計上の問題点Design Issues
            実装
            スペシフィック・アロケータをつかう
            カスタム・アロケータCustom Allocators
            エクステンション・アロケータ

        auto_ptr

            制限
            コンテナ中での使用

        shared_ptr

            要求仕様Requirements
            設計上の問題点Design Issues
            実装Implementation
            使用法Use
            謝辞

    12. Traits

V. 文字列Strings

    13. String クラス関連Classes

        シンプルな変換Simple Transformations
        大文字小文字の区別Case Sensivitity
        任意の文字型Arbitrary Character Types
        トークナイジングTokenizing
        縮めてフィットShrink to Fit
        CStringクラス (MFC)

VI. ローカライゼーション

    14. ロケール関連

        ロケールlocale

            要求仕様Requirements
            設計Design
            実装Implementation
            これからFuture

    15. ファセット aka カテゴリFacets aka Categories

        ctype

            実装
            これから

        codecvt

            要求仕様Requirements
            設計Design
            実装Implementation
            使用法Use
            これからFuture

        messages

            要求仕様Requirements
            設計Design
            実装Implementation
            使用法Use
            これからFuture

VII. コンテナ関連

    16. シーケンスSequences

        リストlist

            list::size() は 計算量O(n)

        ベクタvector

            空間オーバヘッドの管理

    17. 連想配列Associative

        挿入のヒントInsertion Hints
        ビットセットbitset

            サイズ変数Size Variable
            Type String

    18. Cとの連携Interacting with C

        コンテナ vs. アレイContainers vs. Arrays

VIII. イテレータIterators

    19. 定義済みPredefined

        イテレータ vs. ポインタIterators vs. Pointers
        ひとつ越えたらOne Past the End

IX. アルゴリズムAlgorithms

    prefaceTODO:
    20. ミューテイティイングMutating

        スワップswap

            特殊化Specializations

X. 数値型Numerics

    21. 複素数型Complex

        complex の処理

    22. 一般化した操作Generalized Operations
    23. Cとの連携Interacting with C

        数値型 vs. アレイNumerics vs. Arrays
        C99

XI. 入力と出力

    24. Iostream オブジェクト
    25. Stream バッファ

        streambuf 派生クラス関連
        バッファリング

    26. メモリ・ベースのストリーム

        strstream との互換性

    27. ファイル・ベースのストリーム

        ファイルをコピーする
        バイナリ入力と出力
        さらなるバイナリ入力と出力

    28. Cとの連携

        ファイルポインタFILE* とファイルディスクリプタを使うFILE* and file descriptors
        パフォーマンス

XII. 拡張Extensions

    prefaceTODO:
    29. コンパイル時間のチェックCompile Time Checks
    30. デバッグ・モードDebug Mode

        Intro
        セマンティクスSemantics
        つかい方Using

            デバッグ・モードを使う
            Using a Specific Debug Container

        設計

            目的Goals
            方法
            他の実装Other Implementations

    31. 並列モードParallel Mode

        Intro
        セマンティクスSemantics
        つかい方Using

            並列モードを使うUsing Parallel Mode
            特殊並列コンポーネントを使うUsing Specific Parallel Components

        設計Design

            基本インタフェースInterface Basics
            構成とチューニングConfiguration and Tuning
            名前空間の実装Implementation Namespaces

        テスティングTesting
        Bibliography

    32. アロケータ

        mt_allocator

            Intro
            設計上の問題点Design Issues
            実装
            単一スレッドの例
            複数スレッドの例

        bitmap_allocator

            設計
            実装

    33. コンテナ

        ポリシーベースのデータ構造Policy Based Data Structures
        HP/SGI
        Deprecated HP/SGI

    34. ユーティリティ
    35. アルゴリズムAlgorithms
    36. 数値型Numerics
    37. イテレータIterators
    38. 入力と出力

        filebufs の派生

    39. 曖昧性除去Demangling
    40. 同時性Concurrency

        設計

            ロックとミューテックスへのインタフェースInterface to Locks and Mutexes
            アトミック・ファンクションへのインタフェースInterface to Atomic Functions

        実装

            ビルトインのアトミック・ファンクションをつかうUsing Builitin Atomic Functions
            スレッド抽象化

        使用法
posted by もふもふ at 02:11 | ロンドン ☀ | Comment(1) | TrackBack(0) | カテゴリ: 仕様・規格 | このブログの読者になる | 更新情報をチェックする
トラックバックURLは,"Trackback(x)"のリンクを押すと表示されます.
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。