(↑をクリックすると店舗に移動します)
「江端さんの本屋さん」始めました
Gmailのアドレス補完が鬱陶しいのでなんとかした件
https://contacts.google.com/
[連絡先] → 必要なものを除き全部削除
[その他の連絡先] → 基本、全削除(で良い。多分)
gmail アドレス 自動 補完 誤メール 防止
client.go:19:2: no required module provides package github.com/gorilla/websocket : go.mod file not found in current directory or any parent directory; see 'go he lp modules'
Windows10のgolangのバージョンを上げる為に、古いバージョンをアンインストールして最新版(go version go1.17 windows/amd64)をインストールしました。
ところが、
// client.go
// Copyright 2015 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build ignore
package main
import (
"flag"
"log"
"net/url"
"os"
"os/signal"
"time"
"github.com/gorilla/websocket" ← ココ
)
var addr = flag.String("addr", "localhost:8080", "http service address")
で、こんなエラーが出てきます。
$ go run client.go
client.go:19:2: no required module provides package github.com/gorilla/websocket
: go.mod file not found in current directory or any parent directory; see 'go he
lp modules'
で、まあ、これは、いつものアレだな、と思い、
$go get github.com/gorilla/websocket
を対応したのですが、どういう訳か、このエラーが取れません。
ebata@DESKTOP-P6KREM0 MINGW64 ~/dummy/go_echo
$ go mod init go_echo ← "go_echo"という名前にしたのは、ディレクトリ名に合わせただけ
go: creating new go.mod: module go_echo
go: to add module requirements and sums:
go mod tidy
で、
ebata@DESKTOP-P6KREM0 MINGW64 ~/dummy/go_echo
$ go get github.com/gorilla/websocket
go get: added github.com/gorilla/websocket v1.4.2
として、中を調べてみたら、こんな感じになっていました。
ebata@DESKTOP-P6KREM0 MINGW64 ~/dummy/go_echo
$ more go.mod
module go_echogo 1.17
require github.com/gorilla/websocket v1.4.2 // indirect
で、まあ、以下のように動作を確認できました。
ebata@DESKTOP-P6KREM0 MINGW64 ~/dummy/go_echo
$ go run client.go
connecting to ws://localhost:8080/echo
よく分かりませんが、どうやら動かし方が変ったようです ―― 面倒くさいですけどね
さて、加えて、Visual Studio Code で、Golangのプログラムのデバッグですが、こっちも上手く動かなくなっていて、困っています。
で、今あきらかなことは、(1)上記のgo.modを作ることと、(2)1つのディレクトリに中には1goファイルを1つだけ入れること、そして、(3)setting.jsonを作ることです。
ebata@DESKTOP-P6KREM0 MINGW64 ~/dummy/go_test
$ more setting.json
{
"go.gopath" : "C/go"
}
私の場合、C:\goにインストールしているので、上記のように記載しています。
postgreSQLからデータを読み出すGOプログラムサンプル
// position_log_sample.go
// position_logから座標情報を読み出すサンプル (要pq)
// go get github.com/lib/pq
package main
import (
"fmt"
"os"
"database/sql"
_ "github.com/lib/pq"
)
const port int = 8910 // DBコンテナが公開しているポート番号
func trackUser(db *sql.DB, userID int, dateIndex int) {
// SQLステートメント
sql := "SELECT id, to_char(time, 'HH24:MI:SS'), x, y, satisfaction FROM position_log "
sql += " WHERE date_index = $1 AND user_or_bus = 'USER' AND id = $2;"
prepared, err := db.Prepare(sql)
rows, err := prepared.Query(dateIndex, userID)
if err != nil {
fmt.Printf("error : %v", err)
os.Exit(1)
}
fmt.Printf("time, x, y, satisfaction (userID: %v)\n", userID)
for rows.Next() {
var id int
var timestr string
var x float64
var y float64
var satisfaction float64 // 満足度・現実装では、リクエスト発行直後に変化する
rows.Scan(&id, ×tr, &x, &y, &satisfaction)
fmt.Println("-", timestr, x, y, satisfaction)
}
}
func trackBus(db *sql.DB, busID int, dateIndex int) {
// SQLステートメント
sql := "SELECT id, to_char(time, 'HH24:MI:SS'), x, y FROM position_log "
sql += " WHERE date_index = $1 AND user_or_bus = 'BUS' AND id = $2;"
prepared, err := db.Prepare(sql)
rows, err := prepared.Query(dateIndex, busID)
if err != nil {
fmt.Printf("error : %v", err)
os.Exit(1)
}
fmt.Printf("time, x, y (busID: %v)\n", busID)
for rows.Next() {
var id int
var timestr string
var x float64
var y float64
// var satisfaction float64 バスの満足度はNULL
rows.Scan(&id, ×tr, &x, &y)
fmt.Println("-", timestr, x, y)
}
}
func main() {
// db: データベースに接続するためのハンドラ
var db *sql.DB
// Dbの初期化
dbParam := fmt.Sprintf("host=localhost port=%d user=postgres password=ca_sim dbname=ca_sim sslmode=disable", port)
db, err := sql.Open("postgres", dbParam)
if err != nil {
fmt.Println("cannot open db")
os.Exit(1)
}
dateIndex := 1 // 1日目
busID := 8 // バス番号
userID := 11 // ユーザ番号
trackBus(db, busID, dateIndex)
trackUser(db, userID, dateIndex)
}
【PostgreSQL】Windows に psql コマンドだけをインストールする手順
PostgreSQLのデータベースは、全部Dockerの中に閉じ込めることにしたので、バージョン管理とかを忘れることができてストレスフリーです。
でも、Windows10から、ちょいちょいっと、DBの中を見たい時にpsqlがないのは不便です。
ですので、ここを参照させていただきpsqlだけインストールしました。
ちなみに、どのシェルでも使えるように、私は、PATHはこっちに書き込みました。
以上
パワーポイントの音声録音のホワイトノイズが酷いので、Windows 10 の「ボイスレコーダー」を使い、音声の録音をった件
パワーポイントに比べると、ホワイトノイズは気にならない程度まで小さくなっていました。
あとは、パワポの音声としてリンクすれば、完成です。
Windows10 音声 録音 ホワイトノイズ ノイズ
SAIのブラシ濃度を使った場合の効果
SAIのブラシ濃度を変更した場合、こんな感じになります。
kobore.netやwp.kobore.netのバックアップ機を作成する
どなたか、良いアイデアを頂けませんか?
(1)最初にhttp://192.168.0.19(ローカル) でアクセスしたWebサーバのコンテンツに記載された"*.kobore.net"のIPアドレスは、無条件で"192.168.0.19"に変換されて、自分のサーバにループしてアクセスさせるようにする方法です。
(2)http://kobore.net でアクセスした場合は、従来通りの反応をする
「kobore.netや、wp.kobore.netが、事故でクラッシュした」時でも運用が続けられるように、先日、Raspberry Pi 4のセット一式を購入しました。
これです。
説明書が不親切なので、組立方の手順を簡単に残しておきます。
(1)基盤を一番下のプラ板に設置
(2)基盤に放熱版(3つを設置) # 虫めがねとピンセットがないと辛いかも
(3)ファンを設置する(方向は、#(多分)コードがプラ版につく方向だと思う
経験的に、ラズパイをサーバとして使うと、夏場に熱でダウンすることは知っていますので、今回は「冷却(といっても空冷だけど)」に投資しています。
私、通常はubuntuなのですが、今回は、SDカードにプレインストールされていたOSをそのまま使うことにしました(SDカード焼き込みとか、面倒なので)
ちなみに、HDMIのインターフェースが、Pi3から変っています(MiniHDMIになっている)ので、こんなのも追加で購入しました。
取り敢えず、部屋の中のWiFiに繋いで、apt-get install, update, upgradeを実施中です。
======
GUIから、SSHサーバの設定ができる
これだけ。これでTeraTerm IPアドレス(192.168.0.19)、ポート22 でアクセスできるようになりました。
さてWebサーバは、apache と nginx の2択がありますが、今回はnginxを使うことにしました。理由は、最近、これしか使っていないからです。その他、色々メリットもあるようです。
さて、次はngnixの構築だけど、ここで(私は)初めて、ufwなるもの設定する必要が出てきたので、メモを残しておきます(なんでもiptablesのコマンドライン設定ツールだとか)。
$ sudo apt-get install ufw
は、さくっとできたのですが、状態を調べたら
$ sudo ufw status
ERROR: Couldn't determine iptables version
てなものが出てきます。sudo rebootで、
$ sudo ufw status
Status: inactive
となりました。
では、全アクセスを禁止した上で、sshポート(22)だけをオープンしておきます。
$ sudo ufw default deny
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
$ sudo ufw allow 22
Rules updated
Rules updated (v6)
次に、ufwを有効化します。
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
再度状態を確認します
$sudo ufw status
Status: activeTo Action From
-- ------ ----
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
とりあえず、web用に80と443をオープンしておきます。
$ sudo ufw allow 80
Rule added
Rule added (v6)
$ sudo ufw allow 443
Rule added
Rule added (v6)
$ sudo ufw status
Status: activeTo Action From
-- ------ ----
22 ALLOW Anywhere
80 ALLOW Anywhere
443 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
80 (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
と、こんなところで準備完了かな?
ためしに、http://192.168.0.19をやってみたところ、成功しました。
https://192.168.0.19 は失敗しますね。
当然ですね。まだ、秘密鍵も仕込んでいませんし。まあ、とりあえずこちらは後回しにして、kobore.netからコンテンツのフルダウンロードをします。
sshを使ってシェルにログインした後(詳細は「ホームページのフルバックアップ」を参照
$cd /home/kobore
$cp -r www www2 // Don't touch "www" itself
$tar -czvf www2.tgz www2
$mv www2.tgz www.kobore.net.20210713.tgz
$rm -r www2 // Never delete directory "www"
でもって、
"www.kobore.net.20210713.tgz" をローカルにダウンロードする
そんでもって、これをさらに、teratermの「ファイル(F)→SSH SPC...」でもってラズパイに送り込みます。
ちなみにkoboreというアカントは予め作っておいて、そちらにSSHログインしておきます。
ちなみに、kobore.net → ローカルPCのダウンロードに4時間、さらにラズパイへの転送に4時間かかりました。
でもって、
tar zxvf www.kobore.net.20210731.tgz
で解凍します。
$mv www2 www
として、とりあえずコンテンツの配置は完了。さて、次は、ngnixに、この、/home/kobore/wwwをリンクさせます。
/etc/nginx/sites-available/default の、ここだけを変更
これで変更できて、http:/192.168.0.19 で表示を確認しましたが・・・
ここで「どエラい見落し」を見付けました。
ラズパイの中の、/home/kobore/wwwに記載された、"kobore.net"は、全部、本物のサーバに向かってしまい、ラズパイの中のコンテンツには向かない
考えてみれば当然です。これでは、ラズパイの中にindex.shtmlのリンクを張っただけのことで、サーバとしては全く役に立ちません。
江端家ネットワーク内に、DNSサーバを立てることもできるけど、そうしてしまったら、本家の、kobore.netにアクセスできなくなるし、"*.kobore.net"→"192.168.0.19"と強制的に書き換えすることもできるけど、かなり面倒な作業になるし、美しくない。
ラズパイの中のみで作業をする、という手もあるけど、江端家ネットワーク内のPCから、こちらのサーバも使いたい(特に、ローカルなWordPressに、守秘情報を保存したい)
DNSサーバに、"*.kobore.net"→"*.local.kobore.netとして、"192.168.0.19"と書き込むか? 先ずできるとは思えないし、モラルとしても論外だろうなぁ。
という訳で、
どなたか、良いアイデアを頂けませんか?
(1)最初にhttp://192.168.0.19(ローカル) でアクセスしたWebサーバのコンテンツに記載された"*.kobore.net"のIPアドレスは、無条件で"192.168.0.19"に変換されて、自分のサーバにループしてアクセスさせるようにする方法です。
(2)http://kobore.net でアクセスした場合は、従来通りの反応をする
ホスト名 http://raspberrypi/ でアクセスできることを確認した。ならば、ホスト名を変えみようか。"koborepi", "tech_koborepi", "wp_koborepi" とか複数の名前を設置できるか?試してみよう
(参考文献)
【ど忘れシリーズ】tarコマンドのzxvfのおさらい
UbuntuにNginxをインストールしてWebサーバー構築【マルチドメイン】