スキップしてメイン コンテンツに移動

投稿

Visual Studio 2019で静的コード解析 (Static Code Analysis)

最近はVisual Studioも高機能になってきて簡単なコード解析機能はデフォルトで利用できるようになってきました。今回の記事で利用したVisual StudioはVersion 16.9.4です。 サーバー上に継続的にデータを蓄積しているわけではないので、指標の変化は追えませんが、プロジェクト内で改善の必要なファイルはある程度目星をつけられるのではないかと思います。 使い方は簡単で、最上部のメニューの「Analyze > Calculate Code Metrics > For Solution (またはFor {Project名})」を選択すると、コード解析が実行され、Code Metrics Rsultsウィンドウにproject > namespace > class > method の階層で解析結果が表示されます。 解析されるMetricsは下記になります。 Maintenability Index (メンテナンス指標) Cyclomatic Complexity (循環的複雑度) Depth of ingheritance (継承の深さ) Class Coupling (クラスの結合度) Lines of Souce code (コードの行数) Lines of Executable coce (実際に実行されるコードの行数。括弧、コメント、空行を除いた行数)

Dockerでコンテナ内のディレクトリを実ホストのディレクトリにマウントする設定

基本的にDockerのコンテナは使い捨てなので、永続化させたいデータはコンテナ外に置くことが多いと思います。Dockerでは、コンテナ内のディレクトリを実ホストのディレクトリにマウントする設定を入れることで、これを実現できます。 Dockerのコンテナを再起動しても、元のデータが残ります。特にDocker内でデータベースを使っている場合には、重要な設定になると思います。 またDockerのコンテナ内のアプリケーションの設定ファイルなどを、コンテナ外部のディレクトリに置く場合にも利用されます。 設定の書式は「コンテナの外のホストのディレクトリパス:コンテナ内のディレクトリパス」になります。 下記に設定例を示します。Redashで利用しているPostgressのデータベースのデータ本体をコンテナ外マウントした場合を想定しています。 volumes: # コンテナ外のディレクトリ:コンテナ内のディレクトリ - /usr/docker/redash/postgres/opt/postgres-data:/var/lib/postgresql/data

前日の日付が入ったファイルをLinuxコマンドで処理

ログファイルのバックアップなどで、日付の入ったファイルを扱うことも多いと思います。 dateコマンドを使って、前日の日付がファイル名に入ったファイルだけを処理する簡単なLinuxコマンドを紹介します。 下記のコマンドでは、dateコマンドにyesterdayと日付フォーマットを引数として渡し、当日が2021年2月25日の時に20210224.logのような書式のログファイルを、dir1からdir2へコピーすることができます。 #!/bin/bash cp -p /dir/*'date -d 'yesterday' +%Y%m%d'.log /dir2/

Linuxコマンドの組み合わせだけで、前日の日付がが入ったファイルのみgzip圧縮する方法

ログファイルなどでは日ごとにファイルを生成し、日付がファイル名に入っている場合があると思います。 前日までの日付のファイルをすべてgzipで圧縮するLinuxコマンドを紹介します。 注: コマンドの組み合わせは、もっと少なくできる方法もあるかもしれませんが、今回紹介したコマンドの組み合わせでも、たたき台にはなるかと思いますので、参考にしてみてください。 # /dir/ディレクトリはいかにある、拡張子がlogのファイルでかたファイル名に含まれる日付がコマンド実行時の前日のものをすべてgzip圧縮するコマンドの組み合わせ。 find /dir/ -type f -name "*.log" | sed 's/.*_\([0-9]*\)\.log/\1/` | awk -v date="$(date +%Y%m%d)" '{if ($0 < date) print $0}' | xargs -I {} find /dir/ -name "*{}.log" | xargs --no-run-if-empty gzip 簡単に解説です。 find /dir/ -type f -name "*.log" :dirディレクトリ配下で拡張子がlogのファイルをすべてリストアップ sed 's/.*_\([0-9]*\)\.log/\1/` :ファイル名から日付部分のみを抜き出し awk -v date="$(date +%Y%m%d)" '{if ($0 < date) print $0}' :コマンド実行時の前日の日付のみ抜き出し。ちなみにawkのvオプションで変数dateを定義しています。 xargs -I {} find /dir/ -name "*{}.log" :前日以前の日付が含まれる拡張子がlogのファイルをすべて取得。ちなみにxargsの -Iオプションの{}の部分で日付部分をfindコマンドに渡しています。 xargs --no-run-if-empty gzip :ファイルがなかったら実行しないというxargsのオプション...

Androidのホーム画面で左スワイプすると出現するGoogleのフィードを無効化する方法

Androidのホーム画面で左スワイプすると出現するGoogleのフィードが邪魔だったので、無効化してみました。Android 8.0 Oreo では下記の方法で変更できました。 Androidのホームスクリーンを長押し 使っているLauncherにもよりますが、Preferencesを選択 Home screenを選択 Scrolling modeで「Standard scrolling + Google」が選択されているので、「Standard scrolling」を選択 使っているスマートフォンのAndroidのバージョンやLauncherの種類にもよるので、「この手順で決まり」というのは中々いいづらいです。 肝は、ホームスクリーンを長押しして、ホーム画面の設定からそれらしい設定を見つけることでしょうか (例えば「Swipe to access Google app」とかの場合もあるようです)。

PHPのregister_shutdown_functionで登録した関数内でmemory_limitを増加させる

PHPで、特にメモリ不足のエラーが発生してプログラムが強制終了したときに、register_shutdown_functionに終了時に実行したい関数を登録することで、プログラム終了時にその登録した関数を実行することができます。 が、その登録した関数内の処理でメモリ不足になり、実行したかった処理が実行されないという問題に遭遇しました。 色々テストしたところ、register_shutdown_functionに登録した関数内でPHPのmemory_limitを増加させれば対応できることがわかりました。 といわけで現在のmemory_limitに任意のメモリ値を足すメソッドを作成してみました。 下記のsetAddedMemoryLimitByMegaByteメソッドは、引数にmemory_limitの増分を渡すことで、memory_limitの設定値を増加させることができます。 注意点として、作成したプログラム内のmemory_limitの許容フォーマットは こちら に書かれている情報に基づいて決めました。 今のプログラムは、256、128K、1024M、3Gなどは正しく処理可能です。 メモリサイズの設定値なので、そこまで変な値が設定される可能性は少ないですが、もし今のプログラムで処理できない場合は、convertMemoryLitAsByteValue内のmemory_limitをパースしている正規表現部分を修正することで対応できます。 class PHPUtils { public static function setAddedMemoryLimitByMegaByte($addition) { $current = ini_get('memory_limit'); if($current == -1) { return; } try { ini_set('memory_limit', self::calcAddedMemoryAsMegaByte($current, $addition))...

VIsual StudioでGitHubと連携

VIsual Studio上でGitHubと連携をさせるには、 GitHub Extension for Visual Studio が便利です。 最近は GitHub Desktop とかも提供されていて、バージョンコントロールでどのツールをメインで使うか悩みどころです。