IT戦記

プログラミング、起業などについて書いているプログラマーのブログです😚

Google Chrome の Beta 版がバージョンアップ

はじめに

Google Chrome の Beta 版がバージョンアップしましたね。
と言う訳で Google Chrome の Beta 版や開発版にアップデートする方法とかを解説して行きたいと思います。

手順

手順は 2 ステップ

1. Google Chrome Channel Chooser でアップデート対象を選ぶ

以下へ行って Google Chrome Channel Chooser をダウンロードします。
Chrome Release Channels - The Chromium Projects
で、ダウンロードした exe ファイルを実行します。

この画面で Beta 版か開発版かを選択します。

  • Beta はある程度安定したバージョンのみアップデートする
  • Dev は毎週最新の開発版にアップデートする

って感じです。
一度これをやっておくと、以降は普通にアップデートの確認をするだけでよくなります。

2. アップデートの確認

工具アイコンから「 Google Chrome について」を選択

するとアップデートしますか?って聞かれるので

「今すぐアップデート」をクリック
しばらくすると

完了するので、再起動

ちなみに

リリースノートはここに追加されていくようです。
http://sites.google.com/a/chromium.org/dev/getting-involved/dev-channel/release-notes

まとめ

アップデートできるよ(・∀・)!!
via: http://news.cnet.com/8301-1001_3-10042670-92.html

Google Chrome で Greasemokey。「Greasemetal」登場。

id:kazuhooku さんが

Google ChromeGreasemonkey を作ったみたいです><
速い速すぎるよママン><

という訳で

この前作った
Pathtraq API を使って、はてブにアクセスチャートを出す Greasemonkey を作りました! - IT戦記
の User JavaScript を試してみた

おおお。動いたー

という訳で

ちょろめユーザーは、れっつダウンロード!
Greasemetal - an Userscript Runtime for Google Chrome

Google Chrome の JavaScript エンジン V8 を試す

(基本だらだら進行で、過程を追記していきます)

Google Chrome が出ました

Google ChromeJavaScript エンジンが刷新されたということで、その JavaScript エンジン V8 についていろいろ調べてみようと思います。
Issues - v8 - V8 JavaScript Engine - Monorail

ビルドしてみる

まず、 svn からソースを持ってくる

$ svn co http://v8.googlecode.com/svn/trunk/ v8

おおお。以外と少ない
で、 trunk の中に入って

$ cd v8

scons でビルド(scons が入ってない人は、 port や apt-get で入れる)

$ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o obj/release/third_party/jscre/pcre_compile.o -c -ansi -w -fno-strict-aliasing -O2 -fno-rtti -fno-exceptions -ansi -w -fno-strict-aliasing -O2 -DENABLE_LOGGING_AND_PROFILING -DSUPPORT_UTF8 -DNO_RECURSE -DSUPPORT_UCP src/third_party/jscre/pcre_compile.cpp
:
:
ranlib libv8.a

libv8.a が出来た。ここまでは順調

Shell をビルドしてみる

scons のオプションを見る

$ scons --help
scons: Reading SConscript files ...
scons: done reading SConscript files.

mode: compilation mode (debug, release)
    default: release
    actual: release

sample: build sample (shell, process)
    default: 
    actual: 

env: override environment settings (NAME1:value1,NAME2:value2)
    default: 
    actual: 

toolchain: toolchain (gcc, msvc)
    default: gcc
    actual: gcc

simulator: simulator (arm, none)
    default: none
    actual: none

arch: arch (arm, ia32)
    default: ia32
    actual: ia32

library: library (static, shared)
    default: static
    actual: static

wordsize: wordsize (64, 32)
    default: 32
    actual: 32

snapshot: snapshot (on, off)
    default: off
    actual: off

os: os (linux, macos, win32)
    default: macos
    actual: macos

いろいろとあるが sample フラグで shell を作れるっぽいことが分かる
shell をビルドする

$ scons sample=shell
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o shell obj/sample/shell/release/shell.o -L. -lv8 -lpthread
scons: done building targets.

shell.o と libv8 と libpthread をリンクして完了。 shell というバイナリが出来た。
実行してみる。

$ ./shell 
V8 version 0.2.5
> for (var n in function () { return this } ()) print(n)
n
load
quit
print
version
> quit()

おおおおお。 JavaScript が動いた

shell のソースを見てみる

shell.cc をエディタで開く

$ vim samples/shell.cc

209 行くらいのシンプルなファイルだ。
とりあえず雰囲気だけ分かった。

Hello, world を雰囲気で書いてみる

雰囲気だけ分かったので、雰囲気で Hello, world してみる

// v8.h を読み込む
#include <v8.h>

v8::Handle<v8::Value> Print(const v8::Arguments& args);

int main(int argc, char* argv[]) {

  // 準備
  v8::HandleScope handle_scope;

  // グローバルオブジェクトの生成
  v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();

  // 関数名の生成
  v8::Handle<v8::String> str_print = v8::String::New("print");
  // 関数オブジェクトの生成
  v8::Handle<v8::FunctionTemplate> fn_print = v8::FunctionTemplate::New(Print);
  // グローバルオブジェクトのプロパティに関数を設定
  global->Set(str_print, fn_print);

  // グローバルオブジェクトから環境を生成
  v8::Handle<v8::Context> context = v8::Context::New(NULL, global);
  // 環境からスコープを生成
  v8::Context::Scope context_scope(context);

  // 実行する文字列を生成
  v8::Handle<v8::String> str = v8::String::New("print('Hello, world!')");
  // Undefined を生成(ファイル名がないから)
  v8::Handle<v8::Primitive> undefined = v8::Undefined();
  // コンパイル
  v8::Handle<v8::Script> script = v8::Script::Compile(str, undefined);

  // 実行
  v8::Handle<v8::Value> result = script->Run();

  // 終了
  return 0;
}

// 関数オブジェクト print の実体 
v8::Handle<v8::Value> Print(const v8::Arguments& args) {
  v8::String::AsciiValue str(args[0]);
  printf("%s\n", *str);
  return v8::Undefined();
}

ビルドする(-L と -I は適宜)

$ g++ helloworld.cc -L. -lv8 -Isrc

おお。成功

$ ./a.out
Hello, world!

おおおお。動いた

gdb で追いかけてみる

デバッグビルドする

$ scons mode=debug

こんどは、 libv8_g.a というファイルが出来た。
さっきの helloworld.cc のデバッグ版を作る

$ g++ -O0 -g helloworld.cc -L. -lv8_g -Isrc

で、 gdb コマンドで実行

$ gdb ./a.out
GNU gdb 6.3.50-20050815 (Apple version gdb-768) (Tue Oct  2 04:07:49 UTC 2007)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-apple-darwin"...Reading symbols for shared libraries .... done

(gdb) b main
Breakpoint 1 at 0x25c1: file helloworld.cc, line 33.
(gdb) r
Starting program: /Users/amachang/v8/a.out 
Reading symbols for shared libraries +++. done

Breakpoint 1, main (argc=1, argv=0xbffff9b4) at helloworld.cc:33
33	  v8::HandleScope handle_scope;
(gdb) s
v8::HandleScope::HandleScope (this=0xbffff940) at v8.h:397
397	  }
(gdb) 
v8::HandleScope::HandleScope (this=0xbffff940) at v8.h:395
395	  HandleScope() : previous_(current_), is_closed_(false) {
(gdb) 
396	    current_.extensions = 0;
(gdb) 
397	  }
(gdb) 
0x00022ac1 in v8::HandleScope::HandleScope (this=0xbffff940) at v8.h:397
397	  }
(gdb) 
main (argc=1, argv=0xbffff9b4) at helloworld.cc:35
35	  v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
(gdb) 
v8::ObjectTemplate::New () at src/api.cc:824
824	  return New(Local<FunctionTemplate>());

おおお

Google Chrome 斜め読み

何か大きなニュースがあれば更新します。

ニュース速報

マイクロソフトウインドウズOS搭載PCで世界100か国以上でダウンロードできるようになる予定
今後MacOSLinux上でも起動できるようにしていく予定
今後マイクロソフトとグーグル間の緊張関係がますます激化することが考えられる
Sundar Pichai 氏「Chromeは多くのオプション機能や斬新さに満ちている。Chromeによってインターネットライフがより良いものになることを期待している」

http://jp.ibtimes.com/article/biznews/080902/22449.html

自社公式サイトで独自開発のブラウザー(インターネット閲覧ソフト)の無償提供サービスを2日から始めると発表
8割近くの世界シェアを握る米マイクロソフト(MS)に対抗、別途開発中の基本ソフト(OS)「アンドロイド」や携帯電話と連動し、ネット顧客基盤を一気に拡充する狙い
サイト閲覧速度を飛躍的に向上させたほか、双方向性やシンプルな操作性能が特徴

http://www.jiji.com/jc/c?g=int_30&k=2008090200149

米国時間の2日から、世界100カ国以上で試験版をネット経由で無償配布
利用者にとってネットへの「入り口」であるブラウザーを自社展開することで、検索など各種ネットサービスの強化につなげる

経済、株価、ビジネス、政治のニュース:日経電子版

MSの主力ソフト製品に正面から立ち向かうグーグルにとって大きな賭け
設計情報「ソースコード」を公開する予定で、ソフト開発に積極的な姿勢をアピール

http://www.47news.jp/CN/200809/CN2008090201000188.html

新たなブラウザを開発した理由として,「Webは,単純なテキストのページから,リッチでインタラクティブなアプリケーションへと進化した」と指摘
安定性,高速性,操作性,安全性,オープンソースという5つの観点
各タブがそれぞれ別プロセス
レンダリング・エンジン「Webkit」を採用
表示履歴やクッキーをパソコンに保存せずに利用できるプライバシ・モードも備える
各プロセスをサンドボックス
フィッシング・サイトやマルウエア・サイトのURLの最新リストを常時ダウンロード

Google,オープンソースのWebブラウザ「Google Chrome」を公開へ | 日経 xTECH(クロステック)

独自の強力なJavaScriptエンジン「V8」を搭載
Linus Upson 氏「我々が本当に必要としたのは、単なるブラウザだけでなく、Webページとアプリケーションのためのモダンなプラットフォームだ。それこそが我々が始めたものなのだ」
今後、MozillaGoogleがどのように共存するのか、あるいは部分的に競争関係に発展していくのかについては未知数

Googleが独自ブラウザ「Google Chrome」を9月2日にリリース

Sundar Pichai 氏「Webがシンプルなテキストページからリッチなインタラクティブ・アプリケーションへと進化したのに伴い、Webブラウザも根本的に考え直されるべきだ。今のわれわれに必要なのは単なるブラウザではなく、Webページとアプリケーションのためのモダン・プラットフォームだ」「Webページ、サイト、アプリケーションなど、Webの重要な構成要素を実行するための唯一のツールである」「初期のGoogleホームページのようにクリーンで高速。ユーザーを目的の場所へと素早く導く」「Webは、より多くのオプションとイノベーションによって向上する。Google Chromeもオプションの1つであり、Webのさらなる前進に寄与する存在になってほしい」
プラグイン向けの許可設定を設ける

http://journal.mycom.co.jp/news/2008/09/02/009/

よりスムーズなドラッグ&ドロップ操作
ChromeのURL入力フィールドには、「Omnibox」という名称が付けられ、ブラウジング履歴とリアルタイムの検索結果に基づいて、URLを提案するフィードが供給される
「Gears」を、Chromeに組み込んで、「あらゆるブラウザの基本機能の改善」に広く用いられるようになることを願っている
Chromeは、OpenSocialGoogle Gearsなど、他のGoogleオープンソースプロジェクトとマッチしている

米グーグル、新ブラウザー投入を計画=WSJ | ロイター

まとめ

  • 公開に関する情報
    • 今日明日中
    • 100 ヶ国
  • 開発者向け情報
  • ユーザ向け情報
    • 最初は Windows 向けのみ(Mac, Linux は今後)
    • Window の外側にタブ
    • プライバシ・モード(履歴、 Cookie オフ)
    • 検索機能付きロケーションバー(Omnibox という名前)
    • スムーズなドラック&ドロップ
    • タブごとにプロセスが別(全タブ同時クラッシュがない)
  • 今後とか狙いとか