あの山は海だったから、岩は空に置ける

日頃で思ったこと、やりたいこと、記憶しておきたい勉強のこと。非整頓でお目を汚して申し訳ない

韓国からDavidが来日して、WASABIの辛さについて話をした

今週は結構大変な一週間でした…

先週末のJPHACKSの影響で大学の課題が滞っていたのをなんとかやりくりし、彼女が元気ないのを察して何かできないかと考えたり、ロボ研のコンペの様子を見に行ったりと、慌ただしい一週間でした。でもベストは尽くした自負があるからオッケー👌

そんな週の水•金曜日に、中国で出会った博識人「David」と福岡で再開することになった。

なぜ福岡に来ることになったからというと、中国で彼と話をしていた時にさかのぼる。

自分が日本出身ということを伝えると、どうやら彼は日本に4回近く訪日しているようだった。

で、自分が九州の大学に通ってることを話したら、まだ行ったことがないということだった。

おそらく、そこから興味を持ってくれて初九州に来てくれたのかもしれない。嬉しい☺️

来日初日の水曜日は空港でお迎えをし、ホテルへ案内&ラーメンshinshinで味玉ラーメンと餃子と炒飯(fried rice)を食べた。ホテルのスタッフの台湾人の方は日本語•英語•中国語ができる方で、Davidさんと英語でやりとりをしていた。

なんとカッコイイのだろう。やはり私はいろんな国の人ともっと打ち解けるために、英語•中国語をもっと使えるようになる(declare)

ちなみにDavidは四カ国語話せるらしい。英語•中国語•Mexican Spanish(家族で話者いる)•韓国語(a little🤏)

 

やべぇな。

 

そんな水曜日を終え、また金曜日にチームラボに行きたいとのことだったので、こちらから同行したいとのお願いをして一緒に回ることになった。

今回が初チームラボの私だが、既にDavidは東京•シンガポールの二箇所を体験済みとのことだった。やはり地元民ほど行かないやつなんだよな。

雨の中展示場に到着し、最初はアプリで会場の動物を捕まえるというものだった。ぶっちゃけこれはあまり面白くなかった😅なにせ単調なもんで。

研究室の先生の制作物と似てると思うところ、技術的アプローチが素晴らしいと思った。

ただ、あと一捻り方があれば化けるなと感じた。

その後の体験型の展示は超楽しかった。同じ色のボールを踏み越えて対岸に渡ったり、トランポリンのような床を登ったりなどは、視覚•感覚の両方が刺激され、豊かな表現のアクティビティだと感じた💪

 

………

 

とチームラボを楽しんだ後にご飯を食べに天神へ向かった。道中では来週の火曜にjob interviewがあることを教えてくれた。そのためにネカフェでパワポを作るそう。

ちょっと緊張していたのが印象的だった。これだけ旅をしている彼でもナーバスになることがあるんだ…

で、焼き魚定食屋さんへ行ったが、これがあまり良くなかった。

魚の骨をとる経験を普通アメリカ人は体験していない。なのでもし日本人として焼き魚を紹介する際は骨の取り方を英語で説明できないとならない。でないと、めっちゃ面倒くさい食べ物と認識されてしまう😭 実際そうなんだけど。

ご飯+お酒を楽しみながら彼と話した内容は以下の通り

  • チームラボの展示について
  • アメリカで最初に行きたい場所について
  • 仕事について
  • お金について
  • テーブルマナーについて 中国韓国日本
  •  年上の方への礼儀作法、お酒を注ぐ順番
  • 日本酒について
  • 鍋について
  •  しゃぶしゃぶともつ鍋の違いは何か
  • spicyについて

などなど色々話した。

 

特にタイ料理や中華料理などの辛い料理についての話をしていたのは面白かった。

それは注文したもつ鍋に赤唐辛子が入って、そのスープが辛いと自分が彼に伝えた時のことで、彼はそれに対して、タイ料理は本当に辛いと教えてくれた。

そのあと日本料理には何か辛いものはある?と聞かれて、私はあまりないと最初答えたが、わさびは辛いのうちに入る?と思い、わさびと答えた。

そしたらDavidは少し嫌そうな顔をして、WASABIは苦手だと言った。最初に食べた刺身の中にWASABIが隠れていて、とてもビックリしたらしい。しかしWASABIはspaicyなのか?と考えていた。

あの辛さは英語で説明できるかと聞いたけど、それも難しいみたい。

結論としては、WASABIはSpaiceでspaicyだが、red pepperのような辛さではないため、spaicy以外に補足が必要らしい。

やはり文化越境は面白い。

【アプリ開発備忘録】lambda関数の解釈etc...

---前書き

⚠️この記事は開発初心者によって書かれています。それを考慮して閲覧してください。

---↓本題

 

昨日からPythonistaの開発を本格的に始めて、Pythonで新しくやってみた実装がありました。

それが、標準関数の引数にlambda関数を渡してあげるという実装です。

元々、自分のlambda関数に対する知識が「無記名関数で、他に定義しないでその宣言箇所で挙動を決められる関数」程度の認識でした。別で関数定義するまではない箇所で使うみたいな。

しかし昨日、Pythonistaで次のような処理を実装したいと考えた時に、lambda関数で渡さなければならない実装に遭遇しました。

----

機能: 保存されているCSVデータ、表示しているlabelデータを初期化する
  1. 保存しているCSV, テキストを削除する
  2. カスタムアラート画面を数秒間表示する
  3. 数秒後に画面から消える

補足: labelに「初期化しました」というテキストを表示する形式だと、新たにテキストデータを取得・表示する際に最初の行に↑のテキストデータがずっと残ってしまう。なので、画面上部にui.Labelで作成したフレーム内にテキストを表示し、数秒後に画面から削除する(javascriptのアラートに相当する)

----

というもの。

で、Clear関数を

def Clear(sender):
with open("gps_log.csv", mode="w", encoding="utf-8") as f:
f.write("")
# ラベルに初期化したことを表示
sender.superview["label1"].text = ""
show_alert(sender.superview, "データを初期化しました。")

とした。ここまでは順調に進んだ。

それで、カスタムUIのshow_alert関数を実装していたのだが、

def show_alert(view, message, duration=3):
# ラベルを作成して画面の上に表示
message_label = ui.Label(frame=(0, 0, view.width, 32))
message_label.text = message
message_label.alignment = ui.ALIGN_CENTER
message_label.background_color = "lightgray"
message_label.text_color = "black"

# ラベルをviewに追加
view.add_subview(message_label)

# 指定された時間後にラベルを削除する
ui.delay(???, duration)

指定秒数後にview.remove関数をどうやって実行できるのかがわからなかった。

リファレンスには

View.remove_subview(view)

Removes a view that was added to this view via View.add_subview().

という記載はあり、多分この関数でmessage_labelを渡してあげるのはわかったが、そうやって数秒後に消せるかがわからなかった。

でChatGPTに問い合わせをして、ui.delayの第一引数には関数を渡してあげる必要があり、その際にlambda記法を使う必要があるとのこと。

ui.delay(funcseconds)

Call a function after a given delay.

なるほど...関数を引数として渡す際はそういう実装が必要になるんだ...という新しい知見を手に入れました。👏👏👏

 

【iPhoneアプリ開発×Python】Pythonista紹介&GPSデータを画面出力

最近、iPhonePythonを使ったアプリ開発をすることができる有料アプリ「Pythonista」でアプリ開発をやっています。🖥️

自分が普段使っている環境がMac, iPhoneなのでXcodeも使えるのですが、やっぱりもっと気楽に開発したいという気持ちもある。なのでこのアプリの導入をしていました🤩

なんですが、やはり小さい画面のアプリ上で開発するのは中々しんどい状態でした💦

...今日までは😎

macOS SequoiaからiPhoneミラーリングで、PC→iPhoneからのやり取りが飛躍的にしやすくなりました👏

なんで、この機能を使って、まずはiPhoneGPS情報を取得し、画面上に表示するアプリを作りました。

(※ちなみに、画像処理をやりたかったらPytoがおすすめらしいです。opencvが使えるから、カメラ映像を画像処理できる)

アプリ画面

こちらが、今日の4時間ほどで最初に作ってみたGPS表示アプリですね。

機能としては

  • GPS情報表示フィールド
  • 取得ボタン
  • CSV書き出しボタン
  • データ削除ボタン
  • 削除時のポップアップ表示(カスタムフィールド)

です。

では次は、実装について。このアプリは2つのファイルをもとに動いています。

  • main.py(GPS取得などのPythonプログラム)
  • UI.pyui

...Pythonistaを触ったことがない方は「UI.pyui」ってなんだろう?と思ったはず。

これは、Pythonista上でUIを視覚的にデザインできるファイルのことです。

 

.pyuiの編集画面

この画面で、簡単にボタンやラベルフィールドなどのUIを作れちゃうということなんですね。

ここにUI要素を置いて、クラス名(.pyでテキスト表示する際のID)、アクション(実行したい関数)を設定して、main.pyの方で処理のフローを作ってあげるのが、Pythonistaで開発をする時の利点ですね。コードオンリーじゃない。

で、main.pyのコードはこんな感じです。

https://github.com/mono-repository/m.y.Pythonista_rep/blob/main/gps.py

 

詳細の実装はまた別の記事にまとめるとして、これをトレースすればPythonistaのいい導入なるはず。

youtube.com

それでは、良いPythonista Lifeを...🖐️

 

【ホンミ記事】9-17

🗒️🇹🇭🇹🇷:「技術だけで、良いものは作れない」ヒットメーカー糸井重里が半世紀働いて気付いた、熱狂を生むプロダクトに不可欠なもの

---

🎯×1:仕事の楽しさの一つは、できなかったことが出来るようになること。他者と作り上げること。

🎯×2:いいプロダクトを作るには、「いいやつで技術力もあれ」

---

❗️ 》糸井重里さんはMOTHERで有名で、偶にイトイ新聞も見てるし、十何年間も続けるってすごい人やで。これは見ないとッ!

 

✨ 》いやーITエンジニア向けのメディアに糸井さん出てるって珍しいわな。フムフム

 

💬 》自分も一人前のエンジニアになるためには技術的が尊重されると思ってるし、新卒就活でも最後までソフトウェア外販企業の専門職か手を動かせる社内SEのどっちかでとても悩んだから、これは参考にしたいな。

 

💡 》はえー、糸井さんの体験談面白いな。MOTHER開発時に元任天堂社長の故岩井社長が、自分よりも天才だと認めるリソースを使った人がいたんだ…

でもその人が関わったプロジェクトは期間と難易度から引き継がれず、岩井社長手動で新たに0から開発されたと。つまり、技術だけでは良いものは作れない。

 

🙃 ♻️》糸井さんは元々は「仕事」=「義務」と考えていた。それはしんどい様子で働く親の姿を見て思った。しかし、新卒で潰れそうな小さな広告会社で仕事していたら楽しかった。
また、楽しい仕事ばかりでもなく、簡単な仕事もあった。だが、自分でハードルを上げてクリアすることで、「できなかったことができる」仕事の楽しさに気づいた。

働くことが苦役である以上、仕事が楽しくなるサイクルを自分で回せることが大切だった。

---

🔗

「技術だけで、良いものは作れない」ヒットメーカー糸井重里が半世紀働いて気付いた、熱狂を生むプロダクトに不可欠なもの - エンジニアtype | 転職type

※ホンミ=「本日の見どころ記事」

Donkey Car進捗メモ

9-16 後期第一回DonkeyCarゼミ

 

強化学習をとりあえずチャレンジしてみて、そのあと実機のセットアップ、学習からの二台でのレースを行うことに。

 

まず参考にしたのは

DonkeyCar3シミュレーターで強化学習してみる #Python - Qiita

この記事をもとに、強化学習までの流れを把握した。

1. 環境のセットアップ

これは前期で行った

2. reinforce_learningディレクトリでddqn.pyを実行。学習が繰り返し行われているかをログで確認

 

その記事をもとに、さらに実装面が詳細に記載されている記事が
DonkeyCar simulatorで強化学習(その1) (ippei8jp.github.io)

この記事を参考にシュミレータのプログラムのブラシュアップをしていくか

実際のRaspiのインストール関係の参考資料
Install the software - Donkey Car (coolerking.github.io)

Mac改造記録2024-7-3

先週の水曜日にMacbook Proが機能不全に陥ったため、PC初期化していた。

機能しなくなったのはスピーカー周りのソフトウェアで、内蔵スピーカーが認識されなくなった、という致命的なものだった。数回の再起動のうち、何度か改善されたが、それでも何かオーディオ操作をするとUnknownになる、mp4やYoutubeがオーディオレンダラーエラーで読み込みができないなど、なかなか使い物にならない状態になっていた。Can't Speak anymore▶️

ということで、BuffaroのSSDにバックアップ&Google Driveにバックアップを保存し、Macの初期化を行い、超フレッシュ状態のMacをまた使えるように。🎉

 

嬉しいー!😀

 

で、今日やったこととしては

* zshrcでTerminalの表示名変更

* Terminalからエイリアスを利用できるようにzshrcに登録

* RaspberryPi Imagerをインストール→ローカルRaspiデータベースに利用(明日以降)

という感じ。

 

また開発したくなってきたのが何より楽しみです。

 

日付更新されると自動でobsidianを立ち上げられるようになった。

諸君!今日も開発してるかな!?👴

今日は初めてちゃんとシェルスクリプトとプロパティリストを書いてみたよ!(plist)

二つのファイルの役割は

* 指定した時刻に、指定されたパスにあるシェルスクリプトを実行するプロパティリストをdaemonフォルダに保存!こいつは時間をキーに取ることができるから、自動で実行するためのトリガーにすることができるよ!

* obsidianを起動するのと、ポップ音を3回再生する処理を書いたスクリプトを書類フォルダに登録

こんな感じだよ!

シェルスクリプト書くの楽しいしわかりやすいですな!明日もシェルスクリプト作りたい!

 

こういうとき、GPTをはじめとする生成AI大活躍!ありがたい相談相手だ!

ではでは