vue-cli(3.0)を使う前に
vue-cli(3.0)を使ってみようと思ったのですが、その前に、nodeのパッケージ管理をnodebrewからndenvに変更しました。
ndenvはanyenv(なんでもenv)から使うバージョン管理で、pyenv, rbenvも同じように使えるようです。が、今回はndenvのみanyenvから使えるようにしました。
以下のページの処理をそのまま実行すればOKです。
Nodeのバージョン管理をndenvにし、それに合わせてanyenvを導入したのでメモ – YATのblog
anyenvのインストール
$ git clone https://github.com/riywo/anyenv ~/.anyenv
使っているシェルの設定ファイル(.zshrc、.bash_profile)に以下を追加します。それまで使っていたnodebrewの処理をコメントアウトしました。
export PATH="$HOME/.anyenv/bin:$PATH" eval "$(anyenv init -)" # nodebrew #export PATH=$HOME/.nodebrew/current/bin:$PATH
設定ファイルを再読み込みします。
source 設定ファイル(.zshrc、.bash_profile)
ndenvインストール
$ anyenv install ndenv
インストール可能なnodeのバージョン一覧
$ ndenv install -l
nodeインストール
$ node install インストールしたいバージョン
インストールされているバージョン一覧
$ ndenv versions
デフォルトのバージョン
ndenv global デフォルトのnodenのバージョン
ここまでくれば、vue-cli 3.0が使えるようになります。 次は、それを使ったプロジェクトの作成ですね。
リンク
SiriKit Tutorial for iOS
はじめに
2018 WWDCにおいて、iOS12の新しい機能「Siri Shortcuts」が紹介されました。
Siri Shortcutsについて調べてみた【ショートカット登録編】 - Qiita
ユーザーの日常のルーチンを適切なタイミングでサジェストしてくれ、ショートカット実行させてくれる便利な機能です。 ロックスクリーン、Spotlight検索、SiriのApple Watchインターフェースから直接アプリのアクションを実行することができます。
現在もiPhone上にSiriからの提案(APP)が表示されますが、これがショートカットから実行できるようになるのでしょうか?
かつて、音声認識が盛んだった頃、電子秘書と呼ばれるアプリが登場しましたが、いずれ、Siriが電子秘書になると思います。
まずはSiri Kit
Siri Shortcutsのサンプル実装を試すまえに、まず、Siri Kitについて調べてみました。 Siri Kitを使うとどのようなことができるのかは、以下のページが詳しいです。
現状は、限られたドメインのみ使われるため電子秘書とは言えませんが、それでも配車予約、レストラン予約は便利だと思います。
これだと何となくわかっただけの状態なので、チュートリアルを実行してみました。 WenderLoonという配車サービスアプリです。
Siri Kitを使っていない状態からステップごとに使えるようにしているためとてもわかりやすいです。書いているとおりに実装すれば動くと思います。途中コンパイルエラーが発生しますが、Xcodeのお勧めの方法でFixすればOKでした。
ただ、言語が英語のため「99(passengers in) Red Balloonsの前までしか実行していません。
- Add an Intents extension
- Create appropriate handler objects
- Return the handler objects in your INExtension subclass
- Declare the supported intents in the Info.plist of the extension
- Request the user’s permission to use Siri
- Add a Siri usage description to the app’s Info.plist
- Add the Siri entitlement to the app
このアプリを動かした後に、AppleのSikirKitプログラミングガイドを読むと理解が進みました。
Microsoft Xamarin.iOSでもSiriKitは使えるようです。こちらのドキュメントも分かりやすいです。
Xamarin.iOS で SiriKit - Xamarin | Microsoft Docs
今後
SiriKitにカスタム語彙を登録できるようです。これが出来るようになると面白そうです。
AtomicLong
今更ですが、Atomicな変数(AtomicLong)を使って見ました。
Java1.5からですか〜。 同期処理をJavaで実装することはあまりしていなかったのかなぁ。
concurrentパッケージにある以下のインタフェースおよびその実装クラスも使えそう。
- BlockingDeque
- BlockingQueue
- ConcurrentMap<K,V>
- ThreadFactory
リンク
Swiftで半角空白文字削除(trim)
半角空白削除の場合には、whitespaces、改行などの制御記号も取り除く場合にはNewlinesも追加する。
let myString = " \t\t Let's trim all the whitespace \n \t \n " let trimmedString = myString.trimmingCharacters(in: .whitespacesAndNewlines) print(myString)
コンソールには以下の文字列が出力されます。
Let's trim all the whitespace
@objcのwarning@Swift 4の対処
UIRefleshControlを使っているSwift3プロジェクトをSwift4にマイグレーションさせた場合、呼び出しメソッドに@objcが追加されますが、Swift3プロジェクトの設定のま まだとワーニングが表示されます。
ビルドセッティングでSwift3 @objc interfaceをOnからDefaultに変更するとワーニング消えます。
Swift 4で@objcに関するwarningが出たときの対処 - Qiita
なにやらよく分かりませんが、ここを読むとなんとなく雰囲気がわかります。 @objcキーワードはいつまで残るんでしょうか…?
#selector がswift4では使えない? → 使えます - MILLEN BOX
ワーニング
The use of Swift 3 @objc inference in Swift 4 mode is deprecated. Please address deprecated @objc inference warnings, test your code with “Use of deprecated Swift 3 @objc inference” logging enabled, and then disable inference by changing the "Swift 3 @objc Inference" build setting to "Default" for the "NewsReader" target.
マイグレーションされたコード
Xcode3 override func viewDidLoad() { // (中略) self.refreshControl = UIRefreshControl() self.refreshControl?.addTarget(self, action: #selector(refresh(sender: )), for: .valueChanged) // (中略) } func refresh(sender: UIRefreshControl) { print("refresh") startDownload() self.refreshControl?.endRefreshing() }
Xcode4 @objc func refresh(sender: UIRefreshControl) { print("refresh") startDownload() self.refreshControl?.endRefreshing() }
GolangとVue.js...
「GolangとVue.js」というタイトルに惹かれて調べてみました。
Big Sky :: Golang と Vue.js で簡単なアプリケーションを作ってみた。
まずは、動かしてみます。
MongoDBインストール&起動
インストール済みであれば不要です。
$ brew install mongodb $ sudo mkdir /var/lib/mongodb $ sudo touch /var/log/mongodb.log $ sudo mongod --dbpath /var/lib/mongodb --logpath /var/log/mongodb.log $ export MONGODB_URI=mongodb://localhost
HomebrewでMacにMongoDBをインストールした時のメモ - Qiita
go-vue-example実行
githubからソースをダウンロードして実行しました。 depについてはこの記事を参照してください。
build & run
$ git clone https://github.com/mattn/go-vue-example $ dep unsure $ go build $ ./go-vue-example
Webアプリをブラウザで開く
http://localhost:4000/
DBの状態を調べる
$ mongo > show dbs; admin 0.000GB config 0.000GB go-vue-example-development 0.000GB local 0.000GB > use go-vue-example-development; switched to db go-vue-example-development > show collections; tasks > db.tasks.find(); { "_id" : ObjectId("5abef638056d1b319501bdc6"), "body" : "Have a breaskfast", "done" : true, "created_at" : NumberLong(1522464312), "updated_at" : NumberLong(1522547660) } { "_id" : ObjectId("5ac03e6e056d1b319501bdc7"), "body" : "do second task", "done" : false, "created_at" : NumberLong(1522548334), "updated_at" : NumberLong(0) } >
所感
CRUD的な操作を持つWebアプリをさっと作って動かすという観点だと、echo-scaffold(golang)とvueの組み合わせは便利そう。
必要な処理は、UIイベント処理(タスク入力および)、ajax呼び出し、取得したデータのDOMマッピングです。それぞれ、どのように記述するかは、以下のマニュアルを見てください。
サーバーサイド(golang)
githubのコードと以下のコマンドで生成したコードには差分はありませんでした。
$ echo-scaffold init go-vue-example $ cd go-vue-example $ echo-scaffold scaffold task body:string done:bool
フロントエンド
element UIとaxiosのvuejsライブラリを使っており、実際に作成しているWebアプリ(vuejsのファイル)は以下の2ファイルです。
- index.html
- app.js
依存関係管理ツールdep(golang)
久しぶりにgo言語関連アプリ、Big Sky :: Golang と Vue.js で簡単なアプリケーションを作ってみた。を使ってみようと思ったらパッケージがないって怒られました。
個別にインストールするのは面倒です…
$ go get -u xxx
nodeやrubyのパッケージ管理ツールがないのかと思っていたら、depというパッケージ管理ツールがありました。
- Big Sky :: golang オフィシャル謹製のパッケージ依存解決ツール「dep」
- 依存関係管理ツールdep(golang) - Qiita
- GitHub - golang/dep: Go dependency management tool
これで簡単に試してみることができます。
$ get clone https://github.com/mattn/go-vue-example $ cd go-vue-example $ dep init Using ^3.3.4 as constraint for direct dep github.com/labstack/echo Locking in 3.3.4 (a5d81b8) for direct dep github.com/labstack/echo Locking in master (e746df9) for transitive dep github.com/valyala/bytebufferpool Locking in v3.2.0 (06ea103) for transitive dep github.com/dgrijalva/jwt-go Locking in 0.2.4 (6fe1405) for transitive dep github.com/labstack/gommon Locking in v0.0.9 (167de6b) for transitive dep github.com/mattn/go-colorable Using v1 as constraint for direct dep gopkg.in/check.v1 Locking in v1 (20d25e2) for direct dep gopkg.in/check.v1 Locking in master (12892e8) for transitive dep golang.org/x/crypto Using master as constraint for direct dep github.com/globalsign/mgo Locking in master (baa28fc) for direct dep github.com/globalsign/mgo Locking in v0.0.3 (0360b2a) for transitive dep github.com/mattn/go-isatty Using ^1.0.5 as constraint for direct dep github.com/sirupsen/logrus Locking in v1.0.5 (c155da1) for direct dep github.com/sirupsen/logrus Locking in master (378d26f) for transitive dep golang.org/x/sys Locking in master (dcecefd) for transitive dep github.com/valyala/fasttemplate $ cat Gopkg.toml # name = "github.com/x/y" # version = "2.4.0" # # [prune] # non-go = false # go-tests = true # unused-packages = true [[constraint]] branch = "master" name = "github.com/globalsign/mgo" [[constraint]] name = "github.com/labstack/echo" version = "3.3.4" $ cat Gopkg.lock # This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. [[projects]] name = "github.com/dgrijalva/jwt-go" packages = ["."] revision = "06ea1031745cb8b3dab3f6a236daf2b0aa468b7e" version = "v3.2.0" $ dep ensure $ go build