- 投稿日:2019-12-11T23:15:14+09:00
dotfilesの育て方
dotfilesを育てよう!
dotfilesはエンジニア人生と切っても切れない関係です。
そんなdotfilesを理想の形に育てていく方法について紹介したいと思います。
dotfilesとは
.
(ドット)から始まるファイルの総称です。
Unix系OSでは.
から始まるファイルは隠しファイルとして扱われ、ls
コマンド等にはオプションを指定しないと表示されない仕組みになっています1。
古来より、この特徴を利用して、ホームディレクトリ直下に.
から始まる設定ファイルを配置するという文化があります。
例えば、筆者のホームディレクトリでls
を実行した場合、下記のような出力となります。
隠しファイルも表示する-a
オプションを加えて実行した結果は下記のようになります。
.
で始まるファイルが大量に表示されています。
要はこれらがdotfilesです。
Lv.1 Gitで管理しよう
まずは最初の一歩として、dotfilesをGit管理するところから始めましょう。
履歴管理やポータビリティの向上等様々な恩恵があります。(草を生やせたりも)dotfilesというリポジトリを作成し、
.bashrc
等の各種dotfilesをリポジトリ配下にコミットします。
ホームディレクトリにはln
コマンドを用いてシンボリックリンクで配置します。
シンボリックリンクを作成することで、リポジトリ内のファイルで一元管理できるため、更新や最新化が簡単にできるようになります。.bashrcのシンボリックリンク作成の例# リンクの作成 $ cd path/to/dotfiles $ ln -s .bashrc ~/.bashrc # リンクを確認 $ ls -l ~/.bashrc lrwxrwxrwx 1 reireias reireias 59 6月 8 22:30 /home/reireias/.bashrc -> /home/reireias/dev/src/github.com/reireias/dotfiles/.bashrcなお、GitHubでは実に多くのdotfilesリポジトリが公開されています。
https://github.com/topics/dotfilesちなみに、
AWS_ACCESS_KEY_ID
等の認証情報が公開されてしまわないように注意しましょうLv.2 deployを簡単にしよう
シンボリックリンクの作成は、その環境に対して1度しか実施しませんが、対象となるdotfileが増えれば、その作業も効率化したくなるのがエンジニアの性というものです。
簡単なshell scriptで実装することができます。
shell script以外で実装してもよいのですが、クリーンな環境にインストールする際に依存するパッケージが少ないほど楽なので、大抵の環境で利用できるshell scriptがよく採用されています。以下のスクリプトでは、dotfilesリポジトリ直下の
.
ではじまるファイル全てのシンボリックリンクをホームディレクトリに作成します。install.sh#!/bin/bash -e IGNORE_PATTERN="^\.(git|travis)" echo "Create dotfile links." for dotfile in .??*; do [[ $dotfile =~ $IGNORE_PATTERN ]] && continue ln -snfv "$(pwd)/$dotfile" "$HOME/$dotfile" done echo "Success"Lv.3 インストールスクリプトを書こう
dotfileによっては、パッケージやライブラリのインストールが必要となるものもあるでしょう。
例えば、
.tmux.conf
があるので、tmuxをインストールしたいpeco
コマンドを利用する自作関数が.bashrc
に定義してある- vimの特定のプラグインがpythonのライブラリに依存している
等があげられます。
はじめのうちはREADMEに依存パッケージの一覧を記載したりしているでしょう。
やっぱり自動化するのがエンジニアですね。例えばshell scriptであれば下記のようにシンプルにコマンドを列挙していくだけでも、立派なインストールスクリプトになります。
インストールスクリプトの一例#!/bin/bash brew install tmux peco neovim pip install neovimLv.4 インストールスクリプトの冪等性を意識しよう
冪等性を意識したインストールスクリプトにしてみましょう。
何度実行しても同じ結果になるようにすることで、新たにインストールスクリプトで行う処理を追加した場合でも既存の環境に対してインストールスクリプトを実行することが可能です。簡単な例を下記に示します。
# 冪等性なし mv config /etc/hoge/config echo "some setting" >> ~/.hogerc # 冪等性あり cp config /etc/hoge/config if ! grep -q "^some setting$" ~/.hogerc; then echo "some setting" >> ~/.hogerc fiインストールスクリプトが大きくなるほど、冪等性をshell scriptで担保するのは難しくなってくるので、AnsibleやChef等の構成管理ツールを使ってインストールスクリプトを記述するのも良い選択と言えるでしょう。
ただ、shell script以外のツールを利用し始めると、まっさらな環境にインストールする際の手順が多少増えてしまうので、注意が必要です。
Lv.5 CIをまわそう
猫も杓子もCIな世の中です。
dotfilesにおいてもCIを回しましょう。インストールするパッケージやライブラリのバージョンを指定せず、最新版をインストールするようなスクリプトの場合、非互換な更新によりインストールスクリプトが失敗するようになることもあるでしょう。
インストールスクリプトの実行や適切にファイルが配置されたか等を確認するのがよいでしょう。GitHub Actionsでのごくごくシンプルなサンプルコードを記載しておきます。
.github/workflows/main.yml--- name: main on: [push] jobs: main: runs-on: ubuntu-latest # or macOS-latest steps: - uses: actions/checkout@v1 - name: install dotfiles run: bash install.sh - name: test run: # some testsLv.6 ファイルを分割しよう
dotfilesが順調に成長していくと、
.bashrc
(.zshrc
)や.vimrc
なんかはかなり巨大になっていきます。
巨大な1ファイルは条件反射で悪とみなすのがエンジニアの常なので、なんとか分割したいものです。幸い、
.bashrc
や.vimrc
等は別ファイルを読み込む機能を搭載しているので、分割が容易です。例えば以下のように
.bashrc
から別ファイルを読み込むことができます。.bashrcsource ${HOME}/.bash/keybind.sh source ${HOME}/.bash/alias.shLv.7 READMEを整備しよう
dotfilesは人に見られることでも成長します(?)
READMEを整備し、イケてるdotfilesリポジトリに仕立てましょう。個人的には以下が記載されていると、
パクリたく参考にしたくなります。
- 対象のエディタ、shell、ツール
- ターミナルのスクリーンショット
- コンセプト
- 依存するパッケージやライブラリ
番外編 様々な環境に対応しよう
LinuxとMac OSの両方を利用することのある
変態珍しい人は、両方の環境に対応した設定やインストールスクリプトを用意すると幸せになれるのではないでしょうか?
CIもマトリックスビルド等を活用し、LinuxとMac OSの両方の環境で実行するとよいでしょう。ちなみに、筆者は最近、AnsibleでLinuxのaptとMac OSのbrewをwhenによる分岐を利用せずに書く方法がなくて困っています。
さいごに
じゃあ、お前のdotfilesはどうなんだよ?と言われそうなので、いちおう掲載しておきます。
そんなに期待しないでくださいね。
- 投稿日:2019-12-11T22:59:05+09:00
Friendly ArmのZeroPiでsambaを使ってファイルサーバを立てる【購入品編】
初めに
Qiita初投稿です。
業務の中で説明能力の不足を感じ、とりあえずアウトプットの機会を増やそうというのが理由で始めました。
定期的に書きたいとこですが、三日坊主の可能性が高いです。気楽にいこうと思います。
あんまり長々せずに、細かく刻むスタイルにしようかと思いますので、
今回は部材の購入品編です。今後は
- 個人輸入編
- OSインストール編
- samba設定編
でしょうか。
今回の目的
10年前に初自作で組んだ初代メイン機のセカンドHDDにあるデータに、未だにアクセスする機会があります。
ただ、
- いまだにブートドライブがHDDで起動が遅い
- サーバとしてつけっぱにするには消費電力が気になる(intel i7 860)
- ミドルタワーが地味に邪魔
という課題があります。
よって、セカンドHDDを取り出してNAS化する、というのが今回の目的になります。
…というのは嘘で、「安くて面白そう」と、とりあえず買ったZeroPiの用途がたまたまここに落ち着いただけです。
購入品
ZeroPi
中国・シンセンのSBCメーカ、FriendlyElec社のボードになります。
https://www.friendlyarm.com/index.php?route=product/product&product_id=266
- 1GbpsのLANポート
- 小さい(40mm角)
- 安い (ボードのみで$12.99≒¥1,500)
- ケースも一緒に出てる、かつ安い ($3)
というのに惹かれて購入しました。
ただグラフィック出力がないので、linux、コマンドライン、sshなどのキーワードがわかる人でないと少しつらいかもしれません。続編で説明しようと思います。詳細は下記の記事をご覧ください。
https://gadgetrip.jp/2019/09/friendlyelec_zeropi/
私はこの記事を見て購入を決めました。周辺機器
ほかにamazonでちょこちょこ必要なものを買いました。
最近は良くわからないメーカありすぎ問題が起きていますので、
amazon発送・販売のものを選んでおけばいいのではと思います。
- MicroSD 32GB
- Ethernetケーブル Cat6 1m
- Microカードリーダ
あとは流用品として下記のものも使っています。
- 3.5inch HDD 3TB
- 3.5inch HDDケース USB2.0 外部電源つき
ZeroPi君のLANが100Mbpsですので、480MbpsのUSB2.0で十分です。
よく見たら1Gbpsやったあっれえ…というかそもそも1Gbpsでるから買ったんじゃなかったっけ…まあそのうち変えよう…所感
- NASとかファイルサーバとか表記の揺らぎが気になる
- 買うだけ買ってあまり使ってなかったrealforceのキーボードがやっぱ打ちやすい
- 書くの時間かかる
- 投稿日:2019-12-11T20:49:27+09:00
CentOSを使って画像から文字起こしするためにTess4J用にTesseractをコンパイルする
必要なもの
VirtualBox(やっぱり、javaって素晴らしい。)
CentOS6.3 ( iso ) のディスクイメージ (渋い)仮想環境
- RAM 8GB
- ストレージ 40GB
手順
VMをセッティング
最初に構築のTestをするか聞いてくるが、テストはスキップすること。なぜか次に進めなくなるので。
後は、そのまま進める。Desktopバージョンで、全部入りでインストールする。インターネットの設定
最初はnetが繋がらないので設定。
ターミナル起動して、スーパーユーザ切り替えsu -以下のファイルをviでいじる。(iで挿入モード、escでエスケープして、:wq!で上書き)
vi /etc/sysconfig/network-scripts/ifcfg-eth0ONBOOT=yes #noをyesに変更
サービスをリスタート。
service netowrk restartFireFoxが繋がるか確認して、つながればOK。
(ハードウェアによっては、ドライバーのインストール必要。)その他のアップデート
ターミナルを起動して、
スーパーユーザ切り替えsu -アップデート
yum updatejavaを1.8にアップグレード(develバージョンで)
# javacにもパス通るから。 yum install java-1.8.0-openjdk-develEclipse Neon
eclipse neonをインストール(これ以上だと描画系ライブラリでバージョンエラー)
https://www.eclipse.org/downloads/packages/release/neon/3Mavenプロジェクトで、tess4jを使ことを前提としています。
開発ツールをインストールして、tesseractをコンパイル
開発ツール(gccは4.7以上が必要)
# 開発ツール yum -y groupinstall "development tools" # 周辺ライブラリ yum -y install libpng-devel libtiff-devel libjpeg-devel # コンパイルに必要なツール yum -y install centos-release-scl # コンパイラー yum -y install devtoolset-7-gcc-c++インスコした環境を有効にする
これは環境設定ファイルに設定しない限り、毎回ターミナルで実行が必要。
source /opt/rh/devtoolset-7/enableコンパイルに必要なツールのインストール
cd /usr/src/ wget http://ftpmirror.gnu.org/autoconf-archive/autoconf-archive-2019.01.06.tar.xz tar xvvfJ autoconf-archive-2019.01.06.tar.xz cd autoconf-archive-2019.01.06/ ./configure --prefix=/usr make make installTesseractの画像処理プログラムをコンパイル、インストール。
cd /usr/src/ wget http://leptonica.org/source/leptonica-1.77.0.tar.gz tar xvvfz leptonica-1.77.0.tar.gz cd leptonica-1.77.0/ ./configure --prefix=/usr/local/ make make installTesseractをコンパイル、インストール
今回は4.1.1-rc2
cd /usr/src/ wget https://github.com/tesseract-ocr/tesseract/archive/4.1.1-rc2.tar.gz tar xvvfz 4.1.1-rc2.tar.gz # なぜかtesseract名が抜けてる笑。このバージョンだけ。 cd tesseract-4.1.1-rc2 export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./autogen.sh ./configure --prefix=/usr/local/ --with-extra-libraries=/usr/local/lib/ --disable-openmp make install無事に終わったら、/usr/local/lib/に全部できているので、
「linux-x86-64」フォルダを好きな場所に作り、
この中にコピー。
cp file file... dirこれをeclipseのtesseractを使うプロジェクトのsrc/main/resourcesフォルダ直下にコピー
Eclipseをターミナルから起動する
まず、なんだかlocaleを設定する。(https://github.com/nguyenq/tess4j/issues/105)
export LC_ALL=Cこの状態で、eclipseの起動ファイルパスをターミナルに打ち込んで、起動。
ソフトウェアのリリース
自分で作ったjavaプログラムをコンパイルできたら、
jarと、tessdataフォルダと、コンパイル済みの「linux-x86-64」フォルダを同梱する。同様の環境でターミナルでテストするときは、
export LC_ALL=Cしてから、
コマンド。以上。
はまったところ
・コンパイル時、openmpのリンカーエラーを避けるために、オプションを追加する。(https://github.com/tesseract-ocr/tesseract/issues/2323)
・linux-x86-64フォルダを作り、中にコンパイル済みのファイルを全部入れて、これをプロジェクトフォルダ直下ではなく、リソースフォルダにコピーしないとだめ。
・(上記の方法だと)tesseractライブラリをコンパイルするときは毎回ターミナルで「source /opt/rh/devtoolset-7/enable」が必要
・localeコマンドで「export LC_ALL=C」(※設定ファイルに記録すればいいんですが)してから、そのままターミナルでeclipse起動。Reference
- https://www.cnblogs.com/zlAurora/p/9266039.html
- http://badbivouac.blog.fc2.com/blog-entry-12.html
- http://otiai10.hatenablog.com/entry/2016/11/07/063317
- https://www.tekovic.com/installing-tesseract-ocr-40-on-centos-6
Visionary Imaging Services, Inc.
Tatsuaki Kobayashi
- 投稿日:2019-12-11T19:12:08+09:00
Docker "Cannot connect to the Docker daemon. Is the docker daemon running on this host?"
docker ps
docker info
何を打ってもこれがかえってくる・・・ぐぐろう
結構あるあるなエラー文なのでしょうか、たくさん解決方法が出てきますよね
ちなみに
systemctl status docker
でDockerが起動していることは確認済み代表的な解決策は以下でした
- rootで実行 or dockergroupを作成しユーザーを追加
- OS再起動
- Docker入れ直しそもそもrootで実行しているし、OS再起動も効果なし
諸事情によりDockerの入れ直しはできないはて・・・
この前、どんな操作したっけ・・・
そう、記憶を辿ると、
/etc/sysconfig/docker
を編集していました
それを反映させるためにsystemctl restart docker
を行ったら先ほどの状態になったのです
ということは変更内容が何か悪さをしているんだなそういえば、APIを受け付けるDockerソケットを設定したのでした
/etc/sysconfig/dockerOPTIONS='--selinux-enabled -H tcp://0.0.0.0:4242 --log-driver=journald'ソケットを設定した後は、オプションでdaemonと接続するソケットを指定してdockerコマンドを実行しないと思うように動作してくれないようです
http://docs.docker.jp/v1.11/engine/reference/commandline/cli.htmlちゃんと指定してあげると・・・
[root@docker ~]# docker -H=tcp://127.0.0.1:4242 ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES解決〜〜!
- 投稿日:2019-12-11T14:18:14+09:00
SSH接続時、初回確認メッセージを出さないようにするAnsibleロール
このエントリは Ansible 3 Advent Calendar 2019の11日目の投稿です。
ちょうど空いていたので、書いてみました。この記事の内容
- SSH初回接続時の確認メッセージを、出さないようにAnsibleで設定する
前提
- 特定のホストへのSSH接続時のみ、確認メッセージを出さないようにしたい
- ホストA、ホストBがあると仮定し、A -> BへSSH接続する
- Ansibleを実行するクライアントは、A、BどちらへもSSH接続できる前提
- StrictHostKeyCheckingの設定はいじらない
実装方法
- Aのknown_hostsにBの公開鍵情報を直接記載する
- Ansibleのknown_hostsモジュールを使う
コード
main.yml# vars: # - ssh_host_and_user: # - from: # user: vagrant # host: A # to: # user: root # host: B # ホストBのrootユーザの公開鍵を、変数に格納する - name: Copy public key to variable slurp: src: "{{ ROOT_PUBLIC_KEY_HOST_B }}" with_items: "{{ ssh_host_and_user }}" register: to_host_public_key when: item.to.host == inventory_hostname # ホストAの,任意ユーザのホームディレクトリを取得する - name: Get home direcotry of from.user shell: | set -o pipefail egrep "^{{ item.from.user }}:" /etc/passwd | awk -F: '{ print $6 }' register: from_user_home_directory with_items: "{{ ssh_host_and_user }}" changed_when: false failed_when: from_user_home_directory.rc != 0 when: item.from.host == inventory_hostname # ホストBのrootユーザの公開鍵を、ホストAのknown_hostsへ書き込む - name: Add Host B infomation to known_hosts in Host A become: item.from.user known_hosts: key: "{{ item.to.host }} {{ hostvars[item.to.host].to_host_public_key.results[0].content | b64decode }}" name: "{{ item.to.host }}" path: "{{ hostvars[item.from.host].from_user_home_directory.results[my_idx].stdout }}/.ssh/known_hosts" state: present with_items: "{{ ssh_host_and_user }}" loop_control: index_var: my_idx when: item.from.host == inventory_hostname終わりに
known_hostsモジュールを使って、SSH初回確認メッセージを出さないように処理を書いてみました。
- 特定のホストへSSH接続するときのみ、確認メッセージを出さないようにできた
- 場合によっては、StrictHostKeyCheckingの設定をいじったほうが便利かもしれない
- 投稿日:2019-12-11T11:18:29+09:00
VBScript互換な自作言語 OpenVBS
OpenVBSとは?
これはモダンなBASICスクリプトエンジン、自作のJujubeコアを搭載し macOS, Linux, Windows に対応している。VBScriptと互換性があり、モダンな機能達が拡張されている。クラシカルなASPを実行するためのHTTPサーバも提供されており、macOSやLinux上でASPを実行可能である。
特徴
- VBScript互換
- 既存スクリプトは無編集で実行可能が目標
- JSONに対応
- 配列:"[]"や連想配列:"{}"を オブジェクト<->文字列 変換可能
- クロージャに対応
- クロージャを用いたオブジェクト表現可能
- 役割別"="演算子に対応
- "=" // 自動
- ":=" // 常に代入
- "==" // 常に比較
- 関数の引数省略に対応
- デフォルト引数指定により可変個引数可能
- Returnステートメントに対応
- return 123
- エラーハンドリングに対応
- "On Error GoTo Catch", "On Error Catch" の追加
- 三項演算に対応
- n = If i<100 Then i Else 100 End If
- 変数の宣言時初期化に対応
- Dim x = 0
- 64bitに対応
- 整数型は64bit、CLnglngの追加
- Optional Chaining に対応
- obj?.method()
- Nullish Coalescing に対応
- x = obj ?? errobj
- "==="演算子に対応
- if obj === "" then obj:=empty end if
- "set" や "call" ステートメントの不要
- あっても無視される
- ソースコードUTF8に対応
- 変数や関数やクラスなど、日本語命名可能
- Classic-ASPに対応
- HTTPサーバとASPレイヤを OpenASP.so にて提供
- so(dll)拡張に対応
- 多言語のライブラリも呼び出し可能
使い方
$ oscript sample.obs$ echo "wscript.echo 123" | ./oscriptダウンロード / ソースコード
OpenVBS - The Script Engine for the BASIC-2020 -
サンプル - 互換性
The_"hello_world"WScript.Echo "Hello World!"COMオブジェクトの作成obj = CreateObject("Scripting.Dictionary")VBSグローバル関数str = Trim(" A Script Engine ")ClassスタイルのオブジェクトClass Animal Dim wing Function fly() return wing End Function End Classサンプル - 拡張機能
Dim時_初期化Dim v = 0三項演算n = If i<100 Then i Else 100 End IfGOTOステートメント@infinite WScript.Echo "oh my." GoTo @infiniteGOTOステートメント(行番号)10 X = 1 20 WSCRIPT.ECHO X 30 X = X + 1 40 IF X<=10 THEN GOTO 20 END IFデフォルトパラメータFunction greet(name="Steve") WScript.Echo "Hello " & name & "!" End FunctionReturnステートメントFunction add(a, b) return a+b End Functionクロージャself.say = Function() WScript.Echo "My name is " & self.name End FunctionエラーハンドリングOn Error GoTo Catch a = 1 / 0 On Error Catch WScript.Echo "error occurred" On Error GoTo 0JSONオブジェクトobj = { "name" : "Steve", "age" : 24, }JSONオブジェクトを文字列にobj = { "name" : "Steve" } str = obj()文字列をJSONオブジェクトにobj = {} obj() = "{ ""name"" : ""Steve"" }"インクリメント/デクリメントa = ++i b = i++64bit整数n = 9223372036854775807=演算子の役割別x = 3 '// copy or compare in situation x := 3 '// always copy x == 3 '// always compareOptional_Chaining_'?.'obj?.method()Nullish_Coalescing_'??'x = obj ?? errobj===演算子if obj === "" then obj:=empty end ifクラシカルなASP<ul> <% i = 10 %> <% do while i-- %> <li><%= i %>: <%= now %></li> <% loop %> </ul>'set'や'call'はなくても良い(ある場合は無視される)v = Nothingso(dll)によってライブラリを作成可能lib = new MyLibライセンス
- 投稿日:2019-12-11T01:36:38+09:00
【postgresql】外部DBサーバにクライアントからSSH接続する
外部DBサーバにpostgresqlをインストールして、
クライアント側からSSH接続でDBサーバにアクセスするときに少々嵌ったのでメモ。・環境
- DBサーバOS : Red Hat 7.2.1-2 (Linux)
- クライアントOS : Windows 10
- DB接続ツール : A5M2
・構築
順番通りに実施していく。
DBサーバにpostgreSQLをインストール
LinuxにpostgresqlをインストールしてDBサーバにする
$ sudo yum install -y postgresql96 postgresql96-server postgresql96-libs postgresql96-contribDBの初期化
よくわからんがまあ色々ファイルが出来ているのでヨシ!
$ sudo /etc/init.d/postgresql96 initdbpostgreユーザーのパスワード変更
New password:とあるように、新しいパスワード入力して、Retype new password:でもう一度入力すればOK。
$ sudo passwd postgres Changing password for user postgres. New password: Retype new password: passwd: all authentication tokens updated successfully.postgresql.confとpg_hba.confの変更
initdbでDBを初期化した後、/var/lib/pgsql96/data/ ディレクトリに
postgresql.conf が生成されているので編集する。$ sudo vi /var/lib/pgsql96/data/postgresql.conf開いたら53行目付近まで移動
(:set numberを入力すると行番号表示できるので覚えておくと便利)postgresql.conf※一部抜粋 #------------------------------------------------------------------------------ # CONNECTIONS AND AUTHENTICATION #------------------------------------------------------------------------------ # - Connection Settings - #listen_addresses = 'localhost' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost'; use '*' for all # (change requires restart) #port = 5432 # (change requires restart) max_connections = 100 # (change requires restart)listen_addressesのコメントを外してクライアントのグローバルIPアドレスを追記する。
portのコメントもついでに外しておく。~編集後~
postgresql.conf※一部抜粋 #------------------------------------------------------------------------------ # CONNECTIONS AND AUTHENTICATION #------------------------------------------------------------------------------ # - Connection Settings - listen_addresses = 'localhost,グローバルIPアドレス' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost'; use '*' for all # (change requires restart) port = 5432 # (change requires restart) max_connections = 100 # (change requires restart)グローバルIPの調べ方はいくらでもあるが、
クライアントでwww.cman.jpとかにアクセスすれば一瞬で分かるのでオススメ。
https://www.cman.jp/network/support/go_access.cgi続いて同じディレクトリに pg_hba.conf が生成されているので編集する。
$ sudo vi /var/lib/pgsql96/data/pg_hba.confこれは一番下にあるので末尾に飛んでしまえばよい。以下の通りに変更する。
(Shift + g で飛べる)pg_hba.conf# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 trust host all all グローバルIPアドレス/32 trustここでADDRESS列にクライアント側のグローバルIPアドレスを設定、METHODをtrustに設定しないと
クライアントからDBサーバに接続できないので注意が必要。postgreSQL起動
$ /etc/init.d/postgresql96 startデータベース作成
ここでデータベースを作成しておかないと、
クライアントでDB接続用のソフトウェア(今回はA5M2)で接続するときに困ってしまう。
まずはpostgresユーザーにスイッチ$ sudo su - postgres Last login: Sun Dec 9 14:02:32 UTC 2019 on pts/0 -bash-4.2$psqlでDBにアクセス
-bash-4.2$ psql psql (9.6.11) Type "help" for help. postgres=#postgres=#の表示になったら文字通り空のデータベースを作成する。
postgres=# create database hogeDB;これでDBサーバ側の設定は終わり。
次はクライアント側の設定(主にA5M2)・接続
A5M2起動
データベースの追加と削除
追加→PostgreSQL(直接接続)
「基本」タブの設定はDBの設定内容を入力し、
「SSH2トンネル」タブにSSH接続に必要なユーザー名と秘密鍵を選択する。
あとは設定を保存して煮るなりなんなりすればおk
参考:
外部サーバーのDBにアクセスする(postgresql)
https://liginc.co.jp/programmer/archives/1598
- 投稿日:2019-12-11T00:48:53+09:00
Neovim の Terminal で画像表示や動画再生
はじめに
libsixel の登場以来、ターミナルに画像を表示する Sixel Graphics はかなり簡単に扱えるようになりました。
直接表示するだけではなく、DRCS と呼ばれる機能の Sixel 拡張が使用できる端末を用いる事により、その上で動作する Neovim が備えるターミナル上でも sixel での画像表示が可能です。
DRCS のSixel 拡張については @arakiken さんがこちらの記事で詳細に解説してくださっていますが、この記事上で少し触れられている、Neovim の DRCS-Sixel 対応を試してみようと思います。Neovim の "floating windows" 機能を使えばバッファ上の任意の場所にサイズ指定したウィンドウが開けて、なおかつその上でターミナルが動作するので、DRCS-Sixel 化により好きな場所で画像を表示したり動画を再生したりする事が可能になります。
環境について
- OS : Ubuntu 18.10
- ターミナルエミュレータ : mlterm version 3.8.6
RLogin や mlterm 等、DRCS-Sixel を使えるターミナルエミュレータを使用してください。
libsixel のインストール
今は大抵ディストリビューションのパッケージに含まれているのでサクッとインストールしましょう。
~% sudo apt-get install libsixel-bin libsixel-devlibvterm のインストール
neovim や vim の
:terminal
機能で使われるライブラリです。
「DRCSのSixel拡張について」で紹介されている libvterm はこちらのリポジトリから落としてきてビルド及びインストールが可能ですが、現状の Neovim では libvterm のバージョン0.1以上を要求する為、下記の手順でソースコードを入手・展開しましょう。~% wget http://www.leonerd.org.uk/code/libvterm/libvterm-0.1.2.tar.gz ~% tar xvzf libvterm-0.1.2.tar.gzDRCS-Sixel 対応の為の diff は下記です。
https://bitbucket.org/arakiken/libvterm/branch/sixel#diff
私は今回は手動で差分を適用してみました。ソース修正後ビルドしてインストールします。~% make ~% sudo make installNeovim のインストール
今の Neovim はビルドの過程で libvterm をダウンロードして来て自らに組み込む様な形でターミナルを実装する仕組みになっている様ですが、make の際に下記オプションを指定することでこのバンドル版ではなく、OS にインストール済みの libvterm を使用させる様にします。
~% sudo apt-get install ninja-build gettext libtool libtool-bin autoconf automake cmake g++ pkg-config unzip ~% git clone https://github.com/neovim/neovim.git ~% cd neovim ~% make DEPS_CMAKE_FLAGS='-DUSE_BUNDLED_LIBVTERM=OFF' ~% sudo make install以上で DRCS-Sixel 対応された Neovim のインストールは完了です。
画像表示してみる
画像表示には libsixel に含まれる
img2sixel
というコマンドが使えます。gif アニメもイケますが、中々綺麗に再生されなかったので、Sixel Graphicsを活用したアプリケーションの御紹介 の記事中にあるFFmpeg-sixel
を使い、mpeg4の動画を使う事にしました。floating windows を使用するにあたっては、下記の記事を参考にさせて頂きました。
【Neovim】半透明色のウィンドウが開けるようになりました
miku.mp4
という動画を用意した上で、Neovim の設定ファイルに下記を追記します。$HOME/.config/nvim/init.vimcommand! Miku call s:miku() function! s:miku() " 空のバッファを作る :let buf = nvim_create_buf(v:false, v:true) " そのバッファを使って floating windows を開く :call nvim_open_win(buf, v:true, {'relative': 'win', 'height': 30, 'width': 40, 'col': 44, 'row': 14}) " 透明にする :set winblend=100 " ターミナルを開いてコマンドを実行 :terminal /usr/local/bin/ffmpeg2 -i ~/Desktop/images/miku.mp4 -f sixel -loglevel quiet -pix_fmt rgb24 -s 240x400 - endfunctionこの状態で Neovimを起動し、
:miku
とコマンドを打つとこの様に動画が再生されます(すいません、gif動画が非常にモッサリしてますが実際はこんな感じでもっとスムーズに再生されます)。
この仕組みを使えば、以前 Twitter で流行った「一定時間サボるとメンターが出て来て激励するエディタ」に近いものも実現出来ちゃいますよね笑他にも色々面白い使い方があると思うので、是非試してみてください!