テンプレートテスト
ブログの説明
ブログの説明2
menu
keyboard_arrow_up
Top
search
close
home
ホーム
computer
PC一般
construction
開発環境・ツール
code
プログラミング
home
ホーム
computer
PC一般
construction
開発環境・ツール
code
プログラミング
Home
›
Archives for 2021
2021/05/30
image
NO IMAGE
NO IMAGE テスト
update
event_note
summary
Read more
続きを読む »
2021/05/29
image
NO IMAGE
test
update
event_note
以下のページで紹介されていた Materiapollo というテーマに変更しました。
Read more
続きを読む »
2021/05/27
WSL2 + VSCode + Remote-Containers で Docker Desktop - FileSharing の警告が表示される
update
event_note
タイトルの通り、Docker を WSL2 で動作させていて、VSCode から Remote-Containers を使うと、以下のように `Docker Desktop - FileSharing` の警告が表示されます。
Read more
続きを読む »
2021/05/24
image
NO IMAGE
Rocket.Chat のバックアップとリストア
update
event_note
label
Docker
label
rocketchat
docker 上で動かしている Rocket.Chat のバックアップとリストア方法です。
## 環境 - Windows 10 - Docker Desktop 3.3.3 ## バックアップ docker コンテナ内で以下のコマンドを実行するだけです。 ``` $ mongodump --db rocketchat --out /tmp/rocketchat_backup ``` `--db` でデータベース名を指定し、`-out` で出力先を指定します。 ## リストア docker コンテナ内で以下のコマンドを実行するだけです。 ``` $ mongorestore --db rocketchat /tmp/rocketchat_backup/rocketchat/ --drop ``` あとは Rocket.Chat を再起動したら OK です。
## 参考 URL - https://blog.clarus.jp/posts/mongodb-backup-and-restore/
Read more
2021/05/21
image
NO IMAGE
Rocket.Chat を docker で動かす
update
event_note
label
Docker
label
rocketchat
公式の Rocket.Chat の Docker イメージを使って動かしてみましたが、結構苦労したのでメモしておきます。
## 環境 - Windows 10 - Docker Desktop 3.3.3 ## docker-compose.yml Rocket.Chat と MongoDb は docker-compose を使って起動しました。 以下、記述例です。 ``` version: '2' services: rocketchat: container_name: rocketchat image: rocketchat/rocket.chat:latest command: > bash -c "for i in `seq 1 30`; do node main.js && s=$$? && break || s=$$?; echo \"Tried $$i times. Waiting 5 secs...\"; sleep 5; done; (exit $$s)" restart: unless-stopped volumes: - uploads:/app/uploads depends_on: - mongo ports: - 3000:3000 environment: - PORT=3000 - ROOT_URL=http://localhost:3000 - MONGO_URL=mongodb://mongo:27017/rocketchat - MONGO_OPLOG_URL=mongodb://mongo:27017/local - TZ=Asia/Tokyo mongo: container_name: rocketchat-mongo image: mongo:4.0 restart: unless-stopped volumes: - db:/data/db - dump:/dump command: mongod --smallfiles --oplogSize 128 --replSet rs0 volumes: uploads: db: dump: ``` ## 起動後にすること ここが一番はまったところですが、docker-compose で起動するだけではアクセスできず、mongoDb でレプリカの登録を行ったらアクセスできるようになりました。 - 参考 - https://garafu.blogspot.com/2018/03/mongodb-init-or-change-replicaset-config.html - https://kakts-tec.hatenablog.com/entry/2017/06/21/000936 まず mongodb のコンテナに入ります。 ``` $ docker exec -it rocketchat-mongo bash ``` mongodb に接続します。 ``` $ mongo --host localhost:27017 ``` レプリカを登録します。 ``` > rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "localhost:27017" } ]}) ``` スレーブを許可?します。 ``` > rs.slaveOk() ``` 終了します。 ``` > exit ``` これで docker-compose 再起動後に Rocket.Chat にアクセスできました。
## 参考 URL - https://garafu.blogspot.com/2018/03/mongodb-init-or-change-replicaset-config.html - https://kakts-tec.hatenablog.com/entry/2017/06/21/000936
Read more
2021/05/18
image
NO IMAGE
Redmine のアップデートとリストア
update
event_note
label
Docker
label
Redmine
会社で Redmine の環境を移行することになったので、そのメモです。
## 概要 - 現在の Redmine が 3.4.2 なので、移行ついでにアップデートする - 移行先では docker 上で Redmine を動作させる - DB は MySQL ## 事前準備 まずは現在使用しているプラグインなどが、最新の Redmine で動作するかをチェックしておきます。 具体的には、docker で各バージョンの Redmine を起動し、プラグインをインストールして使えるかを逐一チェックしていきました。 こんなの docker 使わないとやってられんね。 んで、調査の結果、現在の最新の 4.2 では動作しないプラグインがあったので、それが動作する 4.0 にアップデートすることにしました。 ## 移行の流れ 1. 移行先となる Redmine 4.0.9 を docker で起動 1. 移行元の Redmine 3.4.2 のバックアップファイルをもとにリストアする 1. プラグインとテーマのインストール 1. DB のマイグレーションを行う ### Dockerfile の作成 公式の Redmine の docker イメージをそのまま使いたかったですが、社内の諸事情(主に証明書とかプロキシ関連)により Dockerfile を作成しました。 その際、`unzip` があるとプラグインのインストールが楽なので追加しておきました。 ``` FROM redmine:4.0.9 # 中略 RUN apt -y install unzip ``` そして、ここでは適当に `myredmine` という名前でイメージを作成しました。 ``` $ docker build -t myredmine:4.0.9 . ``` ### docker-compose.yml の作成 Redmine と MySQL を簡単に起動できるよう、docker-compose を使いました。 例えば以下のような感じです。 ```yml version: '3.1' services: redmine: image: myredmine:4.0.9 container_name: myredmine restart: always depends_on: - mysql ports: - 3000:3000 environment: REDMINE_DB_MYSQL: mysql REDMINE_DB_PASSWORD: example volumes: - files:/usr/src/redmine/files mysql: image: mysql:5.7 container_name: redmine-mysql command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci restart: always environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: redmine volumes: - mysql:/var/lib/mysql volumes: files: mysql: ``` ### リストア docker-compose を使って Redmine を起動したら、リストアを行います。 例えば以下のような感じです。 ここでは DB のバックアップファイルが `redmine_db_backup`、添付ファイルバックアップフォルダが `redmine_files` です。 ``` docker cp redmine_db_backup redmine-mysql:/ docker exec redmine-mysql bash -c "mysql -u root -pexample redmine < redmine_db_backup" docker cp redmine_files/. myredmine:/usr/src/redmine/ ``` ### プラグインとテーマのインストール github などからクローンできるものはコンテナ内で直接クローンします。 クローンできないものはあらかじめ適宜ダウンロードしておき、コンテナ内にコピーして展開しました。 例えば、以下のように、ホスト側で実行する `install_plugins.sh` と、その中で、コンテナ内で実行する `install_plugins_run.sh` を作成しました。 **install_plugins.sh** ``` #!/bin/bash # github から clone できないプラグインをコンテナ内にコピー docker cp redmine_checklists-3_1_18-light.zip myredmine:/usr/src/redmine # コンテナ内で実行するシェルスクリプトをコンテナ内にコピー docker cp install_plugins_run.sh myredmine:/usr/src/redmine # 実行 docker exec myredmine bash /usr/src/redmine/install_plugins_run.sh exit 0 ``` **install_plugins_run.sh** ``` #!/bin/bash # docker コンテナ内で実行するシェルスクリプト # github から clone してくる git clone --depth 1 https://github.com/koppen/redmine_github_hook ./plugins/redmine_github_hook # クローンできないものはあらかじめダウンロードして、ホストからコンテナにコピーしておく # ここでは展開するだけ unzip redmine_checklists-3_1_18-light.zip -d ./plugins # テーマのインストール(Redmine のバージョンに合わせたものをクローン) git clone --depth 1 https://github.com/makotokw/redmine-theme-gitmike.git public/themes/gitmike -b v1.1.1 exit 0 ``` ### マイグレーション 以下をコンテナ内で実行するだけです。 上記の `install_plugins_run.sh` の中に含めてもいいかもしれません。 ``` export RAILS_ENV=production bundle update bundle exec rake db:migrate bundle exec rake redmine:plugins:migrate RAILS_ENV=production bundle exec rake tmp:clear ``` あとは Redmine を再起動すれば完了です。
## 参考 URL - https://netazone.net/archives/3747/
Read more
2021/05/11
image
NO IMAGE
Rocket.chat の設定
update
event_note
label
rocketchat
Rocket.chat の管理画面で設定変更した項目のメモです。
## 変更した設定 ### ユーザーがカスタム絵文字をアップロードできるようにする 管理 -> 権限 -> 「絵文字を管理する」の項目で、`user` を ON にする ### ユーザーが Webhook の設定をできるようにする 管理 -> 権限 -> 以下の任意の項目で、`user` を ON にする - 着信統合の管理 - 独自の着信統合の管理 ### ユーザー名の表示を ID ではなく名前にする 管理 -> レイアウト -> ユーザインタフェース -> `実名を使用する` を ON にする ### API リミットを緩和 デフォルトでは60秒に10回リクエストがあると制限かかりますが、これを緩和しました。 管理 -> Rate Limiter -> API Rate Limiter -> レートリミッタのデフォルト呼び出し数
## 参考 URL - https://www.designet.co.jp/ossinfo/rocket.chat/rocket.chat_adminmanual/user.php - https://www.designet.co.jp/ossinfo/rocket.chat/rocket.chat_adminmanual/interface.php
Read more
2021/04/30
image
NO IMAGE
WSL2 への移行で、Windows の仮想マシン プラットフォーム機能を有効にして、BIOS で仮想化が有効になっていることを確認してください。のエラーが表示される
update
event_note
label
WSL
WSL から WSL2 に移行する際、タイトルのようなエラーが表示されました。
WSL2 自体のインストールは以下のページが参考になりました。 - https://docs.microsoft.com/ja-jp/windows/wsl/install-win10#step-4---download-the-linux-kernel-update-package - https://qiita.com/whim0321/items/ed76b490daaec152dc69 しかし、タイトルのようなエラーが表示され、一応他の項目も確認しましたが、 - BIOS の設定で `Virtualization Technology` は `Enable` にしている - Windows の機能の有効化や dism.exe を使って WSL や仮想マシンプラットフォームを有効に設定済み - タスクマネージャのパフォーマンスタブの CPU のパネルでは 「仮想化: 有効」 になってる - WSL1 は動いてる - Windows のリビジョンも WSL2 対応している となっており、最終的には `bcdedit` コマンドでの対応が必要でした。 コマンドプロンプトを管理者権限で起動し、以下を実行します。 ``` > bcdedit ``` 出力内容を見て、`hypervisorlaunchtype` が `Off` になっていたら以下のコマンドを実行して、`Off` から `Auto` に変更する必要があります。 ``` > bcdedit /set hypervisorlaunchtype auto ``` これで WSL2 が使えるようになりました。
## 参考 URL - https://let.blog.jp/article/24964692
Read more
2021/04/29
[Rocket.Chat] Webhook を使って通知する
update
event_note
label
rocketchat
定例ミーティングの時間になったら Rocket.Chat で通知したいなと思っていろいろ調べてみたら、Webhook と bot を使った方法があるみたいで、とりあえず Webhook を使って実現できそうなので試してみました。
## Incoming Webhook の設定を行う 管理メニュー > サービス連携 > Incoming で設定を行います。 以下のページを参考にさせてもらいました。 - https://qiita.com/sakazoo/items/79824125b3979871270e 画面下部に curl のコマンドが表示されるので、Linux ではそのコマンドを実行するだけで通知できます。 あとは cron などを使って実行するように設定すれば良いと思います。 ## Windows から通知する Windows の場合、表示されている curl のコマンドそのままでは動きませんでしたが、以下のコマンドで送信できることを確認しました。 ``` > curl.exe -X POST -H "Content-Type: application/json" -d "{\"text\":\"Example message\"}"
``` ``` > (Invoke-WebRequest -Uri
-Method POST -Body @{"text"="Example message"}).content ``` ## "Service Unavailable" が表示された 私の場合、Incoming WebHook の設定を有効にするのを忘れていました。 設定画面の一番上にあったのを見落としていました。 ## メンションの権限の設定 bot からの通知で `@all` `@here` のメンションを使用した場合、デフォルトだと `error-action-not-allowed` のエラーが返ってきます。 これは権限がないためなので、管理メニュー > 権限 より `mention-all` `mention-here` の権限を bot に与えれば OK です。
## 参考 URL - https://www.atmarkit.co.jp/ait/articles/1612/07/news011.html - https://win.just4fun.biz/?PowerShell/HTTP%E3%81%AEPOST%E3%82%92%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95 - https://www.designet.co.jp/ossinfo/rocket.chat/rocket.chat_adminmanual/user.php
Read more
2021/04/28
image
NO IMAGE
Redmine と GitLab の連携(ベアリポジトリの同期)
update
event_note
label
GitLab
label
Redmine
以前やったことあったのですぐに出来るかと思ったら、何故かはまってしまったのでメモ。
Redmine, GitLab どちらも Docker Hub にある公式イメージを使って動かしています。 ## 環境 - GitLab CE : 13.11.1 - Redmine : 4.0.8 Redmine は使用しているプラグインの都合上、最新バージョンではありません。 ## 前提 Redmine と GitLab の同期に必要になるプラグイン `redmine_github_hook` はインストールされている前提です。 ## やりたいこと GitLab にプッシュしたら Redmine のリポジトリも最新に更新したい(フェッチさせたい)。 fetch して同期させるだけなので、SSH とかは何も設定しません。 ## 設定 ### GitLab の設定 プロジェクトの設定で、WebHook の設定を行います。 Settings > Webhooks を選択し、URL を設定します。 例えば以下のようにです。 `http://example.com/github_hook?project_id=test&repository_id=test` ### Redmine 配下にベアリポジトリの作成 Redmine に Git のリポジトリを登録するには、ローカルにベアリポジトリを作成する必要があります。 そして、結果的にここが一番はまったのですが、Redmine の公式イメージでは、`redmine` というユーザーで Redmine が実行されるようなので、`redmine` のユーザーが書き込みできる箇所にリポジトリを作成するか、適切にパーミッションを設定してやる必要があります。 私はパーミッションの設定が面倒だったので、とりあえず `redmine` ユーザーのホームディレクトリにベアリポジトリを作成することにしました。 まずはコンテナに入ります。 ユーザーとして `redmine` を指定しています。 指定しなかったら `root` で入ってしまうので注意です。 ``` $ docker exec -it --user redmine <コンテナ名> bash ``` ここからはコンテナ内での作業です。 入った直後のパスは `/usr/src/redmine` になっていたので、ホームディレクトリに移動してからクローンします。 ベアリポジトリを作成したいので、`--bare` を指定します(`--mirror` でも可)。 ``` $ cd # ホームディレクトリに移動 $ pwd # 確認 /home/redmine $ git clone --bare <リポジトリのURL>``` あとは、Redmine のプロジェクトの設定画面でリポジトリを登録します。
## 参考 URL
Read more
2021/04/27
image
NO IMAGE
GitLab の Clone URL を変更する
update
event_note
label
GitLab
久々に GitLab の設定ではまったのでメモ。
## 環境 - gitlab-ce 13.11.0 ## GitLab の Clone URL を変更する GitLab のプロジェクトに Clone URL が表示されますが、ここの URL がおかしな値になっている場合の対処方法です。 `external_url` とか `gitlab_rails[‘gitlab_host’]` とかを変更云々という記事が見つかりましたが、それでは解決しませんでした。 そして、もっとシンプルに GUI で設定可能です。 管理画面に `Custom Git clone URL for HTTP(S)` という項目があるので、そこを変更すれば OK です。
## 参考 URL
Read more
2021/04/23
image
NO IMAGE
Ubuntu の Visual Studio Code で日本語が入力できない
update
event_note
label
Ubuntu
label
Visual Studio Code
Ubuntu 20.04 の vscode で、半角/全角ボタンを押しても日本語が入力できませんでした。
ググってみると、snap で vscode をインストールしていたのが原因っぽいです。 まず snap で vscode をアンインストールし、 ``` sudo snap remove code ``` 以下から deb ファイルを取得してインストールしたら解決しました。 - https://code.visualstudio.com/download
## 参考 URL
Read more
2021/04/22
image
NO IMAGE
ruby の gem install で SSL のエラーが発生する
update
event_note
label
Docker
label
Redmine
label
Ubuntu
Redmine をプラグインのインストールまで自動化して docker で動かそうとしたら、ruby の gem install で SSL 関係のエラーが出て、かなりはまってしまいました。
試しに作成した Redmine 用の `Dockerfile` と `docker-compose.yml` の例は以下です。 Windows (WSL2 + Docker Desktop) だと上手くいきましたが、Ubuntu 20.04 だと `bundle install` で証明書関係のエラーが出ました。 ``` FROM redmine:4.2 # Git SSL認証チェックを無効にする ENV GIT_SSL_NO_VERIFY=1 # プロキシ設定 ENV http_proxy=http://example:8080 ENV https_proxy=http://example:8080 # プラグインのダウンロード RUN git clone --depth 1 https://github.com/pinzolo/redmine_persist_wfmt ./plugins/redmine_persist_wfmt ``` ``` version: '3.1' services: redmine: image: myredmine:4.2 build: . container_name: myredmine restart: always depends_on: - mysql ports: - 3000:3000 environment: REDMINE_DB_MYSQL: mysql REDMINE_DB_PASSWORD: example REDMINE_PLUGINS_MIGRATE: "true" http_proxy: http://example:8080 https_proxy: http://example:8080 volumes: - files:/usr/src/redmine/files mysql: image: mysql:5.7 container_name: redmine-mysql command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci restart: always environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: redmine http_proxy: http://example:8080 https_proxy: http://example:8080 volumes: - mysql:/var/lib/mysql volumes: files: mysql: ``` `docker-compose up` を実行すると以下のエラーが出て止まりました。 ``` myredmine | Bundler can't satisfy your Gemfile's dependencies. myredmine | Install missing gems with `bundle install`. myredmine | The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x64-mingw32, x86-mswin32. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x64-mingw32 x86-mswin32`. myredmine | The dependency ffi (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x64-mingw32, x86-mswin32. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x64-mingw32 x86-mswin32`. myredmine | Fetching source index from https://rubygems.org/ myredmine | Retrying fetcher due to error (2/4): Bundler::HTTPError Could not fetch specs from https://rubygems.org/ ``` ググると、最新の証明書をインストールしたら解決する的な記事が見つかります。 - https://the-oreno-michi.com/72/ - https://qiita.com/hirokishirai/items/7579eaad5132a8e48975 - https://qiita.com/saya9875/items/b911b26f3b3a1b970d2f しかし、私の場合これらでは解決せず、証明書関係をいろいろ見直しても解決せず、途方に暮れていたところ、以下の記事で解決しました。 - https://askubuntu.com/questions/1231799/certificate-error-after-upgrade-to-20-04 会社のプロキシ環境下で環境を構築しているのですが、Ubuntu 20.04 では CA 証明書の要求バージョンが上がっており、会社の証明書じゃ弱すぎるためにエラーが出ているっぽいです。 そして、openssl の設定を上記の記事のように変更すると一応回避可能なのですが、それだけではなく、Redmine の docker コンテナ内でも同じように openssl の設定を変更することで、やっとエラーが表示されなくなりました。 いや、めっちゃはまったわ~。
## 参考 URL - https://askubuntu.com/questions/1231799/certificate-error-after-upgrade-to-20-04
Read more
2021/04/21
image
NO IMAGE
WSL2 で動かしている Docker Desktop が重い
update
event_note
label
Docker
タイトルの通りで、ちょっとコマンド打っただけでもレスポンスが遅い。
どうやら Windows 上で実行するとファイルシステムの変換が発生するから遅いそうです。 - https://qiita.com/BlueBaybridge/items/c1adcf1dab5da2b40b4f 確かに、WSL2 上ではサクサクでした。 というわけで、WSL2 と Docker Desktop を使う場合、記事のとおり `Dockerfile` や `docker-compose.yml` は WSL 側に配置して、Visual Studio Code と Remote-WSL を使うのが良いですね。
## 参考 URL - https://qiita.com/BlueBaybridge/items/c1adcf1dab5da2b40b4f
Read more
2021/04/05
image
NO IMAGE
snap のデーモン起動とソフトウェアのインストール
update
event_note
label
Linux
久しぶりに Linux を使うと、新しいパッケージ管理システムで snap というのがあるのを知ったのですが、ちょっとはまったのでメモ。
## 環境 - Ubuntu 20.04 ## ソフトウェアのインストール RocketChat をインストールしたかったので、以下のコマンドを実行しました。 ``` $ sudo snap install rocketchat-desktop ``` すると、以下のエラーが表示されました。 ``` error: cannot communicate with server: Post http://localhost/v2/snaps/rocketchat-desktop: dial unix /run/snapd.socket: connect: no such file or directory ``` 調べてみると、`snapd` が起動していないようなので、`snapd` を起動してみます。 ``` $ sudo systemctl start snapd.service ``` 今度は以下のエラーが出ました。 ``` Failed to start snapd.service: Unit snapd.service is masked. ``` `masked` と表示されたので、`unmask` しました。 ``` $ sudo systemctl unmask snapd.service Removed /etc/systemd/system/snapd.service. ``` そしたら `snapd` を起動できてインストールできました。 ``` $ sudo systemctl start snapd.service $ sudo snap install rocketchat-desktop rocketchat-desktop 3.0.1 from Rocket.Chat (rocketchat✓) installed ```
## 参考 URL - https://ja.stackoverflow.com/questions/67977/snapd%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%82%92%E8%A7%A3%E6%B1%BA%E3%81%97%E3%81%9F%E3%81%84-cannot-communicate-with-server - https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units-ja
Read more
2021/03/19
image
NO IMAGE
プログラムから C:\Windows\System32 にアクセスできない
update
event_note
label
Windows
プログラムで Windows のイベントログをコピーする際、パスとして `C:\Windows\System32\winevt\Logs\Application.evtx` を指定しても見つからないとエラーになりました。
どうやら 64 bit の Windows で 32bit アプリケーションを動作させている場合、`C:\Windows\System32` へのアクセスは `C:\Windows\SystemWOW64` にリダイレクトされてしまうそうです。 この場合、`System32` ではなく `Sysnative` を指定する必要があるみたいです。 上記のイベントログであれば、`C:\Windows\System32\winevt\Logs\Application.evtx` のように指定すればコピーできました。 ちなみに上記のファイルをコピーするためにはアプリケーションを管理者権限で実行する必要があります。
## 参考 URL - https://stackoverflow.com/questions/2958081/anyone-know-why-i-cant-access-the-winevt-folder-programmatically-in-c - https://nishiohirokazu.hatenadiary.org/entry/20150220/1424413124
Read more
2021/03/17
jQuery Keypad を使ってみた
update
event_note
label
JavaScript
label
Vue.js
キーボードがない環境での操作にも対応するため、ソフトウェアキーボードを実装することになったので、jQuery Keypad というものを使ってみました。
選定理由は一番簡単に導入できそうだったからです。
ダウンロード方法や使い方は以下で簡単に説明されていました。 - https://qiita.com/solabito331/items/f06d613c166e2bed2839 ## 表示/非表示用のボタンを用意 デフォルトではフォーカスした際に jQuery Keypad が表示されますが、キーボードで入力したい人にとっては邪魔だと思うので、jQuery Keypad 表示用のボタンを用意し、必要な人だけが表示できるようにしてみました。 具体的には、`showOn` を空文字にし、表示ボタンを押したときに表示するようにしています。 また、表示ボタンを連打するとテンキーが表示されたまま閉じれなくなってしまったので、ボタンの連打対策だけしておきました。 以下サンプルコードです。 ```html
表示
``` ```js $('#inputKeypad').keypad({ showOn: '', showAnime: 'blind', duration: 'fast', keypadOnly: false, }); ``` ```js var keypadFlag = false; function showKeypad(){ if (!keypadFlag) { keypadFlag = true; // ボタン連打対策として、一定時間後にフラグを落とす setTimeout(function(){ keypadFlag = false; }, 500); if ($(".keypad-popup").css('display') == 'block') { // 表示されている場合の処理 // ※フォーカスが外れた時点で非表示になるので、明示的に非表示にしなくてもよい? //$('#inputKeypad').keypad('hide') // Hide the keypad } else { // 非表示の場合の処理 $('#inputKeypad').keypad('show') // Show the keypad } } } ``` ## type="number" への対応 jQuery Keypad は `type="number"` の `input` には対応しておらず、キーを押したときの入力内容が思っていたような動作になりません。 そこで、`0~9` `+` `-` のボタンを独自で定義して無理矢理対応させました。 ```js // keypad は type="number" の input に対応していないため、数値ボタンをカスタムで追加して無理矢理対応する var customNumberKeys = [ ['ZERO', 'zero', 0], ['ONE', 'one', 1], ['TWO', 'two', 2], ['THREE', 'three', 3], ['FOUR', 'four', 4], ['FIVE', 'five', 5], ['SIX', 'six', 6], ['SEVEN', 'seven', 7], ['EIGHT', 'eight', 8], ['NINE', 'nine', 9] ]; customNumberKeys.forEach(customNumberKey => { $.keypad.addKeyDef(customNumberKey[0], customNumberKey[1], function (inst) { this.val(this.val() + String(customNumberKey[2])).focus(); }); }); $.keypad.addKeyDef('MINUS', 'minus', function (inst) { let val = Number(this.val()) if (val > 0) { this.val(val * -1).focus(); } }); $.keypad.addKeyDef('PLUS', 'plus', function (inst) { let val = Number(this.val()) if (val < 0) { this.val(val * -1).focus(); } }); $('#inputKeypad').keypad({ showOn: '', showAnime: '', duration: 'fast', keypadOnly: false, closeText: '閉じる', closeStatus: '', clearText: 'クリア', clearStatus: '', zeroText: '0', zeroStatus: '', oneText: '1', oneStatus: '', twoText: '2', twoStatus: '', threeText: '3', threeStatus: '', fourText: '4', fourStatus: '', fiveText: '5', fiveStatus: '', sixText: '6', sixStatus: '', sevenText: '7', sevenStatus: '', eightText: '8', eightStatus: '', nineText: '9', nineStatus: '', minusText: '-', minusStatus: '', plusText: '+', plusStatus: '', layout: [ $.keypad.SEVEN + $.keypad.EIGHT + $.keypad.NINE + $.keypad.CLOSE, $.keypad.FOUR + $.keypad.FIVE + $.keypad.SIX + $.keypad.CLEAR, $.keypad.ONE + $.keypad.TWO + $.keypad.THREE, $.keypad.MINUS + $.keypad.ZERO + $.keypad.PLUS ], }); ```
※デザインは変更しています(後述) ## デザインの調整 デフォルトのデザインがちょっとダサいので、Bootstrap に合わせてちょっとだけ修正しました。 ```css /* キーパッド */ .keypad-popup { /* 線が太くて濃くてダサいので、bootstrap に合わせる */ border: 1px solid #dee2e6; } .keypad-special, .keypad-key { /* 線が太くて濃くてダサいので、bootstrap に合わせる */ border: 1px solid #dee2e6; /* border を細くしたので、ちょっとだけ広げる */ padding: 4px; } .keypad-close { /* bootstrap の success に合わせる */ background-color: #28a745; } .keypad-clear { /* bootstrap の danger に合わせる */ background-color: #dc3545; } .keypad-back { /* bootstrap の primary に合わせる */ background-color: #007bff; } .keypad-shift { /* bootstrap の info に合わせる */ background-color: #17a2b8; } .keypad-spacebar { /*デフォルトは 13.25em だけど、keypad-tab を 2em 大きくしたので、その分小さくする */ width: 11.25em; } .keypad-tab { /*デフォルトは 2em だけど小さいので大きくする*/ width: 4em; } /* キーパッド(独自追加分) */ .keypad-zero, .keypad-one, .keypad-two, .keypad-three, .keypad-four, .keypad-five, .keypad-six, .keypad-seven, .keypad-eight, .keypad-nine, .keypad-ten, .keypad-plus, .keypad-minus { /* keypad-key に合わせる */ width: 2em; } ```
## vue.js で v-model と共存させる 私は部分的に vue.js を使っていますが、jQuery Keypad で入力した値が `v-model` でバインディングした変数に反映されていませんでした。 どうやら、この手の入力補助 UI を使う場合、`input` イベントを発火させないといけないようです。 とりあえず jQuery Keypad の `onClose` でイベントを発火するようにしたら上手くいきました。 ```js $('#inputKeypad').keypad({ showOn: 'focus', showAnime: 'blind', duration: 'fast', keypadOnly: false, onKeypress: null, onClose: function () { var evt = document.createEvent('HTMLEvents'); evt.initEvent('input', true, false); this.dispatchEvent(evt); } }); ``` 試していませんが、`onKeypress` で発火するようにすればリアルタイムで同期がとれそうです。 ## 参考 URL - https://qiita.com/solabito331/items/f06d613c166e2bed2839 - https://qiita.com/kawasima/items/d052d0f4565c7f0a7492 - https://chi-bd.hatenadiary.org/entry/20170723/1500796421
Read more
2021/02/27
image
NO IMAGE
EFCore で SQL コマンド実行時のタイムアウト時間を設定する
update
event_note
label
Entity Framework Core
SQL コマンドを実行時のタイムアウト時間を変更する方法です。既定値は30秒です。
## 環境 - Entity Framework Core 2.2 ## サンプルコード ```cs using (var context = new HogeDbContext(hogeDbContextOption)) { context.Database.SetCommandTimeout(60); // Do something } ```
## 参考 URL - https://redwarrior.hateblo.jp/entry/2018/01/11/090000
Read more
2021/02/08
image
NO IMAGE
[C#] Interlocked.CompareExchange を使って排他制御を行う
update
event_note
label
C#
排他制御を行う際、`Monitor.TryEnter` と `async/await` を使用すると上手く動作しなかったので調べていたところ、`Interlocked.CompareExchange` を使ってもっと簡単かつ安全に実装できることがわかったのでメモしておきます。
参考にしたのは以下のページです。 https://zrsbqzz4wu6limdjn6cnjegmw4--stackoverflow-com.translate.goog/questions/21410320/monitor-tryenter-doesnt-work やりたいこととしては、複数のスレッドから同時実行される可能性のある処理について、既にその処理を実行中の場合は即エラーを返したい(ロックが解放されるのを待たない)というものです。 ## サンプルコード ``` if(Interlocked.CompareExchange(ref running, 1, 0) != 0) { // ロック取得失敗 return; } try { // 時間のかかる処理 await Task.Delay(TimeSpan.FromSeconds(5)); } finally { // ロックの解放 Interlocked.Exchange(ref running, 0); } ```
## 参考 URL - https://zrsbqzz4wu6limdjn6cnjegmw4--stackoverflow-com.translate.goog/questions/21410320/monitor-tryenter-doesnt-work
Read more
2021/01/15
image
NO IMAGE
[Vue.js] データを変更したときに画面が更新されない
update
event_note
label
Vue.js
`Vue.js` でデータを変更したのに画面が更新されず、はまったのでメモ。
## 配列やオブジェクトを直接変更している `Vue.set` を使う必要があります。 - https://jp.vuejs.org/v2/guide/reactivity.html#%E5%A4%89%E6%9B%B4%E6%A4%9C%E5%87%BA%E3%81%AE%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85 ## Vue がネストしている 今回私がはまったのはこちらでした。 ネストしていると子供側が上手く動作しないようです。 - https://gist.github.com/xl1/fa72b71e775c7ffd5788 私はネストしないように変更して対応しました。
## 参考 URL - https://qiita.com/bobu_web/items/ec5a98d03758d12ad721 - https://gist.github.com/xl1/fa72b71e775c7ffd5788 - https://note.com/ojk/n/nf41aeaf12307
Read more
2021/01/14
image
NO IMAGE
GitLab の Artifacts を削除する PowerShell スクリプト
update
event_note
label
GitLab
label
PowerShell
.gitlab-ci.yml で `expire_in` を設定すれば、古い artifacts が自動で削除されるようになりますが、`expire_in` を設定する前の既存の artifacts は削除されません。
その古い artifacts が大量にある場合、手動で削除していくのは大変なので、API を使って一括で削除する PowerShell スクリプトを作成してみました。 使用は自己責任でお願いいたします。 ``` $project_id=??? $token="???" $server="http://example.com/" for($page=1; $page -lt 50; $page++) { $url = "${server}api/v4/projects/${project_id}/jobs?scope[]=success&scope[]=manual&per_page=100&page=${page}" Write-Host "Get Jobs ${url}" $json = Invoke-RestMethod -Headers @{ "PRIVATE-TOKEN"="${token}" } -Uri "${url}" foreach($job in $json) { $job_id = $job.id Write-Host "Erase job_id=${job_id}" $json = Invoke-RestMethod -Method Delete -Headers @{ "PRIVATE-TOKEN"="${token}" } -Uri "${server}api/v4/projects/${project_id}/jobs/${job_id}/artifacts" } } ```
## 参考 URL - https://forum.gitlab.com/t/remove-all-artifact-no-expire-options/9274/10
Read more
2021/01/13
image
NO IMAGE
NuGet への push で 406 が返ってくる
update
event_note
label
IIS
IIS で動かしているプライベートな NuGet サーバーにプッシュした際、406 のエラーコードが返ってきました。
今回の場合、IIS で基本認証をするように変更した直後だったので、セキュリティ周りだろうと思って調べたら、サーバーへの書き込み権限がないのが原因だったようです。 以下で直りました。 - `wwwroot` のフォルダを右クリックし、「セキュリティ」のタブを選択 - `IIS_IUSRS` のユーザーに変更と書き込みの権限を追加 - Web サイトを再起動
## 参考 URL - https://forum.uipath.com/t/error-406-not-acceptable-troubleshoot-steps/67604
Read more
2021/01/12
IIS で basic 認証を設定する
update
event_note
label
IIS
単に .htaccess を置くだけではだめでした。
## 環境 - IIS 10 ## 設定方法 ### 基本認証のインストール デフォルトでは基本認証を行うための機能がインストールされていないので、それを設定します。 「Windows の機能の有効化または無効化」より、以下にチェックを入れます。 `インターネット インフォメーションサービス` > `World Wide Web サービス` > `セキュリティ` > `基本認証`
### basic 認証の有効化 #### まずは Web サイト全体の認証を無効化 全体の匿名認証を無効にしないと、基本認証を有効に設定しても認証画面が出てきません。 - 左側のメニューでサイト名(Default Web Site など)を選択し、`認証` をダブルクリック - `匿名認証` を選択し、右側のメニューで `無効にする` をクリック #### basic 認証したいフォルダの基本認証を有効化 - 左側のメニューで基本認証を設定したいフォルダを選択し、`認証` をダブルクリック - `基本認証` を選択し、右側のメニューで `有効にする` をクリック ### 既定のドメインを設定 - `基本認証` を選択し、`編集` をクリック - 既定のドメインを設定する
## 参考 URL - https://webbibouroku.com/Blog/Article/iis-basic - https://www.chima-chimao.com/entry/iis-basic-auth - https://www.it-swarm-ja.tech/ja/iis/%E5%9F%BA%E6%9C%AC%E8%AA%8D%E8%A8%BC%E7%94%A8%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F/971536053/
Read more
2021/01/05
PowerShell で ActiveDirectory の操作を行う
update
event_note
label
PowerShell
PowerShell で `Get-ADOrganizationalUnit` を実行した場合に `CommandNotFoundException` が表示されました。 PowerShell で ActiveDirectory の操作を行うには以下の準備が必要なようです。
## 環境 - Windows 10 Pro - PowerShell 5.1.18362.1171 ## Windows 10 用のリモート サーバー管理ツールのインストール 以下のコマンドを PowerShell で実行して、`ActiveDirectory` が見つからない場合はリモートサーバー管理ツールのインストールが必要です。 ``` Get-Module -listavailable ``` インストール方法は以下です。 - スタートメニューや設定画面より「オプション機能」で検索 - 「オプション機能の追加」>「機能の追加」>「RSAT: Active Directory Domain Services およびライトウェイト ディレクトリ サービス ツール」をインストール
## コマンドの実行 以下のように、`import-module activedirectory` を実行してからコマンドを実行します。 ``` Import-Module activedirectory Get-ADOrganizationalUnit -Filter "*" ```
## 参考 URL - https://www.sapien.com/forums/viewtopic.php?f=21&t=8175&sid=f91d70fb4a8ad896815251278d628ffd - https://www.it-swarm-ja.tech/ja/powershell/%E3%80%8Cgetaduser%E3%80%8D%E3%81%A8%E3%81%84%E3%81%86%E7%94%A8%E8%AA%9E%E3%81%AF%E3%80%81%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%AC%E3%83%83%E3%83%88%E3%81%AE%E5%90%8D%E5%89%8D%E3%81%A8%E3%81%97%E3%81%A6%E8%AA%8D%E8%AD%98%E3%81%95%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82/1041204739/ - https://www.it-swarm-ja.tech/ja/active-directory/importmodule%EF%BC%9A%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AB%E6%9C%89%E5%8A%B9%E3%81%AA%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%89%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%9F%E3%82%81%E3%80%81%E6%8C%87%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%9F%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB-%27activedirectory%27%E3%81%AF%E3%83%AD%E3%83%BC%E3%83%89%E3%81%95%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%81%A7%E3%81%97%E3%81%9F/1041790669/
Read more
新しい投稿
前の投稿
ホーム
Translate
Popular Posts
TortoiseGit でコミットメッセージを変更する
image
NO IMAGE
TortoiseGit でブランチ間の差分を見る
image
NO IMAGE
[ASP.NET Core] 前のページ(遷移元)の URL を取得する
image
NO IMAGE
外部 DLL を NuGet パッケージに含める方法
image
NO IMAGE
[C#] SonarQube で .NET アプリケーションのコード解析を行う
image
NO IMAGE
[ASP.NET Core] Form value count limit 1024 exceeded のエラーが発生した
image
NO IMAGE
マージ元ブランチとマージ先ブランチ
TortoiseGit でリモートリポジトリのタグを削除する
image
NO IMAGE
C# で GitHub からリリースバージョンを取得する
[Jenkins] エラー 1069: ログオンに失敗したため、サービスを開始できませんでした。
Labels
.NET Core
31
.NET Framework
17
.NET Standard
2
AdminLTE
1
Apache
3
AppVeyor
2
AsciiDoc
3
ASP.NET Core
55
Atom
4
AWS
2
AWS Cloud9
4
blockdiag
1
Blogger
10
Bootstrap
3
C/C++
6
C#
106
CentOS
3
Chrome
1
Chronograf
3
Codecov
1
CSS
1
Docker
28
DokuWiki
4
Doxygen
1
draw.io
1
Electron.NET
2
Entity Framework Core
9
Excel
2
FFmpeg
2
Firefox
5
Git
12
GitBook
4
GitBucket
7
GitHub
7
GitLab
30
Go
1
Google
1
Google Cloud Platform
1
Grafana
5
HTML
5
IIS
8
InfluxDB
6
JavaScript
7
Jenkins
7
Linux
25
Log4View
1
MahApps.Metro
3
MaterialDesignInXamlToolkit
1
MVC
1
MVVM
6
NLog
3
Node.js
3
npm
1
OpenSSL
3
ownCloud
2
Pine Script
1
PlantUML
5
PowerShell
7
Prism
2
Python
11
Razor
3
Redmine
30
remark.js
2
rocketchat
4
Ruby
3
SignalR
1
Socket.IO
1
SonarQube
5
Sphinx
10
SQL Server
5
SQLite
1
t
1
TestLink
2
Tomcat
2
TortoiseGit
10
TortoiseSVN
2
Trading View
1
Travis CI
1
Ubuntu
13
Visual Studio
39
Visual Studio Code
9
Vue.js
8
Windows
56
Windows 10
4
Windows ADK
1
Windows API
2
Windows Embedded
4
wkhtmltopdf
2
Word
3
WPF
12
WSL
1
Xamarin
1
xUnit
5
アプリケーション
1
デザインパターン
1
テスト
3
バッチファイル
2
ぴよ
3
プログラミング
3
ライセンス
1
ラベル
3
ラベル1
2
英語
2
雑記
1
書籍
1
数学
1
正規表現
1
Blog Archive
►
2022
(1)
►
2月
(1)
▼
2021
(24)
▼
5月
(7)
NO IMAGE テスト
test
WSL2 + VSCode + Remote-Containers で Docker Desktop...
Rocket.Chat のバックアップとリストア
Rocket.Chat を docker で動かす
Redmine のアップデートとリストア
Rocket.chat の設定
►
4月
(8)
WSL2 への移行で、Windows の仮想マシン プラットフォーム機能を有効にして、BIOS で仮...
[Rocket.Chat] Webhook を使って通知する
Redmine と GitLab の連携(ベアリポジトリの同期)
GitLab の Clone URL を変更する
Ubuntu の Visual Studio Code で日本語が入力できない
ruby の gem install で SSL のエラーが発生する
WSL2 で動かしている Docker Desktop が重い
snap のデーモン起動とソフトウェアのインストール
►
3月
(2)
プログラムから C:\Windows\System32 にアクセスできない
jQuery Keypad を使ってみた
►
2月
(2)
EFCore で SQL コマンド実行時のタイムアウト時間を設定する
[C#] Interlocked.CompareExchange を使って排他制御を行う
►
1月
(5)
[Vue.js] データを変更したときに画面が更新されない
GitLab の Artifacts を削除する PowerShell スクリプト
NuGet への push で 406 が返ってくる
IIS で basic 認証を設定する
PowerShell で ActiveDirectory の操作を行う
►
2020
(60)
►
12月
(1)
►
11月
(3)
►
10月
(3)
►
9月
(3)
►
8月
(3)
►
7月
(7)
►
6月
(7)
►
5月
(2)
►
4月
(6)
►
3月
(6)
►
2月
(7)
►
1月
(12)
►
2019
(92)
►
12月
(13)
►
11月
(9)
►
10月
(3)
►
9月
(2)
►
8月
(3)
►
7月
(5)
►
6月
(11)
►
5月
(6)
►
4月
(17)
►
3月
(9)
►
2月
(6)
►
1月
(8)
►
2018
(100)
►
12月
(1)
►
11月
(11)
►
10月
(8)
►
9月
(6)
►
8月
(10)
►
7月
(10)
►
6月
(8)
►
5月
(9)
►
4月
(8)
►
3月
(14)
►
2月
(4)
►
1月
(11)
►
2017
(117)
►
12月
(14)
►
11月
(20)
►
10月
(17)
►
9月
(19)
►
8月
(10)
►
7月
(8)
►
6月
(3)
►
5月
(6)
►
4月
(5)
►
3月
(2)
►
2月
(8)
►
1月
(5)
►
2016
(91)
►
12月
(5)
►
11月
(9)
►
10月
(11)
►
9月
(9)
►
8月
(6)
►
7月
(14)
►
6月
(14)
►
5月
(11)
►
4月
(10)
►
3月
(2)
►
2015
(23)
►
12月
(4)
►
11月
(2)
►
10月
(8)
►
9月
(8)
►
7月
(1)
►
2013
(3)
►
11月
(1)
►
9月
(1)
►
7月
(1)
►
2012
(2)
►
7月
(1)
►
6月
(1)
►
2011
(1)
►
9月
(1)
►
2009
(1)
►
7月
(1)
►
2008
(2)
►
11月
(1)
►
7月
(1)
►
2007
(3)
►
10月
(3)