<?xml version="1.0" encoding="UTF-8" ?>
<feed xml:lang="ja" xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:thr="http://purl.org/syndication/thread/1.0">
  <title type="text">スイーツ（笑）と呼ばないで!!</title>
  <subtitle type="html"></subtitle>
  <link rel="self" type="application/atom+xml" href="https://antares.gjgd.net/atom"/>
  <link rel="alternate" type="text/html" href="https://antares.gjgd.net/"/>
  <updated>2014-09-26T08:48:52+09:00</updated>
  <author><name>ポエット</name></author>
  <generator uri="//www.ninja.co.jp/blog/" version="0.9">忍者ブログ</generator>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />
  <entry>
    <id>antares.gjgd.net://entry/68</id>
    <link rel="alternate" type="text/html" href="https://antares.gjgd.net/tech/%E3%83%A9%E3%83%94%E3%83%A5%E3%82%BF%E3%81%AF%E4%BD%95%E5%BA%A6%E3%81%A7%E3%82%82%E8%98%87%E3%82%8B%E3%81%95-by%20%E3%83%A0%E3%82%B9%E3%82%AB-" />
    <published>2016-12-21T11:55:21+09:00</published> 
    <updated>2016-12-21T11:55:21+09:00</updated> 
    <category term="技術系の話題" label="技術系の話題" />
    <title>ラピュタは何度でも蘇るさ(by ムスカ)</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[<br />
私は、マシンをリカバリ(クリーンインストール)するのが好きだ。<br />
<br />
大きな案件が終わった時とか、年齢が変わった時とか、いろいろなタイミングでリカバリをする。<br />
<br />
そのタイミングで断捨離もできるし、何よりクリーンな状態からの再出発は気持ちが良い。<br />
<br />
昨日も深夜に手元のMac Book Proをリカバリしていて、ふと昔学生時代に友人から聞いた話を思い出した。<br />
<br />
大学1年生の頃、同じように遠く離れた地方から来ていた同学年の女の子がパソコンを入学祝いで買ってもらって来ていた。<br />
<br />
その子の話では、パソコンを買ってすぐ、父親の指導で5回くらいリカバリーの訓練をつまされたらしい。<br />
<br />
当時、彼女は、新品のマシンなのになぜわざわざリカバリをしなければならないのか、それも何度も何度もさせられるのか、本当に意味不明、ということでとても不満を持っていたようだ。<br />
<br />
もともと父と娘の会話もあまり無いような家庭だったらしく、理由もあまり説明されないまま、パソコン好きな父親から強制的にやらさせた経験は、本当に苦痛以外の何物でもなかったんだろう。<br />
<br />
でも、自分はその話を聞いたとき、なんて素晴らしい父親なんだと感動した。<br />
<br />
パソコンは、キーボード操作やマウス操作ではOSは死ぬことがあっても、物理的に壊れることはほぼない、この復活の儀式さえ分かっていれば、何度でも蘇る。<br />
<br />
だから、どんどん使え、使い倒してどんどん壊せ、そして何度でも蘇らせろ。<br />
<br />
そういうことなんだと思う。<br />
<br />
入学までの残り少ない時間、普段から会話もあまり無い娘に対して、<br />
壊さないための細かい操作を教え込むのではなく、どんなに壊しても蘇らせられる方法だけを伝授した父親。<br />
<br />
たくさん転べ、でも、心配するな、お前は転んでも自分の力で立ち上がる術を知っている。<br />
<br />
その友達のお父さんの教育方針は今でも私の中に生きている。<br />
<br />
初心者は、なるべく想定外のことが起こらないように正しい手順を覚えてそこからズレないようにしようと努力する。でも、正しい手順なんて何通りもあり覚えられるわけがない。<br />
<br />
だから私は何かを指導するときにはよくこんな言葉を使う。<br />
<br />
「大丈夫、それをやったからといって死ぬ人はいない」<br />
「最悪のケースでも、xxxがoooなだけだ」<br />
<br />
<br />
ま、たまには、滅びの呪文「バルス」みたいにもそれやっちゃーお終いよ、というのもあるけどね(笑)<br />
<br />
<br />
<br />
]]> 
    </content>
    <author>
            <name>ポエット</name>
        </author>
  </entry>
  <entry>
    <id>antares.gjgd.net://entry/67</id>
    <link rel="alternate" type="text/html" href="https://antares.gjgd.net/tech/%E5%85%A8%E3%81%A6%E3%81%AE%E3%82%82%E3%81%AE%E3%81%AB%E3%81%AF%E6%AD%B4%E5%8F%B2%E3%81%8C%E3%81%82%E3%82%8B" />
    <published>2016-12-13T18:55:34+09:00</published> 
    <updated>2016-12-13T18:55:34+09:00</updated> 
    <category term="技術系の話題" label="技術系の話題" />
    <title>全てのものには歴史がある</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[突然、個人的な話をするが、私は過去を振り返るのは嫌いだ。<br />
ついでに言うと、3年以上先の未来について計画を立てるのも嫌いだ。<br />
<br />
ただ、今流行りの真田丸など歴史ものは好きだし、そもそも昔は考古学者になりたいと思っていた時もある。また、将来世界はこうなっているかもしれないなぁ、と言ったような空想はするし、技術を採用するにあたって将来の見通しを立てたりはする。<br />
<br />
前者と後者の違いは何かと言うと、前者は私個人の過去と未来の話で、後者はこの世界の過去と未来の話である。<br />
<br />
それで、まず個人的なことで言えば、私は今しか見ない。仕事上、半年から1年先くらいまでは計画を立てるが、書いても1行程度の計画で、より現在に近づけば近づくほど段階的に詳細化されている。<br />
<br />
逆に、この世界の話で言えば、私は現在と過去と両方を行ったり来たりして、現在の姿をより正確に理解しようと試みる。<br />
<br />
つまり、現在を理解するために、過去を見るのである。<br />
<br />
例えば、最近私はAWSについて強い関心を抱いている。<br />
<br />
AWSには数十を超えるサービスがある。<br />
<br />
初めてAWSの世界に足を踏み入れた時は、その数の多さと複雑さに圧倒された。<br />
<br />
そういった一見複雑なものに出会った時には、<br />
<br />
過去に戻ってみましょう!!<br />
<br />
そうです、全てのものには始まりがあり、歴史があるのです。<br />
<br />
昨日は初心にかえり、深夜自宅で一人Macの画面に張り付きながら、AWSのWhat's Newページを古い順にひたすら読んでいきました。<br />
<br />
まず、どこまでさかのぼれるか。<br />
<br />
https://aws.amazon.com/jp/about-aws/whats-new/2004/<br />
<br />
このページが現存する最も古いものになります。<br />
<br />
URLの2004を2003に変えるともう404ページになりますね。<br />
<br />
AWSの最古のサービスと呼ばれるSQS(Simple Queue Service)の紹介文がありますね。beta testingと書いてあります。<br />
<br />
2006年になるとおなじみのS3(Simple Storage Service)やEC2(Elastic Compute Cloud) が登場して来ます。まだベータだったりアメリカだけだったりしますが。<br />
<br />
2009年になると、ヨーロッパでも利用可能になったり、CloudFront、ELB、EBSと言う見慣れたサービスや、インスタンスの契約でもスポットインスタンスなど多様化して来ます。この年に一気にAWSの世界が広がったのがよくわかります。<br />
<br />
ここからは、毎年かなりの機能やサービスがリリースされていきます。一つ一つ挙げるとキリがないのでここでは割愛します。<br />
<br />
2011年になると、<br />
<br />
https://aws.amazon.com/jp/about-aws/whats-new/2011/<br />
<br />
今まで英語だったページが日本語に切り替わります。<br />
<br />
ついに、アジアパシフィック東京リージョンが利用可能になったのです。<br />
<br />
その後も、毎年さまざなアップデートがあるのですが、そこも割愛します。<br />
<br />
そして、最後の2016年のページに来ると、まずその数に圧倒されます。<br />
<br />
かなり新しいサービスや機能が一気にリリースされていることがわかります。<br />
<br />
つまり、もうあと数週間で終わるこの2016年はAWSの歴史の中では、かなりホットな時代なんですねー<br />
<br />
時間は同じスピードで流れていたとしても、歴史というのは各年ごとに濃淡があります。動く時もあれば、全く変わらない時もあります。<br />
<br />
そんな中、我々は、今、このAWSの歴史の中で一番熱い時代の真っ只中に生きているのです。<br />
<br />
何という幸運でしょう!!<br />
<br />
<br />
すみません、ちょっと熱くなりすぎましたね^^;;;;<br />
<br />
今回、ブログではこんなことがあったよー、と出来事だけを追いましたが、このニュースリリースの概要を読むと、なぜのその機能やサービスが必要だったのか、どんな課題を解決するためにそれの機能やサービスをリリースしたのか、が読み取れます。<br />
<br />
そうすると、ただ何の脈略もなくフラットなアイコンの羅列に見えたサービス一覧も、全く違ったように見えて来ます。<br />
<br />
より、現状のサービスについて理解できるようになるのです。<br />
<br />
<br />
ということで、もし人生で一見太刀打ちするのが困難な複雑な事象に出会ったら、可能な限り過去の歴史を追ってみましょう。どんなものも、シンプルでわかりやすいところから始まっているはずです。<br />
<br />
蛇足ですが、私はLinuxのカーネルの最初のコミットのソースを読んだこともあります。OSというものが何であるのか、そもそも何を実現しようと、どんな仕組みで戦いを挑んだのか、よく理解できました。その延長線上で最新のカーネルのソースを読んだ時、だいぶ理解が進んだ記憶があります。<br />
<br />
<br />
今日は、<br />
<br />
困ったら、タイムトラベラーになったつもりで、現在と過去と両方を行き来したら良いよ、<br />
<br />
という話でしたー<br />
<br />
]]> 
    </content>
    <author>
            <name>ポエット</name>
        </author>
  </entry>
  <entry>
    <id>antares.gjgd.net://entry/66</id>
    <link rel="alternate" type="text/html" href="https://antares.gjgd.net/design/db%E8%A8%AD%E8%A8%88%E8%80%85%E3%81%AE%E3%83%90%E3%82%A4%E3%82%A2%E3%82%B9" />
    <published>2016-11-30T09:49:09+09:00</published> 
    <updated>2016-11-30T09:49:09+09:00</updated> 
    <category term="設計" label="設計" />
    <title>DB設計者のバイアス</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[昨日、知り合いのSEからDB設計で初めてMySQL使うらしくデータ型について相談された。<br />
<br />
小数点以下1桁固定のカラムは何型?<br />
<br />
と聞かれたので、(何を悩んでいるんだ?と心の中で思いながら)DECIMALとかNUMERICとかで良いんじゃない?と答えたら、<br />
<br />
3.8+4.2=8<br />
<br />
の8を8.0ではなく、8にしたいんだと、言われた。<br />
<br />
さらには、文字列で持とうかな、とかブツブツ言ってた。<br />
<br />
なんか、最近twitterで見かける、どこかの小学校の採点の話を思い出した。<br />
(これとか、http://headlines.yahoo.co.jp/hl?a=20161129-00000081-it_nlab-sci)<br />
<br />
ちなみに、<br />
<br />
じゃ、結局どれが正解ですか?<br />
<br />
という感じでこれだけの情報で判断しようとする人はDB設計者には向いていない。<br />
<br />
これはケースによる。<br />
<br />
例えば、文字列で持つのがナンセンスかというと、もう今後値の変更も計算もなく、単に表示にしか使われないのであれば、ある意味文字列で持てば最速で表現できるので悪くない。<br />
<br />
後々、このカラムの値がSQLレベルでの計算に用いられて厳密に行きたいのであれば、やはり固定小数点型のDECIMALとかNUMERICが良いだろう。<br />
<br />
例えば、整数部分の桁数がすごく大きくて、小数点以下なんて正直どうでも良いようなレベルの計算をするのであれば、浮動小数点型のFLOAT、DOUBLEでも良い。<br />
<br />
他の視点として、そもそもSQLで計算するのか、例えばPHPとかで一度受け取って計算(つまり一度キャストされる可能性もある)あるいは表示するのか、でも話が違う。<br />
<br />
これを、私は、DB設計者のバイアス、と呼ぶ。<br />
<br />
DB設計では、DOAでデータにまず着目する、それに対して、設計者はバイアスをかけることで、現実のDB設計に落とし込む。そのバイアスをかけるためにはシステム全体の世界観を理解する必要がある。<br />
<br />
だから、業務理解なくしてDB設計はできない。<br />
<br />
弊社はいろんなスタイルのSEがいる。画面設計とか詳細仕様はプログラマにお任せするスタイルもあれば、その辺も細かく指示するSEもいる。<br />
<br />
ただ、DB設計だけは、お客さんと直接話すSEが担当するというポリシーを採用している。会社としての理由はもしかすると別にあるかもしれないが、少なくとも私がそのポリシーに賛成する理由は、より良いシステム構築には上記のDB設計者のバイアスが必須だと考えるからである。<br />
<br />
]]> 
    </content>
    <author>
            <name>ポエット</name>
        </author>
  </entry>
  <entry>
    <id>antares.gjgd.net://entry/65</id>
    <link rel="alternate" type="text/html" href="https://antares.gjgd.net/tech/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E6%80%9D%E8%80%83%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3" />
    <published>2016-11-21T17:00:47+09:00</published> 
    <updated>2016-11-21T17:00:47+09:00</updated> 
    <category term="技術系の話題" label="技術系の話題" />
    <title>エンジニアの思考パターン</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[例えば<br />
<br />
http://www.recordchina.co.jp/a155573.html<br />
<br />
こういうニュースを見た時、エンジニアである自分が真っ先にする行動は、<br />
<br />
炊飯するのにどのくらいの電力が必要なのかググる<br />
<br />
ということ。<br />
<br />
そりゃダメに決まっているっしょ、という笑いながら否定するのは簡単だけど、<br />
<br />
実際それがダメな理由が<br />
<br />
・電力の問題なのか<br />
・湯気や匂いなどの問題なのか<br />
・倫理的な問題なのか<br />
・マナー的な問題なのが<br />
・法的な問題なのか<br />
・単にそれまでそのようなことをやる人がいなかったという問題なのか<br />
<br />
その他、いろいろ考えられる。<br />
<br />
例えば、今回の場合は単に電力の問題なのだとすれば、いくらでも代替案が浮かぶ。<br />
<br />
そして、そう言った行動に出る人がいるってことは、そこに需要があるということで、きちんと問題をクリアすれば、それは画期的なサービスにつながるかもしれない。<br />
<br />
エンジニアにとっては、OKかNGか、という結論だけではなく、その理由をきちんと理解することが大事だと常々思う。<br />
<br />
結論が理由とセットで頭に入っていれば、別の状況でその理由となる原因が異なっているとわかれば容易にそれまでとは真逆の結論を導き出すことができる。<br />
<br />
技術論だけでなく、例えば、「戦争(殺人)はすべきか否か」とかって問題も、ダメならばなぜダメなのかしっかりとその理論構造を分析してみたり、普段からそういう訓練すると良いと思う。そういうトレーニングが、今目の前で直面している技術的な課題をクリアするのに案外役に立つものだ。<br />
<br />
<br />
<br />
]]> 
    </content>
    <author>
            <name>ポエット</name>
        </author>
  </entry>
  <entry>
    <id>antares.gjgd.net://entry/64</id>
    <link rel="alternate" type="text/html" href="https://antares.gjgd.net/tech/ios%E7%AB%AF%E6%9C%AB%E3%82%92%E7%B0%A1%E5%8D%98%E3%81%AB%E6%A5%AD%E5%8B%99%E3%82%A2%E3%83%97%E3%83%AA%E5%B0%82%E7%94%A8%E7%AB%AF%E6%9C%AB%E3%81%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95" />
    <published>2016-11-18T16:51:21+09:00</published> 
    <updated>2016-11-18T16:51:21+09:00</updated> 
    <category term="技術系の話題" label="技術系の話題" />
    <title>iOS端末を簡単に業務アプリ専用端末にする方法</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[Swift使ってiOSアプリを趣味で作成したりするが、<br />
業務で使用するほどには詳しくない。<br />
<br />
逆に、Webアプリは業務でよく作成する。<br />
<br />
そんな中以下のような要件のお仕事の依頼が来た場合、こんな選択肢もありますよ、という話。<br />
<br />
【要件】<br />
<br />
1. iOS端末を使って業務アプリを構築したい。<br />
2. タッチパネルの機能を有効に使いたい。<br />
3. フルスクリーンで利用したい。<br />
4. その業務アプリしか使用できないようにしたい。<br />
5. メンテナンスが大変なのでSwiftとか使ったネイティヴアプリは嫌<br />
<br />
さぁ、皆さんどうでしょうか、最後の要件5を読んで「ん?」となったのではないでしょうか?<br />
<br />
こういうアプリ作成の時には、よく<br />
<br />
「じゃー、ガワアプリだけ作って、中身は普通のHTMLとかJSとか使ったWebアプリにしましょー」<br />
<br />
という話がでる。<br />
<br />
でも、「ネイティブアプリは嫌」と言われるとそのソリューションは使えませんね。<br />
<br />
そんな時の方法をこれからご紹介します。<br />
<br />
まず、WebアプリをSPA(シングルページアプリケーション)で作成します。<br />
<br />
そして、作成したWebアプリのヘッダーに<br />
<br />
<meta name="apple-mobile-web-app-capable" content="yes" /><br />
<p class="p1">&lt;meta name="apple-mobile-web-app-capable" content="yes"&gt;</p><br />
<p class="p1">&lt;meta name="apple-mobile-web-app-status-bar-style" content="black"&gt;</p><br />
<meta name="apple-mobile-web-app-status-bar-style" content="black" /><br />
こんな感じのmetaタグを設定します。<br />
<br />
1行目がフルスクリーンにするための設定で、2行目はステータスバーの表示についての設定です。<br />
<br />
これを設定したURLをSafariで開き、ブラウザの下にあるアイコンメニューの四角に上矢印的なアイコンをクリックしてホーム画面に追加を選択します。そうするとそのページへのショートカットがホーム画面に保存されます。<br />
<br />
その際<link rel="apple-touch-icon" href="&ldquo;icon.png&rdquo;" /><br />
<p class="p1">&lt;link rel="apple-touch-icon" href=<span class="s1">&ldquo;</span><span class="s2">icon.png</span><span class="s1">&rdquo;</span>&gt;</p><br />
<br />
こんなタグを仕込んでおくとアイコンが設定できるので、他のネイティヴアプリを見た目上全く違いが無くなりますね。<br />
<br />
さあ、これで、ホーム画面上のアイコンを起動するとフルスクリーンのアプリが起動して如何にも業務アプリっぽくなりましたね。これで既にお客さんの要件のうち要件4を除いて全てクリアした状態となります。<br />
<br />
要件4はどうしましょうか?<br />
<br />
実は、上記の手順を踏んだことで、iOS内部における取り扱いにおいては、SafariでそのWebアプリを開いた時とは別の取り扱いになります。サーバサイドで取得されるUser AgentもSafariとは異なったりしますね。<br />
<br />
少し回りくどい言い方をしましたが、これでいわゆるシングルアプリモードが使えるようになったということです。<br />
<br />
設定&gt;一般&gt;アクセシビリティ&gt;アクセスガイド<br />
<br />
を開き、アクセスガイドの機能をオンにします。<br />
<br />
パスコード設定のメニューより、シングルアプリモードを解除するためのパスコードやTouch IDの使用不使用が設定できます。<br />
<br />
さあ準備は整いました。<br />
<br />
ホーム画面から自作アプリのアイコンをクリックします。<br />
フルスクリーンで立ち上がりましたね。<br />
そこでホームボタンを3回押します。<br />
これによりアクセスガイドが開始できます。<br />
ちなわち、もう他のアプリに切り替えることは不可能になります。<br />
(ちなみに、解除する際も同じくホームボタン3回押しでパスコード入れます)<br />
<br />
さぁ、要件4も満たすことができましたね。<br />
<br />
いかがだったでしょうか。<br />
<br />
Swiftなど使ったiOSネイティヴアプリ構築のノウハウはない。でも、今ある技術でそれっぽく業務アプリを作りたい、特に端末固有の機能を使ったりする必要はないんだ、というあなた、早速今日からなんちゃってiOSアプリを作成してみましょー。]]> 
    </content>
    <author>
            <name>ポエット</name>
        </author>
  </entry>
  <entry>
    <id>antares.gjgd.net://entry/63</id>
    <link rel="alternate" type="text/html" href="https://antares.gjgd.net/design/db%E3%81%AF%E3%81%BE%E3%81%9A%E5%AD%A6%E3%81%B3%E3%80%81%E3%81%9D%E3%82%8C%E3%81%8B%E3%82%89%E8%80%83%E3%81%88%E3%82%88%E3%80%82" />
    <published>2016-11-11T18:27:04+09:00</published> 
    <updated>2016-11-11T18:27:04+09:00</updated> 
    <category term="設計" label="設計" />
    <title>DBはまず学び、それから考えよ。</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[<br />
====================<br />
<br />
【はじめに】<br />
<br />
今日はこれから上から目線で偉そうなことを書きます。<br />
最近、社外のPG仲間がダメなDB設計のせいで苦しんでいるのを見て、いつか言いたいなと思いつつ言わなかったことを書きます。<br />
<br />
====================<br />
<br />
<br />
あなたの専門は何ですか?<br />
<br />
と聞かれたら、たぶん、私はデータベースです、と答えます。<br />
<br />
社会人1年目の春、研究所時代に<br />
<br />
・国家試験のデータベーススペシャリスト<br />
・オラクルマスター<br />
・SQL ServerのDB設計分野でのマイクロソフト認定プロフェショナル<br />
<br />
等の資格をとり、<br />
<br />
その後もデータベースを自分の専門分野として研究に勤しみました。<br />
<br />
実戦も、アドバイザリー業務を含めれば、関与したDBは数百件。<br />
<br />
理論面、実践面、共に一応専門家を名乗っても良いのではないかと無謀にも自負しています。<br />
<br />
そんな私だからDBに関する技術談義が好きでいつもやっているかのような印象を持たれるかもしれないですが、理論的なバックボーンない方々とは、基本的にDBに関する議論はしません。<br />
<br />
これは非常に驕り高ぶったように思われるかと思いますが、そのような方々と行うDBに関する議論は、単なる宗教論争になるからです。<br />
<br />
実戦の中から経験則で帰納的に良い設計理論を構築しようというのは無謀だと思います。それでは圧倒的に参考事例の数が足りません。それなりのものが出来上がる頃には引退する年になっているのではないかと思います。<br />
<br />
それよりも、世の中の数多くの専門家が研究に研究を重ねた結果導かれた理論を学ぶ方がはるかに効率が良いと思います。また、RDBのコアな理論は数学的に導かれるものなので、ブレはありません。<br />
<br />
その上で、実戦では、ポリシーによって、どの理論をどこまで適用するか、ということを考えます。このレベルであれば、DBに関する議論も意味を持つと思います。<br />
<br />
例えば、非常に初歩的ですが第一正規化というのがあります。<br />
<br />
みなさん、正規化、非正規化という言葉、正規化には第何正規化というのがある、というくらいは知っているかと思います。ただ、その実際の中身、目的、制約事項などを理解していないと、&rdquo;考える&rdquo;ということはできません。<br />
<br />
第一正規化であれば、繰り返しを排除するわけですが、時として状況によっては、非正規化(正規化崩し)をすることもありえます。<br />
<br />
例えば、全く更新がない大量のログのようなテーブルで繰り返しの回数も確実に固定されていて、参照する際に経験豊かではないオペレータがDBを直接覗きに行くことが10年に1回くらいあるようなテーブルなどはこのケースに該当すると思います。<br />
<br />
結局、第一正規化にはその目的があり、その目的よりも重視する別の目的があればそれを採用しないのは当たり前かと思います。つまり、第一正規化の目的をはっきり理解していれば、それを辞めた時のシステムへの影響も想像することができます、それで初めて非正規化してOKかどうかというのは判断可能なのだと思います。<br />
<br />
別の目的というのは、パフォーマンスだったり、上記のような特殊な要件での視認性だったり、その他様々な必要性から来ることが多いと思います。それらのメリットが、非正規化した時のデメリットを上回れば、それは非正規化した方が良いです。<br />
<br />
つまり、DB設計において、&rdquo;考える&rdquo;とは、いくつかの取りうる設計の選択肢のメリット・デメリットを計算し比較し、その案件では何を一番重視すべきかというポリシーのバイアスをかけた上で、&rdquo;選択する&rdquo;ことだと思います。<br />
<br />
理論的な枠組みのある人は、あるシチュエーションにおいて、まるでレストランで席に着いた時にメニューを見るような感じで目の前に選択肢が見え、その中でベストなものを選択することができます。<br />
<br />
将棋のプロは定石を学び、その定石を適用すべき状況を学び、メリット・デメリットを学び、その上実戦例としての過去の棋譜を読み、そして初めて、&rdquo;考える&rdquo;のだと思います。<br />
<br />
DB設計においても同様のことが言えると思います。<br />
<br />
DB設計で悩んでいる暇があったら、まずは一通りの基礎を学ぼう、と言いたいです。今後の長いDB設計人生で言えば、それはほんの一瞬と言えるほど短い時間です。その上で、初めて&rdquo;考える&rdquo;という旅に出ましょう。<br />
<br />
DBはまず学び、それから考えよ。<br />
<br />
全ての、PGからDB設計の勉強をせずにそのままDB設計する立場となった人々に捧げます。<br />
<br />
<br />
偉そうですみませんでしたm(_ _)m<br />
<br />
]]> 
    </content>
    <author>
            <name>ポエット</name>
        </author>
  </entry>
  <entry>
    <id>antares.gjgd.net://entry/62</id>
    <link rel="alternate" type="text/html" href="https://antares.gjgd.net/tech/%E3%83%8D%E3%83%83%E3%83%88%E6%8A%95%E7%A5%A8%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E4%B8%8A%E3%81%AE%E5%A4%A7%E4%BA%8B%E3%81%AA%E8%AB%96%E7%82%B9" />
    <published>2016-10-28T19:18:54+09:00</published> 
    <updated>2016-10-28T19:18:54+09:00</updated> 
    <category term="技術系の話題" label="技術系の話題" />
    <title>ネット投票に関する情報技術上の大事な論点</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[<br />
基本的に、選挙の際には相当の理由がない限り投票に行く。<br />
<br />
その日に予定が入りそうだなと思うときは、事前に不在者投票に行くことにしている。<br />
<br />
そんな私ではあるが、やっぱりネットで投票出来れば便利なのに、という気持ちになることは多々ある。<br />
<br />
そうしたらもっと投票率も上がるだろうに、と。<br />
<br />
で、それをやらない理由は、個人情報流出とか、他の人のなりすまし投票とか、横に誰かが付いてて無理やり投票させられるのを阻止できない、とかを気にしているのかなー、と思っていた。<br />
<br />
まぁ、最後に挙げた、横に誰かが付いていて・・というのはパッとは解決策が浮かばないけど、でもそれ以外の情報技術上の問題は、なんだかんだで最近は個人認証の技術や暗号化の技術も発達しているし、なんとかなるでしょ、って思ってた。<br />
<br />
作ろうと思えばウチの会社でもそのシステムは作ることができる。<br />
<br />
でも、この前勉強していて、<br />
<br />
なるほど、これはちょっと厄介な問題だなー<br />
<br />
と初めて理解したことがある。<br />
<br />
今日はそれを紹介したい。<br />
<br />
日本国憲法の第15条の最後の方に<br />
<br />
「すべて選挙における投票の秘密は、これを侵してはならない。」<br />
<br />
というのがある。<br />
<br />
これが実は厄介な問題。<br />
<br />
つまり、<br />
<br />
投票行為については、個人をきちんと認証しその本人が間違いなく投票しているという事実を担保しなければならない、<br />
<br />
その一方で、<br />
<br />
誰が誰に投票したか、については、投票の秘密は守られなくてはならず、遡って個人を特定できてはならない、<br />
<br />
ということ。<br />
<br />
もし、国家権力が投票データやアクセスログから誰が誰に投票したかを知ることができるとしたら、時の権力者が自分たちに反対する有権者に対して粛清をすることも可能となる。今の平和な日本では考えにくいが(お隣の国では行われているが)、憲法とはそもそもそういった国家権力の暴走を牽制するためのものだ。<br />
<br />
と言うことで、一見簡単そうに思えるネット投票システムも、結構面倒なことのようである。<br />
<br />
ただ、いま世界中でこの個人認証・暗号化と匿名性の確保の二つを両立させるための研究が行われているらしいので、そのうち、ネット投票が実施される日も来るだろう。<br />
<br />
一見簡単に思えるが行われていない背景には、実は自分が理解不足で知らないだけで複雑な問題があることもある、と言うお話でした。<br />
<br />
]]> 
    </content>
    <author>
            <name>ポエット</name>
        </author>
  </entry>
  <entry>
    <id>antares.gjgd.net://entry/61</id>
    <link rel="alternate" type="text/html" href="https://antares.gjgd.net/tech/%E3%80%8C%E6%8A%80%E8%A1%93%E7%9A%84%E3%81%AB%E5%8F%AF%E8%83%BD%E3%81%8B-%E3%80%8D%E3%81%A8%E3%81%84%E3%81%86%E8%B3%AA%E5%95%8F%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6" />
    <published>2016-09-20T15:46:45+09:00</published> 
    <updated>2016-09-20T15:46:45+09:00</updated> 
    <category term="技術系の話題" label="技術系の話題" />
    <title>「技術的に可能か?」という質問について</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[<br />
<br />
立場上、時々別のPMから<br />
<br />
「&hellip;&hellip;というのは、技術的に可能でしょうか?」<br />
<br />
と相談を受ける。<br />
<br />
こういった質問への回答は一瞬戸惑うことが多い。<br />
<br />
なぜならば、文字通り質問を解釈すべきでない時が多々あるからだ。<br />
<br />
世の中で実現されている技術であれば、それは&rdquo;技術的&rdquo;には可能であろう。<br />
<br />
ただ、その情報だけでそのPMが判断を下すことは適切だろうか?<br />
<br />
技術的には可能でも、自社の得意分野と異なれば技術力的に不可能なこともある。<br />
<br />
そこを意図するのであれば、<br />
<br />
「&hellip;&hellip;というのは、ウチの技術力的に可能でしょうか?」<br />
<br />
と聞いてほしい。<br />
<br />
さらに、技術力的に可能だとしても、現実の制約条件のもとでは不可能ということもある。<br />
<br />
例えば、1から10万の数字を計算機で足していくというプランについて考えてみよう。<br />
<br />
足し算するというのは、理屈上どんな数字であっても可能なので、技術的には可能だ。<br />
<br />
また、大抵の人は、計算機を使って、足し算をする力はあるから、技術力的にも可能だ。<br />
<br />
ただ、現実として、各種制約条件からその案を採用することは不可能かもしれない。<br />
<br />
制約条件や目標を意識する上で、PMであればおそらく次の3つの視点はもっているだろう。<br />
もともとは製造業の世界の用語だが、今では広くビジネスの世界全体で用いられているいわゆるQCDというものだ。<br />
<br />
1.Quality(品質)<br />
2.Cost(費用)<br />
3.Delivery(納期)<br />
<br />
前述のプランは、計算間違いが起きる可能性が高く品質的にも問題があるかもしれないし、単純作業ではあるが予想以上に人件費もかかるかもしれないし、正確に計算が完了するまでの時間も結構かかるかもしれない。つまり、どのような制約条件や目標のもとで考えるかによって答えは異なる。<br />
<br />
そこを意図するのであれば、<br />
<br />
「&hellip;&hellip;というのは、&hellip;という品質で、&hellip;くらいのコストで&hellip;.までに実現することは、ウチの技術力的に可能でしょうか?」<br />
<br />
と聞いてほしい。<br />
<br />
先ほどの1から10万の数字を計算機で足していくというプランであれば、例えば<br />
<br />
「1から10万の数字を計算機で足していくというプランを、絶対に間違いないレベルで、アルバイトへの支払いを1,000円で、30分後までに完了することはウチの技術力的に可能でしょうか?」<br />
<br />
と聞かれたら、不可能と答えるだろう。<br />
<br />
そんなわけで、可能かどうかの話をする場合には、制約条件をどこに設定するかそれを共有することが大事だよ、という話。<br />
<br />
<br />
ちなみに、蛇足だけど、もしも目指すところが、1から10万の数字を足した結果を単に得たいだけなら、<br />
<br />
(100000*100001)/2<br />
<br />
で簡単に求められるね。目的が結果を得るだけなら計算機で足す実行プランがそもそも間違ってる。その可能性まで考えると・・・<br />
<br />
<br />
「...という目的のために&hellip;&hellip;というプランを考えています。そのプランを&hellip;という品質で、&hellip;くらいのコストで&hellip;.までに実現することは、ウチの技術力的に可能でしょうか?」<br />
<br />
ときいてくれれば、よりよい代替案を出すチャンスも得られるかもしれない。<br />
<br />
]]> 
    </content>
    <author>
            <name>ポエット</name>
        </author>
  </entry>
  <entry>
    <id>antares.gjgd.net://entry/60</id>
    <link rel="alternate" type="text/html" href="https://antares.gjgd.net/pm/%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%AE%E6%8B%85%E5%BD%93%E8%80%85%E3%81%AF%E4%BD%95%E3%82%92%E3%82%82%E3%81%A3%E3%81%A6%E8%A9%95%E4%BE%A1%E3%81%95%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%8B%E3%80%82" />
    <published>2016-09-01T17:37:26+09:00</published> 
    <updated>2016-09-01T17:37:26+09:00</updated> 
    <category term="プロジェクトマネジメント" label="プロジェクトマネジメント" />
    <title>クライアントの担当者は何をもって評価されるのか。</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[<br />
さて、今日はクライアント企業の人事考課制度とそれに合わせた営業戦略について話をしたいと思います。<br />
<br />
我々がいるシステム開発業界のクライアントは、ほとんどが個人ではなく法人であり組織体であることがほとんどです。<br />
<br />
つまり、実際に一緒にお仕事をさせていただくのは、その組織のいわゆる&rdquo;中の人&rdquo;です。<br />
数人のチームの場合もあれば、1人の担当者のこともあります。<br />
<br />
私は営業先に言って話をしている時、<br />
「この担当者は何をもって評価されるんだろう」<br />
と考えることがよくあります。<br />
<br />
ざっくり言ってしまえば、どの会社でも「仕事をうまくやる」ことが評価される条件だとは思いますが、<br />
これが実はかなり曖昧な基準だと思っています。<br />
<br />
例えば、500万円の案件の見積もりを、300万円に値切ることに成功したらその担当者は評価されるでしょうか。<br />
おそらく一瞬は時の人になれます。「よくそんなに値切れたなー、すごいなー」と。<br />
ただ、その値切った200万円はその担当者のポケットに入るわけでありません。<br />
<br />
さて、実際に大幅に値切ったプロジェクトが開始されるとどんなことが起こるでしょうか。<br />
必ず起こるとは言い切れませんが、最終的に&rdquo;安物買いの銭失い&rdquo;になることも多々あるかと思います。<br />
その時に一番苦労をし評価が下がるのは誰でしょうか?<br />
その担当者ですね。<br />
<br />
そんな経験をした担当者が次に別のプロジェクトを発注する時、どんなことを考えるでしょうか。<br />
上の承認がとれないほど高い見積もりは困るけど、承認が通るのであればどんなに高くても構わない、そんなことを考えるようになるケースも多いです。<br />
<br />
つまり、発注価格が高くて、組織は嬉しくなくても、その担当者の懐は一切痛みません。<br />
それよりも、トラブルなく万事がうまくいく方が、担当者のメリットは大きいのです。<br />
値切り名人の名声は一瞬ですが、日々の安心した毎日とプロジェクト自体の成功の利益は長期間持続するものです。<br />
<br />
そんな担当者が相手であればアピールするのは価格ではなく安心です。<br />
<br />
「安心してください。納期までに、ちゃんと御社で許容できる品質レベルのものを、最初に約束した予算で、制作して納品します」<br />
<br />
このアピールの方が価格を下げることよりも、しっかり担当者の心をつかむことができるはずです。<br />
<br />
ちなみに、熟練の担当者になると、プロジェクトによって、使い捨ての業者と、勝負業者を使い分けるようになってきます。<br />
<br />
もろちん、世の中には、真逆のケースもあります。<br />
<br />
どれだけ値切ることができたか、で担当者が評価される会社もあります。<br />
<br />
たまに、業者への発注の際にはすごく細かく審査して価格を下げるわりには、<br />
炎上したプロジェクトの対応に追われる担当者の残業代や、<br />
そのことでクライアント企業のお客様に迷惑をかけたことで失われる信用の価値には無関心というケースもあります。<br />
<br />
よく観察してみると、最終的な価格が低いかどうかよりも、<br />
値切り幅が大きいかどうかを重視しているケースなども稀にあります。<br />
<br />
世の中、いろんな会社がありますね。<br />
<br />
交渉の相手が、聡明なオーナー社長であれば、むしろ話はシンプルです。<br />
そのプロジェクトの費用対効果にフォーカスして話をすることができます。<br />
<br />
同様に、個人の評価よりも、会社にとっての利益を考える担当者も、<br />
オーナー社長と同じようなロジックで話をすることが可能です。<br />
<br />
皆そうだったらとても良いのですが、<br />
残念ながら現実は様々です。<br />
<br />
昔、家庭教師のアルバイトをしたことがありました。<br />
サービスの費用負担をする親と、サービスを享受する子供。<br />
<br />
クライアント企業と、その担当者。<br />
両者の関係でもなんだか似たようなところがありますね。<br />
<br />
<br />
最後に大事なことを一応書いておくと、<br />
これはあくまで営業的なとっかかりだけの話です。<br />
<br />
実際に納品するシステムは、やはりそのクライアント担当者個人のものではありませんので、<br />
その企業、あるいは、その企業のお客様といった、より多くの幸せを考えて作成しなければなりません。<br />
<br />
そこを妥協しちゃうとシステム開発という仕事が嫌いになってしまいますからね。<br />
<br />
]]> 
    </content>
    <author>
            <name>ポエット</name>
        </author>
  </entry>
  <entry>
    <id>antares.gjgd.net://entry/59</id>
    <link rel="alternate" type="text/html" href="https://antares.gjgd.net/tech/%E6%AD%A3%E7%A2%BA%E3%81%AB%E3%81%AF%E6%9A%97%E5%8F%B7%E5%8C%96%E3%81%A8%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%83%80%E3%82%A4%E3%82%B8%E3%82%A7%E3%82%B9%E3%83%88%E3%81%AF%E7%95%B0%E3%81%AA%E3%82%8B" />
    <published>2016-08-02T09:34:11+09:00</published> 
    <updated>2016-08-02T09:34:11+09:00</updated> 
    <category term="技術系の話題" label="技術系の話題" />
    <title>正確には暗号化とメッセージダイジェストは異なる</title>
    <content mode="escaped" type="text/html" xml:lang="utf-8"> 
      <![CDATA[<br />
さて、前回、「パスワードを一方向暗号化しても簡単なパスワードを使っていたら意味がない」という記事を書いた。<br />
<br />
話をわかりやすくするために「暗号化」という言葉を用いたが、<br />
専門用語で言えば、md5 hashで生成されるものは暗号ではなくメッセージダイジェストと呼ばれるものだ。<br />
<br />
確かに、両者ともに、特殊な関数を用いて平文を変換するという意味では同じではある。<br />
<br />
しかし、メッセージダイジェストは世界中どこであっても、inputが同じで、かつ、同じ生成関数を用いた場合には同じ結果が得られるのに対して、暗号化というものはそもそも特殊な鍵を用いて行うのでその鍵(ロジックも)を知らない限り同じ結果が得られないという点で異なる。<br />
<br />
メッセージダイジェストは、同じinputに対して、同じ結果が保証されているがゆえに改ざんされているかのチェックなどに利用されることも多い。<br />
<br />
例えば、前回紹介したmd5は、どんな長さの平文のinputでも128ビットのメッセージダイジェストを生成する。このビット数が決まっていることによる利点は多い。<br />
<br />
例えば、パスワードを平文ではなく、暗号化(正確にはメッセージダイジェスト生成)によって保存しようとした場合に、当然DBのパスワード保存用のフィールドを用意することになるが、これが仮にmd5でhashを作成すると決めている場合には、パスワードの長短に関係なく、128ビットを格納できる領域だけを確保すれば良い。DB設計を経験したものであれば、この利点には大きく頷けることだろう。<br />
<br />
そのメッセージダイジェストだが、いろいろと種類がある。<br />
<br />
代表的なものを書いておく。<br />
<br />
(1) md5<br />
<br />
これはRSA社が開発したもので128ビットのメッセージダイジェストを生成する。<br />
他にもmd4とかmd2とかもある。<br />
<br />
(2) SHA-1<br />
<br />
160ビットのメッセージダイジェストを生成する。<br />
最近、ハイスペックマシンの登場によりもう160ビットだと危ないね、と言われ始めている。<br />
<br />
(3)SHA-2<br />
<br />
SHA-1のアルゴリズムはそのままで、メッセージダイジェストのビット数だけ増やしたもの。<br />
224,256,384,512のビットのいずれかでメッセージダイジェストを作成することができる。<br />
<br />
(4)SHA-3<br />
<br />
SHA-1とSHA-2とは別のアルゴリズムを使おうということで始まった試み。<br />
<br />
<br />
<br />
ということで、誤解があるといけないので前回の補足として<br />
<br />
正確には暗号化とメッセージダイジェストは異なる<br />
<br />
というお話でした。<br />
<br />
]]> 
    </content>
    <author>
            <name>ポエット</name>
        </author>
  </entry>
</feed>