車中泊エンジニアのマルチリンガルな日々

車中泊エンジニアが外国語からプログラミング言語を使った生活を垂れ流す

A2AにDID署名を足して、事前登録なしでAgentを認証してみた

TL;DR(3行まとめ)

  • ✅A2A ProtocolにDID署名を追加し、中央レジストリへの事前登録なしでAgent認証を実現
  • ✅ did:web(HTTPS信頼)とdid:ethr(ブロックチェーン信頼)の2パターンをサポート
  • ✅ did:webとdid:ethr間でクロスドメイン認証が可能

リポジトリ:

npm install a2a-did

はじめに

AI Agent間の通信プロトコルとしてA2A Protocolが注目を集めています。しかし、現場で実装しようとすると、いくつかの課題に直面します。

Note: 本記事は@a2a-js/sdk(A2A Protocol Specification v0.3.0互換)を前提としています。

1. OAuthの事前登録コスト

個々のAgentに独立したidentityを持たせようとすると、Agent生成のたびにOAuth client_idの事前登録が必要になります。同じclient_idを共有すると、どのAgentからのリクエストか区別できません。

2. 中央レジストリへの依存

誰がレジストリを運用するのか?レジストリがダウンしたら?すべてのAgentを中央に登録したくない場合は?

3. クロスドメイン認証の困難さ

異なる組織のAgent同士が通信するとき、どうやって相手のidentityを検証しますか?

本記事では、DID(Decentralized Identifier)を使ってこれらの問題に対処する一つのアプローチを紹介します。実際に動くコードと一緒に、すぐ試せる形でお届けします。

クイックスタート(3分で動作確認)

前提条件

  • Node.js 18以上
  • npm / pnpm / yarn

まずは動かしてみましょう。詳しい説明は後回しです。

# 新規プロジェクトを作成
mkdir my-a2a-project
cd my-a2a-project
npm init -y

# a2a-didをインストール
npm install a2a-did tsx

デモ1実行(did:web identity作成)

demo1.tsを作成:

import { createAgentDIDService } from 'a2a-did';

async function main() {
  console.log('=== Creating DID:web Identity ===\n');

  const service = await createAgentDIDService(['web']);
  const identity = await service.createIdentity({
    method: 'web',
    agentId: 'my-agent',
    config: { type: 'web', domain: 'example.com' }
  });

  console.log('✓ Identity created successfully!\n');
  console.log('DID:', identity.did);
  console.log('Key ID:', identity.keyId);
  console.log('Private key length:', identity.privateKey.length, 'bytes');
}

main().catch(console.error);

実行:

npx tsx demo1.ts

期待される出力:

=== Creating DID:web Identity ===

✓ Identity created successfully!

DID: did:web:example.com:agents:my-agent
Key ID: did:web:example.com:agents:my-agent#key-1
Private key length: 32 bytes

できること/できないこと

✅ できること

  • 中央IdPへの事前登録不要でAgent認証(DIDベースの自己主権型認証)
  • 暗号的に検証可能な認証(JWS署名)
  • クロスドメインでのAgent認証(組織をまたいだ通信)
  • 複数のDID method対応(did:web、did:ethr)

❌ できないこと(範囲外)

1. 委任(Delegation)

A2Aコミュニティでは委任された認可(delegated authorization)の議論が進行中ですが、これは「誰が誰を代理しているか」の証明レイヤーであり、本実装の認証レイヤーとは分離しています。Verifiable Credentialsなどを使った別のレイヤーで解決する必要があります。

2. Fine-grained Access Control

ツール単位、リソース単位の動的権限制御は、Policy Engineの領域です。DIDは「誰か」を証明するだけで、「何ができるか」は扱いません。

3. 本番環境での追加実装

このライブラリは認証レイヤーのみを提供します。本番環境では、プラットフォーム側で以下の実装が必要です:

  • リプレイ攻撃対策(iat/exp/jti検証)
  • DID Documentキャッシュ
  • Rate limiting、監視

詳細はSECURITY.mdを参照してください。

なぜDID署名が必要か

OAuth 2.0の課題(動的Agentのユースケース)

  • 事前登録の手間: Agent追加ごとにクライアント登録が必要
  • スケールしない: 100個のAgentで100回の登録
  • 動的な追加が困難: 実行時のAgent生成に対応できない

中央レジストリの課題

  • 管理コスト: 誰がレジストリを運用するのか
  • Single Point of Failure: レジストリがダウンすると全滅
  • プライバシー: すべてのAgentを中央に登録したくない

A2Aコミュニティでもこれらの問題が指摘されており、中央集権的なAgent Registryは単一障害点(SPOF)や検閲リスクの懸念が議論されています。

DID署名による解決策

A2Aメッセージに署名を追加
↓
DID Documentで公開鍵を配布
↓
署名検証 → Agentの真正性を確認

この仕組みにより、事前登録や中央レジストリへの依存を減らし、Agent間の相互認証を実現できます(基本的な認証レイヤーとして)。

Note: A2A仕様では Agent Cardの署名手順は明記されていますが、メッセージ署名の標準フィールドは未整備です。本記事では、メッセージ署名をプロトコル拡張として実装する方法にフォーカスしています。

デモ1: did:webで署名→検証

did:webとは

  • HTTPS信頼モデル: HTTPSで公開鍵を配布
  • シンプル: Webサーバーがあれば使える
  • 用途: 企業の公式Agent、固定Endpoint

重要: did:webは本番環境ではHTTPS必須です。

ローカル検証ではmkcert等でHTTPSを用意するか、開発用にlocalhost例外を許可したresolverを使用してください。

Step 1: DID Identity作成

import { createAgentDIDService } from 'a2a-did';

// did:web serviceを初期化
const service = await createAgentDIDService(['web']);

// Agent用のDID作成
const identity = await service.createIdentity({
  method: 'web',
  agentId: 'my-agent',
  config: {
    type: 'web',
    domain: 'example.com'
    // port: 443 はデフォルトなので省略可能
  }
});

console.log('DID:', identity.did);
// → did:web:example.com:agents:my-agent

ポイント: - did:webはHTTPSとDNSを信頼モデルとして使う(既存Webインフラ活用) - DID Document配置場所:

  • did:web:example.com なら https://example.com/.well-known/did.json
  • did:web:example.com:agents:my-agent なら https://example.com/agents/my-agent/did.json

  • 本番環境ではprivateKeyを安全に保存(型: Uint8Array)

Step 2: A2Aメッセージに署名

import { signA2AMessage } from 'a2a-did';

// A2A Protocol準拠のJSON-RPCメッセージ
const message = {
  jsonrpc: '2.0',
  method: 'message/send',
  params: {
    message: {
      kind: 'message',
      messageId: 'msg-001',
      role: 'user',
      parts: [{ kind: 'text', text: 'Hello from Agent' }]
    }
  },
  id: 1
};

// DID署名を追加(JWS形式)
const jws = await signA2AMessage(message, identity);

// 署名付きリクエストを送信
const request = { ...message, signature: jws };

重要: signatureフィールドはA2A仕様の標準フィールドではなく、プロトコル拡張として追加しています。運用環境では、HTTPヘッダー(例:Authorization: DIDAuth <jws>)での運搬も選択肢です。

Step 3: 署名を検証(受信側)

import { verifySignedA2ARequest } from 'a2a-did';

// Express/Fastifyなどのエンドポイント
app.post('/a2a', async (req, res) => {
  if (req.body.signature) {
    const result = await verifySignedA2ARequest(req.body);

    if (!result.valid) {
      return res.json({
        jsonrpc: '2.0',
        error: { code: -32600, message: 'Invalid signature' },
        id: req.body.id
      });
    }

    console.log(`✅ Authenticated message from: ${result.senderDid}`);
  }

  // 通常のA2A処理へ...
});

何が起きているか: 1. 署名から送信者のDIDを抽出 2. DID Resolutionで公開鍵を取得 3. JWS署名を検証 4. 成功すればresult.senderDidに送信者のidentityが入る

デモ2: did:ethrで動的なEndpoint解決

did:webはDNSへの依存が気になる方向けに、Ethereumブロックチェーンを使うdid:ethrも試せます。

did:ethrとは

  • ブロックチェーン信頼モデル: Ethereumで管理
  • 更新可能: Endpointを後から変更できる
  • 用途: 動的Agent、クロスドメイン認証

セットアップ

import { createAgentDIDService } from 'a2a-did';

const service = await createAgentDIDService(['ethr']);

const identity = await service.createIdentity({
  method: 'ethr',
  agentId: 'blockchain-agent',
  config: {
    type: 'ethr',
    network: 'sepolia',  // テストネット
    rpcUrl: 'https://sepolia.infura.io/v3/YOUR_INFURA_KEY'
  }
});

console.log('DID:', identity.did);
// → did:ethr:sepolia:0x1234567890abcdef...

Agent Card解決のフロー

┌─────────────────┐
│ did:ethr:...    │
└────────┬────────┘
         │ 1. DID Resolution
         ↓
┌─────────────────────────┐
│ DID Document            │
│  {                      │
│    "service": [{        │
│      "type": "A2AAgentCard",│
│      "serviceEndpoint": │
│       "ipfs://Qm..."    │
│    }]                   │
│  }                      │
└────────┬────────────────┘
         │ 2. IPFS Fetch
         ↓
┌─────────────────────────┐
│ Agent Card              │
│  {                      │
│    "a2a_endpoint":      │
│     "https://agent.../a2a"│
│  }                      │
└─────────────────────────┘

Agent Cardへのアクセス

import { resolveA2AEndpoint } from 'a2a-did';

// DID → A2A endpointをワンステップで解決
const endpoint = await resolveA2AEndpoint('did:ethr:sepolia:0x123...');
console.log('A2A Endpoint:', endpoint);
// → https://agent.example.com/a2a

// これで通信可能
await fetch(endpoint, {
  method: 'POST',
  body: JSON.stringify(signedMessage)
});

アーキテクチャの意図:

did:ethr + IPFS + HTTPSの組み合わせは、IDとメタデータ(Agent Card)は改ざん耐性の高い経路に置き、通信自体は現実的なHTTPSで行うという設計です。これにより「誰と話しているか」の検証と運用現実性を両立できます。

設計上のトレードオフ: 完全な分散化を目指すなら、通信プロトコルもlibp2pなどのP2Pプロトコルを使うべきです。HTTPSエンドポイントを使う本実装は、運用上の現実解として既存インフラとの互換性を優先しています。将来的には、Agent CardのエンドポイントをP2Pアドレス(例:/ip4/.../tcp/.../p2p/...)に拡張することも可能です。

did:web vs did:ethrの使い分け

特徴 did:web did:ethr
信頼モデル HTTPS/TLS (Web PKI) ブロックチェーン
セットアップ 簡単(HTTPSサーバーのみ) 中程度(RPC設定必要)
解決速度 速い(HTTPS) やや遅い(RPC + IPFS)
改ざん耐性 中(HTTPS/DNS依存) 高(ブロックチェーン)
運用コスト 低(既存インフラ) 低(解決は無料、作成・更新にガス代)
推奨ケース 企業Agent 動的Agent、クロスドメイン

まとめ

本記事では、A2A ProtocolにDID署名を追加する実装を紹介しました:

  • 中央レジストリへの事前登録不要でAgent認証(DIDベースの自己主権型認証)
  • 暗号的に検証可能な認証(JWS署名)
  • すぐに試せる実装例(did:web、did:ethr)
  • 既存A2A実装との共存可能(@a2a-js/sdkと併用)

フルスタックデモ(次回記事などで紹介)

a2a-didはコアライブラリですが、「実際のアプリでどう使うか」を示すため、フルスタックデモを準備中です:

詳細は次回の記事で紹介します!

最後に

何かありましたら投げてもらえると助かります🙏

参考資料

西安の観光地紹介動画に参加させて頂きました!

f:id:humuhimi:20210916024800p:plain

西安でも御縁があって、中国の最も美しい観光地集の紹介動画に参加させて頂きました!

 

f:id:humuhimi:20210916025613p:plain

大唐不夜城

f:id:humuhimi:20210916030118p:plain

回民街1

f:id:humuhimi:20210916030134p:plain

回民街2

基本引きこもりですが、たまにはアクティブに交流するのも楽しい!

いろいろ両立させつつ、頑張っていきます!

中国オープンソース本の翻訳に携わらせて頂きました!

f:id:humuhimi:20210916023110p:plain

中国オープンソース

twitter上のつながりでニコ技深センコミュニティのグループと翻訳に携わらせて頂きました!

有志で日本語訳した
「中国オープンソース発展ブルーブック2021」
Code Chinaより正式発表されました!
「翻訳チームに感謝。日本語版は、コミュニティへの大きな貢献」
という言葉とともに、翻訳チームのクレジットも。
そして、僕らのGithubリポジトリがCODE CHINAにミラーされています。オープンソース素晴らしい

mp.weixin.qq.com

 

これからはよりグローバルな活動に参加して行きたい!

大連のドローンショーのプロモーション撮影に参加しましたっ!

f:id:humuhimi:20210916022041j:plain

お久しぶりですっ ふむひみです\(^o^)/

 

過去記事になりますが、御縁あって大連のドローンショーに参加させて頂きました!

prtimes.jp

紹介動画を作ったので大連行く人は是非とも見てください!

www.youtube.com

 

僕のオススメ!✨ギークハウス新宿2とは🏠💻

f:id:humuhimi:20210425131212j:plain

ギー2の神 もか様

 どうも!超お久しぶりですっ🌟

 

相変わらず日本に帰れず中国で引きこもってるふむひみです\(^o^)/

 

今日は僕が、未経験エンジニアとして初上京した時にお世話になったシェアハウス(GEEK HOUSE新宿2)について紹介したいと思います!

 一番下にそもそもGEEK HOUSEとは何かまとめてるので、ちらっと見てみてください!

 GEEK HOUSE新宿2がおすすめな理由

 

f:id:humuhimi:20210425133921j:plain

ギー2リビングの日常

1.家賃が安い(割引や飯が無料になるサービスがある!)

まず僕が上京する際、決め手になった理由でもありますが、家賃が安いです。

4人部屋ではありますが、一人1ベッドで都心・新宿で家賃が5万5000円という超格安物件

また、プログラミングなど何かしらのスキルを持っているもしくは勉強してると認められた場合5000円割引になり、なんと家賃5万円になります。

更に、米とパスタが無料なので、超節約できます🍚!!

f:id:humuhimi:20210425135654j:plain

ギー2の作業部屋の一つ

2.新宿3丁目駅に徒歩5分

交通アクセスが神です。

なんと、徒歩5分で丸の内線・副都心線・都営新宿線にアクセスできます。家賃5万円でw

なので、移動が多い方や毎日通勤される方にもおすすめです。

f:id:humuhimi:20210425140116j:plain

ギー2の作業部屋の日常

3.技術書がいっぱい置いてある

エンジニアやデザイナさんで普段から勉強されてる方が多いと思います。

そういう方々って毎回技術書など買う際に高いと感じたこともおおいのではないかと

そんな人々のためにギークハウスでは技術書をシェアするシステムが整っており、本棚から本を借りることができます。

また、他のギークハウスにある本などもslackを通して連絡し、借りることができます。

f:id:humuhimi:20210425141904j:plain

たくさんの技術書

4.作業部屋が多い・作業用モニターなど借りれる

 

普段から勉強や在宅ワークされる方にとって作業部屋とモニターは必需品ですよね。

そういう作業部屋が多く、モニターも借りれます。椅子もしっかりPC作業で腰痛などにならないように配慮されており最適な作業環境を提供してるようです。

気分転換に別部屋で作業するのも効率アップに繋がります。

 

f:id:humuhimi:20210425142523j:plain

ギー2の作業部屋

5.新宿御苑まで徒歩10分

 

東京都心に上京してからランニングする場所や公園が少なく困ったことはありませんか?

僕も大阪から上京したのですが、走れる場所がなくはじめの頃はだいぶ困りました。

ジムに行くのもいいけど、やっぱり自然豊かな場所で散歩したり走ったりリフレッシュしたいですよね。

ギー2はなんと新宿御苑からめちゃくちゃ近いんです。

なので、東京で消耗されてる方は新宿御苑で癒やされてみてはいかがでしょうか?

 

入場料は1回500円・年間パスポートは2000円でジムに行くより余裕で元が取れます。

f:id:humuhimi:20210425143436j:plain

新宿御苑

6.住宅周辺がアングラ感ある

ここは好き嫌い分かれると思いますが、住んでる場所が新宿でも特殊な雰囲気を醸し出してる場所なので面白いことに遭遇しがちです。

 

初めて上京した時は異世界に転生した気分を味わえました。

 

また、歌舞伎町やゴールデン街が近く、ハロウィンやその他イベントデーは周りに仮装した人があつまったり、道端で酔いつぶれてる人がたくさんいたり"新宿メルトダウン"をじかに味わうことができます。

 

人生に飽き飽きしてるつまらないと感じてる人は一度異世界転生してみてはどうでしょうか?

twitter.com

f:id:humuhimi:20210425145454j:plain

2丁目の夜

最後に

最近は部屋の掃除が活発に行われており、住民をもっと募集しようとしてるみたいです。

ご興味のある方は東京に来た際には一度立ち寄ってみてはどうでしょうか?

 

こちらから連絡してみてください!

twitter.com

4hacker.github.io

 

そもそもGEEK HOUSEとは?

ギークハウスとはギークハウスプロジェクトという企画から始まっており、エンジニアやクリエイターその他いろんな特徴がある方や興味ある人が集まりシェアハウスをするというプロジェクトです!

詳しくはこちら!

geekhouse.tumblr.com

中国でリモートワークするのはとてもしんどい件

中国でリモートワークしんどい件

中国でリモートワークしんどい件

 

どうも お久しぶりです!

 

今年頭にブログやyoutubeを投稿して以降、ちょっとさぼり気味で全然投稿していませんでした💦

 

サイバー大学生がオンライン勉強会やるってよ(通称:オンやる)が2020年からプレスタートしたので、それに合わせて今月来月あたりにちょこちょこ投稿していきますね!!☆

 

自己紹介

 

今回僕のブログを見てくださる方で僕のことをよく知らない人もいるでしょうし、軽く自己紹介させていただきます(^^)/

 

大学1年生終了→英語留学→

中国・香港でインターンシップ

サイバー大学に転入→webエンジニア1年

フリーランスとして独立

現在、サイバー大学4年生で仕方なく中国で生活しながら、お察しの通り雑魚プログラマをしてます(笑)

 

なぜ中国にいるのか 

 

僕が中国に来た経緯として2019年こちらのブログを書きました

 

humuhimi.hatenablog.com

 

このブログにも書かれている通り、日本しんどいわ~(´;ω;`)ってなって香港経由で中国深圳に入りました。

 

そして、五年ぶりぐらいに福建省(ウーロン茶の名産地?)の親戚に会いに旧正月だけ(今年は1月真ん中から末当たりまで)新幹線で行ったのですが、一緒にコロナも来てしまいました。

 

 

その時の中国政府の対応は素早く、周りのおじいちゃんおばあちゃん勢の対応も爆速

 

やっぱり、一回サーズを経験してるだけみんなの慎重度は大したものでした。

 

まあ、日本で想像してもらうと、今のコロナより殺傷力が強いウイルスが出て、数年後に似たようなウイルスが出たら日本政府も一般市民も普通に焦って早急な対応をしますよね。そういう感じです。

 

それにしても、さすが中国人これはちょっとやりすぎなのでは??という方法でコロナ予防もしてます。

これは僕が実際に老人が多めのマンション街で撮った写真です。

コロナ時のバリゲート

コロナ時のバリゲート

シェアリングバイクを壁にするという斬新な方法

昔、ちょっとCMで見かけた"かたまりだましい"っていうゲームを思い出した。(笑)

 

まあ、そんなこんなで日本からリモートでちょっと仕事をもらったり、なんとかしながら6月までは仕事があったのですが7月のフルリモートの案件で中国では無理だと発覚しました。

そこから会社の人と話合い8月に日本に帰ることで合意し、そんなこんなで上海の空港に向かってからまさかの飛行機キャンセルが発覚。

ちゃんと、『旅行の準備を始めましょう』的なメールが来てたのにも関わらず、そういう問題になってしまいビザも切れたのでとりあえず領事館に言われるがまま住所登録してある福建省に早急にかえってきたのですが、資料の日本語翻訳をしたりいろいろ手続きが多くまだしばらく不法滞在者生活は続きそうです💦(笑)

 

まあ、そんなこんなして『中国でリモートはやっぱり無理やわ~。やっぱり、日本帰ろっと』って思ってた矢先の出来事なので中国で本当にリモートワークが不便なだわっていう愚痴を含め説明していこうと思います(笑)

前置き無駄に長くてごめんね(笑)🙇

 

 

中国でリモートワークまじでだるいという話

 

だるいその1(日本で使えていたSNSやgoogleが使えない)

まず、中国来てから早速困ったのがtwitterやfacebookやlineなどが使えないということ。

もちろん、サイバー大学の授業を受けるときもVPNをつけて受けないといけない。

 

数回中国に来ていて、ある程度慣れていたがそれでもだるい。

とりあえず、事前に日本でVPN(virtual private network)を準備して来ていたがやっぱりVPNでも中国で使えない物が多く、使えても速度がめっちゃ遅いなんてざら

 

おすすめのVPNはこちらの記事の下あたりに書いてるように世界VPNやExpressVPNなどがおすすめです。後、最近つかってるのでカベネコVPNがおすすめ!

 

humuhimi.hatenablog.com

 

 

kabeneko.net

中国に短期旅行で来るなら基本的に、どのVPNも1週間から1か月ほどお試し期間があるのでそれで乗り切りましょう

もし1カ月以上長期の旅行になるならexpress VPNや世界VPN など1か月以上3か月未満のサービスを使いつつ、切れてしまったら有料でも速度が速くて安定性の高いVPNサービスをおすすめします!

 

ExpressVPNの注意点として僕が使ってた時はシンガポールのサーバー経由がメインで、日本のサーバー経由がないのではてなブログなどの海外サーバーからセキュリティ上アクセスdenyされてるサービスを見たりできないのでそういうサービス使ってる人は世界VPNなどの日本経由のものを選ぶといいと思います。

 

ほかに使えるもの

ios スマホでは無料で使えるネコVPNで十分です!おそらく、appleストアにまだあるはず!

それ以外に、shadow roket ,カスペルスキーセキュアコネクションなども無料期間長くて使えた記憶があります。

 

だるいその2(ネットスピードが遅い)

 

ホテルで住む場合などは基本的に、備え付けのwifiがあると思いますが、こちらで一度速度を測ってみましょう。

 

中国ローカルでの速度はこちら

www.speedtest.cn

海外サイトや日本でのサイトの速度を見る場合はこちら

fast.com

 

中国では250mbpsぐらいあっても、VPNを通して日本の方の速度を測ると、40mbpsぐらいに落ちます。

 

これが非常に厄介

夜の9時から1時ぐらいまでインターネットのアクセスが増えるのでさらにおそくなり、日本のサイト見るのに2mbpsぐらいになったりします。

酷い時だと、youtube見るときは画質を144pぐらいにしないと見れないです。

サイバー大学の授業とかまじでこの時間は受けれない。基本先生がみんなフリーズしてまじでわい氏苦笑いしかできなかった(;´д`)トホホ

 

前は、中国移動のネットワークを今は、中国電信のネットワークを使ってますが毎月1000円多めに払うと、最大1000mbpsのやつがあると聞いたのでそれにしようか悩み中

 

基本的に、インターネット契約は日本より安いけど、日本と同様快適にネットサーフィンするならVPN含め結局中国でも日本と同じぐらい値段を払わないといけないのではと思う。

 だるいその3(VPNがあっても、Googleのサービスを使えない場合がある)

 

この中国だるいあるあるが本来日本に帰る羽目になった原因なんだけど、本来7月からベンチャーでfirebaseを使った案件をさせてもらえる機会を頂いた。

javascript自体今年からやっと真面目に触りだしたので、node.js自体あまり触ったことがないのも含め事前に練習でサイバー大学のグループ管理リストサイトを作ろうとしていた中あることが発覚した。

 

cloud functionを使ったdeployが異様に遅い。日本でfirebase使ったことがないから比較はできないけど、普通に使い物にならないぐらいdeployが遅かった。

また、firebase loginする際も、VPN をつかってるし、IPアドレスが変わってしまうからか毎回違うlogin tokenを発行してそれを元にloginしないといけず、作業にならなかった。

4月にreact とgatsby jsを使ったサイトを作ったときは、全然こういうことがなかったのでVPNがあってもGoogleのサービスをちゃんと使えないのはかなり衝撃的だった。

 redditなどで、外国人が同じ質問してて、結局AWS chinaやアリババクラウドを推奨してる模様。

まあ、どちらにしろ日本に帰れなくなったので仕事は縁がなかったことででなくなりました(´;ω;`)

 

だるいその4(中国でwindows home のPC買ったら、システム言語変更できない)

 

サイバー大学入学時に買ったおフルのmacbook Proの液晶がおかしくなり、急にシャットダウンすることも増えたので新しいPCを買おうと考えていた。

初めのうちはwindows使いにくいし、なんかよくわからんとおもってたが、あまりにも金がないのと、2020年からwsl2でネイティブのLinuxが使え、docker for desktopがwindowsでもしっかり動くし、windows terminalも入ったのを含めmacbookじゃなくてよくね!?ってなり、かっこいいdual monitorのwindows Laptop を買おうと思い立った!

dual monitorイメージ

dual monitorイメージ

 

日本帰って買うつもりだったけど、税金を計算すると1万5千円以上違ってくるので、結局中国で買ったのですが失敗でした。

 

まさかのwindows homeが普通のhomeではなく、謎のwindows home chinese editionという言語設定を中国語以外に変更できないというクソ仕様でした(笑)

イメージとしてこういう感じ

Windows Chinese Edition


ここぐらいならまだ何とか理解できるけど、まじで細かい設定になると中国語の意味が全く分からないので本当に困りました💦

 

これを解決する方法は2つ

1.windows homeを一度抜いて、入れなおす方法

2.windows proにアップグレードする方法

 

結局、調べてみたけど1の方法はとてもめんどくさそうので、いつかhyper-vを使うと自分に言い聞かせwindows proを購入

そしたら、日本語をダウンロードでき解決しました。

ただやっぱり、再起動するときなど、一瞬中国語が出るのでああもとの中国版を上書きできないよなあ。。。と思いつつ、まあ作業にはまったく支障がないので一応解決としてます。

 

だるいその5(中国のネット経由で重いファイルダウンロードできない)

 

 新しいwindows PC買ったし、開発用の環境を構築しようとした時に早速問題にぶち当たった。

なぜかdockerのホームページからdocker for desktop windowsがダウンロードできない。正確に言うと、ダウンロード途中に重すぎてエラーになる。

 

こういう中国独自の問題を解決するにはこちらのサイトがおすすめだ。

www.csdn.net

基本全部中国語だが、英語や日本語で調べても出てこない中国独自の問題の解決策が中国版stack overflow的な感じで載っている。


このサイトによると迅雷(xunlei)or 百度网盘を通して入れる必要があると知る。

www.xunlei.com

 

 

pan.baidu.com

 

とりあえず、迅雷を入れてダウンロードするとエラーなく普通にダウンロードできた!

迅雷を使ったダウンロード

迅雷を使ったダウンロード

 

これにより、wsl2上にdockerを入れることができた!

 

だるいその6(中国のネット経由でgit cloneができない)

 

 早速、Ubuntuも入れたしmacbookで開発してたリポジトリをcloneして持ってこようとしたらまさかのダウンロードができないというか全然receiving objectsができないことが発覚。

 

その場合こちらの中国国内用のミラーサーバーを通して、git cloneしないといけない。

こちらのcnpmjsミラーでgit cloneしたらいけました!

cnpmjs.org

例)

  1. //普通のgit clone
  1. git clone https://github.com/Hackergeek/architecture-samples
  1. //中国国内でcloneする場合
  1. git clone https://github.com.cnpmjs.org/Hackergeek/architecture-samples

 

 だるいその7(中国のネット経由でnpm installができない)

 

git cloneした後に、node_moduleを入れるためにnpm installしたけど、相変わらず途中でgitからのダウンロード時に止まってしまう。

また、直接、cnpmjsを使えたらいいけどやり方もよくわからない。

そういう場合、npm config listでregistry を確認しよう。

おそらく、デフォルトではhttps://registry.npmjs.org/になってるはずだから

そこに、中国のネットショッピングサイトで有名なtaobaoのミラーサーバーを使う

npm config set registry https://registry.npm.taobao.org

これでnpm installしたらいけた。

 

これにて、やっと開発環境を構築できました!!

 だるいその8(debian系のパッケージインストールがめっちゃ遅い)

 

中国にいるときパッケージインストールする場合もミラーが必要になります。

この場合はsources.listにミラーを設定する。

 

まずはバックアップをしておく

sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup

 

sources.listの書き換え

sudo vim /etc/apt/sources.list

 

aliyun(アリババ)のミラーをぶっこむ

 deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

 

そして更新で完了

 

sudo apt-get update

sudo apt-get upgrade

 だるいその9(anacondaのcondaが遅い)

 

中国の精華大学のミラーを使用する

チャンネルを加えるとダウンロード速度が上がる

 

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/

conda config --get channels

で確認して、追加されていたら完了

  だるいその10(仮想環境用のwindows 10 ios ファイルがバグる)←今ここ

ちょっとグレーな中国アプリを使う環境用に、hyper-vにwindows osの仮想環境を作ろうとしたがVPNなしだとwindows 10のiosファイルをダウンロードが完了した瞬間ハッシュ値が合わずダウンロードがキャンセルされる。

 

VPNありだとダウンロードできるが、hyper-vで仮想環境を立ち上げた瞬間にbootエラーでisoファイルが正常じゃないと怒られる

運よく、急用で必要になるはずのグレーアプリが今のところ不要になったのでとりあえず放置してます。

まあ、できるだけ早く解決しないと色々不便だなあ。

 

ミラーサイトを乗っけておきます 

 

mirrors.tuna.tsinghua.edu.cn

 

developer.aliyun.com

 

developer.aliyun.com

 

 

mirrors.tencent.com

 

 

ということで、本当にめんどくさい!

 

 まとめ

なので、みなさん中国にきて開発をするときは覚悟してくださいということで

 

まあ、どちらにしろ僕は当分の間日本に帰れないのでそういう中国ならではの方法をいっぱい探していこうと思います。

 

これからも、そういうことに興味ある方はよかったら見てください

 

以上中国でリモートワークはしんどいぞということでした

 

無駄に長文になってしまった文章読んでいただき、ありがとうございました(^^)/

 

後、9月27日のおんやる当日にもオンデマンドで中国ネタについて話すのでよかったら見てみてください!!

 

ほかにもいろいろ面白い項目があるのでオンやるをチェックしてみてくださいね!!

 

onyaru.com

 

 他にも

・「量子コンピューターを触ってみた」ゆっくり実況(オンデマンド)

・コロナ時代の家計簿作成 with google tools(オンデマンド)

・日本に帰れなくなったふむひみが語る中国ネタ(生配信)

 ・日本に帰れなくなったふむひみが語る中国ネタ - 外伝(生配信終了後オンやるサイトにリンクが入ります)

 ・アドベントカレンダー(サイト掲載)

onyaru.com

やってるのでよかったら見てくださいね!!

 

 

 

 

 

 

 

 

 

臆病者のナンパ分析

 

f:id:humuhimi:20200122191150p:plain

臆病者

どうも日本脱出系のふむひみですっ

 

今日は受けるかはわからないがこれも自分らしさということで拗らせ系コンテンツを投稿しようと思う。

好きな人は好きだし、嫌いな人は嫌いなコンテンツになると思うので見たくない人はそっ閉じしてください笑

 

昨日までyoutube投稿と双極性障害の相性の悪さもあって落ち込んでいたそして、まあナンパにも行ったわけだがもちろん2時間地蔵をしただけだった。

 

なので、反省込みネタ込み次に活かす込みでブログにする⭐️

 

過去

女性コンプレックスを拗らせた

きもいかもしれないが、小学校の時に好きな女の子がいて告白できなかった。

その時に、男子校入学後に告白を試み男子校受験を試みるが馬鹿な僕は受験に落ちまくり、共学の中学校に入ってしまう。

そこで女には話しかけないという謎の制約を自分にかけてしまう。

そこから女性コンプレックスを拗らせた。

んで、彼女はできても手すら繋がないなどが続く。

遺伝子的に臆病者 内向思考なのは仕方ない。

 

現状

少し女遊びなるものに憧れるが引きこもりかつ拗らせ系男子にはきつい模様と判断

 

とりあえず、今 中国で男友達もいなければ女友達もいないのでナンパをしてでも何かしらつながりを作ろうと決断

 

とりあえず、普通にナンパを試みるももちろん失敗

なので、グーグルフォームを使った調査型ナンパ法を思いつく

 


グーグルナンパフォーム

 

されど、結局昨日落ち込んでいたからかやっぱり今日も飯だけ食って帰ってきてしまった。

 

 

なので、今日から臆病者なのを認めて徹底的に追究しようと思う

 

今回はストリートナンパをメインに考えていきます。

アプリなどもありますが、今回は自分の弱点克服も含めてストナンで考えていきますっ

 

対策

 

俺目線

 

行く前から無理と思ってる

解決方法

思考停止する

酒を飲む

睡眠不足にする

頭にプログラミングなどで負荷をかける

 

別の事柄で成功体験を積んでから行く

 ストレスのかからない作業をおわらしてすっきりして行く

ランニングして、筋トレしてシャワー浴びて瞑想してから行くなどなど

初めの声かけができない

とりあえず、いろんな人に話しかけるようにする。

ナンパの準備運動の前に、老若男女含めて合計30人に声をかけながらナンパする地点に向かう

 

難易度

道に迷った系から

今日天気がいいな系までなんでも試す

 

無理だったら

罰を用意する

次につながるもの(声かけのシミュレーションや初動の声)

 

日一回 道を訪ねる

とある一個の店を訪ねる

 

その他

・一人の暇そうな奴を探す

・待ち合わせ女子を探す(まずは店を知ってるか聞く こっちも待ち合わせしてることを伝える)

露出度高め、過度に外を意識してる女子を狙う

靴がボロボロ

 

周りの視線が気になる

暴露法で道のど真ん中でいきなり歌う しかも日本語でw

(実際にやってる奴がおるが彼が何を考えてるかは不明 あと、周りはドン引きな模様)

 

人目を気にするのは脳のCPUが余剰分あるからと仮定する

それに代わるCPUなおかつ不安を生じないものに置き換える。

 

例えば500-13を脳内で繰り返し、それまでに女の子に話しかけないといけないというルールを自分にかす(東京グール風) 引き算結果を口から出すのでもいい。

自分に意識が向く

 

女性目線

 

とりあえず、店を訪ねて一緒に行く? んで飯一緒に食わん?からの無理やったら連絡先だけでもパティー

 

とりあえず、 共感を意識する。

道を尋ねるだけでもいいが長時間会話からの次に繋げれるように楽しく話す

 

今天跟你讲话我很开心下次你有时间候一起去喝茶好

 (話してて楽しかったから、今度よかったらお茶でもイコー的な)

 

結論

臆病者には臆病者のやり方がある。

 

「臆病者には臆病者の生き方がある。

おめえが苦しんでるのは、臆病者の自分から、なんとか逃げ出したいと思っているからだ。

どんな手を使ってでも逃げ出したいと思っているからだ。

だが、それは本当じゃねえ。

臆病者の自分を大切にしてやる道が、どこかにきっとあるはずだ。

臆病者の自分から逃げちゃいけねえ。

一度逃げれば、一生逃げ続けることになる。」

 

宮部みゆき

 

臆病なりに、ほん気で生きよう。

ナンパが無理なら研究しよう

臆病には臆病の生き方を!!