技術一覧

WebページのCSS定義箇所を特定する方法

Chromeの場合

  1. ブラウザに調べたいWebページを表示します
  2. (Mac) Cmd+Opt+I、(Windows) Ctrl+Shift+I を押すと、インスペクタウィンドウが開きます
  3. 画面左下のソースコード上で調べたい箇所をクリックします
  4. 画面右下の矢印「Computed」をクリックします
  5. 矢印「Show all」をクリックします
  6. その下に各CSS要素が表示されます。薄い文字はデフォルトのまま、特に指定されていないことを示し、CSSで指定した要素についてはどのファイルのどの行で指定されたかが表示されます

ランサムウェア被害総額を知る方法と犯人像

世界で感染が確認されているランサムウェア(WannaCry種)、日本国内でも日立製作所、JR東日本、イオンなどで感染が報告されています。

そもそもランサムウェアというのは、パソコンのデータを人質に取り、身代金と引き換えに解放するというものです(本当に解放するかどうかは犯人次第ですが)。コンピュータウイルスというのは、所詮はプログラムなので、作者の発想次第でどのようにもできるのですが、今回の WannaCry に関しては、感染したサーバのデータを勝手に暗号化してしまうので、暗号化をした鍵が分からなければ元に戻せないし、鍵が分かれば暗号化は復号できるわけです。

人質犯にとって、一番の難所は金銭の授受です。これはアナログ犯罪だろうがデジタル犯罪だろうが変わりませんが、今回、身代金の支払いに Bitcoin を指定しています。実は Bitcoin は受け取った人が何処の誰だか分からなくできるのです。と言うより分からないのがデフォルトの仕様です。最近はIT専門外の一般の人でも Bitcoin を売買する事が多くなりましたが、そういう人々は勿論、取引所に情報があるので捜査当局になら身元は直ぐに判明します。しかし、悪さをする人々はアシがつかないよう”安全”に受け取れるわけです。

しかしこれもまた Bitcoin の特性で、全ての取り引きは公開情報なので、今回のWannaCryでうっかり身代金を払った人たちのトランザクションも丸見えなのです。

例えば本記事上の実際に感染した画面に表示されている Bitcoin アドレスの場合、このリンクでトランザクションが参照可能です。

https://blockchain.info/address/12t9YDPgwueZ9NyMgw519p7AA8isjr6SMw

15日現在で 11.47 BTC なので、売却ベース円換算で約235万円というところです。
身代金のアドレスは、上記の他に幾つか複数あるので、被害額はもっと多いことになります。
被害に遭った方は、くれぐれも身代金を払わないようにしましょう。

ちなみに、この犯人の論理破綻している部分は「解放して欲しくば300ドル寄越せ」と画面上で要求していて、タイマー設定されて最初の時間を過ぎれば金額が上がる仕組みも見て取れます。しかしドルで指定して Bitcoin で払えっておかしいでしょう?一箇所、論理の破綻を見つけたなら、そこから紐を解くことが出来ます。
Bitcoin の対ドル相場は常に変動しているし、そもそも相場はそれぞれの取引所で決めているだけなので、標準相場なんてこの世に存在しないのです。
つまり、身代金の額は管理されていないという事が解ります。勿論、身代金を払ったところで犯人から鍵情報の連絡がある筈もありません、そんな事をすればアシがついて捕まるのですから。なので解放はオフラインの自動処理でしょう。さらに1円払っても100万円払っても同じ処理結果にしてあるでしょう。犯人はグループである可能性は否定できませんが、このロジカル思考力の程度からすると学生くらいの年齢のプログラマが一名、他にもしかしたらアシスタントが居る程度でしょう。

1円払っても解放される可能性はありますが、それでも犯人に屈して身代金は払ってはいけません。


Ionic を iPhone 実機で実行してみよう

事前準備

npm がインストール済みである必要があります。npm に関しては別ジャンルなので本稿では扱いません。

手順

1.Cordova をインストールします

$ sudo npm install -g cordova

2.Ionic をインストールします

$ sudo npm install -g ionic

3.iOS への展開ツールをインストールします

$ sudo npm install -g ios-deploy

4.プロジェクトを作成します

$ ionic start todo blank

実行結果

✔ Creating directory /Users/user/todo - done!
Fetching app base (https://github.com/driftyco/ionic2-app-base/archive/master.tar.gz)
✔ Downloading - done!
Fetching starter template blank (https://github.com/driftyco/ionic2-starter-blank/archive/master.tar.gz)
✔ Downloading - done!
✔ Updating package.json with app details - done!
✔ Creating configuration file ionic.config.json - done!
Installing dependencies may take several minutes!
> npm install
✔ Running command - done!
> npm install --save-dev --save-exact @ionic/cli-plugin-ionic-angular@latest
✔ Running command - done!
> npm install --save-dev --save-exact @ionic/cli-plugin-cordova@latest
✔ Running command - done!

♬ ♫ ♬ ♫  Your Ionic app is ready to go! ♬ ♫ ♬ ♫

Run your app in the browser (great for initial development):
  ionic serve

Run on a device or simulator:
  ionic cordova run ios

Test and share your app on a device with the Ionic View app:
  http://view.ionic.io

? Link this app to your Ionic Dashboard to use tools like Ionic View? Yes ※要入力

You will need to login in order to link this app. Please run the following commands to do so.
  ionic login - login first
  ionic link - then link your app

Go to your newly created project: cd ./todo

「※要入力」でIonicのダッシュボードに追加するかを問われるので、Y としておきます。

5.作成されたプロジェクトディレクトリへ切り換えます

$ cd ./todo

6.ブラウザで実行してみます

$ ionic serve

7.iOSシミュレータで実行してみます

$ ionic cordova emulate ios

iPhone実機で実行する

上記の通り、ブラウザやシミュレータで動かすのは比較的簡単に進められたと思います。しかし、手持ちのiPhone実機で動作させるのは、一手間必要になります。以下に手順を記します。

1.six をインストールします

既にインストールしてあればスキップして手順2へ進んでください。

$ pip install six

2.利用可能ターゲットを確認します

$ cordova run ios --list
Available ios devices: ←利用できる実機のリスト
2da1860a89c26039aabc864089d99c1cc24dd00a iPhone
Available ios virtual devices: ←利用できるシミュレータのリスト
iPhone-5, 10.3
iPhone-5s, 10.3
iPhone-6, 10.3
iPhone-6-Plus, 10.3
iPhone-6s, 10.3
iPhone-6s-Plus, 10.3
iPhone-7, 10.3
iPhone-7-Plus, 10.3
iPhone-SE, 10.3
iPad-Air, 10.3
iPad-Air-2, 10.3
iPad-Pro--9-7-inch-, 10.3
iPad-Pro, 10.3
Apple-TV-1080p, tvOS 10.2
Apple-Watch-38mm, watchOS 3.2
Apple-Watch-42mm, watchOS 3.2
Apple-Watch-Series-2-38mm, watchOS 3.2

このように、現環境で利用できる実機やシミュレータを確認することができます。実機が認識されている事を確認してください。

3.Xcodeを開きます

/Users/user/todo/platforms/ios/MyApp.xcodeproj
というファイルが作成されているので、それをXcodeで開きます。

4.コード署名を設定します

通常のアプリ開発の通り、コード署名をしないと実機にアプリをインストールできないので、設定します。
コード署名の設定をしたら Xcode を閉じてください。

5.コンパイル&実行します

$ cordova run ios --device

コンパイルが完了すると、自動的に実機で実行されます。

以上、取り敢えず簡単に実機で Ionic を実行する手順を紹介しました!


まだウェブ検索にグーグル使ってるの?

長らくググっていた皆さんへ新たに選択肢が増えました。ここのところ話題のサーチエンジン「ダック・ダック・ゴー (DuckDuckGo)」です。

編集部で暫く使ってみたところ、なかなかどうして素晴らしい結果を得られています。今後は脱グーグルになるかも知れません。

主なポイントを下記に列挙します。

1.ダックダックゴーは個人情報を記録しない

グーグルの場合、勿論良かれと思ってやっているのですが、過去に検索した記録や場所(IPアドレス)などがグーグルのサーバに記録され続けていて、その人に”最適”な検索結果を出すという事になっているのですが、正直のところ大きなお世話で、一般的にどのサイトがマッチするのかという結果を貰えればそれで十分だと思います。ダックダックゴーの検索順位は誰が検索しても同じ順位になるのです。

2.検索速度が速い

グーグルは、検索している人の過去履歴まで考慮して検索結果を表示するので、どうしても遅くなりますが、ダックダックゴーは複雑な履歴処理をしていないので、その分、処理が速いのだと思います。勿論、グーグル検索がそんなに遅いわけではないのですが、僅かな一瞬の差で確実にダックダックゴーの方が速いです。

3.広告を非表示にできる

ダックダックゴーは設定で、広告を非表示にすることも可能です。運営者の財政は大丈夫かと余計な心配をしてしまいますが、とにかく利用者としては有り難い機能です。

4.テーマを変更できる

ダックダックゴーはテーマを変更する事もできます。下サンプルでは、青と緑のテーマにしてみたところ、見慣れているグーグルの検索結果画面に近い表示にできました。

最近、特に日本語のグーグル検索結果の順位がおかしいので、このダックダックゴーと比べてみては如何でしょうか。

ダックダックゴー
https://duckduckgo.com/


日本のサラリーマンの平均睡眠時間は6時間、公共システムの睡眠時間は8時間半

恐らくどのIT専門家が使っても多大なストレスを感じるであろう、我が国の誇る電子納税システム「e-Tax」。

今どき民間企業のシステムであれば、24時間365日ノンストップ稼働が当たり前という時代。筆者の経験ではインターネットの前世代、クライアントサーバシステムでさえ20年以上前から基幹システムはフォールトトレラントシステムとのニーズが当然だった記憶がある。

今回、e-Tax のウンザリする操作性の悪さの話は別の機会に譲るとして、稼働時間の少なさにも驚くばかりである。運用時間は平日のみで更に 朝8:30から0:00までしか動いていない。毎日、8時間半ものメンテナンス時間(?)を取っていて、土日祝祭日は一切稼働しない。

一方で、統計によると日本のサラリーマンの平均睡眠時間は6時間らしい。そのうえ土日出勤がある勤労者も多いだろう。つまり我が国では人間は酷使されるがコンピュータシステムは毎日8時間半の睡眠と土日の休みが保障される厚遇環境という図式らしい。本来あるべきは、逆ではないだろうか?

そもそも、稼働時間が役所中心に設計されているようだが、土日や夜間に業務をしているサービス業などもあるのだから、国民に使って貰う公共システムで平日昼間と夜間残業時間のみ稼働という設定がおかしいのではないだろうか?勿論、サーバの24時間365日運用がまだ人類未踏の技術領域であるなら解る。反重力技術で飛行機を飛ばせと言っても人類としてまだ技術が到達していないことは実現できず無理難題というものだ。

しかしサーバの24時間365日稼働は、少なくとも先進国社会では常識なのだから、当然、日本でも行政システムをノンストップ稼働させるよう努力すべきであろう。公共システムは民間システムより劣って当然という認識を改め、寧ろ公共システムの立ち位置として日本国内のITシステムはこうあるべきという模範となり、民間を牽引するくらいの気概であるべきだ。


サイトの改善を KPI(key performance indicator)で評価する

システム開発には、当然コストが掛かります。仕様変更すれば確実にコストが掛かりますが、仕様を変えて効果がどうだったのか、その効果を測定することをKPIといいます。

サービス向上する為にサイトを改善しよう、表示の見せ方を変えてみよう。その意図は良いでしょう。しかし、コストを掛けて実際にユーザは増えたのか?そういう測定をしないとビジネスではなく趣味のサイトになります。指標はユーザ数の増減だけでなく、滞留時間やアナログ的にユーザからのクレームの数も指標とする場合もあるでしょう。買い物カゴが使いづらいというクレームを半減させるという目標設定もKPIになり得ます。どの程度のコストを投入してどういう結果を得るかを開発に着手する前に策定しておくのが大切なのです。


ダメなエンジニアを見分ける簡単な方法

エンジニアと会話する際には、新しい用語を積極的に使ってみましょう。
「うちは今、”ふぃんてっく” 系の事業を模索しているんだよね」とか。

勿論、相手が知らないとしても、それはいいんです。IT用語は日々増えていると言っても過言ではありません、偶々知らなかったという事はよくあります。問題なのはリアクションですから。

リアクションの想定ケースは以下の4ケース

1.「ああ FinTech ですか、うちもプランニングには入っています」という感じで既知のパターン

2.「ああ”ふぃんてっく”ですか、それはいいですね」と調子は合わせるけど、知ったか振りのパターン

3.「”ふぃんてっく”って?。。。なんだ、それならそう言えばいいのに」と、新語を受け入れないパターン

4.「”ふぃんてっく”って?。。。なるほど、そういう言葉があるのですね」と、新語を素直に受け入れるパターン

既知の場合は勿論良いとして、ケース4の未知の新語を取り込もうとするエンジニアなら将来性があります。

問題なのは残った2ケース。知ったか振りと新語を拒否するエンジニアはNG。将来性ありません。IT業界は、かなり発達してきたとはいえ、私はまだまだ入口に入っただけで、これからも発達し進化すると思っています。今後も次々に新たなコンピュータ言語も登場するでしょう。

そのような業界に身を置いているのに、知識欲が無いエンジニアは現状が成長の限界点という事です。

あなたがもし、新語を拒否するエンジニアと会った際は、そういうレベルのエンジニアなんだと思ってください。この見分け方はほぼ的中しています。

ちなみに FinTech とは、 Financial Technology を略したもので、金融を絡めたIT技術という意味で使われます。IT用語は「クラウド」もそうですが、往々にして定義が緩いので、なんとなくそういう系という程度で絡めても間違いではありません。


Javascript でダンプ出力するコード

16進数でデータ内容をダンプしたい時に使う関数です。
本関数のリターン値にはダンプ文字列が入ります。主にデバッグ用途となるでしょう。

第一引数はデータ。第二引数は先頭から何バイトを出力対象とするかの指定です。

function hexDump(data, length) {
 var dumpLength = length || data.length; // length が渡されていなかったらデフォルト
 var outputString = "";
 var addressPadding = "0000000";
 var line = 0;
 var countForCurrentLine = 0;

 outputString +=
  "Address:  00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f \n" +
  "---------------------------------------------------------\n" +
  "00000000  ";

 for (var i = 0; i < dumpLength; i++) {
  countForCurrentLine++;
  var byteData = data.substr(i, 1);

  var number = data.charCodeAt(i) & 0xff;
  var byteHex = (number < 16) ? "0" + number.toString(16) : number.toString(16);
  ;

  outputString += byteHex + " ";
  if (countForCurrentLine == 16) {
   countForCurrentLine = 0;
   line++;
   outputString += "\n" + addressPadding.substr(0, 7 - line.toString(16).length) + line.toString(16) + "0  ";
  }
 }
 return outputString;
}

 


e-Taxのセキュリティ意識は何かおかしい

何だろうこの違和感のあるセキュリティ感覚。
旧パスとの異なる文字数よりも、記号を含めるとか大小文字を含めさせる方が強度が強いのに。情報セキュリティの知識が低いエンジニアがシステム設計したことがバレバレなのですが。

イータックスシステムは、これだけではなく違和感のある設計が他にも多々見受けられます。メーカ丸投げではなく、プロジェクトにやはり外部専門家を入れるべきでしょう。


Swift をコマンドラインで実行する

ちょっとしたコードの動作検証をしたい場合、わざわざXcodeを立ち上げるよりコマンドラインで実行する方がお手軽です。

例えば、foo.swift というファイルにコードを書いた場合、以下のコマンドで実行できます。ソースファイルには import Foundation を忘れずに。

インタプリタで実行

$ swift foo.swift

コンパイルして実行

$ swiftc foo.swift -o foo
$ ./foo