<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>トラックバック</title><link>http://blogs.wankuma.com/jitta/category/348.aspx</link><description>他の方の blog へのトラックバック記事</description><managingEditor>はなおか じった</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>はなおか じった</dc:creator><title>IPv6 Ready?</title><link>http://blogs.wankuma.com/jitta/archive/2012/01/25/250509.aspx</link><pubDate>Wed, 25 Jan 2012 22:40:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2012/01/25/250509.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/250509.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2012/01/25/250509.aspx#Feedback</comments><slash:comments>457</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/250509.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/250509.aspx</trackback:ping><description>&lt;p class="p"&gt;IPv4 のアドレスは、日本では枯渇しました。で、IPv6 なのですが。。。ところで、IPv4 は、32ビット、429,4967,296種類を表せます（実際に使用可能なアドレスはそれ以下）。IPv6 は、これを128ビット、3.4028236692093846346337460743177e+38種類にした、と。&lt;/p&gt;
&lt;p class="p"&gt;それはいいとして、IP 層の下に、Mac アドレスってありませんでしたっけ？Mac アドレスって、枯渇しないんですかねぇ？&lt;br&gt;
え？48ビット、281,474,976,710,656種類あるので、IPv4ほど差し迫ってはいない、ですって？でも、業者に割り当てられるのは、24ビットで16,777,216種類ですよね？千六百七十七万、と。ミリオン ヒットを16回飛ばせるのか。しかも、機器に結びついているので、機器の破棄に伴って回収も可能、と（実際に出来るかどうかはともかく）。じゃぁ、大丈夫か。。。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;そういえば、Mac アドレスって、固定じゃなく、変更出来る機器もありますよね？そして、「&lt;a class="outerLink" title="⇒takagi-hiromitsu.jp" href="http://takagi-hiromitsu.jp/diary/20111126.html"&gt;Wi-FiのMACアドレスはもはや住所と考えるしかない&lt;/a&gt;」なんて記事を見かけたのですが、これって、適当な Mac アドレスを入れると住所が出る、すなわち使われているアドレスかどうかがわかる、って事ですよね？で、その、Mac アドレスを変更出来る機器を、「存在することがわかったアドレス」に変更をすると、どうなるんでしょう？IP でのフィルターがされるから、他の所にデータが行っちゃうって事はない？他の所にもコピーされたデータが届くって事はないよね？&lt;/p&gt;
&lt;p class="p"&gt;IPv6 とはまったく関係ないのですが、この辺のサービス提供者のやり方が気になる、というのがメインのエントリ。&lt;/p&gt;
&lt;p class="p"&gt;ストリート ビューもそうですが、「公共の場から集められるデータだから良い」のでしょうか。例えば、通りを歩いているのは、「公共の場から集められるデータ」です。でも、ある日時にある場所にいることを知られる事がイヤな場合があります。ストリート ビューでは、そういう場合を、いつでも、どこからでも、誰にでも、検索して見える状態にする、という性質があります（マスキングはされますけど）。問題なのは、「公共の場で集めることができるデータを集める」事ではなく、それを「いつでも、どこからでも、誰にでも、検索して見ることが出来る状態にしている」ということ、それが「オプト インではなくオプト アウトとして提供されている」こと、「収集して公開されているということが周知されていない」ということ、ではないでしょうか。&lt;/p&gt;
&lt;p class="p"&gt;そして、Wi-Fi による位置情報サービス。HTML5 の GeoLocation API で使用するサービスのひとつですが、ある地点で観測できた Mac アドレス（Google の場合は複数）を引き渡すと、その場所の位置情報（緯度、経度）が返ってきます。「ある地点で観測できた」という所が焦点です。無線 LAN の親機は、SSID と Mac アドレスを放送しています（ここで「放送」という用語を用いるのは正しくないが）。GPS 機能の付いた機器を用いて公道でこれを収集し、問い合わされた Mac アドレスから位置情報を逆引きして返すわけです。公道で収集できるデータだから集めて良い、ってものなんですか？私が最初に無線 LAN を導入したとき、SSID にファミリー ネームを設定しちゃいましたよ。でも、鉄筋コンクリート製の建物だったせいか、電波がまったく通らないので、すぐに有線に切り替えちゃいましたけどね。引っ越しをして、今度は大丈夫だろうと思ったけど、鉄骨製だからか、扉を閉めると通らない。「ブースター付き」とかいう機械を買ってきたのに。まぁ、子機もブースター付きってのを使えば何とか受信できるのと、引き回しの関係で有線に出来ないので、不便に思いながら使っているけど。で、新しい方の SSID は、デフォルトのまま使っていますが、Mac アドレスです。自分のもの以外の観測できる SSID は、メーカー名や機器名が SSID になっています。ほう？ということは、近所の人が同じメーカーや同じ機器を買ったら、SSID がかぶっちゃうわけですね。私が買ったものは、「Mac アドレスならかぶらないだろう」ということで Mac アドレスになっているのかな。で、こいつを、公道に放送したいとは思っていません。でも、漏れて行ってしまっていると思います。止める方法があるなら教えて欲しい。「家を金属板で覆え」って？そろそろ外壁を直さなきゃいけないので、その時、本気で考えようかしら？？？&lt;/p&gt;
&lt;p class="p"&gt;なんてことを書いていたら、こんな記事も発見しましたよ→「&lt;a class="outerLink" title="⇒itmedia.co.jp" href="http://blogs.itmedia.co.jp/showbiz/2011/12/wifi-1cdd.html"&gt;WiFiのアクセスポイントが街中で増えることの功罪&lt;/a&gt;」。公衆 Wi-Fi が増えすぎると、かえって困った事態が発生すると。Ｒさん、喜ばしいことだけではないみたいですよ。（トラックバック：「&lt;A href="http://blogs.wankuma.com/rti/archive/2012/01/05/246387.aspx"&gt;自販機 Wi-Fi&lt;/a&gt;」）&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/250509.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>オブジェクトを指向してみる／そもそも「オブジェクト」って、何？</title><link>http://blogs.wankuma.com/jitta/archive/2010/06/19/190381.aspx</link><pubDate>Sat, 19 Jun 2010 22:29:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2010/06/19/190381.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/190381.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2010/06/19/190381.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/190381.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/190381.aspx</trackback:ping><description>&lt;p class="p"&gt;「&lt;A href="http://blogs.wankuma.com/jitta/archive/2010/05/28/189520.aspx"&gt;オブジェクトを指向してみる／何故インスタンスを作るの？&lt;/a&gt;」の続き、ってことで。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;元ネタのみながわさんのコラムでは、次のように書かれています。これを考察してみましょう。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p class="quoteSource"&gt;&lt;a href="http://el.jibun.atmarkit.co.jp/minagawa/2010/04/post-ebc4.html" title="⇒atmarkit.co.jp" class="outerLink"&gt;実はオブジェクト指向ってしっくりこないんです！&lt;/a&gt;（システムエンジニア 生き残りの極意）より：&lt;/p&gt;
&lt;p&gt;オブジェクト指向は、結局のところホントにモノ（オブジェクト）に使われている記法、例えばGUI コンポーネント、データベース、ファイルなどであって、プログラムのアルゴリズムとは無関係のものである。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p class="p"&gt;ふむ。確かに、「オブジェクト」って、なんでしょう？&lt;/p&gt;
&lt;p class="p"&gt;引用したところには、「&lt;q&gt;例えば GUI コンポーネント、データベース、ファイルなどであって、プログラムのアルゴリズムとは無関係&lt;/q&gt;」と書かれています。これ、「プログラムのアルゴリズムとは無関係」に、強く、興味を持ちました。はたして、無関係なのでしょうか。&lt;/p&gt;
&lt;p class="p"&gt;とりあえず、この時点では、無関係ではないと思います。&lt;/p&gt;
&lt;p class="p"&gt;では、&amp;#8220;アルゴリズム&amp;#8221;って、なんでしょうか。ここから始めましょう。「アルゴリズム：プログラムを作るときに用いる、問題を解決するための手順・計算方法。◇アラビアの数学者アル＝フワリズミにちなむ。もと、算用数字を用いた筆算の意。（明鏡国語辞典）」だそうです。さて、オブジェクト志向は「プログラムの手順」とは関係がないのでしょうか。関係がないとすると、どの様に関係がないのでしょう。&lt;/p&gt;
&lt;p class="p"&gt;その為にはまず、「オブジェクト志向言語」において、「オブジェクト」とされる物は、いったいなんでしょうか。&lt;/p&gt;
&lt;p class="p"&gt;私は、「データと、それを扱うための手続きを組み合わせたもの」だと思います。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;我々は、現実に発生している問題を解決するために、コンピューターの中に問題を投影し、プログラミング言語等を用いて問題を解決する方法を組み立てます。つまり、「会員名簿の管理」であったり、「勤怠情報の管理」であったり、「写真に写っている人を判別する」であったり、「宇宙船の姿勢を制御する」であったりという問題を解決するためにコンピューターを使います。そこには、「処理するべき情報」が存在しています。そしてその情報には、「処理されるべき手順」が存在しています。この、「処理すべき情報」に対して「処理すべき手順」を見つけ出し、ひとまとまり（パッケージ）にして扱うことが、「オブジェクト指向処理」（勝手用語）だと考えます。&lt;/p&gt;
&lt;p class="p"&gt;「オブジェクト志向プログラミング」と、「プロセス志向プログラミング」の違いは、何に志向するか、意識や思考を向ける対象にあるのではないでしょうか。プロセス志向では、「為すべきこと」を為す手順に志向します。オブジェクト志向では、「為すべきこと」に関係するオブジェクトに志向します。従って、プロセスに志向しながら、オブジェクトを使うことはできないのではないでしょうか。ただし、オブジェクト志向では、「情報と、その操作手順」がオブジェクトですから、最終的には、プロセスにも志向しなければなりません。&lt;/p&gt;
&lt;p class="p"&gt;では、なぜ、オブジェクトに志向する、すなわち、情報と、その操作手順をパッケージするのでしょうか。&lt;/p&gt;
&lt;p class="p"&gt;私が最初にオブジェクト志向言語に触れたのは、当時在籍していた課でオブジェクト志向言語を扱う最初、または2番目の事案でした。そして課長が、こう尋ねました。「オブジェクト志向って、どんなもん？」。まだ触って間もないので、「どう？」と聞かれて困ったのですが、こう返答しました。「&lt;span style="font-size:120%;"&gt;メンテナンスがし易いようにするためのものだと思います。最初に時間をかけて設計して、後のメンテナンスが楽になるようにするものだと思います&lt;/span&gt;」。この感想は、今でも変わっていません。オブジェクト志向が、情報と情報を扱う手順をパッケージするのは、プログラム（あるいはシステム）のメンテナンスをし易くするためと考えます。&lt;/p&gt;
&lt;p class="p"&gt;プログラム（あるいはシステム）の「メンテナンス期間」とは、なんでしょうか。ここでは、「最初のリリースが終わってから、プログラム（あるいはシステム）が破棄されるまで」とします。あるいは、「最初のビルドが終わってから&amp;#8230;」でも良いかもしれません。&lt;/p&gt;
&lt;p class="p"&gt;つまり、オブジェクト志向ナントカとは、一度動くようになってから後の仕様変更に対して、如何に対応し易くするかを考えたナントカである、と考えます。&lt;/p&gt;
&lt;p class="p"&gt;では、どうして、パッケージ化すると、仕様変更に対して対応しやすくなるのでしょうか。&lt;/p&gt;
&lt;p class="p"&gt;たいていの場合、仕様変更は、扱う情報の変更を伴います。オブジェクト志向分析がなされ、オブジェクト志向設計がなされているなら、変更が起こった情報を特定しやすくなります。また、その情報を扱う方法は、他の情報からは独立しているはずですから、情報処理手順の変更による影響を、他の情報へ伝播させにくくなります。他の情報や、情報処理方法が、他の情報を変更したことによる影響を受けないのなら、修正の範囲は小さくなり、テストの範囲も小さくて済みます。これらの範囲が小さいと言うことは、工数の減少にも繋がります。&lt;/p&gt;
&lt;p class="p"&gt;実際に、このような設計を行うには、かなりの経験が必要だと思います。しかし、特に Java や .NET Framework では、用意されているフレームワークにあるクラスが、高度に抽象化されています。これによって、使う人がオブジェクトに志向しなくても、オブジェクト志向言語を使ったプログラミングができてしまいます。&lt;/p&gt;
&lt;p class="p"&gt;「オブジェクト志向言語を使ったプロセス志向プログラミング」と、「オブジェクト志向プログラミング」。この二つは、混同してはいけないと思います。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/190381.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>オブジェクトを指向してみる／何故インスタンスを作るの？</title><link>http://blogs.wankuma.com/jitta/archive/2010/05/28/189520.aspx</link><pubDate>Fri, 28 May 2010 22:20:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2010/05/28/189520.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/189520.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2010/05/28/189520.aspx#Feedback</comments><slash:comments>44</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/189520.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/189520.aspx</trackback:ping><description>&lt;BLOCKQUOTE&gt;
&lt;P class=quoteSource&gt;&lt;A class=outerLink title=⇒atmarkit.co.jp href="http://el.jibun.atmarkit.co.jp/minagawa/2010/04/post-ebc4.html"&gt;実はオブジェクト指向ってしっくりこないんです！&lt;/A&gt;（システムエンジニア 生き残りの極意）より：&lt;/P&gt;
&lt;P&gt;　「自分でクラスを作ってオブジェクト指向っぽいことをしている」なんてことはまったくない。特に「メンバー関数をstatic宣言すればインスタンス宣言をしなくてもいい」ということ知ってからは、メンバー関数を従来のファンクションのように使っている。共有変数も、pubulic static宣言していまう。したがってプロパティなんて作らない。&lt;/P&gt;
&lt;P&gt;　staticを理解していない人のコードを見ると、いちいちインスタンス宣言しているので笑ってしまう。データベースにアクセスするアプリケーションをC#で書いているのだが、Visual Studioで供給しているSQL関係のクラスを使えばできてしまうのだから。&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=p&gt;向こうでコメントしようかと思ったけど、もったいないのでエントリーにする。&lt;/P&gt;
&lt;P class=p&gt;さて、コメントに、コラム著者のサイト&lt;A class=outerLink title=⇒infoseek.co.jp href="http://wondsky.hp.infoseek.co.jp/index.html"&gt;SE WORLD システムエンジニアの世界 IT技術&lt;/A&gt;というサイトへのリンクがありました。そしてそこには、「ASP.NET ASP.NETのサンプルコードです。典型的なコードパターンを列挙してみました」というのがあるので、ここを見ます。&amp;#8230;だって、MVP &lt;STRONG&gt;for ASP.NET&lt;/STRONG&gt; なんだもん、一応。その中で、これを取り上げてみる。&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=quoteSource&gt;&lt;A class=outerLink title=⇒infoseek.co.jp href="http://wondsky.hp.infoseek.co.jp/vs2005.htm"&gt;ファイルアップロードコントロール&lt;/A&gt;（SE WORLD システムエンジニアの世界 IT技術）より：&lt;/P&gt;&lt;PRE class=code&gt;&lt;CODE&gt;
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile) {
            //string strSaveAs = "C:/test/" + FileUpload1.FileName;
            string strSaveAs = "//マシン名/フォルダ名/" + FileUpload1.FileName;
            FileUpload1.SaveAs(strSaveAs);
        }
    }
}&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;　リモートマシンにも保存できるが、アクセス権がeveryone 書き込みになってないと難しい。ちなみにIIS6.0のASP.NETのプログラムアカウントのデフォルト値はNetwork Serviceです。&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=p&gt;センタリングされていて見にくいので、見やすいように修正しました。&lt;/P&gt;
&lt;P class=p&gt;さて、この中で、&lt;CODE&gt;FileUpload1&lt;/CODE&gt; というのが、&lt;CODE&gt;FileUpload&lt;/CODE&gt; クラスのインスタンスです。そして、&lt;CODE&gt;HasFile&lt;/CODE&gt; とか、&lt;CODE&gt;SaveAs&lt;/CODE&gt; というのは、&lt;CODE&gt;FileUpload&lt;/CODE&gt; クラスのメンバーです。では、&lt;Q&gt;いちいちインスタンス宣言しているので笑ってしまう&lt;/Q&gt;ということなので、インスタンス宣言しなくてもいいように（インスタンスを作らなくてもいいように）、&lt;CODE&gt;FileUpload&lt;/CODE&gt; クラスのメンバーが全て &lt;Q&gt;pubulic static宣言&lt;/Q&gt;されていると仮定します。つまり、「&lt;Q&gt;pubulic static宣言&lt;/Q&gt;だと、こんなに使いにくいぞ」ということを示すことで、なぜインスタンスを作るのかを理解してみよう、という試みです。&lt;/P&gt;&lt;BR&gt;
&lt;P class=p&gt;&lt;CODE&gt;FileUpload&lt;/CODE&gt; クラスのメンバーが全て静的なので、1ページからは1度に1つのファイルしか、アップロードできなくなります。複数のファイルをアップロードしようとすると、&lt;CODE&gt;FileUpload&lt;/CODE&gt; クラスから導出して、&lt;CODE&gt;FileUpload1&lt;/CODE&gt; クラス、&lt;CODE&gt;FileUpload2&lt;/CODE&gt; クラス、&lt;CODE&gt;FileUpload3&lt;/CODE&gt;...と、インスタンスの代わりにクラスを複数作らなければなりません。これは、「コードを書く手間」を考えると、とても不便ではないでしょうか。また、それぞれでクラスが違うのですから、最初に配列を宣言して、インスタンスを作るというわけにもいきません。これも、不便ではないでしょうか。&lt;/P&gt;&lt;PRE class=code&gt;&lt;CODE&gt;
// 配列を宣言して、インスタンスを生成する
FileUpload[] fileUp = new FileUpload[10];
foreach (FileUpload f in fileUp) {
    f = new FileUpload();
}
// メンバーを静的にすると、上記のように出来ず、
// クラスを10個作らなければならない
class FileUpload01 : FileUpload {};
class FileUpload02 : FileUpload {};
class FileUpload03 : FileUpload {};
...
// その後、配列に登録する。
FileUpload[] fileUp = new FileUpload[10];
fileUp[0] = FileUpload01; &lt;SPAN style="COLOR: red"&gt;おおっと、クラスは登録できないや！！&lt;/SPAN&gt;
&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR&gt;
&lt;P class=p&gt;これで、「static にせずにインスタンスを作るのはなぜ？」の答（のひとつ）になるかな？&lt;/P&gt;&lt;BR&gt;
&lt;P class=p&gt;それでは、反論も考えてみましょう。&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=quoteSource&gt;2010年4月28日 (水) 08:53&lt;/P&gt;
&lt;P&gt;むしろC言語の構造体はいやになるほど書いたから、逆にビジネスロジックのクラスの優位性についてピンとこないのです。&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=p&gt;なるほど。&lt;/P&gt;
&lt;P class=p&gt;&lt;CODE&gt;FileUpload&lt;/CODE&gt; は、データだけを持つ構造体であるとすると、どうなるでしょうか。例えば、こんな定義がどこかにあって、それを使って保存することになります。&lt;/P&gt;&lt;PRE class=code&gt;&lt;CODE&gt;
public class StaticFunctions {
    private StaticFunctions() {};
    public static void SaveAs(const FileUpload fu, const string saveFileName) {
        // 処理は省略
    }
    public static void SaveAs(const FileStream fs, const string saveFileName) {
        // 処理は省略
    }
    public static void SaveAs(const MyStructure ms, const string saveFileName) {
        // 処理は・・・&lt;SPAN style="COLOR: red"&gt;おおっと、オーバーロードさせてよかった？&lt;/SPAN&gt;
    }
}
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P class=p&gt;私は、似て非なる構造体を多数書いたので、クラスの方がいい、と思いましたね。&lt;/P&gt;&lt;BR&gt;
&lt;P class=p&gt;様々なコメントが付いていますが、このコメントがもっとも秀逸だと思います。&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P class=quoteSource&gt;2010年4月27日 (火) 16:14&lt;/P&gt;
&lt;P&gt;OOPは理解できないから使わない、と主張されるのは結構だと思います。&lt;/P&gt;
&lt;P&gt;しかし、自分が理解できないからといって「知ったかぶってOOPするヤツら笑っちゃう」というような論調で話を進められるのは宜しくないですね。&lt;/P&gt;
&lt;P&gt;変数が隠蔽できるか否かはOOPの本質ではないんです。そもそも言語仕様としてクラスやプロパティがあるかどうかも本質ではないのです。言語仕様はよりOOPしやすくするための道具にすぎません。&lt;/P&gt;
&lt;P&gt;極意を示すコラムなのですから、OOPを理解したうえで「俺はOOPしない！」と主張する生え抜きのロートルエンジニア（＜良い意味で言っています）が、その経験と技術でもってOOP全盛時代を生き残る方法論を論じる、くらいのレベルの高さがあって欲しいですね。&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=p&gt;こんな風に、簡単にまとめられる技量が欲しいです。。。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/189520.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>協調性とリーダーシップは対立する？</title><link>http://blogs.wankuma.com/jitta/archive/2010/04/22/188288.aspx</link><pubDate>Thu, 22 Apr 2010 22:01:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2010/04/22/188288.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/188288.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2010/04/22/188288.aspx#Feedback</comments><slash:comments>36</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/188288.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/188288.aspx</trackback:ping><description>&lt;blockquote&gt;
&lt;p class="quoteSource"&gt;&lt;a href="http://sankei.jp.msn.com/life/education/100408/edc1004081050001-n1.htm" title="⇒msn.com" class="outerLink"&gt;リーダーシップより協調性　保護者の「理想子ども像」&lt;/a&gt;（MSN 産経ニュース）より：&lt;/p&gt;
&lt;p&gt;　国公立の幼稚園に通う子供を持つ保護者に「理想の子ども像」を聞いたところ、ほぼ全員が「人に迷惑をかけない」など協調性を求めたのに対し、「リーダーシップがとれる」とした保護者は約半数にとどまったことが８日、全国国公立幼稚園長会が実施した調査で明らかになった。&lt;/p&gt;
&lt;p&gt;　岡上直子会長は「最初から協調性ばかり求めると、成長した時に他人の意見ばかり気にして、自分の意見が言えないようになる恐れがある」と話している。&lt;/p&gt;
&lt;p&gt;　調査は昨年１０～１１月に実施され、全国の保護者約３千人や教員約１１００人が回答した。&lt;/p&gt;
&lt;p&gt;　子供の理想像（複数回答）では、「人に迷惑をかけない」「礼儀作法をわきまえる」「ルールや決まりを守れる」という項目で、「そう思う」「ややそう思う」と答えた保護者が合わせて９８～９９％に上った。&lt;/p&gt;
&lt;p&gt;　一方「リーダーシップをとれる」は合わせて５４％、「人より秀でたところがある」も５９％に留まった。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p class="p"&gt;ニュースのタイトルは「リーダーシップより協調性」となっている。これより、「対立」しているかどうかはともかく、「別の物」という事になっていることは、わかる。このブログのタイトルは「釣りタイトル」として、はたしてリーダーシップと協調性は別の物なのだろうか。&lt;/p&gt;
&lt;p class="p"&gt;ニュース タイトルを読んだ時点での感想は、「違う」、つまり「同じ物」あるいは「リーダーシップは協調性の延長線上にある」というもの。&lt;/p&gt;
&lt;p class="p"&gt;リーダーは、集団をまとめなければならない。集団には、様々な意見がある。反対意見をまとめ、説得しなければならない。単に「俺の命令を聞け」は、リーダーではない。独裁者だ。違いは、協力を得られるかどうか。いや、まぁ、ヒトラーも、彼を崇拝する人からは尊敬や協力を得ていたのだろうけれど。だからといって、彼を「リーダー」と言う人がいるだろうか。とすると、「後の評価」になるのか。「後に遺恨を残さない方法で、集団の協力を得る」とか。&lt;/p&gt;
&lt;p class="p"&gt;何にしても、「協力を得る」ためには「協調性」が要るだろ、と。&lt;/p&gt;
&lt;p class="p"&gt;最後に、Wikipedia から引用。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p class="quoteSource"&gt;&lt;a href="http://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%82%B7%E3%83%83%E3%83%97" title="⇒wikipedia.org" class="outerLink"&gt;リーダーシップ&lt;/a&gt;（Wikipedia）より：&lt;/p&gt;
&lt;p&gt;リーダーシップの概念は非常にさまざまな議論があるが、一般的には一人の人間がその他の人間から服従、信頼、尊敬、忠誠、協力を得られるような方法で人間の思考、計画、行動を指揮でき、かつそのような特権を持てるようになる技術及び才能を指すと考えられている。それは意思決定を行う指揮、労力や資源を配分・管理する統制、心的作用による統御の三機能から構成されると考えられているのが一般的。&lt;/p&gt;
&lt;/blockquote&gt;&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/188288.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>cout はマルチスレッドセーフではない？</title><link>http://blogs.wankuma.com/jitta/archive/2010/03/12/187030.aspx</link><pubDate>Fri, 12 Mar 2010 00:26:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2010/03/12/187030.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/187030.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2010/03/12/187030.aspx#Feedback</comments><slash:comments>795</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/187030.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/187030.aspx</trackback:ping><description>&lt;p class="p"&gt;ネタ元から引用。&lt;/p&gt;
&lt;blockquote cite="http://indori.blog32.fc2.com/tb.php/996-a7bcafee"&gt;&lt;p class="quoteSource"&gt;&lt;a href="http://codezine.jp/article/detail/4861" title="⇒codezine.jp" class="outerLink"&gt;スレッドセーフとインテルTBBのコンテナ&lt;/a&gt;の、コメントより：&lt;/p&gt;
&lt;p&gt;　最後にcoutの取り扱いについての注意するべき点を書きます。このサンプルでは単純化するためにロック処理をしていませんが、coutはスレッドセーフではないので、並列処理時にcoutに出力を指定するとコンソール画面の表示が滅茶苦茶になります。試しにparallel_for( blocked_range( 0, count, 10000 ), pop );の部分をparallel_for( blocked_range( 0, count, 1 ), pop );に変えてみてください。何度も実行すると表示がおかしくなるのが確認できます。もしうまく行かない場合は、さらにcout &amp;lt;&amp;lt; value &amp;lt;&amp;lt; " ";の部分を変更して、長い文字列を出力するようにしてください。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p class="p"&gt;これを踏まえて、コメント。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p class="quoteSource"&gt;インドリ （2010/03/03 09:12）&lt;/p&gt;
&lt;p&gt;＞スケジューラーの初期化について&lt;br&gt;
並列処理では実行順序が保障されません。&lt;br&gt;
しかも、アセンブラレベルで命令が実行されております。&lt;br&gt;
その状態なのですから、初心者がTBBとネイティブスレッド・OpenMPなどの処理を併用させたときに、
どのようなプログラムでも正しく実行できると100％の自信を持って言えるでしょうか？&lt;br&gt;
私はそんな危険を冒すよりも1行のプログラムを書く方を勧めます。&lt;/p&gt;
&lt;br&gt;
&lt;p class="quoteSource"&gt;インドリ （2010/03/03 15:55）&lt;/p&gt;
&lt;p&gt;スレッドセーフをもっと正式に言いますと、クラスが複数のスレッドからアクセスされた時に、各スレッドのスケジューリングや実行のタイミングがどうであっても、また呼び出し側コードからの同期化努力やその他の調停努力がなくても正しく振舞う事をスレッドセーフといいます。&lt;/p&gt;
&lt;p&gt;MSの実装ではcoutを一行で書いた場合、短いサンプルでは一応各文字が混ざる事はありません。
しかし、必ず一行で書くというのは実務的に考えて無理な話です。
ですから普通の人は・・・&lt;br&gt;
cout &amp;lt;&amp;lt; "foo" &amp;lt;&amp;lt; .....&lt;br&gt;
(なんらかの処理をする)&lt;br&gt;
cout &amp;lt;&amp;lt; "bar" &amp;lt;&amp;lt; ...&lt;br&gt;
とプログラミングするでしょう。
また必ず一行で書くという行為はcoutという標準出力オブジェクトの不変項と事後条件を満たしていると言えるでしょうか？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p class="p"&gt;ふぅ。。。なんという素人。&lt;/p&gt;
&lt;p class="p"&gt;まず、cout、iostream がスレッドセーフであるというエビデンスから。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p class="quoteSource"&gt;&lt;a href="http://dlc.sun.com/pdf/821-0388/821-0388.pdf" class="outerLink" title="⇒sun.com"&gt;Sun Studio 12 Update 1: C++ ユーザーズガイド&lt;/a&gt;より：&lt;/p&gt;
&lt;p&gt;11.1 マルチスレッドプログラムの構築&lt;/p&gt;
&lt;p&gt;C++ コンパイラに付属しているライブラリは、すべてマルチスレッドで使用しても安全です。&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;11.1.2 C++ サポートライブラリの使用&lt;/p&gt;
&lt;p&gt;C++ サポートライブラリ(llibCrun、libiostream、libCstd、libC) は、マルチスレッドで使用しても安全ですが、非同期では安全(非同期例外で使用しても安全) ではありません。したがって、マルチスレッドアプリケーションのシグナルハンドラでは、これらのライブラリに含まれている関数を使用しないでください。使用するとデッドロックが発生する可能性があります。マルチスレッドアプリケーションのシグナルハンドラでは、次のものは安全に使用できません。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; iostream&lt;/li&gt;
&lt;li&gt; new 式とdelete 式&lt;/li&gt;
&lt;li&gt; 例外&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;p&gt;11.3 C++ 標準ライブラリのオブジェクトのスレッド間での共有&lt;/p&gt;
&lt;p&gt;C++ 標準ライブラリ(libCstd -library=Cstd) は、いくつかのロケールを除けばマルチスレッドで使用しても安全なライブラリで、このライブラリの内部は、マルチスレッド環境で正しく機能することが保証されています。ただし、依然、スレッド間で共有するライブラリオブジェクト周りには注意を払う必要があります。setlocale(3C) およびattributes(5) のマニュアルページを参照してください。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p class="quoteSource"&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/library/c9ceah3b(VS.100).aspx" title="⇒microsoft.com" class="outerLink"&gt;Thread Safety in the Standard C++ Library&lt;/a&gt; （.NET Framework 4）より：&lt;/p&gt;
&lt;p&gt;iostream Classes&lt;/p&gt;
&lt;p&gt;The iostream classes follow the same rules as the other classes, with one exception. It is safe to write to an object from multiple threads. For example, thread 1 can write to cout at the same time as thread 2. However, this can result in the output from the two threads being intermixed.&lt;/p&gt;
&lt;br&gt;
&lt;p class="quoteSource"&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/library/c9ceah3b(VS.71).aspx" title="⇒microsoft.com" class="outerLink"&gt;Thread Safety in the Standard C++ Library&lt;/a&gt; （.NET Framework 1.1）より：&lt;/p&gt;
&lt;p&gt;iostream Classes&lt;/p&gt;
&lt;p&gt;Note that reading from a stream buffer is not considered to be a read operation. It should be considered as a write operation, because this changes the state of the class.&lt;/p&gt;
&lt;p&gt;For reads to the same object, the object is thread safe for reading:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;From one thread at a time when no writers on other threads.&lt;/li&gt;
&lt;li&gt;From many threads at a time when no writers on other threads.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For writes to the same object, , the object is thread safe for writing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;From one thread when no readers on other threads.&lt;/li&gt;
&lt;li&gt;From many threads (when accesses are limited to stream buffers).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For reads to different objects of the same class, , the object is thread safe for reading:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;From one thread at a time.&lt;/li&gt;
&lt;li&gt;From one thread at a time when no writers on other threads.&lt;/li&gt;
&lt;li&gt;From many threads at a time.&lt;/li&gt;
&lt;li&gt;From many threads at a time when no writers on other threads.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For writes to different objects of the same class, the object is thread safe for writing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;From one thread when no readers on other threads&lt;/li&gt;
&lt;li&gt;From many threads&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p class="p"&gt;この様に、iostream は、スレッド セーフです。ただし、スレッド セーフなライブラリだけを使ったからといって、アプリケーションがスレッド セーフになるわけではありません。ここの所を勘違いすると、困ったことになります。上の例は、そういう勘違いをしているわけです。&lt;/p&gt;
&lt;p class="p"&gt;さて、どういうことでしょうか。&lt;/p&gt;
&lt;p class="p"&gt;concurrent_queue は、マルチ スレッドで使えるように、TBB で用意されたクラスです。このクラスに用意されたメソッドは、スレッド セーフです。では、次のようなプログラムを作ったら、どうなるでしょう？&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;
キューは、concurrent_bounded_queue を使うものとする。
スレッド1() {
    1～10000のうち、奇数をキュー インする。
}
スレッド2() {
    1～10000のうち、偶数をキュー インする。
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p class="p"&gt;こんなことでコード書いて動作検証するのも面倒。はい、上記2つを、並列に動作するスレッドで呼び出したとします。キューには、どの様に入るでしょうか。答え。予測不能。はい、アプリケーションは、マルチ スレッドで、期待する動作と異なる結果を返しました。よって、「concurrent_bounded_queue はスレッド アンセーフです」。&lt;/p&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p class="p"&gt;そんなバカな。&lt;/p&gt;
&lt;p class="p"&gt;スレッド アンセーフなのはアプリケーションであって、concurrent_bounded_queue ではありません。もしくは、「スレッド セーフか」は関数やメソッド単位で保証されるものであり、開発者がアプリケーションとしてどうなのかを作り込みます。ここを取り違えて「&lt;q&gt;cout はスレッド セーフではない&lt;/q&gt;」というのは、まったく馬鹿げています。いじょ。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/187030.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>並列化に関する記事紹介</title><link>http://blogs.wankuma.com/jitta/archive/2009/12/23/184184.aspx</link><pubDate>Wed, 23 Dec 2009 21:53:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2009/12/23/184184.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/184184.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2009/12/23/184184.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/184184.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/184184.aspx</trackback:ping><description>&lt;p class="p"&gt;紹介→&lt;a href="http://itpro.nikkeibp.co.jp/article/Interview/20091217/342348/" title="⇒nikkeibp.co.jp" class="outerLink"&gt;「並列化の難しさの議論には間違った部分がある」&lt;/a&gt;&lt;/p&gt;
&lt;p class="p"&gt;Intel の中の人へのインタビュー記事。特に、この言葉に注目→&lt;q&gt;並列プログラミングの難しさ（snip）は，効果的なアルゴリズムの選択だ。メモリーの内容が壊れてしまうとか，制御フローを組むのが難しいといった部分は，本質的なものではな（い）&lt;/q&gt;&lt;/p&gt;
&lt;p class="p"&gt;あることを実現する方法は、ひとつだけとは限りません。ふたつ、あるいはそれ以上、存在することが多々あります。同じ事を実現するために、より効率がよい方法を選ぶことは、重要なことです。ここで「効率」は、単に実行速度が速い、ということだけでなく、拡張性や保守性といった因子も含まれます。多くの知識を持っていることは、多くの選択肢を持っていることに繋がります。勉強の嫌いな私にとって、「多くの選択肢を持つ」ために勉強しなければならないのは、苦痛なんですけどねorz&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;あと、並列化の事じゃないけど、2ページ目の、ここ→&lt;q&gt;他のコンパイラで作って，最後にコンパイルをする人だけIntelの製品を使ってもいい&lt;/q&gt;&lt;br&gt;
な、なるほど！こういう考え方は、なかったわ！！&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/184184.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>Multi-Core と Multi-Thread</title><link>http://blogs.wankuma.com/jitta/archive/2009/12/16/183892.aspx</link><pubDate>Wed, 16 Dec 2009 22:40:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2009/12/16/183892.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/183892.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2009/12/16/183892.aspx#Feedback</comments><slash:comments>125</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/183892.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/183892.aspx</trackback:ping><description>&lt;P class=p&gt;ネタもと→&lt;A class=outerLink title=⇒codezine.jp href="http://codezine.jp/article/detail/4404"&gt;インテル スレッディング・ビルディング・ブロックの概要&lt;/A&gt;&lt;/P&gt;
&lt;P class=p&gt;どうして、こう、中途半端な記事を上げられるのか、不思議。ハッ！こうしてトラックバックさせることで、記事の参照数を増やそうという魂胆か？！&lt;/P&gt;&lt;BR&gt;
&lt;P class=p&gt;さてさて。何でもかんでもマルチ スレッドに出来るか、というと、そうでもありません。マルチ スレッドの、向き不向きがあります。それをまず、検証するのが、今回のエントリ。&lt;/P&gt;&lt;BR&gt;
&lt;P class=p&gt;ちょっと考えたのですが、Quick Sort のアルゴリズムが説明しやすいかな？&lt;/P&gt;
&lt;P class=p&gt;ご存知ではない方のために、ごくごく簡単に説明しておきます。例えば、次のような数値が与えられているとして、これを1から順番に並べたいとします。&lt;BR&gt;&lt;BR&gt;{ 1, 8, 4, 10, 65, 3, 87, 5, 90, 52, 31, 78, 45, 9, 34, 67, 11, 41, 99, 75, 21 }&lt;BR&gt;&lt;BR&gt;第1ステップは、ここから適当に1つを選びます。例えば、「75」とします。&lt;SPAN class=cimment&gt;この、「適当にひとつを選ぶ」という事についても、蘊蓄が色々あるので調べてみて下さい。&lt;/SPAN&gt;&lt;BR&gt;第2ステップは、この「75」より小さいものは「75」の左へ、大きいものは「75」の右へ、順番は適当で良いので寄せます。&lt;BR&gt;&lt;BR&gt;{ { 1, 8, 4, 10, 65, 3, 5, 52, 31, 45, 9, 34, 67, 11, 41, 21 }, [75], { 87, 90, 78, 99 } }&lt;BR&gt;&lt;BR&gt;すると、「75」の位置が確定しました。&lt;BR&gt;第3ステップは、確定した数値の右と左で、2つのステップを繰り返します。&lt;/P&gt;
&lt;P class=p&gt;しまった。「75より小さい」「75より大きい」としてしまった。当然、「75が複数あったらどうなるの？」という疑問が生じます。大きい方か、小さい方か、どちらか決めて、寄せます。&lt;/P&gt;
&lt;P class=p&gt;と、ここで、考えます。これから行う事は、「1．ひとつの数値を選ぶ。」「2．その数値と全ての数値を比べ、大小によって分類する（ここでは、あえてソートと言わない）。」「3．分類された項目の数が1つになるまで、分類結果に対して1と2を繰り返す。」です。分類しなければならない範囲は異なりますが、しなければならない作業は同じです。つまり、for や while による繰り返し、あるいは再帰構文によって、表現できることがわかります。&lt;/P&gt;
&lt;P class=p&gt;マルチ スレッドが効率的に機能する（箇所のひとつ）のは、ここです。マルチで作業することが、互いに影響を及ぼしあわない。そして、それがそれなりに時間がかかるとき、です。&lt;/P&gt;
&lt;P class=p&gt;複数の処理で行う事が、互いに影響を及ぼしあうときを考えます。処理Ａが読み込む値は、処理Ｂが計算します。このとき、処理Ａは、処理Ｂが計算を終えてしまうまで、待機しておかなければなりません。この場合、処理Ａと処理Ｂを平行に実行させる意味はありません。&lt;/P&gt;
&lt;P class=p&gt;遅いけれども、アルゴリズムの説明によく用いられる、バブル ソートというソート方法があります。これは、マルチ スレッドで行う事で、高速化が見込めるでしょうか。検証します。&lt;/P&gt;
&lt;P class=p&gt;まず、アルゴリズムの確認です。バブル ソートは、配列の終端（あるいは始端）から2つの要素を比較し、より小さい方（大きい方）を配列の始端（終端）の方へ入れ替えます。1度配列の要素を全て比較すると、一番小さいものが始端にきています。これを、何度も繰り返します。&lt;BR&gt;&lt;BR&gt;{ 1, 8, 4, 10, 65, 3, 87, 5, 90, 52, 31, 78, 45, 9, 34, 67, 11, 41, 99, [ 75, 21 ] }&lt;BR&gt;&lt;BR&gt;75と21を比べると、21の方が小さいので、入れ替える。以下、順に前へ移動していく。&lt;BR&gt;&lt;BR&gt;{ 1, 8, 4, 10, 65, 3, 87, 5, 90, 52, 31, 78, 45, 9, 34, 67, 11, 41, [ 99, 21 ], 75 }&lt;BR&gt;{ 1, 8, 4, 10, 65, 3, 87, 5, 90, 52, 31, 78, 45, 9, 34, 67, 11, [ 41, 21 ], 99, 75 }&lt;BR&gt;{ 1, 8, 4, 10, 65, 3, 87, 5, 90, 52, 31, 78, 45, 9, 34, 67, [ 11, 21] , 41, 99, 75 }&lt;BR&gt;{ 1, 8, 4, 10, 65, 3, 87, 5, 90, 52, 31, 78, 45, 9, 34, [ 67, 11] , 21, 41, 99, 75 }&lt;BR&gt;{ 1, 8, 4, 10, 65, 3, 87, 5, 90, 52, 31, 78, 45, 9, [ 34, 11 ], 67, 21, 41, 99, 75 }&lt;BR&gt;{ 1, 8, 4, 10, 65, 3, 87, 5, 90, 52, 31, 78, 45, [ 9, 11 ], 34, 67, 21, 41, 99, 75 }&lt;BR&gt;&lt;BR&gt;ここから面倒なので早送り&lt;BR&gt;&lt;BR&gt;{ 1, 8, 4, 10, 65, 3, 87, [ 5, 9 ], 90, 52, 31, 78, 45, 11, 34, 67, 21, 41, 99, 75 }&lt;BR&gt;{ 1, 8, 4, 10, 65, [ 3, 5 ], 87, 9, 90, 52, 31, 78, 45, 11, 34, 67, 21, 41, 99, 75 }&lt;BR&gt;{ [ 1, 3 ], 8, 4, 10, 65, 5, 87, 9, 90, 52, 31, 78, 45, 11, 34, 67, 21, 41, 99, 75 }&lt;BR&gt;&lt;BR&gt;やっと先頭が確定。今度は99と75を比べるところから、またスタート。&lt;/P&gt;
&lt;P class=p&gt;バブル ソートは、二重のループが使われます。ループするのだから、マルチ スレッドにすると速くなるでしょうか。&lt;/P&gt;
&lt;P class=p&gt;残念ながら、バブル ソートは、マルチ スレッド化出来ません。2回目のループで比較するのは、1回目のループで比較した結果だからです。内側のループも、外側のループも、ひとつ手前の回の結果が必要なので、順次処理するしかないのです。&lt;/P&gt;&lt;BR&gt;
&lt;P class=p&gt;このように、ある処理をするために、別の処理の結果が必要な場合、マルチ スレッド化することは出来ません。「必要」な処理が済むまで、出来ないのですから。&lt;/P&gt;
&lt;P class=p&gt;このことは、システム開発の「工程」に照らし合わせると、より理解できるのではないでしょうか。システムを作り上げるために、必要な「処理」が洗い出されます。その処理の依存性を明らかにして、「処理群」を作ります。処理群を、担当者に割り当てます。この、「担当者に割り当てる」というところが、複数のスレッドを作ることになるわけです。&lt;/P&gt;
&lt;P class=p&gt;このとき、並行に処理させられる処理群は、リソース、つまり担当者の数によって決まります。担当者の数を超えて平行な処理群を作っても、誰かが一人で処理群を切り換えながら処理を行うため、効率は上がらず、返って切り換えのために効率を落とすことになるかもしれません。もちろん、処理内容によって、実際にどうなのかは異なります。待ち時間が多い処理ならば、その待ち時間を他の処理群に割り当てることで、効率的に処理できるかもしれません。もちろん、他の処理の結果に依存しないことが前提です。&lt;/P&gt;&lt;BR&gt;
&lt;P class=p&gt;どの様なところに、マルチ スレッドが活きるか。それを見極めるために、まず、分析ということですね。実行するべき事同士が、結果に依存しないなら、並行に処理させられます。結果に依存するなら、平行には出来ません。やるべき事を把握していれば、何も難しくはありません。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/183892.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>これはとてもひどい</title><link>http://blogs.wankuma.com/jitta/archive/2009/10/29/182562.aspx</link><pubDate>Thu, 29 Oct 2009 22:51:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2009/10/29/182562.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/182562.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2009/10/29/182562.aspx#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/182562.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/182562.aspx</trackback:ping><description>&lt;p class="p"&gt;ネタもと→&lt;a href="http://el.jibun.atmarkit.co.jp/tadokoro/2009/10/windows-7-profe.html" title="⇒atmarkit.co.jp" class="outerLink"&gt;こ　れ　は　ひ　ど　い&lt;/a&gt;&lt;/p&gt;
&lt;p class="p"&gt;なんか、システム エンジニアさん、らしいです。本当かよ、この乱文。&lt;/p&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;p&gt;特に、これといったエクスペリエンスはなかったので、あ、何となく軽くなったかな、といった程度で、Vista の焼き直し版的な色彩が強いです。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="p"&gt;推敲した？見直した？こうじゃない？→「特に、これといったエクスペリエンスは見あたりません。「あ、何となく軽くなったかな？」といった程度で、Vista の焼き直し版的な色彩が濃いです。」&lt;/p&gt;
&lt;p class="p"&gt;「Vista の焼き直し」ってなぁ。。。&lt;kbd&gt;winver.exe&lt;/kbd&gt; コマンドを実行すればわかりますが、Windows 7 のバージョンは 6.1。Vista は 6.0 です。Windows 2000（5.0）に対する Windows XP（5.1）と同じ位置なわけです。XP の時も、色々あったなぁ。&lt;/p&gt;
&lt;p class="p"&gt;「これといったエクスペリエンスは見あたらない」んだ。私は、ふるふるシェイカーに驚いたけどね。エクスプローラーのメニューに、「新しいフォルダー」があるのも、ぐぅ～！Aero が有効な場合、右下にマウス カーソルを移動させるとデスクトップが見えたり、他のウィンドウを透明にするのなかんも、気に入っているんだけどなぁ（Virtual PC 内で使う分には、使えないのが悲しい）。&lt;/p&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;p&gt;うちの場合、以下のアプリケーションがインストールに際して除去しなければいけなかったものです。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="p"&gt;「何を」インストールするために、除去しなければならなかったのか、わかりません。おそらく、Windows 7 へアップグレード インストールするために、前もってアンインストールしておかなければならなかった物だと思います。でも、どうして、アンインストールしておかなければならないとわかったのか、わかりません。&lt;/p&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;p&gt;なお、WinDVD 6 は、OSアップグレード後、もう一度インストールすることで解決できましたし、LBP-3100も、キヤノンのホームページにデバイスドライバがあったので、それを使用して解決できました。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="p"&gt;うん。で、他のは？&lt;/p&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;p&gt;これは、何らかの原因で、旧来の Ready Boost が0バイトになっていましたので、デバイスを再フォーマットして、作り直す必要があります。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="p"&gt;私のところでは、フォーマットの必要はなかった。ドライブのプロパティで、ReadyBoost タブを開き、「このデバイスを使用しない」にして [OK]。USB ドライブのルートから、ReadyBoost.sfcache ファイルがなくなっているのを確認してから、もう一度設定すれば OK。&lt;/p&gt;
&lt;p class="p"&gt;「なんらかの原因で」って、原因はわからないのね？抜き差しの仕方が悪くて壊れたかもしれないのね？&lt;/p&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;p&gt;MS Outlook 2007 で、メッセージのハイパーリンクが押下できない&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="p"&gt;何が起こって、どういう申し出に、どういう対応があったのか、さっぱりわからん。わかるのは、「名前を間違われた」事だけ。それも、相手が悪いのかどうか、よく分からん。私は、「はなおか」だけど、「たなか」と聞き直されることがある。私の発音、滑舌が悪いからなんだろう。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;なんか、これ、コラムなの？&lt;/p&gt;
&lt;dl&gt;
	&lt;dt&gt;コラム&lt;/dt&gt;&lt;dd&gt;新聞・雑誌などで、短い評論などを載せる囲みの欄。&lt;/dd&gt;
	&lt;dt&gt;評論&lt;/dt&gt;&lt;dd&gt;ある物事の内容を論じ、批評すること。&lt;/dd&gt;
	&lt;dt&gt;論じる&lt;/dt&gt;&lt;dd&gt;ある物事について筋道を立てて述べる。&lt;/dd&gt;
	&lt;dt&gt;批評&lt;/dt&gt;&lt;dd&gt;物事の長短・優劣などを指摘して評価を述べること。&lt;/dd&gt;
&lt;/dl&gt;
&lt;p class="p"&gt;長短、優劣などの「指摘」が、何処にされているんだろう？ここに書かれているのは、個人の「感情」でしょ。ここに書かれている事の何処が、「筋道を立てて述べてある」のだろう？感情が感情のままに書かれているだけでしょ。コラムじゃなくて、メモだよ、これ。メモはチラシの裏か、自分のブログでどうぞ。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;しかも、コメントが、また、ひどい。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;あんたもひつこかね。今、大阪脱出作戦に向けて、首都圏の親類縁者すべてにホームステイ願いをお願いしているところなので、お前と遊んでいる暇はなかばい。&lt;/p&gt;
&lt;p&gt;どこへでも去ね。あと、こんにちは、じゃなくて、こんばんはの時間なので、コピペなどというちゃちいことはやめようね。やることが姑息で幼いよ。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="p"&gt;ん～～～。これ、“本文に”書いていたら、掲載されるのだろうか？&lt;/p&gt;
&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/182562.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>ここはひどい</title><link>http://blogs.wankuma.com/jitta/archive/2009/10/26/182447.aspx</link><pubDate>Mon, 26 Oct 2009 22:38:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2009/10/26/182447.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/182447.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2009/10/26/182447.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/182447.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/182447.aspx</trackback:ping><description>&lt;BLOCKQUOTE&gt;
&lt;P class=quoteSource&gt;&lt;A class=outerLink title=⇒nikkeibp.co.jp href="http://pc.nikkeibp.co.jp/article/special/20091022/1019750/"&gt;【戸田覚がWin7を総点検2】そもそもWindows 7は使いやすくなったのか？&lt;/A&gt;（戸田覚がWindows 7の○と&amp;#215;を総点検）より：&lt;/P&gt;
&lt;P&gt;さすがのWindows 7も、常駐ソフトが増えると起動に時間がかかるのだ。&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P class=p&gt;記事ではなく、上記引用部分ピンポイントです。&lt;/P&gt;
&lt;P class=p&gt;いくら OS が進化しようが、いくら CPU コア数が増えようが、「ハードディスクからメモリへの転送」は、順次処理するしかなく、バスの転送速度以上に速くなったりしない。この言葉は、なんか、間違ってる。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/182447.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>はなおか じった</dc:creator><title>1から10まで足す、ですって？</title><link>http://blogs.wankuma.com/jitta/archive/2009/10/01/181760.aspx</link><pubDate>Thu, 01 Oct 2009 22:41:00 GMT</pubDate><guid>http://blogs.wankuma.com/jitta/archive/2009/10/01/181760.aspx</guid><wfw:comment>http://blogs.wankuma.com/jitta/comments/181760.aspx</wfw:comment><comments>http://blogs.wankuma.com/jitta/archive/2009/10/01/181760.aspx#Feedback</comments><slash:comments>23</slash:comments><wfw:commentRss>http://blogs.wankuma.com/jitta/comments/commentRss/181760.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/jitta/services/trackbacks/181760.aspx</trackback:ping><description>&lt;p class="p"&gt;プチ祭り？「&lt;A href="http://blogs.wankuma.com/rti/archive/2009/09/29/181710.aspx"&gt;気がつくと&lt;/a&gt;」とか、「&lt;A href="http://blogs.wankuma.com/andochin/archive/2009/09/30/181717.aspx"&gt;[C++] １から１０まで足す&lt;/a&gt;」とか、「&lt;A href="http://blogs.wankuma.com/episteme/archive/2009/09/30/181731.aspx"&gt;1+2+&amp;#8230;+10&lt;/a&gt;」とか、「&lt;A href="http://blogs.wankuma.com/hirase/archive/2009/09/30/181733.aspx"&gt;[C] 1から10までの総和をマクロでエレファントに解く。&lt;/a&gt;」とか。&lt;/p&gt;
&lt;br&gt;
&lt;p class="p"&gt;「55と出力する」に決まってるじゃないですか。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;
10 REM This code is written for N80-BASIC
20 PRINT 55
&lt;/code&gt;&lt;/pre&gt;
&lt;p class="p"&gt;大元のネタは、おそらく、&lt;a href="http://el.jibun.atmarkit.co.jp/g1sys/2009/09/post-38ec.html" title="⇒atmarkit.co.jp" class="outerLink"&gt;「転職活動する暇があったらブログを書け」について&lt;/a&gt;（ベンチャー社長で技術者で）だと思います。私の答えは、&lt;q&gt;一般社会ではそれではダメで、意図がまったく読み取れてないからゼロです。&lt;/q&gt;だ、そうです。&lt;/p&gt;
&lt;p class="p"&gt;うむ、そうですか。私は、意図を、読みません。だって、読み間違えていたら、手戻り作業が大変じゃないですか。だから、意図は尋ね、確認します。・・・いや、ごめんなさい。これからは確認します。今、意図を読み違えて大変なことになっているのよ～～(T^T)&lt;/p&gt;
&lt;p class="p"&gt;私が上記のようなコードを書いた意図は、わざわざ「written for N80-BASIC」と、今回は remark を振ったところにあります。N80-BASIC は、インタープリター言語です。逐次翻訳です。FOR 文を書いたら、命令をコンパイルしながら実行するので、遅いのです。先に計算できるものはしておく。インタープリター言語を使っていた頃の、ひとつの知識です。&lt;/p&gt;
&lt;p class="p"&gt;もちろん、C/C++ で、次のように書くのもありです。これもコンパイル時に最適化で計算されてしまいます。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;
#include "stdafx.h"
#include &amp;lt;iostream&amp;gt;
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    cout &amp;lt;&amp;lt; 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 &amp;lt;&amp;lt; endl;
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;br&gt;
&lt;p class="p"&gt;ところで、ここのコメントに、「10億だったら&amp;#8230;」とありますが。&lt;/p&gt;
&lt;p class="p"&gt;まず、10億だったら、答えは何か。&lt;br&gt;
10だと、55&lt;br&gt;
100だと、5050&lt;br&gt;
1000だと、500500、です。法則が見えましたね。&lt;br&gt;
10億は1000000000、0が9個あるので、5の後に0を8個入れた、500000000500000000&amp;#8230;50京5億です。&lt;/p&gt;
&lt;p class="p"&gt;これがコンピューターに計算できるか？微妙です。なぜなら、コンピューターが扱える数の範囲には、限りがあるからです。&lt;/p&gt;
&lt;p class="p"&gt;演算に用いる型のビット数が32ビットの場合、約21億（符号無しで約42億）が最大となります。このため、32ビットの整数型では、計算途中にオーバーフローが発生します。64ビットだと、約922京（符号無しだと約1844京）です。SQL Server や Oracle ではもっと大きな数字を扱えます。SQL Server 2005以降と Oracle では38桁扱えます。えっと。。。京、垓、杼（正しくはノ木偏）、穣、溝、澗の、澗（カン）だそうです。&lt;/p&gt;
&lt;p class="p"&gt;じゃぁ、64ビットだと、いくつまで計算できるでしょうか。10億で50京です。100億だと5千京です。ああ、超えた。。。&lt;/p&gt;
&lt;p class="p"&gt;反対にしよう。総和が922京になる数字を求めよう。・・・4294967295。これの答えが9223372034707292160。約922京なので、求められるはずです。&lt;/p&gt;
&lt;p class="p"&gt;ところが、生島さんが期待する「(n + 1) &amp;#215; n &amp;#247; 2」の計算式では、答えが求められないのです。&lt;/p&gt;
&lt;p class="p"&gt;なぜでしょう？&lt;/p&gt;
&lt;p class="p"&gt;「(n + 1) &amp;#215; n」で、約1844京となり、桁あふれを起こすからです。&lt;span class="comment"&gt;922京を2倍して平方根を取ると、42億になります。が、それを先に書くと1844京という値が先に出てしまい、オーバーフローがチョンばれです。その為、上ではいきなり42億という数字を出しています。&lt;/span&gt;&lt;/p&gt;
&lt;pre class="code"&gt;検証&lt;code&gt;
#include "stdafx.h"
#include &amp;lt;iostream&amp;gt;
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    __int64 max = 4294967295;
    __int64 sum = 0;
    for (__int64 i = 1; i &amp;lt;= max; ++i) {
        sum += i;
    }
    cout &amp;lt;&amp;lt; sum &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; (max + 1) * max / 2 &amp;lt;&amp;lt; endl;
    return 0;
}
&lt;/code&gt;
結果
C:\Projects\TestSolution\Debug&gt;totalSum.exe
9223372034707292160
-2147483648
&lt;/pre&gt;
&lt;p class="p"&gt;これを防ぐためには、「(n + 1) &amp;#215; (n &amp;#247; 2)」とするのが、ひとつの方法です。しかし、n が奇数の場合、正しい結果が得られません（9223372032559808512になる）。整数と整数の除算は整数になり、0.5が捨てられるからです。n が奇数の場合は、「((n + 1) &amp;#247; 2) &amp;#215; n」とします。&lt;/p&gt;
&lt;pre class="code"&gt;&lt;code&gt;
#include "stdafx.h"
#include &amp;lt;iostream&amp;gt;
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    __int64 max = 4294967295;
    __int64 sum = 0;
    for (__int64 i = 1; i &amp;lt;= max; ++i) {
        sum += i;
    }
    cout &amp;lt;&amp;lt; sum &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; (max + 1) * max / 2 &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; ((max % 2 == 1) ? ((max + 1) / 2) * max
                                  : (max + 1) * (max / 2))
        &amp;lt;&amp;lt; endl;
    return 0;
}
&lt;/code&gt;
結果
C:\Projects\TestSolution\Debug&gt;totalSum.exe
9223372034707292160
-2147483648
9223372034707292160
&lt;/pre&gt;
&lt;br&gt;
&lt;p class="p"&gt;今回は固定の数字を求めましたが、ユーザーによる手入力の場合は、上限を超えるような数字ではないことを確認しておく必要があるかもしれません。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/jitta/aggbug/181760.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>