SQL Server初期設定メモ
SQL Serverは時々しか使わないので毎回設定につまずいてしまう...orz
インストール
SQL Server ダウンロード | マイクロソフトからダウンロードする。 * SQL Server * SQL Server Management Studio
初期設定
Windows認証にSQL認証を追加する
saのプロパティ修正
TCP/IP接続できるようにする
DB作成
- SQL Server Management Toolを起動する
- ログインする(Windows認証)
- データベースを作成する
- データベース操作用アカウント作成 データベースのユーザーとデータベースへのログインユーザーの作成 (SQL Server Tips)
リンク
Vuexアプリでfirestoreアクセス
vuexで作成したWebアプリでFirestoreにアクセスする方法。
まとめ
中途半端にライブラリ使うより自前で実装した方が良さそう。
VuexFireを使う
以下の記事が参考になる。
VuexFireでNuxt.jsアプリに一瞬でFirestoreを導入する - Qiita
変数名が変わるようです。要注意! * Any example using with Nuxt.js · Issue #124 · posva/vuexfire * vuefire/CHANGELOG.md at master · vuejs/vuefire
ライブラリは使わない(お勧め)
以下の記事が参考になる。 アプリの説明を除くと結構シンプルな処理でFirestoreアクセスが可能になると思う。
vuejsのVS Code によるデバッグ
Vus.jsでWebアプリケーション開発を始めるにあたりデバッグ方法を調べました。 Vue > Visual Studio Code デバッグ - Qiitaに沿って進めるとうまくいきました。
ポイントは、2点。 vue.config.jsを作成する。
// vue.config.js module.exports = { configureWebpack: { devtool: 'source-map' } }
launch.jsを修正
"webRoot": "${workspaceFolder}/src", "breakOnLoad": true, "sourceMapPathOverrides": { "webpack:///src/*": "${webRoot}/*"
$ vue create hello-world
はリンクの通りにBPで止めることができました。 私が開発しているWebアプリケーションはtypescriptを使っているせいか、debugger文を追加しないと止めることができませんでした。
不具合修正できてめでたしめでたし。
リンク
ginでCORS対応
go(gin)で作成したWeb APIを別ドメイン(ローカルに作成したindex.html)からアクセスした場合、CORSでエラーが発生しました。
対策としては、ginで作成したハンドラでヘッダ(Access-Control-Allow-Origin)を追加すればOK。
func XXXX(ctx *gin.Context) { ctx.Header("Access-Control-Allow-Origin", "*") ctx.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE") ctx.Header("Access-Control-Max-Age", "86400") ctx.Header("Access-Control-Allow-Headers", "Access-Control-Allow-Headers, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization") ...
CORSについてもあまり良く理解していなかったので復習。 Cross-Origin Resource Sharing (CORS)は、別ドメインからアクセスした場合サーバー側で許可していないとブラウザがチェックしてエラーに してくれる。 公開されているAPIサーバーはすべてのドメインからのアクセスを許可するかわりにトークンでチェックしているのでここまで気が回っていませんでした。 実際にいろいろ試してみないと覚えることができないことを改めて痛感。
リンク
GORMでdistinct
GORMはGo言語でよく使われているORMの一つです。
GORM ガイド | GORM - The fantastic ORM library for Golang, aims to be developer friendly. ても便利なのですが、distinct(レコードの重複をまとめる)は未実装でした。
したがって、distinctを実現するためには生SQLを実行する必要があります。
以下の記事を参照。
type Result struct { Name string Age int } var result Result db.Raw("SELECT name, age FROM users WHERE name = ?", 3).Scan(&result)
覚えておいて損はなさそう。
DynamicFeaturesInSwift
swift 4.2の新しい機能「Dynamic Member Lookup」について学ぶために以下の記事を写経しました。
Dynamic Features in Swift | raywenderlich.com
Dynamic Member Lookupを理解した後で、以下の記事を読むとよりわかりやすいと思います。 今、僕が一番注目している Swift の新機能について、 iOSDC Japan 2018 で話します - koherent.org
チュートリアル
DocCatcherページのJSONDocCatcherの例が分かりやすいです。
プロパティアクセスとして記述できるようになる仕組みなんですね。
適用後
let ownerName: String = catcher.owner?.name?.value() ?? ""
適用前
let messyName: String = catcher["owner"]?["name"]?.value() ?? ""
写経後のソースは ここ にあります。