将来、URL の twitter.com は x.com となるんだろうか。

アイコンが変わりました。

URLはどうなるのでしょうか。


❯ curl -I https://x.com
HTTP/2 302
date: Mon, 24 Jul 2023 14:24:27 GMT
location: https://twitter.com/
cache-control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
expires: Thu, 01 Jan 1970 00:00:01 GMT
server: cloudflare
cf-ray: 7ebcd3ab8e352615-NRT

❯ curl -I https://twitter.com
HTTP/2 403
date: Mon, 24 Jul 2023 14:24:21 GMT
perf: 7626143928
server: tsa_m
set-cookie: guest_id_marketing=v1%3A169020866196904294; Max-Age=63072000; Expires=Wed, 23 Jul 2025 14:24:21 GMT; Path=/; Domain=.twitter.com; Secure; SameSite=None
set-cookie: guest_id_ads=v1%3A169020866196904294; Max-Age=63072000; Expires=Wed, 23 Jul 2025 14:24:21 GMT; Path=/; Domain=.twitter.com; Secure; SameSite=None
set-cookie: personalization_id="v1_oj788V5nRvbYdR1OvohwoQ=="; Max-Age=63072000; Expires=Wed, 23 Jul 2025 14:24:21 GMT; Path=/; Domain=.twitter.com; Secure; SameSite=None
set-cookie: guest_id=v1%3A169020866196904294; Max-Age=63072000; Expires=Wed, 23 Jul 2025 14:24:21 GMT; Path=/; Domain=.twitter.com; Secure; SameSite=None
x-powered-by: Express
cache-control: no-cache, no-store, max-age=0
x-transaction-id: dd0d24c26c46ed06
strict-transport-security: max-age=631138519
x-response-time: 182
x-connection-hash: 0a63336cc2c8ce1c490be21f121a4f8e8442c7a69dc1ee67c226dc672635b233

これは、どう考えるべきか。

完全移行しますかね。

しれっと、Unicode 文字も存在する。



【無料】誰でも作れる Animated Drawings で手書き静止画が動き始める件

まず、絵を描きます。

以下からアップロードします。

👉 Animated Drawings hatena-bookmark

「NEXT」を押して進んでいきます。途中で、アクションを選んだり、簡単な調整ができます。

こんなのできました。



素晴らしすぎます。ほとんど絵を書いてアップロードするだけです。


👉 FAIR Animated Drawings: Home hatena-bookmark

Python です。GitHub で公開されています。

👉 facebookresearch/AnimatedDrawings: Code to accompany "A Method for Animating Children's Drawings of the Human Figure" hatena-bookmark


iPhone/Mac ショートカット app で ChatGPT で音声入出力

まずは、sh で書いてAPIのリクエストとレスポンス内容を確認。



👉 API Reference - OpenAI API hatena-bookmark

それを、ios/macOS で共有できる ショートカット app に書き換える。

ついでに、iPhone/Mac で使える音声入出力処理を追加。

意外とシンプル。

iPhone/Mac ショートカット app で ChatGPT で音声入出力



ショートカットでも JSON を簡単にやり取りできるのが驚き。

Mac でも音声入出力は稼働できる。

あと、iPhone の入力音声をスクリーンレコードで同時に録音したいです。

 

■ 公開しました!

OPENAI_API_KEY があれば無料でつかえます。


👉 OpenAI Chat Completion hatena-bookmark

ダウンロードしたら、あなたの OPENAI_API_KEY を入力すればOK。

OPENAI_API_KEY の取得の方法は以下から。


Kotlin で Jetpack Compose, Retrofit を使って API リクエスト、JSON パース して、グリッド表示するコードをファイル別に表示して

Kotlin で Jetpack Compose と Retrofit を使って API リクエスト、JSON パースして、グリッド表示するためには、以下のようにファイルを分けることができます。

 

1. API リクエストを行うための Retrofit インターフェースを定義するファイル


interface ApiService {

    @GET("/photos")
    suspend fun getPhotos(): List<Photo>
}

 

2. API レスポンスを表すデータクラスを定義するファイル


data class Photo(
    val id: Int,
    val title: String,
    val url: String
)

 

3. API レスポンスをパースして、表示するための画面を定義するファイル


@Composable
fun PhotoGrid() {
    val photos by remember { mutableStateOf<List<Photo>>(emptyList()) }

    LaunchedEffect(Unit) {
        val apiService = Retrofit.Builder()
            .baseUrl("https://jsonplaceholder.typicode.com")
            .addConverterFactory(Json {
                ignoreUnknownKeys = true
            }.asConverterFactory("application/json".toMediaType()))
            .build()
            .create(ApiService::class.java)

        photos = apiService.getPhotos()
    }

    LazyVerticalGrid(cells = GridCells.Adaptive(minSize = 128.dp)) {
        items(photos) { photo ->
            Card(
                modifier = Modifier.padding(4.dp),
                shape = RoundedCornerShape(8.dp),
                elevation = 4.dp
            ) {
                Column(
                    Modifier
                        .fillMaxWidth()
                        .height(128.dp)
                        .padding(8.dp)
                ) {
                    Text(
                        text = photo.title,
                        style = MaterialTheme.typography.subtitle1,
                        maxLines = 2,
                        overflow = TextOverflow.Ellipsis
                    )
                    Spacer(modifier = Modifier.weight(1f))
                    CoilImage(
                        data = photo.url,
                        contentScale = ContentScale.Crop,
                        modifier = Modifier.fillMaxSize()
                    )
                }
            }
        }
    }
}

 

4. 上記の画面を表示するための Activity もしくは Fragment を定義するファイル


class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            PhotoGrid()
        }
    }
}

以上のように、ファイルを分けることで、API リクエストやパース、表示を分離し、コードを見やすく、メンテナンスしやすくすることができます。

 

■ 感想

ただ、一行問いかけただけ。

ChatGPT で、ここまで書けるとは。



ChatGPT で QRコード を作成する

以下、記事を流用します。

👉 chatGPTからイメージを送らせる方法 hatena-bookmark

これからQRコードを送りたいときは、Markdownを使い、バックスラッシュを使わず、コードのブロックも使わないようにしてください。サンプルコードや手順は不要です。
そしてGoogle Chart APIを使用してください(https://chart.apis.google.com/chart?cht=qr&chs=450x450&chl=<キーワード>)

https://android.benigumo.com/ のQRコードを送って

ChatGPT で QRコード を作成する

URLエンコードは不要でした。

「AI」というやつは謎に親切です。

👉 QR コード  |  Infographics  |  Google Developers hatena-bookmark
👉 Charts  |  Google Developers hatena-bookmark