はじめに
都知事選である。祭りである。
Qiitaに生息するIT関係者、エンジニア界隈として最も注目されているのは安野貴博候補であろう。
安野たかひろ(東京都知事候補)公式ホームページ
その安野候補がよく着用している服はUNIQLOのアカマイ・テクノロジーズ社コラボUT。
アカマイ・テクノロジーズ
クラウドカンパニー / 1998年に設立されたAkamai Technologies, Inc.は、オンラインライフの力となり、守るクラウドカンパニーです。世界の先進企業が Akamai を選び、安全なデジタル体験を構築して提供することで、Akamai は、毎日、世界中の人々の生活、仕事、娯楽をサポートしています。超分散型のエッジおよびクラウドプラットフォームである Akamai Connected Cloud は、アプリと体験をユーザーに近づけ、脅威を遠ざけます。
"毎日、何十億もの人々が、オンラインで仕事、遊び、学び、ショッピング、アイデアの共有をしながら、つながっています。このデザインに使われている「texture」というコードは、デジタル体験の裏側にある共通言語を表現しています。Akamaiは 25 年にわたり、世界中の人々の人生をより豊かなものにするために、快適で安心なインターネット環境を築いてきました。これからも、世界をより安全に、より深く結びつける一役を担いたいと願っています。"
目的
安野候補がよく着ているTシャツに書かれているコードを解読することで、安野候補をより深く理解できるか試してみる。
やること
① 原文をひとまずGo言語のまま読み取る
② 筆者がちょっとだけ分かる言語(Python、R)に翻訳する
読み取り
Go
package main; import ( "fmt"; "html"; "lo "net/http"; "strconv"; "strings"; "time"
trolMessage struct { Target string; Count func main() { controlChannel := make(chan sage);workerCompleteChan := make(chan boo PollChannel := make(chan chan bool); work false;go admin(controlChannel, statusPoll { select { case respChan := <- statusPoll Chan <- workerActive; case msg := <-contr workerActive = true; go doStuff(msg, work teChan); case status := <- workerComplete Active = status; }}); func admin(cc chan sage, statusPollChannel chan bool) { Func("/admin", func(w http.ResponseWriter
quest) { hostTokens := strings.Split(r.Ho r.ParseForm(); count, err := strconv.Pars Value("count"), 10, 32); if err != nil { err.Error()); return; } msg := ControlMe r.FormValue("target"), Count: count}; cc printf(w, "Control message issued for Tar %d", html.EscapeString(r.FormValue("targe
}); http.HandleFunc("/status", func(w htt er, r *http.Request) { reqChan := make(ch tusPollChannel <- reqChan;timeout := time time.Second); select { case result := < result { fmt.Fprint(w, "ACTIVE"); } else print(w, "INACTIVE"); }; retu
改行がない未知の言語、何も分からない。
他言語への翻訳
①Python
from flask import Flask, request, jsonify import threading import time
app = Flask(__name__)
# Global variables to manage status
worker_active = False
control_message = None
# Function to simulate work
def do_stuff(msg):
global worker_active
worker_active = True
time.sleep(10) # Simulate some work being done
worker_active = False
# Endpoint to handle admin requests
@app.route('/admin', methods=['POST'])
def admin():
global control_message
try:
count = int(request.form.get('count'))
target = request.form.get('target')
control_message = {'Target': target, 'Count': count}
threading.Thread(target=do_stuff, args=(control_message,)).start()
return f"Control message issued for Target: {target}, Count: {count}", 200
except ValueError as e:
return str(e), 400
# Endpoint to check status
@app.route('/status', methods=['GET'])
def status():
if worker_active:
return "ACTIVE", 200
else:
return "INACTIVE", 200
if __name__ == '__main__':
app.run(debug=True)
このPythonコードはFlaskを使用してHTTPサーバーを実装し、Go言語のコードと同様の機能を提供します。/adminエンドポイントで制御メッセージを受け取り、バックグラウンドで作業を行います。/statusエンドポイントで現在のワーカーの状態を返します。
② R
Rで同様の機能を実現するコードを示します。このコードでは、plumberパッケージを使用してHTTPサーバーを作成し、GoやPythonで行ったのと同じエンドポイントを実装します。
library(plumber)
library(jsonlite)
# Global variables to manage status
worker_active <- FALSE
control_message <- list()
# Function to simulate work
do_stuff <- function(msg) {
assign("worker_active", TRUE, envir = .GlobalEnv)
Sys.sleep(10) # Simulate some work being done
assign("worker_active", FALSE, envir = .GlobalEnv) }
# Endpoint to handle admin requests
#* @post /admin
function(target, count) {
count <- as.integer(count)
if (is.na(count)) {
res$status <- 400
return(list(error = "Invalid count value"))
}
control_message <<- list(Target = target, Count = count)
future::future(do_stuff(control_message))
list(message = paste("Control message issued for Target:", target, "Count:", count)) }
# Endpoint to check status
#* @get /status
function() {
if (worker_active) {
return("ACTIVE")
} else {
return("INACTIVE")
}
}
# Create the plumber router
pr <- plumb()
pr$run(port = 8000)
このRコードは、plumberパッケージを使用して簡単なWeb APIを構築します。/adminエンドポイントはPOSTリクエストを受け取り、制御メッセージを処理し、バックグラウンドで作業を行います。/statusエンドポイントはGETリクエストを受け取り、現在のワーカーの状態を返します。
GPT4oに解説してもらおう
安野候補は9歳の時にプログラミングを始めたとのことなので、GPT4oに「9歳のこどもにもわかるように」解説させた。
もちろんです!簡単に説明しますね。
このプログラムの意味
イメージしやすい例え:
- コントロールメッセージ:
• これは、誰かがあなたに何かをお願いすることです。たとえば、「机の上にある本を10冊集めてください」というお願いのようなものです。- ワーカー(働き手):
• あなたがそのお願いを聞いて、実際に本を集める人です。- ステータス(状態):
• あなたが今働いているかどうかを教えるものです。「今働いているよ」か「今は休んでいるよ」と言うようなものです。プログラムの流れ:
- お願いを受ける:
• 誰かが「この本を10冊集めてください」とお願いをします。プログラムでは、これが「admin」という部分です。- 働き始める:
• あなた(プログラム)はそのお願いを聞いて、本を集め始めます。この間、あなたは「今働いているよ」という状態になります。- 働き終わる:
• 本を全部集め終わると、「今は休んでいるよ」という状態になります。- 状態を確認する:
• 誰かが「今働いてる?」と聞くと、「はい、働いてます」か「いいえ、休んでます」と答えます。これが「status」という部分です。具体的なプログラムの動き:
- /admin という入口:
• ここからお願いを受け取ります。お願いの内容は、「何をするか(Target)」と「いくつするか(Count)」です。- do_stuff という仕事:
• ここで実際に働きます。この例では10秒間働くことにしています。働いている間は「働いているよ」という状態です。- /status という入口:
• ここから「今働いているかどうか」を聞くことができます。働いていると「ACTIVE」、休んでいると「INACTIVE」と答えます。まとめ
このプログラムは、誰かからのお願いを受けて、そのお願いに基づいて働き、今働いているかどうかを答える仕組みを作っています。簡単に言うと、「お願いを受けて、それをやっている間、状態を教えてくれるプログラム」です。
どうかな?少しでもわかりやすくなったかな?
プロンプトにAtCoderのchokudaiさんのテクも使わせていただいた。
結論
ひとまず、コード自体は選挙戦のメッセージとは特に関係ないらしいことが確認できた。
このコードではなく、アカマイ・テクノロジーズ社の理念の方が安野候補の「テクノロジーで、誰も取り残さない」に共通するものがある。
最後に
安野候補の髪型や服装が一般的な選挙プロトコルには沿っていないことについて、「俺は安野さん良いと思うけど~大衆はどう思うかな~(チラッ)」というようなニュアンスの発言をする人が散見される。実際、このような政治的なイメージ戦略の手法のひとつとして、イメージコンサルタントが存在するのも事実である。筆者はイメコンのオタクでもあるので、そういった視点から蓮舫候補、小池百合子候補を眺めたりもしている(女性候補は白スーツやカラースーツを着がちだな、イッセイミヤケのプリーツプリーズをお召しでおしゃれだな等)。
「安野候補を応援しない人は遅れている」等は全く思わない。「自分が出馬してから文句言えや」とも思わない。全人類全員、誰を応援するか、自分が何を大切にするかを、己の自由意思で選択する自由があるからだ。他人をダシに安全地帯から有能で冷静な軍師を気取ってマウントをなさる御仁は、いつでもどこにでも存在するので、今更特に感想もない。
しかし、「未来の希望は自分で手足を動かして作ってナンボだし、若い世代が希望を持てるための布石を大人が打つのは当然でしょう」と考えている安野候補と同世代の一般市民個人としては、「テックは私たちは良い方向に変われるための手段だよね⭐︎」というマインドが背景にあるTシャツは、プロトコルから外れていても彼及び彼の主張に相応しいと感じる。
というわけで都知事選、みんな行きましょう🫶
最後までお読みいただきありがとうございました。