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であまり計算とかしないものなのかな。
【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が(ネットから自動で)インストールされていないか
・JREとJDKのバージョンが違うとか
・違うバージョンの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()