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" } }
rails サーバー止める ps 忘備録
rails s
ps aux | grep puma
これでプロセスを見る 見つけたら
kill -9 プロセス番号
Xserver coda2接続 設定
サーバーアドレスは公式サイトの説明通りで良い
サーバーIDが違うので注意 パスワード変更から参照すること
パーミッションの変更が必要 秘密鍵を配置しているフォルダも700にパーミッションの変更が必要
.sshフォルダは 700
秘密鍵は 600
chmod 600 ~/.ssh/id_xserver_rsa
ls -la コマンドで下記のようになっていればパーミションが600になっている
その他
特定の文字列を含むファイルのリストを取得する方法
参考にさせていただきました
【find・grep】特定の文字列を含むファイルのリストを取得する方法。 - Qiita
//[検索対象フォルダのパス]はカレントなら必要ない grep [検索したい文字列] -rl [検索対象フォルダのパス]
SSH接続時間延長、タイムアウトしないようにする。
.ssh/config
//これで15秒ごとにサーバーにメッセージをおくる。 // デフォルト3回 15*3 = 45秒で接続を切断する ServerAliveInterval 15
参考にさせていただきました。
DB設計変更留意点 忘備録
メインのテーブル設計を多対多に変更すると
current_user.tow_nuser
で取得できなくなる=>各コントローラーでのcurrent_userのgetが難しくなる
関係する箇所が多い=>変更はしない。
PHP $_POSTまとめ
$_POSTとは
- HTTP POSTで送られた値を取得する
- 連想配列で値を持っている
- グローバルスコープ(どこでも利用可能)
- データ送信時は
MAMP mailサーバー設定-忘備録
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 } }