技術メモ、Tips、忘備録

技術系のメモ、試してみたこと、その他

最近思うけどjavaのsetterがvoidなのって失敗だよなぁ

getterに関して思うこともありますが、それはまたいつか

javaのsetterメソッドって、こんな感じで自クラスを返した方が良かったんじゃないか?というお話


class Main {
    public static void main(String[] args) throws Exception {
        Sub sub = new Sub()
            .setValue1("1")
            .setValue2("2");
    }
}

class Sub{
    private String value1;
    private String value2;

    public Sub setValue1(String value1) {
        this.value1 = value1;
        return this;
    }

    public Sub setValue2(String value2) {
        this.value2 = value2;
        return this;
    }
}

そもそもsetterなのに自クラスを返すのは、メソッドの責任範囲がおかしいとか、
java Bean仕様に則ってないのでよくないとかいろいろあるとは思います。が、ですね

オブジェクト指向ってそもそも内包されているデータに対してメソッドで操作を行うものじゃないですか
だから、「setterを使った後は、今セットした値に対して、処理を行うメソッドを呼び出す」という操作は必ず発生すると思うのですね
逆に、setter呼んだのに何もしない、っていうのは無く、もしそんな状況があったとしたら多分設計がおかしいと思うのですよ

まあそんな根拠です。
setterはpublic void setXX()っていうのはもうデファクトスタンダードですし、Bean仕様なくらいなので今更どうすることもできないのですが

cmdでwhereして見つかったものののパスをクリップボードに保存したい

タイトル通りです
調べるのも面倒なので作りました。
何かと便利(意外とよく使う)
get.bat

@echo off
@chcp 65001 > nul

rem "パスが通ってるファイルのフォルダパスをクリップボードにコピーする"

if "%1"=="" (
    echo パスが通ってるファイルのフォルダパスをクリップボードにコピーする
    exit /B 0
)

where /Q %1

if "%ERRORLEVEL%"=="0" (
    setlocal ENABLEDELAYEDEXPANSION
        for /F "delims=" %%i in ('where %1') do (
            echo %%~dpi
            set /P <NUL="%%~dpi" | clip
        )
     endlocal
) else (
    echo ファイルが見つかりません
)

■動かしみる

C:\>echo dummy|clip

C:\>powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Try the new cross-platform PowerShell https://aka.ms/pscore6

PS C:\> Get-Clipboard
dummy

PS C:\> exit

C:\>where sakura
C:\Program Files (x86)\sakura\sakura.exe

C:\>get sakura
C:\Program Files (x86)\sakura\

C:\>powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Try the new cross-platform PowerShell https://aka.ms/pscore6

PS C:\> Get-Clipboard
C:\Program Files (x86)\sakura\
PS C:\>

バッチはオーバーヘッドが少ないのでやっぱりいいですね。 Powershellももう少し気楽に使えるようになることを願います。

コマンドプロンプトでtasklistのヘルプ見たら、日本語と英語で違ってた

※提供されている機能が違うという話ではなく、単に日本語版のヘルプの説明が間違ってたという話です

■比較
分かりづらいですが、日本語版の方はつづりを間違えています。このヘルプ通りにしても動きません。
f:id:monkey999por:20201030131728p:plain

こういうのって報告すべきなのかな。

【Ubuntu】rmとかmvとか直接使うの怖いからwindowsのごみ箱的なコマンド作った

できたものがこちら。
github.com

バックアップとってから削除 or 移動します。
少し説明しますと、

1.ファイル名に日付を付与して、もともとの階層がわかるようにしてバックアップ
2.対象の削除 or 移動
3.バックアップ後の表示

という感じです。

 #!/bin/bash

# like a windows dust box
# if delete file or directory, move dust box directory
function dust () {

    local here=$(pwd)
    if [ -z ${DUSTBOX} ]; then
        echo not defined '$DUSTBOX'
        return
    elif [ -z ${1} ]; then
        echo "it has no argument"
        echo "syntax: \$dust {File or Directory}"
        return
    fi
    
    #バックアップするパスを取得
    #echo $(dirname $(pwd)${1} |sed "s/^\///g")
    local backup_path=$(dirname ${1})
    for p in ${backup_path//\/ }; do
        cd $p
    done

    #バックアップ先ディレクトリ
    backup_path=${DUSTBOX}/$(pwd | sed "s/^\///g" )
    mkdir -p ${backup_path}

    #削除対象
    local remove_target="$(pwd)/$(basename ${1})"
    echo "remove target: ${remove_target}"
    
    # back up file name
    local bk_file_name="$(basename ${remove_target}_$(date "+%Y_%m_%d_%H_%M_%S"))"
    echo "back up: ${backup_path}/${bk_file_name}"

    if [ -h "${1}" ]; then
        cp --attributes-only "${1}" "${DUSTBOX}/"
        rm -f "${1}"
    elif [ -f "${remove_target}" ]; then
        cp -f "${remove_target}" "${backup_path}/${bk_file_name}"
        rm -f "${remove_target}"
    elif [ -d "${remove_target}" ]; then
        cp -rf "${remove_target}" "${backup_path}/${bk_file_name}"
        rm -r "${remove_target}"
    else 
        echo -e "can't delete this. it is not file or directory or symbolic link.\nuse \"rm\" command."
    fi
    echo -e "\n"
    tree ${backup_path}

    cd "${here}"

}

実行結果はこんな感じ
f:id:monkey999por:20201025221433p:plain

【Windows Terminal】右下にキャラクターを表示させる【海外でよくある】

どんなやつ?

こんなやつです。
f:id:monkey999por:20201023170852p:plain

1.画像の用意

まずは透過画像の用意です。Transparent animeとかでググるといいでしょう。
わたしはここを使わせていただきましたm(__)m

こんな感じでいくつかダウンロード!
上記のサイトからダウンロードする場合、リサイズして200pxくらいがちょうどいいです。
f:id:monkey999por:20201023171627p:plain

2.setting.jsonの書き換え

以下のように書き換えます。透過率は0~1の間でいじってみてください。

// ファイルのパス。使用可能な拡張子は`.jpg`、`.png`、`.gif `。
"backgroundImage": "%USERPROFILE%\\Documents\\my_contents\\Transparent_image_with_wt\\item\\1.png",

// 背景画像のストレッチ モード。元の画像をそのままのサイズで使用
"backgroundImageStretchMode": "none",

// 背景画像の配置。右下
"backgroundImageAlignment": "bottomRight",

// 背景画像の不透明度。0~1の間で設定。0に近いほど透明。
"backgroundImageOpacity": 0.8

そして起動。完成です。

3.表示する画像をランダムにしてみる

ここまでの内容だと画像が固定されてしまっているので、ちょっとつまらないです。ランダムにしてあげましょう。
調べてみた感じwindows terminalにそのような設定は無さそうだったので、ちょっと工夫します。

仕組み

1.読み込み先の画像パスを固定

"backgroundImage": "%USERPROFILE%\\Documents\\my_contents\\Transparent_image_with_wt\\main.png",

2.以下のようなバッチを用意。 ※2020/10/24追記..実行時に画面に文字が出ないように修正

@chcp 65001 > nul
@pushd %~dp0

@rem windows terminalが読み込む画像パスにランダムで画像を配置する

@set /a n=0
@for  %%A in (..\Transparent_image_with_wt\item\*) do @if exist %%A ( @set /a n=n+1 )

@rem 最初のランダムは使えない
@echo %RANDOM% > nul

@set /a R=(%RANDOM%*%n%/32768)+1

@copy /Y ..\Transparent_image_with_wt\item\%R%.png ..\Transparent_image_with_wt\main.png > nul

@wt

3.上記のバッチにパスを通す
4.windows terminalを起動するとき、はwin+rでランチャー起動⇒作成したバッチファイル名を入力しエンター。

何回か試してみます。
f:id:monkey999por:20201023175024p:plain
f:id:monkey999por:20201023175059p:plain
f:id:monkey999por:20201023175344p:plain

まだ画像が少ないんでかぶる率も高いですが、動作はOKですね!
あとは起動時に一瞬コマンドプロンプトが表示されるのが少し嫌ですが、まあ良しとしましょう。
読んでいただきありがとうございました。

参考

Anime transparent background PNG cliparts free download | HiClipart
Windows ターミナル プロファイルの設定 | Microsoft Docs

【効率的にググる】Chromeの検索窓から、amazonやgithubの検索エンジンを使用するショートカット

前置き

私もついさっき知りました。タイトルのような便利な機能があったなんてまったく知らなかった。。
サクッとやり方だけ説明します。

使い方

例: amazomで検索する場合

  1. Google Chromeを開く
  2. 左上の検索欄にamazon.co.jpと入力後、Tabキーを押す
  3. 以下のような表記になるので、調べたいワードを入力してエンター。
    f:id:monkey999por:20201012122500p:plain
    検索窓
  4. 試しにこたつで検索すると、amazonの検索結果が表示されます。
    めっちゃくちゃ簡単かつ便利な機能ですね!
    f:id:monkey999por:20201012123128p:plain
    Amazon検索結果 - こたつ

利用可能な検索エンジンについて

chrome://settings/searchEnginesに定義されているものが検索可能なようです。
私の場合はこんな感じです。
f:id:monkey999por:20201012124019p:plain
キーワードChromeの検索窓に入力する文字で、クエリURLが実際にリクエストするURLのようですね。

ほかの例だと、例えば、
Github.com
  ⇒ Githubでプロジェクト検索
translate.google.com
  ⇒ 入力した文字をGoogle翻訳の翻訳結果を表示
youtube.com
  ⇒ youtubeで動画を検索

となります。

以上になります。
読んでいただきありがとうございました。

参考

Set your default search engine - Computer - Google Chrome Help
Chrome のキーボード ショートカット - パソコン - Google Chrome ヘルプ

【Windows Terminal】起動時のシェルをWSL2(またはその他のシェル)に変更する

2020/10/23 追記

以下の記事は誤りです。(正確には誤りではないですが、やり方としては正しくないです。)追記した以下の内容が正しいです。
タイトルのことはWindows ターミナルのグローバル設定 | Microsoft Docsに記載の方法でできます。
私の場合はUbuntuにしたかったので、setting.json"defaultProfile"をwsl2のguidに変更します。
ドキュメントをちゃんと読まないとダメですね。

前置き

タイトルの通りです。使ってますか?Windows Terminal

こんな風にいろんなシェルをペインで分けて使ったり、プロンプトを好きにカスタマイズしたりして使う、軽量なシェルクライアントです。

f:id:monkey999por:20201006161330p:plain
https://docs.microsoft.com/ja-jp/windows/terminal/

今回はそのWindows Terminalでデフォルトで起動されるシェルを変更します。

設定(Json)

Windows Terminalは設定にjsonを使います。開発者向けのツールだけありますね。
(ちなみに最初設定の開き方で迷いました。cmd.exeとかだと左上を右クリックなんですけ。これはタブバーにあるマークから開けます)

ここに設定方法が書いてありますが、少しわかりづらかったのでこうして記事にしました。
結論から書くと、こんな感じでデフォルトの起動するシェルを変えられます。以下はwslを起動しています。

"defaults":
{
    // SETTINGS TO APPLY TO ALL PROFILES
    // "commandline": "例: cmd.exe"
    "commandline": "wsl"
},
"list":
[
    // PROFILE OBJECTS
]

余談(よくわからなかったこと)

MS Docs見ると、こんな感じの説明がされてたんですが、

コマンド ライン
これは、プロファイルで使用される実行可能ファイルです。
プロパティ名: commandline
必須かどうか: オプション
受け入れ可能: 実行可能ファイル名を表す文字列
既定値: "cmd.exe"

・免責事項

当方は、当記事にコンテンツを掲載するにあたって、その内容、機能等について細心の注意を払っておりますが、コンテンツの内容が正確であるかどうか、最新のものであるかどうか、安全なものであるか等について保証をするものではなく、何らの責任を負うものではありません。また、当方は通知することなく当記事に掲載した情報の訂正、修正、追加、中断、削除等をいつでも行うことができるものとします。また、当記事、またはコンテンツのご利用により、万一、ご利用者様に何らかの不都合や損害が発生したとしても、当方は何らの責任を負うものではありません。