木曜日, 5月 15, 2025
No menu items!
ホーム ブログ ページ 2412

Flexport CEOのRyan Petersenのハイステークステストは、関税の混乱の中で「あなたはおかしくなりません」



Flexport CEOのRyan Petersenのハイステークステストは、関税の混乱の中で「あなたはおかしくなりません」

先週の木曜日の午前11時に、ドナルド・トランプ大統領が「解放日」と呼ばれるものの下で新しい関税を一掃したと宣言した翌日、ライアン・ピーターセンはカメラに住んでいて、2,300人以上の不安な顧客が詰め込まれた仮想室から質問をしていました。の創設者兼CEO フレックスポート現在12年前のグローバルロジスティクスおよび税関証券会社は、前夜に自分で細かい印刷物を勉強し、私たちの輸入業者のために目を見張るような新しい現実を説明する準備をしていました。

「私たちはライブストリーミングのプラットフォームを壊しました」とピーターセンはその夜に半分冗談を言って言った TechCrunchのStrictlyVCイベント サンフランシスコで。 「より良いものを得る必要があります。」

24時間も経たないうちに、世界貿易の世界は逆さまになりました。 79%の累積関税は、ソファを含む中国のさまざまな製品にまもなく適用されます。消費者向けの直接輸送モデルは、かつて800ドル未満の免税最小限のしきい値によって保護されていますが、新しい税関義務の対象となります。一方、米国の港は、船が中国で作られている場合、または注文している場合でも、港ごとに最大150万ドルの海上航空会社を平手打ちできる規則を提案しています。

「お客様にとっては恐ろしいことです」とピーターセンはイベントで語った。 「これらの企業の一部にとって、多くの顧客にとって、 [the spate of changes] 実存的な生命と死の決定になります。」

米国最大の税関証券会社の1つであるFlexportは、速くステップアップする以外に選択肢がありませんでした。すでに今年、ピーターセンは200人の顧客と直接話し合っており、その多くは生産のためにベトナムに大きく依存していると言いました。

しかし、ピーターセンは、ベトナムが46%の関税で平手打ちされたことに驚かなかったと言いました。 「私はどこにでも職務があると思っていました。それが私たちが見たものです。」

彼が指摘した本当の驚きは、米国が世界的に輸入のためにDe Minimisプログラムを閉鎖するというあまり知られていない発表だったと彼は指摘した。この変更は、TemuやSheinなどのeコマースジャイアントのビジネスモデル、および近くのメキシコからの充足を処理する数千のShopifyベースの店舗に影響を与えます。

「すべてのeコマースブランドの30%以上(大規模なブランド)がメキシコで充足を設定しました」とピーターセンは説明しました。 「それで、それはすべて消えてしまうか、少なくとも免税の側面です。」

ピーターセン – いわゆる信者 ファウンダーモード 1日に最大50人の従業員と話をする人は、言葉を出すのを待ちませんでした。 「私は掘り込み、このことを理解しようとしなければなりませんでした」と彼は聴衆に語った。 「そして、私たちが理解しているように感じ始めたとき、私はde Minimisについてのブログ投稿を書きました。 [also] 半導体であることに最初に気づいた 刻まれた。私はNvidiaの最大の投資家の1人が「これをどこで見ているの?」と言っていました。私は ‘それです [says it in the new law]。 ‘”

当然のことながら、ピーターセンが説明したように、トランプの新しい関税戦争の直後に提供しようと努力したことは、単なる物流ガイダンスではありませんでした。それは安定性でした。 Flexportの従業員は確かにそれを必要としていました。 「危機にある規則は、誰もが部屋の中で最も穏やかな人の周りに集まることです」とピーターセンは言いました。 「ご存知のように、あなたは会社のリーダーです。たとえあなたが中にいても、あなたはびっくりすることはできません。あなたの会社はびっくりします。」

クーラーヘッドは、Flexportの顧客が現在必要としているものです。関税テーブル、税関規則、および送料がすべて流動的であるため、クライアントは完全な混乱のように感じるものを理解するためにFlexportに頼っています。

そしてさらに多くの混乱が迫っています。米国の貿易代表からの保留中の提案は、中国製の船に、さらには中国製の船が所有する船舶が艦隊に所有する船に驚異的な港湾料金を課すと脅しています。

「彼らは料金をかけるつもりだと言っています…船が中国で作られているなら、それは百万ドルだと思います…彼らが米国に来るたびに100万半です」とピーターセンは言いました。

政権によると、目標はアメリカの造船を刺激することです。ピーターセンの見解では、おそらく結果は、米国の輸入業者に渡されるより広範なコストであり、船が作る停留所の数を最小限に抑えるために仕事を失う多くの海事労働者です。

すべての大混乱にもかかわらず、ピーターセンはそれを自由貿易の終わりと呼ぶ準備ができていません。 「おそらく、これは永続的ではない」と彼は言った。 「私はキャビネットのメンバーの一人と話をしました。彼は、解放の日がプロセスの終わりではなくスタートとなると私に言った。」

彼は、トランプ政権の操縦に先んじて、いくつかの国が応答していることを奨励されたと言いました。 「ベトナムとイスラエルは両方ともテーブルに来て、今週アメリカの商品のすべての義務を排除しました」とピーターセンは指摘しました。

それは、静かな交渉、相互の取引、そして再形成されたグローバルサプライチェーンなど、前進する道を提供するかもしれません。それまでの間、ピーターセンと彼のチームは電話に応答し、嵐をツイートし、サプライチェーンを動かし続け、フリークアウトを寄せ付けないようにウェビナープラットフォームを壊しています。

その完全なインタビューをチェックすることができます。Petersenは、AIと彼が創設者モードを受け入れた理由についても以下で確認できます。





Source link

Views: 0

広末涼子容疑者 傷害疑いで逮捕



広末涼子容疑者 傷害疑いで逮捕

広末涼子容疑者 傷害疑いで逮捕



Source link

Views: 0

任天堂がNintendo Switch 2のゲーム機本体とゲームソフトがなぜこんなに高価なのかを説明 – GIGAZINE



任天堂が2025年6月5日に発売予定のNintendo Switch 2は、本体価格は日本語・国内専用版が税込4万9980円、Nintendo Switch 2と同日に発売される「マリオカート ワールド」の販売価格はダウンロード版が税込8980円、パッケージ版が税込9980円です。この価格設定に対して海外では「高すぎる」という声が上がっており、メディアが任天堂に問い合わせるケースが増えています。

Nintendo explains why Switch 2 hardware and software cost so much – Ars Technica
https://arstechnica.com/gaming/2025/04/nintendo-explains-why-switch-2-hardware-and-software-prices-cost-so-much/

Nintendo Switch 2のアメリカでの販売価格は449.99ドル(約6万6400円)です。


任天堂のアメリカ法人であるNintendo of Americaのダグ・バウザー社長は、アメリカのドナルド・トランプ大統領が相互関税を導入した直後にCNBCのインタビューに応じました。このインタビューの中で、バウザー社長は「我々は依然として関税について理解を深め、関税がどのような影響をもたらす可能性があるかを理解しようとしています」「(Nintendo Switch 2の販売価格は)消費者にとって適切な価格であり、我々が作っているデバイスにとって適切な価値提案になるだろうと感じています」と語りました。

任天堂はWii Uにおいて、ハードウェア販売では赤字を出しながら、ソフトウェアの販売で黒字を出そうと試みました。バウザー社長はNintendo Switch 2でWii Uのような戦略を取るつもりはないとして、「たとえソフトウェアより利益率が低いとしても、ハードウェアの利益率を維持する方法を見つけようとしています」「任天堂のデバイスへの投資の価値を顧客に確実に認識してもらおうとしています」と語っています。

トランプ大統領が導入した相互関税により、ベトナムや中国で製造されるゲーム機のアメリカへの輸入コストが上昇することとなります。もしそうなれば、アメリカでNintendo Switch 2の利益率を維持することは困難になるとArs Technicaは指摘。

バウザー社長は「世界規模で在庫を積み上げる時間があった」と述べており、すでに一部のNintendo Switch 2をアメリカに輸入済みであることを明かしています。そのため、相互関税による経済的打撃を遅らせることができる可能性があります。


任天堂はNintendo Switch 2の販売価格を正当化するために、アップグレードされたハードウェア仕様や、Nintendo Switch 2で利用できる通話機能の「ゲームチャット」などの新機能の存在を挙げています。

Nintendo of Americaのプレイヤー&プロダクトエクスペリエンス担当ヴァイスプレジデントを務めるビル・トリネン氏は、ゲームメディアのPolygonに対して「特に今の時代、システムにテクノロジーを追加すると、追加コストが発生します」と語りました。さらに、トリネン氏は「残念ながら、我々はインフレがあらゆるものに影響をおよぼしている時代に生きています」と述べ、物価上昇がNintendo Switch 2の販売価格上昇に影響していることも明かしています。

Nintendo Switchのアメリカでの販売価格は299ドルで、Nintendo Switch 2の販売価格は449ドルであるため、約150ドルの差があります。しかし、インフレ計算機のCPI Inflation Calculatorを使うと、2017年(Nintendo Switchが発売されたタイミング)の299ドルは、2025年には約391ドルに相当すると計算されるため、値上げ率は打倒なレベルであるとArs Technicaは指摘。それでも、Nintendo SwitchからNintendo Switch 2への販売価格が50%も上昇していることを考えると、「受け入れがたいと考える人がいても仕方がない」とも記しています。


さらに、アメリカではNintendo Switch 2の専用タイトルが70ドル(約1万300円)から80ドル(約1万1800円)で販売されます。これもNintendo Switchのソフトウェアの販売価格よりも値上げされていますが、これについてトリネン氏は「1993年にスーパードンキーコングSNESで59ドル(約8700円)で発売されたときに見つけた広告が私の携帯電話に残っています。ゲームの価格は非常に長い期間安定していました」と語り、長らくゲームソフトの販売価格が変わっていなかったと指摘。

バウザー社長もマリオカート ワールドの価格設定について、「価格設定のベンチマークを確立しようとしているわけではありません」と言及。バウザー社長はThe Washington Postに対して「業界を代表するためというよりは、任天堂が自社製品に対して正しいことをするか、あるいは自社製品全体の価格設定をどうすべきかを決めるためにこの価格設定にしました」と語っています。

バウザー社長は「すべてのゲームとすべての体験を検討し、その体験に基づいて適正価格を決定します」と言及。トリネン氏も「私たちは、体験とは何か、プレイヤーはこのゲームで何を楽しむのか、ゲームの長さはどれくらいか、体験のボリュームはどれくらいか、どれほど奥深いか、といった点に注目するアプローチを取っています。そして、その体験の価値が何であるかに基づいて、適切な価格を決定します」と語りました。

Nintendo of Americaの製品開発および出版担当ヴァイスプレジデントを務めるネイト・ビルドルフ氏は、Nintendo Switch 2のソフトウェア販売価格について、「Excelシートでチェックボックスをチェックして、そのたび販売価格に5ドル(約740円)を追加するように販売価格を設定しているわけではありません」「それぞれ簡単に数値化できないような要素がいくつもあります。そのため、ソフトウェアごとにかなり異なる価格設定になると思います」とDigital Trendsに語りました。

この記事のタイトルとURLをコピーする



Source link

Views: 0

メインストーリーで重要でランク付けされたすべてのバルドゥールのゲート3コンパニオン



バルドゥールのゲート3 人々が深く世話をする傾向がある多くの面白くて愛すべき仲間がいる信じられないほどのゲームです。そうは言っても、一部のキャラクターは、Shadowheartのようなゲームの一般的なストーリーにとって非常に重要なものであり、一部のキャラクターはストーリーにほとんどつながらない。一部のキャラクターは、と深いつながりもあります バルドゥールの門 一般的に、JaheiraやMinscなどの複数のゲームに参加していましたが、主な物語ではさまざまな重要性があります。


Source link

Views: 0

中国AIをテーマに、MITTR「生成AI革命4」開催のご案内 [PR]



中国AIをテーマに、MITTR「生成AI革命4」開催のご案内 [PR]

画像クレジット:TR



Source link

Views: 0

88歳の新入生も 名古屋に夜間中学



88歳の新入生も 名古屋に夜間中学

88歳の新入生も 名古屋に夜間中学



Source link

Views: 0

GitHub CopilotのMetricsAPIとMicrosoft Fabricを組み合わせて社内のCopilo利用状況を可視化してみた


昨年10月からGitHub Copilotの使用状況を取得できるAPIが提供されました。
組織の管理者権限を持つアカウントのアクセストークンじゃないと取得はできないようになっています。
APIからは以下のデータが取得することができます。
・過去28日間のデータ
・アクティブユーザーとエンゲージメントの高いユーザーの数
・GitHub Copilotのコード提案数、採用数、採用行数
・Copilot Chatの使用回数
・上記内容のIDE別、プログラミング言語別の内訳

https://github.com/orgs/community/discussions/141071

https://docs.github.com/ja/rest/copilot/copilot-metrics?apiVersion=2022-11-28

GitHub Copilotが一般リリースされてから全社的に導入を推進しています。
しかしアンケートやヒアリングといった方法でしか導入効果と活用率が見えていませんでした。
APIを使って正確な情報まで取得できるので、Microsoft Fabric(データ分析基盤環境)を使って、社内の利用状況を可視化してみます。

前提

自社の環境にFabricのリソースを作っておく必要があります。
※Microsoft Fabricは一番低いプランでも月5万円ほどかかります。

1. Workspaceを作成

今回のデータ分析環境を作成します。
「新しいワークスペース」を選択

ワークスペース名を入力して「適用」を選択

2. Lakehouseを作成

データを保存するストレージを作成します。
左上の「新しい項目」から「レイクハウス」を選択

名前を入力して「作成」を選択

2. Notebookを作成

PythonでMetrics APIを叩いて情報を取得します。
左上の「新しい項目」から「ノートブック」を選択

先ほど作成したLakehouseを紐づけます。
「Add data items」から「既存のデータソース」を選択

Lakehouseを選択して「接続」を選択

3. Metrics APIからデータ取得

access tokenにはGitHub.comの設定画面からトークンを作成したものを、orgには自分が所属している組織の名前を入れてください。

import requests

headers = {
    "Accept": "application/vnd.github+json",
    "Authorization": "Bearer ",
    "X-GitHub-Api-Version": "2022-11-28",
}

response = requests.get("https://api.github.com/orgs//copilot/metrics", headers=headers)
response_json = response.json()

情報が取得できました。

ちなみに普通にリクエストを飛ばすと28日分取得するので、日付を指定したい場合は以下のようにします。
例)前日の1日分だけ取得する場合

import requests
import datetime
from dateutil.relativedelta import relativedelta

today = datetime.date.today()

yesterday = today + relativedelta(days=-1)

headers = {
    "Accept": "application/vnd.github+json",
    "Authorization": "Bearer access token>,
    "X-GitHub-Api-Version": "2022-11-28",
}

params = {
    "since": yesterday
}

response = requests.get("https://api.github.com/orgs//copilot/metrics", headers=headers, params=params)
response_json = response.json()

ここでAPIから取得できる情報の詳細を解説
日別に配列で情報を取得できます。

[
  {
    "date": "2024-06-24", # 日付
    "total_active_users": 0, # アクティブユーザー数
    "total_engaged_users": 0, # 利用ユーザー数
    "copilot_ide_code_completions": { # IDE内でのコード提案に関する¥情報
      "total_engaged_users": 0, # 利用ユーザー数
      "languages": [ # 言語別に配列形式で格納
        {
          "name": "python", # 言語名
          "total_engaged_users": 0 # 利用ユーザー数
        }
      ],
      "editors": [ # IDE別に配列型式で格納
        {
          "name": "vscode", # IDE名
          "total_engaged_users": 0, # 利用ユーザー数
          "models": [ # モデル別に配列型式で格納
            {
              "name": "default", # モデル名(defaultは通常のオリジナルモデル)
              "is_custom_model": false, # カスタムモデルか
              "custom_model_training_date": null, # いつカスタムさせたか
              "total_engaged_users": 0, # 利用ユーザー数
              "languages": [ # モデル内で言語別に配列型式で格納
                {
                  "name": "python", # 言語名
                  "total_engaged_users": 0, # 利用ユーザー数
                  "total_code_suggestions": 0, # その言語で提案した回数
                  "total_code_acceptances": 0, # その言語で提案したコードが採用された回数
                  "total_code_lines_suggested": 0, # その言語で提案したコードの行数
                  "total_code_lines_accepted": 0 # その言語で提案したコードが採用された行数
                },
              ]
            }
          ]
        },
      ]
    },
    "copilot_ide_chat": { # IDE内でCopilot Chatの情報
      "total_engaged_users": 0, # 利用ユーザー数
      "editors": [ # IDE別に配列型式で格納
        {
          "name": "vscode", # IDE名
          "total_engaged_users": 0, # そのIDEで利用したユーザー数
          "models": [ # モデル別に配列型式で格納
            {
              "name": "default", # モデル名
              "is_custom_model": false, # カスタムモデルか
              "custom_model_training_date": null, # いつカスタムしたか
              "total_engaged_users": 0, # 利用ユーザー数
              "total_chats": 0, # チャット回数
              "total_chat_insertion_events": 0, # 提案したコードが挿入された回数
              "total_chat_copy_events": 0 # 提案したコードがコピーされた回数
            },
          ]
        }
      ]
    },
    "copilot_dotcom_chat": { # GitHub.com内でのCopilot Chatの情報
      "total_engaged_users": 0, # 利用ユーザー数
      "models": [ # モデル別に配列型式で格納
        {
          "name": "default", # モデル名
          "is_custom_model": false,  # カスタムモデルか
          "custom_model_training_date": null,  # いつカスタムしたか
          "total_engaged_users": 0, # 利用ユーザー数
          "total_chats": 0 # チャット回数
        }
      ]
    },
    "copilot_dotcom_pull_requests": { # GitHub.com内でCopilotのPull Request機能に関する情報
      "total_engaged_users": 0, # 利用ユーザー数
      "repositories": [ # リポジトリ別に配列型式で格納
        {
          "name": "demo/repo1", # リポジトリ名
          "total_engaged_users": 8,
          "models": [
            {
              "name": "default", # モデル名
              "is_custom_model": false, # カスタムモデルか
              "custom_model_training_date": null, # いつカスタムしたか
              "total_pr_summaries_created": 0, # 要約機能を何回使用したか
              "total_engaged_users": 0 # 利用ユーザー数
            }
          ]
        },
      ]
    }
  }
]

4. 取得したデータを加工

テーブルは以下の11個に分けて、リレーションシップで相互関係を結ぶようにします。
ですので、テーブルに入れるための11個の配列を用意。


copilot_global_data =[]


copilot_ide_completions = [] 
copilot_ide_completions_languages = [] 
copilot_ide_completions_editors = []
copilot_ide_completions_editor_models = []
copilot_ide_completions_editor_model_languages = []



copilot_ide_chats = []
copilot_ide_chat_editors = []
copilot_ide_chat_editor_models = []



copilot_dotcom_chats = []
copilot_dotcom_chat_models = []


copilot_dotcom_pull_requests = [] 
copilot_doctcom_pr_repositories = []

APIから取得したレスポンスを上記11個の配列に追加していきます。
またリレーションを結ぶので、各配列ごとにuuidで一意のキーと親テーブルに値する配列のキーを持たせます。

import uuid

for entry in response_json:
    global_id = uuid.uuid4()
    copilot_global_data.append({
        "global_id": global_id,
        "date": entry.get("date"),
        "total_active_users": entry.get("total_active_users"),
        "total_engaged_users": entry.get("total_engaged_users")
    })

    completions = entry.get("copilot_ide_code_completions", {})
    copilot_ide_completion_id = uuid.uuid4()
    copilot_ide_completions.append({
        "copilot_ide_completion_id":copilot_ide_completion_id,
        "global_id": global_id,
        "total_engaged_users": completions.get("total_engaged_users")
    })

    for lang in completions.get("languages", []):
        copilot_ide_completions_language_id = uuid.uuid4()
        copilot_ide_completions_languages.append({
            "copilot_ide_completions_language_id": copilot_ide_completions_language_id,
            "copilot_ide_completion_id":copilot_ide_completion_id,
            "language": lang.get("name"),
            "total_engaged_users": lang.get("total_engaged_users")
        })

    for editor in completions.get("editors", []):
        copilot_ide_completions_editor_id = uuid.uuid4()
        copilot_ide_completions_editors.append({
            "copilot_ide_completions_editor_id": copilot_ide_completions_editor_id,
            "copilot_ide_completion_id":copilot_ide_completion_id,
            "editor": editor.get("name"),
            "total_engaged_users": editor.get("total_engaged_users")
        })


        for model in editor.get("models", []):
            copilot_ide_completions_editor_model_id = uuid.uuid4()
            copilot_ide_completions_editor_models.append({
                "copilot_ide_completions_editor_model_id": copilot_ide_completions_editor_model_id,
                "copilot_ide_completions_editor_id":copilot_ide_completions_editor_id,
                "model": model.get("name"),
                "is_custom_model": model.get("is_custom_model"),
                "custom_model_training_date": model.get("custom_model_training_date"),
                "total_engaged_users": model.get("total_engaged_users")
            })

            for model_lang in model.get("languages", []):
                copilot_ide_completions_editor_model_language_id = uuid.uuid4()
                copilot_ide_completions_editor_model_languages.append({
                    "copilot_ide_completions_editor_model_language_id": copilot_ide_completions_editor_model_language_id,
                    "copilot_ide_completions_editor_model_id":copilot_ide_completions_editor_model_id,
                    "language": model_lang.get("name"),
                    "total_engaged_users": model_lang.get("total_engaged_users"),
                    "total_code_suggestions": model_lang.get("total_code_suggestions"),
                    "total_code_acceptances": model_lang.get("total_code_acceptances"),
                    "total_code_lines_suggested": model_lang.get("total_code_lines_suggested"),
                    "total_code_lines_accepted": model_lang.get("total_code_lines_accepted"),
                })
    
    ide_chat = entry.get("copilot_ide_chat", {})
    ide_chat_id = uuid.uuid4()
    copilot_ide_chats.append({
        "copilot_ide_chat_id": ide_chat_id,
        "global_id": global_id,
        "total_engaged_users": ide_chat.get("total_engaged_users")
    })

    for editor in ide_chat.get("editors", []):
        ide_chat_editor_id = uuid.uuid4()
        copilot_ide_chat_editors.append({
            "copilot_ide_chat_editor_id": ide_chat_editor_id,
            "copilot_ide_chat_id": ide_chat_id,
            "name": editor.get("name"),
            "total_engaged_users": editor.get("total_engaged_users")
        })

        for model in editor.get("models", []):
            ide_chat_editor_model_id = uuid.uuid4()
            copilot_ide_chat_editor_models.append({
                "copilot_ide_chat_editor_model_id": ide_chat_editor_model_id,
                "copilot_ide_chat_editor_id": ide_chat_editor_id,
                "name": model.get("name"),
                "is_custom_model": model.get("is_custom_model"),
                "custom_model_training_date": model.get("custom_model_training_date"),
                "total_engaged_users": model.get("total_engaged_users"),
                "total_chats": model.get("total_chats"),
                "total_chat_insertion_events": model.get("total_chat_insertion_events"),
                "total_chat_copy_events": model.get("total_chat_copy_events"),
            })


    dotcom_chat = entry.get("copilot_dotcom_chat", {})
    dotcom_chat_id = uuid.uuid4()
    copilot_dotcom_chats.append({
        "copilot_dotcom_chat_id": dotcom_chat_id,
        "global_id": global_id,
        "total_engaged_users": dotcom_chat.get("total_engaged_users")
    })

    for model in dotcom_chat.get("models", []):
        dotcom_chat_model_id = uuid.uuid4()
        copilot_dotcom_chat_models.append({
            "copilot_dotcom_chat_model_id": dotcom_chat_model_id,
            "copilot_dotcom_chat_id": dotcom_chat_id,
            "name": model.get("name"),
            "is_custom_model": model.get("is_custom_model"),
            "custom_model_training_date": model.get("custom_model_training_date"),
            "total_engaged_users": model.get("total_engaged_users"),
            "total_chats": model.get("total_chats")
        })

5. Lakehouseにデータを追加

配列にデータが入ったので、DataFrameを作成して、テーブルに追加させます。
データの型が暗黙値になっているので、明示的に定義することをおすすめします。

copilot_global_data

import pandas as pd
from pyspark.sql.types import StringType, StructField, DateType, IntegerType, StructType, BooleanType

columns = ['global_id', 'date', 'total_active_users', 'total_engaged_users']
df = pd.DataFrame(copilot_global_data, columns=columns)
df["global_id"] = df["global_id"].astype(str)
df["date"] = pd.to_datetime(df['date'])

schema = StructType([
    StructField("global_id", StringType(), True),
    StructField("date", DateType(), True),
    StructField("total_active_users", IntegerType(), True),
    StructField("total_engaged_users", IntegerType(), True),
])

spark_df = spark.createDataFrame(df, schema=schema)  
spark_df.write.mode("append").format("delta").save("Tables/"+ "copilot_global_data")
copilot_ide_completions

columns = ['copilot_ide_completion_id', 'global_id','total_engaged_users']
df = pd.DataFrame(copilot_ide_completions, columns=columns)
df["global_id"] = df["global_id"].astype(str)
df["copilot_ide_completion_id"] = df["copilot_ide_completion_id"].astype(str)

schema = StructType([
    StructField("copilot_ide_completion_id", StringType(), True),
    StructField("global_id", StringType(), True),
    StructField("total_engaged_users", IntegerType(), True),
])

spark_df = spark.createDataFrame(df, schema=schema)  
spark_df.write.mode("append").format("delta").save("Tables/"+ "copilot_ide_completions")
copilot_ide_completions_languages

columns = ['copilot_ide_completions_language_id', 'copilot_ide_completion_id', 'language', 'total_engaged_users']
df = pd.DataFrame(copilot_ide_completions_languages, columns=columns)
df["copilot_ide_completion_id"] = df["copilot_ide_completion_id"].astype(str)
df["copilot_ide_completions_language_id"] = df["copilot_ide_completions_language_id"].astype(str)

schema = StructType([
    StructField("copilot_ide_completions_language_id", StringType(), True),
    StructField("copilot_ide_completion_id", StringType(), True),
    StructField("language", StringType(), True),
    StructField("total_engaged_users", IntegerType(), True),
])

spark_df = spark.createDataFrame(df, schema=schema)  
spark_df.write.mode("append").format("delta").save("Tables/"+ "copilot_ide_completions_languages")
copilot_ide_completions_editors

columns = ['copilot_ide_completions_editor_id', 'copilot_ide_completion_id', 'editor', 'total_engaged_users']
df = pd.DataFrame(copilot_ide_completions_editors, columns=columns)
df["copilot_ide_completion_id"] = df["copilot_ide_completion_id"].astype(str)
df["copilot_ide_completions_editor_id"] = df["copilot_ide_completions_editor_id"].astype(str)

schema = StructType([
    StructField("copilot_ide_completions_editor_id", StringType(), True),
    StructField("copilot_ide_completion_id", StringType(), True),
    StructField("editor", StringType(), True),
    StructField("total_engaged_users", IntegerType(), True),
])

spark_df = spark.createDataFrame(df, schema=schema)  
spark_df.write.mode("append").format("delta").save("Tables/"+ "copilot_ide_completions_editors")
copilot_ide_completions_editor_models

columns = ['copilot_ide_completions_editor_model_id', 'copilot_ide_completions_editor_id', 'model', 'is_custom_model', 'custom_model_training_date', 'total_engaged_users']
df = pd.DataFrame(copilot_ide_completions_editor_models, columns=columns)
df["custom_model_training_date"] = pd.to_datetime(df['custom_model_training_date'])
df["copilot_ide_completions_editor_id"] = df["copilot_ide_completions_editor_id"].astype(str)
df["copilot_ide_completions_editor_model_id"] = df["copilot_ide_completions_editor_model_id"].astype(str)
df["is_custom_model"] = df["is_custom_model"].astype(bool)

schema = StructType([
    StructField("copilot_ide_completions_editor_model_id", StringType(), True),
    StructField("copilot_ide_completions_editor_id", StringType(), True),
    StructField("model", StringType(), True),
    StructField("is_custom_model", BooleanType(), True),
    StructField("custom_model_training_date", DateType(), True),
    StructField("total_engaged_users", IntegerType(), True),
])

spark_df = spark.createDataFrame(df, schema=schema)  
spark_df.write.mode("append").format("delta").save("Tables/"+ "copilot_ide_completions_editor_models")
copilot_ide_completions_editor_model_languages

columns = ['copilot_ide_completions_editor_model_language_id', 'copilot_ide_completions_editor_model_id', 'language', 'total_engaged_users', 'total_code_suggestions', 'total_code_acceptances', 'total_code_lines_suggested', 'total_code_lines_accepted']
df = pd.DataFrame(copilot_ide_completions_editor_model_languages, columns=columns)
df["copilot_ide_completions_editor_model_language_id"] = df["copilot_ide_completions_editor_model_language_id"].astype(str)
df["copilot_ide_completions_editor_model_id"] = df["copilot_ide_completions_editor_model_id"].astype(str)


schema = StructType([
    StructField("copilot_ide_completions_editor_model_language_id", StringType(), True),
    StructField("copilot_ide_completions_editor_model_id", StringType(), True),
    StructField("language", StringType(), True),
    StructField("total_engaged_users", IntegerType(), True),
    StructField("total_code_suggestions", IntegerType(), True),
    StructField("total_code_acceptances", IntegerType(), True),
    StructField("total_code_lines_suggested", IntegerType(), True),
    StructField("total_code_lines_accepted", IntegerType(), True),
])

spark_df = spark.createDataFrame(df, schema=schema)  
spark_df.write.mode("append").format("delta").save("Tables/"+ "copilot_ide_completions_editor_model_languages")
copilot_ide_chats

columns = ['copilot_ide_chat_id', 'global_id','total_engaged_users']
df = pd.DataFrame(copilot_ide_chats, columns=columns)
df["copilot_ide_chat_id"] = df["copilot_ide_chat_id"].astype(str)
df["global_id"] = df["global_id"].astype(str)


schema = StructType([
    StructField("copilot_ide_chat_id", StringType(), True),
    StructField("global_id", StringType(), True),
    StructField("total_engaged_users", IntegerType(), True),
])

spark_df = spark.createDataFrame(df, schema=schema)  
spark_df.write.mode("append").format("delta").save("Tables/"+ "copilot_ide_chats")
copilot_ide_chat_editors

columns = ['copilot_ide_chat_editor_id', 'copilot_ide_chat_id', 'name', 'total_engaged_users']
df = pd.DataFrame(copilot_ide_chat_editors, columns=columns)
df["copilot_ide_chat_editor_id"] = df["copilot_ide_chat_editor_id"].astype(str)
df["copilot_ide_chat_id"] = df["copilot_ide_chat_id"].astype(str)

schema = StructType([
    StructField("copilot_ide_chat_editor_id", StringType(), True),
    StructField("copilot_ide_chat_id", StringType(), True),
    StructField("name", StringType(), True),
    StructField("total_engaged_users", IntegerType(), True),
])

spark_df = spark.createDataFrame(df, schema=schema)  

spark_df.write.mode("append").format("delta").save("Tables/"+ "copilot_ide_chat_editors")
copilot_ide_chat_editor_models

columns = ['copilot_ide_chat_editor_model_id', 'copilot_ide_chat_editor_id', 'name', 'is_custom_model', 'custom_model_training_date', 'total_engaged_users', 'total_chats', 'total_chat_insertion_events', 'total_chat_copy_events']
df = pd.DataFrame(copilot_ide_chat_editor_models, columns=columns)
df["custom_model_training_date"] = pd.to_datetime(df['custom_model_training_date'])
df["copilot_ide_chat_editor_model_id"] = df["copilot_ide_chat_editor_model_id"].astype(str)
df["copilot_ide_chat_editor_id"] = df["copilot_ide_chat_editor_id"].astype(str)
df["is_custom_model"] = df["is_custom_model"].astype(bool)

schema = StructType([
    StructField("copilot_ide_chat_editor_model_id", StringType(), True),
    StructField("copilot_ide_chat_editor_id", StringType(), True),
    StructField("name", StringType(), True),
    StructField("is_custom_model", BooleanType(), True),
    StructField("custom_model_training_date", DateType(), True),
    StructField("total_engaged_users", IntegerType(), True),
    StructField("total_chats", IntegerType(), True),
    StructField("total_chat_insertion_events", IntegerType(), True),
    StructField("total_chat_copy_events", IntegerType(), True),
])

spark_df = spark.createDataFrame(df, schema=schema)  
spark_df.write.mode("append").format("delta").save("Tables/"+ "copilot_ide_chat_editor_models")
copilot_dotcom_chats

columns = ['copilot_dotcom_chat_id', 'global_id','total_engaged_users']
df = pd.DataFrame(copilot_dotcom_chats, columns=columns)
df["global_id"] = df["global_id"].astype(str)
df["copilot_dotcom_chat_id"] = df["copilot_dotcom_chat_id"].astype(str)

schema = StructType([
    StructField("copilot_dotcom_chat_id", StringType(), True),
    StructField("global_id", StringType(), True),
    StructField("total_engaged_users", IntegerType(), True),
])

spark_df = spark.createDataFrame(df, schema=schema)  

spark_df.write.mode("overwrite").format("delta").save("Tables/"+ "copilot_dotcom_chats")
copilot_dotcom_chat_models

columns = ['copilot_dotcom_chat_model_id', 'copilot_dotcom_chat_id', 'name', 'is_custom_model', 'custom_model_training_date', 'total_engaged_users', 'total_chats']
df = pd.DataFrame(copilot_dotcom_chat_models, columns=columns)
df["copilot_dotcom_chat_model_id"] = df["copilot_dotcom_chat_model_id"].astype(str)
df["copilot_dotcom_chat_id"] = df["copilot_dotcom_chat_id"].astype(str)
df["custom_model_training_date"] = pd.to_datetime(df['custom_model_training_date'])
df["is_custom_model"] = df["is_custom_model"].astype(bool)

schema = StructType([
    StructField("copilot_dotcom_chat_model_id", StringType(), True),
    StructField("copilot_dotcom_chat_id", StringType(), True),
    StructField("name", StringType(), True),
    StructField("is_custom_model", BooleanType(), True),
    StructField("custom_model_training_date", DateType(), True),
    StructField("total_engaged_users", IntegerType(), True),
    StructField("total_chats", IntegerType(), True),
])

spark_df = spark.createDataFrame(df, schema=schema)  
spark_df.write.mode("append").format("delta").save("Tables/"+ "copilot_dotcom_chat_models")

6. リレーションシップを作成

レイクハウスを開いて、「新しいセマンティックモデル」を選択

先ほど作成したテーブルを全て選択します。
ここで作成したセマンティックモデルはDirectLake方式でデータの取り込みがされます。

以下のようにリレーションシップを作成しました。

7. Power BI Desktopでレポート作成

Power BI Service(Web)でもいいのですが、テーマカラー設定ができないのでDesktopでやります。
「OneLakeカタログ」内の「Power BIのセマンティックモデル」を選択

先ほど作成したセマンティックモデルが出てくると思うので選択して接続

データが取り込めれました。

取得できる情報をもとにビジュアルが作れたので、Fabric環境にアップします。
右上の「発行」を選択

ワークスペースを選択して、アップロードが完了すると以下のようになります。

Power BIレポートがワークスペース内に追加されました。
これで一通り完了です。

以下のように可視化してみました。
弊社ではVScodeでPythonの利用が圧倒的に多いようです。
営業日(平日)は大体15~20人が使ってるのですが、まだまだ少ない気がするのでもっと増やしていきたいです。

ちょうど1年前にZennの取り組み状況を可視化するためにFabricを使い始めました。
↓これ

https://zenn.dev/headwaters/articles/c69811c3ed54c0

以前から大きく仕様が変わったことはないのですが以下は改善してくれるとより使いやすくなるなーと思いました。

Power BI Services(Web)でもレポートのテーマカラーを設定できるようにしてほしい

これ何でできないんだ..
結構需要あると思うんだけどなー
現状はDesktop版じゃないとできません。

Dataflow Gen2を使わなくてもImport方式でデータを取り込めれるようにしてほしい

今回のケースは1日に1回データ更新すればいいので、ベストはImport方式です。
DirectLake方式が推奨されてるので今回も採用していますが、Import方式の方がレポートの読み込みが速くなるので、方式を選択できるようになるといいなーと。

ちなみにDataflow Gen2を使えばImport方式で取り込めれるのですが、Dataflow Gen2自体がものすごい容量を使ってしまうので中々手出しづらいです…

Notebookで環境変数の定義できるようにしてほしい

もしかしたら方法があるのかもですが、調べてみた限り分かりませんでした。
Notebook内のロジックは見えるけど、Access Tokenは他の社員に見えないようにしたいのですが、方法があるのかな?



Source link

Views: 0

HTML 2023調査の状態を取ることから学んだことを完全に知らなかったこと – Codepen


Lea Verouはクラフトを助けました HTML 2023調査 – 最初は親切です! HTML、あなたは言いますか?何を尋ねるのですか? HTMLは、私が迅速に移動するテクノロジーと考えるものではありません。 あると聞いています 要素 今、それは新しいです。砂糖です

. I like it. Is there much more than that? Well lemme just have a click over to the survey and take it for myself. 😳. Uhm yes there is much more than that.

I actually do try to keep up with this sort of thing, and I’ll tell ya going through this survey had me clicking that “🤷 Never heard of it” choice quite a bit. Allow me to pick out a few that surprised me.

  1. I didn’t know you could programmatically open an input’s UI. Like if you have a reference to it, you can dateInput.showPicker()。面白いねじれ、Codepenエディター内で試すことはできません。 HTMLInputElement::showPicker() called from cross-origin iframe. エラー。うまくいきます ただし、デバッグモードで。できないと思います 宣言的に しかし、それを開きますよね?できるはずです。
  2. 私はあなたがを追加することで「編集可能」を作ることができることを知っていました contenteditable 属性ですが、リッチな技術フォーマットをオプトアウトできるとは知りませんでした contenteditable="plaintext-only"。 Firefoxはすでに持っていますが、みんなのように見えます。私についてすべてを作るために:ペンのヘッダー領域のUIを考えてください。所有してタイトルの上にホバリングする場合は、小さなアイコンをクリックして編集できます。私たちは使用しません contenteditable 誰かがYahoo!全体をコピーして貼り付けるのではないかと心配しているからですそこにホームページ(冗談、ちょっと)。しかし、豊かなテキストはそこではまったく関係ありません。これは、現在のようにテキストのためにテキストのためにテキストを使用したものに代わる素晴らしい代替品になるでしょう。
  3. 許可する計画があることを知りませんでした name 複数の属性
    要素は、それができるようにします open 一度に、一般的な「アコーディオン」パターン。私はどういうわけか、サファリがこれと一緒に最初にゲートから出るだろうと思った V17、 しかし、私は間違っていました。誰もそれを出荷していませんが、私はそれが好きです。発見するのが少し難しい場合、賢いアイデア。
  4. 私は知っていました

    Source link

    Views: 0

デジタルTCG「神託のメソロギア」iOS/Android向けオープンβテストを開始。対戦募集などに活用できる公式Discordサーバーも開設



デジタルTCG「神託のメソロギア」iOS/Android向けオープンβテストを開始。対戦募集などに活用できる公式Discordサーバーも開設

 ネコノメは2025年4月7日,同社が4月17日にサービス開始を予定している「神託のメソロギア」のiOS/Android向けオープンβテストを開始した。期間は4月12日23:59まで。今回のOBTは,正式リリースを目前に控え,対戦バランスやUI・UX,サーバー負荷などの最終調整を目的としたものだ。



Source link

Views: 0

「スイッチ2」新機能が学べる『ひみつ展』990円は安い?高い? 有料販売の理由に米任天堂答える



「スイッチ2」新機能が学べる『ひみつ展』990円は安い?高い? 有料販売の理由に米任天堂答える

「スイッチ2」新機能が学べる『ひみつ展』990円は安い?高い? 有料販売の理由に米任天堂答える



Source link

Views: 0