2020年 の投稿一覧

[Redmine] view customize pluginをインストールする

Redmineを利用していると、プラグインを入れるほどではないけど細かいちょっとした部分をカスタマイズしたい欲求に襲われることが毎日のようにあります。しかしRedmineのソース自体に手を入れてしまうとバージョンアップ時に移行が面倒なことになってしまう。そんな時に使うのがRedmine view customize pluginです。

原理はシンプルで、Redmineの指定したページにHTMLやCSS、JavaScriptを埋め込めるというだけの物です。データはすべてDBに保存されますのでバージョンアップ時に困ることもありません。

今回はインストールから簡単なカスタマイズを行うところまでをまとめます。
続きを読む

[Electron] Webの技術だけでWindowsやmacOS用のアプリを作成する

HTMLやJavaScriptだけでPC用のアプリが作成できるツールはいくつかありますが、その中でもVisualStudioCodeやSlackなどの実績があるElectronは検討候補から外せないでしょう。

1つのソースコードで複数のプラットフォーム用のアプリを同時に開発できるのは非常に魅力的です。
今回はElectronでHelloWolrd的なアプリを作成し、実際にWindowsやmacOSで動作する実行可能なファイルを作成するところまでをまとめてみます。
続きを読む

Microsoft?からブルートフォースアタックを受けた話

4連休の前半が間もなく終わろうとした22:30、晩ご飯を食べまったりと本を読んでくつろいでいたらスマホがブルブル震えるんですね。ソシャゲの体力でも回復したのかと思いしばらく放置していたのですが、そろそろ横になろうかと23:00ごろ手に取ると……Mackerel先生からCPU負荷94%突破のお知らせが(^q^)

連休中に君の名前は見たくなかったw

とはいえ見てしまったからにはしょうがないと諦め内容を確認すると、どうやら個人で利用しているWordpress用サーバが炎上なうの模様。何らかの記事がバズった?と思いダッシュボードにログインするけどアクセス数はいつもと変わらず。特定のプロセスが激重の可能性も考えたけど、突然そんなことになるとも思えず、何となしにApacheのアクセスログをtail -fで確認すると…。

xmlrpc.php」への大量のアクセスΣ(゚Д゚)

$ tail -f /var/log/httpd/access_log
70.132.61.91 - - [20/Sep/2020:22:41:09 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.143 - - [20/Sep/2020:22:41:09 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.95 - - [20/Sep/2020:22:41:10 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.147 - - [20/Sep/2020:22:41:10 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.143 - - [20/Sep/2020:22:41:10 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.81 - - [20/Sep/2020:22:41:10 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.144 - - [20/Sep/2020:22:41:10 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.91 - - [20/Sep/2020:22:41:10 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.97 - - [20/Sep/2020:22:41:10 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
70.132.61.95 - - [20/Sep/2020:22:41:10 +0900] "POST //xmlrpc.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"

(後述しますが上記のIPアドレスはCDNの物です)

これ以外のリクエストがほぼ見えない状態でログがガンガン流れてくのを呆然と眺めること数分。明らかにアタックを受けている。それも目の前で、リアルタイムに。はっと我に返りすぐさま対応せねばと思い至りTerminalに意識を戻します。……正直寝たいw
続きを読む

SSHで接続できない「Can’t assign requested address」エラーが発生した場合

小ネタです。
なぜか特定のサーバにSSHで接続できない現象が発生しました。他のサーバにはいつも通りに接続でき、DNSやサーバ自体の設定も特に変更していません。

$ ssh ec2-user@example.com -p 10022
ssh: connect to host example.com port 10022: Can't assign requested address

どうやらOpenVPNのクライアントを貧弱なネットワーク環境で使用したり、推奨されない操作をすると「ルーティングテーブル」がぶっ壊れることがちょいちょいあるようです。……思いっきり心当たりがあるw ちょうどこの現象が起こるちょっと前にフリーズしてkill -9 (OpenVPNクライアントのPID)したのでした。

というわけでルーティングテーブルをリセット(flush)します。

$ sudo ifconfig en0 down
$ sudo route flush
$ sudo ifconfig en0 up

これで無事につながるようになりました。めでたしめでたし。

続きを読む

[AWS] LigthsailにBitnami版Redmine4.1を構築する

新たにジョインしたプロジェクトでPM業務を担当することになりまして、古来から伝わりしRedmineを準備した際のメモです。……本当は今をときめくClickUpあたりを使いたかったんですが予算の兼ね合いで泣く泣くw Backlogは昔から肌に合わないのとカスタマイズが効かないので候補から外しました。

ゼロからRedmine環境を作るのは骨が折れるため、ボタン2〜3発でRedmineを起動でき、お値段的にも手頃なAWSのLightsailを利用して作成してみます。
続きを読む

[AWS] SESを利用しSMTPサーバの準備を行う

AWS SESを利用するとSMTPサーバが簡単に用意できます。EC2から利用する場合、無料枠が月間6.2万通まで用意されていますので、個人的な利用や小規模なプロジェクトであれば料金は気にしなくても良さそうです。

今回はSMTPサーバの準備をするところまでを取り上げます。
続きを読む

[Git] 1回の`git push`で複数のoriginに送信する

普段GitHubを利用しているのですが、たまにサービス毎落ちるんですよねw
大抵の場合は仕事を切り上げる理由になって良いのですが、取り急ぎpushだけでもしたいといった場合に困るわけです。VCSはバックアップも兼ねてますからね。

そんなときに普段から別のリポジトリを作成し、バックアップ用に毎回pushしておきます。
コマンドは以下の通り。

$ cd (作業ディレクトリ)
$ git remote set-url --add origin git@github.com:katsube/example.git

正常に登録されたか確認しておきます。1-2行目が最初からあるもの、3行目が新たに追加した物ですね。

$ git remote -v
origin  git@github.com:katsube/original.git (fetch)
origin  git@github.com:katsube/original.git (push)
origin  git@github.com:katsube/example.git (push)

あとはいつも通りgit pushすれば自動的に2箇所にpushしてくれます。

$ git push

ここでは両方GitHubを使っていますが、BitBucketGitLabはもちろん自分が管理するサーバなどのリポジトリに必要に応じて置き換えて実行してくださいませ。
続きを読む

Docusaurusでドキュメントを作成しGitHub Pagesへ公開する

facebookが開発しているDocusaurusドキュサウルスを利用すると、Markdownを書いてちょちょいと設定すればナウい感じのドキュメントを作成することができるという噂を聞きつけ、今回はインストールから簡単な設定を行い、GitHub Pagesへ公開するところまでを駆け足でたどります。

具体的な事例は公式サイトに一覧が掲載されていますが、facebook製だけあってReact関連のプロジェクトはほとんどがDocusaurusみたいですね。

なおDocusaurusには現行バージョンの1.x系と、開発中の2.x系がありますが、今回は1.x系を利用します。2系はコマンドや設定が異なりますのでご注意ください。
続きを読む

[Linux] yumで一度利用したパッケージをキャッシュする

小ネタです。
AnsibleのPlaybookを作成していたのですが、何度もyumで同じパッケージのインストールを繰り返していると、処理に時間はかかるしネットワーク利用量(利用料)もバカになりません。

そこで一度でも利用したパッケージはローカルにキャッシュするよう設定します。
続きを読む

「バロン」の肘パッドがラピュタのように崩壊したので交換した話

自宅では10年ほど前に購入したオカムラのオフィスチェア「バロン」を愛用しています。腰痛持ちなので椅子は良いものを使いたいと思い清水の舞台から飛び降りる覚悟で購入を決意し、メジャーどころのオフィスチェアを試座しまくったら最終的にバロンにたどり着きました。やはり日本人には日本メーカーのイスが相性良いのでしょうか?

※画像はメーカーサイトより

ここ10年はほぼノーメンテ、たまに掃除をするくらいでなんの故障や不具合の一つも無かったのですが、つい2ヶ月前ほど前から何の前触れもなく肘パッドに亀裂が入ってきました。最初はひとまずビニールテープで補修してごまかしたのですが、時間が立つほどに崩壊が進んでいくわけです。

最終的に下の素材が見えるレベルになりました。ラピュタのラストシーンを彷彿とさせる崩壊っぷりにさすがにまずいと思い一念発起。交換を決意したというわけです。

誰ですか、滅びの呪文を唱えたのは。先生怒らないから手をあげなさいヽ(`Д´)ノプンプン
続きを読む

[WordPress] 記事の更新日を表示する

小ネタです。
Wordpressで使っているテーマが記事の「公開日」だけしか表示してくれないので、「更新日」も表示するよう修正しました。

結論から言うと以下のようなコードをテーマに埋め込むだけです。

<span title="公開日">
  公開日:<time itemprop="datePublished" datetime="<?php the_time('c');?>"><?php the_time('Y-m-d');?></time>
</span>
<?php if( get_the_time('Ymd') !== get_the_modified_date('Ymd')){ ?>
  <span title="更新日">
    更新日:<time itemprop="dateModified" datetime="<?php the_modified_date('c');?>"><?php the_modified_date('Y-m-d'); ?></time>
  </span>
<?php } ?>

続きを読む

[HTML5] WebWorkerで並列処理を行う – 共有ワーカー編

前回はWebWorkerの中でも最もシンプルに並列処理を扱うことができる「専用ワーカー (Dedicated Worker)」について取り上げました。今回はiframeや他のウィンドウ(タブ)などから起動中のWorkerを利用することのできる「共有ワーカー(Shared Worker)」について取り上げます。

ページが違えど処理は共通と言った場合に利用すれば、クライアントのリソースの消費を抑えることが可能です。
続きを読む

[HTML5] WebWorkerで並列処理を行う – 専用ワーカー編

JavaScriptは非同期処理だから、複数同時に処理してるんでしょ?……と思っていた時期がありましたw JavaScriptの非同期処理とは時間のかかる処理の待ち時間で他のことをやってしまおうという物で、雑に言うなら実行する順番をコントロールする仕組みのことです。つまり並列処理とは異なる物。

本来の意味での並列処理を実装するための機能はWebWorkerで実装することができます。シンプルな仕様にまとめられているため簡単にJavaScriptでも並列処理を実現できます。WebWorkerにはいくつか種類があるのですが、今回は「専用ワーカー(Dedicated Workers)」について取り上げます。
続きを読む

[JavaScript] Bowser 2.xでOSやブラウザを判定する

Webブラウザの状況が目まぐるしく変わっている昨今、常にすべてのブラウザへ対応出来るとは限りませんよね。というか現実的に出来ませんw そこで対応しているブラウザかどうかをチェックするわけですが、この手の判定は陳腐化してしまう恐れがあるため、事情が無い限りはメンテナンスされているライブラリを使うべきです。

つい最近もiPadが「iOS」から「iPadOS」に変更になったと同時にSafariのUAが劇的に変化して痛い目をみましたw

今回はこの手の判定用のライブラリとしてはメジャーな「Bowser」の使い方をメモしておきます。ちなみにBowserって「スーパーマリオ」の「クッパ」のことなんですね。Bowserでググると意図せずクッパとの戦いになって困ってましたw


※このページの内容はいずれも執筆時点の物です。ドキュメントに無い情報はv2.10.0のソースコードを参考にしています。
続きを読む