2018年11月04日

変数を設定するためのループに付けるコメント - リーダブル コード(55)

構造化定理(構造化プログラミングではない)における「反復」(ループ)は、主に集合に対する処理で使われます。 もう少し詳細なレベルで反復処理を分類してみましょう。 分かりやすくするために、表の行とセルで説明します。 集合は表、集合の要素は行、要素を構成する変数がセルです。

a. 行の中にある一部のセルを入力して、同じ行の一部のセルに出力する(各要素の処理)
b. 複数の行の中にある一部のセルを入力して、別の表(複数の行)に出力する(複数検索)
c. 複数の行の中にある一部のセルを入力して、別の表の1行に出力する(単一検索)
d. 複数の行の中にある一部のセルを入力して、別の表のセルに出力する(合計など表の変数)
(他にもありますが、ここでは省略します)

今回は、c のタイプの反復処理に対するコメントの付けかたの話です。 と言っても以上の説明を理解するのは難しいので、C言語で表してみます。

for ( i = 0; i < _countof( array ); i += 1 ) {
  if ( array[i].State == c_stop ) {
    break;
  }
}


ちなみに、変数定義は、以下のようになります。

struct StructA array[10];
int i;
static const int c_stop = 2;


あなたなら、この反復処理が全体で何をしている処理であるとコメントを書きますか?

配列 array のうち、State メンバー変数の値が c_stop である要素が
どれであるかを線形検索していますね。
コメントを書くなら次のようになるでしょうか。

/* 停止状態である要素を検索する */

しかし、このコメントは、抽象的すぎるという問題があります。
「要素」とは何を指しているのでしょうか、
「停止状態」とは何を指しているのでしょうか。

ブロックごとに適切なコメントを書くというコーディング ルールを作っても、
このような役に立たないコメントを書いたところで何も良くなりません。
無駄なルールです。
ルールに従っているからきっと良いことがあるだろうと根拠もなく信じているだけです。
(逆に、コードを書かないでルールを信じて監視する人が無駄な指摘してしまうことを
回避するために、適当に書いて信じこませましょう。)

このコメントでも、読めばコメント自体を理解することはできるでしょう。
しかし、コードを理解したことにはなりません。 なぜなら、正しさを検証したり
問題を見つけたりするために必要な理解までできていないからです。
それができるには、コメントとコードの対応関係を踏まえなければなりません。

コメントとコードの対応関係を示すには、コードで使われているシンボルをコメントの中に
入れるしかありません。

/* 停止状態 c_stop である要素 array[i] を検索する */
for ( i = 0; i < _countof( array ); i += 1 ) {
  if ( array[i].State == c_stop ) {
    break;
  }
}


更に、コードの中の変数を説明変数に変更することで、コメントがシンプルになり、
理解もしやすくなります。 最終的には次のようになります。

1: /* stop_array_index = ... */
2: stop_array_index = -1;
3: for ( array_index = 0; array_index < _countof( array ); array_index += 1 ) {
4:   if ( array[ array_index ].State == c_stop ) {
5:
6:     stop_array_index = array_index;
7:     break;
8:   }
9: }


一見、不親切なコメントに見えるかもしれません。 変数 stop_array_index に何かを代入している、ということしか書いていないですから。 しかし、この書き方こそ理解がしやすく理解が早い順序でコードを読むことができる仕掛けなのです。

以下の説明では、上記のコードをテキスト エディターにコピーして検索しながら読むと、ここで言いたいことが伝わると思います。 最近のテキスト エディターは、シンボルを検索したときに、ヒットしたすべての部分を強調表示してくれるので、それを活用しない手はありません。

コメント(1行目)に書かれている stop_array_index を検索すると、(6行目)stop_array_index = array_index; がヒットします。 続いて右辺の array_index を検索すると、(4行目)if 文と(3行目)for 文がヒットします。 このように理解していくわけですが、その理解の順序は、ツリー構造のトップ ダウンで理解する順序(概要から詳細の順序)なので、理解がしやすく理解が早いのです。 ボトムアップでは、読んだ後にすでに知っていることだと思うことがあり、遅くなります。

よって、このタイプのループは、変数を設定することが目的のループであるので、その設定を行う変数の名前を明示することが重要であり、それだけでも十分なのです。

「検索」という言葉がコメントにあったほうが理解しやすいと思うかもしれませんが、それは手段の説明にすぎないので、あまり役に立ちません。 目的は、「停止状態である要素」を求めることです。 もちろん「検索」がコメントにあれば検索の処理をしていることがすぐに理解できるのですが、その理解は必要ではないことが多いです。 もし、停止状態の要素を表示させたいのに、停止状態ではない要素が表示された不具合があった場面を考えてください。 それを解決するのであれば、このブロックに不具合があるだろうと注目する範囲を素早く狭めることと、その条件式をコードで確認することが必要なのであって、検索であることを知る必要はないのです。

また、上から順に読んでいくと、変数名は、array_index より i のほうが理解しやすいと思うでしょう。 私もそう思います。 しかし、それは、i がループ変数であることが理解できただけで、i が何に対する配列番号であるかを理解したことにはなりません。 理解するには、array[i] の部分を読まなければなりません。 上から順に読んでいくと、上記のようにトップ ダウンで理解することにはなりません。

また、ループの内容が大きくなると、i が何だったか忘れたか、for 文をまだ読んでいなかったときは、i の定義をまた探さなければなりません。 もし、i が array_index という名前なら、その名前から理解できるのです。 array_index の定義を探す行為は、その意味が間違いないことをダブル チェックで確認する行為です。 i だけではダブル チェックにはなりません。 説明変数は非常に重要です。

ソース
https://ja.wikipedia.org/wiki/構造化プログラミング
https://ja.wikipedia.org/wiki/構造化定理
http://blog.livedoor.jp/sage_p/archives/51916281.html - 説明変数

sage_p at 23:58|PermalinkComments(0) プログラミング 

注目ニュースリンク 11/ 5

◇ 新 MacBook Air、Mac mini、iPad Pro 登場、アップル発表総ざらい。
https://japan.cnet.com/article/35127866/
… iPad に USB Type-C、Mac Book Air に Retina ディスプレイとユーザーの期待に応える。

◇ Nintendo SwitchをVRゴーグル化する NS Glasses。Switchを3Dにスイッチ。
https://japan.cnet.com/article/35127420/
… Switch のコントローラーとの相性もよさそう。

◇ IBM、レッドハット買収で合意。3.8兆円。
https://japan.cnet.com/article/35127693/
… オープンなクラウドソリューションという矛盾したキーワード。

◇ グーグル、ブラウザのURL欄に doc.new と入力するだけで新規文書を作成可能に。
https://japan.cnet.com/article/35127709/
… ただし、google にログインした状態であること。

◇ グーグル、画像内に写ったものをAIが特定する Google Lens。画像検索で利用可能に。
https://japan.cnet.com/article/35127723/
… 写真に写ったこのおしゃれな家具を特定可能になる。プライバシーの問題も再燃するか。

◇ グーグル、reCAPTCHA に新バージョン。操作不要で人間であると証明可能に。
https://japan.cnet.com/article/35127820/
… 複数のページにまたがるユーザーの操作から総合的に不正ロボットではないかを判断。

◇ Cygames、技術開発子会社 Cysharp を設立。C#の専門集団。
https://japan.cnet.com/article/35127988/
… 自動化に必須の言語を扱える人が集まることで、エクセル職人が非難されるような文化にならない。

◇ アップルやグーグルなど数十社、トランプ政権のトランスジェンダー排除の方針を非難。
https://japan.cnet.com/article/35128027/
… トランスジェンダーの人々は、他のマイノリティを味方につけた方がいい。

◇ NYTにセクハラを報じられたアルファベット傘下 X の上級幹部が退職。
https://japan.cnet.com/article/35127923/
… IT業界には、さまざまなレベルのセクハラが横行しているらしい。

◇ ウェブの父バーナーズ・リー氏、データを企業から個人の手に取り戻す新計画。
https://japan.cnet.com/article/35126325/
… 個人データの書き込み、読み込み、アクセス管理を行える Solid。

◇ Alexa for Business、サードパーティーのデバイスに組み込み可能に。
https://japan.cnet.com/article/35127636/
… スマート スピーカーを他の家電の1つの機能に。

◇ カリフォルニア州でIoTセキュリティ法。
https://japan.cnet.com/article/35126328/
… スマート スピーカーの影響か。

◇ Google News アプリが膨大なデータ通信量を消費、多数ユーザーが報告。
https://japan.cnet.com/article/35127473/
… スマホのシステムに1日の使用量を監視する機能がほしい。

◇ 世界初の折りたたみスマホ FlexPai、中国メーカーのRoyoleから登場。
https://japan.cnet.com/article/35128045/
… 新製品はベンチャーがやりやすいのだが、その品質はどうか。

◇ 中国のNubia、表裏デュアル画面のフラッグシップスマホ Nubia X を発表。
https://japan.cnet.com/article/35127953/
… ノッチ(iPhoneX の上部)もない。

sage_p at 23:51|PermalinkComments(0) 注目ニュースリンク 

2018年10月21日

Windows を最新版に更新するとファイルが削除される不具合

2018年 10月 2日、マイクロソフトは、半年に一度の Windows の更新版を配布したところ、一部のユーザーに(マイ)ドキュメントなどにあるファイルが削除されてしまう不具合が発生した。現在は、その不具合を対策したパッチ KB4454330 が配布されている。

(マイ)ドキュメント、ピクチャ、ミュージックなどに関して何も設定を変えていなければ、この問題は発生しない。そのため、被害に会ったのは、たったの 0.01% だったらしい。

問題が発生する条件は、Known Folder Redirection 機能を使用したとき。 つまり、ドキュメントなどの特殊なフォルダーを右クリックして [ プロパティ >> 場所(タブ) ] で場所を変更したときや、通知領域の OneDrive アイコンを右クリックして [ 設定 >> 自動保存(タブ) ] の機能を使用したときだ。

古い場所に一部のファイルが残っていた場合に削除してしまうという。 おそらく、古い場所と新しい場所の区別ができなかったのか、削除したときに同期して両方削除してしまうのだろう。

OneDrive の自動保存(タブ)には、同期することが「重要なフォルダーを保護する」という名前になっている。確かにクラウド ストレージ内でデータが紛失したことは、ほとんど聞かない。アップロードした瞬間にバックアップ システムに取り込まれるからだ。

しかし、そのバックアップ システムのエンド ポイントである PC は、まだシステムの品質が十分でなかったのだ。

削除に関しては細心の注意が必要だ。 GUI なら、フォルダー内のすべてのファイルを削除してしまってもゴミ箱にあるが、コマンドラインやプログラム(自動化環境)では、ゴミ箱がない。 vbslib の OutOfWritable などのダブルチェック機能が必要だ。

しかし、ファイルを削除されたという重大な問題であるのに、マイクロソフトは損害賠償されたという話を聞かない。被害者はバックアップしていなかった自分が悪いとか、よくある問題と受け取ったのだろう。品質が高いことは良いことであるが、そのために開発速度が遅くなり競争力を失っては意味がない。

ソース
http://blog.livedoor.jp/nichepcgamer/archives/1072817469.html
https://news.infoseek.co.jp/article/mynavi_1828281/
https://news.mynavi.jp/article/20181015-windows10report/

sage_p at 21:41|PermalinkComments(0)

注目ニュースリンク 10/22

◇ 私は間違っていた。ごめん。ウォーターフォールは何のメリットも無い。
http://simplearchitect.hatenablog.com/entry/2016/06/20/080807
… 完全に仕上げてから次の工程(会社)に進むこと自体が効率が悪い。完全にすることは遅いから。

◇ 個人が自らデータを預ける情報銀行、2019年3月に事業者認定へ。お金目的では本末転倒。
https://japan.cnet.com/article/35127271/
… Yahoo や Google のアカウントでログインする機能を情報銀行が管理。

◇ マイクロソフト、オープンソース特許ネットワークOINに加盟。
https://japan.zdnet.com/article/35126821/
… コミュニティー加盟団体であればロイヤリティフリー。実質特許を否定している。

◇ Amazonが警察に監視用の顔認識ソフトを売ることについてAmazon従業員はどう感じているのか?
https://gigazine.net/news/20181017-amazon-rekognition-disappointment/
… 拳銃を持つなど警察には通常の人よりも發で塾呂必要。市民は警察の資格を管理する。

◇ 日本ではブロックチェーンは過度な期待、DevOpsは幻滅期、ビッグデータは陳腐化へ。
https://www.publickey1.jp/blog/18/devops2018.html
… いつのまにか古いキーワードになっているものがある。

◇ GitHub、見られてはいけないコード中のアクセストークンを通知してくれる Token Scanning 発表。
https://www.publickey1.jp/blog/18/githubtoken_scanninggithub_universe_2018.html
… 警告機能がきちんと機能するか、誤認識するか。

◇ 英検、AIによる自動採点を2019年に導入へ。中国の評価エンジン採用。
https://japan.cnet.com/article/35127240/
… 自由発話形式のライティングとスピーキングの一部で導入。AIが人間を採点。

◇ さまざまな紙飛行機の折り方を写真やムービーで解説してくれる Fold N Fly。
https://gigazine.net/news/20181019-fold-n-fly/
… 動画で分かりやすく飛行機の折り方が学べる。

◇ Microsoftの研究者が声を出さずに音声入力可能なシステムを開発。
https://gigazine.net/news/20181018-microsoft-research-unnoticeable-voice-input/
… 吸いながら発音は疲れる。ささやき声でいい。

sage_p at 21:38|PermalinkComments(0) 注目ニュースリンク 

2018年10月08日

名前付き引数が使えないときの説明引数 - リーダブル コード(54)

関数を呼び出すときに、引数を複数並べる代わりに、引数の名前も一緒に指定することを名前付き引数と呼びますが、その名前付き引数を使うとコードが理解しやすくなります。 しかし、名前付き引数が使えない言語は、まだ多数あります。 名前付き引数が使えない言語でどのように記述すればよいかを説明します。

C# での名前付き引数を使わない関数呼び出しの例:
  DrawBar( 100, 10 );

C# での名前付き引数を使った関数呼び出しの例:
  DrawBar( Length: 100, Width: 10 );

C# での関数定義の例:
  void DrawBar( int Length, int Width ) { ... }

名前付き引数が使えない言語で関数を呼び出すときは、引数に対する説明変数を使います。 C言語の場合、変数宣言が必要になりますが、そのときは、なるべく狭い { } ブロックの中で宣言します。

int main()
{
  :

  /* DrawBar */
  {
    int length = 100;
    int width = 10;

    DrawBar( length, width );
  }

  :
}

上記の例では、length と width が説明変数です。 説明変数は、プログラミング言語の機能ではありません。 コードを読む人にデータの意味を説明するために定義した普通の変数のことです。

書き方のポイントは、
・インデントの前の行に、関数名のコメントがあること
・関数呼び出しの前の行が空行であること
・必要なければ名前付き引数(説明変数)にしないこと

最後の、すべての引数を説明変数にしないことは、とても重要です。 たとえば、機械的にすべての引数を説明変数にすると、以下のようになります。

  /* DrawBar */
  {
    int  length = 100;
    int  width = 10;
    int  flags = 0;
    char* color = "Green";

    DrawBar( length, width, flags, color );
  }

しかし、次のように書かれているほうが、読む量が少なくて速く読めます。

  /* DrawBar */
  {
    int length = 100;
    int width = 10;

    DrawBar( length, width, 0, "Green" );
  }

0 は何?と気になる人もいるかと思いますが、そこに書いてあることを機械的に重箱の隅をつつくように、すべて理解しようとするクセがある人が陥る回り道です。 おそらく 0 は、オプションを何も指定しないための記述なので、それを理解する必要はありません。 何も指定していないのですから。 しかし、0は、変数やマクロになっていないからという機械的な判断で、マジックナンバーだ!、と指摘する人がいるでしょう。 理解する必要がないのに。

その 0 は、省略可能な引数(デフォルト引数、オプション引数)が使える言語では、省略されます。

省略されている引数があるかどうかチェックしますか? そのチェックがないと問題が発生しますか? 省略可能な引数という機能自体が問題ですか? 省略可能な引数は、SEC M1.1.1「使用しない関数、変数、引数、ラベルなどは宣言(定義)しない」の思想にも合致します。

個別の設定は理解できると思いますが、すべての設定の組み合わせを統合したときの意味を人間は理解できません。 マジックナンバー7±2では少なすぎます。 また、高機能であるほどオプションが増えますが、細かいオプションについてレビューする時に正しいことをチェックすることは、専門家でなければ難しくなり、非常に効率が悪いです。 微妙な設定ほどミスも多くなります。 それよりも、テスト プログラムで問題がないことをチェックするほうが効率的で品質も良く早くリリースできます。

Java や C++ は、名前付き引数を採用していません。 その理由は、おそらく、引数が適切でなかったときに、読みにくくなるからのようです。Objective-C では、引数はすべて名前付き引数にしなければなりませんが、名前がクドすぎるという批判もあります。

  appended = [aString stringByAppendingString:append];

Python では、名前付き引数が使えますが、標準ライブラリでは、引数名が単語の区切りをしておらず2語以上の引数名に名前付き引数を使うと読みにくくなります。 関数も2語以上の関数名は読みにくいです。 これでよく Python の設計者は「コードを読みやすくしましょう」と言えるなと思います。

import calendar
print( calendar.TextCalendar().formatmonth( theyear = 118, themonth = 10 ) )

その対策として、説明変数やコメントが使えます。

import calendar
def Main():

  #// FormatMonth
  the_year = 118
  the_month = 10

  print( calendar.TextCalendar().formatmonth( the_year, the_month ) ) #// FormatMonth
Main()

メソッド名は、Pascal ケース(単語の先頭文字は大文字で単語の間は _ を入れない)がよいでしょう。 なぜなら、リーダブル コード(50),(52) で説明したように、メソッド名はグローバルのスコープであり、マニュアルを検索することがよくあるからです。 マニュアルを検索するときは、大文字小文字を区別しないので、「FormatMonth」で Python 公式ホームページを検索してもヒットします。

名前付き引数を使うと引数の順序が変えられますが、説明変数を使った書き方でももちろん対応できます。 ただ、順序を変えられることのメリットはあまりありません。 ありそうだという可能性は考えられますが、ほとんど遭遇していません。

  {
    int length = 100;
    int width = 10;

    DrawBar( length, width );
  }

参考:
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments
https://docs.python.org/3.6/library/calendar.html?highlight=formatmonth
http://www.sage-p.com/news/763.txt リーダブル コード(50)
http://www.sage-p.com/news/767.txt リーダブル コード(52)

sage_p at 02:35|PermalinkComments(0) プログラミング 

注目ニュースリンク 10/8

◇ Wikipediaが右派系のサイトを信頼性に欠けるとして情報ソースに使用することを禁止。
https://gigazine.net/news/20181005-wikipedia-bans-breitbart-source/
… その判断はWikipediaではなくレビューアーによって行われるべき。

◇ UIテストの所要時間を10分の1にする試み、Raspberry Piのクラスタで並列実行。
https://www.publickey1.jp/blog/18/ui101raspberry_pi2018.html
… 通信待ちが多い Web アプリなら、ラズパイを多数投入可能。

◇ Windows Virtual Desktop 発表。Azureからクラウドサービスとして。
https://www.publickey1.jp/blog/18/windows_virtual_desktopazuremicrosoft_ignite_2018.html
… クリーンな Windows でテストすることに使えそう。

◇ レジなしストア Amazon Go を体験。狙いは省力化じゃなかった!
https://www.watch.impress.co.jp/docs/news/1144072.html
… クレームを入れて返金処理をすることもできる のがポイント。

◇ Cookieをすべて削除してもGoogleのCookieが残ってしまうことが判明。
https://gigazine.net/news/20180926-chrome-cookie-left/
… かつてのマイクロソフトのような横暴さ。

◇ スマートスピーカーの米国での保有率は24%、最多利用は音楽。
http://www.itmedia.co.jp/news/articles/1810/02/news060.html
… アメリカでは大ヒットのスマート スピーカー。

◇ Apple&Amazonサーバーが中国人民解放軍の実働部隊にデータを盗むチップを仕込まれたと報道。
https://gigazine.net/news/20181005-apple-amazon-supermicro-hack/
… 中国共産党の活動も自由にさせているIT企業。

◇ 脳活動をモニターして熟練したスキルを持っているかどうかを判別する技術が開発される。
https://gigazine.net/news/20181006-assessing-skill-with-optical-nueroimaging/
… どの技能が不足しているのかを被験者が知らないと、不正に利用される。

◇ なぜ出席不要のオンライン講義などの自主学習はうまくいかない場合が多いのか?
https://gigazine.net/news/20181005-learn-your-own-pace/
… 最終テストの提出が必須ということが最低限必要なのでは。

◇ 時給が上がったせいで月収が減るとAmazonの労働者が新賃金制度を批判。
https://gigazine.net/news/20181004-amazon-eliminate-monthly-bonuse-stock-grant/
… 最低賃金の引き上げを支持しますと宣言しながら、この不誠実さ。

sage_p at 02:33|PermalinkComments(0) 注目ニュースリンク 

2018年09月24日

Amazon スマートスピーカーの対応機器を増やす Alexa Gadgets Toolkit

2018年 9月 18日、Amazon は、スマートスピーカー「Amazon Echo」に接続できるようになるガジェットを開発するための Alexa Gadgets Toolkit(Beta)を発表した。 また、20日には、70以上の Alexa 対応製品を発表した。

スマートスピーカーは、スマホの音声認識機能を持つスピーカーのことで、ボタンなどを全く押すことなく、しゃべるだけで質問に答えてくれる機器だが、Alexa 対応製品と組み合わせると、しゃべるだけで、スイッチを入れたり、製品を操作したりすることができるようになる。

たとえば、Alexa 対応電子レンジでは、「Alexa、電子レンジで1人分のシチューを温めて」と言うと、シチューを温めることが始まるらしい。(シチューを入れることまでは手動だが) 電子レンジには、料理ごとにプリセットが入っているが、音声でプリセットを指定できるので、マニュアルを見る必要がなくなるだろう。

他に紹介された Alexa 対応製品は、オーディオ アンプ、電源スイッチ、ディスプレイ(Echo Show)、壁掛け時計(時計にタイマーの終了時刻が表示される)、監視カメラ、ネット配信セット トップ ボックスなどがある。

また、音声による命令を、Echo Show でどのように表示させるかについての、専用のプログラミング言語 Alexa Presentation Language(APL)も発表した。この言語の詳細な仕様に関しては、発表されていない。

相変わらず Amazon Echo にじゃべった内容は、Amazon に集まるため、プライバシーの問題があることには、注意してほしい。

ソース
https://japan.cnet.com/article/35125802/
https://japan.cnet.com/article/35125949/
http://www.itmedia.co.jp/pcuser/articles/1809/23/news016.html
http://news.livedoor.com/article/detail/15327465/
https://japan.cnet.com/article/35125934/

sage_p at 00:22|PermalinkComments(0) IT ニュース&コラム 

注目ニュースリンク 9/24

◇ 音楽産業の利益の4分の3がストリーミングから生まれている。
https://gigazine.net/news/20180922-carnegie-mellon-olive/
… 作詞作曲者に渡らず、全米レコード協会だけが売り上げを持って行っていないか。

◇ AIによる意思決定を透明化するIBM Cloudサービスが登場:60%の企業がAIの責任問題を危惧。
http://www.atmarkit.co.jp/ait/articles/1809/21/news085.html
… IBM製だけでなくオープンソースやMS製のAIにも対応。しかし、人間に理解できるのだろうか。

◇ 過去のあらゆるマシン&ソフトを実行でき科学の再現性を守る仮想システム Olive とは。
https://gigazine.net/news/20180921-carnegie-mellon-olive/
… 古いハードウェアの科学ソフトウェアを動かす仮想環境。

◇ Windows RS5で実装される、うるう秒対応や高精度ネットワーク時間。
http://ascii.jp/elem/000/001/746/1746458/?series=3
… うるう秒である60秒目を実装する汎用OSは Windows だけ。他はずれを直すだけ。

◇ HP、金属部品を量産可能な製造業向け3Dプリンタ HP Metal Jet、VWが導入へ。
https://japan.cnet.com/article/35125777/
… 量産するなら金型を作った方が安く済みそうだが、コストダウンに成功したのか。

◇ ボルボ、完全な自動運転EV Volvo 360c は移動の考え方を変える、コンセプトを公開。
https://japan.cnet.com/article/35125341/
… 自動運転が完全に実現したときの車内レイアウト。

◇ Mirai ボットネットの作者、実刑を免れる、FBIへの捜査協力と引き換えに。
https://japan.cnet.com/article/35125880/
https://gigazine.net/news/20180920-mirai-botnet-creators-helping-fbi/
… 法執行機関に技術提供することで刑が軽くなった。

◇ 日立、日本郵便、DACなど6社、個人データ活用に向けた情報銀行の実証実験。
https://japan.cnet.com/article/35125497/
… 企業が管理している個人データを本人の管理の下へ。

◇ マイクロソフト、9月の月例パッチ公開、Windowsタスクスケジューラの脆弱性も修正。
https://japan.cnet.com/article/35125471/
… タスク スケジューラーの脆弱性は2週間で対応。

◇ 新iPhone発表時、アダルトサイトへのApple端末からのアクセスは最大10%以上低下していた。
https://gigazine.net/news/20180914-apple-event-porn-traffic/
… アダルトサイトにはよく行くよ、アップル信者ならね。

◇ ソフトウェア開発者が感じる企業への不満とは?。
https://gigazine.net/news/20180910-developer-coefficient-2018/
… デバッグに時間が取られることを上は理解できない。

◇ リンク税含むEU著作権指令の改正案、欧州議会が可決。
https://japan.cnet.com/article/35125627/
… リンクした記事の抜粋を表示した企業に料金支払いの義務。妥当な判断だろう。

sage_p at 00:22|PermalinkComments(0) 注目ニュースリンク 

2018年09月09日

関数の引数は入力と出力だけじゃない - リーダブル コード(53)

本コラムの765号で、ソースファイルに記述するの関数の引数の名前の前に、入力であるか出力であるかを示すコーディングルール(推奨にするべきことだがルールと言われている)を紹介しました。

たとえば、以下のように in_ や out_ を付けるルールです。
・親の名前を表す入力引数 … in_ParentName
・見つかった数を表す出力引数 … out_FoundCount

errnum_t FunctionA( char* in_ParentName, int* out_FoundCount );


関数の引数に入力か出力かが分かるべきなので、in_ と out_ を付けるというルールを採用したとしましょう。 しかし、そのようなルールは使い勝手がよくありません。 なぜなら、関数の引数には、入力と出力以外にもあるからです。(ただし、対象が「引数」であることに注意してください。)

使い勝手が良くない理由は、あるケースでルールをどう扱ったらいいか示されていないことです。 多くのコーディングルールは、検証期間が1年未満のいいかげんで副作用の多いルールなので、示されていないケースについては、無視して構いません。 独自ルールがあればそれでよいです。 ルール警察に付き合うのは時間の無駄です。 これから示すのは、一般的なコーディング ルールよりも長期間問題がないものですが、推奨です。

たとえば、文字列型の引数に渡した変数の値を、すべて英語の大文字に変更する関数を作ろうとしたとします。 その引数の名前は、どうすべきでしょうか。 in_ でも out_ でも正しくありません。 in_out_ を付けるとよいでしょう。

errnum_t ChangeStringToUpperCase( char* in_out_ReplacingString );


また、構造体やクラスを引数に渡す場合、一部のメンバー変数や内部変数などが入力変数であり、一部のメンバー変数や内部変数などが出力変数になります。 初期化関数など、入力だけ、出力だけ、というのが明らかな場合は、in_ や out_ を付けてもいいですが、ほとんどのケースで、すべてのメンバー変数について入力であるか出力であるかを調べることは、あまりにコストパフォーマンスが悪すぎます。 構造体やクラスを引数に渡す場合は、in_out_ または ref_ (reference の略語)を付けるとよいでしょう。 this ポインター相当(self)だけは例外として付けなくていいです。

errnum_t ExampleClass_transfer( ExampleClass* self, LogFileClass* ref_LogFile );


まとめると、引数のコーディングルール(推奨)は、以下のようになります。
・入力引数 … in_*
・出力引数 … out_*
・ハンドルや構造体やクラス … self, ref_*, in_out_*
ただし、* は、Pascalケース。

sage_p at 23:48|PermalinkComments(0) プログラミング 

注目ニュースリンク 9/10

◇ Windows タスクスケジューラに脆弱性。現時点で解消策なし
https://japan.cnet.com/article/35124784/
http://www.itmedia.co.jp/news/articles/1809/06/news062.html
https://jvndb.jvn.jp/ja/contents/2018/JVNDB-2018-006728.html
https://security.srad.jp/story/18/09/07/2253247/
… メールの添付やダウンロードで、悪意のあるプログラムが高い権限で実行される。
ダブルクリック(1段目)後の、実行しますか?(2段目)の表示がないだけか。

◇ 米国など5カ国、IT企業に暗号化データへのアクセス求める共同声明。
https://japan.cnet.com/article/35125049/
… テンキー、顔認証、指紋認証の他に、捜査用の何かを追加するだけのことなのにIT企業は論点をずらす。

◇ iPhone売らないとヤバい。元店員が振り返る、重い販売ノルマ。
http://www.itmedia.co.jp/mobile/articles/1809/03/news042.html
… Apple 製品の広い配置の規則は、衣料品のブランドから。

◇ AMD、7nmプロセスのCPUGPU製造をGLOBALFOUNDRIESからTSMCに変更へ。
https://japan.cnet.com/article/35124817/
… GLOBALFOUNDRIES がコストに見合わない 7nm を製造しないことを受けて。

◇ AmazonがQRコード決済に参入。アプリで使える Amazon Pay、中小店舗に照準。
http://www.itmedia.co.jp/news/articles/1808/29/news045.html
… コンビニはすでにカードを通すレジがあるから中小店舗。

◇ 中国、青少年の近視予防を名目にオンラインゲームを規制へ。
https://japan.cnet.com/article/35125040/
… 欧州のたばこ規制と同じ余計なお世話。

◇ 丸めると円筒型、広げるとタブレット形で使える変形デバイス MagicScroll。
https://japan.cnet.com/article/35124992/
… だいぶ現実的になってきた。

◇ IoTで会議室の利用状況をリアルタイムに可視化。空予約を防止。
http://www.itmedia.co.jp/enterprise/articles/1809/03/news081.html
… ドタキャン防止と並行しないと。

◇ マイクロソフト、GoogleアカウントでWindowsやOffice 365へのシングルサインオンを可能に。
https://www.publickey1.jp/blog/18/googlewindowsoffice_365azure_active_directory.html
… Windows10やOffice365などにログインするときに、Googleメールアドレスが使える。

sage_p at 23:47|PermalinkComments(0) 注目ニュースリンク 

2018年08月27日

第三者が作成した電子書籍から作者へ利益還元するシステム

2018年 8月 1日、Jコミックテラスの赤松健さんは、第三者による作品投稿によって蒐集した電子書籍を作者に利益還元するシステムの実験を始めたと発表した。

ネットでは違法な無料の海賊版漫画サイトが未だに多くあり、作者が利益を得られないだけでなく、利益を横取りしている。 違法サイトは罰せられるべきであるが、サーバーの場所は海外を含めて不明で、マフィアのような組織がサーバーを守っているらしく、証拠が得られず警察も手が出ない状況と思われる。

漫画村という海賊版サイトに関しては、グーグルなど検索サイトの協力により停止させることができたが、おそらく名前を変えて再開しているだろう。 いたちごっごが続いて実質的に海賊版サイトは停止しないのである。

懲罰が期待できないので、Jコミックテラスでは、海賊版サイトに勝つ方法を模索している。 その1つが、第三者による作品投稿だ。

電子書籍化するのはタダではない。特に電子化される前の原稿については、スキャンする必要があり投資が必要になる。 今回、実業之日本社の2000年以前の作品、約9000作品が対象であるが、それをすべて電子化するのは、非常にコストがかかる。 絶版した作品については出版社が原稿を破棄していたら、第三者に頼るしかない。 第三者による作品投稿をしてもらうことで、作者や出版社はゼロ投資で電子化できることになる。 投稿者は、広告収入の10%を1年受け取ることができる。

第三者による作品投稿は、違法サイトがスキャンした作品をコピーし合うことでコストを押さえていることからヒントを得たという。 つまり、公式サイトの供給能力を、海賊版サイトの供給能力に追いつかせようということだ。

また、海賊版サイトは、作品のラインナップが充実しており、それも読者が海賊版サイトに流れる要因になっている。 海賊版サイトは著作権を無視して、出版社の許可なくすべての作品を並べられるのに対し、公式サイトは、きちんと権利関係の処理をしなければならないから、充実していない。 しかし、漫画図書館Z から出版社のサイトへのリンクを作る作業と権利関係の処理を自動化するシステムを開発すれば、海賊版サイトのラインナップに並ぶことになる。

新刊は出版社のサイトへのリンク、絶版は漫画図書館Z で配布する。 また、漫画図書館Z と契約することで、電子透かし入りで、外国語にも自動翻訳したデータの配布もできる。 これで、海外の読者も公式を見る環境が整う。

海賊版サイトは広告収入で成り立っているので、読者を集められなかったら維持できない。 公式サイトや漫画図書館Zが充実して使いやすくなったら、あと残るのは、新刊が無料か有料かの違いだけだ。 そこは、読者の良心にゆだねられている。

ソース
http://www.itmedia.co.jp/news/articles/1808/01/news115.html
https://www.sankei.com/entertainments/news/180820/ent1808200002-n1.html
https://twitter.com/kenakamatsu/status/986619033070915584
http://d.hatena.ne.jp/KenAkamatsu/20160113/p1
http://d.hatena.ne.jp/KenAkamatsu/20180806/p1
http://d.hatena.ne.jp/KenAkamatsu/20180806/p2

sage_p at 01:05|PermalinkComments(0) IT ニュース&コラム 

注目ニュースリンク 8/27

◇ グーグル、新ストレージサービス Google One を米国で一般提供開始。
https://japan.cnet.com/article/35124125/
… OneDrive を意識した名前。

◇ GitLab.com、200TB超のデータとともにAzureからGCPへ移行完了。
https://www.publickey1.jp/blog/18/gitlabcom200tbazuregcp.html
… GitLab も、マイクロソフト製品を使っていた。

◇ Microsoft純正、全948ページ、Windowsコマンドレファレンスから分かること。
http://techtarget.itmedia.co.jp/tt/spv/1805/25/news06.html
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/windows-commands
… コマンド プロンプトで使えるコマンドの公式な説明。オンライン版もあり。

◇ Surface Goが国内で発表! 8月28日発売、価格は6万4800円から。
https://www.gizmodo.jp/2018/07/surface-go-japan.html
… Windows S と普通の Windows が選べる。

◇ オーストラリア、5Gネットワーク構築で中国企業を締め出し。
https://japan.cnet.com/article/35124529/
… 中国企業による盗聴の実績があるから差別ではない。

◇ PC内のプロセス間通信に対する中間者攻撃。パスワードマネージャから情報流出も。
https://japan.cnet.com/article/35124384/
… パスワード マネージャーのプロセスと、ブラウザーのプロセスの間に入り込む。

◇ コードを静的解析して脆弱性を検出する SCALe、米CERTがオープンソースで公開。
https://www.publickey1.jp/blog/18/scalecert.html
… 大量のアラートのうち優先するものからリストアップ。優先順位は大事。

sage_p at 01:05|PermalinkComments(0) 注目ニュースリンク 

2018年08月12日

ワイルドカードを拡張する サブ フォルダー記号と FF-path 属性

フォルダーの中の特定の拡張子を持つファイルだけをコピーや削除したいことが
よくあると思いますが、そのときに使うのが、*.bak のようなワイルドカードです。
* が任意の名前にマッチします。 今回は、ワイルドカードのように、複数のファイルや
フォルダーのパスをまとめて指定する記述法についての話です。 ここで紹介する記述法は、
vbslib を使うツールで使えます。

vbslib は、以下からダウンロードできます。 Windows 用です。
  http://vbslib.osdn.jp/
  http://www.sage-p.com/vbslib/vbslib.htm
  https://github.com/TsNeko/vbslib

バージョン管理ツール Git では、.gitignore ファイル(コミットに入れないパス)に
glob と呼ばれるパターン マッチングの記述法で書くことができます。 Python スクリプト
でも使えます。 glob はワイルドカードを少し発展させたようなもので、ごく一部の
正規表現が使えます。 ただし「ごく」一部です。 Python のヘルプには、
「glob モジュールは大きなチカラを秘めていて、どんな状況においても役に立ちます」
と大口をたたいていますが、実際はワイルドカードを超えて使えるケースは
非常に限られています。 1文字のどれかにしかマッチしないなんてありえません。
また、サブ フォルダーにあるすべての Debug フォルダーさえ記述できません。

zsh では、** を記述するとサブ フォルダーも含めて検索します。 しかし、
そういう意味であることが ** という記述からでは分かりにくいですし、
シェルを zsh に変更することは厳しいです。

vbslib に付属のツール(例:PickUpCopy)は、パスをまとめて指定するときに
「サブ フォルダー記号」と「FF-path 属性」(File or Folder as files Path attribute)
を、設定ファイル(XML)に記述できます。 また、vbslib には、その記述法を処理する関数を
用意しています。

サブ フォルダー記号について説明します。 サブ フォルダー記号とは、
パスの最後の \ の左に付ける * または . のことで、この指定によって、
サブ フォルダーを検索するかどうかが変わります。

  ・"*\file.txt" … サブ フォルダーも含めて file.txt を検索する
  ・".\file.txt" … サブ フォルダーも含めないで file.txt を検索する
  ・"fo\*\file.txt" … サブ フォルダーも含めて fo フォルダーの中の file.txt を検索する
  ・"fo\.\file.txt" … fo フォルダーにある file.txt を検索する

また、パスの最後が \ のときは、フォルダー(ファイル以外)を明示的に
指定したことになります。 つまり、必ずフォルダーにマッチさせたいときは、
最後に \ を付けてください。 付けなくてもフォルダーにマッチしますが、
ファイルにもマッチします。

  ・"*\Debug\" … サブ フォルダーも含めて、フォルダー名 Debug を検索する

次に FF-path 属性について説明します。 これは、階層構造を持った書式なら何でも使えますが、
主に XML に記述するときの記述法です。 FF-path 属性の処理モジュールは vbslib にあるの
ですが、XML なら、XML パーサーと FF-path 属性の処理モジュールを結合した専用の関数
new_PathDictionaryClass_fromXML を用意しています。 以下では、XML での記述法を
説明します。


  <Root>
    <Variable name="${ExceptExts}" value="*.obj, *.bak"/>

    <File path="Sample.txt"/>
    <Folder path="SubFolder" attr="ABC">
      <Except path="${ExceptExts}"/>
      <Except path="SubFolder\Debug"/>
    </Folder>
  </Root>


上記の XML ファイルで指定しているパスは、Sample.txt と SubFolder、
ただし、SubFolder フォルダーの中の *.obj と *.bak と SubFolder\Debug は対象外です。

FF-path 属性は、上記の path 属性のことです。 File タグ、Folder タグのそれぞれに
ある path 属性が、FF-path 属性の機能を持っています。 FF-path 属性には、
サブ フォルダー記号を記述することができます。 なお、FF-path 属性の機能を持っているのが、
File タグと Folder タグであることと、属性名が path であることは、XML ファイルを
使うツールの仕様によって変わる可能性がありますが、vbslib に付属のツールについては、
変わりません。

Except タグは、対象外のパスを指定するタグです。 FF-path 属性を持っているタグの
子タグとして記述できます。 属性値には、サブ フォルダー記号が使えます。
また、CSV 形式で複数指定することができます。 なお、Except というタグの名前は固定です。
path という属性の名前は、親タグから引き継ぎます。

FF-path 属性には、変数の参照(Variable タグの参照)を記述することができます。
Variable タグは、FF-path 属性が使える XML ファイルでは必ず記述することができます。
なお、vbslib には、Variable タグを処理する LoadVariableInXML 関数が用意されており、
FF-path 属性が使えないツールでも使えることがあります。

FF-path 属性は記述する順序に依存しません。 それは、使いやすい仕様であることの
大事な要素です。 順序によって設定が異なるというのは、非常に分かりにくいです。
データファイルは、処理順序を記述するものではないのですから。

ただし、順序に依存しない仕様では、両方の設定パターンにマッチするときにどちらの
設定であるかが明らかでないと、これも使いにくくなります。 そこで、複数の FF-path 属性に
マッチするとき、それが対象であるか対象外であるかは、以下の優先順位で決まる仕様に
なっています。 上にマッチするほど優先されます。 基本的に長いパス(深いパス)が
特別な設定として優先されると考えてよいです。 しかし、それすら意識しなくても、
自然とそのような優先順位で設定は行われるものです。

  ・ファイルのパス(長い)
  ・ファイルのパス(短い)
  ・ワイルドカードがあるパス(\ 記号を含み、長い)
  ・ワイルドカードがあるパス(\ 記号を含み、短い)
  ・ワイルドカードがあるパス(\ 記号を含まず、長い)
  ・ワイルドカードがあるパス(\ 記号を含まず、短い)
  ・フォルダーのパス(長い)
  ・フォルダーのパス(短い)

たとえば、*\Debug が対象で A\*\Debug が対象外と指定したら、
A 以外のフォルダーの中にある Debug フォルダーにマッチするという意味ですが、
もし、*\Debug が優先されてしまうと、A\*\Debug の設定が完全に無視されてしまいます。
なぜなら、*\Debug ⊃ A\*\Debug (⊃は部分集合を表す)ので、たとえば、A\*\Debug に
マッチする A\B\Debug は、*\Debug にもマッチしてしまうからです。

ところで、クリーンするときは、PickUpCopy ツールをお勧めします。 PickUpCopy は
コピーを作るので、make clean と異なり、苦労して作ったファイルを誤って
消してしまうことがありませんし、コピー元のプロジェクトをフル ビルドしなくて済みます。
それを避けるためにコピーしてからクリーンをするかと思いますが、それこそ PickUpCopy
で行っていることなのですが、削除するファイルをコピーしない分、高速に処理します。

また、.gitignore ファイルを使うと、リポジトリに入らないファイルなのに、
存在するものとしてコンパイルのテストをしてしまうため、不可全なコミットの原因に
よくなってしまうのですが、PickUpCopy ツールでクリーンすると、その不具合の原因を
取り除くため、開発の品質も上がります。 もし、コミットをミスすると、他のメンバーが
数日間更新できなくなるなど、非常にコストが高くつくのに、.gitigore を使い続ける
なんて無責任です。

sage_p at 23:47|PermalinkComments(0) プログラミング 

注目ニュースリンク 8/13

◇ 海賊版サイト全滅させる。出版社との実証実験、赤松健さんの狙いは。
http://www.itmedia.co.jp/news/articles/1808/01/news115.html
… 出版社でも処分した作品を、持っている人から再度公式化する。

◇ 科学論文の海賊版 Sci-Hub を違法と訴える巨大出版社に対して根本的法改正の必要性を訴える科学者。
https://gigazine.net/news/20180806-sci-hub-prove-usefulness/
… コストは下がっているので、内容に関与しない宣言をするスポンサーだけで十分なのでは。

◇ 海賊版サイトブロッキング問題、壇弁護士など連名で意見書。
http://www.itmedia.co.jp/news/articles/1808/10/news104.html
… 海賊版サイト対策を簡単に考えると、政府が悪用してしまう。

◇ 中国で英国国営放送のBBCサイトがブロックされる、なぜか?
https://gigazine.net/news/20180812-bbc-blocked-in-china/
… https プロトコルを許さない中国。

◇ ウェブサイトのAMP対応を行ってコンバージョン率が70%低下した理由とは?
https://gigazine.net/news/20180810-google-amp-70-drop-conversion-rate/
… 原因の1つは google という URL。

◇ Apple、YouTube、Facebookなど、陰謀論者として知られるアレックス・ジョーンズ氏を締め出す。
http://www.itmedia.co.jp/news/articles/1808/07/news057.html
… 削除ではなく、非推奨と表示して、アクセスできるようにすべき。

◇ 初音ミクが目の前で踊っているようにしか見えない疑似ホログラム技術を開発した猛者が登場。
https://gigazine.net/news/20180803-hatsune-miku-holography/
… ホログラム ディスプレイを安価に販売してほしい。

◇ redditに不正アクセス、二要素認証では守り切れず。
http://www.itmedia.co.jp/enterprise/articles/1808/02/news056.html
… SMS認証の二要素認証(2FA)が破られたので、トークンベースの 2FA に変更。

◇ Microsoft 365 がコラボ機能を強化、就業時間外のメール送信にダメ出しも。
http://techtarget.itmedia.co.jp/tt/news/1808/02/news08.html
… 禁止ではなくダメ出し。一歩間違えば監視社会に。

◇ ホームから人が転落を駅のカメラで検知、駅員に通知。東急で運用開始、パナの技術活用。
http://www.itmedia.co.jp/news/articles/1808/09/news060.html
… 駅員さんが少ない夜に稼働。

◇ IoTデバイス用プログラミング言語 Eclipse Mita 登場。C言語へ変換、組み込み開発を容易に。
https://www.publickey1.jp/blog/18/ioteclipse_mitac.html
… 言語的な機能はラムダ式の変化形ぐらいか。

◇ Google、Cloud Build 発表。ビルド/テスト/デプロイの実行を、1日あたり120分まで無料。
https://www.publickey1.jp/blog/18/googlecloud_build1120github.html
… 2時間無料であれば、学習でき、導入への検討ができるので注目。

◇ Microsoftが27.6ペタバイトの海底データセンターに設置したウェブカメラの映像を公開中。
https://gigazine.net/news/20180810-microsoft-undersea-data-center/
… 冷房を動かすためのエネルギーによる地球温暖化を防ぐ。

◇ すぐ怒る人は実際よりも自分が賢いと考えていることが判明。
https://gigazine.net/news/20180809-anger-people-think-smart/
… 自身の知力を高めに見積もり、楽観的なリスク認知をしている。

sage_p at 23:46|PermalinkComments(0) 注目ニュースリンク 

2018年07月30日

CPU のリターン予測機能に見つかった脆弱性 スペクターRSB

2018年 7月 20日、カリフォルニア大学リバーサイド校の研究チームは、
Intel 製CPU に SpectreRSB と呼ぶ脆弱性があることを発表した。
今年1月に発表された脆弱性 スペクターとメルトダウンと同様に、
対策が難しい脆弱性と言われている。

スペクターではCPUの分岐予測機能が悪用されたが、スペクターRSBは、リターン予測機能
に含まれるリターン スタック バッファー(RSB = Return Stack Buffer)を悪用する。
リターン スタック バッファーには、リターンするアドレス(スタックのコピー)が
格納されているらしく、ユーザー権限のプログラムが特権領域でも使用する RSB を
変更できるらしい。

スタックを変更して悪用する方法が2つ、Intel Software Guard eXtension(SGX)
を悪用する方法が1つ挙げられている。

スペクターRSBも、特権領域のデータをリードできる問題だ。
パスワードの履歴やキャッシュ カードの番号の履歴などを盗むかもしれない。
しかし、スペクターとメルトダウンと同様に、ブラウザーやOSの更新によって
一時的に悪用できなくすることが可能と思われるため、今回も最新版を使うことが
一般ユーザーにできる対策だ。

ソース
http://www.itmedia.co.jp/enterprise/articles/1807/24/news063.html
https://japan.cnet.com/article/35122981/
https://en.wikipedia.org/wiki/Branch_predictor#Prediction_of_function_returns
https://www.zdnet.com/article/spectrersb-new-side-channel-attack-targets-cpu-components/

sage_p at 02:06|PermalinkComments(0) IT ニュース&コラム 

注目ニュースリンク 7/30

◇ Gmail へのアクセス問題で揺らぐシリコンバレーのプライバシー論。
https://japan.cnet.com/article/35122056/
http://www.itmedia.co.jp/news/articles/1807/10/news071.html
… Gmail は、いつのまにか、機械が読んでいるのではなく、開発者が見ていた。

◇ 社会問題について明確な立場を。経営者に迫る、シリコンバレーの労働者パワー。
https://japan.cnet.com/article/35122655/
… 従業員が集まれば、経営陣に圧力がかけられる。

◇ グーグル、社員への物理セキュリティキー導入でアカウント保護に効果。
https://japan.cnet.com/article/35122908/
… 古い技術が見直されているのか。

◇ Alphabet、GoogleへのEU制裁金51億ドルを除けば2桁台の増収増益。モバイル広告が好調で。
http://www.itmedia.co.jp/news/articles/1807/24/news051.html
… 広告収入は、まだ増え続ける。

◇ グーグル、コールセンター向け Contact Center AI を発表。
https://japan.cnet.com/article/35123023/
… 選択式の自動音声の先の人間を AI に。

◇ Windows UI Libraryプレビューが公開。
https://news.mynavi.jp/article/20180724-668902/
http://www.itmedia.co.jp/news/articles/1705/12/news119.html
https://www.yolx.co.jp/blog/detail/?item=114
… デモの映像に比べて、アプリで効果が見えにくい Fluent Design。

sage_p at 02:06|PermalinkComments(0) 注目ニュースリンク 

2018年07月16日

メンバー変数は、グローバルのスタイルにする - リーダブル コード(52)

前回は、関数の引数をグローバルとローカルの両方のスタイルにすると、メリットがあることと、キャピタライゼーション ルール(大文字・小文字のルール)に基づくと読みやすいことを説明しました。

今回は、「メンバー変数」(C言語の構造体やクラスの中の変数、Javaのクラス変数やインスタンス変数)のスタイルを何にすると読みやすいかを説明します。

前回、ローカル変数の先頭の文字を小文字にすることで、ローカルに検索すべきことが分かり、関数名の先頭の文字を大文字にすることで、グローバルに検索すべきことが分かることを説明しました。 また、ローカルかグローバルのどちらの検索をするかを間違えるとかなりの時間を取られることも説明しました。

メンバー変数についても、この方針にするのが良いでしょう。

もしかすると、メンバー変数について意味を検索することなんてないと思っている方がいらっしゃるかもしれません。 もし、そうなら、ローカルかグローバルのどちらであるか分からなくてもよいでしょうが、意味を調べることは本当にないでしょうか。 MSDNやW3Cのドキュメントを見れば分かるように、メンバー変数についての説明は書いてあります。 その説明から理解することも必ず経験しています。 やはり、意味を知るために、ローカルかグローバルのどちらの検索であるかを見分けられるようにすべきなのです。

メンバー変数の意味を説明するドキュメントがあるということは、メンバー変数名が見出し、その説明が本文、という構成になっているということです。 見出しの先頭の文字を大文字にすることが、キャピタライゼーション ルールであるので、メンバー変数名の先頭の文字も大文字にすべきです。

メンバー変数はグローバル変数ではないし、ファイル スコープの変数でもないので、ローカルかグローバルのどちらなのか迷うかもしれません。 しかし、そのローカルとグローバルではありません。 ローカルに検索すべきかグローバルに検索すべきかなのです。

メンバー変数は、グローバルに検索するものなので、メンバー変数名の先頭の文字は大文字すべき、つまり、Pascal ケースにすべきとなります。

ExampleClass object; // object は、ExampleClass という型の変数
object.Attribute = 123; // Attribute はメンバー変数
object.Method(); // () があるので、Method はメンバー関数


また、メンバー変数名は、ピリオドの区切りが目立つよう、アンダースコアをなるべく含めないのがよいので、Snake ケースよりも Pascal ケースにすべきです。

関数定義の中で、参照するメンバー変数名や呼び出すメンバー関数名の先頭を大文字で書くことは、一般の文章のスタイルと異なると思うかもしれません。 しかし、一般の文章でも、「〜の章を参照してください」といったリンク先を示す場合、見出しと同じく先頭を大文字にします。 プログラムでは、リンク関係が非常に多いため、一般の文章とスタイルが違うと感じるだけなのです。

そもそも、Visual Basic のように大文字と小文字を区別しないプログラミング言語であれば、見出しに相当する関数定義における関数名の先頭は大文字、関数定義の中から呼び出すときに記述する関数名の先頭は小文字、ということができたのですが、なぜか世界のプログラマー(一般の文章を書く人以外)は大文字と小文字は違うから区別すべきと考えてしまっており、プログラミング言語も大文字と小文字を区別してしまうようになってしまいました。 ファイル名も同様です。

しかも、区別すべきと思いきや小文字に統一しようなんて、まるで逆のコーディング ルールまで横行してしまっており、非常に矛盾したルールになってしまっています。 コーディング ルールによって、読みにくくなってしまうコードなのに、文書はコードがあるから不要だとも言ってしまっています。

コードを文書にしたいのであれば、読みやすくするために、一般の文書のルールに従うべきなのです。 Pascal ケースや Snake ケースのどちらかに統一すると、略語と同じく、情報を失うことになるのです。

関連:
this ポインターを省略するな - リーダブル・コード(31)

sage_p at 12:20|PermalinkComments(0) プログラミング 

注目ニュースリンク 7/16

◇ Gmail へのアクセス問題で揺らぐシリコンバレーのプライバシー論。
https://japan.cnet.com/article/35122056/
http://www.itmedia.co.jp/news/articles/1807/10/news071.html
… Gmail は、いつのまにか、機械が読んでいるのではなく、開発者が見ていた。

◇ 15分単位で時を示す腕時計 Order。時間厳守に一石、ニューヨーク地下鉄モチーフ。
https://japan.cnet.com/article/35121789/
… 休日に使いたい。

◇ Google Chromeでダウンロード爆弾の不具合が復活、Firefoxなどにも影響。
http://www.itmedia.co.jp/enterprise/articles/1807/05/news073.html
… めずらしく Internet Explorer と Micrsoft Edge 以外が全滅のバグ。

◇ AIやVRも“学び放題”のプログラミング教室 TECHCAMP。すべての学びの入り口に。
https://japan.cnet.com/article/35122107/
… プログラミングはお金を払って勉強することになってしまった。

◇ 下火になったランサムウェア、それでも警戒を解くべきでない理由。
https://japan.zdnet.com/article/35122071/
… クリプトジャッキング攻撃が増えているが、ランサムウェアの被害率も上昇。

◇ キーボードに残された体温でパスワードを推測する攻撃手法。スパイ映画さながら。
https://japan.cnet.com/article/35122206/
… ネットを使わない標的型攻撃の手法。

◇ 包帯もハイテク化へ。患部の状態を検知して薬を出すスマート包帯。
https://japan.cnet.com/article/35122197/
… 炎症が発生したら薬を増やす。

◇ INFOBAR新モデルが3年ぶりに発売へ。初代で実現できなかったフレームレステンキー。
https://japan.cnet.com/article/35122267/
… ガラケーは、まだ売れるのだろうか。

sage_p at 12:20|PermalinkComments(0) 注目ニュースリンク 

2018年07月01日

車のキーがスマホに置き換わる Digital Key

2018年 6月 20日、カー コネクティビティ コンソーシアムは、車のキーの代わりにスマホで自動車のドアのロックを開閉したり、エンジンをかけたりする仕様 Digital Key 1.0 を発表した。

Digital Key 1.0 では、以下の機能がある。
・スマホが近づいたら、鍵を開ける(NFCやBLEといった無線通信)
・鍵をかける
・車両内でエンジンをかける

また、ユーザーアカウントに関して、以下の機能がある。
・ユーザー認証機能との連動
・デジタル キー プロビジョニング(すぐにキーを提供するための準備)
・デジタルキーの失効
・車両の販売
・ユーザー同士(P2P)でデジタルキーの共有(version 2.0?)

すでに車のキーで実現できている機能ではあるが、次のように、鍵の管理に関して
メリットが考えられる。
・わざわざ車のキーを持ち歩く必要がなくなる
・鍵屋に頼まなくても合鍵を作ることができる
・レンタカーを無人にできる(人件費を減らせる)
・車両の鍵穴を無くして、より強固に鍵をかけられる

将来的には時限付きのキーも生成できるようになるだろう。
ただ、スマホのバッテリーが切れたらどうなるのだろうか。

ソース
https://gigazine.net/news/20180623-apple-samsung-bmw-digital-car-key/
https://japan.cnet.com/article/35121374/
http://www.appps.jp/296356/
https://www.businesswire.com/news/home/20110913005897/ja/

sage_p at 22:03|PermalinkComments(0) IT ニュース&コラム 

注目ニュースリンク 7/ 2

◇ マイクロソフトの実験的プロダクト Blazor、WebAssemblyで.NETランタイムを実装。
https://www.publickey1.jp/blog/18/blazorwebassemblynetwebcnet.html
… HTML のソースファイルに C#などのコード資産を活用できるように。

◇ WebDriver がW3Cの勧告に到達。Webブラウザのテスト自動化などを実現。
https://www.publickey1.jp/blog/18/webdriverw3cweb.html
… ゲームなど品質は高まるが、チート対策はあるのだろうか。

◇ UIを呼び出すタイプの古いサービスアプリは注意。Windows 10では事実上利用不能。
https://forest.watch.impress.co.jp/docs/news/1128078.html
… サービスプログラムの動作についてマウス・キーボードで選択できなくなる。

◇ Officeのリボンがコンパクトな1列表示に。Microsoft、Office 365 のUIを刷新へ。
https://forest.watch.impress.co.jp/docs/news/1127951.html
… またUIが変わるが、Office Online と統合されるなら歓迎。

◇ MIT、ナノドローン向け超小型チップを開発。電力消費量は電球の約1000分の1。
https://japan.cnet.com/article/35121193/
… 小型化、省電力化のカギは専用チップ。

◇ Facebook、グループ管理者が収益化できるプログラムのテスト開始。
http://www.itmedia.co.jp/news/articles/1806/21/news066.html
… 著作権管理システム。

◇ iPhone、完全なワイヤレス化目指す動き?AirPower は9月にリリースか。
https://japan.cnet.com/article/35121249/
… アップルは、USB-C ではなくワイヤレスへ向かう。

◇ Windows 10 Insider Preview に S モードに切り替えるオプションがこっそり追加。
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1129134.html
… ストアアプリへの移行は確かに安全だが、移行への圧力でもある。

◇ スパコン TOP500、IBM製 Summit で米が中国を抜き首位に返り咲き。
https://japan.cnet.com/article/35121450/
… アメリカが首位に返り咲き。

◇ ニコニコ動画は新体制で本当に変わるのか。栗田代表に独占インタビュー。
https://japan.cnet.com/article/35121533/
… 川上は人の言うことは聞きません、と断言。

◇ アップルとサムスン、デザイン特許訴訟でついに和解。長い法廷闘争に終止符。
https://japan.cnet.com/article/35121596/
… iPhone 誕生から11年。意匠権の20年よりは短かった。

◇ Slack 利用の過半数が非IT企業。日本のユーザー数は世界2位。
http://www.itmedia.co.jp/news/articles/1806/26/news109.html
… IT企業は、意外と最新のツールを使いこなせていない。

sage_p at 22:03|PermalinkComments(0) 注目ニュースリンク