obsidianのインストール

概要

obsidianのインストールをMacで行ったので、備忘録として残します。

obsidian.md

obsidianとは

マークダウン形式でメモがとれるアプリケーション。
特徴として、vaultsと呼ばれる保存するフォルダ内にあるメモとメモの間でリンクすることができます。

リンク間の繋がりをグラフで表すこともできます。

プラグインCanvas形式で残すこともできます。

obsidian.md

保存するフォルダはローカルもしくは iCloudGoogle Drive のようなクラウド上でも無料で保存することができます。
そのため、iOS / Android アプリでも展開されています。

インストール

公式サイトでインストーラーをダウンロードします。
インストーラーをダウンロード後、起動してアプリケーションをインストールします。

PostgreSQLの検索結果から改行コードを置換したい

概要

PostgreSQLでSELECT文の結果をExcelのシートへ貼り付けているときに、SELECT文の結果に改行文字が含められているために行がずれることがあった。

SELECT
   *
FROM
  テーブル名

上記のSELECT文の結果

id 補足事項
1 〇〇さんに連携お願いします。\n緊急時には……
2 ××さんにから連絡があります。\n内容は……

Excelのシートへ貼り付けた結果

id 補足事項
1 〇〇さんに連携お願いします。
緊急時には……
2 ××さんにから連絡があります。
内容は……

解決策

www.postgresql.jp

PostgreSQLregexp_replace関数があるので、正規表現を使ってSELECT文の結果にある改行文字を置換する。

regexp_replace(項目名, 置換前, 置換後, フラグi or フラグg)

今回の場合
regexp_replace(項目名, '\r\n|\n|\r', '<改行>', 'g')

フラグについては下記の通り

フラグiは大文字小文字を区別したマッチングを指定する一方、フラグgは、最初にマッチしたもののみではなく、それぞれマッチした部分文字列の置換を指定します。

実行結果

SELECT
   regexp_replace(項目名, '\r\n|\n|\r', '<改行>', 'g')
FROM
  テーブル名

上記のSELECT文の結果

id 補足事項
1 〇〇さんに連携お願いします。<改行>緊急時には……
2 ××さんにから連絡があります。<改行>内容は……

Excelのシートへ貼り付けた結果

id 補足事項
1 〇〇さんに連携お願いします。<改行>緊急時には……
2 ××さんにから連絡があります。<改行>内容は……

Tomcat 8.0 における自動デプロイする方法について

概要

Tomcat 8.0 の起動時にWebアプリケーションをデプロイする方法について調査したのでまとめる

方法

tomcat.apache.org

Tomcatを起動時に複数のWebアプリケーションをデプロイさせるときにはconf/Catalina/localhost/の直下に/META-INF/context.xmlをコピーしてくる。

注意

<Context>は公式でserver.xmlに書くことは推奨していない。

Node.js の役割について

概要

以前から
jQuery とか聞いたことあるけど、Node.js と何が違うの?」
「Node.js とか Next.js の名前が似ているけど違いは?」
とずっと疑問に思っていたので、調査して自分なりにまとめてみました。

対象

  • jQuery、Node.js、Next.js の3種類の違いが分からない人

本題

jQuery

jQueryJavaScript のライブラリで概要に書かれている Node.js 、Next.js より歴史が長いです。
jQuery の特徴は

  1. DOM(Document Object Model)の操作の平易化

  2. クロスブラウザ互換を実現

jQuery が流行った背景として

  • 多機能なWebページを作成するために高度なDOMの操作が必要

  • ChromeFireFox などのブラウザごとの機能などの違いを考慮した開発

が必要になってきましたので、jQuery の特徴とマッチしていることが分かります。

現在でも使われていますが、大きな欠点としてグローバル汚染があるために廃れていきました。
余談ですが、jQuery でグローバル汚染を防ぐために下記の2点が考えられているそうです。

  • 変数の前にvarを付ける

  • 関数はなるべく即時関数を利用

kenju.gitbooks.io

baapuro.com

Node.js

Node.js はサーバサイドで JavaScript を実行できる環境です。
それまでの一般的なWeb開発ではフロントサイドは JavaScript 、サーバサイドは JavaPHP などのプログラム言語が採用されてきましたが、 Node.js によりサーバサイドでも採用されるようになりました。
大きな特徴としてnpm(Node Package Manager)によるパッケージシステムでパッケージの管理ができます。
パッケージの例として

  • Vue.js

  • Next.js

などがあります。

Next.js

先ほど少し出てきましたが、Next.js は React にサーバサイドの機能を持たせたフレームワークであり、Node.js でインストールできるパッケージの1つです。

まとめ

Gauge + Selenium + Python の環境構築

概要

Gaugeの環境構築を行ったので備忘録。

gauge.org

目標はGoogleを開いてキーワード検索までやってみる。

環境

インストール手順

Gaugeのインストール

docs.gauge.org

上記のGaugeのGet startedのInstalling GaugeでMacOSVS CodeにGaugeのプラグインをインストールする。

Python のパッケージとしてのGauge

上記の手順には記載されていないがGaugeのインストールした環境にあるrequirements.txt

pip install -r requirements.txt 

でパッケージをインストール。
ただし、requirements.txtの中身にはgetgaugeのみなので、

pip install getgauge

でもいい。

Seleniumのインストール

www.selenium.dev

上記の手順に則ってpip install seleniumseleniumパッケージをインストール。

chromedriver-binaryのインストール

seleniumのインストールが完了した後、ChromeでブラウザテストするためにPythonのパッケージchromedriver-binaryをインストール。
chromedriver-binaryのバージョンはインストールされているChromeのバージョンに対応しているので、
[設定] → [Chromeについて]
でバージョンを確認。 図の通り、バージョンは 107.0.5304.110 なのでメジャーバージョンが107.xx.xx.xx のchromedriver-binaryをインストール。

pip install chromedriver-binary==107.0.5304.62.0

動作確認

step_impl

step_implフォルダの直下のstep_impl.pyを開いて下記のコードを追記する。

パッケージ

from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from selenium.webdriver import ChromeOptions

ChromeOptions

options = ChromeOptions()
options.add_argument("--incognito")
driver = webdriver.Chrome(options=options)

関数

@step("グーグルのサイトを開く")
def open_google() -> None:
    driver.get('https://google.co.jp/')

@step("検索欄に<word>を入力")
def words_input(key_word: str) -> None:
    driver.find_element(By.NAME, "q").send_keys(key_word)

@step("Enterキーを入力")
def Enter_key_input() -> None:
    driver.find_element(By.NAME, "q").send_keys(Keys.ENTER)

specファイル

specsフォルダの直下にgoogle.specのファイルを作成して下記の内容で保存する。

# Google検索
Google で特定のワードの検索を行い結果を確認する
 
## 検索成功
Tags: successful

*グーグルのサイトを開く
*検索欄に"test"を入力
*Enterキーを入力

後はRun Specで実行して結果を確認する。

TypeError: Descriptors cannot not be created directly が出た

概要

Gaugeチュートリアルを進めていくと下記のようなエラーが出た。

TypeError: Descriptors cannot not be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
If you cannot immediately regenerate your protos, some other possible workarounds are:
1. Downgrade the protobuf package to 3.20.x or lower.
2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).
More information: https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-updates
Error occurred while waiting for runner process to finish.

環境

解決策

エラーが出ている通りに

pip install protobuf==3.19.0

protobufのパッケージをインストールすれば解決した。

参考

stackoverflow.com

「cannot load such file -- sassc」が出た

概要

Ruby on Rails 6 超入門のchapter 2を進めていると下記のエラーが出力。

環境

解決策

sassc-railsがインストールされていないことが原因らしくGemfileにある

# Use Sass to process CSS
# gem "sassc-rails"

gem "sassc-rails"コメントを外す。

# Use Sass to process CSS
gem "sassc-rails"

その後、bundle installを実行するとエラーが解決した。

余談

Gemfileとは

bundler.io

公式によるとgem installコマンドでインストールしたパッケージ情報などがここに記述される。

bundle installとは

bundler.io

こちらも公式によるとGemfileに書かれている内容をインストールするためのコマンド。

参考

qiita.com