WPF のテキストボックスは、AcceptReturn=true とすることで複数行入力可能になりますが、

以下のような場合に挙動不審になります。

1
2
3
4
5
あいうえお

あ■
~~

↑ のような入力状態の時(3 行目の「あ」が変換中状態、■ がカーソル位置)の時に、バックスペースを押すと

1
2
3
あいうえお


↑ の状態になります。バックスペースが 2 度押されたような挙動になってしまいます。

回避方法:

コントロール自体を (AvalonEdit)[http://avalonedit.net/] | MIT Licence)

にすることで回避可能との情報を Twitter で教えて頂きました。(ありがとうございました)

テキストエディタコントロールなので規模が少々大きいものの単純な入力であればそれほどの

労力無く移行できそうです。

環境

SpringBoot 1.3.5

jar でデプロイ (war の場合はこの記事の対象外)

どんな時に嬉しいか

開発中は、resources/application.yml を読んで欲しいが、本番時は運用者が設定ファイルを

変更する為に外だしのファイルになっていて欲しいという時。

何をするか

起動時のオプションを以下のように記述すれば OK

1
2
3
4
5
REM 適当に改行していますが、実際は一行で入力します
java
-jar
-Dspring.config.location="c:pathmyconfig.yml"
-Dspring.config.name="DummyConfigFilename" appname.jar

解説

spring.config.location は名前に反してファイル名まで入れる必要がある。

#StackOverflow で検索したらファイル名が入ってないパターンが多くてハマった。

spring.config.name にダミーのファイル名を指定しているのは、SpringBoot の設定ファイル

読込順として、クラスパスにある application.yml が優先して読みこまれるため。

これを指定しないと、クラスパス内の application.yml の指定を、外部ファイル

(上記例だと c:pathmyconfig.yml) で上書きするという感じになる。

#この動きが希望であれば、spring.config.name を指定する必要はない

#ただ、外部ファイル側で、キー名を間違えた場合にクラスパス内の指定が使用されるのは

#困るというか、原因究明しにくくなる・・・ような気がするので、spring.config.name  に

#存在しないファイル名を指定して、クラスパス内の設定ファイルを読めないようにしている。

PS

logback の設定ファイルも外部化したのでそのことをあとで追記する。

環境

  • Ceph mimic (on ubuntu 18.04LTS)

手順

ceph コマンド使えるところから操作します。

1
2
3
4
5
6
7
8
9
10
11
`# pool削除を許可(危ないので後で戻します)
ceph config set mon mon_allow_pool_delete true

# 削除
# poolname が二重になっているのは間違いではありません。本当にそうしろって言われます。
ceph osd pool delete poolname poolname --yes-i-really-really-mean-it
pool 'poolname' removed

# pool削除を不許可
ceph config set mon mon_allow_pool_delete false

環境

pfSense が CentOS 7 上の KVM に乗っていて、家庭内 LAN のデフォルトゲートウェイになっている。
フレッツ光 - (pppoe) - pfSense - LAN というイメージ。
pfSense のバージョンは 2.2.1-RELEASE (amd64)

NIC を VirtIO にすると何が起きる?

大体はまともに動くが、仮想マシンホスト →pfSense→ インターネット の通信だけがおかしくなる。

現象としては

  • Ping はインターネットに向けて打っても届く
  • 他の通信方法は届かない。応答が帰ってこない。(例えば HTTP(s)はダメ)

対処

pfSense の NIC を VirtIO にしない。e1000 にすれば普通に動く。

その他所感など

同じく、Ubuntu の KVM でも同じようにハマったので多分、何かバグってる。

前提

  • Linux Mint 20 (Ubuntu 20.04)

TL;DR;

  • convert henkan-moto.png henkan-saki.pdf

エラーが出た場合

何もしていなければ、以下のエラーが表示されるはず。

1
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.

/etc/ImageMagick-6/policy.xml を編集する。末尾のところに以下のような部分があるのでコメントアウト

1
2
3
4
5
<!--    ←これを追加してコメントアウト
<policy domain="coder" rights="none" pattern="EPS" />
<policy domain="coder" rights="none" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
コメントアウト終わり -->

これで、png -> pdf に変換が可能になる。

が。別にファイルサイズが縮んだりするわけではない(むしろファイルサイズが大きくなる)

tl;dr

成果物はこちらです。試していないのですが、Rock64 等、arm64 なものであれば動くと思います。

本記事について

成果物は上記の通りなので、失敗談等を書いていきます。

はじめに

Jetson nano、すごくよさそうだったので買ったのですがなかなか触れずに埃を被っていました。

なにせケースもありませんし。ということで、ちょうどメモリも 4GB あるので zabbix のホストを仮にやってもらうことにしました。

困った点 1

zabbix は公式に dockerfile を配布しています。 さらに、dockerhub にもコンテナを公開してくれています。

と言うことは、それを pull すれば楽勝…だと思っていました。

甘かったです。 普通に jetson から docker pull zabbix/zabbix-server-mysql を pull すると、x86_64 のコンテナが落ちてきます。

当然動かないです。仕方ないので公開されている dockerfile からコンテナをビルドすることにしました。

…とはいえ、Dockerfile があるのでそれほど苦労はしないはずです。ビルド時間がかかるかもと思ったのですが、

数分でビルドが完了しました。

困った点 2 DB まわり

公式では、mysql-server:5.7 のイメージを使うようになっていますが、aarch64 版のコンテナはありません。

と言うことで、8.0 の mysql 公式コンテナを使用していますが、mysql8.0 は色々と変更が入っているので、

動かすのに苦労しました。具体的には command: --default-authentication-plugin=mysql_native_password

docker-compose.yml に加えただけなんですが。

さらに困った点

zabbix 公式の、docker-entrypoint.sh なんですが、DB が起動するのを待つために以下のコマンドを実行します。

mysqladmin ping -h db -P 3306 -u root --password="password" --silent --connect_timeout=10

しかし、mysql コンテナの初期構築の root は、他ホストからの接続に対応していません。

そのため、いつまでまっても、 “MySQL is not ready… “ となってしまいます。

なので、docker-compose up する前に、DB に接続して、外から接続できる root を作成するように README に記述しました。

ついでに、私の dockerhub にアップロードしているイメージは、ping に使用するユーザーを zabbix に変更しています。

さらに、docker-entrypoint.sh で root 権限を使って zabbix の初期 DB を流し込もうとするのですが、

これが失敗するのも上記の対応で上手く行くようになりました。

zabbix-agent

server が動いているホスト以外の zabbix-agent は何も不思議なことはないのですが、

server が動いているホストだけは問題があります。それは、docker コンテナの IP アドレスから zabbix-agent を叩いてしまうので、

zabbix-agent.conf にかかれた Server と一致せず、要求を拒否されてしまいます。

これは正直参りました。docker コンテナの IP アドレスを固定するように書くのが良いのでしょうが、

そうそう変わるものでもないのでとりあえず直接記述してしまっています。

なお、Server, ServerActive は複数の IP アドレスを並べることができるので、それっぽいのを並べてしまえば OK です。

テストには、zabbix_get -s ホスト IP -k agent.version を使うと便利です。

拒否した場合は、拒否した agent 側の /var/log/zabbix/zabbix-agent.log にログが出力されます。

出典

http://stackoverflow.com/questions/16569810/knockout-viewmodel-base-class-javascript-inheritance

やり方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 1 共通の処理
(function (ko, undefined) {
ko.MyBase = function () {
var self = this;
// 共通で使う変数とかメソッドとか
self.test = function() {
alert('test');
}
}
}(ko));

// 2 個別の画面で使うVM
function MyViewModel() {
"use strict";

var self = this;
ko.MyBase.call(self);


}

// new するとき
var myVM = new MyViewModel();
myVM.test(); // alert
  • 共通の処理を 1 のように書く
  • それを使用する VM を 2 のように書く。 var self = this した後に、 ko.[ベースの名前].call(self) を呼ぶのがポイント
  • あとは普通の ViewModel として使うだけ

共通の処理に記述された内容がそのまま ViewModel に存在するのと

同様に処理されるので、お手軽に共通処理をくくり出せて便利。

今さっきやらかしてしまったのでメモ。

SpringSecurity の設定が間違っていると @AuthenticatedPrincipal した引数に null が入ってしまう。

1
2
3
4
5
6
7
8
9
10
11
12
// これは間違い。
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/mypage/**");
}

// 正しくはこう書く
public void configure(WebSecurity web) throws Exception {
http.authorizeRequests()
.antMatchers("/mypage").permitAll()
}

間違いの方も必ず間違いというわけではなく、静的なコンテンツは上の書き方でよい。
上の書き方は SpringSecurity 自体をバイパスしてしまうので、ログイン状態であっても
ログインユーザーの情報が取れないと思われる。

会社で微妙なトラブルが発生したのでメモ。
Windows10 のセットアップの最後のフェイズで AzureAD に接続する前
に注意が必要な点をメモ。

  • AzureAD 側のユーザー名を英語にしておく

これをしないと、ホームディレクトリに日本語の名前が使われてしまい
一部のアプリが動かないことがある。
vSphereClient(のコンソール表示)が動かないとか。
フィードバックは上がっているけれども、修正入るかどうかはまだ分からない状況。
普通にメールアドレス使ってくれれば良かったのに。

日本語ユーザー名で問題起こすアプリの方が問題なんですけども。

前提条件

  • OpenWRT 19.07.4 r11208-ce6496d796 (WSR-1166DHP)
  • WAN6 に IPv6-PD が表示されている(/openwrt-ipv6-to-lan-without-hikari-denwa/)
  • プロバイダは so-net、V6 プラスオプションを契約済み

手順

本当なら Luci で設定…と行きたいところだが、Javascript エラーで設定できない。

修正自体はされているようなので次のリリースでは治りそう(だと思われる)

map パッケージインストール

ここだけは Web からできる。

System-Software から map パッケージをインストールする。

MAP-E パラメータの計算

http://ipv4.web.fc2.com/map-e.html

MAP-E 接続に必要なパラメータ類は IPv6 に割り当てられたアドレスから算出できる。

自分の IPv6 アドレスを入力して算出してもらう。

MAP-E インターフェイスの設定

ここからは SSH 等で OpenWRT に接続する必要がある。

/etc/config/network の設定

/etc/config/network に以下を追記する。これにより mape インターフェイスが作成される。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
config interface 'mape'
option proto 'map'
option type 'map-e'
option mtu '1424'
option encaplimit 'ignore'
list tunlink 'ONU6' # ONU6は当方環境。通常はWAN6
# ↑ここまで固定
# ↓ここからは算出結果の下に書いてあるのをコピペ
# ↓この設定をコピペしても動かない
option peeraddr '2404:9200:225:100::64'
option ipaddr '106.72.0.0'
option ip4prefixlen '15'
option ip6prefix '240b:10::'
option ip6prefixlen '31'
option ealen '25'
option psidlen '8'
option offset '4'

編集が終わったら

uci commit /etc/config/network

で設定を反映させる。

/etc/config/firewall

mape インターフェイスがどこにも属していないので WAN グループに属させる

1
2
3
4
5
6
7
8
config zone
option name 'wan'
option input 'REJECT'
option output 'ACCEPT'
option forward 'REJECT'
option masq '1'
option mtu_fix '1'
option network 'wan wan6 ONU ONU6 mape' # この行に mape を追加

uci commit /etc/config/firewall で反映させる

map.sh

MAP-E の細かい設定等を入れる。

参照 → https://gist.github.com/anonymous/0fdec75fa20a7f1ce4806391d6b0429b

ここでコメントを入れている人は本件の修正を入れてくれた人。ありがたい。

/lib/netifd/proto/map.sh.orig /lib/netifd/proto/map.sh を編集

変更箇所

1
2
3
4
`# uncomment for legacy MAP0 mode
#export LEGACY=1
# コメントアウトされているので外す
export LEGACY=1
1
2
3
`json_add_boolean connlimit_ports 1
# json_add_boolean -> string
json_add_string connlimit_ports "1"

これは uci commit 不要

MAP-E インターフェイスの開始

ここからは Luci で操作できる。(設定変更はできないが見ることはできる)

Network-Interface から mape を Restart させると接続されるはず。

また、接続されると自動的にデフォルトゲートウェイが MAP-E に向く。

うまく接続されない場合は、SSH から logread -f をすることでログを見ながら

MAP-E を Restart するとなにかエラーがでるはず。

残っている問題等

Local address not yet configured!

MAP-E を接続した際に上記メッセージが複数(8 個くらい)表示されるが接続されているので

とりあえず無視。

一部サイトが見れない

ここのブログ主と同じく、一部のサイトへの接続が失敗したり、すごく遅かったりする。

https://blog.misosi.ru/2019/12/14/openwrt-v6plus-stuck/

具体的には上記ブログの内容からだが、

その他、Skype のログインが遅くなる、音声がおかしくなる等…
OpenWRT での MAP-E 接続はまだ色々とあるのかもしれない。

参考資料