Angular ビルド手順 忘備録

 npm use 10
 nvm use 10

//cloud9 のportは8080
//アプリをbuildする時に ng -serve
//https://angular.io/cli/serve
 ng serve --host 0.0.0.0 --port 8080
 

 nvm use 10
 cd Angular/


 ng serve -o
 ng serve --host 0.0.0.0 --port 8080
 
//接続されているクライアントが許可されたホストの一部であることを確認しない
ng serve --open --host $IP --port $PORT --disable-host-check

ng serve --host $HOST --disableHostCheck --port $PORT
nvm -v

//安定版を利用
nvm usestable
ng serve --host $HOST --disableHostCheck --port $PORT

pacage.json

{
  "name": "xxxx-xxx",
  "version": "0.0.1",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "start:open": "ng serve -o",
    "start:prod": "ng serve --aot",
    "build": "ng build",
    "build:prod": "npm run build -- --prod --aot",
    "test": "ng test",
    "lint": "ng lint",
    "lint:fix": "ng lint --fix",
    "lint:styles": "stylelint ./src/**/*.scss",
    "lint:ci": "npm run lint && npm run lint:styles",
    "format": "prettier --write src/**/*.ts",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "^8.0.3",
    "@angular/cdk": "^8.0.0",
    "@angular/common": "^8.0.3",
    "@angular/compiler": "^8.0.3",
    "@angular/core": "^8.0.3",
    "@angular/flex-layout": "^8.0.0-beta.26",
    "@angular/forms": "^8.0.3",
    "@angular/material": "^8.0.1",
    "@angular/platform-browser": "^8.0.3",
    "@angular/platform-browser-dynamic": "^8.0.3",
    "@angular/router": "^8.0.3",
    "@fortawesome/fontawesome-free": "^5.9.0",
    "@nebular/eva-icons": "4.1.0",
    "@nebular/theme": "4.1.0",
    "angular-font-awesome": "^3.1.2",
    "core-js": "^2.5.4",
    "eva-icons": "^1.1.1",
    "font-awesome": "^4.7.0",
    "rxjs": "^6.5.2",
    "tslib": "^1.9.0",
    "zone.js": "~0.9.1"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.800.6",
    "@angular/cli": "^8.0.6",
    "@angular/compiler-cli": "^8.0.3",
    "@angular/language-service": "^8.0.3",
    "@schematics/angular": "^8.0.3",
    "@types/jasmine": "~2.8.8",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "~8.9.4",
    "codelyzer": "^5.0.1",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~4.0.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.1",
    "karma-jasmine": "~1.1.2",
    "karma-jasmine-html-reporter": "^0.2.2",
    "prettier": "^1.17.0",
    "protractor": "~5.4.0",
    "stylelint": "^7.13.0",
    "stylelint-config-prettier": "^5.1.0",
    "ts-node": "~7.0.0",
    "tslint": "~5.11.0",
    "tslint-config-prettier": "^1.18.0",
    "tslint-language-service": "^0.9.9",
    "tslint-plugin-prettier": "^2.0.1",
    "typescript": "3.4.5"
  }
}

Xserver coda2接続 設定

サーバーアドレスは公式サイトの説明通りで良い

f:id:happy_teeth_ago:20210216114638p:plain SSH設定 | レンタルサーバーならエックスサーバー

サーバーIDが違うので注意 パスワード変更から参照すること

f:id:happy_teeth_ago:20210216113044p:plain

パーミッションの変更が必要 秘密鍵を配置しているフォルダも700にパーミッションの変更が必要

.sshフォルダは 700

秘密鍵は 600

chmod 600 ~/.ssh/id_xserver_rsa

ls -la コマンドで下記のようになっていればパーミションが600になっている

f:id:happy_teeth_ago:20210216113551p:plain

その他

特定の文字列を含むファイルのリストを取得する方法

参考にさせていただきました

【find・grep】特定の文字列を含むファイルのリストを取得する方法。 - Qiita

//[検索対象フォルダのパス]はカレントなら必要ない

grep [検索したい文字列] -rl [検索対象フォルダのパス]

SSH接続時間延長、タイムアウトしないようにする。

.ssh/config

//これで15秒ごとにサーバーにメッセージをおくる。
// デフォルト3回 15*3 = 45秒で接続を切断する

ServerAliveInterval 15

参考にさせていただきました。

ssh 接続をタイムアウトしないようにする - maruko2 Note.

MAMP mailサーバー設定-忘備録

postfixにてメールを送付

公式サイト

Postfix 基本設定

参考にさせていただきました。 https://joyplot.com/documents/2016/11/07/postfix-send-mail/

Postfix とは MTA(Message Transfer Agent) と呼ばれる、電子メールを扱うソフトウェアのこと。macOS には標準で Postfix がインストールされている

mail.cfのパス Postfixの設定ファイル

/etc/postfix/main.cf

SASLを設定 グーグルの2段階認証の為

SASL(Simple Authentication and Security Layer)によるSMTP認証を使用するため、main.cf の最後に追記。

#mail for MAMP
myorigin = gmail.com
myhostname = smtp.gmail.com
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
//このファイル名で読み込むファイルを決定している。
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes
smtp_tls_security_level=encrypt
tls_random_source=dev:/dev/urandom

postmap コマンドにてdbファイルを生成

これが、ハッシュ化されたDBで、転送経路などが記載されているものを作成 処理速度が通常のファイルより早い。

//transportはファイル名
//上記設定で設定したファイル名を利用
postmap authinfo

postfixを再起動

sudo postfix reload

メール送信テスト

date | mail test@gmail.com

DNSのチェック

dig localhost

メールの確認

mailq

失敗したメールを確認できる。 成功していれば、表示されない

ログ確認 MACのみ

log stream --predicate  '(process == "smtpd") || (process == "smtp")' --info

Swift @escaping について

参考にさせていただきました

Swift 3 の @escaping とは何か - Qiita

クロージャーがスコープを抜けても存在し続けるときに、@escaping が必要になる。

  • クロージャがスコープ外で強参照されるとき
  • クロージャを非同期的に実行するとき

実装例 非同期に実行するときに該当

//1 ボタンの生成タイミング遅らせている
    private lazy var behaviorAsButton = BehaviorAsButton{_ in
   //5
        self.performSegue(withIdentifier: "transforAddress", sender: nil)
    }


   override func viewDidLoad() {
        super.viewDidLoad()
        if scene == .office {
            uiNaviItem.title = NSLocalizedString("ScwOffice", comment: "")
        } else {
            uiNaviItem.title = NSLocalizedString("ScwClient", comment: "")
        }

//定義を設定 このタイミングで2が呼ばれる
        uiAddress.delegate = behaviorAsButton




関数定義

テキストフィールドをタップするとsegueが実行されて、画面が遷移する

class BehaviorAsButton: NSObject, UITextFieldDelegate {
//3
    let action: (UITextField) -> Void
//2- タイミング actionに詰め込まれるまではOK その後別のタイミングで呼び出される キャプチャー
    init(_ action: @escaping (UITextField) -> Void ) {
        self.action = action
    }
//4
    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        action(textField)
        return false
    }
}