Microsoft Flow でCommon Data Serviceのレコードを一覧検索する際にGroupByしたいのだが
お作法が分からない。
そしてJoin的な書き方もしたいのだが
それもお作法が分からない。
Ionic(Angular)でandroid実機で動作確認
やりたいこと
位置情報を送るアプリをAndroidで動作させてみる。
環境
OS : Windows 8.1
Ionic CLI : 5.4.2
NodeJS : v10.15.3
npm : 4.0.5
さっそく開発
- nodistインストール
インストーラをダウンロード cordovaインストール
npm install -g cordova ionic
Android Studio / コマンドラインツールのダウンロード
ダウンロードページからそれぞれのZipファイルをダウンロード- Android studio(
android-studio-ide-181.5014246-windows.zip
)を適当なところに解凍。 例)d:\android
配下 - コマンドラインツール(
sdk-tools-windows-4333796.zip
)を適当なところに解凍。 例)d:\android\android-sdk
配下
- Android studio(
-
sdkmanager "emulator" "platform-tools" "platforms;android-27" "build-tools;27.0.3" "system-images;android-27;default;x86_64"
Windows Hypervisor Platform (WHPX) インストール
sdkmanager "extras;intel;Hardware_Accelerated_Execution_Manager"
新規プロジェクトつくる(位置情報を表示したいだけなのでblankにしておく。他にもtabsとかいろんなオプションがある)
ionic start myProject blank
cd myProjectGeolocationプラグインをインストール
ionic cordova plugin add cordova-plugin-geolocation
npm install @ionic-native/geolocation開発
unmet peer dependency ionic-native/coreという警告?でビルドが失敗する事象にでくわし、
なんだろうと思っていろいろ調べていたら思ったより時間がかかってしまった。
とりあえずimport { Geolocation } from '@ionic-native/geolocation/
ではなくimport { Geolocation } from '@ionic-native/geolocation/ngx
にしたら解消した。
・myProject\src\app\home\home.page.ts
import { Component } from '@angular/core'; import { Geolocation } from '@ionic-native/geolocation/ngx'; @Component({ selector: 'app-home', templateUrl: 'home.page.html', styleUrls: ['home.page.scss'], }) export class HomePage { geoLatitude: number; geoLongitude: number; geoAccuracy:number; constructor(private geolocation: Geolocation) {} getGeolocation(){ this.geolocation.getCurrentPosition().then((resp) => { this.geoLatitude = resp.coords.latitude; this.geoLongitude = resp.coords.longitude; this.geoAccuracy = resp.coords.accuracy; }).catch((error) => { alert('Error getting location'+ JSON.stringify(error)); }); } }
・ home.page.html
<ion-header> <ion-toolbar> <ion-title> Geolocation </ion-title> </ion-toolbar> </ion-header> <ion-content padding> <h1>Get Location</h1> <ion-button (click)="getGeolocation()"> Get Location </ion-button> <div *ngIf="geoLatitude"> <p>Latitude : {{geoLatitude}}</p> <p>Longitude : {{geoLongitude}}</p> <p>Accuracy : {{geoAccuracy}}</p> </div> </ion-content>
ブラウザで確認
サーバーを立ち上げて確認
> ionic serve
実機で確認
- ビルド
> ionic cordova build android
- ドライバーを用意する
公式サイトで usbドライバーをダウンロードし、下記の場所に解凍したファイルを置く。
Android SDKをインストールしたフォルダ\extras\google\usb_driver
「コントロールパネル」→「デバイスマネージャー」→ 「ほかのデバイス」を右クリック、でドライバーを更新する。
ドライバーは上記のフォルダを指定する。
- 証明書を作成する
下記のフォルダを証明書を作成してみる。
myProject\keys\android
keytool -genkey -v -keystore debug.keystore -alias [alias名] -storepass [storepass] -keypass [keypass] -keyalg RSA
※keytoolコマンドはJDKが通っていれば使えるハズ
- デバイスが認識したら実行
> adb devices
※adbコマンドはandroid-sdk\platform-tools がpathに入っていれば動作する。
リストに表示されたら、
> ionic cordova run android --livereload
※デバッグしたい場合はChromeブラウザで操作できる。Chromeに下記URLを打ち込み、デバイスのInspectリンクをクリックする。
chrome://inspect/#devices
参考サイト
Oracleにダンプを入れてもらおうと頼んだら思いのほか大変だったはなし。
後輩に、コマンドを調べながら新規ユーザー(スキーマ)を作成してそこにダンプを入れてみて、と依頼したらいろいろ引っかかったのでその時のメモ。
環境:Windows10、Oracle11g
接続識別子が認識できないといわれる。
環境変数「ORACLE_SID」が設定されていなかった。
というか「ORACLE_HOME」もなかったので設定することに。
ORACLE_HOMEの設定パスが分からない
ORACLEの本体がどこにあるか、について自分の記憶ベースで
「c:\app\ユーザー\product\オラクルのバージョン\dbhome_1」
にないですか?、と確認してもらったらなぜか無い。
どうやら場所が違って「c:\oracleexe」というフォルダに入っていた。
まあ、とりあえず現状優先で設定。
コマンド「impdp」を実行したが「ORA-39002: 操作が無効です」と言われる。
とりあえず、新規ユーザーは作成しているらしいが、
インポートしようとしているユーザと別のユーザでインポートしてたので、ユーザがちゃうんでない?と指摘。
(つまり権限がなかったもよう)
正しいユーザーでログインしようとしたら新規ユーザでログインができないことが発覚。
パスワードが間違っていたらしい。Create文を確認(コピペそのままで気が付かなかったらしい)。
CREATE USER [ユーザー名] IDENTIFIED BY [パスワード];
パスワードを確認して再度ログインができることを確認
まだ同じエラーが出る
ダンプがどうも認識できていないようだったので、指定したパスにちゃんとファイルがあるかどうか確認。
新規にディレクトリを作成したのでパスとファイルの確認したら合ってる…。
試しにデフォルトのパス「DATA_PUMP_DIR」でやってみたら、エラーが変わった。
create or replace directory [ディレクトリオブジェクト] AS [ディレクトリオブジェクトのパス];
expコマンドでエクスポートしたダンプはimpdpじゃなくてimpでインポートする
(内部の引継ぎミスで)エクスポートコマンドがexpdpじゃなくてexpだったらしく、impdpからimpへ書き換え。
バージョンが違うんでないの?というエラーがでた
思い込みなのかなんなのか、開発環境は11gだって聞いていたのにダンプは12cからエクスポートしてきたらしい。
ダンプはバージョンの小さい方へは入れられないので、Oracle12cを入れなおすか、ダンプ情報を書き換えるしかない。
実は勉強用に用意しているのでダンプの情報を書き換えよう、ということになり、フリーのバイナリエディタをダウンロードしてバージョンを12→11へ書き換えてどうにかインポート成功。
結果
環境変数と権限の確認は大事。
Oracleのバージョンが違うとかちょっと酷い目にあった…そんな基本的なところでミスするとは思わなかった。
node.jsのバージョン管理
以前メモってたような気がしていたが気のせいだったみたいなのでメモっておく。
Macの人はnodebrewを使うらしいが、開発マシンはWindowsなので Nodistかnパッケージをインストールする。
とりあえずnパッケージ入れてみようとしたら
> npm install -g n npm ERR! code EBADPLATFORM npm ERR! notsup Unsupported platform for n@3.0.2: wanted {"os":"!win32","arch":"any"} (current: {"os":"win32","arch":"x64"}) npm ERR! notsup Valid OS: !win32 npm ERR! notsup Valid Arch: any npm ERR! notsup Actual OS: win32 npm ERR! notsup Actual Arch: x64
プラットフォームが合わないと怒られる。
nパッケージは32bitまでしか対応してないということで、気を取り直してnodistをインストール。
Windowsのインストールがある。(2019/04/26時点でv0.9.1)
Releases · nullivex/nodist · GitHub
Pathの設定までやってくれるので、インストールが終わったら早速コマンドプロンプトを開く。
安定版がv10.15.3だったのでこれを追加。
> nodist + 10.15.3 >nodist (x64) 10.15.3 > 11.13.0 (global: 11.13.0)
バージョンを安定版に指定。
> nodist 10.15.3 >nodist (x64) > 10.15.3 (global: 10.15.3) 11.13.0
globalが変わっていればいOK.
※先にNode.jsを入れているとバージョンの切り替えがうまくいかないので、入れてしまったらアンインストールしておく。
vb.netメモ。
環境:
Visual Studio2015
LinqでGROUPBYしたい
指定期間で絞った中でGROUPBYでCOUNTのSUMを取りたい
TABLE=FOO
no | name | date_disp | count |
---|---|---|---|
01 | すずめ | 20180301 | 4 |
02 | めじろ | 20180302 | 2 |
03 | ひばり | 20180301 | 1 |
01 | すずめ | 20180302 | 1 |
01 | すずめ | 20180312 | 5 |
02 | めじろ | 20180315 | 2 |
01 | すずめ | 20180322 | 1 |
Dim list_DB_ALL As SortableBindingList(Of TBL_FOO) ’FOOテーブルの結果をセット Dim list_selection = list_DB_ALL _ .Where(Function(x) x.date_disp > '20180301' And x.date_disp < '20180320' _ .GroupBy(Function(x) New With {Key x.no, Key x.name }, Function(k, x) Return New TBL_FOO_SUM With { .no= k.no, .name= k.name, .SUM_COUNT= x.Sum(Function(e) e.count) } End Function).ToList
項目2つでソートしたい
項目AAでソートしたあとに項目BBでソートするときは「ThenBy」を使う。
降順にする場合はOrderByDescending / ThenByDescending を使う。
Dim list= list_DB_ALL. Where(Function(x) x.AA= aa). OrderBy(Function(x) x.AA). ThenBy(Function(s) s.BB).ToList
コンストラクタでコントロールに対するカーソルの設定
MouseEnter時は「↔(左右)」カーソルにして、離れたら(Leave)通常のカーソルにする。
AddHandler ラベル.MouseEnter, Sub(sender, e) Me.Cursor = Cursors.SizeWE AddHandler ラベル.MouseLeave, Sub(sender, e) Me.Cursor = Cursors.Default
小数点以下X桁を取得
ほんとはROUNDじゃなくてFLOOR(またはTRUNCATE)したかったけどできなかった。
Dim int_a As Interger = 30 Dim int_b As Interger = 31 ' 30/31の結果を小数点以下3桁まで取る '0.96774193 ≒ 0.968 Dim dec_diff As Decimal = CDec(Math.Round( int_a / int_b , 3, MidpointRounding.AwayFromZero))
MidpointRounding.AwayFromZero以外にMidpointRounding.ToEvenがある。
この2つの違いは丸める方法の違いによる。
AwayFromZeroは四捨五入、ToEvenはバンカー丸め(銀行型丸め/最近接偶数への丸め)。
アプリケーションパス名を取得
'自分自身の実行ファイルのパスを取得する Dim path As String path = System.Reflection.Assembly.GetExecutingAssembly.Location 'ディレクトリ名の取得 = System.IO.Path.GetDirectoryName path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly.Location)
HashTableで値からキーが取れない
vb.net でSQLから計算結果を取得しようとしたら小数点以下がすっぽり落ちてしまった
環境
OS:Windows8.1
Visual Studio 2015
Oracle11g
やりかったこと
例えばある期間内の項目の件数を分(60)で割った値を取得したかった。
例)hogeテーブル
Code | ActiveTime | CountItem |
---|---|---|
001 | 2019-02-01 12:00:00 | 1 |
001 | 2019-02-01 12:01:00 | 1 |
002 | 2019-02-01 12:05:00 | 1 |
003 | 2019-02-01 12:07:00 | 1 |
… | … | … |
・SQL
--やや適当 SELECT SUM(CountItem ) / 60 as CountItem FROM hoge WHERE ActiveTime BETWEEN '2019-02-01 12:00:00' AND '2019-02-01 12:10:00'
たとえばSQLを実行すると0.4
が取れるとした場合、
vb上ではなぜか0
になってしまう。
※vbで受け取っている型はDecimal型。
※独自FWなのでvbは省略しますが、OracleDataReaderを使っても同様に小数点以下が落ちる。
結局60で割る処理を、SQLで計算するのではなく、vb側で実施することにして回避。
vb.netに慣れていないのもあるが、調べてても同様の事象を書いているサイトがなかった。
SQLであまり計算とかしないものなのかな。