bookmark_border「あなたのRealmはまもなくアップデートされます」と出たらこうする [Minecraft統合版]

Minecraft統合版でRealmsに入ろうとしたら「あなたの Realm はまもなくアップデートされます。あなたもアップデートが必要になります。」と表示されてワールドに入れないときのメモです。

結論

Microsoft Storeを開き、Minecraft統合版をアップデートする。

手順

1. 一旦Minecraftを終了する

バツボタンなどで一度終了しましょう。

2. Microsoft Storeを起動する

スタートメニューで store と検索し、Microsoft Storeを起動します。

3. 「ライブラリ」を表示する

Microsoft Storeを開いたら、左下の ライブラリ をクリックします。

4. Minecraftを更新する

右上の 更新プログラムを取得する をクリックします。

Minecraft統合版(Minecraft for Windows)の更新が来ていれば、そのままアップデートが始まります。

5. Minecraftを起動する

アップデートの内容が表示されていればうまくいっています。

bookmark_border[Minecraft統合版] インベントリや作業台を開くとフリーズする原因

結論

IMEがGoogle日本語入力になっている。

対策

Microsoft IMEに変更する。

画面右下のGoogle日本語入力のアイコンを押し、Microsoft IMEをクリックします。すでにMinecraftがフリーズしている場合、一度終了してもう一度起動します。


[Promotion] Minecraft統合版でサーバーを立ててマルチプレイをするならXserverがおすすめです。

個人的にはRealmsが一番始めやすいと思いますが、個人でサーバーを借りる方法はRealmsよりも設定の自由度が高いことが特徴です。

Minecraftに慣れてきたり、Realmsでは物足りなくなってきたという方はマルチプレイ環境を用意する上で選択肢に入れても良いでしょう。


バグとして公式も認識済み

公式のバグ報告サイトに投稿があり、公式も返答をしています。

MOJANG STUDIOS – Opening any in-game text field(such as chat) makes Minecraft freezing(When using Google Japanese Input (Google日本語入力) for Windows)

しかし上記の対処法があるためか、同ページを見ると公式は現時点で修正の予定は無いとしているようです。

Opening the in-game chat always causes Minecraft to freeze (the window remains open, but it may have crashed). I cannot move, hear, or do anything in Minecraft Bedrock Edition. The only way to escape from this is to press Alt+Tab or force-quit my computer.

(チャットを開くたびにフリーズします。(ウィンドウは開いたままですが、クラッシュしているのかもしれません。) 動けず、音もせず、何もできません。Minecraft 統合版です。Alt+Tabかコンピュータを強制終了するほか何もできません)

MOJANG STUDIOS – Opening any in-game text field(such as chat) makes Minecraft freezing(When using Google Japanese Input (Google日本語入力) for Windows)

処理性能No.1!快適なゲーム環境なら「Xserver for Game」


bookmark_borderJava21からの「データ指向」は「オブジェクト指向」と何が違うのか

特にJava20,21以降で話題になっている「データ指向プログラミング」とは何か、オブジェクト指向と何が違うのかの個人的まとめです。

※本来は型や継承・implementsの縛りも関係しますが、この記事では「データは不変である」という要素に重きを置いています。

オブジェクト指向を置き換えるものではない

データ指向プログラミングはオブジェクト指向と共存する概念で、JavaのアップデートによってJavaがオブジェクト指向言語から脱却するという意味ではありません。

オブジェクト指向をより保守性高く使う上でベースとなる考え方・テクニックのことです。

Java20で「データ指向」という言葉が出てきた背景

保守性、(言語レベルで)セキュリティの高いJavaの書き方が今まで多数ベストプラクティスとして広まってきました。「プロパティは不変にすべき」「不変ゆえのgetter/setterの簡略化」などです。後続言語のKotlinやSwiftは言語レベルでそれをサポートするようになりました。

2023年になり、Javaもそれらの考え方を言語レベルで本格的にサポートするようになってきました。それらのアップデート内容は総じて言うと上述の考え方を一言で言う「データ指向」という考え方のもと実施されているようです。

データ指向プログラミングの原則

以下、データ指向のことを DOP と呼びます。(Data-Oriented Programming)

1. 「データ」は不変

DOPにおいて「データ」は不変です。例えばインスタンスにおいて一度値がセットされたプロパティには変更を許しません。意図しないデータの書き換えでバグやデータの不整合の可能性を減らすためです。

これを実現するには、Javaの record が役立ちます。

サンプル:データ指向を意識しない場合

Javaをはじめ、オブジェクト指向のプログラミング言語ではクラスにgetterとsetterを書くことが一般的です。

プロパティを読み取り専用にしたいときはプロパティをfinalにしてsetterを書かないという選択もありますが、もちろんfinalを書かなければその効果は消えます。setterを書かなかったとしても、プロパティに再代入するメソッドは他にいくらでも作成可能です。

public class Person {
    private String name;
    private int age;
    // (略)コンストラクタ
    // (略)getterとsetter
    // setter以外にもプロパティを書き換えるメソッドは書ける
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person("Alice", 30);
        System.out.println(person.getName());
    }
}

サンプル:データ指向の場合

recordはデータ指向を支えるキーワードです。recordでクラスを作成することでプロパティがfinalであることが保証され、setterを書く余地すら排除されます。

つまりrecordを使う限りそのプロパティへの再代入は文法上不可能になり、データ指向の考えに沿ったコードになります。

public record Person(String name, int age) { }

public class Main {
    public static void main(String[] args) {
        Person person = new Person("Alice", 30);
        System.out.println(person.name());
    }
}

2. ロジックはデータから独立させる

データとそれを操作するロジックを分離することもDOPのベースにある考え方のひとつです。データは単なる「データ」であって、振る舞いを持たせません。データの整合性を保持しながら、システムの柔軟性と拡張性を高めることを目指しています。

サンプル:データ指向を意識しない場合

一般的なオブジェクト指向プログラミングでは、プロパティとそれに関連するメソッドがクラスに一緒に定義されます。データとロジックの結びつきが強固になるのは必然です。

メソッドからプロパティを書き換えることが可能になると、メソッドを呼び出す順番によって実行結果が変わる可能性が出てきます。その複雑さが現れるのはテストを書くときでしょう。

public class Person {
    private String name;
    private int age;
    // (略)コンストラクタ, getter, setter

    public String generateGreet() {
        return "こんにちは、" + this.name + "といいます。";
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person("Alice", 30);
        System.out.println(person.generateGreet());
        // こんにちは、Aliceといいます。
    }
}

痒い例:テストが複雑になる

クラスにデータとメソッドを一緒に書いた場合、メソッドがプロパティを書き換える(再代入など)可能性を考慮してテストを書かなければなりません。テストケースは増え、メソッドを実行する順番も動作に影響するでしょう。結果としてテストは複雑になります。

このクラスについてよく知らない人がこのクラスの generateGreetMessage() のテストコードを書いたとします。このとき、その人はテストで generateGreetMessage() を実行したことで nameage が書き換わる可能性を意識すべき余地は残ります。

public class PersonTest {
    
    @Test
    public void testIsSenior() {
        Person person = new Person("Alice", 70);
        assertEquals("こんにちは、Aliceといいます。", person.generateGreet());

                // ↑この実行で person.name や person.age
        // が書き換わる余地は文法上残されている。
        // personのメソッドの動作がgenerateGreetを実行したことで
        // 変わるかもしれないことを意識する必要が出てくる
    }
}

サンプル:データ指向の場合

DOPではビジネスロジックは独立した関数やサービスとして実装します。データは整合性を保ちやすくなり、処理の独立性も高くなります。

public record Person(String name, int age) { }

public class PersonService {
    // ビジネスロジックはPersonから独立した関数やサービスとして実装
    public static String generateGreet(Person person) {
        return "こんにちは、" + person.name() + "といいます。";
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person("Alice", 30);
        System.out.println(PersonService.generateGreet(person));
        // こんにちは、Aliceといいます。
    }
}

恩恵の例:テストしやすくなる

ビジネスロジックはサービスクラスや他の独立した処理に分離するのがDOPのベースにある考え方です。結果、テストの対象はPersonというよりその処理やサービスクラスになります。

Personはどれほど参照されようと中身の name や age は変化しません。単なるパラメータとして渡すだけで良くなり、期待される出力を確認することだけに意識を集中してテストケースを作成できます。

public class PersonServiceTest {
    
    @Test
    public void testIsSenior() {
        Person person = new Person("Alice", 70);
        assertEquals("こんにちは、Aliceといいます。", PersonService.generateGreet(person));

        // ↑この実行でpersonの中身が書き換わることを恐れなくて良い。
        // personに再代入が無い限り、
        // PersonService.generateGreet(person) はいつも同じ結果を返す
    }
}

要は

  • オブジェクト指向プログラミングの代わりではない。共存して使用する新しいプログラミングのスタイル。
  • データは不変にし、振る舞いはサービスクラスや他の独立した処理に分離。
    • 何度実行しても同じ結果を期待できる仕組みにすることで整合性、保守性の向上を目指す。

Javaがデータ指向を推す背景

処理がインスタンスの外に独立するということはビジネスロジックのクラスがプロジェクト内に増え、結果コードの管理負担が増大することは容易に想像できます。

しかしJavaOneの登壇者が述べる通り、昨今「大規模開発」と呼ばれるプロジェクトは小さなサービスの集合体の形を取っているケースが少なくありません。

Data-Oriented Programming in Java – YouTube

Javaのオブジェクト指向を支える「型」の概念も、大規模開発のためというより「データ指向」という考えを支えるツールに今や代わりつつあるという考え方のようです。

カテゴリー: Java

bookmark_borderMacでAndroid File Transferが認識しないときはこうする

結論

  1. 通知パネルを開き、「このデバイスをUSBで充電中」をタップ。
  2. 「ファイル転送/Android Auto」をタップする。
  3. Android File Transferの再起動・ケーブル再接続

ケーブルで繋ぐと通知パネルに「Androidシステム このデバイスをUSBで充電中」と出ているはずなので、これをタップします。

「USBの設定」画面の「USBの接続用途」の下記の部分をタップします。

bookmark_borderUSBメモリの使用を禁止、制限する方法 [Windows 10 Home][レジストリ]

USBメモリの使用を禁止または制限する方法を検索すると「グループポリシー」を操作する手順がヒットすることがありますが、Windows 10 Proの機能のためHomeでは使えません。Windows 10 Homeでは別の方法を取る必要があります。

実施の前に

レジストリを操作します。念のため変更を行う前にシステムのバックアップを取得してください。ご参考にされる場合は自己責任にて。

手順

1. Windows + R キーで「実行」ウィンドウを起動する

2. regedit と入力し、OK ボタンをクリック

レジストリエディタを起動します。

3. 画面左側で USBSTOR を探し、クリック

USBで接続されたストレージデバイスへの読み書きの許可を設定する項目です。

HKEY_LOCAL_MACHINE
┗ SYSTEM
  ┗ CurrentControlSet
    ┗ Services
      ┗ USBSTOR

4. 画面右側の Start の項目をダブルクリック

5. 「値のデータ」に 4 と入力し、OK をクリック

恐らく既に 3 が設定されているので、 4 と上書きします。

6. レジストリエディタを閉じ、PCを再起動

これでUSBメモリデバイスの使用が禁止されます。


戻したいときは

USBメモリの使用を再度許可したい場合はもう一度上記の操作をし、Start の値を4から 3 に変更してください。

手順

上記1~4の作業を行う。

5. 「値のデータ」に 3 と入力し、OK をクリック

3 で読み込みと書き込みが許可され、4で禁止になります。

bookmark_border[Mac] Excelが重い・固まるときはこうする

最近Mac版Excelで動作がひどく重いことがあり、調べたところフォントの重複解決やライブラリから設定ファイル削除といった情報が出てきて試したものの全く効果がなく困り果てていました。

そんなこんなであれこれ試しているうちに効いた対処法をメモ書きとして残します。極めて簡単です。


1. セルを全選択する

Excelを開き、対象となるシートを選択したら、シートの左上角のセルをクリックするか command + A で全てのセルを選択します。

2. フォントを「MS Pゴシック」に変更する

セルのフォントを「MS Pゴシック」に変更します。

上部のメニューバーにある「書式」から「フォント」を選択し、「MS Pゴシック」を選ぶか、ツールバーのフォントメニューから直接選択します。意外かもしれませんが私はこれでとんでもない重さから開放されました。

実を言うと「MS Pゴシック」以外のフォントでもいけることが確認できています。(「M+font」など)

私はPythonで出力した50-60KB程度のExcelファイルが大変重く、Arialが設定されていたのでそれを別のフォントに変えたところ問題なく動作するようになりました。


Mac版Excelの動作が重たく感じる場合、Font Bookでの重複解決や設定ファイル削除を試す前に、まずはフォントの変更をおすすめします。皆様の快適なExcel作業の一助となれば幸いです。

bookmark_border結局サーバーレスとは一言で說明すると何なのか

多くのサイトでサーバーレスについてさまざまな説明や定義がありますが、自社製品の宣伝がベースだったり実例紹介が長いものだったりとわかりにくいものも多いので簡潔に説明する試みです。


※筆者はAWS Lambdaユーザーですが、簡潔な說明に振れたため個人的解釈が含まれているかもしれない旨ご了承ください。


結論

アプリ開発者がサーバの運用・管理を意識せずにアプリケーションを実行・拡張できるクラウドコンピューティングの仕組み・考え方のこと。サーバーが存在しない仕組みのことではない。

よく聞く AWS Lambda、Azure Functions、Google Cloud Functions とは何なのか

サーバーレスの仕組み・考え方を実際に実現したクラウドサービスの名称です。

これらのサービスを使うと例えば「このURLにアクセスがあったらこのPythonの関数を実行して」という設定をブラウザ上で行なえます。アプリ開発者はその「URL」と「Pythonのコード」の設定をブラウザ上でぽちぽちするだけで良いのです。

アプリ開発者はOSやWebサーバー、Pythonなどのインストールや設定をスキップしていきなりPythonなどのコードをサーバーに実行可能状態で配置できます。

コードは結局LinuxなどのOSの上で動くわけですが、アプリ開発者側が「サーバーの存在を意識しなくてもすぐサービスを開始できる」のがサーバーレスの趣旨です。(つまり「サーバー」が意味するのは、本来保守が必要なOS, その他基本的なアプリケーションなどのことです。Python以外の言語ももちろん実行できます。)

飛び交っている様々な說明の意味

サーバーレスについて説明するサイトでは概ね以下のような要点が説明されています。

インフラ管理の手間が省ける

意味:本来であれば自前のサービスを世界に公開したい場合、Linuxがインストール済みのマシンを借りて(AWSではEC2など)、自分でOSやWebサーバの設定をして… という作業が必要です。でもサーバーレスの概念を踏襲したAWS Lambdaなどのサービスを使うことでそれをスキップできます。

イベント駆動型

意味:例えばAWS Lambdaでは、AWS Lambda上で自分が書いたPythonのコードのどの関数をどんなタイミングで実行するかを設定できます。例えば「特定のURLにアクセスがあったとき」「特定のデータベースに変更があったとき」などです。「〇〇のとき」のことを「イベント」や「トリガー」と言います。

拡張性が高い

意味:AWS Lambdaをはじめさまざまなサーバーレスのサービスでは、利用者の数が増えてもコードがスムーズに動作するよう、実行するマシンの性能をアップする機能を使えます。まさに、アプリ開発者にサーバーを意識させない「サーバーレス」の概念の恩恵です。

コスト効率が良い

意味:コンピュータを間借りするサービスは契約期間中ずっと、またはコンピュータが起動している時間に対して課金されるのが普通です。しかしサーバーレスのサービスは原則、実際に使用されたリソースに対してのみ課金されます。あまり利用者がいないけど維持費だけがじわじわかかり続けるという事態への対策として有効です。

これらの説明は、サーバーレスが提供する利点や特性を示しています。しかし、これらの情報だけでは「サーバーレスとは何か」という本質的な意味を完全に理解するのは難しいこともあるため、各点を深く理解することが重要です。

サーバーレスの思想

もちろんデータベースと接続したり、他のAPIを叩いたりとし始めるとできることは無限に広がります。

「サーバーレスを使ってこんなサービスを開始しました!」という話でシステムの構成図などを見ると複雑に見えることもありますが、サーバーレスのベースにある考え方はシンプルです。

それは「アプリ開発者をOSやWebサーバーなどの面倒な設定から開放し、『このタイミングでこのコードを実行する』という設定だけでサービスを公開できる世界を提供する」ことです。

bookmark_borderPLA, TPU, ABS, PETG の違い・どれを選べばいいのか [3Dプリンター フィラメント]

3Dプリンターのフィラメントの素材で迷うことがあるのでメモ書きです。

PLA(ポリ乳酸)

それなりの強度があり、安価で初心者でも扱いやすい。とりあえず何か出力したい・プロトタイプを作りたいとき向け。

コスト比較的安価
特性やや硬め。生分解性があり環境に優しいとされる
強度中程度の強度で、剛性が高い
印刷温度180-220℃
欠点高温に弱く、長期間の耐久性に劣る

TPU(熱可塑性ポリウレタン)

やわらかめ。靴底、スマホケースなど向け。

コストやや高価
特性柔軟で伸縮性がある
強度強くて耐摩耗性が高い
印刷温度220-250℃
欠点印刷が難しく、特定のプリンターや専門の経験が必要な場合がある

ABS(アクリロニトリルブタジエンスチレン)

耐久性が強い。機械部品など向け。

コストやや高価だがPLAほどではない
特性PLAよりはやわらかめ。加工しやすい。耐衝撃性、耐久性、耐熱性がある
強度強い
印刷温度210-250℃。ヒートベッドが必要な場合がある
欠点臭いがきつく、換気が必要。印刷が難しい場合がある

ABSは冷却時に収縮する性質があるため、ヒートベッドが特に必要とされる。(ヒートベッドはプリント物の底部を一定の温度に保つ機能や部品のこと)

PETG(ポリエチレンテレフタラートグリコール)

強度が高く、紫外線耐性がある。食品容器、屋外用部品、機械部品など向け。

コストやや高価だがPLAほどではない
特性PLAとABSの中間的な特性。柔軟性、耐候性と化学耐性を併せ持つ
強度高い
印刷温度220-250℃
欠点PLAよりもベッド表面に強く付着することがあり、印刷難易度が高い

bookmark_borderPythonの or は「または」ではない

単にTrueかFalseを返す演算子ではない

Pythonの or は「または」の意味だと說明されることがあります。

x = 10

# x は 10 または 20
if x == 10 or x == 20:
    print("xは10か20です")

# 実行結果:xは10か20です

しかしこのコードの実行結果を見ると、 or は単なる「または」ではないことがわかります。

a = False
b = 123
print(a or b)

# 実行結果: 123
# Trueではない

じゃあ何なのか

公式ドキュメントには下記の說明があります。

式 x or y は、まず x を評価します; x が真なら x の値を返します; それ以外の場合には、 y を評価した結果値を返します。

docs.python.org – 6. 式 (expression)

オブジェクトを返す演算子

or は両端の値のうち、 最初にTrueと評価される値 を返します。

true_value_1 = 100
true_value_2 = 200

print(true_value_1 or true_value_2)

# 実行結果: 100

# true_value_1 or true_value_2 の中で、
# true_value_1 が最初にTrueと評価される値である → 100

両方がFalseと評されるなら、右側の値を返します。

false_value_1 = False
false_value_2 = 0
print(false_value_1 or false_value_2)

# 実行結果: 0

# false_value_1 or false_value_2 の中で、Trueと評価される値はなかった。
# false_value_2 が右側の値である → 0

※より正確には、返されるのは「値や式の評価結果」です。

つまりどういうことか

or が返すのは or の両端の値のどちらかです。どちらが返されるかは、その両端の値がTrueとFalseどちらに評価されるかによって決まります。

Pythonの or はJavaなどの言語と異なり、真偽値(True, False)しか受け取れない演算子ではありません。あらゆる値をオペランドに(つまりorの両側に)持つことができます。

つまり先に登場したif文は厳密に言うと下記の流れをたどっているということです。

x = 10
if x == 10 or x == 20: 
# ↓ 
# if True or False: # or の両端の式がまず計算される
# ↓
# if True: # orの左側の値がTrue。よってorは左側の値のTrueを返す
    print("xは10か20です")

# 実行結果: xは10か20です

両方ともFalseとなる場合は下記のとおりです。

x = 100000
if x == 10 or x == 20: 
# ↓ 
# if False or False: # or の両端の式がまず計算される
# ↓
# if False: # orの両端がFalse。よってorは右側のFalseを返す
    print("xは10か20です")

# 実行結果: (何も出力されない)

どう役立つのか

関数の引数のデフォルト値

関数の引数に偽と評価される値 (None 0 "" など)が渡された場合のデフォルト値を設定できます。

def greet(name=None):
    name = name or "Guest"
    print(f"Hello, {name}!")

greet()  # 出力: Hello, Guest!
greet("Alice")  # 出力: Hello, Alice!

PHPの言語でサポートされているNull合体演算子の代わりのように使えるということです。

hoge = None

# if hoge is None:
#    hoge = "Hello World!"
# ↑↓同じ実行結果
hoge = hoge or "Hello World!"

print(hoge)

# PHPのNull合体演算子に近い
# $hoge = $hoge ?? "Hello World!"

例えばどんなところで役立っているのか

Django(PythonでWebアプリケーションを作るときに使われる、代表的なフレームワーク)でFormのオブジェクトを生成する際は下記のように書くのがお約束です。

form = Form(request.POST or None)

request.POST or None は、 request.POST に値が入っていれば下記のように評価され、

# request.POST に値が入っている場合(Trueと評価される場合)
form = Form(request.POST)

request.POST がFalseと評価される(値が無いなど)場合は下記のように評価されるということです。

# request.POST がFalseと評価される場合(値が入っていないなど)
form = Form(None) # Form() と同義

参考:Logic behind Form(request.POST or None) – StackOverflow

bookmark_border都市の風景の呪文・プロンプト30例 [Stable Diffusion]

A network of narrow cobblestone streets under the glow of vintage lamp posts

レトロな街灯の輝きの下、狭い石畳の通りのネットワーク


An abandoned warehouse district being reclaimed by nature

自然によって再び取り戻されつつある放棄された倉庫地区


A bustling marketplace filled with colorful stalls and the aroma of street food

カラフルな屋台とストリートフードの香りで満たされた賑やかな市場


A pedestrian bridge spanning over a gently flowing urban river at dusk

夕暮れ時、ゆるやかに流れる都市の川にかかる歩行者用の橋


The neon glow of billboards illuminating a busy city street at night

夜の賑やかな都市の通りを照らすネオンの看板の輝き


An urban park covered in a fresh layer of snow, untouched and serene

新鮮な雪の層で覆われ、まだ誰にも触れられていない静寂な都市公園


Rows of brownstone houses lined up on a sunny city street

日差しの当たる都市の通りに並んだブラウンストーンの家々


A train station at rush hour, buzzing with the movement of people and trains

ラッシュアワーの駅、人々と列車の動きでざわめく


A tranquil city courtyard hidden away from the bustling city streets

賑やかな都市の通りから隠れた静かな都市の中庭


夜景

The city’s silhouette against a night sky

夜空を背景にした都市のシルエット


A city’s twinkling skyline viewed from a hilltop vantage point

丘の頂上から眺めた都市のきらめくスカイライン


The glow of street lamps lighting up a foggy city night

霧深い都市の夜を照らす街灯の光


A city harbor at night, bathed in the light of moored ships

停泊した船の光で照らされる夜の都市の港


A cityscape illuminated by the full moon

満月に照らされる都市風景


An urban river reflecting city lights in its tranquil water at night

夜の静かな水面で都市の灯りを映し出す都市の川


A view of the city night from a rooftop bar

屋上バーからの都市の夜景


A city park at night, glowing under the soft light of lamp posts

街灯の柔らかな光の下で光る夜の都市公園


夕焼け

The setting sun casting long shadows in a city street

夕日が都市の通りに長い影を投げかける


A city skyline bathed in the golden glow of sunset

夕日の金色の光に浸る都市のスカイライン


An urban park under the soft hues of a setting sun

夕日の柔らかな色合いの下の都市公園


A bustling city market winding down as the sun sets

日が暮れるにつれて静まり返る賑やかな都市の市場


A city river reflecting the brilliant colors of sunset

夕日の鮮やかな色を映し出す都市の川


A city café terrace under the warm light of a setting sun

夕日の暖かな光の下の都市のカフェテラス


A city square filled with the long shadows and warm light of a setting sun

夕日の長い影と暖かな光で満たされた都市の広場


A busy city street under the warm, dramatic light of sunset

夕日の暖かでドラマチックな光の下の賑やかな都市の通り


A panoramic view of a city basking in the fading light of the setting sun

夕日の落ちゆく光に浸る都市のパノラマビュー


A city bridge standing against the backdrop of a vibrant sunset

鮮やかな夕焼けを背景にした都市の橋


City streets reflecting the lights in the puddles of a rainy night

雨の夜の水たまりでライトを反射する都市の通り


A city park under a gentle rain, lush and serene

やさしい雨の下の緑豊かで静かな都市公園


An umbrella-covered city street during a downpour

土砂降りのときの傘で覆われた都市の通り


A cityscape blurred by the rain against a window

窓に当たる雨によってぼやけた都市風景


A city bridge under the pattering sound of a light drizzle

小雨の音が鳴る都市の橋


A city market bustling under the protection of colorful rain awnings

色鮮やかな雨よけの下で活気づく都市の市場


A city square gleaming under the wet reflection of a rainy day

雨の日の湿った反射で光る都市の広場


A city with the rush of a rainstorm

暴風雨が吹き荒れる街


A city alleyway glistening under the soft drizzle of a rainy evening

雨の夕方の柔らかな霧雨の下で輝く都市の路地


カテゴリー: AI