NoSQL本読み比べ

最近NoSQL本4冊を読む機会があったので、各本の紹介をしてみます。

前知識

NoSQLとは、リレーショナルデータベース(RDB)以外のすべてをさします。そのため、NoSQLに含まれるデータベースには様々な種類があり、RDBではないとう事を除いて、すべてのデータベースにおいて特に共通する特徴があるわけではありません。また、分類方法にも複数の視点があり、それぞれのデータベースが複数の特徴を持っていたりします。

  • データモデルでの分類
    • キー・バリュー型
    • カラム指向型(列指向型)
    • ドキュメント指向型
    • グラフ指向
  • サーバの分散方法
    • マスタ・スレーブ型
    • P2P型
  • 目的の違い
    • 高速でデータの書き込み・読み出しをしたい
    • RDBの用にあらかじめ静的に決められた列定義より柔軟な 構造が欲しい構造が欲しい
    • ビッグーデータを扱いたい
  • CAP定理
    • Consistency(整合性)、Availability(可用性)、Paritions(分断耐性)の3特性のうち、どの2つにポジションを取っているか。
    • 3特性のうち、同時に実現できるのは2つまでというのが、NoSQL界の常識らしいです。

NOSQLの基礎知識

全255ページ/発行日:2012/05/18/監修:太田洋

丁寧かつ簡素に書かれており、数時間でNoSQLが俯瞰できるようになります。NoSQLデータベースを知る最初の1冊として最適です。


構成
序章 ビッグデータの時代
第1章 NOSQLとは何か
第2章 NOSQLのデータモデル
第3章 アーキテクチャの基本概念と技術
第4章 HadoopはNOSQL?
第5章 主なデータベース製品
 5.1 データモデルとアーキテクチャによる分類
 5.2 マスタ型のキー・バリューストア
      ・Hibari
 5.3 P2P型のキー・バリューストア
      ・Amazon Dynamo
      ・Voldemort
      ・Riak
 5.4 オンメモリのイネーブラ型KVS
      ・Memcached
      ・Redis
      ・Scalaris
 5.5 オンディスクのイネーブラ型KVS
      ・Tokyo Cabinet/Tyrant
 5.6 カラム指向のマスタ型データストア
      ・Apache HBase(Bigtable)
      ・Hypertable
  5.7 カラム指向のP2P型データストア
      ・Cassandra
 5.8 グラフ型のデータストア
      ・Neo4j
      ・InfiniteGraph
 5.9 ドキュメント指向型のデータストア
      ・CouchDB
      ・MongoDB
 まとめ
第6章 NOSQLの選択基準
第7章 NOSQLを使うビジネス
特徴

前半では、NoSQLの分類方法、各データモデルとアーキテクチャについて、後半では、代表的なプロダクト毎の特徴や選定方法が説明されています。
また、Hadoopについて1章さかれていますが、分散処理のフレームワークと位置づけ、本書ではNoSQLに含められていません。
4冊の中でNoSQL全体を俯瞰するのに最適ですが、各データベースのインストール方法や、CRUDの仕方については全く触れられていないため、
個々のプロダクトを使う具体的な方法は別の情報源に頼る必要があります。
ちなみに、タイトルでOが大文字なのは、「Not Only SQL」のOnlyを強調する意味だそうです。






NoSQLデータベースファーストガイド

全231ページ/発行日:2011/05/01/著者:佐々木達也

キーバリュー型を知るのに最適です。本書ではキーバリュー型とドキュメント指向型に特化しています。カラム指向は大量のデータを更新・参照するのに有用としつつも本書の目的から外れるとして、対象外とされており、グラフ指向型については特に触れらていません。またカラム指向と同じく、ビッグデータを対象とするHadoopについても触れらていません。


構成
Capter1 NoSQLデータベースの基礎知識
Capter2 NoSQLデータベースの種類と特徴
 2-1 memcached(揮発性key-valueストア)
 2-2 Tokyo Tyrant(永続性key-valueストア)
 2-3 Redis(揮発性/永続性key-valueストア)
 2-4 MongoDB(ドキュメント指向データベース)
Capter3 NoSQLデータベースを使ってみる
 3-1 memcachedの具体的な利用例
 3-2 Tokyo Tyrantの具体的な利用例
 3-3 Redisの具体的な利用例
 3-4 MongoDBの具体的な利用例
Capter4 パフォーマンス検証
Capter5 NoSQLなリレーショナルデータベース
特徴

構成からわかるとおり、本書はキーバリュー型について力をいれた構成になっています。
取り上げられている3つのキーバリュー型は他のDBと組み合わせて利用される特徴を持っており、4書籍の中で一番詳しく説明されています。
具体的なシチュエーションを例にサンプルコード付きで解説されており、実際にプロダクトを導入したイメージがしやすい内容です。
また、ドキュメント指向型のMongoDBについても、同レベルの説明がされています。






NoSQLプログラミング実践活用技法

全407ページ/発行日:2012/05/17/著者:Shashank Tiwari/監修:中村泰久/翻訳:長尾高弘

NoSQLの概要から、実際のインストールや使い方まで一番守備範囲が広い内容です。プロダクトは、揮発性キーバリューであるmemochedから分散処理のMapReduceHadoop、さらにAmazonのSimpleDBやGoogle App Engineにまで及び、説明内容もNoSQLの概要からインストール、パフォーマンスチューニングにまで幅広く取り上げられています。


構成
第1部 さあはじめよう
 第1章 NoSQLとは何か、なぜ必要なのか
 第2章 Hello NoSQL:最初の一歩
 第3章 NoSQLのインタフェース、インタラクション
第2部 NoSQLの基礎を学ぶ
 第4章 ストレージアーキテクチャの基礎
 第5章 CRUD操作の実行
 第6章 NoSQLデータベースのクエリー
 第7章 データストアの設計変更と拡張の管理
 第8章 データセットのインデクシングとソート
 第9章 トランザクションとデータ完全性の管理
第3部 NoSQLに熟達する
 第10章 クラウドのNoSQL(GAEとAmazon SimpleDB)
 第11章 MapReduceによるスケーラブルな並列処理
 第12章 Hiveによるビッグデータの分析
 第13章 データベースの内部構造
第4部 NoSQLを極める
 第14章 どのNoSQL製品を選ぶべきか
 第15章 データベースの併用
 第16章 パフォーマンスチューニング
 第17章 ツールとユーティリティ
 付録 NoSQL製品のインストールとセットアップ
  A.1 Hadoopのインストールとセットアップ
  A.2 HBaseのインストールとセットアップ
  A.3 Hiveのインストールとセットアップ
  A.4 Hypertabelのインストールとセットアップ
  A.5 MongoDBのインストールとセットアップ
  A.6 CouchDBのインストールとセットアップ
  A.7 Redisのインストールとセットアップ
  A.8 Cassandraのインストールとセットアップ
  A.9 Nagiosのインストールとセットアップ
  A.10 RRDtoolのインストールとセットアップ
特徴

本書は話題が多岐にわたっており、10章のクラウド系のプロダクトや17章のツール群は他書で得られない情報です。
情報量が多いですが、NoSQLの個別のプロダクトの説明と思想的な説明が交互にされていることともあいまって、読み進めるのに時間がかかるのが難点です。
入門書としてより、ある程度見地を得てからの2冊目として読むのが良いと思います。






ビッグデータを征すクラウドの技術 Hadoop & NoSQL

全141ページ/発行日:2011/04/25/ASCII.technologies編集部 編/執筆:多数

月刊ASCII.technologiesの特集と連載から加筆をして構成された内容です。Hadoopについて多数の執筆者による紹介が、カラーの図解付きで読めます。


構成
 ・MapReduce/Hadoop自由自在
 ・NoSQLのココロと実装比較
 ・Cassandraから覗くNoSQLの世界
特徴

Hadoopについて記事を割いている反面、雑誌の連載の再構成であることや、執筆者が多数いることから、NoSQLについてまとまった知識を得る用途には向いていません。
NoSQLデータベースの中で唯一ページを多くさかれているCassandraについてもバージョンが0.7と古い内容です。





以上、NoSQL本の紹介でした。新たなNoSQLライフを始めるための一助にしていただければ幸いです。

JUNG 2.0.1のサンプル

概要

JUNG 2.0.1のサンプル動かしてみたのでメモ

公式サイト

http://jung.sourceforge.net/
2010年のv2.0.1が最後のバージョンっぽいのでプロジェクトはもう不活性なのかも。

サンプルの入手方法

公式サイトからソースをダウンロードする
http://sourceforge.net/projects/jung/files/jung/jung-2.0.1/

公式サイト > Download > Download All Jung Releases Here > jung > jung2-2_0_1-sources.zip

jung2-2_0_1-sources.zipを解凍するといくつかjarファイルが手に入る。
そのうちのjung-samples-2.0.1-sources.jarをEclipseに取り込むととりあえず動かせる。
mavenプラグイン

各サンプルのメモ

動かしてみてぱっと見の印象です

  • AddNodeDemo.java
    • ノードが追加されていくデモ
  • AnimatingAddNodeDemo.java
    • ノードが追加されていくアニメーションのデモ。
  • AnnotationsDemo.java
    • ノードを選択したり、四角や円のシェイプを書くデモ。
  • BalloonLayoutDemo.java
    • ツリー構造を円で表示しているデモ
  • ClusteringDemo.java
    • 同種のノードを近くに表示しているデモ
  • DrawnIconVertexDemo.java
    • ノードに字を出したり、近くにラベルを出したりするデモ
  • EdgeLabelDemo.java
    • ノード間をつなぐ線(Edge)を直線や曲線にしたり、ノードにつけるラベルの表示位置を変えるデモ
  • GraphEditorDemo.java
    • グラフに任意のノードとエッジを追加できるデモ。
  • GraphFromGraphMLDemo.java
    • (simple.graphmlがなくて動作できず)
  • GraphZoomScrollPaneDemo.java
    • グラフの拡大・縮小表示と背景画像表示のデモ
  • ImageEdgeLabelDemo.java
    • エッジに付属するラベルを画像にするデモ
  • InternalFrameSatelliteViewDemo.java
    • JDesktopPaneを使ってメインとサテライトの2ウインドウで表示するデモ
  • L2RTreeLayoutDemo.java
    • ツリーを左から右へと、同心円上に2パターンで表示するデモ
  • LensDemo.java
    • レンズっぽい何かをグラフの上において、何かを強調・拡大表示する何かのデモ
  • LensVertexImageShaperDemo.java
    • ノードを画像にする&レンズ表示のデモ
  • MinimumSpanningTreeDemo.java
    • ツリーを最も簡単に表示する場合のデモ
  • MultiViewDemo.java
    • 1モデルを表現の異なる複数ビューで表示するデモ
  • PersistentLayoutDemo.java
    • ノードの位置の保存と破棄のデモ
  • PluggableRendererDemo.java
    • ノードやエッジやラベルの表現をいろいろ変更できるデモ
  • RadialTreeLensDemo.java
    • ツリーを円表示する場合のデモ
  • SatelliteViewDemo.java
    • 全体と拡大された部分を同時に表示するデモ
  • ShortestPathDemo.java
    • 2ノード間の最小経路を探すデモ
  • ShowLayouts.java
    • グラフの表示方法色々デモ
  • SimpleGraphDraw.java
    • グラフのシンプルな表示のデモ
  • SubLayoutDemo.java
    • 不明
  • TreeCollapseDemo.java
    • ツリーノードの子ノード以下を閉じたり開いたりするデモ
  • TreeLayoutDemo.java
    • ツリーを上から下へと、同心円上に2パターンで表示するデモ
  • TwoModelDemo.java
    • 1モデルを表現の異なる複数ビューで表示するデモ
  • UnicodeLabelDemo.java
    • ラベルをユニコード文字で表示するデモ。日本語表示も出来る。
  • VertexCollapseDemo.java
    • ノードを選択する方法を色々選べるデモ?
  • VertexCollapseDemoWithLayouts.java
    • CircleLayoutやSpringLayoutでノードを選択するデモ?
  • VertexImageShaperDemo.java
    • ノードを画像で表示するデモ。
  • VertexLabelAsShapeDemo.java
    • ノードをシェイプで表示するデモ。
  • VertexLabelPositionDemo.java
    • ノードのラベル表示方向のデモ。
  • VisualizationImageServerDemo.java
    • Imageを作成するデモ。サーバサイドで計算する想定。
  • WorldMapGraphDemo.java
    • 世界地図の上にノードを重ねるデモ。

EnvjsでjQuery

「サーバサイドJavaScriptjQueryスクレイピングhttp://sakuratan.biz/archives/2972 を参考に、Envjs環境を作ろうとしたのですが、手元の環境ではなかなか動かなかったのでメモです。

手元の環境はMacのLionです。

EnvjsはJavaScriptで書かれたブラウザ環境のシミュレーションで、サーバサイドでDOM操作ができるようです。Rhinoで動いています。



1.公式サイトからダウンロード
http://www.envjs.com/
現在の最新:thatcher-env-js-1.2.13-0-gcb738b9.zip

2.解凍して、出来たディレクトリに移動
cd thatcher-env-js-cb738b9

3.ビルド
ant
成功したら、BUILD SUCCESSFULとでます。

javaとantがインストールされている必要があります。

4.jQuery配置
jQueryをthatcher-env-js-cb738b9直下に置きます。最新の1.7系だと動かなかったので古いものを使いました。
curl -O http://code.jquery.com/jquery-1.4.2.min.js

5.テストプログラムを作成
vi test.js

中身

load('dist/env.rhino.js');
console.log(1);
load('jquery-1.4.2.min.js');
console.log(2);
window.location = "http://www.wikipedia.org/";
console.log(3);
jQuery.ready();
console.log(4);
$('.divOtherProjectsItem a').each(function() {
    var obj = $(this);
    console.log(obj.text() + '>>' + obj.attr('href'));
});
console.log(5);

6.実行
java -jar rhino/js.jar -opt -1 test.js

[  Envjs/1.6 (Rhino; U; Mac OS X x86_64 10.7.3; en-US; rv:1.7.0.rc2) Resig/20070309 PilotFish/1.2.13  ]
   1
   2
いろいろエラー
   3
   4
>>//www.wiktionary.org/
Wiktionary>>//www.wiktionary.org/
>>//www.wikinews.org/
Wikinews>>//www.wikinews.org/
>>//www.wikiquote.org/
Wikiquote>>//www.wikiquote.org/
>>//www.wikibooks.org/
Wikibooks>>//www.wikibooks.org/
>>//species.wikimedia.org/
Wikispecies>>//species.wikimedia.org/
>>//www.wikisource.org/
Wikisource>>//www.wikisource.org/
>>//www.wikiversity.org/
Wikiversity>>//www.wikiversity.org/
>>//commons.wikimedia.org/
Commons>>//commons.wikimedia.org/
>>//meta.wikimedia.org/
Meta-Wiki>>//meta.wikimedia.org/
   5

途中エラーがでつつも一応jQueryでDom解析できました。

ExcelからSQLのINSERT文を作成するマクロ

エクセルのデータからRDB用のSQLを作成するマクロです。シート名をテーブル名、1行目をテーブルのフィールド名として処理します。

サンプル

作成されるSQL

INSERT INTO bookmark (ID,URL,TITLE) values (0,'http://www.google.co.jp/','GOOGLE');
INSERT INTO bookmark (ID,URL,TITLE) values (1,'http://www.yahoo.co.jp/','Yahoo! JAPAN');


マクロ

Option Explicit

Sub createInsertSql()
    Dim newbook As Workbook
    Dim currentCell As Range
    
    '前処理
    Dim srcSheet As Worksheet
    Set srcSheet = ActiveSheet
    
    Dim targetRange As Range
    Set targetRange = srcSheet.UsedRange


    'INSERT文の前半
    Dim head As String
    head = "INSERT INTO " & srcSheet.Name & " ("
    
    Dim first As Boolean
    first = True
    
    Dim currentColumnIndex As Integer
    For currentColumnIndex = 1 To targetRange.Columns.Count
        If (first) Then
            first = False
        Else
            head = head & ","
        End If
        Set currentCell = srcSheet.Cells(1, currentColumnIndex)
        head = head & currentCell.Value
    Next
    head = head & ") "
    

    '新しいBook作成
    Set newbook = Workbooks.Add
    
    'INSERT文のvalues以降
    Dim currentRowIndex As Integer
    For currentRowIndex = 2 To targetRange.Rows.Count
        
        Dim sql As String
        sql = head & "values ("
        first = True
    
        For currentColumnIndex = 1 To targetRange.Columns.Count
            If (first) Then
                first = False
            Else
                sql = sql & ","
            End If
            Set currentCell = srcSheet.Cells(currentRowIndex, currentColumnIndex)
            If IsNull(currentCell) Or Trim(currentCell.Value) = "" Then
                sql = sql & "null"
            ElseIf IsNumeric(currentCell.Value) Then
                sql = sql & currentCell.Value
            Else
                sql = sql & "'" & currentCell.Value & "'"
            End If
        Next
        
        sql = sql & ");"
        
        newbook.ActiveSheet.Cells(currentRowIndex - 1, 1).Value = sql
    Next
End Sub

MySQLで任意のデータベースの全テーブルのレコード数を一覧表示

MySQLで任意のデータベース内の全テーブルのレコード数を一覧表示させるシェルプログラムです。

「show tables」コマンドで全テーブル名を取得して、各テーブルをSelect count(*)した結果をUNIONで繋げてます。

シェル

MYSQL_USR=xxx
MYSQL_PASS=xxx
MYSQL_DB=xxx

TABLES=(`mysql -u${MYSQL_USR} --password=${MYSQL_PASS} -D${MYSQL_DB} -sN -e "show tables"`)
UNION_SQL=""
for TBL in ${TABLES[@]}; do
  UNION_SQL="${UNION_SQL} UNION ALL SELECT '${TBL}' TBL_NAM,count(*) count from ${TBL} "
done
mysql -u${MYSQL_USR} --password=${MYSQL_PASS} -D${MYSQL_DB} -e "${UNION_SQL:11}"


結果

+----------+-------+
| TBL_NAM  | count |
+----------+-------+
| tableA   |     1 |
| tableB   |   113 |
| tableC   |   204 |
+----------+-------+

データ比較用エクセルマクロ(バージョン2)

概要

改修前の調査やテスト時にDBの情報がどう変化したのか見たい事があります。処理の前と後でテーブルのデータをExcelに貼り付けて変化したセルを探したりするのですが、データ数が多いと目視では見つけられなくなります。式で「=[セルA]=[セルB]」と書いてtrue,falseを表示して判定していたのですが、いちいち書いているのも大変になってきたのでマクロを書いてみました。
(以前(2010/10/11)に公開していたコードの改良版です)

使い方

1.エクセルでVisual Basicのエディタを立ち上げて、標準モジュールを追加し、下記のマクロ貼り付けてください。
2.セル範囲を2箇所選択します。選択する行数はそろえてください。列は適当でよいです。選択範囲にかかわらず、A列から最終列まで自動的に比較対象となります。

3.マクロ diffTwoRangesSelectAll か diffTwoRangesSelectAllを実行して下さい。
値が違うセルが選択されて処理が終了します。背景色を手動で変えて終わりです。

マクロ

Public Sub diffTwoRangesSelectAll()
    diffTwoRanges True
End Sub

Public Sub diffTwoRangesSelectAfter()
    diffTwoRanges False
End Sub

Private Sub diffTwoRanges(selectAll As Boolean)
    
    If (Selection.Areas.Count <> 2) Then
        MsgBox "2箇所を選択してください"
        End
    End If
    
    If (Selection.Areas(1).Rows.Count <> Selection.Areas(2).Rows.Count) Then
        MsgBox "選択範囲の行数はそろえてください"
        End
    End If
    
    
    Dim currentCol As Integer
    Dim currentRow As Integer
    
    Dim area1StartRow As Integer
    Dim area2StartRow As Integer
    
    Dim area1Cell As Range
    Dim area2Cell As Range
    
    area1StartRow = Selection.Areas(1).Cells(1).Row
    area2StartRow = Selection.Areas(2).Cells(1).Row
    
    Dim sheet As Worksheet
    Set sheet = ActiveSheet
    
    Dim result As Range
    
    
    Set result = Nothing
    
    
    For currentRow = 1 To Selection.Areas(1).Rows.Count
        For currentCol = 1 To 256
            Set area1Cell = sheet.Cells(area1StartRow + currentRow - 1, currentCol)
            Set area2Cell = sheet.Cells(area2StartRow + currentRow - 1, currentCol)
            
            If (area1Cell.Text <> area2Cell.Text) Then
                If (result Is Nothing) Then
                    Set result = area2Cell
                Else
                    Set result = Union(result, area2Cell)
                End If
 
                If (selectAll) Then
                    Set result = Union(result, area1Cell)
                End If
               
            End If
            
        Next
    Next

    If (result Is Nothing) Then
        MsgBox "違いは見つかりませんでした。"
    Else
        result.Select
    End If
    
End Sub

SvgColorName

JavaのColorクラスの定数値だとバリエーションが少ないので、W3CCSS(?)の文章を元に色の定義を作ってみた。

import java.awt.Color;

/**
 * http://www.w3.org/TR/css3-color/
 */
public class SvgColorName {
	public final static Color ALICEBLUE = new Color(240, 248, 255);
	public final static Color ANTIQUEWHITE = new Color(250, 235, 215);
	public final static Color AQUA = new Color(0, 255, 255);
	public final static Color AQUAMARINE = new Color(127, 255, 212);
	public final static Color AZURE = new Color(240, 255, 255);
	public final static Color BEIGE = new Color(245, 245, 220);
	public final static Color BISQUE = new Color(255, 228, 196);
	public final static Color BLACK = new Color(0, 0, 0);
	public final static Color BLANCHEDALMOND = new Color(255, 235, 205);
	public final static Color BLUE = new Color(0, 0, 255);
	public final static Color BLUEVIOLET = new Color(138, 43, 226);
	public final static Color BROWN = new Color(165, 42, 42);
	public final static Color BURLYWOOD = new Color(222, 184, 135);
	public final static Color CADETBLUE = new Color(95, 158, 160);
	public final static Color CHARTREUSE = new Color(127, 255, 0);
	public final static Color CHOCOLATE = new Color(210, 105, 30);
	public final static Color CORAL = new Color(255, 127, 80);
	public final static Color CORNFLOWERBLUE = new Color(100, 149, 237);
	public final static Color CORNSILK = new Color(255, 248, 220);
	public final static Color CRIMSON = new Color(220, 20, 60);
	public final static Color CYAN = new Color(0, 255, 255);
	public final static Color DARKBLUE = new Color(0, 0, 139);
	public final static Color DARKCYAN = new Color(0, 139, 139);
	public final static Color DARKGOLDENROD = new Color(184, 134, 11);
	public final static Color DARKGRAY = new Color(169, 169, 169);
	public final static Color DARKGREEN = new Color(0, 100, 0);
	public final static Color DARKGREY = new Color(169, 169, 169);
	public final static Color DARKKHAKI = new Color(189, 183, 107);
	public final static Color DARKMAGENTA = new Color(139, 0, 139);
	public final static Color DARKOLIVEGREEN = new Color(85, 107, 47);
	public final static Color DARKORANGE = new Color(255, 140, 0);
	public final static Color DARKORCHID = new Color(153, 50, 204);
	public final static Color DARKRED = new Color(139, 0, 0);
	public final static Color DARKSALMON = new Color(233, 150, 122);
	public final static Color DARKSEAGREEN = new Color(143, 188, 143);
	public final static Color DARKSLATEBLUE = new Color(72, 61, 139);
	public final static Color DARKSLATEGRAY = new Color(47, 79, 79);
	public final static Color DARKSLATEGREY = new Color(47, 79, 79);
	public final static Color DARKTURQUOISE = new Color(0, 206, 209);
	public final static Color DARKVIOLET = new Color(148, 0, 211);
	public final static Color DEEPPINK = new Color(255, 20, 147);
	public final static Color DEEPSKYBLUE = new Color(0, 191, 255);
	public final static Color DIMGRAY = new Color(105, 105, 105);
	public final static Color DIMGREY = new Color(105, 105, 105);
	public final static Color DODGERBLUE = new Color(30, 144, 255);
	public final static Color FIREBRICK = new Color(178, 34, 34);
	public final static Color FLORALWHITE = new Color(255, 250, 240);
	public final static Color FORESTGREEN = new Color(34, 139, 34);
	public final static Color FUCHSIA = new Color(255, 0, 255);
	public final static Color GAINSBORO = new Color(220, 220, 220);
	public final static Color GHOSTWHITE = new Color(248, 248, 255);
	public final static Color GOLD = new Color(255, 215, 0);
	public final static Color GOLDENROD = new Color(218, 165, 32);
	public final static Color GRAY = new Color(128, 128, 128);
	public final static Color GREEN = new Color(0, 128, 0);
	public final static Color GREENYELLOW = new Color(173, 255, 47);
	public final static Color GREY = new Color(128, 128, 128);
	public final static Color HONEYDEW = new Color(240, 255, 240);
	public final static Color HOTPINK = new Color(255, 105, 180);
	public final static Color INDIANRED = new Color(205, 92, 92);
	public final static Color INDIGO = new Color(75, 0, 130);
	public final static Color IVORY = new Color(255, 255, 240);
	public final static Color KHAKI = new Color(240, 230, 140);
	public final static Color LAVENDER = new Color(230, 230, 250);
	public final static Color LAVENDERBLUSH = new Color(255, 240, 245);
	public final static Color LAWNGREEN = new Color(124, 252, 0);
	public final static Color LEMONCHIFFON = new Color(255, 250, 205);
	public final static Color LIGHTBLUE = new Color(173, 216, 230);
	public final static Color LIGHTCORAL = new Color(240, 128, 128);
	public final static Color LIGHTCYAN = new Color(224, 255, 255);
	public final static Color LIGHTGOLDENRODYELLOW = new Color(250, 250, 210);
	public final static Color LIGHTGRAY = new Color(211, 211, 211);
	public final static Color LIGHTGREEN = new Color(144, 238, 144);
	public final static Color LIGHTGREY = new Color(211, 211, 211);
	public final static Color LIGHTPINK = new Color(255, 182, 193);
	public final static Color LIGHTSALMON = new Color(255, 160, 122);
	public final static Color LIGHTSEAGREEN = new Color(32, 178, 170);
	public final static Color LIGHTSKYBLUE = new Color(135, 206, 250);
	public final static Color LIGHTSLATEGRAY = new Color(119, 136, 153);
	public final static Color LIGHTSLATEGREY = new Color(119, 136, 153);
	public final static Color LIGHTSTEELBLUE = new Color(176, 196, 222);
	public final static Color LIGHTYELLOW = new Color(255, 255, 224);
	public final static Color LIME = new Color(0, 255, 0);
	public final static Color LIMEGREEN = new Color(50, 205, 50);
	public final static Color LINEN = new Color(250, 240, 230);
	public final static Color MAGENTA = new Color(255, 0, 255);
	public final static Color MAROON = new Color(128, 0, 0);
	public final static Color MEDIUMAQUAMARINE = new Color(102, 205, 170);
	public final static Color MEDIUMBLUE = new Color(0, 0, 205);
	public final static Color MEDIUMORCHID = new Color(186, 85, 211);
	public final static Color MEDIUMPURPLE = new Color(147, 112, 219);
	public final static Color MEDIUMSEAGREEN = new Color(60, 179, 113);
	public final static Color MEDIUMSLATEBLUE = new Color(123, 104, 238);
	public final static Color MEDIUMSPRINGGREEN = new Color(0, 250, 154);
	public final static Color MEDIUMTURQUOISE = new Color(72, 209, 204);
	public final static Color MEDIUMVIOLETRED = new Color(199, 21, 133);
	public final static Color MIDNIGHTBLUE = new Color(25, 25, 112);
	public final static Color MINTCREAM = new Color(245, 255, 250);
	public final static Color MISTYROSE = new Color(255, 228, 225);
	public final static Color MOCCASIN = new Color(255, 228, 181);
	public final static Color NAVAJOWHITE = new Color(255, 222, 173);
	public final static Color NAVY = new Color(0, 0, 128);
	public final static Color OLDLACE = new Color(253, 245, 230);
	public final static Color OLIVE = new Color(128, 128, 0);
	public final static Color OLIVEDRAB = new Color(107, 142, 35);
	public final static Color ORANGE = new Color(255, 165, 0);
	public final static Color ORANGERED = new Color(255, 69, 0);
	public final static Color ORCHID = new Color(218, 112, 214);
	public final static Color PALEGOLDENROD = new Color(238, 232, 170);
	public final static Color PALEGREEN = new Color(152, 251, 152);
	public final static Color PALETURQUOISE = new Color(175, 238, 238);
	public final static Color PALEVIOLETRED = new Color(219, 112, 147);
	public final static Color PAPAYAWHIP = new Color(255, 239, 213);
	public final static Color PEACHPUFF = new Color(255, 218, 185);
	public final static Color PERU = new Color(205, 133, 63);
	public final static Color PINK = new Color(255, 192, 203);
	public final static Color PLUM = new Color(221, 160, 221);
	public final static Color POWDERBLUE = new Color(176, 224, 230);
	public final static Color PURPLE = new Color(128, 0, 128);
	public final static Color RED = new Color(255, 0, 0);
	public final static Color ROSYBROWN = new Color(188, 143, 143);
	public final static Color ROYALBLUE = new Color(65, 105, 225);
	public final static Color SADDLEBROWN = new Color(139, 69, 19);
	public final static Color SALMON = new Color(250, 128, 114);
	public final static Color SANDYBROWN = new Color(244, 164, 96);
	public final static Color SEAGREEN = new Color(46, 139, 87);
	public final static Color SEASHELL = new Color(255, 245, 238);
	public final static Color SIENNA = new Color(160, 82, 45);
	public final static Color SILVER = new Color(192, 192, 192);
	public final static Color SKYBLUE = new Color(135, 206, 235);
	public final static Color SLATEBLUE = new Color(106, 90, 205);
	public final static Color SLATEGRAY = new Color(112, 128, 144);
	public final static Color SLATEGREY = new Color(112, 128, 144);
	public final static Color SNOW = new Color(255, 250, 250);
	public final static Color SPRINGGREEN = new Color(0, 255, 127);
	public final static Color STEELBLUE = new Color(70, 130, 180);
	public final static Color TAN = new Color(210, 180, 140);
	public final static Color TEAL = new Color(0, 128, 128);
	public final static Color THISTLE = new Color(216, 191, 216);
	public final static Color TOMATO = new Color(255, 99, 71);
	public final static Color TURQUOISE = new Color(64, 224, 208);
	public final static Color VIOLET = new Color(238, 130, 238);
	public final static Color WHEAT = new Color(245, 222, 179);
	public final static Color WHITE = new Color(255, 255, 255);
	public final static Color WHITESMOKE = new Color(245, 245, 245);
	public final static Color YELLOW = new Color(255, 255, 0);
	public final static Color YELLOWGREEN = new Color(154, 205, 50);
}