uso

雑記いろいろ
★書いてある内容に保証は一切ありません。
 ご自身で判断をしてください。

dockerコマンド

2020-12-31 22:03:40 | work
◆Dockerコマンド

https://knowledge.sakura.ad.jp/13795/
ここで勉強

docker info
Dockerについての情報を見る

docker images
Dockerイメージの一覧を見る

docker pull <コンテナ名>
Dockerイメージを取得する

docker ps -a
Dockerのコンテナ(イメージをもとに起動させたコンテナ)一覧を見る
-aをつけないと停止中のコンテナが表示されない

docker rm <コンテナ名>
docker rm <CONTAINER ID>
コンテナを削除するがイメージはpullしたイメージは削除されない

docker rmi <Dockerイメージ名>
docker rmi <IMAGE ID>
イメージを削除する※rmではなく「rmi」

docker run -it -d -p <ポート>:<ポート> -v : --name <コンテナ名> <イメージ名>
コンテナの起動

docker stop <コンテナ名>
コンテナを停止

コンテナの

docker cp <コンテナ名>:<コンテナ内のコピー元ファイル> <ホスト側のコピー先ディレクトリ>
コンテナからファイルを取得する

docker exec -it <コンテナ名> bash
コマンドでコンテナにログインコンテナ

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

[SQL]SqlServerの文字列検索

2020-09-16 13:05:42 | work
■久しぶりにハマった

・SQLServerのデフォルト設定では文字列検索はけっこう曖昧
 スペースの全半角を区別しないとか、大文字小文字を区別しないとか
・この辺のサイトを参考にさせていただきました
 https://johobase.com/sqlserver-where-collate/
 https://www.projectgroup.info/tips/SQLServer/MSSQL_00000005.html
・MS公式、SQL照合順序(COLLATE)について
 https://docs.microsoft.com/ja-jp/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver15

・「文字列」の検索が曖昧なのは、SQLとしてはいいことらしい(今までそう言うケースに遭遇したことはないが・・・)
・なので文字列の重複チェックするときとか気をつけないと地雷を踏む

■チェックする方法とか対策

・DBデフォルトの照合順序を確認
 SELECT SERVERPROPERTY('collation')
・検索時にCOLLATEを変える場合
 select hoge1, hoge2 from hoge where hoge1 COLLATE Japanese_Bin like 'hogehoge  '
※「=」ではなく「LIKE」検索しないと末尾のスペースが考慮されない事象にも遭遇
 https://blog.engineer-memo.com/2014/12/20/sql-server-%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E5%8F%AF%E5%A4%89%E9%95%B7%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E6%9C%AB%E5%B0%BE%E3%81%AE%E7%A9%BA%E7%99%BD%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/

末尾スペース無視もSQL的にはOKらしいが、LIKEは大丈夫というのも違和感。。
もしかしたら、カラムの型によって末尾SPは挙動が違うかもしれない。今回遭遇したカラムは「nvarchar」。
型によってはスペース埋めすると言う話くらいは聞いたことある…。

SQLServer罠多すぎ…
自分が知らなすぎるから罠にはまるのか…
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

pythonの勉強

2019-11-01 14:44:14 | work
久しぶりに勉強したら、3.8になってたorz


Windowsの軽量版、こっそり使いたいけど勝手が違う。
python-3.8.0-embed-amd64.zip

ここのサイトを見ながら使えるように(pandas動く)したい
https://qiita.com/mm_sys/items/1fd3a50a930dac3db299


■インストール?

解凍、exeがあるとこでpython起動→インタラクティブ
終了quit()もexit()もエラー

exitする方法(まさかこんなことに困ると思わなかった)
https://takamaruo.hatenablog.com/entry/2018/10/09/232304

from sys import exit
exit()

■pip使えるようにする

python.exeと同じ場所にあるpython38._pthを編集
 #import site → コメント解除

get-pip.pyを取得しpython.exeと同じ場所に配置
https://bootstrap.pypa.io/get-pip.py

コマンドプロンプトを起動し、一時的に以下のパスを通す(こっそりだから)
path →確認
set path=%path%;python.exeがある場所\Scripts

python get-pip.py
→パスを通してないとWarning出る
 ※コマンドは必ずpython.exeがあるところですること

pipがインストールされたか見る
python -m pip list

Package Version
---------- -------
pip 19.3.1
setuptools 41.6.0
wheel 0.33.6

ここにpipが入った
python.exeのあるフォルダ\Scripts\pip.exe
pipでインストールを試す
pip install numpy

ここにnumpyが入る
python.exeがあるフォルダ\Lib\site-packages\numpy

本命のpandas入れる
pip install pandas

pipのインストール一覧を見る
pip list

Package Version
--------------- -------
numpy 1.17.3
pandas 0.25.2
pip 19.3.1
python-dateutil 2.8.0
pytz 2019.3
setuptools 41.6.0
six 1.12.0
wheel 0.33.6


こそこそやってるつもりだが、
C:\Users\ユーザー\AppData\Local\pipがあり、キャッシュフォルダとかできてしまう
むずかしい。。


■ばれないようにドロン
python.exeなどを入れたフォルダごと消す


ここからはpandasとエクセルの話


■エクセルをpandasで読み取る

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html

xlrdがいるのでインストール
pip install xlrd

エクセル準備
test.xlsx
hoge1 hoge2 hoge3
1 ほげ 2019-11-01
2 ふが NaT
3 NaN 2019-11-01

以下実行

>>> import pandas as pd
>>> df = pd.read_excel('test.xlsx')
>>> print(df)
hoge1 hoge2 hoge3
0 1 ほげ 2019-11-01
1 2 ふが NaT
2 3 NaN 2019-11-01

こんな感じ。

■pandasのDataFrameについてもう少し

カラムの一覧取得
>>> print(df.columns)
Index(['hoge1', 'hoge2', 'hoge3'], dtype='object')

カラムのデータ型を取得
>>> print(df.dtypes)
hoge1 int64
hoge2 object
hoge3 datetime64[ns]
dtype: object


型を指定してエクセルを読み込む場合
https://note.nkmk.me/python-numpy-dtype-astype/
>>> df2 = pd.read_excel('test.xlsx', dtype={'hoge1':object, 'hoge3':object})
>>> print(df2.dtypes)
hoge1 object
hoge2 object
hoge3 datetime64[ns]
dtype: object

一気に全部の型を指定(objectなら一気に行けそうだが、ほかの型は微妙)
>>> df3 = pd.read_excel('test.xlsx', dtype='object')
>>> print(df3.dtypes)
hoge1 object
hoge2 object
hoge3 datetime64[ns]
dtype: object


空セルのNaNを変換
>>> df.fillna('')
hoge1 hoge2 hoge3
0 1 ほげ 2019-11-01 00:00:00
1 2 ふが
2 3 2019-11-01 00:00:00
dtype: object

↑の場合、戻り値指定していないため、dfはNaNのまま!
df=df.fillna('')
こうするとdfが上書きされる

■脱線するがdfの比較をする方法
 これでエクセルファイルの比較をした

https://hack-le.com/pandas-2-true-false-10/

dfとdf2を比較する
>>> print(df)
hoge1 hoge2 hoge3
0 1 ほげ 2019-11-01
1 2 ふが NaT
2 3 NaN 2019-11-01
>>> print(df2)
hoge1 hoge2 hoge3
0 1 ほげ 2019-11-01
1 2 ふが NaT
2 3 NaN 2019-11-01
>>> print(df.dtypes)
hoge1 int64
hoge2 object
hoge3 datetime64[ns]
dtype: object
>>> print(df2.dtypes)
hoge1 object
hoge2 object
hoge3 datetime64[ns]
dtype: object

dfとdf2をキーhoge1でマージ(複数キー指定の場合はこうする→on=['key1', 'key2'])
>>> dfmg=pd.merge(df,df2, on='hoge1', how='inner')
>>> print(dfmg)
hoge1 hoge2_x hoge3_x hoge2_y hoge3_y
0 1 ほげ 2019-11-01 ほげ 2019-11-01
1 2 ふが NaT ふが NaT
2 3 NaN 2019-11-01 NaN 2019-11-01

列同士を比較し結果を入れる列を作成
>>> dfmg['hoge2_comp']=(dfmg['hoge2_x']==dfmg['hoge2_y'])
>>> dfmg['hoge3_comp']=(dfmg['hoge3_x']==dfmg['hoge3_y'])
>>> print(dfmg)
hoge1 hoge2_x hoge3_x hoge2_y hoge3_y hoge2_comp hoge3_comp
0 1 ほげ 2019-11-01 ほげ 2019-11-01 True True
1 2 ふが NaT ふが NaT True False
2 3 NaN 2019-11-01 NaN 2019-11-01 False True

hoge3が一致しない行だけ抽出し、一致しなかった値を出力
>>> r=dfmg['hoge3_comp']==False
>>> print(dfmg.loc[r,['hoge1','hoge3_x','hoge3_y']])
hoge1 hoge3_x hoge3_y
1 2 NaT NaT

NaTとかNaNは比較するとNGになる?ちゃんと消してから比較しないとダメ。
わざわざMergeしなくても比較できそうだが、
必ずしもデータが一致していないエクセルの比較だったのでMergeした


■python3.8について

新しい機能が増えててショック・・・

・セイウチ演算子
  変数への代入と変数の使用を同時に行える
  >>> a = 'hoge'
  >>> (n := len(array)) > 4
  False
  ※代入して比較する際にはセイウチ演算子の範囲をかっこで囲む必要あり

ほかにもあるがとりあえずまた今度。



コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

悩みいろいろ

2019-06-24 09:45:13 | work
◆プログラマーを30年間やってきた経験から学んだことまとめ - GIGAZINE
https://gigazine.net/news/20190621-things-i-learnt-the-hard-way/


気になったところ
◆ソフトウェア開発について
・コードを書く前に要件を決めること
・Gherkinは期待された動作を理解する良い助けになる
Gherkinはテストのための記法の1つで、「こういう状態のとき、こういう動作を行えば、こうなることが期待される」という形式で記述していくものです。ビアソンさんは「たとえ実際にテストでは使わなくとも、Gherkinを書くことでアプリがどういう動作を期待されているのか理解しやすくなる」と述べています。
・良い言語はテストを内蔵している
・真偽値を関数のパラメーターに利用してはいけない
関数を設計する際に、引数にフラグとして真偽値を設定したくなることがあります。……が、真偽値を利用するとその関数が利用されている部分のコードが「getData(dataId, true)」というようになり、読んだだけでは「true」が何を意味しているのか分かりません。ビアソンさんは真偽値を利用するのではなく、別の関数を作るようアドバイスしています。
・プロジェクトをデータタイプごとに整理する

◆チーム・仕事について
・コードレビューではスタイルではなく設計を確認するべき
・しょうもないミスで1時間以上無駄にした時は記録を残すこと

◆個人的なことについて
・ITの世界は狭い
IT業界は、何回か転職を重ねた後で元の同僚と同じ職場になるかもしれないというレベルには狭い世界だそうです。ふるまいには十分気を付けるべきとのこと。
・馬鹿げたやり方をブログに残すのは何もしないよりは良い
・……でもコメントはオフにしておいた方が良い
・「分からないこと」のリストを作成する


---

Gherukinについて追ってみた

https://blog.eiel.info/blog/2013/02/12/gherkin/
難しい・・・BNFなんて18年ぶりに聞いたぞ・・・

---
関数型プログラミング

ちょっとネットで調べたらイミフだった。
Python、JavaScript、Javaなどいろいろな言語で説明されているが、
ラムダが出てきて引っかかる。何を理解したら理解できるのか?

Haskell(ハスケル)が理解するのにいい言語らしい。
https://ja.wikipedia.org/wiki/Haskell


コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

[うんちく]作業ガイドライン

2018-11-11 21:57:31 | work

作業設計及び実施におけるガイドライン
a. 作業計画と手順を明確にする
b. 作業実施時のチェックポイントを設定する
c. 作業実施時の想定リスクへの対応策を用意する
d. 作業の目的を理解し確実に遂行する

 

作業計画と手順を明確にする
① 作業の目的が明確である
② 開始条件と終了条件が明確である
③ 作業時の前提・制約条件について明示されている
④ 利用する環境、処理、データ、その他のリソースが明確である
⑤ 操作の手順や流れが明示されている
⑥ 作業時の判断条件を明確にする
⑦ 個人の経験や知見への依存性を排除する
⑧ 共通の呼称・用語・表現を用いること
⑨ 作業者に予測や類推をさせてはならない

 

作業実施時のチェックポイントを設定する
① 全ての作業成果物に対して1つ以上チェックポイントを設定する
② 成果物に影響を及ぼす要素についても適切にチェック項目を設定する
• 対象要素の例:入力データ、作業、環境、処理結果、中間成果物等
③ 判定により保証される対象と範囲が明確である
④ 判定実施の前提条件が明確である
⑤ 判定条件や基準が明確である
⑥ 判定者が異なる場合でも同一の判定結果が得られること
⑦ 判定実施タイミングおよび実施方法が明確である
⑧ 一つの検査対象について単一の検証だけでなく複合的な検証を実施す
ることで検証の強度を高める
⑨ 検査の実施は可能な限り早いタイミングで実施する

 

作業時の想定リスクへの対応策を用意する
① 作業手順から煩雑さを排除し可能な限り簡潔にする
② 正確かつ確実に作業を遂行するための時間の確保
③ 作業における手順の抜け・漏れに対する考慮
④ 作業対象物の取り違え・選択誤りに対する考慮
⑤ 処理の実行誤り・指定値の誤りに対する考慮
⑥ エラー発生に備えた障害対応手順の整備
⑦ 環境系の障害に対する対応手順の整備
⑧ 想定される障害の影響範囲と原因の特定および回復手順の整備
⑨ 障害発生時の連絡経路の整備

 

作業の目的を理解し確実に遂行する
① 作業の目的と作業成果物がもたらす影響について理解すること
② 実施する作業が影響を及ぼす範囲について理解すること
③ 作業の実施に際して必要な許可を事前に得ること
④ 作業の結果に関する報告先が明確であること
⑤ 必要なリソースや手順が揃っていることを事前に確認する
⑥ 作業手順に関する不明点は事前に解消しておく
⑦ 作業内容を記録し状況の追跡・再現が可能な状態にしておく
⑧ 不明な点を残さない、曖昧な判断をしない
⑨ 作業時の状況判断については正当性を論証できること

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする