Vim+Chrome+PlantUML Viewer→UML Sequence Diagram
TL;DR
Vimでテキストファイルを作成/編集すると、Google Chromeブラウザ上でシーケンス図がリアルタイムに書ける/変更されるようにするための手順をまとめる。
メリット
- 作図ソフトウェア等に頼らなくてもよい
- 普段慣れているエディタだけですらすら書ける
- シーケンス図(に限らず、クラス図やアクティビティ図など)をテキストファイル形式でgit等でバージョン管理できる
環境
- macOS Catalina 10.15.7
- Vim 8.2
- Google Chrome 87.0.4280.88(Official Build)x86_64)
手順
必要なもの
Vim へ “plantuml-syntax” Pluginをインストール
本家:https://github.com/aklt/plantuml-syntax
- .vimrcとかに以下を追加(vim-plug方式の例)
call plug#begin('~/.vim/plugged') Plug 'aklt/plantuml-syntax' call plug#end()
- 保存後、以下のコマンドでインストール
:PlugInstall
au FileType plantuml command! OpenUml :!open "/Applications/Google Chrome.app" --args --disable-web-security --user-data-dir="dummy" file:///Users/liu/dev/plantuml/%
各オプションの説明
オプション | 意味 |
---|---|
plantuml | plantuml形式のファイルの場合(@startumlで始まる) |
OpenUml | vimにて:OpenUml コマンドで打つ場合 |
open "/Applications/Google Chrome.app" | MacでGoogle Chrome.app をダブルクリックして開く |
--args | おまじない。openコマンドに送っているオプションなので必ず必要 |
--disable-web-security | ChromeにCORS制限解除のオプション |
--user-data-dir="dummy" | ユーザデータフォルダを切り替えるオプションらしいが、--disable-web-security とセットで使わないと、CORS制限解除できなかったため、追加設定した。値がないと動かないため、ダミーを設定した |
file:///Users/liu/dev/plantuml/% | Chrome起動時に開くファイルURLを設定(任意。ない場合、Chromeから直接開けばいいので) |
これで、(自分の環境の場合)Vimの設定が整えた。
Chromeに "PlantUML Viewer" 拡張機能をインストール
本家:PlantUML Viewer - Chrome ウェブストア
インストール後、以下の設定にする
動作確認
@startuml participant User User -> A: DoWork activate A A -> B: << createRequest >> activate B B -> C: DoWork activate C C --> B: WorkDone destroy C B --> A: RequestCreated deactivate B A -> User: Done deactivate A @enduml
:OpenUml
注意点:Chromeブラウザを閉じた状態で実行する必要がある、さもなければ、CORS制限解除にならない。
Chromeが立ち上がり、以下の警告メッセージが出ていればCORS制限解除になっている証拠。
Chromeに実際に表示されているシーケンス図:
Vimでテキストファイルを編集すると、Chrome場ではリアルタイムに反映されることを確認済。
応用
Yahoo!ID連携(YConnect V2)のクライアントアプリの認可フローをVimでシーケンス図を書いてみた。
Yahoo! ID連携:Authorization Codeフロー - Yahoo!デベロッパーネットワーク
書いたシーケンス図(名称や番号は異なる)
まとめ
Vim+Chrome+PlantUML Viewer→UML Sequence Diagram を、環境整備から動作確認まで一通り終えたが、順調ではなくて、一番手こずったのは、ChromeのCORS 制限解除の設定あたりで、シーケンス図がうまく表示できない。javaやplantumlのソフトウェアをinstallしたり、試してNGしてはまたuninstallしたりしていた。
手軽にシーケンス図を作成できて、またテキストファイルなので、簡単にgit等でバージョン管理できる。現役エンジニア時代に出会っていればよかった。
以下のドキュメントが大変参考になり、ありがとうございます。
仮想通貨の理解
仮想通貨とは
特徴
仮想通貨と電子マネーの違い
- 発行元が異なる
- 対応する法律が違う
- 中央集権があるかないか
- 利用できる場所が違う
- 価格変動性が大きいかどうか
- ポイントが貯まるかどうか
仮想通貨の分類
BTCは仮想通貨の代表ともいわれる、主要な通貨。一方、アルトコインは、BTCを除くすべての仮想通貨を指し、それぞれが独自の特徴をもっている。 BTCがaltcoinに比較した時の特徴
- 時価総額トップ 誕生してからずっとトップの時価総額を維持しており、取引量も多いことから、他のアルトコインとは一線を画している。
- 決済利用がある 日本国内でも、大手家電量販店など、BTCを使って買い物ができる場所が増えてきてる。
- アルトコインを購入できる
BTC
国家という権威から離れた場所で、中央集権的な管理を受けない通貨がビットコインの目指した姿。
BTCの仕組・特徴
- 中央銀行が存在しない
- インターネット上に分散保存される取引台帳
- 発行枚数に上限がある
誕生した当時から、発行枚数が2,100万枚と決められている。 - 世界中にリアルタイムで送金できる
それまで数日かかっていた海外送金を、ほんの數十分のうちに完了させることが可能。
BTCの3つのメリット
- 個人間で直接送金ができる
理論的には10分、通常では長くとも40分程度あれば、相手がどこにいようと送金することが可能。 - 手数料が安い
- 世界中で両替せずに利用できる
BTCの3つのデメリット
- 価格の変動が激しい
- 即時決済が難しい
- 決済サービスが少ない
BTCの価格推移の歴史
初めて値が付いたのは、2009年10月に「New Liberty Standard」というサイトによって提示された、1BTC=約0.07円という価格(マイニングにかかる電気代から算出された)。2010年5月には、フロリダ州に住むプログラマーがピザ2枚を1万BTCで購入したのが初めての決済と言われた(当時1BTC=約0.2円)。
およそ9年間で約200万倍も価値が上がった、ROI(投資利益率)の高い金融商品と世界中の投資家から注目を集めるようになる。
BTCの価格上昇につながる5つのポイント
- ETFが承認されると価格が上昇する可能性が高まる
- 決済が拡大すれば価値が上がる
- ライトニングネットワークの実装で取引しやすくなる
- AIの活用でビットコイン予測がしやすくなる
- 法整備が整えば投資家が利用しやすくなる
BTCの半減期
半減期とは、BTCのマイニング報酬が半分になるタイミングのこと。
半減期に注目が集まる理由は、半減期を迎える仮想通貨は価格が上がる可能性が高いから。
半減期は、新規発行のペースを緩やかにするとともに、急激なインフレを防ぐ役割を担っている。
Bitcoin半減カウントダウン | Binance Academy
BTCのマイニング
マイニング=Mining=採掘=「挖矿」= 暗号を解読し新しいブロックを繋ぐ作業=取引記録の検証・確定作業
- ブロックをチェーンにつないだ人に対してBTCが発行され、報酬が与えられる。
- BTCが新たに発行されるのはマイニングに成功したときだけ。
- マイナー = Miner = 採掘者
マイニング作業は、検証行為を行うブロック内のデータと、取引検証完了済の証である1つ前のブロックのハッシュ値と呼ばれる値、さらに、正解を導くことになる数値(ノンス)の3つのデータをハッシュ関数に入れる。
マイニングによって確認される正しいハッシュ値は、必ず先頭に一定のゼロが並ぶ仕組み。
Nonceを探す方法をProof Of Work(プルーフ・オブ・ワーク)という。
altcoin
BTCを除くすべての仮想通貨のことをいい、Alternative Coin略称。オルトコインとも呼ばれ、BTCの代替コインという意味がある。
日本で買えるaltcoin
- イーサリアム(ETH)「以太坊」
- リップル(XRP)
- 国際送金に強み
- 大手企業と提携
- 発行上限がある
1000億枚と定められていて、すでに発行済。
- ビットコインキャッシュ(BCH)
- BTCから分岐
発行上限はBTCと同様2100千万枚 - ブロックサイズを拡大
8MBに拡大
- BTCから分岐
- ライトコイン(LTC)
- BTCよりもブロック生成時間が短い
BTCの時間の1/4 - 発行上限枚数がBTCの4倍
- BTCと同様4年に一度の半減期がある
- BTCよりもブロック生成時間が短い
- ネム(XEM)
- PoI(プルーフ・オブ・インポータンス)を採用
- コミュニティが活発
- リスク(LSK)
- サイドチェーン
- 開発言語がJavaScript
- ファクトム(FCT)
- 書面やデータの管理
- 様々な業界での活用
記録の証明に強みを持つFCTは、データの公平性を重視する様々な業界での活用が期待されている。
- イーサリアムクラシック(ETC)
- イーサリアム(ETH)から分岐
- 発行上限がある
- モナコイン(MONA)
- 世界で初めてSegwit(セグウィット)を採用
ほかの仮想通貨と比べて送金速度が速い(90秒程) - アトミックスワップの導入
- 世界で初めてSegwit(セグウィット)を採用
マイニングする3つの方法と仕組み
ビットコイン(BTC)マイニングの3つの方法と仕組みを解説 | Coincheck
- ソロマイニング
- プールマイニング
大人数で協力してマイニングを行う方法、報酬は参加人数で分けることになる。 - クラウドマイニング
マイニングを行う事業者に投資し、成果を分配してもらう。
ハッシュレート
マイニングをする際の1秒あたりの計算力、採掘速度のこと。単位は hash/s で、「毎秒 ◯ ハッシュの計算ができる」ことを意味する。
マイニングマシン
参考資料:
【最新版】誰でもノートパソコンで仮想通貨をマイニングできるHoneyMinerの使い方まとめ
lifeforearth.com
販売場 / 取引場
Coincheck
口座開設手続き
- Coincheckのアカウント登録
- 基本情報を入力する
- 本人確認書類の提出
- 顔と本人確認書類の撮影
購入手続き(BTCの例)
- 暗号資産取引所に登録する
- 銀行振込で日本円を入金する
- BTCを購入する
購入方法
- 販売所で購入
運営会社からユーザーが仮想通貨を購入・売却することができる。運営会社が保有するコインを、提示価格で購入したり売却したりする仕組。- メリット
常にコインを購入/売却する窓口が開かれている。 - デメリット
コインの価格に加え、スプレッド手数料が課される。
- メリット
- 取引所で購入
ユーザー同士が仮想通貨を売買する。- メリット
自分自身が購入/売却したい通貨の価格を決められる、販売所のようにスプレッド手数料が高く付くことはない。 - デメリット
販売所のように常に通貨が売られているわけではないため、取引相手を見つけるのに時間がかかる場合がある。
- メリット
売買手数料(Coincheckの場合)
送金・売買・入出金手数料 | 仮想通貨取引所のCoincheck(コインチェック)
- 日本円の入金手数料
銀振は入金手数料無料(振込手数料はユーザー負担) - 日本円の出金手数料
- 1回につき手数料は407円固定
- 出金上限は1回あたり5000万円
- 日本円の送金手数料
BTCの取引方法
ブロックチェーン(Blockchain)
ブロックチェーン技術及び関連技術(ブロックチェーン実装あり) - Qiita
仮想通貨で採用されている情報を記録・管理するための「分散型台帳技術」。
Blockchainのメリット
- 改ざんが非常に難しい
- 51%攻撃(https://coincheck.com/ja/article/218)
PoW(プルーフ・オブ・ワーク)を悪用して、全体の50%を超えてマイニングすると、不正な取引も承認することができてしまう。
51%攻撃の脅威が話題となったきっかけに、2013年12月の「Ghash.io」というマイニングプールがあります。当時このプールの計算能力が50%を超えそうになり、ビットコインが大暴落した。
- 51%攻撃(https://coincheck.com/ja/article/218)
- 管理運用コストが安い
- システム全体としての安定性が高い
BTCは2009年に取引が始められてから、これまで一度もシステムが停止したことはない。
Blockchainのデメリット
- 時間あたりの取引数が小さい
1つのブロックの記録容量が小さく、BTCのさばけるTX数は1秒間に7件ほどと言われている。
課題解決に、メインのBloackchainから分岐する「サイドチェーン」を作り、Bloackchainの外側で取引を繰り返して最終的な結果だけをメインチェーンに記録する「オフチェーン」の手法を使ったりして、取引速度を上げる対策が進められている。 - スケーラビリティ問題を抱えている
取引量が増えると、送金に時間がかかったり、送金要求が承認されなかったり、取引手数料が高騰するといったスケーラビリティ問題が発生する可能性がある。 - 関連法規の未整備
日本では、2017年4月1日に施行された「改正資金決済法」によって、仮想通貨として暗号資産が定義された。
Blockchainの将来性
- 未来的な取引法「スマートコントラクト」
Bloackchain上で契約を自動的に実行するしくみのこと。 - 金融(貯蓄、送金、証券取引、資金調達など)
- 認証(本人確認、著作権管理、公証など)
- 公共サービス(各種申告、納税、投票、医療など)
- エンターテイメント
- その他(データ管理、各種登記の自動化など)
エストニア共和国は、Blockchain技術を生した「電子政府」として有名。
注目サイト
勉強会資料
bashでtsvファイルを連想配列に入れる時にハマったこと
概要
bashでtvsファイルを読み込んで連想配列に入れたい処理があり、うまくできず2時間程度ハマりました。最終的にはうまくできましたが、結構典型的なことだと思いますので、まとめてみました。
tsvファイル
例示するため、tsvファイルは以下のものを使います。
JPY<tab>日本円 USD<tab>ドル CNY<tab>中国人民元 EUR<tab>ユーロ
このtsvファイルを詠込んで、次のような連想配列に入れる想定
currency( ["JPY"]="日本円" ["USD"]="ドル" ["CNY"]="中国人民元" ["EUR"]="ユーロ" )
shell script
#!/usr/bin/env bash TSV_FILE =./currency.tsv declare -A currency cat $TSV_FILE | while read code name; do echo [$code] [$name] currency+=([$code]=$name) done echo ${currency[@]}
実行結果
$ bash tsv2dict.sh [JPY] [日本円] [USD] [ドル] [CNY] [中国人民元] [EUR] [ユーロ]
あれれ、whileループ内でちゃんとtsvファイルから値を取得できたことを検証できているのに、ループを抜け後に、値を入れたはずのcurrency連想配列には何も入っていない、なぞで仕方ありません。
原因
whileが悪いではなく、cat $TSV_FILEの結果をパイプで while ループに渡してたのがいけませんでした。
bashでは、パイプでデータを while ループに渡した後の処理は、子プロセス(fork)として動くため、親プロセスの変数は受け取れて使えるが、子プロセス内に変更した値が、親プロセス内には反映されないことになるため、currency連想配列は空のママになっている訳です。
参考:シェルスクリプトのwhile文の中の変数を外で使う方法 - Qiita
解決方法
パイプで標準出力を渡すのではなく、ヒアドキュメントでwhileループにデータを渡せば、whileループ内の処理も親プロセル内になるため、currency変数の値は後から引き継がれる。
while read code name; do echo [$code] [$name] currency+=([$code]=$name) done << EOF $(cat $TSV_FILE) EOF echo ${currency[@]}
実行結果
$ bash tsv2dict.sh [JPY] [日本円] [USD] [ドル] [CNY] [中国人民元] [EUR] [ユーロ] ドル 日本円 中国人民元 ユーロ
連想配列から正しく出力できました。
参考:シェルスクリプトのwhile readループが悪いのか?回避策は? - Qiita
参考
イントラネットからの情報収集
ローカル情報収集
ペネトレーションテスト(侵入テスト)の本質は情報収集。 * アカウント情報検索 今のアカウントのロールと権限を知り、権限昇格する必要があるかを判断するため。
win:whoami、net user username linux:whoami、id、cat /etc/shadow、cat /etc/passwd
- NWとPortの情報検索
win:ipconfig、netstat -ano ARP表:arp -a ルーティングテーブル: route print dnsキャッシュ:ipconfig/displaydns linux:ifconfig、ip a、netstat -anplt ARPテーブル:arp -a / ルーティングテーブル:route -n ログインログを操作しログイン元IPを特定
- プロセス一覧 特にセキュリティ関連アプリケーションが動いているかどうを確認する。
win:tasklist linux: ps、 top
- システムとパッチの情報検索 OSバージョンやパッチの更新情報を検索し、権限昇格の補助となる。
win:systeminfo,OSやパッチ情報 wmic qfe get Caption, description, HotfixID, installedOn パッチ情報、説明へのリンク、パッチの説明、KB番号、更新情報等 wmic qfe list full 全情報 Linux: uname -a でカーネルバージョン、rpm -qa でインストールパッケージを検索
- エビデンス収集
Windows: パスワードHash、平文パスワード / ブラウザからパスワードを窃取 / サーバの平文パスワード etc. linux: history記録 / shadowファイルを総当り攻撃 / mimipenguin でパスワード窃取 / Strace でログインパスワードの窃取 etc.
macOS CatalinaにMongoDBをインストール
概要
MacにMongodbをインストールする。
手順
以下のコメントではだめだった
$ brew install mongodb ~~(省略)) Error: No available formula or cask with the name "mongodb". ==> Searching for a previously deleted formula (in the last month)... Error: No previously deleted formula found. ==> Searching for similarly named formulae... Error: No similarly named formulae found. ==> Searching taps... ==> Searching taps on GitHub... Error: No formulae found in taps.
mongodb-communityをインストール
この資料を参考にした
$ brew tap mongodb/brew Updating Homebrew... ==> Tapping mongodb/brew Cloning into '/usr/local/Homebrew/Library/Taps/mongodb/homebrew-brew'... remote: Enumerating objects: 97, done. remote: Counting objects: 100% (97/97), done. remote: Compressing objects: 100% (80/80), done. remote: Total 462 (delta 38), reused 42 (delta 17), pack-reused 365 Receiving objects: 100% (462/462), 101.47 KiB | 298.00 KiB/s, done. Resolving deltas: 100% (207/207), done. Tapped 11 formulae (39 files, 171.5KB). $ $ brew install mongodb-community Updating Homebrew... ==> Installing mongodb-community from mongodb/brew ==> Downloading https://fastdl.mongodb.org/tools/db/mongodb-database-tools-macos-x86_64-100.2.0.zip ######################################################################## 100.0% ==> Downloading https://fastdl.mongodb.org/osx/mongodb-macos-x86_64-4.4.1.tgz ######################################################################## 100.0% ==> Installing dependencies for mongodb/brew/mongodb-community: mongodb-database-tools ==> Installing mongodb/brew/mongodb-community dependency: mongodb-database-tools 🍺 /usr/local/Cellar/mongodb-database-tools/100.2.0: 13 files, 172.9MB, built in 4 seconds ==> Installing mongodb/brew/mongodb-community ==> Caveats To have launchd start mongodb/brew/mongodb-community now and restart at login: brew services start mongodb/brew/mongodb-community Or, if you don't want/need a background service you can just run: mongod --config /usr/local/etc/mongod.conf ==> Summary 🍺 /usr/local/Cellar/mongodb-community/4.4.1: 11 files, 136.8MB, built in 3 seconds ==> Caveats ==> mongodb-community To have launchd start mongodb/brew/mongodb-community now and restart at login: brew services start mongodb/brew/mongodb-community Or, if you don't want/need a background service you can just run: mongod --config /usr/local/etc/mongod.conf
以下のファイルが作成されるということだ。
設定ファイル(/usr/local/etc/mongod.conf)
ログディレクトリパス(/usr/local/var/log/mongodb)
データディレクトリパス(/usr/local/var/mongodb)
$ ls -ld /usr/local/etc/mongod.conf /usr/local/var/log/mongodb /usr/local/var/mongodb -rw-r--r-- 1 liu admin 161 10 25 11:52 /usr/local/etc/mongod.conf drwxr-xr-x 2 liu admin 64 10 25 11:52 /usr/local/var/log/mongodb drwxr-xr-x 2 liu admin 64 10 25 11:52 /usr/local/var/mongodb
設定ファイルの内容
systemLog: destination: file path: /usr/local/var/log/mongodb/mongo.log logAppend: true storage: dbPath: /usr/local/var/mongodb net: bindIp: 127.0.0.1
バージョンを確認
$ mongod --version db version v4.4.1 Build Info: { "version": "4.4.1", "gitVersion": "ad91a93a5a31e175f5cbf8c69561e788bbc55ce1", "modules": [], "allocator": "system", "environment": { "distarch": "x86_64", "target_arch": "x86_64" } }
2020/10月時点で最新の 4.4.1 である。
起動と停止
mongdbのバックグランドプロセスを自動起動させたい場合は
$ brew services start mongodb-community
自動起動を停止する場合は
$ brew services stop mongodb-community
手動で起動したい場合は、設定ファイルを指定して起動を行う(以下はバックグランドで起動させる場合)
$ mongod --config /usr/local/etc/mongod.conf & [1] 5301
手動起動したmongodbを停止する場合は、Ctrl + C で止めるか、バックグランド起動した場合は、$ fg
でフォアグランドにしてからCtrl + Cで止めればいい。
mongodbへ接続
mondodbを起動させた状態で接続するには
$ mongo
DB操作
DB確認
> show dbs admin 0.000GB config 0.000GB local 0.000GB
mongodbでのテーブルと行の概念
RDB | mongodb |
---|---|
テーブル | コレクション |
行 | ドキュメント |
DB作成
> use test_db switched to db test_db
test_db が存在するならそのdbに接続し、存在しなければ新しく作成する。
接続中のdbを表示するには
> db test_db
dbを作成しただけでは、show dbs
コマンドでは追加されない
>show dbs admin 0.000GB config 0.000GB local 0.000GB
追加するには、コレクションを作成する必要がある(下の例では vuln というコレクションを作成した)
db.createCollection('vuln') { "ok" : 1 } > show dbs admin 0.000GB config 0.000GB local 0.000GB test_db 0.000GB
ドキュメントの作成
mongodbでは、列名やデータ型などを先にきめてから行を追加することはない。
1件のドキュメントを作成するには inserOne コマンドを使う。
> db.vuln({ name: "Apache Struts 2の脆弱性", level: "S0", limit_date: "2020-12-31"}) { "acknowledged" : true, "insertedId" : ObjectId("5f954c22051b138e6af85465") }
insertOneでドキュメントを作成する時、もし vuln コレクションが存在しない場合、その時に一緒に作成してくれる(便利!)。
作成したドキュメントを確認するには
> db.vuln.find() { "_id" : ObjectId("5f954d22051b138e6af85466"), "name" : "Apache Struts 2の脆弱性", "level" : "S0", "limit_date" : "2020-12-31" }
もう1つを作成する
> db.vuln.insertOne({ name: "ATS DDoS脆弱性", level: "S1", limit_date: "2021-01-31"}) { "acknowledged" : true, "insertedId" : ObjectId("5f95571d051b138e6af85467") } > db.vuln.find() { "_id" : ObjectId("5f954d22051b138e6af85466"), "name" : "Apache Struts 2の脆弱性", "level" : "S0", "limit_date" : "2020-12-31" } { "_id" : ObjectId("5f95571d051b138e6af85467"), "name" : "ATS DDoS脆弱性", "level" : "S1", "limit_date" : "2021-01-31" }
find()で確認する内容をきれいにしたい場合は、pretty() を使う。
> db.vuln.find().pretty() { "_id" : ObjectId("5f954d22051b138e6af85466"), "name" : "Apache Struts 2の脆弱性", "level" : "S0", "limit_date" : "2020-12-31" } { "_id" : ObjectId("5f95571d051b138e6af85467"), "name" : "ATS DDoS脆弱性", "level" : "S1", "limit_date" : "2021-01-31" }
まさにjson形式。
ドキュメントを探す
2つの方法があり、1つはObjectIdを使うこと、もう1つはキーとその値を使って探すことができる。
> db.vuln.find(ObjectId("5f954d22051b138e6af85466")).pretty() { "_id" : ObjectId("5f954d22051b138e6af85466"), "name" : "Apache Struts 2の脆弱性", "level" : "S0", "limit_date" : "2020-12-31" } > db.vuln.find({"name": "Apache Struts 2の脆弱性"}).pretty() { "_id" : ObjectId("5f954d22051b138e6af85466"), "name" : "Apache Struts 2の脆弱性", "level" : "S0", "limit_date" : "2020-12-31" }
ドキュメントの更新
Apache Strusts 2の脆弱性のレベルをS1に更新したい、
> db.vuln.update({"name": "Apache Struts 2の脆弱性"}, {$set: {"level": "S1"}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.vuln.find().pretty() { "_id" : ObjectId("5f954d22051b138e6af85466"), "name" : "Apache Struts 2の脆弱性", "level" : "S1", "limit_date" : "2020-12-31" } { "_id" : ObjectId("5f95571d051b138e6af85467"), "name" : "ATS DDoS脆弱性", "level" : "S1", "limit_date" : "2021-01-31" } #### ドキュメントの削除 1件削除するにはdeleteOneを使う。
db.vuln.deleteOne({"name" : "ATS DDoS脆弱性"}) { "acknowledged" : true, "deletedCount" : 1 }
db.vuln.find().pretty() { "_id" : ObjectId("5f954d22051b138e6af85466"), "name" : "Apache Struts 2の脆弱性", "level" : "S1", "limit_date" : "2020-12-31" }
#### コレクション一覧
show collections vuln
#### コレクションの削除 drop()コマンドを使う。
db.vuln.drop() true
コレクションがなくなると、先に作成したtest_dbが表示されなくなった。
show dbs admin 0.000GB config 0.000GB local 0.000GB
#### DBの削除
use test_db switched to db test_db db.dropDatabase() { "dropped" : "test_db", "ok" : 1 }
### まとめ mongodbをMacにインストールし、一番初歩的な操作方法を体験した。使った感想としては、DBのスキーマに気にする必要がなく、json形式なドキュメントであれば、簡単に追加することができた。しかし、手打ちでDB操作コマンドを打つには、ちょっと慣れが必要と感じた。 大量な構造化されたjsonデータを追加し、表示させるような単純な動作(Webスクレイピング等)であれば、mongodbは手軽に利用できていいのではないかと思った。 ### 参考資料 - [https://reffect.co.jp/windows/mac-mongodb-install:title] - [https://qastack.jp/programming/58283257/mongodb-cant-find-data-directory-after-upgrading-to-mac-os-10-15-catalina:title]
Docker centos:centos8のロケール等を設定
概要
dockerでcentos:centos8のコンテナを作った時に、日本語ロケールになっていなかったので、設定した。
設定した手順をメモ書きする。
現在のロケール値を確認する
# locale locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL= # # locale -a | grep ja_JP #
日本語ロケールが定義されていない。
日本語の言語パックを入れる
glibc-locale-source と glibc-langpack-ja をインストール
# dnf install glibc-locale-source glibc-langpack-ja ~~(省略)~~ # # locale -a | grep ja_JP locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_COLLATE to default locale: No such file or directory ja_JP.eucjp ja_JP.utf8
ja_JP.eucjp と ja_JP.utf8 が入るようになったが、以前とエラーが出ている。
エラーの原因は、おそらくen_US.utf8 がインストールされていないことを推測。
以下のように対処する。
英語の言語パックを入れる
# LANG=C dnf install langpacks-en glibc-langpack-en Last metadata expiration check: 2:17:15 ago on Thu Oct 22 13:03:32 2020. Package langpacks-en-1.0-12.el8.noarch is already installed. Dependencies resolved. ======================================================================================== Package Architecture Version Repository Size ======================================================================================== Installing: glibc-langpack-en x86_64 2.28-101.el8 BaseOS 821 k Transaction Summary ======================================================================================== Install 1 Package Total download size: 821 k Installed size: 6.0 M Is this ok [y/N]: y Downloading Packages: glibc-langpack-en-2.28-101.el8.x86_64.rpm 3.6 MB/s | 821 kB 00:00 ---------------------------------------------------------------------------------------- Total 993 kB/s | 821 kB 00:00 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : glibc-langpack-en-2.28-101.el8.x86_64 1/1 Running scriptlet: glibc-langpack-en-2.28-101.el8.x86_64 1/1 Verifying : glibc-langpack-en-2.28-101.el8.x86_64 1/1 Installed: glibc-langpack-en-2.28-101.el8.x86_64 Complete!
現在のロケール値を再確認する
# locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=
これまで出ていたエラーがでなくなったが、英語ロケールになっている。
日本語ロケールに設定
# cat /etc/locale.conf LANG=ja_JP.UTF-8 # source /etc/locale.conf ← これが重要! # locale LANG=ja_JP.UTF-8 LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL= # # echo $LANG ja_JP.UTF-8 # date 2020年 10月 22日 木曜日 15:28:22 UTC
日本語環境にはなったが、TZが日本になっていない。
日本TZに設定する
# timedatectl set-timezone Asia/Tokyo # date 2020年 10月 23日 金曜日 00:31:30 JST
参考資料
Adobe CS6は最新macOSでは起動できない
Adobe Illustrator&Photoshop CS6は最新のmasOS Catalinaでは動かない。
原因はmasOS Catalinaからは32bitアプリケーションが全部使えなくなったからだ。
以下のサイトにはいい参考情報が書かれている(ありがとうございます)
ちょっと待ってよ、みれる方法があるみたい。
不勉強だが、初めて「Parallels Desktop」というmasOSの最強と言われている仮想マシンを知った。