銀河の歴史がまた1ページ(日記)

Last Update (2020/07/23 16:06:54)
1997.09.06から数えて counter 番目のアクセスです。

ミラーサイト [www.ceres.dti.ne.jp] [yk.rim.or.jp]

[ホームページ] [日記] [日記ファイル一覧] [読んでいる日記] [FreeBSD] [FreeBSD LINK] [検索]

ページ内目次


■ 宇宙暦 2018.12.03

http://www.ceres.dti.ne.jp/~george/jdiaryB81201.html#20181203

2018.12.03(月) Windows用のインストール支援システムにはScoopというのもあるらしい

Windows用のインストール支援システムにはScoopというのもあるらしい

tag: scoop,windows,chocolatey

https://chocolatey.org/ chocolatey との違いは、Admin特権不要( インストール先は全部個人ユーザーディレクトリの中の ~/scoop/以下 )ということらしい。

主に開発用のコマンドラインツールを中心にパッケージというかバケットを提供するとのこと(chocolateyはFireFoxとかWinMergeとかメジャーなGUIモノも提供している)。

Spring Boot のドキュメントの中で出てきたのでメモ


■ 宇宙暦 2018.12.06

http://www.ceres.dti.ne.jp/~george/jdiaryB81201.html#20181206

2018.12.06(木) ソフトバンク大規模通信障害

ソフトバンクの大規模通信障害が発生中

jdiaryB81206.jpg 182,584bytes

東京周辺、大阪周辺、名古屋周辺みんなダメっぽいね。 報告数が多いから地図に出てるけど、これ日本全国ダメなんじゃ・・?

写真画像はダウンディテクターから 15:20ごろのもの

p.s.

入場チケットのQRコード確認もできなくなるのか。なかなか大変だ。

p.p.s

原因はエリクソンのvMMEの証明書の期限切れとのこと。

まれに良くあるヤツだwww

結局、13:39ごろから21時ごろまで全国的に通信不能だった。

ソフトバンクのiPhone8 Plusは3Gモードにフォールバックしてたけど、全く通信できなかったw

変な予告CM入れてて一部ではウケてた模様


■ 宇宙暦 2018.12.09

http://www.ceres.dti.ne.jp/~george/jdiaryB81201.html#20181209

2018.12.09(日) Docker for Windows (CE) stable版 新しいのでた (Docker Community Edition 2.0.0.0-win78 2018-11-19)

Docker for Windows (CE) stable版 新しいのでた (Docker Community Edition 2.0.0.0-win78 2018-11-19)

tag: docker-for-windows

今回からバージョンの付け方が変わるらしい。 Docker 18.09相当のようだ。

今回のリリースでは大きな変更はなくマイナーチェンジ版とのこと。

2018.12.09(日) ssh経由でrsyncする際に、向こう側のホストでsudoする

ssh経由でrsyncする際に、向こう側のホストでsudoする方法

tag: rsync,sudo,rsync-path

ssh経由のrsyncで外部ホストのバックアップを取る場合、sshで入れるユーザーはrootではなくてubuntuとかになっている。

ubuntuユーザーのままだとパーミッションの関係でバックアップできないファイルが結構でてくるので、ubuntuユーザーでsshしてroot権限でrsyncバックアップする時の小技。

相手側のホストでsudo rsyncはパスワードなしでできるようにあらかじめ設定しておいて、 --rsync-path="sudo rsync" と指定する。

以下実例。

export LANG=ja_JP.UTF-8
rsync --progress -av -e "ssh " --rsync-path="sudo rsync" --delete --exclude .ssh/  george@${FROMHOST}:/home/george/    /newdisk/rsync/home/george/

■ 宇宙暦 2018.12.16

http://www.ceres.dti.ne.jp/~george/jdiaryB81201.html#20181216

2018.12.16(日) テキストエリア(textarea)のv-modelのデータ初期化 from HTMLデータ (vue.js, axios)

テキストエリア(textarea)のv-modelのデータ初期化 from HTMLデータ (vue.js, axios)

tag: vue2, axios, wiki

■概要

俺のwikiにもクリップボードに画像がある状態でテキストエリアでCtrl-Vすると画像を自動でアップロードして、 その画像へのリンクテキストをテキストエリアに挿入する機能が欲しかったので実装してみた。

その際、HTMLから文字列データ(Mustache形式を含む)を得てtextareaのv-modelを初期化するのが大変だったのでメモ。

■背景

貼り付けイベントを拾って、クリップボード内に画像があればaxiosで画像をアップロードする話は↑に書いてあるのだけど、テキストエリアの初期データ投入に困った。

元々俺のwikiはpure JSP/Servletなので、編集前wikiテキストデータが<textarea>〜データ〜</textarea>という形でJSPにてHTML形成されてくる。

Vueの場合、テンプレートを用意せずに DOM の Element をマウントすると、元々あったHTML構造をテンプレートとして採用してくれる(推奨はされていない)のだが、 その中に {{ Mustache }} 形式の文字列があるとテンプレート展開しようとする。

Mustacheが変数として未定義ならWarningが出るし、 {{ Mustache(hoge) }} みたいな関数呼び出し形式が存在すると、関数定義が存在しないとErrorになって画面が出ない。 つか関数が実在してもここで呼び出しされては困る。 元々Vueの関数を呼び出すつもりなどない <textarea> の中で、俺のwikiのpluginを呼び出す書式として書いているだけなのだ...。

■対策

textareaのv-modelの初期化の話はGoogle先生に聞いてもでてこないので、適当にでっちあげてみる。

考え方としては以下。

  1. DOMからtextarea.valueの値を変数に保存。
  2. new Vueする。el指定はナシ。
  3. DOMのtextarea.innerHtmlの値を空にする。これで、未定義の Mustache 表記にヒットしてエラー落ちしなくなる。
  4. vm.$mount(el)でマウント。マウントした時点でDOMからテンプレートの作成処理が走る。が、内容は空なのでエラーにはならない。
  5. 初期化関数経由で、前に保存したtextareaのvalueの値を設定する。関数からv-modelを初期化した場合は、 {{ Mustache }} 表記は展開されない。
  <!-- vue.jsのロード -->
  <script type="text/javascript" src="/kjwikig/js/vue.js"></script>
  <script>
    Vue.prototype.$appName = 'MemoDir/ClipboardImageUpload'
    Vue.prototype.$appContextPath = '/kjwikig';
  </script>
  <!-- axiosのロード -->
  <script type="text/javascript" src="/kjwikig/js/axios.js"></script>

(中略)

    <!-- vueにマウントするターゲットのdiv。子要素は一つだけになるように無駄なdivを入れている。目印の class も指定。 -->
    <div id="app_form_editsub_0" class="div_app_vue_ctrl_v_img">
      <div>
        <form class="forminput" name="regist" method="post" action="/kjwikig/kjwikiedt">

          <!-- 問題のテキストエリア。初期データが既に mustache 形式を含んでいる。目印の class も指定。 -->
          <textarea name="page" wrap="soft" rows="20" v-model="textareavalue" v-on:paste="handlePaste"  class="textarea_app_vue_ctrl_v_img">

テキストエリアの中身。
{{uploadfileref(image.png)}}
みたいな、Mustache形式なんだけどwikiのplugin表記が入ってくる。

</textarea><br>
          <input type="submit" value="保存する">
        </form>
        <div v-show="vue_message">{{ vue_message }}</div>
      </div>
    </div>

(中略)

  <!-- 自作のJavaScriptロード -->
  <script type="text/javascript" src="/kjwikig/js/imagePaste.js"></script>

//
// テキストエリアに対して画像をペーストすると、自動的にアップロードした上で、画像へのリンクを貼る
//
// 参照  https://imatomix.com/imatomix/notes/1509535920 マークダウンエリアへの画像の直接入力 by Keita Imatomi
//
//  実行前に以下のデータを設定しておくこと
//  * Vue.prototype.$appName ... WikiName を設定しておく
//  * Vue.prototype.$appContextPath  ... アップロード先のベースURL
//
//  textareaの中に {{ Mustache }} があると発狂するので、マウント前に innerHtml の内容を空にする。マウント後に初期化関数経由でデータを投入する。
//
// 2018.12.15
//


var el_app_vue_upload = document.querySelector(".div_app_vue_ctrl_v_img");
var el_app_vue_upload_textarea = document.querySelector(".textarea_app_vue_ctrl_v_img");
if (el_app_vue_upload != null && el_app_vue_upload_textarea != null) {
    var vm_form_upload_0 = new Vue({
        data: {
            vue_message: 'from vue: Vue version ' + Vue.version,
            textareavalue: ''
        },
        methods: {

            // textareaデータを初期化する
            initTextData: function (value) {
                console.log("enter initTextarea.")
                var textarea = document.querySelector('.textarea_app_vue_ctrl_v_img')
                var pos = textarea.selectionStart
                pos = 0
                // update v-model
                this.textareavalue = value
                // update DOM
                textarea.value = value
                textarea.selectionStart = pos
                textarea.selectionEnd = pos
            },

            // imageデータをpostする
            postImage: function (formData) {
                console.log("form post path is " + Vue.prototype.$appContextPath + "/kjwikiuploadapi")
                axios
                    .post(Vue.prototype.$appContextPath + "/kjwikiuploadapi", formData)
                    .then(function (response) {
                        var textarea = document.querySelector('.textarea_app_vue_ctrl_v_img')
                        var sentence = textarea.value
                        var len = sentence.length
                        var pos = textarea.selectionStart
                        var before = sentence.substr(0, pos)
                        var after = sentence.substr(pos, len)
                        for (var image of response.data.images) {
                            // var word = '![image](' + image + ')' // for markdown
                            var word = '{{uploadfileref(' + image + ')}}' + "\n"
                            sentence = before + word + after
                            // update v-model
                            this.textareavalue = sentence
                            // update DOM
                            textarea.value = sentence
                            textarea.selectionStart = pos + word.length
                            textarea.selectionEnd = pos + word.length
                            this.vue_message = "from Vue : uploaded " + image + " and link is pasted"
                            console.log("from Vue : uploaded " + image + " and link is pasted")
                        }
                    })
                    .catch(function (error) {
                        console.log(error)
                        this.vue_message = "axios post error."
                    })
                    .then(function (response) {
                        // always done
                    })
            },

            // pasteされた際のフック
            handlePaste: function (e) {
                var items = e.clipboardData.items
                var formData = new FormData()
                this.vue_message = 'from vue: pasted.'
                formData.append('name', Vue.prototype.$appName)
                for (var item of items) {
                    if (item.type.match('image.*')) {
                        this.vue_message = 'from vue: image data pasted.'
                        formData.append('note', item.getAsFile())
                    }
                }
                if (formData.has('note')) {
                    this.postImage(formData)
                }
            }
        }
    })
    // マウント前にテキストエリアの内容を保存
    var tmp_form_upload_0_textvalue = el_app_vue_upload_textarea.value
    // テキストの中に {{ Mustache }} があると異常動作するので、テキストは消しておく
    el_app_vue_upload_textarea.value = ''
    el_app_vue_upload_textarea.innerHTML = ''
    el_app_vue_upload_textarea.pos = 0
    // マウント実行
    vm_form_upload_0.$mount(el_app_vue_upload)
    // vmの中のv-modelのデータに値をコピーする初期化関数呼び出し
    vm_form_upload_0.initTextData(tmp_form_upload_0_textvalue)
}

Vue.jsのtwo way データバインディングって、 HTML側の指定をガン無視(checkbox, radio)したり、 テキストエリアの初期化がHTMLからできなかったり、 なんか足りない感じ。

まっさらのformから編集開始するなら良いんだけど、登録済みの情報の編集画面とかどうすんのかな。 axios APIで既存データを個別に取得してモデルデータに展開すんのかな。

■参考文献 Vue.js

この規模の翻訳やってるって凄いなこれ...

■参考文献 Vueで使われているテンプレートエンジン Mustache 記法について

Vueで使われているのは本家Mustacheとは違うみたいで、単体のMustacheテンプレートエンジンがある模様。

今回は {{ Mustache }} 記法の誤爆発動で苦しんだけど、記述方法自体は色々できるっぽい。

Mustacheはロジックレスなテンプレートエンジンと言うことで、ループ展開も {{ #items}} 〜 {{ /items }} みたいな記法で済ませる根性は割と好きw


■ 宇宙暦 2018.12.22

http://www.ceres.dti.ne.jp/~george/jdiaryB81201.html#20181222

2018.12.22(土) HP ENVY 4520 Series (HPF475F9) (プリンタ/スキャナ) Windows 10 ver 1809/1803 からカラー印刷ができない / プリンタの印刷設定で一般保護例外が出る

HP ENVY 4520 Series (HPF475F9) (プリンタ/スキャナ) Windows 10 ver 1809/1803 からカラー印刷ができない / プリンタの印刷設定で一般保護例外が出る

Windows Update で Windows 10 ver 1803/1809 に最新化してるとNGっぽい。強制的に白黒印刷になる。

Windows 10 ver 1703 までのPCからだとカラー印刷できるし、プリンタの印刷設定画面も開く。

うーん。購入は2017/12/03だったけど、1年もたないプリンタってどうよ・・・。本体価格 4,888円だからこんなモン?

ドライバ供給がタコなのでHP製品はダメぽ

2018.12.22(土) FreeBSD 12.0 RELEASE 出た / アップグレード時は共有ライブラリが変更になっているので注意

FreeBSD 12.0 RELEASE 出た

tag: freebsd, freebsd12

アップグレード中に不気味なエラーが出たけど、これ大丈夫か?w

root@n3050 ~ $ freebsd-update install
Installing updates...install: chown 0:0 ///proc: Operation not supported
install: chmod 555 ///proc: Operation not supported
root@n3050 ~ $ freebsd-update install
Installing updates...rmdir: ///var/db/etcupdate/current/usr/share/openssl/man/en.ISO8859-1: Directory not empty
rmdir: ///var/db/etcupdate/current/usr/share/openssl/man: Directory not empty
rmdir: ///var/db/etcupdate/current/usr/share/openssl: Directory not empty
rmdir: ///var/db/etcupdate/current/usr/share/man/en.UTF-8: Directory not empty
rmdir: ///var/db/etcupdate/current/usr/share/man/en.ISO8859-1: Directory not empty
rmdir: ///var/db/etcupdate/current/usr/share/man: Directory not empty
 done.
root@n3050 ~ $

再起動後、pkgインストールしようとすると、以下のエラーがww

ssh george@n3050 ~ $ pkg
ld-elf.so.1: Shared object "libssl.so.8" not found, required by "pkg"
ssh george@n3050 ~ $

華麗に以下の記述に引っかかったのね;;

At this point, users of systems being upgraded from earlier FreeBSD releases will be prompted by freebsd-update(8) to rebuild all third-party applications (e.g., ports installed from the ports tree) due to updates in system libraries.

After updating installed third-party applications (and again, only if freebsd-update(8) printed a message indicating that this was necessary), run freebsd-update(8) again so that it can delete the old (no longer used) system libraries:

pkgコマンドまでやられるとは予想してなかったけども・・。

仕方がないので、VirtualBox + vagrant で起動する FreeBSD 11 RELEASE バックアップマシンからpkg(8)コマンドに必要な3個の共有ライブラリをscpでコピーして持ってくるという顛末にww

pkgの実行に必要な共有ライブラリファイルは以下の3個。

ssh george@n3050 ~ $ tar tvzf hoge.tar.gz
-r--r--r--  0 root   wheel  470352  6月 22  2018 usr/lib/libssl.so.8
-r--r--r--  0 root   wheel 2542360  6月 22  2018 lib/libcrypto.so.8
-r--r--r--  0 root   wheel  788968  6月 22  2018 usr/lib/libarchive.so.6
ssh george@n3050 ~ $

このまま cd / ; tar xvzf ~george/hoge.tar.gz すれば pkg コマンドだけは動くようになる。

そしたら全部のパッケージを再インストール。

pkg update
pkg upgrade

ひとまずこれでFreeBSD 12.0 RELEASE への移行ができた。

2018.12.22(土) Oracle VM VirtualBox 6.0 出た

Oracle VM VirtualBox 6.0 出た

tag: virtualbox, virtualbox6

実行パフォーマンスは悪くなるけど、Hyper-V上でのVM実行をフォールバックとしてサポートしたらしい

早速、Hyper-Vを有効にしたマシンで、vagrant 2.2.2経由でvirtualboxを使って起動してみる。

フォールバック実行できないっぽい。 Hyper-Vが有効でダメな時と同じエラーを出している。 これはVBoxManagerとvagrantの対応待ちかな。

==> default: Booting VM...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", "f0e9d6e2-85e2-415d-844a-9cee5a7fdd7b", "--type", "headless"]

Stderr: VBoxManage.exe: error:  (VERR_NEM_MISSING_KERNEL_API).
VBoxManage.exe: error: VT-x is not available (VERR_VMX_NO_VMX)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole

今度はOracle VirtualBox を直接使用してみる。

Windows 10 Pro ver 1809 Hyper-V 有効 (Docker for Windows 2.0.0起動中) のメインマシンで VirtualBox 6.0.0を起動して、FreeBSD 12.0 RELEASE の DVD-ISOイメージを使用してみた。

起動はするんだけど、FreeBSD インストール中に src.txzのチェックサムが違うとか言われてインストールはできず。

何度か試しているうちに、VMの起動もVT-xが無いと言われてできなくなってカオス。

うーん。謎。


■ 宇宙暦 2018.12.31

http://www.ceres.dti.ne.jp/~george/jdiaryB81201.html#20181231

2018.12.31(月) みなさま良いお年を

早いもので今日は大晦日ですよ

去年の年末はIntel CPUのSMT関連脆弱性で盛り上がっていたけど、今年は何もなしかな

2018.12.31(月) 108の煩悩

108の煩悩

某アリスギアアイギスというスマホゲームにて、ガチで108個のHEXマスをタップさせてて鐘の音を鳴らし、108個の煩悩を全部ゲーム登場キャラで補足解説/煩悩実演/時にはダジャレしつつ煩悩を払うという大晦日イベントやってて笑ったww

煩悩の内容にはよく似た内容のものも多くて本当に108種類あったかどうかは定かではないけど、ゲームキャラによる解説/煩悩実演は確かに108種類あったwww(←そっちしか覚えていない)

108種類ガン見したのはこれが初めてかもしれん

歴史とか古典とかもそうだけど、エンタメストーリー仕立てにしてあると頭に入ってきすぎて困るww

p.s.

108個というのは数字のごろが良いから採用されているようで、沢山という意味らしい。 108個の内容は宗派によって色々で特に決まっているわけではない模様。


日記ファイルリスト最新100件


Copyright(c) 1996-2020 George(小濱 純). All rights reserved.
私の作成したページへのリンクはご自由にどうぞ。
このページに間違いや要望などがありましたら george@yk.rim.or.jp まで御連絡ください。
メール本文に 6020-5440-3372 と書いて頂くと、ウチのSPAMフィルタを通過できます(2009-06-14から2020-12-31まで)。

[ホームページ] [日記] [日記ファイル一覧] [読んでいる日記] [FreeBSD] [FreeBSD LINK] [検索]

home: <george@yk.rim.or.jp> or <george@ceres.dti.ne.jp>
(I am using white list SPAM filter. To avoid it, please write 6020-5440-3372 in mail body. This key word is valid since 2009-06-14 until 2015-12-31.)