輝々凛々

ガンバるってことは、素晴らしい事だ。

エレベーターは「開く」ボタンだけでいい

昔、エレベーターのUIについて次の記事を書いた。
「開」さん、そんな文字、似合いませんよ。
でも、今にして思えば、「開く」だけで、いいじゃん別に。

理由1

「閉じる」ボタンを押したい理由がそもそもない。最近の扉は、だいたい自動で閉まるし、よりインテリジェントに人が出入りしているときは閉まらないようになっている(センサー素晴らしい!)。

「急いでいるときに閉めたい」ということも考えられるが、むしろ「閉める」ボタンを押そうとした瞬間に閉じ始めた経験の方が多い。あと「閉める」ボタンを押すことがマナーのようになっている節もあって、そんな空気を読む不思議マナーは消え去って欲しい。

あとは「状態表示」の役割を担っている可能性は否定しないが、それは、後述する。

理由2

「開く」ボタンだけで事足りる。センサー技術の進歩によって、勝手に開いたり、閉じたりはするものの、やはり誤動作があると怖いものもある。そこで「開く」ボタンは必要だと思う。

あと「理由1」の最後に書いた「閉じるの状態表示」については、単に、閉じようとしているときは「開くボタンが点滅状態」すればいいと思う。開いているときは「開くが光った状態」で良いし。閉じ終わった後の状態を表示する必要はないし。開いている最中は、ボタンが押されて光っているか、自動的に開こうとしているときなので、光らせておけばいい。

連載「データベース技術」:3つのデータモデル

前回「連載「データベース技術」:データモデルとは?」では、データモデルについて説明しました。今回は、データモデルにも種類があるってことを説明したいと思います。

3つのデータモデル

前回の例では、家計簿をデータベースにしようということで、下記の表を考えました。

日付金額目的
2013-2-11¥2,940理工書
2013-2-15¥346 食費
2013-2-16¥280 珈琲

この程度の表を作る程度であれば、簡単に現実世界の情報をピックアップし、データモデルを作り、実際にデータを作ることは簡単にできそうです。

ですが、実際には3つのデータモデルを順に作成します。

現実世界の情報 概念データモデル 論理データモデル 物理データモデル

まず現実世界の情報を、概念データモデルにし、さらに論理データモデルにし、物理データモデルにします。

直接、現実世界の情報をデータベースに入力するようなことはしません。

理由は、おおよそ、下記のようなものです。

  1. 要求の変化に柔軟に対応するため
  2. データベース管理システム(DBMS)の変化に対応するため
  3. データモデルの不具合が、全体に波及しないように

それぞれの役割は、下記の通りです。

概念データモデル
現実世界の情報を、そのままの形で記録したものです。ユーザーからの見た目をそのまま記述します。だからこそ、データベース管理システム(DBMS)に依存しないように作成します。扱う情報に適切な名前をつけます。その情報が取り得る値の範囲を蹴ってします。数値であれば上下限値、小数であれば桁数。文字であれば文字数や使用可能文字などです。また、その情報が他の情報とどういう関係があるかを記録します。先の家計簿で言うと、日付、金額、目的が概念データモデルです。
論理データモデル
概念データモデルをデータベース管理システム(DBMS)に入力するために作成します。ようわ、概念データモデルをDBMSに入力すると、それがそのまま論理データモデルです。ただ、入力するためにはある程度変形は必要かと思います。先の家計簿で言えば、Excelの表形式にします、というのが論理データモデルです。
物理データモデル
物理的な記録媒体への格納方法を示したものです。ファイルにするのか、何にするのか、です。先の家計簿で言えば、Excelファイルのファイル形式が、物理データモデルです。

ということで、次回は、もっと詳しく説明しましょう。

連載「データベース技術」:データモデルとは?

前回「連載「データベース技術」:データベースとは?」は、データベースというものが、現実の情報を分析し、収集し、利用するための技術である事を説明しました。今回は、そのうちの分析に関わる重要な概念「データモデル」を説明します。

データモデルとは?

まず最初に下表のような家計簿を考えます。

日付金額目的
2013-2-11¥2,940理工書
2013-2-15¥346 食費
2013-2-16¥280 珈琲

この表には、現実世界の3つの情報が書き込まれています。それは「日付」、「金額」、「目的」です。そして具体的な値として、私の財布に入っていたレシートを書き写しています。

この表を作る際、私は、何気なく管理したい情報をピックアップし、何気なく情報に名前を付けています。そして、名前のついた情報に対し、何気なく表にして、何気なく具体的なデータを収集しています。

このように管理したい情報をピックアップし、名前を付ける行為を「データモデリング」、あるいは「モデル化」と言います。

そして、この名前のついた情報が「データモデル」です。(あくまで、「大雑把に言えば」です。)

先ほどの家計簿で言えば、「表には“日付”と“金額”と“目的”があります」という情報がデータモデルです。具体的な値である「2013年2月16日に珈琲を280円で買った」という情報は単にデータと呼びます。これは最早、立派なデータベースです♪

データモデルとデータベース管理システム

さて、現実の業務で扱うデータとなると、今回の家計簿よりも複雑に絡み合っている情報を扱う事になります。それには、普通、データを管理するためのソフトウェア群であるデータベース管理システムを使用します。

もちろん、そこに「データモデル」が登場します。

データを管理するのですから、どういった項目があって、入力されるのかを把握する必要があります。先ほどの例で言うところの列名“日付”、“金額”、“目的”ですね。

ということで、データモデルは最終的には、最終的にはデータベース管理システムに入力し、そこで管理されるものになります。

ただ、それを直接やってしまうことも少々危険で・・・、という話はまた次回。

今日は、以上で。

次回→連載「データベース技術」:3つのデータモデル

連載「データベース技術」:データベースとは?

データベーススペシャリスト試験の受験を宣言し、勉強開始したのは、もう1月ほど前になります。(「データベーススペシャリストに俺はなる!」です)さて、それから、いろいろ本も読んでみて、自分ならもっとわかりやすく書けるのになぁ、と思ったので、書いてみます。

勉強中の自分の頭の中の整理のためのアウトプットでもあるので、間違えてるところなどあるかもしれません。また面倒くさくなって、途中放棄する可能性もありますが、なるべく後から、この記事を読んだ人も合格へ一歩でも近づけるよう書いておきます。

データベースとは

まず、データベーススペシャリストになるのだから、「データベース」を定義します。データベースは、英語で書けば「Database」あるいは「data-base」で、「情報基地」とでも日本語に訳せます(が、普通は、そんな言い方しません)。

つまり、データベースとは情報資源を管理する技術です。

データベースには、現実世界の情報を蓄えておきますが、当然、情報は貯めてるだけでは意味がありません。また不要なデータを貯めることも意味がありません。データベースという技術は、現実世界の情報を必要なだけ分析し、収集し、そして利用するための技術です。

データベース技術の要素技術の分類

雑多に分類すると、次のようになります。

  • 設計:情報の分析し、データにするための技術
  • 運用:データを収集し、利用するための技術
  • 他:トラブル対策や他技術との連携などなど、細かな技術がたくさん

上記のうち、データベーススペシャリスト試験に登場するのは、全部です。ただ、データベース関連のソフトウェアについての固有の問題は出てきません。あくまでも基礎的な内容です。

たとえば、情報の分析ってどうやるのか、それを現実世界の情報の変化に合わせて、どうメンテナンスしていくのか、そういったものは、本来は多くの経験に成り立つものです。データベーススペシャリスト試験を勉強する事は、これまで数多くの技術者が体験してきた知恵を疑似体験し、何十年もの知識をわずか数ヶ月のうちで手に入れられることになります。

能書きはいい

というわけで、まず、第一回、データベース技術は終了です。

また次回→「連載「データベース技術」:データモデルとは?」。

男女の違い:相談

恋愛に関する男女の違い、みたいなテレビ番組をやっていたのを見たので、ちょっとその話。

女性の相談は「話を聞いてほしい」や「意見を聞かせてほしい」といった観点で話している。

一方、男性の相談は「解決したい」になる。

これでは話は噛み合ない。

男性は結論づけたいのに、女性は話したいだけなのだ。もちろん最終的には自身で答えを決めるだろうけど、その堂々巡りしてるかもしれない会話を男性が「時間の無駄」なんて言っちゃ駄目なんだ。女性は、ただ話していろんな意見を考えたいだけなのだ。

話ちょっと変わって、ここからは自分の考察、というか思った事。

女性が相談したいだけ、という時間は、確かに仕事では邪魔というか無駄というか、という扱いになることが多い。

でも、どこかの統計データだと、無駄話の多い会社の方が業績が良いって結果もあるらしいので、女性の社会進出を上記を理由に妨げているものがあるとすると、それはやはり男性なのだと思う。

そういえば、昔「ミソジニーとミサンドリー」って書いてたけど、まぁ、男女の差はあるのは当たり前で、それをどう受け止めるかだけなんだと思うなぁ。互いに角があって、互いにぶつかって、角がとれて丸まって柔らかくなれば、壊れないんだなぁ。って、みつをさんが言ってた気がする。

ときどき、技術的な事でも思うのは、効率化、効率化、効率化って、そればっかり考えてると、たぶん駄目なものしか生まれないんじゃないかと思ってて、その辺りが女性らしさの入り込むところかなと。たとえば「デザイン」なんてものは最たるもので、本来は機能からすれば不要なのだけど、Apple製品のように、それを全面に押し出して勝負して、勝ててる製品も多い。もちろん、そこにある技術も素晴らしいけれど。

そう、だから、男女の違い、考え方の違いを学ぶ事は、たぶん、良いもの、良い世の中を作るためには必要な行為なんだと思う。

英雄色を好むというけれど、女好きってのは、それなりに世の中を上手く持っていくための条件なのではないかと、さえ思った。

オーセンティックであれ!

人はオリジナルを作りたがる。

だけど、オリジナルの価値がいつまで続くかは、それを継続的に改良することにある。

未開の地で、すばらしい製品を創造したとしても、努力を怠れば、第一線から退くしか無い。

それこそ、「本当の戦いは始まったばかり」だ。

競合製品が出てきてからも、勝利し続ける。

オリジナルになるのもいい、だけど、オーセンティックにならなければ意味が無い。

データベーススペシャリストに俺はなる!

勉強開始!

製品マニュアルはいつ書くべきか

もし、製品ができあがるまでマニュアルを書けないとしたら、きっとその製品は上手くいかないだろう。

マニュアルがなくても良い製品なら、「書けない」じゃなくて「書かない」であるし。

ただ、もちろん、製品を作らないと製品の外観や実際の使い勝手など、細かい点は書ききれないだろう。

けれど、製品を作るに至った経緯、製品の設計思想、ユーザーの問題点にどういうアプローチで解決をしたか、そして、その製品の売り、その製品が他社製品と一線を画すところはどこなのか、書けるじゃないか。

製品のマニュアルは、製品と同じように開発フェーズで作り上げていくものなのだ。

できるUX

「できない」をやるより「できるようにする」ことを考えた方がいい

ネットワークスペシャリストをとった。

前回の2011年度秋期情報処理技術者試験で、高度試験区分レベル4のネットワークスペシャリスト試験に合格しました。

何度も思ってるけど、合格する事が目標になっちゃうと、最大でも合格に届くだけで、その先を考えて合格を飛び越そうと思って勉強すれば合格は簡単に飛び越えられる。

だから試験に出るとか出ないとか関係なく、気になった事は調べるべきだと思う。

もちろん試験要項の範囲を元に勉強すべきではあるけれど、それは単に試験要項が試験のガイドラインであるかというわけではなく、この情報処理技術者試験がその分野のことを全般的に知るために作られた試験であるからで、ざーっと全般的な知識が試験で問われるからである。

さぁ、次はデータベースだ。

適当なことやってんじゃねぇ!

最近、テスト駆動開発だとか、アジャイル開発だとか、継続的インテグレーションだとか、開発スタイルにやたらとこだわる人がいるけど、そんなもんを実践する前にやることあるだろう。

ソースコードにはコメントをつけろ。それがなきゃ、後から見てわかんねーだろうが。そのコードのテストコードが合ってるかどうかわかんねーだろうが。後から機能を追加もできねーだろうが。お前に聞きゃわかるって? お前が生きてんのはせいぜい100年だろうが。お前のコードは、お前に聞かなくてもわかるように書いてろ!

プログラムには仕様をつけろ。それがなきゃ、意義がわかんねーだろうが。仕様を残さないプログラマーは、職業プログラマー失格だぜ。何でそう決めたんだ? どんな要求があったんだ? 一言一句書いて残せ! お前のプログラムと同じようなもんが、何度も何度も繰り返し作られんのは、お前のプログラムの仕様が残ってないせいだ。きっちりみっちり仕様を残せ!

その上で、きっちりテストしろ。きっちりアジャイルしろ。きっちりCIしろ。

適当なことやってんじゃねぇ!

平成20年度秋期:システムに必要なMIPS

あるオンラインシステムでは、1時間当たり360,000件のトランザクションを処理することが求められている。このシステムでは、トランザクションの20%が200万ステップ、80%が50万ステップの命令を実行する。CPU使用率が80%のときに、必要となるCPUの処理能力は最低何MIPSか。

ア 80

イ 100

ウ 400

エ 500

この問題、よろしくない。「トランザクションの20%」って何よ?「CPU使用率が80%のときに、必要となるCPUの処理能力は最低何MIPSか」って何よ。変じゃん。

1時間当たりのトランザクションの20%である

「トランザクションの20%」は、まず、この360,000トランザクションの20%が200万ステップ、80%が50万ステップということらしい。決して、1トランザクションを処理するのに5段階あって、1段階目、すなわち20%が、200万ステップかかって、残りは50万ステップかかるってことではない。

そんなわけで、1時間360,000トランザクションのステップ数[steps/hour]は、下記のようになる。

360,000 * 0.2 * 2,000,000 + 360,000 * 0.8 * 500,000 [steps/hour]

CPU使用率を80%にするために必要な処理能力MIPSを求める。

さて、次「CPU使用率が80%のときに、必要となるCPUの処理能力は最低何MIPSか」は、時制が変だ。すでに稼働しているシステムのCPU使用率をみて80%になっていることを確認した上で、「こんなシステムを作るには、何MIPS必要?」って何聞いてるのよ。もう、そこにあるじゃん。ま、そんなこたぁ、もういい。

先ほどの数式を計算すれば、1時間当たりのステップ数を求められる。

MIPSは、Mega-Instruction Per Second、つまり1秒当たりに命令(ステップ)を何百万命令処理できるかを表す性能指標値である。

つまり、「1時間当たりのステップ数」を「1秒当たりのステップ数」に変換する必要がある。

これは、つまり単に3600で割ればいい(1時間=60分=3600秒なので)。

結果、下記のようになる。

360,000 * 0.2 * 2,000,000 + 360,000 * 0.8 * 500,000 [steps/hour]
=(360,000 * 0.2 * 2,000,000 + 360,000 * 0.8 * 500,000) / 3,600 [steps/second]
=100 * 0.2 * 2,000,000 + 100 * 0.8 * 500,000 [steps/second]
=20 * 2,000,000 + 80 * 500,000 [steps/second]
=40,000,000 + 40,000,000 [steps/second]
=80,000,000 [steps/second]

さて、ここで、CPUの使用率が100%というのは、どういう状態だろうか。

CPUを人間に置き換えてもいいが、100%というのは能力の限界で処理している状態を指す。50%であれば能力半分。0%であれば、仕事がないか、仕事を放棄している状態だ。

つまり、80%の使用率というのは、自分の能力の80%で処理できる程度の仕事量を処理しているということになる。

今回の問題では、80%で処理できるような、CPUの処理能力を求めることになっている。

人間でいえば、100kgの重りを80%の力で持ち上げれるようになるには、筋肉をどれだけ鍛えればいいでしょう? みたいな問題になっている。

今回の仕事量は、先ほど求めた秒間ステップ数(下記)で決まっている。

80,000,000 [steps/second]

これを、80%で処理できる能力を X [MIPS] とすると、次式が成り立つ。

0.8X = 80,000,000 [MIPS]

つまり、求めるべき CPU性能 MIPS は、両辺を0.8で割ることで下記のように求まる。

X = 100,000,000 [MIPS]

さて、お気づきだろう。単位が間違っていたことを。

ここで、求めた X は、MIPSではなく、IPSになっている。

つまり、回答としては、さらに百万で割って、100としなければならない。

ただ、こういった間違いは普通に起こりえるもので、ただ気づけばいいのだ。

最後に「1億MIPSって変だぞ。速すぎるぞ」って気づければいいのだ。

人間は、コンピュータと違って、間違えていても気づける。間違えてもやり直せる。

ちなみに、1億MIPSというと、100TIPS(100Tera-Instraction Per Second) だけど、これはスパコンレベル。地球シミュレータ(第二世代)クラス。現在は、理化学研究所の「京」が世界一位で、8162TFLOPSをマークしている。

アイデア

最近、ちょー腹立つことに、自分が出したアイデアをさも自分で考えついたかのように喋る阿呆がいる。そして、それを記憶していない阿呆もいる。もうダメだ。

ちょー腹立つ

と思っていたんですが、まぁ、盗まれる程度のアイデアならば、そんなのはアイデアではなく、ただの思いつきなんだと思うことにしました。その盗人が盗んでいる間に、僕はもっと先に行くべく精進します。

いや違うな、さっさとゴール見つけて、そこへの弛まぬ努力で近づいて、ゴールなんて、すっとんで行ってやるぜ!

NSString stringWithFormat/NSLog

NSString stringWithFormatNSLog()には、文字列書式と引数を指定することで任意の文字列を作り出したり、ログ出力することができる。

つまり、これは、printfと同じといっていい。(事実、IEEE printf specification の拡張だと明記されている。)

おさえるべき点は、printfと同じ書式、%dや、%u、%fが使えるという点と、Objective-Cのオブジェクトを表示するためには「%@」を使用するという点だけである。

  • NSLog(@"%d", intValue);
  • NSLog(@"%@", nsStringValue);
  • [NSString stringWithFormat:@"%d - %@", intValue, nsStringValue];

See also