DemensDeum コーディング チャレンジ #2

Demensdeum コーディング チャレンジ #2 を開始します。
1. ユーザーエリア内のパーティー/イベントのリストを表示するには、Web アプリケーションをバイブコーディングする必要があります。
2. データ ソースは、フロントからの Web スクレイピング、またはローカル/リモート データベースです。
3. 今日のイベント/パーティーのみを地図上に表示します。
4. 検索範囲を変更できます。
5. Google AI Studio などの無料のコード ジェネレーターで再現できる一連のテキスト プロンプトとして送信します。
6. iOS、Android、PC の Web 上で動作する必要があります
7. 最も優れたデザインが勝利を収める
8. 地図上のイベントをタップすると、イベントの詳細情報が表示されます。
9. 指またはマウスを使用してマップをズームします。
10. 勝者は陪審によって選ばれます (陪審に参加するには私に手紙を書いてください)
11. 賞品 200 USDT
12. 期限: 7 月 1 日。

過去の DemensDeum コーディング チャレンジ #1 の優勝者
https://demensdeum.com/blog/ru/2025/06/03/demensdeum-code-challenge-1-winner/

石積み-AR アップデート

暗号通貨のコインを購入する機能が Masonry-AR ゲームに追加されました。 1 ドルで 5000 MOS を入手できます。紹介リンクもゲームに追加されました。友人が購入するたびに、紹介者は 50,000 MOS を受け取ります。詳細はフリーメーソンWikiにあります。自動歩行モードも追加されました。GPS モジュールにアクセスできない場合、メイソンは世界の首都の 1 つから前方にのみ自動的に歩き始めます。

ゲームリンク:
https://demensdeum.com/demos/masonry-ar/client/

ロバの達人

「Donkey Adept」は、ピクセル化されたシュールレアリスムの驚くべき、しびれるような作品です。中央には、黒い革のジャケットを着た人物がいます。その頭は、燃えるようなロバの耳を持ち、静電気が発生する燃えるテレビです。被験者は強力なランタンを持ち、騒音の中で真実を探求する孤独な番兵として行動します。それは、メディア、狂気、そして光の絶え間ない探求についての猛烈なレトロスタイルの瞑想です。

https://opensea.io/item/ethereum/0x008d50b3b9af49154d6387ac748855a3c62bf40d/5

キューブアートプロジェクト2オンライン

Cube Art Project 2をオンラインで満たす – ブラウザで直接動作するステーションスケジュールの軽量、高速、完全に書き直されたエディター。今、共同の創造性の可能性があります!

これは単なるツールではなく、色、ジオメトリ、瞑想的な3D作成での実験であり、友人をつなぐことができます。このプロジェクトは、純粋なJavaScriptとFrameworkとWebAssemblyのないThree.jsで作成され、WebGLとShaadersの機能を実証しました。

新しい:マルチプレイヤー!リアルタイムで他のユーザーと協力します。すべての変更、キューブの添加、着色は即座に同期されているため、ステーションの傑作を一緒に作成できます。

コントロール:
-WASD-カメラを移動します
– マウス – 回転
-GUI-色設定

オンライン:
https://demensdeum.com/software/cube-art-project-2-online/

Githubのソース:
https://github.com/demensdeum/cube-art-project-2-online

このプロジェクトは、Three.jsを使用して純粋なJavaScriptに書かれています。
フレームワークなし、コレクターなし、WebAssemblyなし – WebGL、シェーダー、ピクセルジオメトリへの少しの愛のみ。

ドンキヒルズスチーム

Donki Hillsはコメディホラーゲームであり、最初の人のエキサイティングな物語体験であり、予期せぬユーモアの混合物でプレイヤーを深い秘密に陥れます。 DemensdeumがUnreal Engine Engineで開発および公開したこのゲームでは、普通の人であるJamesをコントロールできます。彼の唯一の手がかりは、ノボシビルスクの近くにある静かなドンキと呼ばれる人里離れたロシアの村を示唆する1つの写真です。揺るぎないつながりと答えの必死の必要性(そして、おそらくいくつかの緊張した笑いで)を運転して、ジェームズは壮大な旅に出て、メアリーの消失についての真実を明らかにします。

ゲームはSteamで利用できます:
https://store.steampowered.com/app/3476390/Donki_Hills/

プログラミングのエントロピー

[補完]

プログラミングのエントロピーは強力であるが、しばしば目立たない力であり、ソフトウェアの動作の変動性と予測不可能性を決定します。単純なバグから複雑なおじいちゃんまで、エントロピーは、私たちのプログラムが予想通り常に動作するとは限らない理由です。

ソフトウェアのエントロピーとは何ですか?

ソフトウェアのエントロピーは、アルゴリズムの予期しない結果の尺度です。ユーザーは1STTIの結果をエラーまたはバグとして認識しますが、マシンの観点から見ると、アルゴリズムはプログラマーが敷設した命令を正確に実行します。入力データ、システム条件、および相互作用の膨大な数の可能な組み合わせにより、予期しない動作が発生します。

エントロピーの原因:

*状態の変更:オブジェクトが内部データを変更できる場合、その作業の結果は、その使用の履歴全体に依存します。

*アルゴリズムの複雑さ:プログラムが成長するにつれて、コードを実行する可能性のある方法の数が指数関数的に増加し、すべての結果の予測がほとんど不可能になります。

*外部要因:オペレーティングシステム、その他のプログラム、ネットワーク遅延 – これはすべて、コードの実行に影響を与え、追加の変動ソースを作成します。

エントロピーの原因:

*状態の変更:オブジェクトが内部データを変更できる場合、その作業の結果は、その使用の履歴全体に依存します。

*アルゴリズムの複雑さ:プログラムが成長するにつれて、コードを実行する可能性のある方法の数が指数関数的に増加し、すべての結果の予測がほとんど不可能になります。

*外部要因:オペレーティングシステム、その他のプログラム、ネットワーク遅延 – これはすべて、コードの実行に影響を与え、追加の変動ソースを作成します。

エントロピーの原因としてのグローバル変数

彼の作品では、「Global Varia Byblesは有害なものと見なされます」(1973)W.A。W.A。WulfとM. Shawは、グローバル変数が予測不可能な行動の主な原因の1つであることを示しました。それらは、エントロピーの古典的な症状である追跡と制御が困難な暗黙の中毒と副作用を生み出します。

レマンとエントロピーの法則

ソフトウェアシステムの複雑さを高めるというアイデアは、ソフトウェアの進化の法則においてマニー・レマンを完全に策定しました。それらの2つはエントロピーの概念を直接反映しています。

使用されるコンピュータープログラムは変更されます。このステートメントは、ソフトウェアが静的ではないことを示唆しています。新しい要件と環境を満たすために、それは生き、開発、変更されます。プログラムの寿命の新しい「ラウンド」は、エントロピーの潜在的な源です。

コンピュータープログラムが変更されると、誰もこれを防止しない限り、その複雑さが増加します。この法律は、エントロピーの直接的な結果です。ターゲットを絞った複雑さ管理の取り組みがなければ、新しい変更はそれぞれ、システムに追加の変動と予測不可能性をもたらします。バグや解放されていない行動の可能性を高める新しい依存関係、条件、副作用があります。

AIおよびLLMの世界におけるエントロピー:予測不可能なコード

人工知能モデル(LLM)の分野では、エントロピーは特に急性です。ここでは、非メトナムアルゴリズムを扱っているためです。同じアクセスが常に同じ方法を提供する従来のプログラムとは異なり、LLMは同じ要求に対して異なる答えを出すことができます。

これにより大きな問題が生じます。アルゴリズムの正確性は、著者を使用して特定の限られた入力データのセットでのみ確認できます。しかし、不明な入力データ(ユーザーからの要求)を使用すると、モデルの動作は予測不可能になります。

LLM のエントロピーの例

不一致の語彙と人種差別的な声明:インターネットからのデータをトレーニングした後、MicrosoftのTayやXIIのTayなどのチャットボットが攻撃的または人種差別的な声明を生み出し始めたときの既知のケース。これはエントロピーの結果でした。膨大な量のトレーニングサンプルと組み合わせた未知の入力データは、予測不可能で誤った動作につながりました。

違法な控訴:このような問題は、ニューラルネットワークが著作権または倫理的規範に違反するコンテンツを発行し始めたときに発生します。

ゲームのAI BOTA:たとえば、Fortniteで学習の可能性を伴うゲーム内のAIキャラクターの導入により、AIボットをオフにして、LLMボットからの違法行為を防ぐために、活動の正しさの追跡に追加する必要があるという事実につながりました。

技術的債務:欠陥への関心の累積

不十分に書かれたコードとバイパスソリューション
技術的義務は、長期的なサポートと品質を損なうために迅速な送達を優先する意識的または無意識の妥協です。しばしば短時間で実装され、蓄積され、「地雷原」を形成する高速補正と文書化されていないバイパスソリューション。これにより、コードベースは、意図的なバイパスソリューションを実際の誤ったロジックと区別することが困難になり、予期しない回帰とエラー数の増加につながるため、コードベースが軽微な変更にも非常に敏感になります。

これは、エラーの広がりとアルゴリズムの完全性に対する技術義務の直接的な累積的な効果を示しています。ここで、現在の削減が採用されていることは、将来より複雑で頻繁なエラーにつながります。

不十分なテストとその累積効果

ソフトウェアシステムが慎重にテストされていない場合、エラーや予期しない動作を受けやすくなります。この不十分さにより、エラーは時間の経過とともに蓄積し、サポートが困難でさらなるエラーの影響を受けやすいシステムを作成します。最初からテストを無視すると、技術的な負債が増加するだけでなく、エラーの数を増やすのにも役立ちます。ソフトウェアエントロピーの「壊れた窓の理論」は、取るに足らない、無視されたエラーや設計上の問題が時間とともに蓄積し、より深刻な問題につながり、ソフトウェアの品質を低下させることを示唆しています。

これにより、直接的な因果関係が確立されます。テストの欠如はエラーの蓄積につながり、エントロピーの増加につながり、より複雑で頻繁なエラーにつながり、アルゴリズムの正確性と信頼性に直接影響します。

ドキュメントと情報サイロの不足

適切なドキュメントは、ソフトウェアを開発するときに無視されることがよくあり、システムの仕組みとそれをサポートする方法に関する断片化または知識の喪失につながります。これにより、開発者は変化を起こすためのシステムを「バック」するようになり、誤解の可能性を大幅に増やし、変更が誤っていることが大幅に増加し、エラーに直接つながります。また、重要な情報は利用できないか誤解を招くため、新しい開発者の適応を真剣に複雑にします。

プログラムエントロピーは、「知識の欠如」と「一般的な仮定と既存のシステムの実際の動作との間の矛盾」のために発生します。これはより深い組織の観察です。エントロピーは、コードレベルだけでなく、知識のレベルでも現れます。これらの非公式で暗黙の知識は脆弱であり、(たとえば、チームメンバーを去るときに)簡単に失われます。これは、特にチームの新しいメンバーを変更しようとするときに直接エラーにつながり、それによって主な仮定が明確になるため、アルゴリズムロジックの完全性を危険にさらします。

一貫性のない開発方法と所有権の喪失

ヒューマンファクターは、ソフトウェアエントロピーの重要な、しばしば過小評価されている駆動要因です。開発者間のさまざまなスキル、コーディング、および品質の期待は、ソースコードの矛盾と逸脱につながります。糸くず、コードレビュー、テスト、ドキュメントのための標準化されたプロセスの欠如は、この問題を悪化させます。さらに、コードの不明確または不安定なコードは、いくつかのコマンドがコードの一部を所有しているか、誰も所有していない場合、無視および崩壊の増加につながり、異なる方法で同じ関数を実行するコンポーネントの重複につながり、エラーを広げます。

これは、エントロピーが技術的な問題であるだけでなく、組織のダイナミクスと人間の行動に深く根ざした社会工学でもあることを示しています。一貫性のない慣行と断片化された所有のために生じる「集合的な矛盾」は、直接矛盾と欠陥につながり、システムを予測不可能で制御が困難にし、アルゴリズムの完全性に大きく影響します。

相互接続されたシステムのカスケード誤動作

最新のソフトウェアシステムはしばしば複雑で、非常に相互接続されています。このようなシステムでは、高度な複雑さと密接に関連するコンポーネントは、1つのコンポーネントの拒否が他のコンポーネントの障害の連鎖反応を引き起こすと、障害をカスケードする可能性を高めます。この現象は、アルゴリズムのエラーと不適切な動作の影響を悪化させ、ローカライズされた問題を体系的なリスクに変えます。このようなシステムのアルゴリズムの結果は、実行の直接的な経路からはほど遠い障害に対して非常に脆弱になり、結果が広く誤って誤った結果につながります。

エントロピーの直接的な症状、アーキテクチャの複雑さは、分離されたアルゴリズムエラーを大規模なシステム障害に変換する可能性があり、一般的なシステムが信頼できなくなり、その出力データは信頼できません。これは、エントロピー効果の広がりを抑えるための建築の安定性の必要性を強調しています。

最新の例の1つは、2024年にウイルス対策ソフトウェアを更新した後、青い死のスクリーンが登場したため、アメリカとヨーロッパの空港のよく知られている停止です。ウイルス対策アルゴリズムの誤った結果とオペレーティングシステムが世界の航空交通につながりました。

実用的な例

例1:ユニコードおよびバイト制限のエントロピー

32バイトによって制限されているテキストフィールドを使用した簡単な例を見てみましょう。

ASCII(低エントロピー)を使用したシナリオ

フィールドがASCIIシンボルのみを受け入れる場合、各シンボルは1バイトを取ります。したがって、正確に32文字がフィールドに配置されます。他のシンボルは単に受け入れられません。

@startuml
ASCIIを使用したタイトルの例(低エントロピー)
俳優ユーザー
参加者「テキストフィールド」

ユーザー – > Textfield:32のシンボルASCIIを紹介します
Textfield-> Textfield:長さをチェック(32バイト)
右に注意してください
すべてが順調です。
エンドノート
テキストフィールド – >ユーザー:acceps入力
@enduml

UTF-8(高エントロピー)を使用したシナリオ:

現在、彼らの80年代のプログラムは2025年に落ちます。フィールドがUTF-8を取ると、各シンボルは1〜4バイトを占有できます。ユーザーが32バイトを超えるラインを導入すると、システムは誤って削減できます。たとえば、絵文字は4バイトを占めています。シンボル内で剪定が発生した場合、「壊れた」シンボルが取得されます。

@startuml
UTF-8のタイトル例(高エントロピー)
俳優ユーザー
参加者「テキストフィールド」

ユーザー – > Textfield:「HI」(37バイト)を紹介します
Textfield-> Textfield:32バイトまでのラインをカットします
右に注意してください
突然!シンボル
バイトでカットします。
エンドノート
テキストフィールド – >ユーザー:「こんにちは」を表示します
左に注意してください
間違ったシンボル。
エンドノート
@enduml

ここで、エントロピーは、異なる入力データの同じ剪定操作が予測不可能で誤った結果につながるという事実に現れます。

例2:CSSのエントロピーとブラウザの非互換性

CSSなどの一見安定した技術でさえ、標準の異なる解釈のためにエントロピーが発生する可能性があります。

開発者がユーザーエレクトを適用していると想像してください。すべての要素にテキスト出力をオフにします。

ブラウザ10(古いロジック)

ブラウザ10入力フィールドの例外を作成します。したがって、フラグにもかかわらず、ユーザーはデータを入力できます。

@startuml
タイトルブラウザ10
俳優ユーザー
参加者「ブラウザ10」としてブラウザ10

ユーザー – > browser10:入力に入力します
BROWSER10-> BROWSER10:CSSをチェックします
右に注意してください
-user-elect:none;
入力は無視されます
エンドノート
BROWSER10->ユーザー:Enteringを許可します
@enduml

ブラウザ11(新しいロジック)

新しいブラウザの開発者は、例外なくすべての要素にルールを適用して、仕様に厳密に従うことを決定しました。

@startuml
タイトルブラウザ11
俳優ユーザー
参加者「ブラウザ11」としてブラウザー11

ユーザー – > browser11:入力の入力
BROWSER11-> BROWSER11:CSSをチェックします
右に注意してください
-user-elect:none;
入力を含むすべての要素に適用されます
エンドノート
BROWSER11->ユーザー:入力を拒否します
左に注意してください
ユーザーは何もできません
タイプ。
エンドノート
@enduml

エントロピーのこの古典的な例 – 同じルールは、「システム」(ブラウザのバージョン)に応じて異なる結果につながります。

例3:あいまいなtkによるエントロピー

あいまいな技術タスク(TK)は、エントロピーのもう1つの強力なソースです。ボブとアリスの2人の開発者が同じ要件をさまざまな方法で理解すると、これは互換性のない実装につながります。

TK:「フィボナッチ数のジェネレーターを実装するには。最適化のために、生成された数字のリストはジェネレーター内で扱われなければなりません。」

ボブのメンタルモデル(可変条件のOOP)
ボブは「リスト… cobleめなければならない」というフレーズに焦点を合わせました。彼は、同じ状態を保存するクラス(Self.Sequence)を実装し、すべての呼び出しでそれを増やします。

    def __init__(self):
        self.sequence = [0, 1]

    def generate(self, n):
        if n <= len(self.sequence):
            return self.sequence

        while len(self.sequence) < n:
            next_num = self.sequence[-1] + self.sequence[-2]
            self.sequence.append(next_num)

        return self.sequence

アリスのメンタルモデル(機能的アプローチ)

アリスは「シーケンスを返す」というフレーズに焦点を合わせました。彼女は、キャッシュを内部最適化としてのみ使用して、毎回新しいリストを返す純粋な関数を書きました。

    sequence = [0, 1]
    if n <= 2:
        return sequence[:n]

    while len(sequence) < n:
        next_num = sequence[-1] + sequence[-2]
        sequence.append(next_num)

    return sequence

アリスがボブジェネレーターの使用を開始すると、Generate(5)が常に5つの数字を返すことを期待しています。しかし、このボブが同じオブジェクトでGenerate(8)と呼ばれる前に、アリスは8つの数字を受け取ります。

結論:エントロピーここでのメンタルモデルの結果です。ボブの実装における変化する状態は、アリスにとってシステムを予測不可能にし、純粋な機能の動作を待っています。

エントロピーとマルチセットネス:人種と祖父の状態

多注フローイングプログラミングでは、特にエントロピーが現れます。いくつかのフローが同時に実行され、その実装の手順は予測不可能です。これは、結果が共通リソースに最初にアクセスするストリームに依存する場合、人種状態につながる可能性があります。極端なケースは、2つ以上のストリームがお互いを待っているときの祖父であり、プログラムはフリーズします。

Dedlokの解決策の例:

Dedlokの問題は、2つ以上のストリームが互いにブロックされ、リソースのリリースを待っているときに発生します。解決策は、リソースを押収するための単一の固定手順を確立することです。たとえば、IDを増やすことでリソースをブロックします。これは、デッドロックを防ぐ循環的な期待を除外します。

@startuml
タイトルソリューション:統一ブロッキング手順
参加者「ストリーム1」としてスレッド1
参加者「ストリーム2」はスレッド2として
参加者は「As As Acoucta」として
参加者「アカウントB」としてアカウントB

スレッド1-> accounta:ブロックアカウントa
Thread1に注意してください
ルールは次のとおりです。
ブロックID
エンドノート
thread2-> accounta:アカウントを待っているaは解放されます
スレッド2に注意してください
ルールは次のとおりです。
ロックを待っています
エンドノート
Thread1-> accountB:ブロックアカウントb
Thread1-> accounta:アカウントを無料でa
スレッド1-> accountB:スコアをリリースb
Thread1に注意してください
トランザクションが完了しました
エンドノート
スレッド2-> accounta:アカウントをブロックします
Thread2-> accountB:アカウントをブロックb
スレッド2に注意してください
トランザクションは終了します
エンドノート
@enduml

このアプローチ - 順序付けられたブロッキング(ロック順序) - は、並列プログラミングでDeadllesを防ぐための基本的な戦略です。

素晴らしい、OOPアプローチの変更可能な状態がエントロピーを増加させる方法を分析しましょう。キャンバスに描画する例を使用して、これを純粋な機能と比較します。

問題:状態とエントロピーの変化

オブジェクトの状態が変化すると、その動作は予測不可能になります。同じ方法を呼び出す結果は、その議論だけでなく、このオブジェクトとの相互作用の歴史全体に依存します。これにより、エントロピーがシステムになります。

キャンバスの長方形の描画に対する2つのアプローチを考えてみましょう。1つは可変条件を持つOOPスタイルの1つ、もう1つは純粋な関数を持つ機能です。

1。OOPアプローチ:可変状態のクラス
ここでは、この場合は内部状態を保存するカーソルクラスを作成します。抽選方法は、この条件を使用して長方形を描画します。

  constructor(initialColor) {
    // Внутреннее состояние объекта, которое может меняться
    this.color = initialColor;
  }

  // Метод для изменения состояния
  setColor(newColor) {
    this.color = newColor;
  }

  // Метод с побочным эффектом: он использует внутреннее состояние
  draw(ctx, rect) {
    ctx.fillStyle = this.color;
    ctx.fillRect(rect.x, rect.y, rect.width, rect.height);
  }
}

// Использование
const myCursor = new Cursor('red');
const rectA = { x: 10, y: 10, width: 50, height: 50 };
const rectB = { x: 70, y: 70, width: 50, height: 50 };

myCursor.draw(ctx, rectA); // Используется начальный цвет: red
myCursor.setColor('blue'); // Изменяем состояние курсора
myCursor.draw(ctx, rectB); // Используется новое состояние: blue

OOPアプローチのUML図:

この図は、抽選方法の呼び出しが異なる結果をもたらすことを明確に示していますが、その引数は変わらない可能性があります。これは、オブジェクトの内部状態を変更した別のセットカラーコールによるものです。これは、変更可能な状態でのエントロピーの古典的な症状です。

title ООП-подход
actor "Программист" as Programmer
participant "Класс Cursor" as Cursor
participant "Canvas" as Canvas

Programmer -> Cursor: Создает new Cursor('red')
note left
  - Инициализирует состояние
    с цветом 'red'.
end note
Programmer -> Cursor: draw(ctx, rectA)
note right
  - Метод draw использует
    внутреннее состояние
    объекта (цвет).
end note
Cursor -> Canvas: Рисует 'red' прямоугольник
Programmer -> Cursor: setColor('blue')
note left
  - Изменяет внутреннее состояние!
  - Это побочный эффект.
end note
Programmer -> Cursor: draw(ctx, rectB)
note right
  - Тот же метод draw,
    но с другим результатом
    из-за измененного состояния.
end note
Cursor -> Canvas: Рисует 'blue' прямоугольник
@enduml

2。機能的アプローチ:純粋な機能

ここでは、純粋な関数を使用します。そのタスクは、それに送信されるすべての必要なデータを使用して長方形を単に描画することです。彼女には状態がなく、彼女の挑戦は彼女の国境以外のものに影響を与えません。

  // Функция принимает все необходимые данные как аргументы
  ctx.fillStyle = color;
  ctx.fillRect(rect.x, rect.y, rect.width, rect.height);
}

// Использование
const rectA = { x: 10, y: 10, width: 50, height: 50 };
const rectB = { x: 70, y: 70, width: 50, height: 50 };

drawRectangle(ctx, rectA, 'red'); // Рисуем первый прямоугольник
drawRectangle(ctx, rectB, 'blue'); // Рисуем второй прямоугольник

機能的アプローチのUML図:

この図は、ドローレクタングの関数が常に外の色を取得することを示しています。彼女の動作は入力パラメーターに完全に依存しているため、クリーンでエントロピーのレベルが低くなります。

@startuml
タイトル機能アプローチ
プログラマーとしての俳優「プログラマ」
参加者の「関数\ n drawrectangle」drawfunc
参加者「キャンバス」はキャンバスとして

プログラマー - > drawfunc:drawrewerctangle(ctx、recta、 'red')
右に注意してください
- 引数を呼び出します:
-CTX
-Recta(座標)
- 「赤」(色)
- 関数には条件がありません。
エンドノート

drawfunc-> canvas:色の「赤」色であふれています
プログラマー - > drawfunc:drawrewerctangle(ctx、rectb、 'blue')
右に注意してください
- 新しい引数で電話してください:
-CTX
-RECTB(座標)
- 「青」(色)
エンドノート
drawfunc-> canvas:「青」の色であふれています
@enduml

純粋な機能を備えた例では、機能には条件がないため、動作は完全に予測可能です。仕事のためのすべての情報は、議論を通じて送信され、孤立して安全になります。ドローメソッドの動作に対して可変状態を持つOOPアプローチでは、オブジェクトとの相互作用の歴史全体が影響を与える可能性があります。これにより、エントロピーが導入され、コードの信頼性が低下します。

モジュラー設計とアーキテクチャ:分離、テスト可能性、再使用

複雑なシステムをより小さく、独立した、自己安全性の高いモジュールに分割すると、設計、開発、テスト、メンテナンスが簡素化されます。各モジュールは特定の機能を処理し、明確に定義されたインターフェイスを介して相互作用し、相互依存を減らし、責任の分離に貢献します。このアプローチは、読みやすさを改善し、メンテナンスを簡素化し、並列開発を促進し、問題を分離することによりテストとデバッグを簡素化します。これにより、エラーの「敗北の半径」が減り、個別のモジュールの欠陥を妨げ、カスケード障害の防止が重要です。マイクロサービスアーキテクチャは、モダリティの強力な実現です。

モジュール性は、単なるコードを整理する方法ではなく、欠陥を含む基本的なアプローチと安定性の増加でもあります。 1つのモジュールでのエラーの影響を制限すると、モダリティはシステムの全体的な安定性をエントロピー減衰に向上させ、1つの拒否のポイントがアプリケーション全体の正確性を損なわないことを保証します。これにより、チームはシステムのより小さく、より制御された部分に集中できるようになり、より徹底的なテストとより速い検出と修正エラーにつながります。

純粋なコードの実践:信頼性のためのキス、ドリス、堅実な原則

キス(シンプルにしてください、愚かです):
このデザイン哲学は、シンプルさと明快さを表し、不必要な複雑さを積極的に回避します。単純なコードは本質的に読み取り、理解、変更が簡単であるため、エラーの傾向が減少し、サポートが改善されます。複雑さは、エラーの栄養環境として明確に定義されています。

キスは審美的な好みであるだけでなく、デザインの意図的な選択であり、エラーの攻撃の表面を減らし、将来の変化に対してコードをより耐性にし、それによってアルゴリズムの正確性と予測可能性を維持します。これは、詳細なレベルのコードでのエントロピーに対する積極的な尺度です。

乾燥(Donat Repeat Yourself):
乾燥した原理は、情報の繰り返しとコードの重複を減らし、抽象化に置き換える、またはデータの正規化を使用することを目的としています。その主な位置は、「知識の各断片には、システムに単一の明確な権威ある表現が必要だ」ということです。このアプローチは冗長性を排除し、矛盾を減らし、複製された論理のいくつかのコピーでエラーの拡散またはそれらの一貫性のない修正を防ぎます。また、コードベースのサポートとデバッグを簡素化します。

コードの複製は、一貫性のない変化につながり、それがエラーにつながります。乾燥はこれを防ぎ、ロジックとデータに単一の真実の原因を提供し、これはアルゴリズムの正確性に直接寄与し、一般的なロジックがシステム全体で均一かつ予測可能に動作することを保証し、薄くてエラーの入力が困難になることを防ぎます。

ソリッド原理

このニーモニックの頭字語は、5つの基本的な設計原則(統一された責任、開放性/近さ、リスキンの代替、インターフェイスの分離、依存関係の反転)を示しています。堅実なソフトウェアエンティティを順守することは、サポートと適応が容易になり、エラーの数が少なくなり、開発サイクルが速くなります。彼らは、サービス(SRP)を簡素化し、修正なし(OCP)のないスケーラブルな追加機能を確保し、行動の一貫性(LSP)を確保し、コヒーレンス(ISP)を最小限に抑え、抽象化(DIP)による柔軟性の向上によってこれを達成します。

確固たる原則は、構造的完全性に対する全体的なアプローチを提供し、それがシステムを本質的に変化のスタント効果に対してより耐性にします。モジュール性、分離、明確な責任を促進すると、システムが継続的に進化していても、エントロピーと戦うための基本的な尺度として機能していても、カスケードエラーを防ぎ、アルゴリズムの正確性を維持します。

エントロピーおよびドメイン駆動型設計(DDD)

ドメイン駆動型のデザイン(DDD)は、単なる哲学ではなく、アプリケーションをドメインに分割するための特定のパターンを提供する本格的な方法論であり、複雑さを効果的に制御してエントロピーと戦うことができます。 DDDは、混oticとしたシステムを、予測可能な孤立したコンポーネントのセットに変えるのに役立ちます。

単一の概念的な装置としての4つのデザインのギャングのパターン

「デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素」(1994)は、「ギャングオブフォー」(GOF)によって書かれたもので、典型的な問題のために一連の実績のあるソリューションを提供しました。これらのパターンは、構造化された予測可能な制御システムを作成するため、エントロピーと闘うための優れたツールです。

パターンの重要な効果の1つは、単一の概念的な装置の作成です。 1つのチームの開発者が「工場」または「Loner」について話すと、彼の同僚はすぐに私たちが話しているコードの種類を理解します。これにより、コミュニケーションのエントロピーが大幅に減少します。

あいまいさは減少します。パターンには明確な名前と説明があり、ボブやアリスの例のように異なる解釈を除外します。

加速の切除:新しいチームメンバーは、複雑な構造の背後に立っているロジックを推測する必要がないため、プロジェクトに速く注がれます。

リファクタリングは促進されます。パターンに従って構築されたシステムの部分を変更する必要がある場合、開発者はそれがどのように配置され、どの部品を安全に変更できるかをすでに知っています。

GOFパターンの例とエントロピーへの影響:

パターン「戦略」:個々のクラスのさまざまなアルゴリズムをカプセル化し、それらを交換可能にすることができます。これにより、メインコードを変更せずにシステムの動作を変更できるため、エントロピーが減少します。

パターン「コマンド」(コマンド):inkapsulesメソッドのメソッドをオブジェクトに挿入します。これにより、実行を延期したり、コマンドをキューに入れたり、キャンセルしたりできます。パターンは、チームの送信者を受信者から分離し、独立したエントロピーを減らします。

オブザーバーパターン(オブザーバー):1つのオブジェクトの状態の変化が自動的に依存していることを自動的に通知する「1対多」の依存性を決定します。これは、副作用を制御するのに役立ち、それらを明白で予測可能にし、混oticとしたものではなく、隠されていません。

パターン「ファクトリーメソッド」:オブジェクトを作成するためのインターフェイスを定義しますが、サブクラスはどのクラスを制定するかを決定できます。これにより、特定のクラスを知る必要なくオブジェクトを柔軟に作成できるため、エントロピーが減少します。

これらのパターンは、プログラマーがより予測可能でテストされた制御されたシステムを作成するのに役立ち、それによりエントロピーを減らします。これは、複雑なプロジェクトで必然的に発生します。

エントロピーを制御するための

dddキーパターン

限られたコンテキスト:このパターンはDDDファンデーションです。大きなシステムを小さな自律的な部分に分割することを提供します。各コンテキストには、独自のモデル、用語の辞書(ユビキタス言語)とロジックがあります。これにより、変化や副作用のspread延を防ぐ厳格な境界が作成されます。たとえば、「注文のコンテキスト」などの限られたコンテキストでの変更は、「配信コンテキスト」に影響しません。

集合体(集合体):ユニットは、関連するオブジェクトのクラスター(たとえば、「注文」、「順序の行」)であり、全体として考慮されます。ユニットには1つのルートオブジェクト(集約ルート)があります。これは、すべての変更の唯一のエントリポイントです。これは一貫性を提供し、ユニットの状態が常に積分のままであることを保証します。ルートオブジェクトを介してユニットを変更することにより、条件に変化がある方法と時期を制御し、エントロピーを大幅に削減します。

ドメインサービスサービス:サブジェクトエリアの特定のオブジェクトに属さない運用(たとえば、アカウント間のお金の譲渡)については、DDDはドメインサービスを使用することを提案します。それらは、いくつかのユニットまたはオブジェクト間のアクションを調整しますが、条件自体を維持しないでください。これにより、ロジックがより透明で予測可能になります。

主題領域のイベント(ドメインイベント):異なるコンテキストからの直接呼び出しメソッドの代わりに、DDDはイベントを使用することを申し出ます。あるコンテキストで重要なことが起こると、彼はイベントを「公開」します。他のコンテキストはこのイベントを購読して応答できます。これにより、コンポーネント間にかすかなつながりが生じ、システムがよりスケーラブルで耐性があります。

DDDは、エントロピーを制御し、明確な境界、厳格なルール、孤立したコンポーネントを作成するのに役立ちます。これにより、複雑で紛らわしいシステムが独立した制御された部分のセットに変わり、それぞれに独自の「法」と予測可能な動作があります。

複雑で活気のあるドキュメント

コードの変更、設計ソリューション、アーキテクチャ図、ユーザーマニュアルに関する詳細かつ関連するドキュメントを維持することは非常に重要です。この「ライブドキュメント」は、開発者がシステムの複雑さを理解し、変更を追跡し、将来の変更または正しいエラーを正しく行うのに役立ちます。エラーの一般的なソースである「再オープニング」またはシステムの逆設計に費やされる時間を大幅に短縮します。

プログラムエントロピーは、「知識の欠如」と「一般的な仮定と既存のシステムの実際の動作との間の矛盾」のために発生します。ドキュメントはガイドとしてだけでなく、

「知識のエントロピー」と直接戦う知識を維持するための重要なメカニズム。暗黙の知識を明示的かつ手頃な価格にすることにより、アルゴリズムまたはシステムの相互作用の動作に関する誤った仮定のために誤解とエラーを起こす可能性を減らし、それによって機能的正しさを保護します。

厳密なテストと継続的な品質保証

自動テスト:モジュラー、統合、システム、回帰テスト
自動テストは、ソフトウェアのエントロピーを柔らかくし、エラーを防止するための不可欠なツールです。問題の早期検出が可能になり、コードの変更が既存の機能に違反しないことを保証し、迅速で一貫したフィードバックを提供します。キータイプには、モジュラーテスト(分離コンポーネント用)、統合テスト(モジュール間の相互作用)、システムテスト(完全な統合システム用)、および回帰テスト(新しい変更が古いエラーの繰り返しの外観につながらないように)が含まれます。自動テストは、ヒューマン要因を大幅に削減し、信頼性を向上させます。

自動テストは、隠された欠陥の蓄積に対する主な保護です。開発サイクルでエラーの発見を積極的に「シフト」します。つまり、補正が最も安くて単純な場合に問題が発見され、エントロピーの雪a睡状態に貢献することが妨げられます。これは、アルゴリズムの正確性に直接影響し、いくつかのレベルの詳細で予想される動作を常にチェックします。

テストによる開発(TDD):エラーの検出で左にシフト

テスト(TDD)による開発は、ソフトウェア開発のプロセスであり、コード自体を作成する前にコードのテストを作成することを含みます。この反復サイクル「赤緑系再生」は迅速なフィードバックを促進し、エラーの早期検出を可能にし、開発の後期で複雑な問題のリスクを大幅に減らします。 TDDは、より少ない数のエラーとコードの最適な品質につながり、乾燥の哲学を十分に調整することが示されました(Donat Repeats Yourself)。 IBMとMicrosoftの経験的研究は、TDDがエラー密度を低下させて印象的な40〜90%で放出できることを示しています。テストの例は、ライブドキュメントとしても機能します。

TDDは、開発プロセスに直接構築された積極的な品質管理として機能します。開発者に実装前に予想される動作を決定することを強制すると、論理エラーの導入を最小限に抑え、コードが要件に準拠するために意図的に作成され、最初からアルゴリズムの正確性と予測可能性を直接改善することを保証します。

継続的な統合と配信(CI/CD):早期フィードバックと安定したリリース
CI/CDプラクティスは、最新のソフトウェア開発の基本であり、初期段階のエラーを特定し、開発を加速し、途切れない展開プロセスを確保するのに役立ちます。中央リポジトリへの小さなコードパッケージを頻繁に統合することで、自動アセンブリとテストを通じてエラーの早期検出とコード品質の継続的な改善が可能になります。このプロセスは迅速なフィードバックを提供し、開発者が問題を迅速かつ効果的に排除できるようにし、コードの安定性を大幅に向上させ、未検証または不安定なコードの蓄積を防ぎます。

CI/CDコンベヤーは、エントロピーを減らすための連続メカニズムとして機能します。統合とテストを自動化することにより、統合の問題の蓄積を防ぎ、絶えず展開する状態を提供し、回帰の即時の可視性を提供します。この体系的で自動化されたアプローチは、継続的な変化によって行われた障害に直接対抗し、アルゴリズムの安定性を維持し、システム全体にエラーの拡大を防ぎます。

技術的債務の体系的な管理

インクリティオンリファクタリング:戦略的コードの改善

リファクタリングとは、外部動作を変更せずに内部構造を改善するために既存のコードを再構築するプロセスです。これは、ソフトウェアの腐敗と複雑さを減らすための直接的な手段です。リファクタリングは通常、エラーの数を減らす方法と見なされますが、一部の屈折率は、厳密なテストが必要な新しいエラーに意図的に寄与する可能性があることを認めることが重要です。ただし、研究では、一般に、屈折したコードが非スカューリングよりもエラーの影響が少ないことを確認しています。債務管理が現在の開発プロセスに統合され、延期されていないリファクタリングは、技術的債務の指数関数的な蓄積を防ぐために重要です。

リファクタリングは、エントロピー、プロアクティブなコード再構築を減らして変更に対してより耐性を高め、将来のエラーの可能性を減らし、アルゴリズムの明確性を改善するための意図的なアクションです。それは、反応的な消火火事を構造的健康の積極的な管理に変えます。

技術的債務のバックログ:リソースの優先順位付けと配布

現在の技術的債務の維持は、体系的な管理と技術的債務の排除のための重要な慣行です。このバックログは、これらの問題が見落とされないことを保証する改善を必要とする技術義務と分野の特定された要素の包括的な登録簿として機能します。これにより、プロジェクトマネージャーは、影響力と潜在的なリスクの深刻さに基づいて債務要素を優先することができます。プロジェクト中のBablogの統合により、リファクタリング、エラー修正、コードクリーニングがプロジェクトの日常管理の定期的な部分であり、長期的な返済コストを削減することが保証されます。

技術的債務のバクログは、抽象的で成長している問題を制御された効果的なタスクのセットに変えます。この体系的なアプローチにより、組織は新しい機能の開発と品質への投資との間に合理的な妥協点を取ることができ、目立たない債務の蓄積を防止し、アルゴリズムの生産性の重大なエラーや分解につながる可能性があります。主要なエントロピー能力を可視化し、制御します。

静的および動的コード分析:問題の積極的な識別

静的分析

この手法には、エラー、コードの臭い、安全脆弱性、コーディング基準の障害などの問題を特定するための実装なしのソースコードの分析が含まれています。 「保護の最初の行」として機能し、開発サイクルの初期段階で問題を特定し、コードの全体的な品質を改善し、実行中にエラーとして表示される前に問題のあるテンプレートを特定することにより技術的な負債を減らします。

静的分析は、自動化された「コード品質警察」として機能します。潜在的な問題(アルゴリズムロジックに影響を与えるものを含む)を実行する前に、エラーまたはアーキテクチャの欠点の形でそれらの症状を防ぎます。これは、コーディング標準を確保し、ソフトウェアエントロピーに寄与する一般的なエラーを特定するスケーラブルな方法です。

動的分析

この方法は、実行中のソフトウェアの動作を評価し、実行中にのみ現れる問題に関する貴重な情報を提供します。メモリ漏れ、レースの状態、ゼロポインターの除外、パフォーマンスの狭い場所や安全性の脆弱性など、実行中のエラーを非常に発見します。

動的分析は、実行中の行動の欠点を特定するために重要です。これは、静的分析では検出できません。静的分析と動的分析の組み合わせにより、コードの構造と動作に関する包括的なアイデアが保証され、チームが深刻な問題に発展する前に欠陥を特定できるようにします。

生産と事件の監視

APM(アプリケーションのパフォーマンス監視):
APMツールは、アプリケーションのパフォーマンスを監視および最適化するように設計されています。彼らは、パフォーマンスの複雑な問題を特定して診断するのに役立ち、エラーの根本原因を検出し、それにより、ダウンタイムと劣化による収入の損失を減らします。 APMシステムは、応答時間、リソースの使用、エラー頻度など、リアルタイムの情報を提供するなど、さまざまなメトリックを監視します。これにより、ユーザーに影響を与える前に問題を積極的に解決できます。

APMツールは、問題に対する積極的なソリューションとサービスレベルの維持に批判的です。これらは、生産環境で深い可視性を提供し、チームが正しいアルゴリズムに影響を与える可能性のある問題を迅速に識別および排除することができ、それによりダウンタイムを最小限に抑え、ユーザーエクスペリエンスを改善できます。

観測可能性(ログ、メトリック、トレーサー):

観測性とは、出力データと資産間の相互作用に基づいて、システムの内部状態を分析および測定する機能を指します。観測可能性の3つの主要な柱は、メトリック(リソースの生産性と使用に関する定量的データ)、ログ(イベントの詳細な時系列記録)、および追跡(システムコンポーネントを介したリクエストの流れの追跡)です。一緒になって、問題を特定して解決するのに役立ち、システムの動作を包括的に理解することができます。観測性は、従来の監視を超えており、「未知の未知」の理解に役立ち、トラブルの時間を改善するアプリケーションの適用を改善します。

観察可能性により、チームは何が起こっているのかを柔軟に調査し、予見していない問題の根本原因を迅速に判断できます。これにより、システムの動作をより深く柔軟に積極的に理解することができ、チームは予期せぬ問題を迅速に特定して排除し、アプリケーションの高いアクセシビリティを維持することができます。

根本原因の分析(RCA)

根本原因(RCA)の分析は、システムまたはプロセスの問題の基本的な原因を明らかにするデータに基づいた構造化プロセスであり、組織は症状を排除するだけでなく、効果的で長期的なソリューションを実装できるようにします。問題の定義、関連するデータの収集と分析(たとえば、メトリック、ログ、一時的なスケール)、「5つ」や石川図などのツールを使用した因果的および関連する要因の決定、および修正アクションの開発と実装が含まれます。 RCAは、問題の再発生とインシデントに関するトレーニングを防ぐために重要です。

RCAは、事件に関する問題とトレーニングの長期予防にとって重要です。主な原因を体系的に識別して排除し、症状だけでなく、組織はエラーとアルゴリズムの障害の再発生を防ぐことができ、それによりシステムの全体的なシステムが減少し、その信頼性が向上します。

柔軟な方法論とチームプラクティス

アジャイルのエラー管理:

アジャイル環境では、エラー管理が非常に重要であり、スプリントで時間を割り当てて修正することをお勧めします。エラーは製品の単一の製品に記録され、対応する履歴に関連付けられて、根本原因の分析を促進し、その後のスプリントでコードを改善する必要があります。チームは、蓄積を防ぐために、できるだけ早く、できれば現在のスプリントでエラーを修正するよう努力する必要があります。エラー統計の収集(解決済みの数、登録済みの数、修正に費やされた時間)は、コードの品質のアイデアを得てプロセスを改善するのに役立ちます。

これは、即時の修正、根本原因の分析、継続的な改善の重要性を強調しています。柔軟な方法論は、エラーを予防的に制御するためのフレームワークを提供し、システムのエントロピーへの貢献を防ぎ、一定の検証と適応によりアルゴリズムの正確性を維持します。

devops プラクティス

DevOpsのプラクティスは、いくつかの重要なアプローチを通じてソフトウェアの欠陥を軽減し、品質を向上させるのに役立ちます。それらには、協力文化と紛れもないコミュニケーションの開発、継続的な統合と配信の採用(CI/CD)、自動テストの構成、観察可能性とメトリックに注意を払うこと、開発サイクルの初期段階やインセントのトレーニングを含む手作りの作業を避けることが含まれます。これらのプラクティスは、エラーの数を減らし、品質を改善し、絶え間ない改善に貢献します。

DevOpsは、自動化、迅速なフィードバック、および一般的な責任の文化を通じて、継続的な改善とエントロピーの削減に貢献します。開発と運用のプロセスを統合すると、DevOpsは問題が検出および排除される環境を作成し、システムの蓄積と劣化を防ぎ、アルゴリズムの整合性を直接サポートします。

結論

プログラムエントロピーは、特にアルゴリズムとエラーの正しさのコンテキストで、ソフトウェアシステムの劣化のために常に努力する避けられない力です。これは物理的な老化だけでなく、コード、その環境、そして絶えず混乱を起こす人的要因との間の動的な相互作用です。この崩壊の主な原動力には、複雑さの高まり、技術的債務の蓄積、不十分な文書、絶えず変化する外部環境、一貫性のない開発方法が含まれます。これらの要因は、アルゴリズムの作業の誤った結果、予測可能性の喪失、および相互接続されたシステムを通じてカスケーデンに広がる可能性のあるエラーの数の増加に直接つながります。

ソフトウェアエントロピーとの戦いには、多面的で継続的かつ積極的なアプローチが必要です。エラーが発生したときに修正するだけでは十分ではありません。それらを生成する主な理由を体系的に排除する必要があります。モジュラー設計、クリーンコード(KISS、ドライ、ソリッド)、および複雑なドキュメントの原則の採用は、エントロピーの影響を受けやすい安定したシステムを作成するための基本です。厳格な自動テスト、テストによる開発(TDD)および継続的統合/配信(CI/CD)は、コードベースの早期発見と防止の重要なメカニズムとして機能します。

さらに、技術的債務の偶発的なリファクタリングと困惑を介した技術的債務の体系的な管理、ならびに静的および動的なコード分析ツールの使用により、組織は重要な障害につながる前に問題領域を積極的に特定して排除することができます。最後に、APMツールと観察可能性プラットフォームの助けを借りて、根本原因と柔軟なチームプラクティスの規律ある分析と組み合わせて、信頼できる生産監視により、新たな問題に対する迅速な対応を保証し、継続的な改善サイクルを作成します。

最終的に、アルゴリズムの整合性を確保し、ソフトウェアエントロピーの条件でのエラーを最小限に抑える - これは1回の努力ではなく、動的で絶えず変化する環境で秩序を維持する絶え間ない義務です。これらの戦略を適用すると、組織はソフトウェアシステムの信頼性、予測可能性、耐久性を大幅に向上させることができ、アルゴリズムが進化しても計画どおりに機能することを保証できます。

ホルマリンなしの実際の図をブロックします

ブロック図は、複雑なアルゴリズムを理解しやすく構造化されたアクションシーケンスに変えるのに役立つ視覚ツールです。プログラミングからビジネスプロセス管理まで、最も複雑なシステムの視覚化、分析、最適化のための普遍的な言語として機能します。

道路の代わりにロジックであり、都市の代わりにアクションがある地図を想像してください。これはブロック図であり、最も混乱するプロセスでナビゲーションのための不可欠なツールです。

例1:簡素化されたゲームの起動スキーム
仕事の原則を理解するために、簡単なゲームの起動スキームを提示しましょう。

このスキームは、すべてが失敗することなく起こるときの完璧なスクリプトを示しています。しかし、実際の生活では、すべてがはるかに複雑です。

例2:データ読み込みでゲームを開始するための拡張スキーム
最新のゲームでは、ユーザーデータ、保存、または設定をダウンロードするためにインターネット接続が必要になることがよくあります。これらの手順をスキームに追加しましょう。

このスキームはすでにより現実的ですが、何かがうまくいかない場合はどうなりますか?

どうでしたか:インターネットの損失で「壊れた」ゲーム

プロジェクトの開始時に、開発者は考えられるすべてのシナリオを考慮することができませんでした。たとえば、彼らはゲームの主な論理に焦点を合わせており、プレーヤーにインターネット接続がある場合に何が起こるか考えませんでした。

このような状況では、彼らのコードのブロック図は次のようになります。

この場合、エラーを発行したり正しく閉じたりする代わりに、接続がないために受け取っていないデータを待つ段階でゲームが凍結しました。これにより、「ブラックスクリーン」が発生し、アプリケーションが凍結されました。

それがどのようになったか:ユーザーの苦情の修正

ホバリングに関する多くのユーザーの苦情の後、開発者チームは、エラーを修正する必要があることに気付きました。彼らは、アプリケーションが接続の欠如に正しく応答できるエラー処理ユニットを追加することにより、コードを変更しました。

これは、修正されたブロック図がどのように見えるかであり、両方のシナリオが考慮されます。

このアプローチのおかげで、ゲームはユーザーに問題について正しく通知し、場合によってはオフラインモードに移動してゲームを続けることができます。これは、ブロック図が非常に重要である理由の良い例です:開発者に、実行の理想的な方法だけでなく、すべての可能な障害についても考えさせ、最終製品をより安定して信頼できるものにします。

不確実な行動

ハンギングとエラーは、プログラムの予測不可能な動作の例の1つにすぎません。プログラミングでは、不確実な動作(未定義の行動)の概念があります – これは、言語の基準が特定のケースでプログラムの動作を説明しない状況です。

これは何にもつながる可能性があります:撤退のランダムな「ごみ」からプログラムの失敗や深刻なセキュリティの脆弱性まで。たとえば、メモリを使用して作業するとき、無期限の動作はしばしば発生します。たとえば、Cの言語の線で

言語cの例:

開発者がラインをバッファーにコピーしたが、ゼロシンボル( `\ 0`)を最後に追加するのを忘れたと想像してください。

これがコードがどのように見えるかです:

#include 

int main() {
char buffer[5];
char* my_string = "hello";

memcpy(buffer, my_string, 5);

printf("%s\n", buffer);
return 0;
}

予想される結果:「こんにちは」
実際の結果は予測不可能です。

なぜこれが起こっているのですか? spitifier`%sを使用した「printf」関数は、線がゼロシンボルで終了することを期待しています。彼がそうでない場合、彼女はハイライトされたバッファーの外でメモリを読み続けます。

次に、このプロセスのブロック図を紹介します。

これは、ブロック図が非常に重要である理由の明確な例です。開発者に、理想的な実行方法だけでなく、そのような低レベルの問題を含むすべての可能な障害についても考えさせ、最終製品のより安定性と信頼性を高めます。

LLM Fine-Tune

現在、人気のあるLLMサービスプロバイダーはすべて、jsonlファイルを使用して微調整を使用しています。これは、モデルの入力と出力を記述し、Gemini、Openaiなど、形式はわずかに異なります。

特別に形成されたJSONLファイルをダウンロードした後、指定されたデータセット上のLLMモデルの専門化のプロセスが始まります。

Ollamaを使用してローカルマシンで微調整するには、YouTube Channel Techの詳細なビデオに頼ることをお勧めします。
https://www.youtube.com/watch?v=pTaSDVz0gok

すべての電報メッセージのエクスポートからJSONLデータセットの準備を備えたJupyterラップトップの例は、ここで入手できます。
https://github.com/demensdeum/llm-train-example

ネイティブの簡単なレビューを反応します

React Nativeは、モバイルおよびWebアプリケーションのクロスプラットフォーム開発のための強力なツールとしての地位を確立しています。 AndroidおよびiOSのネイティブアプリケーション、およびJavaScript/Typescriptの単一のコードベースを使用してWebアプリケーションを作成できます。

アーキテクチャと開発の基礎

React National Architectureは、JavaScript/Typescriptのネイティブバインディングに基づいています。これは、基本的なビジネスロジックとアプリケーションのアプリケーションがJavaScriptまたはTypeScriptに記述されることを意味します。特定のネイティブ機能(たとえば、デバイスやGPSカメラ)へのアクセスが必要な場合、これらのネイティブバインディングが使用されます。これにより、iOSのSwift/Objective-Cで書かれたコードまたはAndroid用のJava/Kotlinを呼び出すことができます。

結果として生じるプラットフォームの機能は異なる場合があることに注意することが重要です。たとえば、特定の機能は、AndroidとiOSでのみ使用できますが、プラットフォームのネイティブ機能に応じて、Webでは使用できません。

構成と更新
ネイティブバインディングの構成は、プラグインキーを介して実行されます。安定した安全な開発のために、Reactネイティブコンポーネントの最新バージョンを使用し、常に現在のドキュメントに目を向けることが重要です。これにより、互換性の問題を回避し、最新の更新のすべての利点を使用するのに役立ちます。

開発と最適化の機能

Reactネイティブは、特定のプラットフォーム(AndroidフォルダーやiOSフォルダーなど)の結果として生成されるプロジェクトを生成できます。これにより、開発者は、必要に応じて、結果として生じるプロジェクトのファイルに手動でパッチして、微細な最適化または特定の設定を実現することができます。これは、パフォーマンスへの個別のアプローチを必要とする複雑なアプリケーションに特に役立ちます。

典型的で簡単なアプリケーションの場合、ネイティブのバインディングで構築されたエキスポバンドルを使用するのに十分な場合があります。ただし、アプリケーションに複雑な機能がある場合、または深いカスタマイズが必要な場合は、反応ネイティブカスタムアセンブリを使用することをお勧めします。

開発と更新の食べられる

Reactネイティブの重要な利点の1つは、開発中のTypeScript/JavaScriptコードのホットリロードサポートです。これにより、コードの変更がアプリケーションに即座に表示され、開発者が結果をリアルタイムで確認できるため、開発プロセスが大幅に加速します。

React Nativeは、Google PlayとApple App Storeのプロセスをバイパスする「サイレントアップデート)もサポートしていますが、これはTypeScript/JavaScriptコードにのみ適用されます。これにより、アプリケーションストアを通じて出版物の完全なサイクルを通過する必要なく、エラーまたは小さな機能の更新をすばやくリリースできます。

TS/JSコードは、フィンガープリントを使用してネイティブ依存関係の特定のバージョンで覆われていることを理解することが重要です。これにより、JavaScript/TypeScriptパーツとアプリケーションのネイティブ部分との調整が保証されます。

開発におけるLLMの使用

LLM(大規模な言語モデル)との共同採用は可能ですが、モデルがトレーニングされた潜在的に時代遅れのデータセットのために、その適合性は必ずしも高いとは限りません。これは、生成されたコードが、Reactネイティブまたはベストプラクティスの最新バージョンに対応しない場合があることを意味します。

React Nativeは開発を続け、開発者にクロスプラットフォームアプリケーションを作成するための柔軟で効果的な方法を提供します。開発の速度と、ネイティブ機能へのアクセスの可能性を組み合わせて、多くのプロジェクトにとって魅力的な選択肢になります。

Pixel Perfect:宣言性の時代の神話または現実?

インターフェイス開発の世界では、共通の概念があります – 「ロッジに完璧なピクセル」。これは、デザインマシンの最小ピクセルへの最も正確な複製を意味します。長い間、それは、特に古典的なウェブデザインの時代において、ゴールドスタンダードでした。しかし、宣言的なマイルの到着とさまざまなデバイスの急速な成長により、「Pixel Perfect」の原則はより一時的になりつつあります。理由を把握してみましょう。

Imperial Wysiwyg vs.宣言コード:違いは何ですか?

従来、多くのインターフェイス、特にデスクトップは、編集者の命令的なアプローチまたはwysiwyg(あなたが見るものです)を使用して作成されていました。このようなツールでは、デザイナーまたは開発者は要素を直接操作し、ピクセルに正確にキャンバスに配置します。それはグラフィックエディターとの作業に似ています – あなたはあなたの要素がどのように見えるかを見ることができ、あなたは間違いなくそれを配置することができます。この場合、「Pixel Perfect」の達成は非常に現実的な目標でした。

ただし、現代の開発は、宣言マイルにますます基づいています。これは、コンピューターに「このボタンをここに置く」ように指示するのではなく、取得したいものを説明することを意味します。たとえば、要素の特定の座標を示す代わりに、そのプロパティについて説明します。「このボタンは赤く、すべての側面から16pxのインデントを持ち、容器の中心にある必要があります。」 Freimvorkiは、React、Vue、Swiftui、Jetpackのようなものです。この原則を使用するだけです。

なぜ「Pixel Perfect」が多くのデバイスで宣言的なマイルで動作しない

iPhone 15 Pro Max、Samsung Galaxy Fold、iPad Pro、および4K解像度で等しく見栄えの良いアプリケーションを作成すると想像してください。これらの各デバイスには、画面解像度、ピクセル密度、パーティ、および物理サイズが異なります。

宣言的アプローチを使用する場合、システム自体は、すべてのパラメーターを考慮して、特定のデバイスに説明されたインターフェイスを表示する方法を決定します。厳しい座標ではなく、ルールと依存関係を設定します。

* 適応性と応答性:宣言マイルの主な目標は、適応的で応答性のあるインターフェイスを作成することです。これは、読みやすさを壊して維持せずに、インターフェイスが画面のサイズと方向に自動的に適応する必要があることを意味します。各デバイスで「Pixel Perfect」を試みた場合、同じインターフェイスの無数のオプションを作成する必要があります。
* ピクセル密度(DPI/PPI):デバイスのピクセル密度は異なります。スケーリングを考慮しない場合、高密度のデバイス上の100の「仮想」ピクセルのピクセルの同じ要素は、低密度デバイスよりもはるかに小さく見えます。宣言的なフレームワークは、物理的なピクセルによって抽象化され、論理ユニットを使用します。
* 動的コンテンツ:最新のアプリケーションのコンテンツは、しばしば動的です – その体積と構造は異なる場合があります。ピクセルに激しくぼろぼろにした場合、テキストや画像の変更はレイアウトの「崩壊」につながります。
* さまざまなプラットフォーム:さまざまなデバイスに加えて、異なるオペレーティングシステム(iOS、Android、Web、デスクトップ)があります。各プラットフォームには、独自の設計、標準コントロール、フォントがあります。すべてのプラットフォームで完全に同一のピクセル完璧なインターフェイスを作成しようとすると、不自然なタイプとユーザーエクスペリエンスの低下につながります。

古いアプローチは消えませんでしたが、進化しました

インターフェイスへのアプローチは、「必須」と「宣言」の間のバイナリ選択ではないことを理解することが重要です。歴史的に、各プラットフォームには、インターフェイスの作成に対する独自のツールとアプローチがありました。

* ネイティブインターフェイスファイル: iOSの場合は、Android-XMLマーキングファイルのXIB/ストーリーボードでした。これらのファイルは、ピクセルに最適なWysiWygレイアウトであり、エディターと同様に無線に表示されます。このアプローチはどこにも消えておらず、開発を続けており、最新の宣言的なフレームと統合されています。たとえば、AppleとJetpackのSwiftuiはAndroidで構成され、純粋に宣言的なコードのパスで出発しましたが、同時に古典的なレイアウトを使用する機会を保持しました。
* ハイブリッドソリューション:多くの場合、実際のプロジェクトでは、アプローチの組み合わせが使用されます。たとえば、アプリケーションの基本構造は宣言的に実装できます。特定のために、要素の正確な位置決めを必要とするため、プラットフォームの詳細を考慮して、より低レベルの命令的な方法を使用するか、ネイティブコンポーネントを開発できます。

モノリスから適応性への:デバイスの進化が宣言的なマイルを形成する方法

デジタルインターフェイスの世界は、過去数十年にわたって大きな変化を遂げてきました。固定許可を持つ固定コンピューターから、さまざまなユーザーデバイスの指数関数的な成長の時代になりました。今日、当社のアプリケーションは次のことで等しくうまく機能するはずです

* すべてのフォームファクターと画面サイズのスマートフォン
* タブレット独自の方向モードと分離画面があります。
* ラップトップとデスクトップさまざまな許可証のモニター。
* テレビとメディアセンター、リモートで制御されています。テレビでさえ、最小限のボタンを備えたApple TVリモート
のように単純なものになる可能性があることは注目に値します。インターフェイスは、特定のリモートコントロールと対話する「方法」を追加することなく、「まるでそれ自体のように」機能するはずです。
* ミニマルな画面を備えたスマートウォッチとウェアラブルデバイス
* 仮想現実ヘルメット(VR)。空間インターフェイスに対するまったく新しいアプローチが必要です。
* 拡張現実デバイス(AR)、現実世界に関する情報を適用します。
* 自動車情報およびエンターテイメントシステム
*そして、家電製品:感覚スクリーンを備えた冷蔵庫と、スマートオーブンとスマートハウスのシステムへのインタラクティブなディスプレイを備えた洗濯機から。

これらの各デバイスには、物理的寸法、パーティー比、ピクセル密度、入力方法(タッチスクリーン、マウス、コントローラー、ジェスチャー、ボーカルコマンド)、および重要なことに、ユーザー環境の微妙さ。たとえば、VR Shleshには深い浸漬が必要であり、外出先でのスマートフォンの高速で直感的な作業が必要ですが、冷蔵庫のインターフェイスは簡単で大きくて、迅速なナビゲーションを使用する必要があります。

古典的なアプローチ:個々のインターフェイスをサポートする負担

デスクトップの優位性と最初のモバイルデバイスの時代において、通常のビジネスは、個々のインターフェイスファイルのの作成とサポートでした。

* iOS に基づく開発は、xcodeでストーリーボードまたはxibファイルを使用する必要があることが多く、Objective-cまたはswiftのコードを作成しました。
* android XMLマーキングファイルとJavaまたはKotlinのコードが作成されました。
* WebインターフェイスはHTML/CSS/JavaScriptをオンにしました。
* c ++アプリケーションの場合さまざまなデスクトッププラットフォームで、特定のフレームワークとツールが使用されました。
* Windows では、これらはMFC(Microsoft Foundationクラス)、手動描画要素を備えたWin32 API、またはダイアログウィンドウとコントロール要素のリソースファイルを使用していました。
*グラフィックインターフェイスを直接制御するためのココア(Objective-C/Swift)または古いカーボンAPIが macos で使用されました。
* linux/unixのようなシステムでは、GTK+やQTなどのライブラリがよく使用され、XMLのようなマーキングファイル(QTデザイナーの.UIファイルなど)または要素の直接ソフトウェアの作成を介して、インターフェイスを作成するためのウィジェットとメカニズムのセットを提供しました。

このアプローチにより、各プラットフォームを最大限に制御できるようになり、特定のすべての機能とネイティブ要素を考慮することができます。しかし、彼には大きな欠点がありました。努力の複製とサポートのための途方もないコスト。設計または機能のわずかな変更には、実際には独立したコードベースがいくつかの権利を導入する必要がありました。これは、開発者チームにとって本当の悪夢になり、新しい機能の出力を遅くし、エラーの可能性を高めました。

宣言マイル:多様性のための単一言語

宣言マイルが支配的なパラダイムとして登場したのは、この急速な複雑さに対応していました。 React、Vue、Swiftui、Jetpackのようなframwsはを構成します。

宣言的アプローチの主なアイデア:システムがすべての要素を描画する方法(命令)を「どのように」(命令したいか(宣言)」と説明する代わりに。インターフェイスのプロパティと条件を設定し、フレームワークは特定のデバイスに最適に表示する方法を決定します。

これは、次の重要な利点のおかげで可能になりました。

1。プラットフォームの詳細からの抽象化:宣言的なfraimvorkiは、各プラットフォームの低レベルの詳細を忘れるように特別に設計されています。開発者は、単一の転送されたコードを使用して、より高いレベルの抽象化でコンポーネントとその関係を説明します。
2。自動適応と応答性: freimvorki 自動スケーリング、要素のレイアウト、およびさまざまなサイズの画面、ピクセル密度、入力方法へのレイアウトと適応の変更について責任を負います。これは、FlexBoxやグリッドなどの柔軟なレイアウトシステムの使用、および「論理ピクセル」や「DP」に似た概念を使用して達成されます。
3。ユーザーエクスペリエンスの一貫性:外部の違いにもかかわらず、宣言的アプローチにより、デバイスのファミリー全体で行動と相互作用の単一のロジックを維持できます。これにより、テストプロセスが簡素化され、より予測可能なユーザーエクスペリエンスが提供されます。
4。開発とコスト削減の加速:多くのプラットフォームで作業できるのと同じコードを使用すると、開発とサポートの時間とコストによってが大幅に削減されます。チームは、同じインターフェイスを繰り返し書き直すことではなく、機能と設計に焦点を合わせることができます。
5。 Freimvorkiは新しいテクノロジーをサポートするために更新でき、すでに書かれたコードがこのサポートを受け取ることは比較的シームレスです。

結論

宣言的なマイルは、単なるファッションのトレンドではなく、モノのインターネット(IoT)やスマート世帯家電などのユーザーデバイスの急速な開発によって引き起こされる必要な進化ステップです。これにより、開発者と設計者は、各プラットフォームの無限の特定の実装にownれなくなることなく、複雑で適応的で均一なインターフェイスを作成できます。各ピクセルの命令制御から目的の状態の宣言的記述への遷移は、将来のインターフェイスの世界では、表示される画面に関係なく、柔軟で、転送され、直感的であるであるべきであるという認識です。

プログラマー、デザイナー、ユーザーは、この新しい世界で生きる方法を学ぶ必要があります。 特定のデバイスまたは解像度に合わせて設計されたPixel Perfectの追加の詳細は、開発とサポートのために不必要な時間コストにつながります。さらに、このような過酷なレイアウトは、限られた入力テレビ、VR、ARシフトなどの標準以外のインターフェイスを備えたデバイスや、将来の他のデバイスでも機能しない場合がありますが、今日でもわかりません。柔軟性と適応性 – これらは、現代世界で成功したインターフェイスを作成するための鍵です。

なぜプログラマーはニューラルネットワークを使用しても何もしません

今日、ニューラルネットワークはどこでも使用されています。プログラマーはそれらを使用して、コードを生成し、他のソリューションを説明し、ルーチンタスクを自動化し、アプリケーション全体をゼロから作成します。これにより、効率の向上、エラーの減少、開発の加速につながるはずです。しかし、現実ははるかに普及しています。多くはまだ成功していません。ニューラルネットワークは重要な問題を解決しません – 無知の深さを照らすだけです。

理解する代わりにLLMへの完全な依存性

主な理由は、多くの開発者がLLMに完全に依存しており、彼らが働いているツールを深く理解する必要性を無視していることです。ドキュメントを勉強する代わりに、チャットリクエスト。エラーの理由を分析する代わりに、決定をコピーします。建築ソリューションの代わりに、説明に従ってコンポーネントの生成。これはすべて表面的なレベルで機能しますが、非標準タスクが発生するとすぐに、実際のプロジェクトとの統合または微調整の必要性が必要であり、すべてが崩れます。

コンテキストと時代遅れの慣行の欠如

ニューラルネットワークは、一般化されたコードを生成します。彼らは、あなたのプラットフォームの詳細、図書館のバージョン、環境制限、またはプロジェクトの建築ソリューションを考慮していません。生成されるものはしばしばもっともらしいように見えますが、実際のサポートされているコードとは何の関係もありません。それらが時代遅れのバージョンのフレームワークに属している場合、または長い間効果のないまたは安全でないと認識されてきたアプローチを使用する場合、単純な推奨事項でさえも機能しない場合があります。モデルはコンテキストを理解していません – 統計に依存しています。これは、オープンコードで人気のあるエラーとアンチパットターンが何度も何度も再現されることを意味します。

冗長性、非効率性、プロファイリングの欠如

生成されたAIを生成するコードは、多くの場合冗長です。不要な依存関係、ロジックの複製、抽象化を不必要に追加します。サポートが困難な効果的で重い構造が判明しました。これは、ギャングのサイズ、応答時間、エネルギー消費が重要であるモバイル開発では特に深刻です。

ニューラルネットワークはプロファイリングを実施せず、CPUとGPUの制限を考慮していないため、メモリの漏れを気にしません。コードが実際にどれほど効果的であるかを分析しません。最適化は依然として手作りであり、分析と検査が必要です。それがなければ、アプリケーションは、構造の観点から「正しい」ように見える場合でも、遅く、不安定でリソース集中的になります。

脆弱性とセキュリティに対する脅威

安全を忘れないでください。 LLMを使用して部分的または完全に作成されたプロジェクトが正常にハッキングされた場合、すでに既知のケースがあります。理由は典型的なものです。危険な関数の使用、入力データの検証の欠如、承認の論理のエラー、外部依存関係の漏れです。ニューラルネットワークは、オープンリポジトリで見つかったという理由だけで、脆弱なコードを生成できます。セキュリティスペシャリストの参加と完全な改訂がなければ、このようなエラーは攻撃の入力ポイントに簡単になります。

法律はパレートであり、欠陥の本質

パレートの法律は、ニューラルネットワークではっきりと機能します。努力の20%のために結果の80%が達成されます。このモデルは、大量のコードを生成し、プロジェクトの基礎を作成し、構造を広げ、タイプをアレンジし、モジュールを接続できます。ただし、これはすべて時代遅れであり、現在のバージョンのライブラリまたはフレームワークと互換性があり、重要な手動改訂が必要です。ここでの自動化は、プロジェクトの特定の現実にチェックされ、処理され、適応する必要があるドラフトとして機能します。

注意楽観主義

それにもかかわらず、未来は励みに見えます。トレーニングデータセットの絶え間ない更新、現在のドキュメントとの統合、自動化されたアーキテクチャチェック、設計およびセキュリティパターンへのコンプライアンス – これがすべてゲームのルールを根本的に変更する可能性があります。おそらく数年後には、コードをより速く、より安全で、より効率的に書くことができ、LLMに真の技術的な共著者として依存することができます。しかし、今のところ – 悲しいかな – 多くのことをチェックし、書き直し、手動で修正する必要があります。

ニューラルネットワークは強力なツールです。しかし、彼があなたに反対するのではなく、あなたのために働くためには、いつでもコントロールするための基盤、批判的思考、意欲が必要です。

ジンジャータプロトタイプウィンドウ

私はあなたの注意フォーク・ケイトのテキストエディターをGingeritaと呼んでいます。なぜフォーク、なぜ、目標は何ですか?修正を待たないように、ケイトチームからの機能を追加したり、メインブランチへの修正を採用したりするように、自分の仕事に必要な機能を追加したいと思います。
現時点では、Windows用のプロトタイプバージョンが現在利用可能であり、最小限の変更を伴うケイトのほとんどバニラバージョンです。 Gingeritaの場合、2つのプラグを開発しました。エディターとビルドインブラウザーからの画像の画像、Webプロジェクトのデバッグ、またはChatGptなどのアシスタントとAIと対話するための画像です。

Windows用のバージョンは、以下のリンクでテストできます。
https://github.com/demensdeum/Gingerita/releases/tag/prototype

Demensdeum製品のサポート

サポートページへようこそ!

質問がある場合、Demensdeum製品の問題、または改善を提供したい場合は、常にお手伝いします。

私たちに連絡する方法:
support@demensdeum.com

3〜5営業日以内に控訴に答えようとしています。

手紙で何を示すべきか:

製品の名前
バージョン(既知の場合)
問題の詳細な説明
スクリーンショットまたはビデオ(可能であれば)
問題が発生したデバイスとオペレーティングシステム

私たちの製品を使用してくれてありがとう、そしてあなたの経験を可能な限り便利で快適にするよう努めています。

心から、
Demensdeumチーム

バイブコアトリック:なぜLLMが固体、乾燥、きれいに動作しないのか

CHATGPTなどの大規模な言語モデル(LLM)の開発により、ますます多くの開発者がそれらを使用してコードを生成し、設計アーキテクチャを生成し、統合を加速します。ただし、実用的なアプリケーションでは、それは顕著になります。建築の古典原則 – 固体、乾燥、清潔 – LLMコドゲンデーションの特性とうまくやっていません。

これは、原則が時代遅れであることを意味するものではありません – それどころか、それらは手動開発と完全に連携しています。しかし、LLMでは、アプローチを適応させる必要があります。

なぜLLMが建築原則に対処できないのか

カプセル化

インクシレーションでは、システムの一部間の境界、開発者の意図に関する知識を理解し、厳格なアクセス制限に従う必要があります。 LLMは、多くの場合、構造を簡素化したり、理由もなくフィールドを公開したり、実装を複製したりします。これにより、コードはエラーに対してより脆弱になり、アーキテクチャの境界に違反します。

要約とインターフェイス

抽象的な工場や戦略などの設計パターンには、システムの全体的な見方が必要であり、そのダイナミクスを理解する必要があります。モデルは、実装を保証せずに明確な目的なしでインターフェイスを作成したり、レイヤー間の接続に違反したりできます。結果は、過剰または非機能的アーキテクチャです。

dry(donolt繰り返し自分で繰り返します)

LLMは、繰り返しコードを最小限に抑えようとはしません – それどころか、一般的なロジックを作成するよりもブロックを複製する方が簡単です。リクエストに応じてリファクタリングを提供できますが、デフォルトでは、たとえ冗長性につながる場合でも、「自己適切な」フラグメントを生成する傾向があります。

クリーンアーキテクチャ

Cleanは、厳格な階層、フレームワークからの独立性、指向性の依存性、およびレイヤー間の最小のつながりを意味します。このような構造の生成には、システムのグローバルな理解が必要です。また、LLMは、建築の完全性ではなく、単語の確率のレベルで機能します。したがって、コードは混合され、依存の方向に違反し、レベルへの単純化された分割が違反されます。

LLMを使用するときにうまく機能する

乾燥する代わりに濡れています
WET(すべてを2回書く)アプローチは、LLMでの作業においてより実用的です。コードの複製は、保持のモデルからのコンテキストを必要としません。つまり、結果は予測可能であり、正しく修正しやすくなります。また、非自明なつながりやバグの可能性を減らします。

さらに、複製はモデルの短いメモリを補うのに役立ちます。いくつかの場所でロジックの特定の断片が見つかった場合、LLMはそれをさらなる生成で考慮に入れる可能性が高くなります。これにより、伴奏が簡素化され、「忘却」に対する抵抗が増加します。

カプセル化の代わりに単純な構造

複雑なカプセル化を回避し、コードの部分間のデータの直接送信に依存すると、生成とデバッグの両方を大幅に簡素化できます。これは、MVPの迅速な開発または作成で特に当てはまります。

簡略化されたアーキテクチャ

プロジェクトのシンプルでフラットな構造は、最小量の依存関係と抽象化を備えており、発電中はより安定した結果をもたらします。モデルはこのようなコードを簡単に適応させ、コンポーネント間の予想される接続に違反することが多い場合があります。

SDK統合 – 手動で信頼できる

ほとんどの言語モデルは、時代遅れのバージョンのドキュメントでトレーニングされています。したがって、SDKをインストールするための手順を生成する場合、エラーがよく表示されます。時代遅れのコマンド、無関係なパラメーター、またはアクセスできないリソースへのリンク。練習のショー:公式のドキュメントと手動チューニングを使用して、LLMを補助的な役割にします。たとえば、テンプレートコードや構成の適応を生成します。

なぜ原則がまだ機能しているのか – しかし、手動開発で

固体で乾燥した清潔から清潔からの困難は、LLMを介したコドヘゲエネーションに懸念していることを理解することが重要です。開発者がコードを手動で書き込むと、これらの原則は引き続き価値を示し続けます。つながりを低下させ、サポートを簡素化し、プロジェクトの読みやすさと柔軟性を高めます。

これは、人間の思考が一般化する傾向があるという事実によるものです。私たちはパターンを探しています。個々のエンティティに繰り返し論理を持ち込み、パターンを作成します。おそらく、この動作には進化的なルーツがあります。情報の量を減らすと、認知リソースが節約されます。

LLMは異なる行動をとる:彼らはデータの量から負荷を経験せず、貯蓄を努力しません。それどころか、複雑な抽象化を構築および維持するよりも、それらが重複した断片化された情報を使用して作業するのが簡単です。そのため、繰り返し構造と最小限のアーキテクチャの重大度を備えた、カプセル化なしでコードに対処する方が簡単です。

結論

大規模な言語モデルは、特に初期段階で、または補助コードを作成する際に、開発において有用なツールです。ただし、アプローチを適応させることが重要です。アーキテクチャを簡素化し、抽象化を制限し、複雑な依存関係を避け、SDKを構成する際にそれらに依存しないようにすることが重要です。

固体、乾燥、きれいの原則はまだ関連していますが、人の手に最善の効果をもたらします。 LLMで作業する場合、手動で簡単に完成できる信頼できる理解可能なコードを取得できる簡素化された実用的なスタイルを使用することが合理的です。そして、LLMが忘れる場所 – コードの複製は彼が覚えておくのに役立ちます。

テレビヘッドNFTを損なう

私の新しいプロジェクトであるNFTコレクション「Demens TV Heads」を共有したいと思います。

これは一連のデジタルアート作品であり、Demensdeumのロゴのスタイルで、さまざまなキャラクターや職業の人々を反映しています。
最初の作品は激しい「グロズニー」です。

私は毎月12個のNFTのみをリリースする予定です。

各作業は、Ethereumブロックチェーンだけでなく、MetadanとともにDemensdeumのWebサイトやGithub-Roadsでも利用できます。

興味がある場合は、視覚的に見た場合、または単に評価してください。
https://opensea.io/collection/demens-tv-heads
https://github.com/demensdeum/demens-tv-heads-collection
https://demensdeum.com/collections/demens-tv-heads/fierce.png
https://demensdeum.com/collections/demens-tv-heads/fierce-metadata.txt

スーパープログラマー

彼は誰ですか – この神秘的ではかない、ほとんど神話上のスーパープログラマーですか?コードが初めてコンパイルされた人がハーフパイクから起動し、すぐに製品に入ります。伝説は、SenorからJunにバイトで送信されました。他の人が退屈しないようにバグを具体的に書く人。正直に言って、暖かさと皮肉なことに、彼がこのデジタルマントを着用するために必要な超大国を把握します。

1.統一された脆弱性なしでC/C ++について書いてください
バッファオーバーフロー?聞いたことがない。
C ++のスーパープログラマーには、不便な変数がありません。それら自体は尊重から初期化されています。彼はNew Char [256]を書いており、コンパイラは境界のチェックを静かに追加します。他の人がブレークポイントを置く場所 – 彼は一目で。そしてバグは消えます。

2。バグやテストのないフィッチを書いてください
彼はテストを必要としません。彼のコードは、彼が眠る夜に自分自身をテストします(ただし…彼は眠りますか?)。任意のラインは最終的な安定したバージョンであり、すぐに12の言語とNASAアクセス可能なレベルをサポートします。そして、バグがまだ出くわした場合、宇宙は彼をテストしています。

3. AIよりも速く動作します
ChatGptが「なんて良い質問だ!」と印刷している間、スーパープログラマーはすでに新しいOSをロックし、それをトースターに移植し、図でマークダウンのすべてを文書化しました。彼はStackoverflowを尋ねません – 彼は未来からの彼の質問で彼をサポートします。 GPTは彼のコミュニティで勉強しています。

4。彼は著者よりも他の誰かのコードをよく理解しています
「もちろん、私はそれを書きました…しかし、私はそれがどのように機能するのか理解していません。」 – 普通の著者。
「ああ、これは894行目の再帰コールによるものです。これは、正規表現フィルターの副作用に関連しています。スマート。」 – 点滅することなくスーパープログラマー。
彼は最初の試みでPerlを読み、変数の名前の略語を理解し、カーソルの振動によってバグをキャプチャします。

5.アセンブラーにクロスプラットフォームコードを書き込みます
純粋なx86、arm、risc-vにすぐに錆を書くのはなぜですか、「どこでも機能する」旗が旗がありますか?彼は彼自身の敵のテーブルを持っています。 CPUでさえ、彼の指示を台無しにする前に考えています。彼は最適化しません – 彼は超越します。

6.彼は締め切りについての質問に1秒まで答えます
「いつ準備ができているの?」
「2時間後、17分8秒後。そして、はい、これはチャットでのバグ、煙の休憩、1つの哲学的な質問を考慮に入れています。」
誰かがより速くするように頼むなら、彼は単に時空をmake -jivesで再構築します。

7.独自のフレームワークの逆転と修復
独自のSDKは、ドキュメントなしでAPIから落ちました。すべてがbase92とCoughs segfaultの暗号化されていますか?スーパープログラマーにとって、これは普通の火曜日です。彼はバイナリ、吸入16進を開き、1時間後に修正、パフォーマンスの改善、ダークモードを追加したパッチがあります。

8。デザイナーとUXスペシャリスト自身
UIは、人々が美しさで泣き、ボタンが直観によって推測されるという彼のために出てきます。猫でさえ対処します – 検証されました。彼はインターフェースを描きません – 彼は大理石の彫刻家のように彼の内なる本質を開きます。各プレスは喜んでいます。

9。コミット間でマーケティング調査を実施します
Git PushとCoffee Breakの間に、彼は市場分析を収集し、販売目標到達プロセスを構築し、収益化戦略を再考することができます。週末のテスト仮説。彼はラップトップを開くとA/Bテストが自動的に起動されます。

10。Microsoftを単独で繰り返します
金曜日の夕方と良いピザ。 Windows11? Windows12。Office?すでにそこに。エクセル?彼は音声管理に取り組んでおり、休暇を計画するのに役立ちます。すべてがうまく機能し、重量が少なくなります。

11. 100万人のユーザーのインフラストラクチャを展開およびサポートします
彼の自家製NASはクベルネテスの崖です。監視?ミームのあるグラファナ。一部の人が郵便配達員を開くことができるよりも速くAPIを展開します。彼は、ソビエトのティーポットのように、すべてを文書化し、自動化し、確実に文書化しています。

12。技術サポートは必要ありません
ユーザーはそれについて文句を言いません。彼らはただ敬意を持ってそれを使用します。よくある質問?必要ありません。チュートリアル?直感がわかります。彼は、感謝のページに「ヘルプ」ボタンを持っている唯一の開発者です。

13。彼は眠らず、食べず、気を散らしません
彼はカフェインとコードを書きたいという純粋な欲求を食べています。睡眠の代わりに、リファクタリング。食べる代わりに、debianパッケージ。彼のライフサイクルは継続的な開発サイクルです。 CI/CDはパイプラインではなく、これはライフスタイルです。

14.痛みのない顧客とコミュニケーションをとる
「私たちは2日間でUberを作る必要がありますが、より良いだけです。」 – 「見てください:ここにロードマップがあります。ここにリスクがあります。ここにMVPがあります。最初に目標を決定しましょう。」
彼は、顧客が答えてくれるように「いいえ」と言う方法を知っています。「ありがとう、今私は私が欲しいものを理解しています。 「

15.即座に原子炉をプログラムします
ウラン核が分割されているとき、どのくらいの熱が放出されますか?スーパープログラマーは知っています。そして、彼はそれを錆、c、迅速で、さらにはエクセルで盗む方法を知っています。その原子炉は安全であるだけでなく、OTAによって更新されます。

16。すべての可能な分野で知識を持っています
哲学、物理学、モンゴルの税報告 – 彼の頭の中のすべて。彼は彼がリーダーであるクイズに参加しています。彼が何かを知らない場合、彼は単に新しい知識のためのスペースを作るために一時的に記憶をオフにしました。今、それは戻ります。

17.すべてのアルゴリズムと設計パターンを知っています
*、dijkstra、またはSingletonがどのように機能するかを彼に説明する必要はありません。彼は彼らを思いついた。彼と一緒に、パターンは正しく動作します。アンチパットターンでさえ、恥から自分で修正されます。

18。Apple、Google、およびLeft Boredomで働いていました
彼はどこにでもいました:Apple、Google、NASA、IKEA(キャビネットインターフェイスをテストしました)。それから私はそれがすでにあまりにも良すぎることに気づき、喜びのために無料のオープンソースプロジェクトを開発しに行きました。彼はお金を必要としません。

19。彼はポンティッドビットコインを持っていて、彼は中本at島です
はい、それは彼です。言うだけではありません。何百万ものBTCを備えたすべての財布は、実際には彼のフラッシュドライブにあり、コンクリートで囲まれています。それまでの間、彼は「Kotlin Multiplatformを試してみるのは面白かった」ので、アウトバックの農民協同組合のためにバックエンドを書いています。

結論:少し深刻さ
実際、プログラマーは普通の人です。
私たちは間違っています。疲れます。時々、私たちは自分自身に非常に自信を持っているので、私たちは明らかなことを見ません – そして、その歴史の中で最も高価な間違いがなされているのはそうです。

したがって、覚えておく価値があります:

*すべてを知ることは不可能です – しかし、どこを見るべきかを知ることが重要です。
*チームで働くことは弱点ではなく、より良い決定への道です。
*私たちを保護するツールは「松葉杖」ではなく、鎧です。
*質問は正常です。疑うことは正しいです。間違いを犯すことは避けられません。学習が必要です。
*皮肉は私たちの盾です。コードは私たちの武器です。責任は私たちのコンパスです。

そして、スーパープログラマーについての伝説は、私たち全員が時々不可能のために努力していることを思い出させます。そして、これはまさにこれにあります – 本当のプログラミングマジック。

なぜドキュメントがあなたの親友であるのか

(そして、更新後にアドバイスが機能することをやめない第一人者にならない方法)

「アプリはパブリックAPIのみを使用する場合があり、現在配送されているOSで実行する必要があります。」 Appleアプリのレビューガイドライン

新しいフレームワークの作業を開始して、「今、私はすべてを理解します、ドキュメントはボアのためのものです」と考えているなら、あなたは間違いなく一人ではありません。多くの開発者には自然な本能があります。最初に試してみるだけです – 読んでください。これで問題ありません。

しかし、この段階では、正しい道を簡単にオフにして、コードが機能する状況にいることに気付くことができます…しかし、今日だけ、「私は持っています」。

なぜ「把握する」のが簡単なのはなぜですか?それだけでは不十分ですか?

Freimvorkiは、特に閉じた独自のもので、複雑で多層です。彼らは多くの隠されたロジック、最適化、および実装機能を持っています。

*文書化されていません。
*保証されていません。
*いつでも変更できます。
*商業的な秘密であり、特許によって保護できます
*フレームワークの開発者にのみ知られているバグ、欠陥が含まれています。

「Hunchで」行動すると、明確に記載されているルールをサポートする代わりに、ランダムな観測でアーキテクチャを簡単に構築できます。これは、コードが更新やエッジケースに対して脆弱になるという事実につながります。

ドキュメントは制限ではありませんが、サポート

フレームワークの開発者は、理由でマニュアルを作成します – これはあなたとそれらの間の合意です。あなたがドキュメントの一部として行動している間、彼らは約束します:

* 安定性;
* サポート;
*予測可能な動作。

あなたがこのフレームワークを超えているなら、次に起こるすべてがあなたの責任のみになります。

実験?確かに。しかし、ルールのフレームワークでは。
好奇心は開発者のスーパービアです。探索、標準以外のテスト境界を試してください – これはすべて必要です。しかし、重要な「しかし」があります:

ドキュメントとベストプラクティスのフレームワークで実験する必要があります。

文書は刑務所ではなく、カードです。彼女は、どのような機会が本当に計画され、サポートされているかを示しています。有用であるだけでなく、安全なのはそのような実験です。

注意:第一人者

時々あなたは本当の「専門家」に出会うかもしれません:

*彼らはコースを実施します
*会議で演奏する、
*本やブログを書く、
*フレームワークに「彼らのアプローチ」を共有しました。

しかし、たとえ彼らが説得力があるように聞こえたとしても、覚えておくことが重要です:
彼らのアプローチがドキュメントに反している場合、彼らは不安定です。

このような「経験的パターン」は次のとおりです。

*フレームワークの特定のバージョンでのみ動作します。
*更新に対して脆弱になります。
*予測不可能な状況で壊れます。

グルはマニュアルを尊重するときはかっこいいです。それ以外の場合、彼らのヒントは公式の文書を通してフィルタリングする必要があります。

少し固体

堅実な原則からの3つのアイデアがここで特に関連しています:

*オープン/クローズド原理:パブリックAPIを介して動作を拡張し、内側に入らないでください。
* Liskov Sustitionの原則:実装に依存せず、契約に依存してください。障害 – 実装を交換すると、すべてが破壊されます。
*依存関係の反転:高レベルのモジュールは、低レベルモジュールに依存してはなりません。両方のタイプは抽象化に依存する必要があります。抽象化は詳細に依存してはなりません。詳細は抽象化に依存する必要があります。

これは実際にはどういう意味ですか?フレームワークを使用し、その内部の詳細に直接結び付けられている場合、この原則に違反します。
代わりに、フレームワークが公式にサポートするパブリックインターフェイス、プロトコル、契約への依存を構築する必要があります。これは次のとおりです。

*フレームワークの変更からのコードの最良の分離。
*依存関係を簡単にテストして置き換える機能。
*アーキテクチャの予測可能な動作と安定性。

コードが抽象化ではなく詳細に依存している場合、いつでも消えたり変更されたりする可能性のある特定の実装に文字通り自分自身を埋め込みました。

そしてバグの場合は?

あなたがすべてを正しくしたことが起こることもありますが、それは間違って動作します。これは起こります – フレームワークは完璧ではありません。この場合:

*最小の複製例を収集します。
*ドキュメントされたAPIのみを使用していることを確認してください。
*バグポートを送る – 彼らは間違いなくあなたを理解し、おそらく助けになるでしょう。

この例がハッキングまたはバイパスに基づいて構築されている場合、開発者はそれをサポートする必要はなく、おそらくあなたのケースは単に見逃します。

フレームワークから最大を絞る方法

*ドキュメントをお読みください。真剣に。
*著者からのガイドと推奨事項に従ってください。
*実験 – ただし、説明されています。
*マニュアルからヒント(最も有名なスピーカーでさえ!)を確認してください。
*最小限のケースと契約の尊重でバグを折ります。

結論

Freimvorkiはブラックボックスではなく、使用規則を備えたツールです。それらを無視するということは、「ランダムに」コードを書くことを意味します。しかし、私たちはコードを長い間生き、ユーザーを喜ばせ、マイナーなアップデートから脱却しないようにしたいと考えています。

だから:信頼しますが、チェックしてください。そして、はい、マニュアルを読んでください。彼らはあなたの超大国です。

ソース

https://developer.apple.com/app-store/review/guidelines/
https://en.wikipedia.org/wiki/SOLID
https://en.wikipedia.org/wiki/API
https://en.wikipedia.org/wiki/RTFM

キューブアートプロジェクト2

会う – キューブアートプロジェクト2

Station Editorの2番目のバージョンは、WebAssemblyなしでPure JavaScriptで完全に書き換えられました。
軽く、高速で、ブラウザで正しく開始します – それ以上のものはありません。

これは実験です:キューブ、色、自由、そして少し瞑想的な3Dジオメトリ。
RGB-Slodersを使用して色を変更し、シーンを保存してロードし、スペースを移動して遊ぶことができます。

コントロール:
-WASD-カメラを移動します
– マウス – 回転
-GUI-色設定

オンライン:
https://demensdeum.com/software/cube-art-project-2/

Githubのソース:
https://github.com/demensdeum/cube-art-project-2

このプロジェクトは、Three.jsを使用して純粋なJavaScriptに書かれています。
フレームワークなし、コレクターなし、WebAssemblyなし – WebGL、シェーダー、ピクセルジオメトリへの少しの愛のみ。

シーンを保存してロードすることができます – あなたの世界を作成し、JSONとして保存し、後で洗練に戻すか、戻ってきてください。

Dockerの安全:なぜルートの発売が悪い考えなのか

Dockerは、現代のDevopsと開発に不可欠なツールになりました。包囲を分離し、衣装を簡素化し、アプリケーションをすばやく拡大することができます。ただし、デフォルトでは、Dockerにはルートが必要であり、これは潜在的に危険なゾーンを作成します。これは、初期段階ではしばしば無視されます。

なぜDockerはルートから機能するのですか?

Dockerは、Linuxの機能を使用しています。Cgroups、名前空間、iptables、マウント、ネットワーキング、その他のシステム機能を使用しています。これらの操作は、スーパーユーザーのみが利用できます。

それが理由です:
* dockerdデーモンはルートから始まります、
* Dockerコマンドはこの悪魔に送信されます。

これにより、作業が簡素化され、システムを完全に制御できますが、同時に潜在的な脆弱性が開かれます。

なぜ危険なのか:コンテナブレイクアウト、CVE、RCE

コンテナブレイクアウト

断熱材が弱いと、攻撃者はchrootまたはpivot_rootを使用してホストに入ることができます。

実際の攻撃の例:

* CVE-2019-5736-RUNCに対する妨害性により、アプリケーションを書き換えてホストのコードを実行できました。
* CVE-2021-3156-sudoに対する妨害性により、容器内にルートを取得して出て行くことができました。

rce(リモートコード実行)

コンテナ内のアプリケーションが脆弱で、rootから始まる場合、RCE =ホストの完全な制御。

rootless docker:問題の解決策

これらのリスクを最小限に抑えるために、dockerにはルートレスモードが表示されました。このモードでは、demonとコンテナの両方が、ルートと特権のない通常のユーザーに代わって起動されます。これは、攻撃者がコンテナの制御を受け取ったとしても、ホストシステムに害を及ぼすことができないことを意味します。
制限があります。1024未満のポート(たとえば、80および443)を使用することはできません。 -Privilegedモードと一部のネットワークモードは使用できません。ただし、ほとんどの開発シナリオとCI/CD Rootless Dockerでは、タスクに対処し、セキュリティのレベルを大幅に向上させます。

歴史的に、root -antipattern から起動

最初から、最小の特権の原則がUNIX/Linuxの世界に適用されてきました。プロセスが少ないほど、害が少なくなります。 Dockerは当初、ルートアクセスを要求していましたが、今日では潜在的な脅威と見なされています。

ソース

https://docs.docker.com/engine/security/rootless/
https://rootlesscontaine.rs/

Dockerコンテナの非自明な問題:隠された脆弱性

Dockerコンテナの非自明な問題:隠された脆弱性

「Depenensky Hell」(DH)とは何ですか?

「Dependency Hell」(DH)は、ソフトウェアの依存関係を管理するときに発生する問題を示す用語です。その主な理由は、バージョンの競合、さまざまなライブラリを統合することの難しさ、およびそれらの間の互換性を維持する必要性です。 DHには次の側面が含まれています。

– バージョンの競合:プロジェクトは多くの場合、特定のバージョンのライブラリを必要とし、異なるコンポーネントは同じライブラリの互換性のないバージョンに依存する可能性があります。
– 更新の困難:依存関係の更新は、新しいバージョンに修正または改善が含まれている場合でも、予期しないエラーや互換性の故障につながる可能性があります。
– 周囲:環境を分離して安定させたいという欲求は、依存管理の簡素化を目的とした仮想環境、コンテナ化、その他のソリューションの使用につながりました。

脆弱性の排除は、更新されたバージョンのライブラリをリリースする理由の1つですが、DHの主要な原動力ではないことに注意することが重要です。主な問題は、各変更 – バグを修正したり、新しい機能を追加したり、脆弱性を排除したりするかどうかにかかわらず、アプリケーションの安定した開発とサポートを複雑にする一連の依存関係を引き起こす可能性があることです。

DHとの戦いはどのようにしてDockerの作成につながりましたか?

問題を解決するために、DHの問題を解決するために、開発者は、アプリケーションのために孤立した安定した環境を作成する方法を探していました。 Dockerはこの課題への対応でした。コンテナ化により:

– 環境を分離する:すべての依存関係とライブラリは、アプリケーションとともにパッケージ化されます。これにより、Dockerがインストールされている場所で安定した作業が保証されます。
– 展開を簡素化する:開発者は一度環境を構成し、それを使用して追加の設定なしでサーバーにデプロイすることができます。
– 競合の最小化:各アプリケーションは独自のコンテナで機能するため、さまざまなプロジェクトの依存関係の間の競合のリスクが大幅に減少します。

したがって、Dockerは、DH問題に対抗するための効果的なソリューションを提案し、開発者が環境のセットアップの難しさではなく、アプリケーションの論理に集中できるようにしました。

Dockerの時代遅れの依存関係の問題

Dockerのすべての利点にもかかわらず、問題の新しい方向が現れました – 中毒の陳腐化。これはいくつかの理由で起こります:

1.容器は時間とともに凍結します

Docker画像を作成すると、すべてのパッケージとライブラリの特定の状態が修正されます。基本的な画像に組み立てられた後(例えば、 `ubuntu:04.20、` python:3.9`、 `node:18-alpine`)、脆弱性が見つかりました。または、新しいバージョンが生成された場合、コンテナは最初にインストールされたバージョンで動作し続けます。画像が送信されない場合、アプリケーションは何年もの間、時代遅れで潜在的に脆弱なコンポーネントで動作できます。

2。自動更新の欠如

システムマネージャーを介して自動パッケージの更新を構成できる従来のサーバー(たとえば、「Aptアップグレード」または「NPMアップデート」)とは異なり、コンテナは自動的に更新されません。更新は、規律と定期的な制御を必要とする画像を再選する場合にのみ発生します。

3.依存関係を修正しました

安定性を確保するために、開発者はしばしば「Redirements.txt」または「package.json」などのファイルで依存関係のバージョンを修正します。このアプローチは予期しない変更を防ぎますが、同時に、エラーや脆弱性がその後検出されたとしても、依存関係の状態を凍結します。

4.時代遅れの基本画像の使用

コンテナ用に選択された基本的な画像は、時間とともに時代遅れにすることもできます。たとえば、アプリケーションが「ノード:16」の画像に基づいて構築されており、開発者がすでに改善と修正のために「ノード:18」に切り替えている場合、すべてがコード内で正しく機能していても、環境は時代遅れのバージョンにとどまります。

時代遅れの依存関係の問題を回避する方法は?

CI/CDプロセスに時代遅れの依存関係と脆弱性について定期的な検査を含めます。

-Pythonの場合:

pip list --outdated

-Node.jsの場合:

npm outdated

– たとえば、「Trivy」など、ツールを使用して脆弱性を分析します。

trivy image my-app

基本画像の更新を監視します

重要な修正と更新についてタイムリーに学ぶために、Docker Hubの基本画像の更新またはGitHubの対応するリポジトリを購読します。

結論

依存関係の問題は、脆弱性を排除する必要性だけでなく、依存関係の管理と更新の困難の結果としても発生しました。 Dockerは、DHと戦うための効果的なソリューションを提案し、アプリケーションに孤立した安定した環境を提供しています。しかし、コンテナ化の出現により、新しいタスクが生じました – 依存関係の陳腐化と重大な脆弱性の外観を防ぐための画像の定期的な更新の必要性。

最新のDevOpsスペシャリストにとって、バージョンの対立の問題を解決するだけでなく、依存症の関連性のために定期的に自動化された制御慣行を導入して、コンテナが安全で効果的なままであることが重要です。

ビルダーパターン:時間内にオブジェクトを作成する段階的

導入

最後の記事では、ビルダーパターンを使用する一般的なケースを調べましたが、オブジェクトが時間内に作成されたときにオプションは触れられませんでした。
ビルダーパターン(ビルダー)は、複雑なオブジェクトを徐々に作成できる生成デザインテンプレートです。オブジェクトに多くのパラメーターまたはさまざまな構成がある場合に特に役立ちます。その使用の興味深い例の1つは、時間内にオブジェクトを作成するプロセスを分離する能力です。
オブジェクトをすぐに作成できない場合があります – そのパラメーターは、プログラムのさまざまな段階で知られるようになります。

Pythonの例

この例では、車のオブジェクトが段階的に作成されます。まず、データの一部がサーバーからロードされ、ユーザーが欠落情報を入力します。

import requests

def fetch_car_data():
    response = requests.get("https://api.example.com/car-info")
    return response.json()

builder = CarBuilder()

# Backend API data
car_data = fetch_car_data()
builder.set_model(car_data["model"])
builder.set_year(car_data["year"])

# User input
color = input("Car color: ")
builder.set_color(color)

gps_option = input("GPS feature? (yes/no): ").lower() == "yes"
builder.set_gps(gps_option)

car = builder.build()
print(car)

API呼び出しを想像してください。データ入力は、アプリケーションのさまざまな部分、または異なるライブラリでも発生します。次に、ビルダーパターンの使用は、上記の簡単な例よりも明白になります。

利点

– 出力は、一時的なアセンブリのためにオプションのデータを保存する必要のない免疫構造です
– オブジェクトは徐々に収集されます
– 複雑なデザイナーを避けます
– オブジェクトのアセンブリコードは、ビルダーの1つの本質でのみ不完全です
– コードを理解する利便性

ソース

https://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional-ebook/dp/B000SEIBB8
https://demensdeum.com/blog/2019/09/23/builder-pattern/

Demensdeum Coding Challenge#1

Demensdeum Coding Challenge#1を開始します
賞100 USDT
1. Windows1164ビットのレンダリング写真を書く必要があります
2。レンダリング
https://demensdeum.com/logo/demens1.png
3.画像はアプリケーションに統合する必要があります
4。グラフィックAPI -Direct3DまたはDirectDraw
5.そのアプリケーションがバイトが最小のサイズであることが判明したことに勝ちます
6.画像はオリジナルとして1分の1に1つになり、色を保存する必要があります
7.言語/フレームワークでは、追加のインストールを必要としないため、アプリケーションからすぐに開始できます。たとえば、ソリューションが1つのPythonスクリプトのみである場合、そのようなソリューションは適切ではありません。 Python、Pygame、および手動での起動のインストールが必要です。良い例:Pythonスクリプトは、PythonとPygameでExeでラップしました。これは、追加のインストールなしで開始されます。
8。ソースコードを使用して、パブリックリポジトリへのリンクの形式、アプリケーションを組み立てる手順を示します。良い例:Visual Studioコミュニティエディションでのアセンブリの指示があるプロジェクト

締め切り:6月1日、コンテストの要約

Zig + SDL3 + SDL3_IMAGEの参照ソリューション:
https://github.com/demensdeum/DemensDeum-Coding-Challenge-1

ゴーストの連絡先

GhostContactsアプリでは、シークレットリストに連絡先を追加し、CSV連絡先の暗く明るいトピック、ローカリゼーション、エクスポート、インポートのサポートがあります。ユーザーが突然入力するために通常のパスワードが必要な場合、連絡先のリストをリセットするための緊急パスワードがサポートされます。

オンラインでアプリケーション:
https://demensdeum.com/software/ghost-contacts/

Github:
https://github.com/demensdeum/GhostContacts

私がWordPressを選んだ理由

2015 年に自分のブログを始めようと考え始めたとき、どのプラットフォームを選択すべきかという疑問に直面しました。いろいろ探して比較した結果、WordPressに決めました。これはランダムな選択ではなく、プラットフォームの機能、長所と短所を分析した結果です。今日は、WordPress を使用した私の考えと経験を共有したいと思います。

WordPress の利点

  • 使いやすさ
    私が WordPress を選んだ主な理由の 1 つは、その直感的なインターフェースです。これまで CMS を使用したことがない場合でも、数日で WordPress をマスターできます。
  • 膨大な数のプラグイン
    WordPress では、何千もの無料および有料のプラグインにアクセスできます。これらの拡張機能を使用すると、SEO 最適化からソーシャル メディアの統合まで、ブログに関連するほぼすべての機能を追加できます。
  • スケーラビリティ
    WordPress はあらゆる規模のブログに最適です。シンプルな個人ブログから始めましたが、新しい機能や機能を追加することで簡単に成長させることができるとわかっています。
  • 幅広いトピックの選択
    WordPress には、短時間で見栄えの良いブログを作成できる無料および有料のテーマが多数用意されています。カスタムデザインを作成するには、デザイナーの繊細な手作業が必要です。
  • SEO フレンドリー
    WordPress は、設計上、検索エンジンに適したものになるよう設計されています。 Yoast SEO などのプラグインを使用すると、コンテンツを簡単に最適化して検索ランキングを向上させることができます。
  • コミュニティとサポート
    WordPress には世界最大級のコミュニティがあります。問題がある場合は、プラットフォーム専用のフォーラムやブログでほぼ確実に解決策が見つかります。
  • 多言語サポート
    WPGlobus のようなプラグインのおかげで、複数の言語でブログを書くことができます。これは、さまざまな国の読者を対象に作業する場合に特に重要です。

WordPress のデメリット

  • 攻撃に対する脆弱性
    WordPress は人気があるため、ハッカーの標的になっています。適切な保護がなければ、Web サイトが攻撃の被害者になる可能性があります。ただし、定期的なアップデートとセキュリティ プラグインのインストールは、リスクを最小限に抑えるのに役立ちます。
  • プラグインの依存関係
    追加したい機能によっては、複数のプラグインをインストールする必要がある場合もあります。これにより、ブログの速度が低下し、拡張機能間で競合が発生する可能性があります。
  • パフォーマンスの問題
    大規模なブログでは、特に多数のプラグインを使用している場合、WordPress の速度が低下する可能性があります。この問題を解決するには、データベースを最適化し、キャッシュを実装し、より強力なホスティングを使用する必要があります。
  • 一部の機能のコスト
    WordPress の基本バージョンは無料ですが、多くのプロフェッショナルなテーマやプラグインは有料です。最大限に活用するには、時には投資が必要です。

結論

WordPress は、シンプルさとパワーの完璧なバランスを提供するツールです。私にとっては、特に欠点を克服するための解決策が多数あることを考慮すると、利点は欠点を上回ります。 WordPressのおかげで、自分のニーズにぴったり合ったブログを作成することができました。

Wordex – iOS 用の速読プログラム

最近、あなたにお勧めしたい速読アプリを見つけました。

速読は、生産性を大幅に向上させ、読解力を向上させ、時間を節約できるスキルです。市場には、このスキルを習得するのに役立つと約束されたアプリがたくさんありますが、際立ったものの 1 つは Wordex for iOS です。この記事では、Wordex とは何なのか、どのような機能があるのか​​、誰に適しているのか、なぜ注目に値するのかを説明します。

Wordex とは何ですか?

Wordex は、速読スキルを向上させるために特別に設計された iOS アプリです。これにより、ユーザーはテキストをより速く読み、重要なアイデアに集中し、気が散ることを避けることができます。このプログラムは科学的なアプローチに基づいており、読書速度を向上させる便利なツールを提供します。

Wordex の主な機能

  • 速読モード: テキストは、すぐに理解できるように最適化されて表示されます。ユーザーはニーズに応じてテキストの表示速度を調整できます。
  • 進捗分析: このプログラムは、読書速度や改善のダイナミクスなどの詳細な統計を提供します。これは、自分の進捗状況を評価し、読書へのアプローチを調整するのに役立ちます。
  • テキストのインポート: Wordex では、練習用に独自のテキストをアップロードできます。記事、書籍、教材をアプリケーションで直接読むことができます。
  • 直感的なインターフェース: アプリケーションは最小限のスタイルで設計されているため、使いやすくなっています。初心者でも機能を簡単に理解できます。

<中央>
Wordex Screenshot 1

Wordex は誰に適していますか?

Wordex は次のような用途に最適です。

  • 学生:教材をすぐに読んで試験の準備をする必要がある人
  • ビジネスマンおよび会社員:最小限の時間で大量の情報を処理したい人
  • 読者:もっと本を読み、その過程を楽しみたい人

<中央>
Wordex Screenshot 2

Wordex の利点

  • モバイル性:iPhone または iPad のアプリケーションを使用すると、いつでもどこでも学習できます。
  • パーソナライゼーション: ニーズに合わせてテキストの表示をカスタマイズする機能。

<中央>
Wordex Screenshot 3

Wordex を試してみるべき理由

Wordex は速読を教えるためだけのツールではありません。これは集中力を養い、語彙を増やし、生産性を向上させるプログラムです。一度 Wordex を試してみると、読書がもはや面倒ではなく、エキサイティングなアクティビティに変わることに気づくでしょう。

結論

速読を学びたい、または既存のスキルを向上させたい場合は、Wordex が最適です。使いやすく効果的なこのアプリケーションは、目標を達成し、貴重な時間を節約するのに役立ちます。 App Store から Wordex をダウンロードして、今すぐトレーニングを始めましょう!

アプリストア:
https://apps.apple.com/us/app/speed-reading-book-reader-app/id1462633104