プログラミング言語とソフトウェアアーキテクチャ

実装言語はソフトウェアアーキテクチャにどのくらい影響があるものだろうか?

実装言語を選択する基準としていくつか考えられる。

言語仕様による部分もあるが、

ライブラリやフレームワークが充実していること

は重要な条件だと思う。今、AI・ディープラーニングを学ぶとき python を使うのは、ライブラリやフレームワークが充実しているから。

 

処理速度が速いこと、省メモリで動くこと

これも重要。ハードウェア制御系・モバイルなど組込みシステムでは性能が要求される。

 

スケーラビリティがあること

Web系システム、大規模なものではとても重要。アーキテクチャがスケーラビリティを考慮していないと、ユーザ数が増えたとたんにシステムダウンしたり、むちゃくちゃ遅くなったりする。

 

今ではクラウドプラットフォーム(AWSとか Azure とか Google Platform とか)がスケーラビリティを実現するための様々なサービスを提供しているので、

それらを利用すればかなりのことができるはず。

関数型プログラミング言語とその特徴

関数型プログラミング言語の特徴

  1. 参照透過性
  2. パターンマッチング
  3. 高階関数
  • 関数を引数にできる
  • 関数を戻り値にできる
  1. クロージャ
  2. 遅延評価
  3. 部分適応
  4. カリー化

特徴それぞれについて、具体的に理解したい。

What それはなにか?

概要。書式。

Why なぜそれを使うのか?何がうれしいのか?

使用目的を明らかにする。

When, Where いつ、どんな状況で使うのか?

適用範囲を明確にする。

また、「使うべきでないとき」を明確にする。

How どうやって使うのか?

書式とともに、具体例をいくつか。

言語各種

  1. haskell
  2. elixir
  3. ocaml
  4. scheme
  5. c++
  6. scala
  7. python
  8. ruby
  9. typescript
  10. kotolin

もっと使い慣れるツール

github と git

使っているといえば使っているが、もっと日常的に使うべき。

Redmine と backlog

チケットドリブンな開発とガントチャートをちゃんと使えるようになりたい。

docker と virtualbox

ポータブルな開発環境を使えるようになりたい。Windows に縛られない開発環境。

AWSgoogle platform 

クラウドサービスは使えるようにならないと。

jupyter notebook

エクセルシートを python から読み書きする例。

 

名簿ファイルを読み取り、辞書オブジェクトに保存する。

 ---------------------------------------------------------------------------------------------------

import openpyxl as px # excel操作用ライブラリ
userListFile = '名簿.xlsx' # ユーザ名簿ファイル
today = "20170411" # 毎回指定する。デフォルト値はスクリプトを実行する日

wb = px.load_workbook(userListFile)
ws = wb.active

nameList = {} # 辞書オブジェクトの作成

start_row = 3
for line in range(start_row, ws.max_row+1): # 最大値を含む場合は +1 が必要
id = ws.cell(row=line, column=1).value
#print(id)
user = ws.cell(row=line, column=2).value
#print(user)
nameList[id] = user
fileName = today + "_" + id + "_" + user + ".xlsx"
print(fileName)

----------------------------------------------------------------------------------------------------

また、カレントディレクトリのファイルリストを取得するサンプルは以下の通り。

-------------------------------------------------------------------------------------------------------

import os # ファイル・ディレクトリ操作

targetDir = "./" # 対象となるディレクトリのパスを指定
numX = 28


fileList = os.listdir(targetDir) # カレントディレクトリのファイル一覧

if 5 != len(fileList):
print ('ファイル数が違います。')
else:
print('ファイル数は正しいです。')

-------------------------------------------------------------------------------------------------------

パスワード管理ソフト

数ある管理ソフトのどれを使うのが良いのか、いろいろ調べたり試してみた。

結論を先に書く。

 

クリティカルなパスワードはローカルに保存。頻繁にアクセスするウェブサイト等はクラウド型。

非常に重要なパスワード

お金が絡むもの。銀行、クレジットカード、PayPal など。

クラウド型だとサーバ側がクラッキングされるのが怖い。

なので、ローカルにパスワードのDBを置く。これらのサイトは、基本的には自宅からしかアクセスする必要はない。

あ、長期出張だと出張先からのアクセスが必要になる。

 

DBのマスターパスワードが非常に重要になる。強固かつ忘れないもの。

 

で、Keepass を使用中。Windows/MacOS X/Linux/iOS に対応しているのがよい。

それほど重要ではないパスワード

Webブラウザで各種サービスにログインするような場合。

パスワードは強固なものを使いたいが、覚えていられない。

ブラウザとパスワード管理ソフトが連携して、入力を楽したい。

また、マルチデバイス対応、パスワードの同期機能が欲しい。

 

今回、Dashlane を試してみた。機能的にはよさそうだったが。

まあ、機能を考えれば高いとは言えないかもしれないのだが。

さらにググっていたら、LastPass はマルチデバイスの同期が無料になったらしい。

こちらを試してみよう。

Microsoft のループバックアダプター

Windows でポートフォワーディングするにはループバックデバイスが必要らしい。

www.pingzic.com

 

で、これを使って windows7 から ssh 経由で samba を使う方法

CIFS-over-SSH for Windows 7

 

手順が長く設定項目が多い。スクリプトで自動化したいところ。powershell ならばこのへんの一連の作業を自動化できるだろうか?

ssh の鍵の種類

以前に putty を使ったとき、putty で作った鍵は何か変換をしないと使えなかった記憶がある。

ので。ちょっとググった。

qiita.com

自分の場合、商用SSHを使う機会はほぼなく、OpenSSH ばかりのはず。

また、改行コードの紛らわしさを考えると、鍵はサーバ側で作成したほうがトラブルことが少なさそう。

サーバ側で作成し、teraterm で問題なく使えるか、試してみる。

 ⇒ 何の問題もなく使用可能。

自分の環境だと、サーバで作成した鍵をローカルに持ってくるときにmsys2 の scp を使えた。会社の環境だとプロキシを超えられるのか?