Edited at

【要約】日経SYSTEMS 2019/5号


1. はじめに

以下雑誌の要約。


  • 題名:日経SYSTEMS 2019/5号


2. 国産フリーソフトも狙われた 圧縮解凍ソフトの脆弱性

2月に公開された、圧縮解凍ソフトの脆弱性について記載する。


2-1. 圧縮解凍ソフトの脆弱性

<例>

1. A君が「LINQ自動変換ツール.zip」をダウンロード。
2. しかしこのツールは、「LINQ自動変換ツール.ace」→「LINQ自動変換ツール.zip」に拡張子を変更されただけだった!
3. A君は「Lhaplus」を使って解凍。
4. UNACEV2.DLLが実行される。
5. パストラバーサル攻撃の餌食となる。


2-2. 対応・対策


  • 一部の圧縮解凍ソフトは、ソフトウェアをしばらく更新していないものもあり、修正プログラムでの本脆弱性への対応が見込めない。その場合は、UNACEV2.DLLを削除することで対応が可能。ACE形式のファイルは国内ではほとんど利用されていないので問題はない。

  • 開発状況が不明なソフトウェアは脆弱性対応が難しい。業務で利用するソフトウェアは、脆弱性管理を想定した上で選定することが重要。


3. 忙しいSEのための時短勉強法

人生100年時代と言われ、学びの必要性が高まっている。

忙しいエンジニアが、効率よく学ぶためのメカニズムについて記載する。


3-1. 生物学的視点:短期記憶と長期記憶


  • 人間の記憶には短期記憶長期記憶の2種類がある。



    • 短期記憶・・・情報の一時的な保管場所。コンピュータでいうバッファ。時間の経過や新たな情報が入ってくることですぐ消える。


    • 長期記憶・・・情報の本格的な保管場所。コンピュータでいうハードディスク。容量は限られているため、脳が必要と判断したもののみ大脳皮質に送って長期に保存する。



  • 長期記憶に情報を残すには、脳に「この情報は重要なもの」と認識させること。このためには既に持っている情報と新しい情報を組み合わせることが有効。


3-2. 段階的視点:段階的に質が高まる


  • 学びは段階を経て深まる。これをモデル化したものがASPSモデル。



    • Acquire(覚える)・・・短期記憶から長期記憶に情報を送るために感覚を使ったり経験したりする。


    • Structure(構造化する)・・・自分の中で情報を整理したり、人に話せるようにストーリー化したりする。


    • Attempt(試行する)・・・獲得した知識を実際の仕事で実践し、結果を評価したりする。


    • Perform(達成する)・・・本質を理解して応用したり、新しいことを発見したりする。



  • 学びを自分の仕事で生かせていない場合は、自分の中で知識を構造化できていない人が多い。知識を覚えただけになってしまっている。


3-3. 社会的視点:教えることで学ぶ


  • 書籍や動画を見たりするよりも、他者と学習内容を話し合ったり、誰かに教えたりするほうが学習効果が高くなる。

  • 人は社会的な生き物なので。他者から受ける刺激はとても大きい。


3-4. マインドマップ


4. 今さら聞けないPython講座

AIブームを追い風にPythonを使ったソフト開発に挑む人や、勉強を始める人が急増している。

Pythonの人気理由や基本的な特徴を記載する。


4-1. 今後スキルを磨きたいと思う言語


  • 1000人に聞いた、今後スキルを磨きたいと思う言語ベスト3。(複数回答可)


    • 1位・・・Python (670人)

    • 2位・・・JavaScript (547人)

    • 3位・・・Java (391人)



  • ここ2~3年でPythonへの注目度が急激に高まっている。


4-2. 人気沸騰の理由 ~AIを使った開発でほぼ一択~


  • Python人気はAIブームにけん引されている。深層学習を使ったソフトウェアを開発するなら、言語の選択肢は事実上Pythonしかない。

  • AIを使ったソフトウェアを効率よく開発するには、ライブラリが欠かせない。「TensorFlow」「PyTorch」「scikit-learn」などがあり、どれもオープンソースで無料で利用できる。ライブラリの命令はプログラムで記述するが、ほとんどのライブラリで共通して使えるのがPythonとなる。

  • データ分析もAIと同様に、「NumPy」「SciPy」「Pandas」「matplotlib」「Juptyter Node book」など、オープンソースのライブラリが豊富。

  • Webアプリ開発では、フレームワークとして「Django」「Flask」などがあり、「Ruby on Rails」に相当する。


4-3. 言語仕様の2つの特徴 ~初心者でもすぐ書けて読みやすい~


4-3-1. 軽量プログラミング言語


  • Pythonがいわゆる軽量プログラミング言語であるため、少ない記述量ですぐ動かせる。Python以外では、Ruby、PHP、Perlが代表例である。


  • 記述量はCやJavaよりも少なくなるが、動作速度では負ける場合が多い。


  • プロトタイプを素早く作って、現場でフィードバックをもらって改修するような使い方に向くため、アジャイル開発と相性が良い。


4-3-2. 文法が読みやすさを強制


  • Pythonでは、インデントを使ってプログラム中の処理のブロックを指定する。これが可読性を高める。

a = 3

if a == 5:
print "AAA" # if文の対象
print "BBB" # if文の対象
print "CCC" # if文の対象ではない


  • Pythonでは、Rubyなど他の言語では省略して記述できる箇所でも、できるだけ省略せずに書かなければならない。結果、技術者だけでなく、誰が見ても内容を理解しやすいプログラムになる。

  • 読みやすいプログラムになることで、自分、他人共にバグを発見しやすくなる。


4-4. マインドマップ