[Nuxt.js/TS] Store モジュール分割

store/Book/index.ts

export interface Book {
  title: string
  text: string
}

export const state = () => (
{
  books: [{ title:"title1",text:"abc" }]
})

export const mutations = {

  add (state, book: Book) {
    state.books.push(book)
  },
  all (state): Book[] {
    return state.books
  },

}

store/index.ts

export const state = () => ({
  counter: 0
})

export const mutations = {
  increment (state) {
    state.counter++
  },
 }

export const actions = {

  action_inc ( {commit} ) {
    commit('increment')
  },  
 

pages/todo.vue

<template>
<div>
  <ul>
    <!-- <li v-for="t in $store.state.Book.books"> -->
    <li v-for="t in books">
      <span>{{ t.title }}</span>
    </li>
  </ul>
  <button @click="add_book">ADD</button>
</div> 
</template>

<script lang="ts">

// TS VER.
  import { Component, Vue, namespace } from 'nuxt-property-decorator'
//  import { Vue, Component, namespace } from 'vue-property-decorator'
  import { mapMutations, mapActions  } from 'vuex'

  const StoreBook = namespace('Book')

  @Component({
  })

  export default class extends Vue {

    @StoreBook.Mutation add
    @StoreBook.Mutation all

    //------------------------------------------
    // getter
    //------------------------------------------
    private get cnt(): number {
      return this.$store.state.counter
    }

    private get books():[] {
      return this.$store.state.Book.books
    }

    //------------------------------------------
    // mutation
    //------------------------------------------
    clicked_inc(): void{
      this.$store.commit('increment')
    }

    //------------------------------------------
    // action
    //------------------------------------------

    get_books():Object[]{
      console.log("get_books" )
      return this.all();
    }
    add_book(el): void{
      var b = { title:"title1",text:"abc" }
      this.add(b)
    }
  }
</script>

<style>
.done {
  text-decoration: line-through;
}


</style>

 

 

Spresense

SETUP

 SDK Tutorial
 https://developer.sony.com/ja/develop/spresense/developer-tools/get-started-using-nuttx/set-up-the-nuttx-environment

Spresense SDK 開発ガイド
https://developer.sony.com/ja/develop/spresense/developer-tools/get-started-using-nuttx/nuttx-developer-guide

PIN

Windows Subsystme Linuxを使う

Ubuntu 18.04

下記フォルダで作業します。

cd /mnt/c/SPRESENSE

windowsの、c:\SPRESENSEです。

 

GCC ARM toolchain の他、必要なパッケージをインストールします。

sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get installgit gperf libncurses5-dev flex bison gcc-arm-none-eabi genromfs pkg-config autoconf automake cmake

 

kconfig-frontends を取得し、インストール

git clone https://bitbucket.org/nuttx/tools.git
cd tools/kconfig-frontends/
./configure –disable-shared
make
sudo make install

 

Spresense SDK リポジトリからソースコードをダウンロード

git clone –recursive https://github.com/sonydevworld/spresense.git

 

USB接続の設定

sudo usermod -a -G dialout <user-name>

 

Kernelのビルド

cd spresense/sdk
tools/config.py -k release
tools/config.py -k -m
(設定の変更)
make buildkernel

SDKのビルド

 tools/config.py default
 tools/config.py -m
(設定の変更)

 make

※ビルドが成功すると sdk ディレクトリ以下に nuttx(ELF形式の実行ファイル)と nuttx.spk(実機に書き込むためにパッケージングされた独自形式のファイル)ができます。

 

設定の変更

 MENUCONFIG

 tools/config.py -m

または、make menuconfig

 

[CXD56xx Configuration]
  [Power Management]
    [*] Dynamic clock control

  [I2C]

    [*] I2C0

       [  ] SCU Sequemcer  <= チェック外す。

[System tools]  

  [*] I2C Tool
  [NSH Library]
    [Scripting support]
      [*] Support ROMFS start-up script
    [ROMFS header location]
      [*] Architecture-specific ROMFS path

※Dynamic clock control を有効にすると、システムは HV モード で起動した後に RCOSC モードまでクロックを落とします。定常状態では、RCOSC モードで動作します。

Sensor Control Unit (SCU) は、SCU デバイス内の SPI もしくは I2C バスに接続されたセンサーデバイスからのセンシングデータを取得することができます。CPUとは独立して動作するため、センサー取得に関わるCPUの負荷を軽減することができます。

 

起動スクリプトを作成する。(/etc/rc.S)

$ cd bsp/include/arch/board
$ cp ../../../../system/nshlib/rcS.template .

boardフォルダは、シンボリックリンク。
board -> /mnt/c/spresense/spresense/sdk/bsp/board/spresense/include

 

bsp/include/arch/board/rcS.templateの中身を下記に書き換え
nestra &

 

ROMFSを作成

※bsp/include/arch/boardに移動した状態

$ ../../../../tools/mkromfs.sh ../../../../

nsh_romfsimg.hができます。

 

sdkフォルダに戻って、ビルドします。

cd ../../../..
make cleankenel
make clean
make buildkernel
make

 

ブートローダーの書き込み

ブートローダをwindowsでダウンロードします。

https://developer.sony.com/file/download/download-spresense-firmware-v1-2-000

spresense-binaries-v1.2.0.zipを、

/mnt/c/SPRESENSE/にコピーします。

 

./tools/flash.sh -e /mnt/c/SPRESENSE/spresense-binaries-v1.2.0.zip


presense-binaries-v1.2.0.zipを解凍し、 gnssfw.espk loader.espkをsdk/tools/windowsにコピーしておく。

 

$cd tools/windows/
cmd.exe
(wineows)$ flash_writer.exe -s -c COM13 -d -b 115200 -n gnssfw.espk loader.espk

 

カーネル・SDKを書き込み

cd /mnt/c/SPRESENSE\spresense\sdk 

cmd.exe

C:\SPRESENSE\spresense\sdk >
.\tools\windows\flash_writer.exe -s -c COM13 -d -b 115200 -n nuttx.spk

書き込み終了したら、exitでubuntuに戻る。

 

TeraTermでシリアルポートにつなぐ。

#SPRESENSEのターミナルにつなげる
sudo screen /dev/ttyS13 115200 -fn

 

I2C Toolの使い方

busのdump

nsh> i2c dev -b0 0 7f

 

readの例

CCS811をつなぎました。

nsh> i2c get -b 0 -a 5b -w 8 -r 20
nsh: i2c: too many arguments
READ Bus: 0 Addr: 5b Subaddr: 20 Value: 81

 

nsh> i2c get -b 0 -a 5b -w 8 -r 21
nsh: i2c: too many arguments
READ Bus: 0 Addr: 5b Subaddr: 21 Value: 12

 

OpenCV4.0+VC++2017

プロジェクトに追加

opencv_ffmpeg400_64.dll
opencv_world400d.dll
opencv_world400d.lib

「 プロパティ>構成プロパティ>リンカ >全般>追加のライブラリディレクトリ」に上記フォルダを追加

「 プロパティ>構成プロパティ>リンカ >入力>追加の依存ファイル」に下記追加

opencv_world400d.lib

「 プロパティ>構成プロパティ>c/c++ >追加のインクルードディレクトリル」に下記追加

D:\opencv\opencv\build\include

imreadで画像を読み込んだ例

cv::Mat src = imread("d:/card.jpg");
if (src.empty()) {
    std::cout << "読み込みエラー" << std::endl;
    return -1;
}

※windowsでパスはスラッシュで分ける。

ソースコードからビルド

  • Gitからソース取得
  • CMakeでconfigure( BUILD_TBBをチェック )

※4.0では、opencv_samplecreates, opencv_traincascadeがCmakelistでコメントアウトされている。(現在C->C++へメンテ中)

ツールは、3.4のプロジェクトをダウンロードして別途コンパイルする必要あり。

【UE4】upgrade project to ver.4.18 upper.

UE4で、projectを4.18より上のバージョンにアップグレードしたいときに、エラーでアップグレードできない。

下記のSourceフォルダの内容が、変わっているので変更する必要があります。

(Proj)\Source\(Proj)\(Proj).Build.cs
(Proj)\Source\(Proj).Target.cs
(Proj)\Source\((Proj)Editor.Target.cs

https://answers.unrealengine.com/questions/718575/error-when-updating-to-418-generating-visual-studi.html

【Let’s Encrypt】Action required: Let’s Encrypt certificate renewals

Action required: Let’s Encrypt certificate renewals

TLS-SNI-01 validation is reaching end-of-life. It will stop working
temporarily on February 13th, 2019, and permanently on March 13th, 2019.
Any certificates issued before then will continue to work for 90 days
after their issuance date.

 

https://community.letsencrypt.org/t/how-to-stop-using-tls-sni-01-with-certbot/83210

【UE4】スタジオ照明

スタジオ照明

 

参考:

http://photowork.jp/christinayan01/architectural/archives/3504

 

・レベル

平面で壁を作る。マテリアルは、マットなもの。

 

・リフレクター

板にスポットライトを当てて間接光を作る。

 

・環境

ビジュアルエフェクト>スフィア反射マップ

シーンに1つと、オブジェクトの近くに一つおく。

ボリューム>ライトマスImportanceボリューム

新全体を囲み、ワールドセッティング>Lightmassで設定。

 

 

照明の位置によって影も変わるので注意!

 

 

【UE4】マテリアルを作成する

Material作成

・新規作成>マテリアル

・ベースカラーにConstant4Vector接続

・ラフネスにConstant接続

 

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-09-30-18-09-05

・Constant4Vectorを右クリックし「パラメーターへupgarade」する。

Parameter Name(baseColor)をつける。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-09-30-18-17-54

 

クリックした時にマテリアルを変更する。

【UE4】空を設定する(天球・大気フォグ)

・レベルBPに下記追加。

ライト > ディレクショナルライト

ビジュアルエフェクト > 大気フォグ(AtmosphericFog)

エンジンコンテンツ > BP_Sky_Sphere

【UE4】夜空や青空も簡単に実現!BP_Sky_Sphereの使い方

http://api.unrealengine.com/JPN/Engine/Actors/FogEffects/AtmosphericFog/

 

・BP_SkySphere  詳細>Directional Light Actor >Directional Lightを設定。

 

現在時刻に空を合わせる

directional lightのrotationを時刻から一日360度へ変換する。

【UE4】Orthographic

Orthographic

【参考サイト】

2D スプライト

DPIスケーリング
http://api.unrealengine.com/JPN/Engine/UMG/UserGuide/DPIScaling/index.html

player > add component >camera

camera >詳細>camera settings

Projecttion Mode — Orthographic
Orthowidth — 1280 (解像度)
Aspectratio > 1280/720

 

・設定を反映する

 

HDC1050

main.ino

[c]
#include "I2C.h"

I2C i2c;

byte buf[8];
float temp;

void setup()
{
//I2C
i2c.setup();

Serial.begin(115200);
while (!Serial) ;
}

void loop()
{
// Manifacture ID
i2c.read_reg(buf, 0x40, 0xfe, 2);
for(int i=0; i<2; i++){
Serial.print(buf[i] ,HEX);
}
Serial.println("");

// temperature
unsigned short _t;
i2c.read_reg(buf, 0x40, 0x00, 2);
_t = buf[0];
temp = 165.0 * ((_t << 8) | buf[1]) / 65536-40;
Serial.println(temp);

// humidity
i2c.read_reg(buf, 0x40, 0x02, 2);
_t = buf[0];
temp = 100.0 * ((_t << 8) | buf[1]) / 65536;
Serial.println(temp);

delay(1000);

}
[/c]

I2C.h
[c]
#ifndef I2C_H
#define I2C_H

#include "Wire.h"

class I2C {

public:
I2C();

int setup();
byte* I2C::read_reg(byte* buf, uint8_t addr,uint8_t reg, int num);

};
#endif
[/c]

I2C.cpp

[c]
#include "Arduino.h"
#include "I2C.h"

I2C::I2C() {

}

int I2C::setup() {

Wire.begin();

}

byte* I2C::read_reg(byte* buf, uint8_t addr,uint8_t reg, int num){

Wire.beginTransmission(addr);
Wire.write(reg);
Wire.endTransmission();

delay(50);

Wire.requestFrom(addr, num);
while (!Wire.available());

for (int i=0; i < num; i++) {
buf[i] = Wire.read();
}

return buf;
}
[/c]