Log.log(work)

いろんな作業メモ

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で値からキーが取れない

www.atmarkit.co.jp

ハッシュテーブル内の値の取得は、上記と同様にインデクサ(VBではItemプロパティ)によりキーを指定して行う(逆に、値からキーを直接取得することはできない)。

という仕様らしい。

Javaと同じ感覚で作ってたので一部修正しなくては。
とほほ。

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であまり計算とかしないものなのかな。

【Oracle】ダンプのインポート

ダンプのインポートコマンドにセミコロンをつけてしまったのだが、
要らないので入れてはいけない。

ちなみにセミコロンを入れるとセミコロン付きのスキーマにインポートされてしまう。

IMPDP user/pass@xe DIRECTORY=DATA_PUMP_DIR DUMPFILE=DMP.dmp LOG=imp.log remap_schema=before:after;

⇒”after;”というスキーマにインポートされる

IMPDP user/pass@xe DIRECTORY=DATA_PUMP_DIR DUMPFILE=DMP.dmp LOG=imp.log remap_schema=before:after

⇒OKな例。”after”というスキーマにインポートされる

Eclipseの機嫌が悪い

Eclipseを起動したら

java was started by returned exit code=1
というエラーが出て、立ち上がらなくなってしまった。

※ちなみに開発環境の関係上、やむなく32bitのHeliosを使っている…

ググってみたら
Javaが(ネットから自動で)インストールされていないか
JREJDKバージョンが違うとか
・違うバージョンのJDKが入っていないか
・Path、JAVA_HOMEなどの環境変数が間違っている

などなど出てきたが、どれも当てはまらない。

先週までは元気に動いていたのに…。何故…。

と、うちの先輩社員に相談したところ、
色々調べて下さってどうにか動くようになった。
原因は分からんが、eclipse.iniの下記の記述を削ったらできた。

-vmargs
-Dosgi.requiredJavaVersion=1.5

しかし起動できたはいいが、Pleiadesが入っているのにすべて英語になっている。
もしかしたらPleiades内部の別のファイルを見ているのかもしれないが、とりあえず良しとするか…

 PythonからOracleに接続し、データを登録&更新する

昨日の続き。

INSERTは複数行の登録が一度にできるけど、UPDATEは複数回execute呼ばないといけないらしい。

# Insert default rows
rows = [(1, 'Bob', 35, 'I like dogs'), (2, 'Kim', 27, 'I like birds')]
cur.bindarraysize = 2
cur.setinputsizes(int, 20, int, 100)
cur.executemany("insert into cx_people(id, name, age, notes) values (:1, :2, :3, :4)", rows)
con.commit()


#Update
cur = con.cursor()
statement = 'update cx_pets set owner = :1 where owner = :2 and type = :3'
cur.execute(statement, (2, 1, 'dog'))
con.commit()

Update (crUd) using cx_Oracle | Learn Code Share