ホーム > President Blog : Sophia Cradle Incorporated

President Blog : Sophia Cradle Incorporated

President Blog

2005 年 10 月 09 日 : チャレンジング 

大学受験を目前にした頃、どの学部に入学すべきかについて迷っていた。結局その選択が今の自分を運命付けた。その時違う道を進んでいたら今頃…という想像もできるけど、個人的に最善の決断をしてきたと思っている。

今でこそコンピューターは子供の時からの身近な存在であるが、当時、大抵の人にとっては大学でコンピューターに触れるという感じだった。初めてコンピューターに 2 進数で記述された自分のプログラムをインプットしそれは問題なく動作した。その時に味わった感動は今でも忘れられない。プログラミングに深い興味を持ったのもその瞬間で、それからずっとプログラミングの仕事をしている。

プログラムとは、人がコンピューターへ送るメッセージを表現するものである。コンピューターが発明された当初は文字通り 0 と 1 からなる 2 進数で記述するしかなかったので専門家にしか使えない代物だった。ほどなくして日常の言葉に近いプログラミング言語が発明された。コンピューターが止め処無く進化発展を遂げている理由のひとつはプログラミング言語の発明によるものだ。

日常生活において当たり前に使っている電気製品。そのほとんどはプログラミング言語で記述されたプログラムに従ってコントロールされていている。それを考えると、プログラミング言語の果たす役割は偉大である。

そういうことがあって、あるプログラムを開発するというよりはあらゆるプログラムを記述するためのプログラミング言語に関連のある仕事に携わりたい。それが初めてコンピューターに触れたときから今日に至るまで一貫して持ち続けている自分の目標である。

プログラミング言語に求められるものとは何なのだろう。それは自然言語と比較してみると、コンピューターに自分の心の中にある思いや考えがストレートに正しく伝わるというところにありそうな気がする。しかし誰もが簡単にプログラミングできるわけではなく、ほんの一握りの人たちしかプログラマーになり得ない現実がある。それ故、ビジネスのポテンシャルも計り知れないほどに存在しているといえるのではないだろうか。

2005 年 10 月 07 日 : エンドレスな軌跡

販売すべきソフトウェア製品が完成した今、ソフィア・クレイドルのビジネスは単純に次の方程式で表現できる。(ライセンスビジネスなので [売上] = [粗利益] )

[粗利益] = [製品の種類] × [販売価格] × [販売数量]

この方程式の利益を最大化する目的の一種のゲームを考えてみよう。このとき、ゲームに勝利するには「製品の種類」「販売価格」「販売数量」の各パラメーターを最大化する方法を発見すれば良い。人的にも物的にも資金的にもいろんな制約条件がある。だからこれら三つのパラメーターは相矛盾し同時にプラスというわけにはいかない。それ故にアーティスティックなバランス感覚が要求される。

恐らく重要なのは経営におけるプライオリティであろう。プライオリティとはどのようにして設定するのがベストだろうか。起業家ごとに経営のスタンスは異なる。経営に対する自分の思いを表現する姿勢が問われる事柄だ。

できる限り長くソフィア・クレイドルが存続できるようにという思いが私のスタンスである。歴史を振り返った時にある事実に気付いた。どんな組織も範囲を拡大しようとするあまり却って衰退を加速するのではないだろうかということだ。ローマ帝国、モンゴル帝国、古代中国の秦など、あらゆる組織が巨大化することによって繁栄は築けても結果として必ず崩壊を余儀なくされている。だからソフィア・クレイドルの存続を願うには、できるだけ少人数で運営する仕組みやシステムこそが最もプライオリティが高いと考えている。

そのためには「販売価格」を高値で維持することが最も近道ではあるが、一般に製品価格と販売数量は反比例の関係にあって製品価格を高くするとその分製品の販売数量は減少する。

ではどうすれば良いかというと量より質を追求することである。この場合の量とは製品の種類のことである。製品の種類が多ければ多いほど開発や販売に携わる人の数は増える。だからと言って新製品は売れるとは限らない。大抵の新製品はマーケットからすぐ姿を消している。

ある種のヒット製品には限りなく売れ続けるというマーケットの側面がある。コンピューター業界ではそれが顕著である。Windows、Intel、Apple、ORACLE、Adobeなどの製品は寡占状態とも言える。販売する製品を限りなく絞ってヒットさせれば、同時に販売数量も最大化されるのではという未来が予想できる。

製品を販売し受注し出荷する業務そのものをシステムとしてIT化すれば、ソフトウェア製品なので販売数量が増えても人員を増やすことなく単純にコンピューターをグレードアップしたり台数を増やすだけで済む。至極シンプルなビジネスモデルが出来上がる。

もう一つ大切なことがある。それは絞り込んだ製品がロングレンジに渡って売れ続けるかどうかという視点だ。ロングセラーをどうやって発見するかが真の課題なのだ。IT 業界の場合、私たちが日常で使っている言語(言葉)から類推してプログラミング言語の周辺にあるのではないかという仮説を立てることができる。日本語も英語にしてもあらゆる言葉について言えるのは何百年間もその基本形は変わっていないということだ。

IT 業界では、次から次へと限りなく新製品の発売が繰り返されている。しかしそのコンピューターを動かしているソフトウェアそのものを記述しているプログラミング言語の大半は C/C++ や Java もしくは BASIC だ。ドッグイヤーとかラットイヤーとか言われて慌しい IT 業界でも、それを記述するプログラミング言語の世界では時が止まっているがごとしである。

1975年、ビル・ゲイツ氏が率いるマイクロソフトの歴史がスタートした。マイクロソフトの最初の事業は BASIC というプログラミング言語に関連するものであった。その BASIC は名こそ Visual BASIC と変われども、30年以上時を経た今も売れ使われ続けている。

果てしなくひろがるビジネスのヒントはこんなところに隠されていたりする。

2005 年 10 月 06 日 : テレポーテーション

テレポーテーションとは物体がある地点から別のある地点へ距離の隔たりを超えて瞬間的に移動する現象のことをいう。このSFめいた話が現実のものと空想してみた時、私たちのビジネスの価値はまさしくこれじゃないのかと思った。

x,y,z軸から構成される3次元空間に状態s軸を導入して4次元空間へと拡張してみる。もしお客様がソフィア・クレイドルの製品を手にすれば、例えばプログラムの圧縮作業とかユーザーインターフェースの開発作業とかをショートカットして瞬間的に次の状態に移り変わる。

ある意味でこの状態遷移は一種のテレポーテーションというわけで、視点を変えれば夢のような出来事を私たちは実現しているんだと自負することもできる。

その時注意が必要なのは、テレポーテーションする際の安全性ではないだろうか。『ザ・フライ』ではテレポーテーションの際のささいなバグが悲劇を招いた。それは私たちの製品の未来にとって重要な教訓になりそうな気がする。

想像以上に便利なツールであるからこそ、安全性というものに細心の注意を払わなければならない。

2005 年 10 月 05 日 : 計り得ぬ価値創造

2005年10月3日、新月の日。ソフィア・クレイドルの第5期がスタートした。それに併せるように期待の新作 SophiaFramework Ver 3.0(β) を発表した。βとは言え実際のところ製品となんら遜色はない。

Chief Software Architectがしばらくの間、調整の休養をとるので万全を期してβにしただけ。創業以来3年半以上もの時間をかけて開発した渾身の作品である。不眠不休で仕事に没頭する景色にオフィスが彩られることもあった。

リフレッシュして新たな創作活動をするには長期休養が必要なときもある。最近、山下達郎やサザンオールスターズが相次いで6〜7年振りに新作をリリースしている。プロフェッショナルな傑作を世に送り出そうとすればそれなりに歳月がかかるものだ。あるときは何も考えずエンドレスに過ごす時の流れにも意味を見出せる。そんなひと時があるから数字に換算できないほどの価値が生まれる。

創業当初、マーケティングとイノベーションのマネジメントの両面で苦戦することも多かった。でも期を5回重ねるとなるとマネジメントも安定感が桁違いに増してくる。その時ある人は完全無欠なビジネスプランを書き下して、株式上場というようなプランを思い描いたりする。

第5期という事業年度を迎えて思うのは、売上や利益といった数字より遥かに価値があることってあるんじゃないの、ということだ。例えば、名作、名曲といわれる絵画や文学、クラシック音楽というものは数字に換算できないということである。むしろそんなものの方がロングレンジに構想するのならば価値がありそうに思えてくる。

ソフィア・クレイドルの経営の根幹は、そういった過去の歴史の過程を経て現代までに伝わってきた数々の作品の影響を強く受けている。

経営が安定してきた今こそ、目標とすべきは時を超えて生きる作品の創作活動ではないかと思ったりする。傑作と称される作品ほど定められた計画とは別の領域で創られるような気がする。何らかの秘訣は確かにありそうだ。

数字には換算できない価値を創造すること。ソフィア・クレイドルの目標は変化しつつある。

2005 年 10 月 04 日 : 253倍のスピードアップ

従来、組込みソフトC++言語でプログラミングされることはほとんどなかった。何故ならCPUスピードやメモリ容量などのハードウェア的な制約があるからだ。しかしPCのソフトはどうだろうか?限りなく多くの人々が利用する製品レベルのソフトほどC++言語でプログラミングされている。

例えば、Javaシステムの核ともいえるJavaVMもC++言語で実装されているものが多い。Macromedia社の著名なあるソフトでもクラッシュ直後にC++のエラーメッセージが表示されるのを目撃したりする。

昨日、ソフィア・クレイドルが発表したSophiaFrameworkという製品は、組込みソフトが実用レベルでC++プログラミングできるという革新に最大の特長がある。試験的に速度の向上を計測したところ、下記レポートにあるように最大253倍のスピードアップが確認された。

飛行機の発明のおかげで人々は世界の大空を自由に駆け巡れるようになった。同じく、ハードウェア制約の厳しい組込みの世界で桁違いのスピードアップを狙うのならば何らかの抜本的なブレークスルーが必要である。前回のリリースからこの1年半以上に渡る期間というものは、ひたすらこのイノベーションに捧げられたといっても過言ではない。

スタッフの計測実験レポート。
---------------------------------------------------------------------------
SophiaFramework3.0の新旧の性能比較は以下の通りです。

文字列はどのアプリケーションでも多用される基本的なオブジェクトです。新バージョンのSophiaFrameworkでは文字列処理にかかるコストが大幅に削減されました。文字列以外のオブジェクトももちろん最適化されています。例えば、コレクションクラスなどは構造自体が変化しているので、単純な比較はできません。ここでは文字列クラスを取りあげ、どの程度速度が向上しているかを示します。


■例1:文字列の追加

void func1() {
int i, j, sum;
SFXAnsiString str; // 旧バージョンではSFUAnsiString

sum = 0;
for (i = 0; i < 10; i++) { // 10回計測
int startms = GETTIMEMS(); //計測開始
for (j = 0; j < 1000; j++) { // 1000回実行
str += "abcdef"; //文字列の追加(今までの文字列に"abcdef"を追加)
}
int endms = GETTIMEMS(); //計測終了
DBGPRINTF("%d", endms - startms);
sum += endms - startms;
}
DBGPRINTF("avarage = %d", sum / 10);
}

計測された時間(単位は ms)

旧バージョン 2.2
246
691
1161
1698
2269
2802
3348
3849
4364
4909
average = 2533

新バージョン 3.0
10
11
10
10
10
10
10
11
10
10
average = 10

解説

文字列 str に繰り返し "abcdef" 文字列 を追加していく動作です。
例えば、ネットワーク通信で受信した文字列を今ある文字列に次々に追加していく場合、このようなコードが出てきます。

SophiaFramework 旧バージョンでは文字列の追加のたびに新しいインスタンスを生成したため、大幅な時間のロスとなっていました。新バージョンではこのようなロスをなくし、時間短縮がなされています。


■例2:文字列の検索

void func2() {
int i, j, sum, temp;
SFXAnsiString str; // 旧バージョンではSFUAnsiString

sum = 0;
for (i = 0; i < 10000; i++) { // 文字列の準備(abcabc... と続く文字列を用意し、途中に"SophiaFramework3.0"の文字列を挿入したものを用意する)
if (i == 5000) str += "SophiaFramework3.0";
else str += "abc";
}
for (i = 0; i < 3; i++) { // 3回計測
int startms = GETTIMEMS(); //計測開始
for (j = 0; j < 100; j++) { // 100回実行
temp += str.IndexOf("SophiaFramework3.0"); //文字列の検索(何文字目にあるか)
}
int endms = GETTIMEMS(); //計測終了
DBGPRINTF("%d %d", endms - startms, temp);
sum += endms - startms;
}

DBGPRINTF("avarage = %d", sum / 3);
}

計測された時間(単位は ms)

旧バージョン 2.2
7019
6998
7008
average = 7008

新バージョン 3.0
1281
1299
1280
average = 1286

解説

長い文字列から"SophiaFramework3.0"の文字列が何番目にあるかを探しています。
こちらも効率化により時間が短縮されています。

■例3:文字列の置き換え

void func3() {
int i, j, sum;
SFUAnsiString str; // 旧バージョンではSFUAnsiString
SFUAnsiString temp_str;

sum = 0;
for (i = 0; i < 10000; i++) { // 文字列の準備
if (i == 5000) str += "SophiaFramework2.2";
else str += "abc";
}
for (i = 0; i < 3; i++) { // 3回計測
int startms = GETTIMEMS(); //計測開始
for (j = 0; j < 10; j++) { // 10回実行
temp_str = str.Replace("SophiaFramework2.2", "SophiaFramework3.0"); //文字列の置換
}
int endms = GETTIMEMS(); //計測終了
DBGPRINTF("%d %d", endms - startms, temp_str.Length());
sum += endms - startms;
}

DBGPRINTF("avarage = %d", sum / 3);
}

計測された時間(単位は ms)

旧バージョン 2.2
3741
3741
3724
average = 3735

新バージョン 3.0
626
626
626
average = 626

解説

長い文字列から"SophiaFramework2.2"の文字列を見つけ出し、"SophiaFramework3.0"に置換しています。

以上

2005 年 10 月 03 日 : BREW アプリ開発環境 “ ソフィア・フレームワーク ” の C++ 機能を強化

[PRESS RELEASE]

ソフィア・クレイドル、BREWアプリ開発環境“ソフィア・フレームワーク”のC++機能を強化

〜スピードとメモリに関して携帯電話ハードウェア制約を克服し、BREW向けC++開発環境を実用化


[概要]

携帯電話向けソフト開発の株式会社ソフィア・クレイドル(本社:京都市、代表取締役社長:杉山和徳、以下 ソフィア・クレイドル)は、BREW【※1】アプリをC++【※2】で開発できる“SophiaFramework”【※3】をバージョンアップしました。スピードとサイズ、信頼性の観点からC++ライブラリの体系を見直し、刷新しました。その結果、BREWアプリをC++によって実用的に開発することが可能になりました。2005年10月3日から同製品β版無償トライアル受付を同社ホームページにて開始します。


[詳細]

携帯電話向けアプリは大規模化し複雑化する一方、開発期間は逆に短縮化される傾向にあり、開発生産性の向上はこの業界最大の課題です。PC向けアプリ開発では、再利用可能な“クラス”と呼ばれるモジュール群の組み合わせによってアプリを開発する、“オブジェクト指向アプローチ”によりこの課題は解決されています。

“オブジェクト指向アプローチ”では生産性は向上するものの、一般にそのアプリはスピードが遅く、サイズも大きくなるという欠点があります。PCと比較してハードウェア資源が圧倒的に劣る携帯電話ではこれが最大のボトルネックとなり、これまでこのアプローチが採られることはありませんでした。

この度、ソフィア・クレイドルはBREW向けアプリ開発環境“SophiaFramework”を“C++”と呼ばれるオブジェクト指向プログラミングの機能を中心にバージョンアップしました。それによって世界で初めてBREWアプリを“C++”で開発できる環境の実用化に成功しました。特長はスピード劣化を抑えた上で、コンパクトなサイズで、しかも信頼性の高いBREWアプリを簡単かつ短期間で開発できることです。“オブジェクト指向アプローチ”の再利用性を活かして、高度なアプリを過去のアプリ資産をベースにして重層的に開発することすら可能です。また、理解しやすく、不具合が生じにくいプログラミングスタイルも提供します。

2005年10月3日より同製品β版無償トライアル受付を同社ホームページにて開始します。価格は1ライセンス30万円(税抜)から。ソフィア・クレイドルは年間500ライセンス以上販売することを見込んでいます。

無償トライアル受付URL : リンク
SophiaFramework URL : リンク
本プレスリリースURL : リンク

■SophiaFramework Ver.3.0 の主な機能拡張
 1.新しいクラスおよび関数の追加
  ・乱数クラス
  ・日付クラス
  ・DNS 解決クラス
  ・ブロックアロケーションをサポートするヒープ管理クラス
  ・POP3・SMTP プロトコルを扱うメール送受信クラス
  ・ARM 組み込みライブラリを利用可能にする関数
 2.既存ライブラリの改良による開発支援の強化
  ・コードサイズと速度の最適化
  ・シミュレーター上でのメモリの確保・解放追跡機能強化
 3.BREW 3.1対応
 4.Visual Studio.NET とRealView Compilation Tools for BREWに対応

以上


■用語解説

【※1】BREW
読み方:「ブリュー」または「ブルー」
2001年1月に米国クアルコム社が発表した携帯電話向けソフトウェアの規格。「ブリュー」もしくは「ブルー」と読む。異なる携帯電話機のOSの仕様差を吸収し、単一のコンパイル後のプログラムをインターネットからダウンロードし、さまざまな携帯電話機でそのまま高速に動作できるように設計されている。日本ではKDDIが2003年2月よりBREWサービスを提供開始。NTT ドコモの一部の機種でBREWが採用されている。2005年10月現在、世界で24ヶ国45 の通信キャリアが採用しており、世界的な規模でその普及が急速に進んでいる。 

【※2】C++
読み方:「シープラスプラス」または「シープラプラ」
再利用可能なモジュールを組み合わせてプログラミングする、オブジェクト指向アプローチの観点からC言語を拡張したプログラミング言語。モジュール性と再利用性の観点から、C++によってプログラムの開発生産性が向上するに止まらず、保守性にも優れるというメリットがある。プログラムのスピードが遅くなり、サイズも大きくなるという点をデメリットとして挙げることができる。

【※3】SophiaFramework
読み方:ソフィア・フレームワーク
ソフィア・クレイドルが2002年8月に発表した、BREWアプリをC++プログラミングで開発することを世界で初めて実現した唯一のBREW向けC++オブジェクト指向開発環境。ユーザーインターフェース、通信、グラフィック描画、文字列処理など、ビジネス、コンテンツ、ゲームなどジャンルを問わず、あらゆるBREWアプリを開発するのに必要十分な“クラス”と呼ばれるプログラムモジュール群がラインナップされている。すでにKDDI公式EZアプリ(BREW)やビジネス系BREWアプリで多数の導入実績がある。

続きを読む "BREW アプリ開発環境 “ ソフィア・フレームワーク ” の C++ 機能を強化" »

2005 年 09 月 28 日 : +∞ のソフト技術

SF 作家の George Johnson 氏の的を射たコメントからもうひとつ。

"コンピューターは自分自身をてこにして進化発展を遂げる性質を持つ。言い換えれば、未来のコンピューターは現代の進化したコンピューターを使って創られるということだ。このサイクルは停止することなく永遠であり無限にポジティブフィードバックのスパイラル曲線を描く。"

過去の歴史を紐解けば、George Johnson 氏が述べるプロセスを経てコンピューターは進化発展し今日に至っている。職人によって施される幾重にも重層的に漆塗りされた漆器に味わい深さを覚えるあのフィーリングに近いかもしれない。そんな無限大"+∞"に通じる流れに身をゆだねる姿勢から未来への理想の結果が生じるのではないだろうか。

未来にタイムトリップして世界を展望した時。多層的な構造を織り成すユビキタスなソフトウェアについて願うこと。そのソフトを構成するいくつかの層は、ソフィア・クレイドルのソフト技術によるものであってほしい。

携帯電話向けソフト技術で重層的な構造を持つものはほとんどないが、過去のコンピューターの潮流から洞察すればそうなることは自明のことのように思われる。何年先かと時期を特定することは叶わない。けれども早かれ遅かれそんな時代は自ずとやってくるだろう。

2005 年 09 月 27 日 : +0 のソフト技術

無限小 Infinitesimal の値 +0 は、0 よりは大きいけれども如何なる正の実数よりも小さな数として数学的に定義される。

SF 作家の George Johnson 氏が興味深い発言をしている。

"情報には質量や重さといった概念がない。だからコンピューターは実体のあるモノを扱う従来の機械とは違い何処までも無限に小さくできる。"

ムーアの法則は「半導体の集積密度は 18 〜 24 ヶ月で倍増する」という法則である。換言すれば"同じ機能のコンピューター"が 18 〜 24 ヶ月ごとに 2 分の 1 だけ小さくなるということだ。

ムーアの法則が永遠に成り立つとは一般には思われていない。いつか限界が来るとほとんどの人は思い、そこに思考の壁を自ら作っている。半導体を前提としたコンピューターについては当てはまるかもしれない。しかし"コンピューター"と"半導体"は独立した事象と捉えた方が思考そのものが自由に解き放たれ発想がひろがる。

ソフィア・クレイドルの究極のビジョンは、George Johnson 氏がいう無限小の値 +0 のサイズにまで超小型化されたコンピューターにおけるソフトウェア技術面でのブレークスルーである。だからこそ" +0 のコンピューター"向けソフトを記述するためのプログラミング言語とその言語によって記述されたソフトを圧縮する技術に非常にこだわりがある。

肉眼では見えないほど微細な生物細胞の核にあるといわれる遺伝子 "DNA" には、現代のコンピューターでも瞬時に解読できないほどの情報が内在する。

無限小 +0 コンピューターの謎を解く鍵はあらゆる生命が持つ玄妙な本質にあるのかもしれない。

続きを読む "+0 のソフト技術" »

2005 年 09 月 24 日 : Blog検索エンジン考

BLOGを書く人が増えている。

それに伴って膨大なBLOG情報がインターネットに溢れるようになってきた。自分にとって価値のあるBLOGを見つけ出せないジレンマに陥る傾向に拍車がかかる。BLOG 検索エンジンが次のビジネスチャンスになりそうだ

BLOG 自体はシステム的に複雑でなくて、それなりの人が取り組めば実現可能なソフトウェア技術である。その証拠に世界中でいろんな人が様々なBLOGシステムを開発し発表している。

しかしBLOG 検索エンジンに関しては従来のソフトウェア技術をブレークスルーするものをいまだ知らない。自分のフィーリングに合ったBLOGを検索する術がない。

新しいBLOG検索エンジンに関してひとつ思うことがある。BLOGというのはひとつの著作であり、一般的な傾向としては自分にとって読む価値のあるものは、文体や言葉、その連なり、その音の響きが自分のとって何処となく心地よいものではないか。

SPAMメールを排除するシステムには学習させることによってメールの内容からSPAMと判別するものがある。個人的に利用しているSPAMメールフィルターにはこの"ベイズ理論"という数学の確率理論が使われている。その精度に満足している。

ネットで調べると、Thomas Bayes氏は18世紀に生きた、聖職者兼数学者のイギリス人だったらしい。何百年も前の数学的理論が現在のコンピュータに応用されているだけに、Thomas Bayes氏の偉大さが窺い知れる。

"ベイズ理論"によれば、ある事象が発生する確率は過去の同じ事象の発生頻度によって概ね予測できるという。言い換えれば、その原因から起こる結果についての確率が分かれば、その結果を引き起こす原因が分かり未来を見渡せるということである。

この理論を応用し、自分のフィーリングの尺度でBLOGを数値化できれば、その人にとって心地よい新しいBLOG検索エンジンが創造できるかもとふと閃いた。

続きを読む "Blog検索エンジン考" »

2005 年 09 月 23 日 : ランニングハイ

9月23日金曜日。

今日になって、MR.CHILDREN の 1 年 5 ヶ月ぶり 12 枚目のアルバム"アイ ラブ ユー"を入手したので早速聴いてみた。(歌詞カードのデザインがユニークで美しかった)

そのなかでもお気に入りの曲は"ランニングハイ"。

   息絶えるまで駆けてみよう
   恥まき散らして
   胸に纏う玉虫色の衣装を見せびらかしていこう

ベンチャー起業にもこんな雰囲気がないと何事も成就しないのではないだろうか。

思うままに信じるままに全力を振り絞って駆ける軌跡の、その先に輝ける何かがあると信じている。それに心地良さを感じる。

全力疾走は最初の助走段階では耐え難い苦しさがある。しかしそれを乗り越えれば"ランニングハイ"の世界だ。新しい出来事の発見に爽快感を得てポジティブな気持ちで。

<前のページ | 次のページ>

 1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  10  |  11  |  12  |  13  |  14  |  15  |  16  |  17  |  18  |  19  |  20  |  21  |  22  |  23  |  24  |  25  |  26  |  27  |  28  |  29  |  30  |  31  |  32  |  33  |  34  |  35  |  36  |  37  |  38  |  39  |  40  |  41  |  42