end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

go言語 オレオレ入門 - ほんの触りだけ

特徴 (自分の理解)

単一fileの実行可能file作成が容易

install

./configure; make ; make install でなく、downloadして解凍するだけ。

$ wget https://dl.google.com/go/go1.11.2.src.tar.gz
$ tar go1.11.2.src.tar.gz

$ sudo su -
$ cd /usr/local
$ wget https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz
$ tar -xvf go1.11.2.linux-amd64.tar.gz

$ vi /etc/profile

PATH=/usr/local/go/bin:$PATH  ## <-- L.53付近にadd
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

作業環境の準備 ( $GOHOME )

$GOHOME 以下にpackageのsrcや実行fileが集約されます。

$ vi ~/.bash_profile
export GOHOME=$HOME/go
#↑追加. package等のinstall先

emacsでのgo-mode

私の環境のemacs for winでは、package installできなかったので、 以下のように手作業でinstall

$ cd c:/emacs-24.5-IME-patched/share/emacs/site-lisp/
$ wget https://raw.githubusercontent.com/dominikh/go-mode.el/master/go-mode.el
$ vi ~/.emacs
(autoload 'go-mode "go-mode" nil t)
(add-to-list 'auto-mode-alist '("\\.go\\'" . go-mode))

packageの取得とbuild

以下の通り。

ただ、ローカル環境のbuildはどうするんでしょ? ちょっとしたcodeも GOHOME/src 以下に書くべきなんですかね?

# 「go get -d 」で $GOHOME/src以下に downloadのみ行います。
# 依存packageもdownloadする為、時間を要します。
# 「-d」がない場合、「go install」も行われます。
$ go get -d github.com/kahing/goofys

# 「go install」で実行fileが$GOHOME/src以下に作成されます。
$ go install github.com/kahing/goofys

# その他(参考)「go install」の場合、
# カレントディレクトリに作成されます。

php で、環境変数?(REMOTE_USER)やリクエストパラメータを取得後、ファイルを開いて内容を返す

次のような感じ?

<?php
$data_type = $_REQUEST['data_type'];
$user_id = $_SERVER['REMOTE_USER'];

$filename = '/home/end0tknr/dev/Test/'. $data_type .'/'. $user_id .'.txt';

if(! file_exists($filename) ) {
    header("HTTP/1.0 404 Not Found");
    return;
}

$filecontent = file_get_contents($filename);
header("Content-Type: text/plain; charset=utf-8");
echo($filecontent);

?>

fuse (fuse-utils) + goofys を srcから install し、aws s3をlocalにmount

2018/11/9 追記

ここでinstall手順をあれやこれや記載していますが http://bit.ly/goofys-latest から、 linuxバイナリ( https://github.com/kahing/goofys )も配布されています。

はじめに

s3fs は知っていましたが、goofys の選択肢もあり、それが s3fs より高速らしい。 (Goで書かれていて、POSIXに完全には準拠していないせいでしょうか?)

更にこれらは、fuseという仮想?ファイルシステムを作成できる機能を利用しているらしい。

と言う訳で、今回は fuse (libspectrum) や goofys を installしてみます。

http://fuse-emulator.sourceforge.net

https://github.com/kahing/goofys

ライブラリの依存関係

goofys や fuse-utils には、以下のような依存ライブラリ(パッケージ)がありますので、 順にinstallします。

goofys
└ fuse-utils
   └ fuse (libspectrum)
      ├ libgcrypt
      │  └ libgpg-error
      └ audiofile
          └ alsa-lib

fuse の依存libraryのinstall

libgcrypt が、libgpg-error を見つけてくれない為、 それぞれの configure時に --prefix や --with-libgpg-error-prefix を 指定しています。

これらの configure optionを付けない場合、 libgcryptのmake check時に、このエントリの下部にあるエラーが表示されました。

$ wget https://www.gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.32.tar.bz2
$ tar -xvf libgpg-error-1.32.tar.bz2
$ cd libgpg-error-1.32
$ ./configure --prefix=/usr/local/libgpg-error  #### ココ
$ make
$ make check
$ make install
$ sudo make install
$ wget https://www.gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.8.4.tar.bz2
$ tar -xvf libgcrypt-1.8.4.tar.bz2
$ cd libgcrypt-1.8.4
$ ./configure --with-libgpg-error-prefix=/usr/local/libgpg-error  #### ココ
$ make
$ make check
$ make install
$ sudo make install
$ ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.1.7.tar.bz2
$ tar -xvf alsa-lib-1.1.7.tar.bz2
$ cd alsa-lib-1.1.7
$ ./configure
$ make
$ make check
$ make install
$ sudo make install
# ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.1.7.tar.bz2
$ wget https://audiofile.68k.org/audiofile-0.3.6.tar.gz
$ tar -xvf audiofile-0.3.6.tar.gz
$ cd audiofile-0.3.6
$ ./configure
$ make
$ make check
$ make install
$ sudo make install

fuse (libspectrum)や fuse-utils の install

fusefuse-utilsのbuildの場合、 「use option -std=c99 or -std=gnu99 to compile your code」や 「No package 'libspectrum' found」とエラーになった為、 Makefileを編集したり、 LIBSPECTRUM_LIBS や LIBSPECTRUM_CFLAGS の環境変数を設定しています。

$ wget https://sourceforge.net/projects/fuse-emulator/files/libspectrum/1.4.4/libspectrum-1.4.4.tar.gz
$ tar -xvf libspectrum-1.4.4.tar.gz
$ cd libspectrum-1.4.4
$ ./configure --prefix=/usr/local/libspectrum
$ make
$ make check
 :
test/szx.c:135:7: error: ‘for’ loop initial declarations are only allowed in C99 mode
       for( size_t i = expected_length; i < total_length; i++ ) {
       ^
test/szx.c:135:7: note: use option -std=c99 or -std=gnu99 to compile your code
make[2]: *** [test/test_test-szx.o] Error 1
make[2]: Leaving directory `/home/end0tknr/tmp/libspectrum-1.4.4'
make[1]: *** [check-am] Error 2
make[1]: Leaving directory `/home/end0tknr/tmp/libspectrum-1.4.4'
make: *** [check] Error 2

$ vi Makefile
  old) CFLAGS = -g -O2 -Wall -Wwrite-strings
  new) CFLAGS = -g -O2 -Wall -Wwrite-strings -std=c99

$ make
$ make check
$ sudo make install
$ wget https://sourceforge.net/projects/fuse-emulator/files/fuse-utils/1.4.3/fuse-utils-1.4.3.tar.gz
$ tar -xvf fuse-utils-1.4.3.tar.gz
$ cd fuse-utils-1.4.3
$ ./configure
  :
checking pkg-config is at least version 0.9.0... yes
checking for LIBSPECTRUM... no
configure: error: Package requirements (libspectrum >= 1.4.3) were not met:

No package 'libspectrum' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables LIBSPECTRUM_CFLAGS
and LIBSPECTRUM_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.


$ export LIBSPECTRUM_LIBS=/usr/local/libspectrum/lib/libspectrum.so
$ export LIBSPECTRUM_CFLAGS=/usr/local/libspectrum

$ ./configure
$ make
$ make check
$ sudo make install

goofysのinstall

$ export GOPATH=/home/end0tknr/go
#### go get はプロンプトが返るまで、少々、時間を要します
$ go get github.com/kahing/goofys
$ go install github.com/kahing/goofys

goofysによるaws s3のmount

$ mkdir ~/tmp/mount_goofys
$ ~/go/bin/goofys --debug_fuse end0tknr-test-bucket ~/tmp/mount_goofys

参考 - libgcrypt における make check エラー

make[1]: Entering directory `/home/end0tknr/tmp/libgcrypt-1.8.4/tests'
make  check-TESTS
make[2]: Entering directory `/home/end0tknr/tmp/libgcrypt-1.8.4/tests'
./version: /lib64/libgpg-error.so.0: no version information available (required by ./version)
./version: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./version: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: version
./t-secmem: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./t-secmem: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: t-secmem
./mpitests: /lib64/libgpg-error.so.0: no version information available (required by ./mpitests)
./mpitests: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./mpitests: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: mpitests
./t-sexp: /lib64/libgpg-error.so.0: no version information available (required by ./t-sexp)
./t-sexp: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./t-sexp: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_lock_lock, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: t-sexp
./t-convert: /lib64/libgpg-error.so.0: no version information available (required by ./t-convert)
./t-convert: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./t-convert: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: t-convert
./t-mpi-bit: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./t-mpi-bit: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: t-mpi-bit
./t-mpi-point: /lib64/libgpg-error.so.0: no version information available (required by ./t-mpi-point)
./t-mpi-point: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./t-mpi-point: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: t-mpi-point
./curves: /lib64/libgpg-error.so.0: no version information available (required by ./curves)
./curves: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./curves: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: curves
./t-lock: /lib64/libgpg-error.so.0: no version information available (required by ./t-lock)
./t-lock: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./t-lock: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: t-lock
./prime: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./prime: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: prime
./basic: /lib64/libgpg-error.so.0: no version information available (required by ./basic)
./basic: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./basic: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: basic
./keygen: /lib64/libgpg-error.so.0: no version information available (required by ./keygen)
./keygen: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./keygen: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: keygen
./pubkey: /lib64/libgpg-error.so.0: no version information available (required by ./pubkey)
./pubkey: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./pubkey: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: pubkey
./hmac: /lib64/libgpg-error.so.0: no version information available (required by ./hmac)
./hmac: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./hmac: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: hmac
./hashtest: /lib64/libgpg-error.so.0: no version information available (required by ./hashtest)
./hashtest: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./hashtest: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: hashtest
./t-kdf: /lib64/libgpg-error.so.0: no version information available (required by ./t-kdf)
./t-kdf: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./t-kdf: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: t-kdf
./keygrip: /lib64/libgpg-error.so.0: no version information available (required by ./keygrip)
./keygrip: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./keygrip: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: keygrip
./fips186-dsa: /lib64/libgpg-error.so.0: no version information available (required by ./fips186-dsa)
./fips186-dsa: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./fips186-dsa: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: fips186-dsa
./aeswrap: /lib64/libgpg-error.so.0: no version information available (required by ./aeswrap)
./aeswrap: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./aeswrap: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: aeswrap
./pkcs1v2: /lib64/libgpg-error.so.0: no version information available (required by ./pkcs1v2)
./pkcs1v2: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./pkcs1v2: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: pkcs1v2
./random: /lib64/libgpg-error.so.0: no version information available (required by ./random)
./random: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./random: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: random
./dsa-rfc6979: /lib64/libgpg-error.so.0: no version information available (required by ./dsa-rfc6979)
./dsa-rfc6979: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./dsa-rfc6979: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: dsa-rfc6979
./t-ed25519: /lib64/libgpg-error.so.0: no version information available (required by ./t-ed25519)
./t-ed25519: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./t-ed25519: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: t-ed25519
./t-cv25519: /lib64/libgpg-error.so.0: no version information available (required by ./t-cv25519)
./t-cv25519: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./t-cv25519: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: t-cv25519
      now running 'basic' test with all hardware features disabled.
./basic: /lib64/libgpg-error.so.0: no version information available (required by ./basic)
./basic: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./basic: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: basic-disable-all-hwf
./benchmark: /lib64/libgpg-error.so.0: no version information available (required by ./benchmark)
./benchmark: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./benchmark: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: benchmark
./bench-slope: /lib64/libgpg-error.so.0: no version information available (required by ./bench-slope)
./bench-slope: /lib64/libgpg-error.so.0: no version information available (required by /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20)
./bench-slope: relocation error: /home/end0tknr/tmp/libgcrypt-1.8.4/src/.libs/libgcrypt.so.20: symbol gpgrt_get_syscall_clamp, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference
FAIL: bench-slope
SKIP: hashtest-256g
======================================
27 of 27 tests failed
(1 test was not run)
Please report to http://bugs.gnupg.org
======================================
make[2]: *** [check-TESTS] Error 1
make[2]: Leaving directory `/home/end0tknr/tmp/libgcrypt-1.8.4/tests'
make[1]: *** [check-am] Error 2
make[1]: Leaving directory `/home/end0tknr/tmp/libgcrypt-1.8.4/tests'
make: *** [check-recursive] Error 1
$ 

install mod_dosdetector to apache 2.4

https://github.com/stanaka/mod_dosdetector

参考にさせて頂きました → http://blog.prophet.jp/1175

$ wget https://github.com/stanaka/mod_dosdetector/archive/master.zip
$ unzip mod_dosdetector-master.zip
$ cd mod_dosdetector-master
$ vi Makefile
  old) APXS=/usr/sbin/apxs
  new) APXS=/home/end0tknr/local/apache24/bin/apxs

$ make install


$ vi /home/end0tknr/local/apache24/conf/httpd.conf

  LoadModule rewrite_module modules/mod_rewrite.so
  LoadModule dosdetector_module modules/mod_dosdetector.so

  <IfModule mod_dosdetector.c>
  DoSDetection on
  DoSPeriod 30
  DoSThreshold 30
  DoSHardThreshold 60
  DoSBanPeriod 60
  DoSTableSize 100
  DoSForwarded on
  DoSIgnoreContentType ^(image/|application/javascript|text/css)
  DoSIgnoreIpRange 10.82.96.129
  </IfModule>
  
  RewriteEngine On
  RewriteCond %{ENV:SuspectHardDoS} =1
  RewriteRule .*  - [R=503,L]
  ErrorDocument 503 "Server is busy."

厚生労働省の「こころの耳」と「ストレスチェック実施プログラム」

メンタルヘルス」や「ワークライフ・バランス」に関し、 流石によくできていますが、 ストレスチェックwindowsアプリまで配布していることには驚きました。

https://stresscheck.mhlw.go.jp/

https://kokoro.mhlw.go.jp/

厚生省とは関係ありませんが、 次のurlの『仕事が「つまんない」ままでいいの?』も、 とっても分かりやすくまとめられています。

www.atmarkit.co.jp

Teiid Designer は、Eclipse Marketplace からinstall OK

「Teiid」で検索すると、「Red Hat Developer Studio Integration」と表示され、「おや?」と思いますが、その内容を展開すると、「JBoss Data Virtualization Development (Teiid Designer)」が見つかります。

f:id:end0tknr:20181022093700p:plain

installが完了すると、eclipseのメニューバーのwindow → perspective → open perspective → other から Teiid を見つけることができます。

f:id:end0tknr:20181022212536p:plain

f:id:end0tknr:20181022212539p:plain

jboss ( wildfly ) とsampleアプリのdeploy

javaのアプリサーバは、不慣れなので、練習。

jboss community editionの名称が、wildfly になっていることすら知りませんでした。

jboss ( wildfly ) のinstall

といっても、download して、解凍するだけ

$ wget http://download.jboss.org/wildfly/14.0.1.Final/wildfly-14.0.1.Final.tar.gz
$ tar -xvf wildfly-14.0.1.Final.tar.gz

jboss ( wildfly ) の設定

設定fileの編集と、ユーザの追加を行います。

$ vi wildfly-14.0.1.Final/standalone/configuration/standalone.xml

old) <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
new) <inet-address value="${jboss.bind.address.management:192.168.244.101}"/>
old) <inet-address value="${jboss.bind.address:127.0.0.1}"/>
new) <inet-address value="${jboss.bind.address:192.168.244.101}"/>

jbossは、port=8080でサービス、port=9990で管理を行います。 私の環境では、vmにinstallしていることもあり、上記でipを 192.168.244.101 に変更しています。

wildfly-14.0.1.Final/standalone/configuration 以下には、 standalone-full-ha.xml や standalone-full.xml , standalone-ha.xml 等の 設定サンプルもあります。

https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/7.0/html-single/configuration_guide/index#standalone_server_configuration_files

jboss には、standalone の他に、domainもあるようですが、違いは理解していません。

次は、ユーザの追加です。

Management User と Application User の違いは理解していませんが、 「Management User」で追加しています。

$ wildfly-14.0.1.Final/bin/add-user.sh 

What type of user do you wish to add? 
 a) Management User (mgmt-users.properties) 
 b) Application User (application-users.properties)
(a): a

Enter the details of the new user to add.
Using realm 'ManagementRealm' as discovered from the existing property files.
Username : end0tknr
Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.
   :
<以降、略> 

sampleアプリのbuildの前に、maven の install

[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireMavenVersion failed with message:
To build this project Maven 3.2.5 (or greater) is required. Please install it.

古いmavenでbuildすると、上記のようなerrorとなるので、mavenからinstallします。

$ cd ~/local/
$ wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
$ tar -xvf ~/tmp/apache-maven-3.5.4-bin.tar.gz 
$ ln -s apache-maven-3.5.4 maven

sampleアプリのbuild

$ ~/tmp/
$ git clone https://github.com/jboss-developer/jboss-eap-quickstarts.git
$ cd jboss-eap-quickstarts/helloworld
$ ~/local/maven/bin/mvn clean install

上記を実行すると、jboss-eap-quickstarts/helloworld/target/helloworld.war ができます。

「mvn clean install wildfly:deploy」と実行すると、wildfly へのデプロイまで 行ってくれるようですが、 先程、「jboss.bind.address.management:192.168.244.101」のように変更していることもあり、「wildfly:deploy」なしでbuildしています。

sampleアプリ (helloworld)のdeploy

後は、http://192.168.244.101:9990 から管理画面に入り、 先程の helloworld.war を uploadすれば、完了です。

emacs for win → spacemacs の移行とりやめ

自分用メモ

thinkpad x1 carbon (英語キーボード) + windows 10で、 emacs-24.5-IME-patched for win を使用していますが、 google日本語入力の変換候補のwindowsが表示されません。

そこで、試しに spacemacs をinstallしてみました。 spacemacsは、確かに多機能ですが、先程のgoogle日本語入力問題は解消されない為、 移行とりやめにしました。

http://spacemacs.org/

Log::Log4perl におけるバッファリング防止は、log4perl.appender.Logfile.autoflush=1

メモ

use strict;
use warnings;
use Date::Calc;
use Log::Log4perl;
   

my $CONF =
    {log=>
     {
#      'log4perl.rootLogger'=> 'INFO, LOGFILE',
      'log4perl.rootLogger'=> 'DEBUG, LOGFILE, CONSOLE',
      'log4perl.appender.LOGFILE'=>'Log::Log4perl::Appender::File',
      #↓ココ。「1」でバッファリング防止
      'log4perl.appender.Logfile.autoflush' => 1,
      'log4perl.appender.LOGFILE.dir'=> $APP_ROOT,
      'log4perl.appender.LOGFILE.filename'=> $APP_ROOT. 'migrate.log',
      'log4perl.appender.LOGFILE.mode'=>'append',
      'log4perl.appender.LOGFILE.layout'=>'Log::Log4perl::Layout::PatternLayout',
      'log4perl.appender.LOGFILE.layout.ConversionPattern'=>'%d [%p] %m %n',

      'log4perl.appender.CONSOLE'=> 'Log::Log4perl::Appender::Screen',
      'log4perl.appender.CONSOLE.layout' => 'Log::Log4perl::Layout::PatternLayout',
      'log4perl.appender.CONSOLE.layout.ConversionPattern' => '%d [%p] %m %n'},
    };
my $LOGGER;


sub do_main {
    my ($self ) = @_;
    $LOGGER = init_logger();

    $LOGGER->error($tmp_msg);
}

sub init_logger {

    Log::Log4perl::init($CONF->{log});
    my $logger = Log::Log4perl::get_logger("rootLogger");
    unless($logger){
        die "fail init_logger() $!";
    }
    return $logger;
}

コーチング手法。超・抜粋

コーチング ≠ ティーチング

コミュニケーションの方向
ティーチング 一方向。教え込む、指示
コーチン 双方向。働きかけ、提案、引き出す

委任 ≠ 放任

責任は、委任した側(上司)にある

コーチングにおける3つのマインド

内容
Interactive 双方向コミュニケーション
on going 継続的コミュニケーション
tailor made 相手に合わせたコミュニケーション

オープン/クローズ x 事実/意見 の質問順序

クローズ オープン
事実 1番目 2番目
意見 3番目 4番目
  • クローズ質問:Yes/Noで答えられる質問
  • オープン質問:Why/What/Howでの質問

その他、聞く側に回る。(聞く:話す=5:5 では話しすぎ)

質問 / 詰問

  • 質問:事に着目。例:できなかった原因は何だろう?
  • 詰問:人に着目。例:どうして、君はできなかったんだ?

DiSC理論と、接し方

長所 短所
D(主導) 行動力が高い。
意思決定が速い。
人に対しはっきり言う
ルールやチームワークに関心なし
i(感化) 人と接する事が好き。
ムードメーカ。楽観的。
緻密さに欠け、成果や人に対して厳しさに欠ける
S(安定) 協調性があり、人に対し協力的。 今の環境を好み変化を嫌う。
自ら考え行動する事が苦手。
C(慎重) 論理的、整合性を重視。
物事に対し細部まで納得しないと行動しない。
自分の考え、アイディアを批判されると防御的になる。

apache 2.4で ある拡張子のファイルをダウンロードさせる

とある拡張子を持つファイル(例: .xyz)をブラウザで開くと、 google chromeではファイルダウンロードしてくれますが、 ie11では、ブラウザで開いてしまう現象が発生。

そこで、httpd.confに

AddType application/octet-stream .xyz

を追加し、解消したかと思ったら、 同じ拡張子で、ファイルダウンロードとなる場合とブラウザで開いてしまう場合が発生。

なので、

<FilesMatch "\.(xyz)$">
    Header set Content-Disposition attachment
</FilesMatch>

を更に追加することで、解消。

CGI::Cookie で複数のcookieをsetするには、list リファレンスを使用

CGI::Cookie - Interface to HTTP Cookies - metacpan.org

以下の通り

1個の場合

#!/usr/local/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Cookie;

main();

sub main {
    my $cgi = CGI->new();

    my $cookie_1 = CGI::Cookie->new(-name    =>  'key_1',
                                    -value   =>  'val_1',
                                    -httponly=>  0);
    print CGI::header(-type=>'text/html',-charset=>'UTF-8',
                      -cookie=>$cookie_1);
    :
}

複数個の場合

#!/usr/local/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Cookie;

main();

sub main {
    my $cgi = CGI->new();

    my $cookie_1 = CGI::Cookie->new(-name    =>  'key_1',
                                    -value   =>  'val_1',
                                    -httponly=>  0);
    my $cookie_2 = CGI::Cookie->new(-name    =>  'key_2',
                                    -value   =>  'val_2',
                                    -httponly=>  1);

    
    print CGI::header(-type=>'text/html',-charset=>'UTF-8',
                      -cookie=>[$cookie_1,$cookie_2]);
    :
}

javascript? http cookie の httponly 属性を考える → 必要なcookieにのみ付けるべき

以前は、cookieのhttponly 属性に対し、うるさく言われることはありませんでしたが、 最近は、cookieのhttponly 属性を使用していない場合、セキュリティリスクの一つとして、 指摘されます。

ただ、httponly 属性のあるcookieは、javascriptから参照できなくなる為、非常に不便。

なので、必要なcookieにのみ付けるように。

以下、試した perl cgi script。

httponlyの有無により、javascriptからの参照可否を確認できます

#!/usr/local/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Cookie;
use Data::Dumper;

main();

sub main {
    my $cgi = CGI->new();

    my $cookie_1 = CGI::Cookie->new(-name    =>  'key_1',
                                    -value   =>  'val_1',
                                    -httponly=>  0);
    my $cookie_2 = CGI::Cookie->new(-name    =>  'key_2',
                                    -value   =>  'val_2',
                                    -httponly=>  1);

    
    print CGI::header(-type=>'text/html',-charset=>'UTF-8',
                      -cookie=>[$cookie_1,$cookie_2]);
    print html_src();
}


sub html_src {

    my $html_src =<<EOF;
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.js"></script>
<script>
function get_cookie(){
  alert( 'cookie_1=' + \$.cookie('key_1') );
  alert( 'cookie_2=' + \$.cookie('key_2') );
}
</script>
</head>
<body>
<button type="button" onClick="get_cookie();">GET COOKIE</button>
</body>
</html>
EOF
}

ざっくり知的財産権 (特許権と著作権)

次のurlにある書籍をナナメ読み

Amazon CAPTCHA

知的財産権の体系

# 備考
1.1 工業所有権 特許権 技術的思考
1.2 実用新案権 技術的思考
1.3 意匠権 工業デザイン
1.4 商標権 企業ブランド
2 営業秘密 - 技術情報,顧客情報など
3 著作権 - 思想,感情の表現物

特許権著作権の違い

そもそも、特許権の保護対象は「発明」。 ここで言う「発明」とは技術的思想の発想のうち「高度」なもの(特許法2条1項)。

システム開発において、 著作権の保護対象は「ソースコード」、特許権の保護対象は「アルゴリズム」となる (著作権法10条9号)。

例えば、ソースコードをそのままのコピーすること(デッドコピー)は 著作権が禁止し、

プログラムを逆コンパイルし、アルゴリズムを真似することは、 特許権が禁止する。

知財紛争事例 - 積算くん事件 - 画面デザインの模倣

詳細はインターネットを「積算くん事件」で検索すると早いと思います。

システムの画面デザインの模倣を訴えた訴訟でしたが、 そもそも「積算くん」の画面デザインは、ありふれたもので、 創作性がなかった為、「積算くん」側の訴えは棄却されたらしい

まぁ、システム開発自体、まだまだ新しいものですので、 知財紛争においても、「これ!!」という判断基準がないはず。 他の事例も集めないといけませんね