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) 注目ニュースリンク 

2018年06月17日

関数の引数は、グローバルとローカルの両方のスタイルにする - リーダブル コード(51)

前回は、グローバルかローカルかを瞬時に分かるようにスタイルを分けると、変数や関数の意味がすぐに調べられることを説明しました。

ところで、関数の引数は、グローバルでしょうか、それともローカルでしょうか。

ローカル変数(関数の中で宣言する自動変数)と同じく、引数は、関数に入ると作られて、関数から返るとなくなることから、関数の引数はローカルであると考えられます。 しかし、それは物事の性質の一面しか見ていません。

関数の引数の意味を調べるときは、関数の定義や仕様書を見るために、グローバルに検索します。 そう考えると、関数の引数は、グローバルであると考えられます。

関数(関数名)は、一般に、グローバルです。 ちなみに、C言語には、ファイル スコープの関数もありますが、それはまた別の機会に話します。 C#言語には、ローカル関数もありますが、それはあまり使われないので、議論の対象から外させていただきます。ちなみにローカル関数の意味を調べるときは、関数の中を検索するので、ローカル関数はローカルです。 C++言語には、メンバー関数もありますが、オブジェクトを経由すれば、どこからでも呼び出せ、メンバー関数の意味を調べるときは、グローバルに検索するので、グローバルです。 クラスは、スコープを制限しているのではなく、コンテキストを選択していると考えるべきでしょう。

関数の引数の意味を調べる行為を、もう少し厳密に見てみましょう。 まず、意味を調べたい変数が関数の中にあったとします。 もし、それが関数の引数なら、ローカルに検索する(関数定義の開始位置を検索する)ことが正解です。 しかし、引数であることが分かった次は、関数のドキュメントを探すことになります。 なぜなら、引数の意味は関数のドキュメントに書かれているからです。 関数のドキュメントには必ずといっていいほど関数プロトタイプ宣言が書いてありますが、その関数プロトタイプ宣言は、一種の見出しです。

別のケースを考えてみましょう。 呼び出したい関数があり、その引数の意味から、その引数に渡すコードを書きたいときについてです。 その場合、関数名で、関数の定義や仕様書をグローバルに検索して、見つかった定義や仕様書に書かれた引数の意味を読むことになります。 そこにも必ずといっていいほど関数プロトタイプ宣言が書いてあります。

つまり、関数プロトタイプ宣言は、一般的な文章における見出しなのです。 また、関数の引数は、2面性を持っていると考えられます。
  ・関数の中から引数を調べるときは、ローカルを検索する
  ・関数の外から引数を調べるときは、グローバルを検索する

見出しには、英語固有のルールがあります。

  ・英語のタイトルや見出しを書くとき、単語の頭は大文字にする。
  ・ただし、前置詞など一部の単語の頭は小文字のままにする。

これは、キャピタライゼーション ルール (大文字・小文字のルール)です。 このルールのおかげで、それが見出しか本文かのどちらであるかが分かり、理解の助けになります。

その見出しにおける動詞が関数名、主語や目的語などがクラス名や引数名にあたります。 どららも、単語の頭は大文字です。 ですので、関数プロトタイプ宣言のスタイルは、単語の頭は大文字にするスタイルにするほうが、読みやすくなります。 Pascal ケースですね。 一方で本文は、単語の頭は小文字なので、Snake ケースですね。

しかし、関数の中から引数を調べるときは、ローカルを検索するようにしなければ、意味をすぐに調べられなくなってしまいます。 そこで、キャピタライゼーション ルールの前置詞のように補助的な単語については小文字から始めるというルールに合わせるのがよいと思います。

関数の引数のドキュメントには、よく、入力であるか出力であるかが書かれています。 これを付けてみることにしましょう。

in_FilePath
out_Result

void FunctionA( char* in_FilePath, int* out_Result );

in と out は Snake ケースで、FilePath, Result は Pascal ケースです。 Snake ケースと Pascal ケースの間は、アンダースコアを入れた方が読みやすくなります。 なぜなら引数の意味に in を含めないようにしなけばなりません。 たとえば、in_FilePath がファイルパスの「中」を指定する引数であると読めてしまうのですが、in_ が補助的な情報であることを Pascal ケースの前のアンダスコアから気づけることで、ファイルパスを指定する引数であると(ファイルパスの中ではないことを)読むことができるようになります。

関数の引数は、グローバルとローカルの両方のスタイルにすると、次のメリットがあります。
・関数プロトタイプ宣言は、ほぼ大文字から始まる Pascal ケースに統一されて読みやすく、意味を知るための情報がグローバルにあることが分かる
・関数の中から参照する引数名は、小文字から始まるため、意味を知るための情報がローカルにあることが分かる
このスタイルにしなければ、意味を知るための情報を知る手段を間違えることになり、余計な作業にかなりの時間を取られることになります。

sage_p at 21:43|PermalinkComments(0) プログラミング 

注目ニュースリンク 6/18

◇ マイクロソフトのGitHub買収、開発者との関係強化へ布石、その狙いと展望。
https://japan.zdnet.com/article/35120376/
https://japan.zdnet.com/article/35120609/
https://www.publickey1.jp/blog/18/gitlab10github.html
… コミュニティーから取り残されないための布石なので GNU を排除しないだろう。

◇ Intelプロセッサに新たな脆弱性、投機的実行機能に関連。
http://www.itmedia.co.jp/enterprise/articles/1806/15/news079.html
… Meltdown より悪用は難しく、月例パッチで対応可能。

◇ ネット中立性規則、ついに撤廃。否両論続く。
https://japan.cnet.com/article/35120678/
… 忘れたころに格差が広がっていることだろう。しかし悪用される可能性もある。

◇ タッチパッドが画面になる新型 ZenBook Pro、ASUSが発表。
https://japan.cnet.com/article/35120332/
… マウス派にとっては2画面に増えることになる。

◇ MicrosoftがAlphabet(Google)を時価総額で3年ぶりに抜いたことの意味。
http://www.itmedia.co.jp/pcuser/articles/1806/11/news098.html
… Windows の会社ではなく、会社のITのための会社へ。

◇ 次期Docker for WinMac、GUIの数クリックで簡単にアプリケーションのコンテナ化と実行が可能に。
https://www.publickey1.jp/blog/18/docker_for_winmacguidockercon_2018.html
… アプリケーション間の通信はネットワークに共通化するかも。

◇ ビットコイン、この2カ月の最安値に。韓国でのハッキング事件を受け。
https://japan.cnet.com/article/35120681/
… ビットコインの信頼性は、ソーシャル エンジニアリング攻撃によって低くなる。

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

2018年06月04日

EUの個人データ保護法GDPRの施行が開始され早速訴えられる

2018年 5月 25日、EU一般データ保護規則(GDPR)が施行された。

GDPRとは、EUデータ保護条例から置き換わる、欧州連合(EU)における個人データの処理と移転に関する法律。 主にアメリカのIT企業から、EU居住者の個人データ(個人情報)のコントロールを取り戻し、保護を強化することを意図している。 忘れられる権利は、より限定的な消去権によって置き換えられた。

個人情報とは、名前や住所はもちろん、オンラインショッピングの記録やビッグデータの元となるデータ(個人の嗜好、行動、態度など)も含まれる。

日本企業でも、EUに子会社・支店・営業所を有している企業、日本からEUに商品やサービスを提供している企業、EUから個人データの処理について委託を受けている企業に規則の対応が求められる。日本の企業は世界の企業に比べると、こうした規制への対応を完璧に行うとする傾向があるが、主なターゲットはアメリカのIT企業なので、できる範囲から徐々に対応していくこおでよいだろう。そもそもアメリカのIT企業は、法律を巧みにかわしていくものだ。

アップルは、Data and Privacy というページを開設し、アップルが保有しているデータをダウンロードを要求できるようにした(日本は未定)。これは、オープンスタンダードな電子形式で提供されなければならないという規則に応えるものだ。要求されてからダウンロードできるようになるまで、7日間かかる。その間に、本人からの要求であることを確認するという。ダウンロードしたは、データが漏えいしないように注意が必要だ。

マイクロソフトは、Microsoft Azure に GDPRに関連する対応を支援する機能の提供開始を発表した。個人情報を収集する会社が、個人から要求される個人データのアクセス、変更、削除、エクスポートにすぐに対応できるようになるという。

GDPRに違反すると、軽い罰則は書面による警告だけであるが、最も重い罰則は売上高の4%の制裁金が課せられる。

グーグルとフェイスブックは、プライバシーポリシーへの同意をユーザーに強制しているとして、非営利団体noyb から提訴された。 個人情報が利用されることに同意しなくてもサービスが使えなくてはならないからだ。おそらく、GDPRの責任をユーザーに押し付けるような内容に合意する必要があるのだろう。 また、他の目的で個人データが使用されることに合意する必要があるのだろう。

合意するのが嫌なら利用しなければいい、個人の合意を武器に責任を負わないというのがアメリカIT企業のいつもの手口だ。よく理解しないで合意ボタンを押すことが多いが、この合意も無効にすべきである。自国の産業を不利にさせますよ、重要な個人データにはアクセスできませんよ、という分かりやすい質問にすれば、合意なんてありえないからだ。

ソース
https://japan.zdnet.com/article/35110326/
https://japan.cnet.com/article/35119696/
http://www.atmarkit.co.jp/ait/articles/1805/29/news071.html
https://digiday.jp/publishers/googles-gdpr-approach-raises-publisher-concerns/
http://www.itmedia.co.jp/news/articles/1805/27/news011.html
https://japan.zdnet.com/article/35119971/
https://wired.jp/2018/05/22/google-and-facebook-gdpr/

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

注目ニュースリンク 6/4

◇ Arm版Windows 10でも Ubuntuが利用可能! Build 2018で紹介されたWSLの新機能。
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1123295.html
… フォルダー(エクスプローラー)からLinuxシェルが起動できる。

◇ Windows 10大型アップデート April 2018 Update は何が新しくなったのか。
http://www.itmedia.co.jp/pcuser/articles/1805/01/news089.html
… タイムラインが非常に画期的。

◇ オリジナルの手書き英字フォントを5分で作成できる Microsoft Font Maker。
https://forest.watch.impress.co.jp/docs/review/1124028.html
… 自分の手書き文字がフォントとして使える。

◇ Facebookのフェイクニュース対策を悲観する理由。根深いフィルターバブルの壁。
https://japan.cnet.com/article/35119789/
… みんなフェイクニュースが大好き。

◇ インテル、アルテラ買収後初のXeonとFPGAの統合製品 Intel Xeon Scalable Processor 6138P 発表。
https://www.publickey1.jp/blog/18/xeonfpgaintel_xeon_scalable_processor_6138pfpga.html
… CPU と FPGA が両方乗っているチップ。

◇ Arm、Skylakeの性能の90%に迫るCPUコア Cortex-A76。
https://pc.watch.impress.co.jp/docs/column/kaigai/1125098.html
… アップルとサムソンの Arm プロセッサーは、Arm 開発ではなく、もっと高速らしい。

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

2018年05月20日

グローバルかローカルかを瞬時に分かるようにする - リーダブル コード(50)

デバッグするとき、変数がローカル変数であるか、グローバル変数であるかを識別することは、重要です。 なぜなら、ローカル変数の値が問題ないかどうかを調べるときは、関数の中の範囲だけを調べればいいですが、グローバル変数の値が問題ないかどうかを調べるときは、プロジェクト全体の範囲を調べなければならないからです。

範囲が違うと、調べるときに使うツールも違ってきます。 ローカル変数なら、テキスト エディターのファイル内検索機能を使って、関数の中だけを変数名で検索すればいいですが、グローバル変数なら、全文検索ツール(例:grep)を使って、多くのファイルの中を検索する必要があります。

  ・ローカル スコープ: テキスト エディターのファイル内検索機能
  ・グローバル スコープ: 全文検索ツール(例:grep)

このことから、注目しようとしている変数が、ローカル変数であるか、グローバル変数であるかを、瞬時に見分けられるようにしておくべきです。

もし、ローカル変数のつもりで関数の中を検索しても関数の外で変数の値が変わってしまっているかもしれませんし、グローバル変数のつもりで多くのファイルを検索しても、関係のない同じ名前の別の変数を読んでしまっているかもしれません。 間違えた検索ツールを使い続けていると、読むのが遅くなりますし、デバッガーでは変な動きをしているように見えてしまうため、デバッグの作業が長引いてしまいます。 つまり、ローカル変数であるかグローバル変数であるかによって使うツールが違うので、ローカル変数であるかグローバル変数であるかを、瞬時に見分けられるようにしておくべきなのです。

C/C++言語では、グローバル変数の先頭に g_ を付けるコーディング ルールが有名です。 先頭が g_ であるならグローバル変数であり、g_ でないならローカル変数であると瞬時に見分けられます。

  local_variable
  LocalVariable
  localVariable

  g_GlobalVariable
  g_global_variable

Java(言語)には、関数の外で定義するグローバル変数がないですが、グローバルなスコープを持つクラス変数があります。クラス変数はクラスの中で public static を付けて宣言した変数です。 クラス変数の先頭に g_ を付けるコーディング ルールは聞いたことがありませんが、そもそも必要ありません。

なぜなら、大文字から始まるクラス名+ピリオド+変数名は、クラス変数であり、小文字から始まるオブジェクトの変数名+ピリオド+変数名は、インスタンス変数(C言語のメンバー変数)であると瞬時に見分けられるからです。

  ExampleClass.classVariable
  objectVariable.instanceVariable

関数名はどうでしょうか。 関数名はグローバル(グローバル スコープ)です。 どこからでも関数を呼び出すことができるからです。 C++言語には、1つの関数の中だけにあるローカル関数もありますが、特殊なケースなので割愛します。

ファイル スコープを持つ関数や変数もあります。 関数の外で、static を付けて宣言する静的関数や静的変数のことです。 別のソースファイルから関数を呼び出したり変数を参照したりすることはできません。 これをファイル スコープといいます。 ただし、Java には、ファイル スコープはありません。

グローバル変数と異なり、ファイル スコープのグローバル変数の先頭には、gs_ を付けるコーディング ルールを採用している人もいます。 ファイル スコープでも g_ を付ける人もいます。 g_ さえ付けないコーディング ルールを採用している人もいます。

見ただけではローカル変数であるかファイル スコープのグローバル変数であるかを瞬時に見分けることができませんが、おそらく見分ける必要がないのでしょう。 なぜなら、ローカル変数を検索するときもファイル スコープのグローバル変数を検索するときも、テキストエディターの検索機能を使うからです。

しかし、サブルーチンに分割するときは、見分けられるようにしておくほうが素早く分割できます。 ですので、ローカル変数であるかファイル スコープのグローバル変数であるかを、見分けられるようにしておくべきです。 詳しくは別の機会に説明します。

以上で説明したスコープの種類は、全部で3つになります。

・ローカル スコープ(C言語の自動変数、Java のローカル変数)
・ファイル スコープ(C言語のグローバル静的変数、C言語の静的関数、Java にはない)
・グローバル スコープ(C言語のグローバル変数、C言語の関数、Java のクラス)

sage_p at 22:46|PermalinkComments(0)

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

◇ だから人はネット詐欺に騙される。その背景にある、確証バイアスとは。
https://japan.cnet.com/article/35118948/
… 投資先企業が実在しても投資詐欺に会う。

◇ トランプ大統領、ZTEの事業再開に向け習主席と協力。
https://japan.cnet.com/article/35119078/
… 実際に取引禁止することで、なめられなくなる。

◇ AIがコードの開発を支援してくれる Visual Studio IntelliCode 発表。
https://www.publickey1.jp/blog/18/aivisual_studio_intellicodebuild_2018.html
… はじめのうちは余計なお世話が多いだろうが、開発者の分野や好みを学習するだろう。

◇ Twitter、行動シグナルによる荒らしツイート表示低下へ。健全性向上の一環で。
http://www.itmedia.co.jp/news/articles/1805/16/news058.html
… ブロックされたことが多いだけでなく、攻撃的な人は自分もブロックやブロック返しをよく使う。

◇ アンプラグドプログラミングとは何か?学校での実践方法は?
http://techtarget.itmedia.co.jp/tt/news/1805/16/news01.html
… 概念を全く場面が違うことで学べるわけがない。全体で目的がある手順書を作り、読むことが大事。

◇ マイクロソフト、AIモデルをDockerコンテナでパッケージ、ラズパイ、ドローンなどへデプロイ可能に。
https://www.publickey1.jp/blog/18/azureaidockerwindowslinuxbuild_2018.html
… いちいちクラウドに通信しなくても、IoTデバイスで学習したことを活用できる。

◇ Google I-O、Microsoft Build 総まとめ。
https://internet.watch.impress.co.jp/docs/imreboot/news/1122053.html
… まとめ。

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

2018年05月06日

漫画の海賊版サイトをブロッキングできるよう政府が体制整備

2018年 4月 13日、日本政府は、漫画の海賊版サイト 漫画村、Anitube、Miomio などへの緊急対策案を発表した。 4月 23日、NTTグループは、サイトブロッキングに関する法的整備が行われるまでの一時的な緊急措置として、名指しされた3サイトへのブロックを準備され次第実施すると発表した。KDDI、ソフトバンクは検討中と発表した。

漫画の海賊版サイトの問題は、作者が活動を続けていく上で必要な資金を回収するときに、その金額が大幅に少なくなることだ。 働いて 20万円の給料があるはずなのに、19万円も何者かに取られているようなイメージだ。

ここ数年で、出版社がオーナーとして無料の電子書籍の公式サイトを立ち上げることが増えてきた。 公式サイトと海賊版サイトのどちらもアクセスすれば試聴できるため、多くのユーザーは、公式サイトであるか海賊版サイトであるかの区別がつかないだろう。 しかし、ログイン操作や、サイトによって操作の違いがあることによる使いにくさ、コピープロテクトによって試聴できるツールが限定されるという問題がある。

つまり、現状では公式のほうが、質の悪い電子書籍サイトと受け取られている。 この問題に対しては、出版社を横断したサイトで、コピープロテクトをあえてかけないで高画質のまま作品を公開するという案がある。 これによって使いにくいから海賊版サイトに行く人は減るだろう。 現状、コピープロテクトがかけてある作品でも海賊版サイトにあるようなので、かけなくても問題なさそうだ。

サイトブロッキングは、「検閲は、これをしてはならない。通信の秘密は、これを侵してはならない。」と定めた憲法21条に抵触する恐れがある。 検閲の禁止とは、政府が表現(著作物)を取り締まることを禁止することだ。 このため、サイトブロッキングは実施されていない。

しかし、サイトブロッキング自体が全くできないわけではない。児童ポルノのブロッキングがすでに民間(ISP)によって行われている。 これは、児童ポルノという種類の表現物があれば、違法性なく緊急避難(ブロッキング)できる条件を満たすことを根拠にブロッキングしている。 しかし、海賊版に関しては、現在の法律では緊急避難できない。 中国が Facebook や Twitter をブロックしているが、日本でもそれが行われることがないように法整備しなければならない。

グーグルなどの検索サイトから検索できないようにする DMCA(デジタルミレニアム著作権法)に基づく削除申請は、すでに行われている。

4月 12日ごろ漫画村はサイトを閉鎖した。 理由は分からない。 しかし、また別の名前の海賊版サイトが現れるので、法整備などの対策は必要だ。

#漫画村閉鎖で Twitter を検索すると、閉鎖されたことを残念に思う人が非常に多いことに気づく。 代わりの海賊版サイトを紹介している人も多い。 払えるお金を払えばいいだけのことなのに被害者だと主張している。 やはり作者が活動を続けていくために必要な利益を守るため、大手の海賊版へ即刻ブロッキングできる体制が必要だ。

同時に作者に利益が流れるファンディングのシステムも必要だ。 そのあたりは、マンガ図書館Zが先行している。

ソース
https://japan.cnet.com/article/35117716/
https://www.businessinsider.jp/post-166251
http://www.itmedia.co.jp/news/articles/1805/02/news026.html
http://www.itmedia.co.jp/news/articles/1804/12/news047.html
https://gigazine.net/news/20170406-how-work-youtube-background/
https://www.winxdvd.com/smartphone-mania/powerful-mangamura-manga-comic-sites-alternative.htm
https://www.mangaz.com/

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

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

◇ Twitter、不具合でパスワード変更を呼びかけ。
https://japan.cnet.com/article/35118676/
… Twitter社内に悪意のある人がいたら、パスワードが盗まれている。

◇ ただの壁をタッチやジェスチャー操作用UIにする技術 Wall++。ディズニー研究機関。
https://japan.cnet.com/article/35118421/
… カメラを使わないで体全体を使ったジェスチャー認識や壁のタッチパネル化。

◇ メルカリ、アイドルマスターとコラボ。ミリシタ オリジナルグッズを販売可能に。
https://japan.cnet.com/article/35118596/
… 海賊版対策でもありそう。

◇ Alexa がさらに賢く。ユーザーの代わりに 記憶も可能に。
https://japan.cnet.com/article/35118449/
… 記憶によって個人的な情報も答えてくれるようになる。

◇ Microsoft が Linux 採用製品を投入。IoTで全面攻勢。
https://cloud.watch.impress.co.jp/docs/column/infostand/1118414.html
… Windows 10 IoT Core だけでなく Linux も選択肢に。

◇ 遊ぶだけじゃない Nintendo Labo。開発者が目指したもの。
https://japan.cnet.com/article/35118354/
… Joy-Con でセンサーを組み込んだ工作が簡単になった。

◇ 高校生Twitterユーザーの半数以上が実名利用、そのうち4割がすべての人に公開状態。
https://internet.watch.impress.co.jp/docs/news/1119998.html
… 社会人は実名は少ないが、それ以外のセキュリティ設定が甘い。

◇ グーグル創業者が指摘する、AIブームで対処すべき課題。
https://www.technologyreview.jp/nl/google-cofounder-sergey-brin-warns-the-ai-boom-isnt-all-good/
… 最新技術には疑いの目を向けられるため、倫理的な課題にも投資する。

◇ スマホ決済 Origami Pay 、みずほ・三井住友と連携。口座から直接引き落とし。
https://japan.cnet.com/article/35118279/
… バーコードで決済。中国が先行していたことが証明される。

◇ らくらくメルカリ便を全国2万店舗のセブン‐イレブンで受け付け。
https://japan.cnet.com/article/35118416/
… 住所の入力を不要にするだけでなく、お届け先に匿名で発送できる。

◇ ソフトバンク、IoT機器向け NB-IoT、Cat. M1商用サービス。
https://japan.cnet.com/article/35118406/
… KDDI の IoTのネットワークサービスに対抗。

◇ Windows 10大型アップデート April 2018 Update は何が新しくなったのか。
http://www.itmedia.co.jp/pcuser/articles/1805/01/news089.html
… タイムライン機能は、Android や iOS にも対応。

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

2018年04月23日

if節と主節を逆にするな - リーダブル コード(49)

日本語では、「もし A なら B です」の A と B を入れ替えて「Bです。もし A ならね」としゃべる人はほとんどいません。アップルの宣伝ぐらいです。 しかし、英語では if節(従属節)を、主節の後(右側)に書く場合が結構ある印象があります。 結構ショッキングなので、英語はそうなのかと思っていましたが、実際にはどちらの順序でもいいそうです。

英語のネイティブの方も、「Bです。」と言われてから、「Aならね」と言われると肩透かしにならないんでしょうか? 主節(B)が長いときは、「もし A なら B です」のが多いらしいので、やはり軽く肩透かしを食らっていると思います。

プログラミング言語では、ご存知の通り、「もし A なら B です」の順になります。 C言語なら「if ( A ) { B }」と書きます。 分かりやすいですね。

しかし、条件が多重にある場合は、プログラミング言語でも分かりにくくなるケースがあります。

次のC言語のコードの最後の行にある条件文がどういう意味か読んでみてください。

  char* path = ...;
  bool is_skipping_period_file = ...;

  if ( path[0] != '.' || ! is_skipping_period_file ) { ... }


直訳すると「文字列 path の先頭の文字がピリオドではないとき、または、is_skipping_period_file(ピリオドから始まる名前のファイルをスキップする設定)ではないとき」になります。 よく分からないですね。

実はこの if 文での内容は単純で、is_skipping_period_file(ピリオドから始まる名前のファイルをスキップする設定)に関する処理内容、ただそれだけなのです。

もっと読みやすいコードにできないか考えた結果、次のコードになりました。

  char* path = ...;
  bool is_skipping_period_file = ...;

  if ( is_skipping_period_file ) {
    is_skipping = ( path[0] == '.' );
  } else {
    is_skipping = false;
  }
  if ( ! is_skipping ) { ... }


直訳すると「is_skipping_period_file(ピリオドから始まる名前のファイルをスキップする設定)なら、文字列 path の先頭の文字がピリオドのファイルはスキップして、is_skipping_period_file(ピリオドから始まる名前のファイルをスキップする設定)ではないときは、スキップしない」という意味です。

if節と主節で同じことを言っていますね。if文を満たさない場合でも、if節と主節で同じことを言っていますね。 だから、if 〜 else 〜 の 5行が is_skipping_period_file に関する処理(しか行っていない)と分かります。 簡単な処理内容でしたね。

読みやすくしたコードは処理速度がごくわずかだけ遅いケースがあります。 それは、フォルダーの中のすべてのファイルについて、is_skipping_period_file の処理を行う場合です。 先頭がピリオドのファイルは、一般に少ないため、元のコード

  if ( path[0] != '.' || ! is_skipping_period_file ) { ... }


は、|| の左の判定文だけ実行することになります。 読みやすいコードは、is_skipping_period_file = true のときに必ず 2つの判定文を実行することになります。

この読みやすいコードは論理的に遅いコードなのですが、実際に計測すると、この程度の処理量の違いは、数値に表れません。 説明変数を活用すれば、処理量の違いを抑えることもできます。 よって、読みやすいコードにすべきです。

どうしても論理的に速いコードにしたいときは、次のようなコードにするとよいでしょう。

  #if 0 // readable code
    if ( is_skipping_period_file ) {
      is_skipping = ( path[0] == '.' );
    } else {
      is_skipping = false;
    }
  #else // faster code
    if ( path[0] == '.' ) {
      is_skipping = is_skipping_period_file;
    } else {
      is_skipping = false;
    }
  #endif
  if ( ! is_skipping ) { ... }


#if 0 の部分をコメントで表現するべきだ、何のためにコメントを書くルールにしていると思っているんだ、という人がいたら、ルールの副作用に気づいていません。 コメントにすると次のようにあいまいになって理解に苦しむソース ファイルになってしまいます。

  // ピリオドから始まる名前のファイルをスキップする設定の処理をする
  if ( path[0] == '.' ) {
    is_skipping = is_skipping_period_file;
  } else {
    is_skipping = false;
  }
  if ( ! is_skipping ) { ... }


レビュアーは「コメントを読んですぐに理解できるようになったから良くなったじゃないか」と言うでしょうが、それは単にレビュアーがコードの概要を知っただけです。 コードのレビューになっていません。(多くのレビューは、これで済ますため、レビューで品質が上がるわけがありません) また、コードを見るのはバグが起きたときや移植するときがほとんどなので、結局、コード(変数)の論理関係(処理)を理解しなければなりません。 その理解しようとするコードは読みにくいコードしかないため、余計に時間がかかってしまうというわけです。
コメントを書くことより、コード自体をリーダブルにする必要があるのです。

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

注目ニュースリンク 4/23

◇ 政府、海賊版サイトへの緊急対策案を発表。漫画村、Anitube、Miomio を名指し。
https://japan.cnet.com/article/35117716/
… 予告してからブロッキングする個別対応のほうが言論の自由は守れそう。

◇ マイクロソフト、物体とデジタルをつなぐマット型デバイスを発表へ。
https://japan.cnet.com/article/35117469/
… カードゲーム型のゲームなどに。

◇ AbemaTV、プレミアムプラン向けに動画ダウンロード機能。
https://japan.cnet.com/article/35117526/
… 外でも高画質な録画番組を安定して見れるようになる。

◇ 機内の客室乗務員に Xperia Ear Duo。JALが業務改善や効率化の実証実験。
https://japan.cnet.com/article/35117593/
https://japan.cnet.com/article/35117503/
… 美観が損なわれないことは大事。

◇ YouTube、作者の自己申告機能をテスト。広告掲載の誤判定を防ぐ。
https://japan.cnet.com/article/35118018/
… ファンによるスポンサー制度も実験中。

◇ W3C、パスワード不要のウェブ認証 Web Authentication を勧告候補に。
https://japan.cnet.com/article/35117538/
… パスワードを経由しなくても生体認証できるようになる。

◇ 世の中はムダな熱であふれている。体温で発電、充電不要な MATRIX PowerWatch
https://japan.cnet.com/article/35117601/
… 100ワットの発電ができるらしい。

◇ Facebook、非ユーザーの情報収集はTwitterやグーグルも実施と説明。
https://japan.cnet.com/article/35117931/
… Amazon、Google、Twitter も非難されるべき。

◇ エアバス、飛行機の機体検査にドローンを活用。周囲を自律飛行させて傷を発見。
https://japan.cnet.com/article/35117819/
… 検査場に入らなくてもすぐチェックできる。

◇ 店内ならどこでも決済できるローソンスマホペイ。深夜帯のレジ無人化の実験も。
https://japan.cnet.com/article/35117645/
… 万引きをどう防ぐのか。

◇ Windows File Manager がオープンソース化、Windows 10 で実行可能に。
https://japan.cnet.com/article/35117548/
… Windows 3.0 のもの。

◇ アップル、隠れて見えない物を見る技術。自動車ドライバー向けAR技術で公開特許。
https://japan.cnet.com/article/35117435/
… 相変わらず既存の技術で出来そう。

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

2018年04月09日

Facebook で入手した個人情報がトランプ氏を当選させたとして炎上

2018年 3月 17日、Facebook の約5000万人の個人情報が 2016年の大統領選でトランプ陣営に不正利用されていたという指摘があると、アメリカの New York Times 紙とイギリスの Guardian 紙が報じ、Facebook のマーク・ザッカーバーグCEOが謝罪する騒ぎになっている。

不正利用の具体的な内容については明らかにされていないが、どのように個人情報を集めたかについては明らかになった。

集めた方法は、Facebook アプリを使った方法だ。 ケンブリッジ大学の心理学教授、アレクサンドル・コーガン博士が公開した性格診断 Facebook アプリ thisisyourdigitallife は、地域、友達、いいね!した内容、を見ることができる。 ただし、アプリを開始するときに、「アプリが見る」ことをユーザーが許可しなければ見る(個人情報を収集する)ことはできない。 だから、許可した奴が悪いと考えることもあるだろうが、その許可するシステムを含めて Facebook のシステムに問題があると世間は反応したようだ。

個人情報を第三者に提供するときは、本人の同意が必要であるが、逆に言えば同意を得れば提供しても問題ないということだ。 謝罪する前の Facebook は、本人の同意を得ている Facebook には問題はないとしており、コーガン博士が経営する調査会社 Global Science Research(GSR社)が、データ解析企業 Cambridge Analytica(CA社)に無許可で提供したことを問題視していた。

ところで、日本で普及している各種ポイントカードは、買った商品と買った人をつなぐ情報が、ポイントカード会社に集められる。 その情報から、個人情報(商品と買った人をつなぐ情報)を削除してできた、どれだけの人が商品を買ったかという「匿名加工情報」を第三者に売っている。 匿名加工情報は、本人の同意がなくても問題ないことが、個人情報保護法のガイドラインに明記されている。

CA社というのは、トランプ陣営に協力したことで有名な企業である。 それが、炎上の原因かと思われる。 つまり、トランプ大統領と IT 企業がが嫌いな人が炎上させたようだ。 裁判を起こしたら Facebook は無罪だったかもしれない。

ソース
http://www.itmedia.co.jp/news/articles/1803/19/news057.html
https://omoson.com/note/facebookshock/
http://www.viax.co.jp/blogs-dm/2016/11/30/kaiseihogohou/
https://news.yahoo.co.jp/byline/yamamotoichiro/20180328-00083245/
https://www.ppc.go.jp/personalinfo/

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

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

◇ アジャイル開発のビジネス貢献、世界と日本で認識に温度差。
https://builder.japan.zdnet.com/tool/35116697/
… アジャイルのそれぞれの方法について、全体的に日本の評価は低い。

◇ Google Cloud上のサービスをDDoS攻撃から守る新機能 Cloud Armor 公開。XSSやSQLインジェクションも防御可能。
http://www.publickey1.jp/blog/18/google_cloudddoscloud_armorxsssql.html
… 同じ Google のサーバーでも Google Cloud では有料オプション扱い。

◇ アニプレックスとLive2Dが業務資本提携。長編アニメ映画を制作へ。
https://japan.cnet.com/article/35116847/
https://japan.cnet.com/article/35090825/?tag=cleaf_relstory_manual
… 3Dにするとキャラクターが不自然になってしまうことが防げるが、動きは改善の余地あり。

◇ アップルが学校向けに発表した新ツールを一挙紹介。
https://japan.cnet.com/article/35116782/
… アップルも教育機関へのアピールを開始。

◇ 定期的な異動が生産性を落としている説は本当か。
http://www.itmedia.co.jp/business/articles/1804/03/news054.html
… 広く浅いゼネラリストは何でもでき、スペシャリストは少ししかできないと判断しているから。

◇ スマホの動くオーバーレイ広告に規制の動き。広告業者、主要広告事業者間で意見交換を行った。
http://nlab.itmedia.co.jp/nl/articles/1804/04/news115.html
… 国際的にも問題視されている。

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