CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

プラットホームエンジニアとは?Quoraの問答記事から引用

2023-08-28 03:41:08 | C / Visual C++
では、どうしたら50歳でもプログラマーを続けることができるかですが、まず、専門分野を持ち、何かに特化したスペシャリストになる必要があります。受託開発の業務アプリケーションばかり書いていると、そこには確実に行けません。思考錯誤、紆余曲折の結果、私の場合は、それは、プラットフォームエンジニアでした。デバイスドライバーや、OSの移植などです。ハードウェアの図面を読み、OSのアーキテクチャーを理解して、チップを制御するソフトウェアです。

プラットフォームエンジニアリングとは?ChatGPTの回答から

2023-08-22 19:58:52 | C / Visual C++

検索結果に基づいてお答えします。"プラットフォームエンジニアリング C++" に関する情報は、特定のコンテキストに依存するため、一般的な情報を提供します。

プラットフォームエンジニアリングは、ソフトウェアやハードウェアなどの要素を統合し、システム全体を支える基盤やフレームワークを構築するプロセスです。C++は、高性能で効率的なコンピュータプログラミングのためのプログラミング言語です。プラットフォームエンジニアリングにおいてC++が使用されるケースは多岐にわたります。

以下は、プラットフォームエンジニアリングにおいてC++が使用される一般的な領域のいくつかです:

1. オペレーティングシステムの開発: オペレーティングシステムは、コンピュータの基本的な機能を提供するための重要なプラットフォームです。C++は、オペレーティングシステムのカーネルや低レベルのコンポーネントの開発に使用されることがあります。

2. ゲームエンジンの開発: ゲームエンジンは、ビデオゲームの開発において中核となる部分であり、グラフィックス、物理エンジン、オーディオなどの機能を統合します。C++は、高性能なゲームエンジンの開発に広く使用されます。→Unreal Engine

3. 組み込みシステム: 組み込みシステムでは、限られたリソースで動作するプラットフォームエンジニアリングが重要です。C++は、効率的なコードの生成とハードウェアリソースの最適な活用をサポートするために使用されます。→組み込み系の本を買い漁れ!!!www

4. ネットワークプログラミング: プラットフォームエンジニアリングにおいてネットワーク通信を管理する場合、C++は高性能なネットワークプログラミングを実現するために使用されることがあります。→SNMPツールのことか?今はZabbixらしいが。

特定のプロジェクトやコンテキストにおける詳細な情報については、関連する文献やウェブサイト、ソフトウェア開発者のコミュニティなどを参照することをお勧めします。

だとよ。

なるほど完結で分かりやすいwww


プラットフォームエンジニアの仕事とは?

2023-08-22 19:48:59 | C / Visual C++

プラットフォームエンジニアリングとは? | CircleCI

から引用。

「プラットフォームエンジニアリングとは?

プラットフォームエンジニアリング(Platform Engineering)とは、最近生まれたエンジニアリング手法です。モダンなソフトウェアデリバリーが抱える複雑さと不確実性を減らし、開発者の生産性を向上させることに重点を置いています。DevOps を大規模に実施する場合、開発の都合とビジネス上の優先順位をすり合わせたり、アプリケーションライフサイクル全体にわたって複雑に入り組んだツールやインフラストラクチャを手間なく管理可能にしたりといった、大きな課題が発生します。しかし、プラットフォームエンジニアリングを導入することでこれらの課題に対処できます。

プラットフォームエンジニアリングでは、プラットフォームチームがインフラストラクチャの管理を自動化し、一元管理されたテクノロジープラットフォームから信頼の置けるツールやワークフローを開発者がセルフサービスで利用できるようにします。このように開発チームの認知負荷を低減させることで、クラウドネイティブなソフトウェアデリバリーに大きな進化がもたらされます。

プラットフォームエンジニアリングの価値

プラットフォームエンジニアリングがソフトウェア組織にもたらすメリットは、運用の複雑さが軽減されることと、開発プロセスの摩擦が解消されることです。これまでは、開発した人が運用すべきという考え方があり、大規模な分散アプリケーションをクラウドに構築する場合に混乱やムダが生じていました。プラットフォームエンジニアリングは、この状況を変える堅実な考え方です。

プラットフォームチームの役割には、大きく分けて以下の 4 つの領域があります。

  1. 内部開発者プラットフォームの構築
  2. 重要なデリバリープロセスの標準化とセキュリティ確保
  3. 社内のサービスレベル アグリーメントの設定と順守
  4. チームのパフォーマンスメトリクスの監視

以下では、上述のプラットフォームエンジニアリングの各分野の詳細と、それらが開発プロセスにもたらす価値について見ていきます。

内部開発者プラットフォーム (IDP)

プラットフォームチームの最も重要な仕事の 1 つは、内部開発者プラットフォーム (IDP) を構築して、保守することです。IDP とは、組織全体でソフトウェアプロダクトの開発とデリバリーをスピーディに行うためのツール、サービス、自動化ワークフローを 1 つのプラットフォームにまとめたものです。IDP では、アプリケーションの構成やインフラストラクチャの管理の手間をサービスレイヤーで抽象化します。

重要なポイントは、IDP があることで、アプリケーションをすばやくスムーズに構築、テスト、デプロイ、監視するためのリソースを開発者がセルフサービス形式で利用できるようになることです。つまり、運用チームにインフラストラクチャをプロビジョニングしたり、チケットを解決したりしてもらう必要なく、クラウド環境のスピンアップ、テストやデプロイを自動化する CI/CD パイプラインのトリガー、ロールバックの実装、ログとビルドアーティファクトへのアクセスなどを、1 つの API や GUI から簡単に行えるのです。

プロセスの標準化と認知負荷の軽減のための “舗装道路”

プラットフォームエンジニアリングでは、一般的な DevOps のプロセスとワークフローを管理、標準化、拡張するための統合システムを用意します。つまり、リソースのカタログを吟味、整理することで、開発の手間を減らしスピードを高める “舗装道路” を構築するのです。この “道路” には、必要なときに好みのツールを使える自律性を開発者に与える効果もあります。

何百人、何千人もの開発者を擁する大組織では、自律性を与えすぎると、ツールの無秩序な増大、知識のサイロ化、コストの急騰、燃え尽きといった弊害が発生する可能性があります。”舗装道路” は、そのような弊害を発生させることなく開発チームが抱える運用の負荷を減らすことができる、実績ある確実な手法です。さらに、セキュリティ、コンプライアンス、予算管理の強化にもつなげることができます。

社内のサービスレベル アグリーメント (SLA) の設定と順守

プラットフォームチームにとって、IDP は商品であり、開発者は顧客です。IDP の導入を広げるために、サービスレベル アグリーメントで IDP の信頼性とパフォーマンスに対して高い期待値を設定し、チームが負う責任を明確にします。

IDP を安定かつセキュアに保つことは、プラットフォームエンジニアの重要な仕事です。内部システムに障害が発生すると、”舗装道路” に従わない開発者が増えるだけでなく、外部顧客に価値を提供するフローに中断が起きるおそれもあります。そのため、プラットフォームチームは、開発者の生産性と組織の顧客の満足度を維持するために、IDP の正常性とパフォーマンスを能動的に監視します。

重要なパフォーマンスメトリクスの監視

プラットフォームチームは、ボトルネックの解消や開発者のニーズに応じたプラットフォームのカスタマイズのために、スループット、ワークフローの実行時間、インシデントの復旧時間などの重要なエンジニアリングパフォーマンスメトリクスを追跡します。そして、たとえば復旧時間が基準値を超えるようになった場合には、パイプラインへの自動テストの追加や、IDP に用意している監視機能やアラート機能の改善などの対策を試します。

また、開発者の生産性やパフォーマンスに関連するデータを追跡することで、IDP が組織の開発パターンやビジネス目標に適切に対応しているかどうかも確認できます。

プラットフォームチームは必要?

多数のチームで複雑なエンジニアリングが必要とされる大規模な分散プロジェクトを進めている場合や、部門横断型のチームを編成してアプリケーションの開発、運用、インフラストラクチャを監督している場合には、おそらく何らかの形で暫定的なプラットフォームエンジニアリングを行っていることでしょう。そのような場合には、プラットフォームチームの編成を検討することをお勧めします。

プラットフォームチームの編成をお勧めする状況は他にもあります。組織に成熟した製品がある、将来に対する明確なビジョンがある、業務の規模を拡張する準備ができている、といった状況です。

また、エンジニアリングチームがクラウド統合とインフラストラクチャ運用に取り組んでいる場合も、プラットフォームチームが必要な可能性があります。検討するうえで重要となる前提条件は、各チームメンバーの役割と責任を明確に理解したうえで、エンジニアリングチームのワークフローが詳しく定義されていることです。エンジニアリングチームのサイズやプロダクトの成熟度は、必ずしも重要ではありません。規模の拡大に伴って、いずれプラットフォームチームが必要になるからです。

一方、組織規模が小さく、少人数の開発者でモノリシックアプリケーションを開発している場合は、プラットフォームチームを編成しても大きなメリットを得られる可能性は低いと考えられます。まずはプロダクトマーケットフィットの達成に注力し、反復タスクを自動化して、開発者がイノベーションに集中できる体制を整えましょう。アプリケーションを個別のサービスに分け、複数のエンジニアリングチームが異なるバリューストリームでデリバリーする段階に達したら、プラットフォームチームを編成すると、スピードと安定性の最適なバランスを実現するのに役立ちます。

CI/CD を使ったプラットフォームエンジニアリング

どのようなプラットフォームチームでも備えておくべきツールとして、堅牢な継続的インテグレーション & 継続的デリバリー (CI/CD) パイプラインが挙げられます。CI/CD パイプラインは自動化エンジンを備えており、テンプレート化されたワークフローをトリガーして開発環境、QA 環境、ステージング環境、本番環境でコードのビルド、テスト、デプロイを行うことができます。より概念的に言えば、成熟した CI/CD パイプラインとは、開発においてビジネス上の優先事項のコード化、適用、測定を行うコントロールプレーンの役割を果たすものです。

CircleCI には、プラットフォームチームが重要な開発タスクを自動化したり、効率化したりするうえで役立つ機能が数多く用意されています。たとえば、CircleCI Orb は移植性に優れた再利用可能な構成コードのスニペットです。Orb を使用すると、人気のツールやサービスをワークフローに簡単に統合したり、一般的なプロセスを複数のプロジェクトで共有したりできます。また、設定ファイルのポリシー管理機能では、グローバルなルールを設定することで、組織のすべてのパイプラインに同じ規則とセキュリティポリシーを適用できます。

Insights ダッシュボードでは、パフォーマンスを視覚的に確かめられます。これを活用して、改善が必要な領域をすばやく特定し、効率が最大になるようにパイプラインを最適化できます。表示される情報には、実行時間が長く頻繁に失敗するワークフローの時系列データ、リソース使用率、クレジット使用量などがあります。それらの情報から、パイプラインで開発者が求めるスピードや今日の企業が必要とするコスト効率を実現できているかどうかを把握できます。

CI/CD には、開発者の作業効率を高め、開発プロセスを改善する力があります。プラットフォームエンジニアリングツールの中核を担い、セルフサービス機能や再利用性など、プラットフォームエンジニアリング手法の重要な要素を形にできます。

まとめ

プラットフォームエンジニアリングは、品質、セキュリティ、効率のいずれも犠牲にすることなく、ソフトウェアデリバリープロセスをスケールアップできる強力なツールです。リソースのプロビジョニングと管理が簡素化および自動化されるので、開発者は今までよりも短時間で、より多くの価値を顧客に届けることができるようになります。

組織としては、プラットフォームチームを編成することで DevOps のメリットを享受し、高めることができます。その結果として、開発者のアジリティが強化され、組織の信頼性、可視性、自信も高まります。組織のパフォーマンス向上のためにプラットフォームエンジニアリングを導入すべき状況にあるなら、ぜひ CircleCI に無料でユーザー登録して、業界トップクラスの継続的インテグレーションサービスが反復サイクルの高速化とデリバリー成果の強化にもたらす効果を実感してください。

https://x-tech.pasona.co.jp/media/detail.html?p=9594#

から引用。

プラットフォームエンジニアリングとはなにか?

そもそもプラットフォームエンジニアリングとは、どのような意味を持つ用語なのでしょうか。ここでは2つの観点から概要を解説しますので、イメージをつかんでください。

開発者がアプリケーション開発環境を自律的に作成できる

プラットフォームエンジニアリングは、開発者がクラウド環境において、アプリケーションの開発環境を自ら作成できる仕組みを提供します。セルフサービスで使えるツールや環境の自動化は、代表的な項目です。

インフラに関する多種多様な知識を、開発者が覚える必要はありません。またシステムの運用部門やインフラ部門による環境構築を待つ必要もありません。開発者自身が簡単に開発環境を構築できるため、適時適切なタイミングでソフトウェアを提供できることは大きなメリットです。

専門のチームが作られ、ツールが提供される場合もある

プラットフォームエンジニアリングを実現する目的で専門のプラットフォームチームを設け、開発チームを助ける場合があります。プラットフォームチームは内部開発者プラットフォーム(IDP)をつくり、アプリケーションの開発者に対してツールを提供します。

これにより多くの開発者はインフラを気にせず、アプリケーションの開発に集中できるわけです。数十人規模のプロジェクトでも、プラットフォームチームやIDPは役立ちます。目立たない役割であるものの、迅速なシステムの提供には重要です。

プラットフォームエンジニアリングが求められる3つの背景

プラットフォームエンジニアリングが求められる3つの背景<picture> </picture>クリックして拡大

プラットフォームエンジニアリングが求められるようになった背景は、3つあります。いずれも現代の開発現場における重要な項目が関連しています。時代にこたえる手法であることを確認してください。

クラウドサービスの普及

かつての環境構築は高価なハードウェアを用意しなければならず、作業も大変でした。ハードウェアの設置はもちろん、メモリなど部品を取り付けることは、インフラエンジニアのおもな作業です。専門性が高い業務であるため、インフラ業務はインフラエンジニアに任せるケースもよくありました。

クラウドサービスの普及は、この状況を変えました。インフラエンジニアでない方でも画面で必要な設定を行ない、開発に必要なサーバーをセルフサービスで用意できます。また高価なハードウェアを用意しなくても、必要な期間だけ使えば良いため価格も抑えられます。多くの開発者が環境づくりに携われるようになったことは、おもな背景の一つです。

スピーディーな開発が求められている

情報化が進んだ結果、多くの業務を迅速に進められるようになり、より速く情報を提供できるようになりました。社会全体のスピード化により、変化に対して迅速な対応が求められます。システム開発においても、より短い期間で充実した機能を提供する必要があるわけです。

開発環境の構築を専門のエンジニアに任せず、簡便化した方法で自ら行なうことは、開発期間の短縮につながります。このことも、プラットフォームエンジニアリングが求められる背景に挙げられます。

ITエンジニアの不足

慢性的なITエンジニアの不足も、プラットフォームエンジニアリングが求められる背景の一つです。人が足りないからといって、システムに求められる品質は下がりません。むしろIT技術の進化にともない、求められる品質は上がっています。

皆さまのなかには、「人が足りないならば、優秀なエンジニアを多く採用しよう」と考える方もいるかもしれません。しかし優秀なエンジニアやフルスタックエンジニアは特に不足しており、各社で取り合いとなっているため、思うように人を採れない企業も多いことでしょう。

開発エンジニアに比重を置いた採用をするならば、できるだけ開発業務に専念できる仕組みづくりが必要です。インフラの手間を軽減する仕組みが求められるでしょう。

DevOpsやSREとの相違点

よく使われる開発の手法には、DevOpsやSREなどが挙げられます。プラットフォームエンジニアリングとの相違点に加えて、どのような課題を解決しているのかについて確認していきましょう。

DevOpsよりも開発者の役割を軽減できる

DevOpsとプラットフォームエンジニアリングは、効率的な開発により生産性を上げる点が共通しています。一方で開発者への負担は異なります。DevOpsでは、環境構築にかかる負担が開発者にのしかかるためです。開発業務を行ないながら、環境構築や運用に関する多種多様な業務をこなさなければなりません。優秀なエンジニアは他のエンジニアの支援を行なわなければならず、パフォーマンス低下の要因となりかねません。

プラットフォームエンジニアリングでは、開発者の負担軽減がコンセプトです。専門のチームやIDPなどの活用により、開発業務に集中して取り組める環境を提供できます。

SREとは着眼点が異なる

SRE(サイト信頼性エンジニアリング)とプラットフォームエンジニアリングは、着眼点が異なります。SREの目的は、プロダクトやサービスの信頼性を上げることです。品質の向上により開発期間の短縮につながる可能性はありますが、おもな目的ではありません。

一方でプラットフォームエンジニアリングは、効率的な開発を目的としています。環境構築の標準化・簡素化により、品質アップにつながる可能性はあります。しかしおもな目的は開発者の負担を軽くして、開発業務にリソースを集中させることです。

プラットフォームエンジニアリングを活用する4つのメリット

プラットフォームエンジニアリングを活用する4つのメリット<picture> </picture>クリックして拡大

プラットフォームエンジニアリングの活用により、さまざまなメリットが得られます。おもな4つの項目について、どのようなメリットがあるか確認していきましょう。

開発期間を短縮でき生産性も向上する

開発期間を短縮でき生産性も向上できることは、おもなメリットの一つです。IDPの活用により、開発環境の構築においてプラットフォームに強いエンジニアの手を煩わせる必要がありません。待ち時間がなくなることで開発期間を短くできるとともに、優秀なエンジニアへの集中を防ぎ開発業務に専念させることで生産性が上がります。

また開発業務の多くで、自動化技術が採用されるでしょう。標準化される業務も増え、短期間でのリリースが可能となります。本番環境への移行が楽になることは、代表的なメリットの一つです。

保守開発も迅速に実施し顧客に提供できる

どれだけシステムを完璧に作ったとしても、環境の変化に対応するなどの理由で修正が入ることは避けられません。このような保守開発のフェーズにおいても、プラットフォームエンジニアリングならば迅速に実施し、顧客に提供できます。開発者は数回のクリックにより、現在の環境に適したシステムを作成できるためです。環境作成の手間が減り、少ない作業で短期間での対応が可能となることは大きなメリットといえるでしょう。

経験の少ないエンジニアでも開発現場で活躍できる

プラットフォームエンジニアリングでは、さまざまな自動化技術が活用されています。開発環境や開発業務の遂行における業務の多くが自動化されます。覚えるべき項目が減るため、スキルによる差は縮まることでしょう。

このため経験の少ないエンジニアであっても即戦力になりやすく、開発現場での活躍がしやすくなります。しかるべき品質のソフトウェアを作りやすくなることも、メリットといえるでしょう。

優秀なエンジニアをレベルの高い業務に集中配置できる

優秀なエンジニアをレベルの高い業務に集中配置できることも、見逃せないメリットに挙げられます。そもそも慢性的な採用難のなか、優秀なエンジニアの確保や育成は簡単ではありません。エンジニアの負担を軽くする工夫が必要ですが、DevOpsでは開発以外のさまざまな業務に時間を割かれがちとなり、逆に優秀なエンジニアほど忙しくなる事態を招きかねません。

プラットフォームエンジニアリングならば、開発以外の負担を軽減する仕組みが整えられています。高いレベルのエンジニアがさまざまな業務に忙殺されることを防ぎ、難しい業務を集中して任せられるため、人材の有効活用も行なえるでしょう。

顧客にフィットするシステムを迅速に開発できる方法

プラットフォームエンジニアリングは、顧客にフィットするシステムを迅速に開発できる方法です。この方法は新規開発だけでなく、保守開発にも有効です。ツールの活用により、限られた人材を開発業務に集中させることが可能となります。適時適切なソフトウェアの提供につながり、より良いビジネスにつながることでしょう。

これは近年よく聞かれる「フルスタックエンジニア」と逆行する動きのように見えますが、エンジニアのキャリアパスが多様化する現れともいえるでしょう。一般の開発エンジニアがインフラを意識しなくて良い時代となれば、開発スキルをより一層磨き続ける必要に迫られそうです。」

だとよ。


通り芯作成プログラムの改造(通り芯の交点から中心をオフセットさせた基礎の表示)

2023-08-16 22:00:26 | python
通り芯作成プログラムをさらに改造したい。
一旦通り芯を作成したファイルを保存し、次にそのファイルを再度開き、通り芯の交点の座標を取得する。次にそれぞれの交点に一対一に対応した長方形の基礎を表示させることにする。
任意の通り芯の交点をXnYm(n,mは通り芯の番号)で表し、交点からx軸方向へa、y軸方向へb長方形の中心をオフセットさせる。基礎の橫の長さをp,縦の長さをqとする。
n,m,a,b,p,qの数値をボックスに入力させ、作成された通り芯ファイルを読み込んで上書き更新して基礎の長方形も加えて表示させることにする。






#通り芯の交点を入力してファイルに保存させるクラス
import tkinter as tk
import pickle
 
class IntersectionEditor:
def __init__(self, root):
self.root = root
self.root.title("Intersection Editor")
 
self.intersections = {}
 
self.canvas = tk.Canvas(self.root, width=400, height=400)
self.canvas.pack()
 
self.save_button = tk.Button(self.root, text="Save Intersections", command=self.save_intersections)
self.save_button.pack()
 
self.load_button = tk.Button(self.root, text="Load Intersections", command=self.load_intersections)
self.load_button.pack()
 
self.add_intersection(100, 100) # Example initial intersection
 
def add_intersection(self, x, y):
self.canvas.create_oval(x-2, y-2, x+2, y+2, fill="red")
intersection_id = f"X{x}Y{y}"
self.intersections[intersection_id] = {"x": x, "y": y}
 
def save_intersections(self):
with open("intersections.pkl", "wb") as file:
pickle.dump(self.intersections, file)
 
def load_intersections(self):
with open("intersections.pkl", "rb") as file:
self.intersections = pickle.load(file)
for intersection_id, data in self.intersections.items():
self.add_intersection(data["x"], data["y"])
 
root = tk.Tk()
app = IntersectionEditor(root)
root.mainloop()
 
#保存された通り芯ファイルを読み込み、各交点に対応する長方形の基礎を表示するクラス
import tkinter as tk
from tkinter import simpledialog
import pickle
 
class FoundationPlotter:
def __init__(self, root):
self.root = root
self.root.title("Foundation Plotter")
 
self.canvas = tk.Canvas(self.root, width=400, height=400)
self.canvas.pack()
 
self.load_button = tk.Button(self.root, text="Load Intersections", command=self.load_intersections)
self.load_button.pack()
 
self.draw_button = tk.Button(self.root, text="Draw Foundations", command=self.draw_foundations)
self.draw_button.pack()
 
self.intersections = {}
self.foundation_params = {}
 
def load_intersections(self):
with open("intersections.pkl", "rb") as file:
self.intersections = pickle.load(file)
 
def draw_foundations(self):
for intersection_id, data in self.intersections.items():
x = data["x"]
y = data["y"]
if intersection_id not in self.foundation_params:
self.ask_foundation_params(intersection_id)
 
params = self.foundation_params[intersection_id]
a, b, p, q = params["a"], params["b"], params["p"], params["q"]
 
x1 = x - a
y1 = y - b
x2 = x1 + p
y2 = y1 + q
 
self.canvas.create_rectangle(x1, y1, x2, y2, outline="blue", width=2)
 
def ask_foundation_params(self, intersection_id):
params = {}
params["a"] = simpledialog.askinteger("Foundation Parameters", f"Enter a for {intersection_id}:")
params["b"] = simpledialog.askinteger("Foundation Parameters", f"Enter b for {intersection_id}:")
params["p"] = simpledialog.askinteger("Foundation Parameters", f"Enter p for {intersection_id}:")
params["q"] = simpledialog.askinteger("Foundation Parameters", f"Enter q for {intersection_id}:")
 
self.foundation_params[intersection_id] = params
 
root = tk.Tk()
app = FoundationPlotter(root)
root.mainloop()
 
中心がオフセットされた基礎らしきものは表示したが、通り芯は表示されなかった。
 
最後にmain(本体)プログラムを示す。
 
以下が、各クラスを統合して読み込み、実行するmainプログラムの本体のコード例です。
import tkinter as tk from tkinter import simpledialog import pickle class IntersectionEditor: # ... (省略) ... class FoundationPlotter: # ... (省略) ... class MainApp: def __init__(self, root): self.root = root self.root.title("Main Application") self.intersection_editor = IntersectionEditor(self.root) self.foundation_plotter = FoundationPlotter(self.root) self.load_editor_button = tk.Button(self.root, text="Open Intersection Editor", command=self.open_editor) self.load_editor_button.pack(pady=10) self.load_plotter_button = tk.Button(self.root, text="Open Foundation Plotter", command=self.open_plotter) self.load_plotter_button.pack(pady=10) def open_editor(self): self.intersection_editor.root.deiconify() # Show the Intersection Editor window def open_plotter(self): self.foundation_plotter.root.deiconify() # Show the Foundation Plotter window root = tk.Tk() app = MainApp(root) root.mainloop()
 

このMainAppクラスは、IntersectionEditorFoundationPlotterの各クラスを統合し、それぞれのウィンドウを開くためのボタンを提供します。MainAppを実行することで、メインアプリケーションが起動し、IntersectionEditorFoundationPlotterのウィンドウを開くことができます。

各クラスのコードは、以前提供したものを利用してください。プログラムの一部は省略されているため、必要に応じて適宜追加・調整を行ってください。

ちなみにspiderでは
こんな風に出力された。
 
 
オフセットされた基礎が1種類しか表示されていない。
(※通り芯6本とそれぞれの交点に対する中心がオフセットされた任意の寸法の基礎の表示を求めたのだが・・・)
まあ、ここまでできれば上等かな?
 

通り芯作成プログラムをフローティングウィンドウ形式に改造してみた

2023-08-16 21:28:31 | python











import tkinter as tk
from tkinter import ttk
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt

class BalloonAndCrosshairsApp:
def __init__(self, root):
self.root = root
self.root.title("Main Window")
self.show_input_button = tk.Button(root, text="Show Input Form", command=self.show_input_form)
self.show_input_button.pack(padx=10, pady=10)
self.input_window = None
self.x_entry = None
self.y_entry = None
self.points = []
def show_input_form(self):
self.input_window = tk.Toplevel(self.root)
self.input_window.title("Coordinate Input")
self.x_label = tk.Label(self.input_window, text="X:")
self.x_label.grid(row=0, column=0, padx=5, pady=5)
self.x_entry = tk.Entry(self.input_window)
self.x_entry.grid(row=0, column=1, padx=5, pady=5)
self.y_label = tk.Label(self.input_window, text="Y:")
self.y_label.grid(row=1, column=0, padx=5, pady=5)
self.y_entry = tk.Entry(self.input_window)
self.y_entry.grid(row=1, column=1, padx=5, pady=5)
self.add_button = tk.Button(self.input_window, text="Add Point", command=self.add_point)
self.add_button.grid(row=2, columnspan=2, padx=5, pady=5)
self.plot_button = tk.Button(self.input_window, text="Plot Points", command=self.plot_points)
self.plot_button.grid(row=3, columnspan=2, padx=5, pady=5)
def add_point(self):
x = float(self.x_entry.get())
y = float(self.y_entry.get())
self.points.append((x, y))
self.x_entry.delete(0, tk.END)
self.y_entry.delete(0, tk.END)
def plot_points(self):
if not self.points:
return
plot_window = tk.Toplevel(self.root)
plot_window.title("Plot")
x_coordinates = set()
y_coordinates = set()

for x, y in self.points:
x_coordinates.add(x)
y_coordinates.add(y)

fig = Figure(figsize=(5, 4))
ax = fig.add_subplot(111)

balloon_counter = 1
for y in y_coordinates:
for x in x_coordinates:
ax.plot(x, y, 'o', label=f'X{balloon_counter}')
balloon_counter += 1

for y in y_coordinates:
ax.axhline(y, color='red', linestyle='--')

for x in x_coordinates:
ax.axvline(x, color='blue', linestyle='--')

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.legend()
ax.grid(True)

canvas = FigureCanvasTkAgg(fig, master=plot_window)
canvas.get_tk_widget().pack()

root = tk.Tk()
app = BalloonAndCrosshairsApp(root)
root.mainloop()

Pydroidだと表示されたウィンドウをいじれない。

長さ45mm、M12×1.25の六角頭のボルトを自動で作図するPythonプログラム

2023-08-16 09:25:26 | python
長さ45mm、M12×1.25の六角頭のボルトを自動で作図するPythonプログラムを書いて
とChatGPT に頼んだら・・・www





import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d.art3d import Poly3DCollection

def draw_3d_hex_bolt():
bolt_length = 45 # ボルトの長さ (mm)
bolt_diameter = 12 # ボルトの直径 (mm)
thread_pitch = 1.25 # ボルトのピッチ (mm)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# ボルトの六角頭部を描画
bolt_head = np.array([
[0, 0, bolt_length + bolt_diameter],
[bolt_diameter * np.sqrt(3) / 2, bolt_diameter / 2, bolt_length + bolt_diameter],
[0, bolt_diameter, bolt_length + bolt_diameter],
[-bolt_diameter * np.sqrt(3) / 2, bolt_diameter / 2, bolt_length + bolt_diameter]
])
head_poly = [[bolt_head[0], bolt_head[1], bolt_head[2], bolt_head[3]]]
ax.add_collection3d(Poly3DCollection(head_poly, color='black'))
# ボルトのスレッドを描画
thread_radius = bolt_diameter / 2
for i in range(int(bolt_length / thread_pitch)):
y = i * thread_pitch
theta = np.linspace(0, 2 * np.pi, 20)
x = thread_radius * np.cos(theta)
z = y + thread_radius * np.sin(theta)
ax.plot(x, y * np.ones_like(x), z, color='black')
# スレッドの片側の先端に六角頭を描画
thread_tip = np.array([
[0, 0, 0],
[bolt_diameter * np.sqrt(3) / 2, bolt_diameter / 2, 0],
[0, bolt_diameter, 0],
[-bolt_diameter * np.sqrt(3) / 2, bolt_diameter / 2, 0]
])
tip_poly = [[thread_tip[0], thread_tip[1], thread_tip[2], thread_tip[3]]]
ax.add_collection3d(Poly3DCollection(tip_poly, color='black'))
# グラフの設定
ax.set_xlim(-bolt_diameter, bolt_diameter)
ax.set_ylim(0, bolt_length)
ax.set_zlim(0, bolt_length + bolt_diameter)
ax.set_xlabel('Width (mm)')
ax.set_ylabel('Length (mm)')
ax.set_zlabel('Height (mm)')
ax.set_title('3D Hex Bolt Drawing')
plt.show()

draw_3d_hex_bolt()

おい、何回直せと命令しても六角形の頭は描けないし、変な所に変な形の物がついているのは直せないんだな?www


客先常駐c++プログラマーが転職を成功するには?

2023-08-16 06:46:27 | C / Visual C++
Quoraの問答より引用。

※ポイント
①英語の技術ドキュメントが読めて、メールのやりとりができ、ソースコードのコメントが英語で書けるレベルの英語力
②プラットホームエンジニア
③オブジェクト指向、UMLを使った分析手法、アナリシスト

その歳、その世代でC++ができるのは、まさに貴重です。オブジェクト指向が身についているというも貴重です。C、C++に拘らず、それを活かせる分野がよいはずです。

プログラミングでは、ぜひ、アプリケーションではなく、プラットフォーム側に挑戦するとよいと思います。業務アプリケーションプログラマーは履いて捨てる程、ごまんといますが、プラットフォームは希少ですから、付加価値があるはずです。流行に流されず、惑わされないことが重要だと思います。

さらに身に着けるべきスキルは、はやり、オブジェクト指向、そして、UMLを使うような分析手法のスキルかと思います。ただのプログラマーは価値が低いですが、分析、アナリシスのスキルをもった、ソフトウェアエンジニアとなると、そう沢山はいません。ぜひ、おかしな、世界に通用しないSEとやらではなく、まっとうなソフトウェアエンジニアを目指しましょうよ。

加えて、英語を身に着けませんか。これは受験英語ではなく活きた英語です。街の英会話教室で、ネィテブ外国人に習えば十分に身に付きます。場所によては、会話にとどまらず、読み書きも教えてくれます。全て英語で書かれた英語を母国語としない人達に向けて作成されたテキストが準備されているはずでし。さらに、この授業料は、雇用保険から補助してくれます。

そもそも、プログラマーが英語ができないというのは、あり得ない事です。ソフトウェア開発の世界は日本が中心ではなく、日本以外の世界が中心です。世界では日本市場などしれていて日本語など眼中にありません。べつに完璧になる必要はなく、英語の技術ドキュメントが読めて、メールのやりとりができ、ソースコードのコメントが英語で書けるレベルで十分です。

現実問題、現状の収入、客先常駐という環境、本来、質問者さんが得るべき報酬の大部分を、ピンハネされ、搾取されています。結果的に自分を安売りしていることに気づいてください。単純に、依頼者が払っている代金がどのくらいで、どれだけ中間マージンを引かれ、その上で、あなたの直接の雇用者が、さらにマージンを引き、最終的に、あなたの報酬はいくらになっているか、調べてばわかるはずです。無知の生真面目は搾取されます。

転職先を探す時は、大手に拘らず、少数精鋭の実は特定分野に特化しているしられざる会社を探すとよいでしょう。日本の大手メーカーやSIerはほぼ外れです。福利厚生や世間のブランドに騙されないでください。今の時代、安定などありません、上場企業でも、スタートアップベンチャーでも、職を失うリスクは同じです。ならば、何処へ行っても通用するスキルを磨くことができる環境を主軸に探した方がいいです。そして合理的に考えて、競争相手は少ない方がいいんです。

年功序列、終身雇用は、今更ながら、やっと壊れつつあります。行く先がダメなら、あるいは、目的のスキルをこれ以上得る見込みがなくなったら、また次を探すという覚悟がいいと思います。就社ではなく就職をり返していく方がいいです。特定の会社にしか通用しないスキルを身に着けるのは時間の無駄で、俗に、潰しの利かない会社員になってします、最後には、組織に捨てられます。会社は道具であると割り切って、下手に骨を埋めるなど考えない方がいいです。自分軸でいきましょう。

最後に、資格云々ですが、よほどの事情、専門性のための必要性がない限り、資格取得は時間の無駄です。資格を取れば門徒が開けるというのは所詮、学校の先生レベルの発想であり、仮にそれが効果があったとしても、資格で足切りするような会社とは所詮そのレベルでしかなく、入ったあとに、後悔することになると思います。


そうだ!電気通信工事施工管理技士二級一次検定の勉強を始めよう!

2023-08-14 14:19:54 | 電気通信工事施工管理技士試験
電気通信工事施工管理技士二級の一次検定は学歴や職歴に関係無く誰でも受験できる。
未経験でも採用されたら初任給は350万以上と高めらしい。(未経験で転職回数の多い中高年はどのくらい厳しいかは不明。現在、土木施工管理技士の方では転職回数の多い中高年の俺でもボチボチ内定を獲得している。)
他方、電験は試験範囲が広く、結構難しい割には給料が安く、割に合わない。

電気通信工事施工管理技士の試験範囲は意外と狭く、過去問を見た限りでは、そんなに難しくはなさそうだ。例えば電気の分野は高校物理の電気の分野の基礎的な問題を押さえておけばOK。

問題は法律関連。
モチベーションが下がり、いやになる。

だからモチベーションの維持管理をどうするかが大事になってくる。

まあ何をするにしてもモチベーションの維持管理が重要になってくる。

モチベーションの維持管理が何らかの原因でできなくなってしまったら、趣味でさえ飽きてやらなくなってしまう。

ちなみにCCNAに合格しておけば、転職に有利になるらしい。それならばついでにLPICやSQL、PHP、AWS系資格まで関連付けて繋げてしまえば、モチベーションの維持管理ができなくなって飽きてやめてしまったCCNAの勉強も再開できる。

SQL、PHPはどうしてもやる気が出ず、避けてきたが、俺が現在興味関心を示している生成系AIやPython・C#といった他の言語にも密接に絡んでくるから避けて通れなくなってきている。

アルタスA1307購入。

2023-08-14 13:16:23 | 音楽・楽器



Cキーのところの座金にA1307の刻印があるのが本物の証。長野県安曇野に工場を構えるアルタス社の一流の職人達が腕を奮い、丹精を込めて造り上げた逸品!Ag958(100%純粋な銀はAg1000と表される。一般的にはAg925という純度の素材が使われている)という純度の素材をふんだんに使ったA1307はツヤツヤで透明な音色を奏でる。
・・・俺好みの音色だ。(14Kはネットリした音色で俺は好きじゃない。過去、パウエルの9Kオーラマイトを持っていたが、あまりにもあっさり良い音が鳴り、遣り甲斐が無くつまらないと思い、売却した。それ以来、金製のフルートには手を出していない。)

【アルタスA1307】
定価¥715000-のところ¥171,380-で落札!・・・ちなみにヤフオク相場は19~22万辺りと思われる。以前20万で競り負けてしまい、悔しい思いをしたが、待った甲斐がある。たぶん最安値だろう。

A807からA1107へグレードアップし、さらにA1307へ。

A807はリップのみ銀製。
A1107は管体のみ銀製(Ag958)でキーは洋白製。
A1307は管体もキーも銀製(Ag958)。

A1107より歌口の穴が大きくなり、吹きやすくなったが管厚が厚く、抵抗感は強め。
楽器店で試奏したものは完全に調整されていたため、抵抗感はほとんどなかった。
キーが歪んでいるみたいでタンポとトーンホールに隙間がある。音の立ち上がりや鳴りが悪くなっており、調整が必要だ。
タンポは傷んでいないが、いずれ先にはウエサワパッティングシステムに換えたいと思う。

知る人ぞ知るという感じで、プロの一部やハイレベルなアマチュアの間では話題になってるらしい。

ウエサワパッティングシステムの技術研修を受けた取扱店に修理に出してみたいところだ。料金が書かれていないため、来店予約をした上で見積りに伺う必要がある。

ストロビンガーパッドとかいろいろ試してみたが、どれも明らかな差は無い。

調整は名古屋のムラマツにA1107を出したが、流石世界一と謳われるだけのことはある。ムラマツの入門モデルEXは日本の他のメーカーの70~80万円クラスに匹敵するクオリティーだ。

和文英訳AIの作り方を訊いてみた。

2023-08-12 13:57:03 | python

Question1.

Pythonで和文英訳AIプログラムを書いて+TKinterライブラリーを用いてGUI表示できるように書き換えて。

 

Answer1.

import tkinter as tk
from google.cloud import translate_v2 as translate

# Google Cloud Translation APIの認証情報を設定
# ここに自分のAPIキーを入力してください
api_key = 'YOUR_API_KEY'
client = translate.Client(api_key)

def translate_japanese_to_english():
    japanese_text = input_text.get("1.0", "end-1c")
    result = client.translate(japanese_text, target_language='en')
    english_translation = result['translatedText']
    output_text.delete("1.0", "end")
    output_text.insert("1.0", english_translation)

# GUIウィンドウを作成
window = tk.Tk()
window.title("和文英訳AI")

# 入力テキストボックス
input_label = tk.Label(window, text="和文を入力してください:")
input_label.pack()
input_text = tk.Text(window, height=5, width=40)
input_text.pack()

# 翻訳ボタン
translate_button = tk.Button(window, text="翻訳", command=translate_japanese_to_english)
translate_button.pack()

# 翻訳結果テキストボックス
output_label = tk.Label(window, text="英訳結果:")
output_label.pack()
output_text = tk.Text(window, height=5, width=40)
output_text.pack()

window.mainloop()

Question2.

Google Cloud Translation APIのAPIキーはどぅやって取得するの?

 

Answer2.

Google Cloud Translation APIのAPIキーを取得するには、Google Cloud Platform(GCP)のアカウントを作成し、プロジェクトを作成してAPIを有効化し、APIキーを生成する手順を以下に示します。注意深く指示に従ってください。

1. **Google Cloud Platformのアカウント作成**:
   - https://cloud.google.com/ にアクセスして新しいアカウントを作成するか、既存のアカウントでログインします。

2. **新しいプロジェクトの作成**:
   - ダッシュボードにアクセスし、新しいプロジェクトを作成します。

3. **Translation APIの有効化**:
   - プロジェクトのダッシュボードで、「APIとサービス」 > 「APIライブラリ」に移動します。
   - "Cloud Translation API"を検索し、有効にします。

4. **認証情報の作成**:
   - 「APIとサービス」 > 「認証情報」に移動します。
   - 「認証情報を作成」を選択し、「APIキー」を選択します。

5. **APIキーの設定**:
   - 生成されたAPIキーが表示されます。必要に応じて名前を設定できます。
   - キーが生成されたら、コピーして安全な場所に保管してください。

6. **プロジェクトへのAPIキーの関連付け**:
   - プロジェクトを選択し、APIキーを関連付けることで、そのプロジェクト内でAPIキーが使用されるようになります。

これでAPIキーが取得できました。APIキーをコードに直接書き込む場合、コードを公開する際にセキュリティ上のリスクがあるため注意が必要です。セキュリティを考慮して、適切な方法でAPIキーを管理してください。

金がかかるらしいからやらんw

runfile('C:/Users/User/untitled0.py', wdir='C:/Users/User')
Traceback (most recent call last):

  File "C:\Users\User\untitled0.py", line 9, in <module>
    from google.cloud import translate_v2 as translate

ModuleNotFoundError: No module named 'google.cloud'

google.cloudとtranslateライブラリをインストールしてもこの有様。

APIキーを取得してもダメっぽいw


【ぴよ将棋】持ち駒全取りの上、歩を全成りで勝利www

2023-08-05 16:57:26 | 日記


今回は片美濃囲いから三間飛車で攻略。
俺は角道を一旦開けてから飛車を振り、角道を閉ざしてから銀を上げて左側の守りを固めた。

相手は角道を開けて一筋二筋の歩を突いてきてスキだらけになり、まず角を使って香車、次に桂馬、さらに角と銀をボロっとタダ取りwww

どんどん崩壊していき、奪った相手の角や銀を使い、左の香車・桂馬を奪い、さらに飛車をゲット!

最後に持ち駒を全取りして歩を全部と金に成らせることができた。

アイゴーアイゴー😭😭😭足の親指チョン切られるニダ~

2023-08-04 05:21:36 | 日本霊能者連盟・日コン連企画株式会社は詐欺会社、山本隆雄は詐欺師!
【祝】👍️♿️🇰🇷🇰🇵🇨🇳🎵😂😊😲😌🪳🖕💩



今朝の体温は初めて常温 36.7度 先生から右足の親指は切断します。いうことを聞いてください。 - ハッカー伝言板改めえむびーまんの日記帳(山本隆雄ブログ)

今朝の体温は初めて常温 36.7度 先生から右足の親指は切断します。いうことを聞いてください。 - ハッカー伝言板改めえむびーまんの日記帳(山本隆雄ブログ)

今朝の体温は初めて常温36.7度しんどさはありません。先生から右足の親指は切断します。いうことを聞いてください。と。今朝の体温は初めて常温36.7度先生から右足の親指は...

goo blog

ザマアwww

足の親指チョン切られるだとよwww
ガチでチョン(朝鮮人擬き)だけに足の親指だけじゃなく、足全体をチョン切ってもらった方がいいんじゃないか?www