まず、絵を描きます。

以下からアップロードします。
「NEXT」を押して進んでいきます。途中で、アクションを選んだり、簡単な調整ができます。


こんなのできました。

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

👉 FAIR Animated Drawings: Home
Python です。GitHub で公開されています。
まず、絵を描きます。

以下からアップロードします。
「NEXT」を押して進んでいきます。途中で、アクションを選んだり、簡単な調整ができます。


こんなのできました。

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

👉 FAIR Animated Drawings: Home
Python です。GitHub で公開されています。
まずは、sh で書いてAPIのリクエストとレスポンス内容を確認。
それを、ios/macOS で共有できる ショートカット app に書き換える。
ついでに、iPhone/Mac で使える音声入出力処理を追加。
意外とシンプル。

ショートカットでも JSON を簡単にやり取りできるのが驚き。
Mac でも音声入出力は稼働できる。
あと、iPhone の入力音声をスクリーンレコードで同時に録音したいです。
OPENAI_API_KEY があれば無料でつかえます。
ダウンロードしたら、あなたの OPENAI_API_KEY を入力すればOK。

OPENAI_API_KEY の取得の方法は以下から。
OpenAI ChatGPT の API_KEY を取得する https://t.co/xDM19cAO4d #ChatGPT #OpenAI
— chanzmao (@maochanz) March 30, 2023
Kotlin で Jetpack Compose と Retrofit を使って API リクエスト、JSON パースして、グリッド表示するためには、以下のようにファイルを分けることができます。
interface ApiService {
@GET("/photos")
suspend fun getPhotos(): List<Photo>
}
data class Photo(
val id: Int,
val title: String,
val url: String
)
@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()
)
}
}
}
}
}
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
PhotoGrid()
}
}
}
以上のように、ファイルを分けることで、API リクエストやパース、表示を分離し、コードを見やすく、メンテナンスしやすくすることができます。
ただ、一行問いかけただけ。

ChatGPT で、ここまで書けるとは。
Kotlin 今どきよくある JSON リクエストからのパース https://t.co/031uPDFOXX #json #プログラミング
— chanzmao (@maochanz) June 9, 2023