tanakahdaのプログラマ手帳

プログラミングとかソフトウェア開発とかの備忘録

Windowsのプロダクトキーをアンインストール

slmgr.vbsからプロダクトキーを直接アンインストールすることができる。

1.コマンドプロンプトを管理者特権で起動する
2.slmgr.vbs /dlvを実行
3.現在の認証情報がダイアログに表示されるので、ライセンス認証 IDをメモしておく
4.slmgr.vbs /upk XXX
※XXXにライセンス認証IDを入力
5.「プロダクトキーを正常にアンインストールしました。」が表示される。

M1 MacBook Air 2020 に multipass で ubuntuをインストール

Homebrewをインストールする

tanakahda@MacBook-Air ~ % echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/tanakahda/.zprofile
tanakahda@MacBook-Air ~ %  eval "$(/opt/homebrew/bin/brew shellenv)"
tanakahda@MacBook-Air ~ % brew -v
Homebrew 3.3.6

multipassをインストールする

tanakahda@MacBook-Air ~ % brew install --cask multipass
==> Tapping homebrew/cask
Cloning into '/opt/homebrew/Library/Taps/homebrew/homebrew-cask'...

multipassがインストールされたことを確認する

tanakahda@MacBook-Air ~ % multipass find               
Image                       Aliases           Version          Description
18.04                       bionic            20211129         Ubuntu 18.04 LTS
20.04                       focal,lts         20211129         Ubuntu 20.04 LTS
21.04                       hirsute           20211130         Ubuntu 21.04
・・・

ubuntuをインストールする

tanakahda@MacBook-Air ~ % multipass launch --name ubuntu
Launched: ubuntu   

ubuntuのシェルを起動する

tanakahda@MacBook-Air ~ % multipass shell ubuntu
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-91-generic aarch64)
・・・
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@ubuntu:~$

デリミタで複数の文字列を区切りながら結合(String#join)@Java

// String.join(CharSequence delimiter, CharSequence elements...)
String csvHeader = String.join(",", "column1", "column2", "column3");
System.out.println(csvHeader);
column1,column2,column3

よく行われる処理として、", " や "/" といったデリミタで複数の文字列を区切りながら結合したい場合がある。そのためにJava8から追加されたメソッド。 配列や、Iterable<? extends CharSequence>を使用することもできる。

参考文献:Javaプログラマーなら習得しておきたい JavaSE8 実践プログラミング

ラムダ式を使って繰り返し処理を実装する@Java

   public static void main(String[] args) {
        repeat(5, () -> System.out.println("Hello World!"));
    }

    public static void repeat(int n, Runnable runnable) {
        for (int i = 0; i < n; i++) {
            runnable.run();
        }
    }
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!

参考文献:Javaプログラマーなら習得しておきたい JavaSE8 実践プログラミング

テキストファイルを生成してS3へアップロードする@AWS

import boto3

S3_BUCKET_NAME = 'mys3bucketname'
FILE_NAME = 'sample.txt'

def exec_upload_s3(f_name, b_name, k_name):
    """S3へファイルをアップロードします。
    """
    s3_obj = boto3.client('s3')
    s3_obj.upload_file(f_name, b_name, k_name)

if __name__ == '__main__':
    
    # テキストファイルを生成
    path = FILE_NAME
    s = '吾輩は猫である。\n名前はまだ無い。\nどこで生れたかとんと見当がつかぬ。'
    with open(path, mode='w') as f:
        f.write(s)
    
    # S3へアップロード
    exec_upload_s3('./' + FILE_NAME,\
                   S3_BUCKET_NAME, FILE_NAME)