uz
Feedback
ToCode

ToCode

Kanalga Telegramโ€™da oโ€˜tish

ื˜ื™ืคื™ื ืงืฆืจื™ื ืœืžืชื›ื ืชื™ื ืžืืช ื™ื ื•ืŸ ืคืจืง

Ko'proq ko'rsatish
1 419
Obunachilar
Ma'lumot yo'q24 soatlar
+17 kunlar
-430 kunlar
Postlar arxiv
ToCode
1 419
๐Ÿ“Œ ื‘ืื‘ื˜ื—ืช ืžื™ื“ืข ืœื ืฉื•ืืœื™ื ืžื” ื›ื‘ืจ ื™ื›ื•ืœ ืœืงืจื•ืช ื”ืจื‘ื” ื™ื•ืชืจ ืงืœ ืœืจืื•ืช ื—ื•ืœืฉื•ืช ื‘ืงื•ื“ ืžืืฉืจ ืœื”ื‘ื™ืŸ ืื™ืš ืœื ืฆืœ ืืช ืื•ืชืŸ ื—ื•ืœืฉื•ืช ื›ื“ื™ ืœืขืฉื•ืช ื ื–ืง, ืื‘ืœ ื›ืฉืื ื—ื ื• ืžืฉืื™ืจื™ื ื—ื•ืœืฉื•ืช ื‘ืงื•ื“ ืฉืœื ื• ืจืง ื‘ื’ืœืœ ืฉืื ื—ื ื• ืœื ืจื•ืื™ื ืžื” ื›ื‘ืจ ื”ื ื–ืง ืฉื”ืŸ ื™ื›ื•ืœื•ืช ืœื’ืจื•ื ืื ื—ื ื• ื‘ืกืš ื”ื›ืœ ื ื•ืชื ื™ื ื™ื•ืชืจ ืžื•ื˜ื™ื‘ืฆื™ื” ืœืื ืฉื™ื ืฉืžื‘ื™ื ื™ื ื‘ื–ื”. ื”ืกื™ืคื•ืจ ื”ื‘ื ื ื›ื ืก ืืฆืœื™ ืœืื•ืกืฃ ื‘ืขื™ื•ืช ืื‘ื˜ื—ืช ืžื™ื“ืข ืฉืงืฉื•ืจื•ืช ืœ AI ื•ื”ื•ื ืžื“ื’ื™ื ื‘ื“ื™ื•ืง ืืช ื”ืคืขืจ ื‘ื™ืŸ ื”ื—ื•ืœืฉื” ืœื ื™ืฆื•ืœ. ืกื™ืœื™ื™ืŸ ื”ื—ืœื™ื˜ื• ืœืชืช ืœืงืœื•ื“ ืœืžื™ื™ืŸ ืืช ื” Issues ืฉืžืฉืชืžืฉื™ื ืคื•ืชื—ื™ื ื‘ืขื–ืจืช ืงื•ื ืคื™ื’ื•ืจืฆื™ื” ื›ื–ืืช:
allowed_non_write_users: "*"
claude_args: >-
  --allowedTools "Bash,Read,Write,Edit,Glob,Grep,WebFetch,WebSearch"
prompt: |
  **Issue:** #${{ github.event.issue.number }}
  **Title:** ${{ github.event.issue.title }}
ืจืื™ืชื ืืช ื”ื‘ืขื™ื”? ืื ื™ ื‘ื˜ื•ื— ืฉื›ืŸ. ืœื•ืงื—ื™ื ืืช ื” title ืฉืœ ื” Issue ื•ืฉื•ืœื—ื™ื ืื•ืชื• ืœืกื•ื›ืŸ ืฉื™ื›ื•ืœ ืœื”ืจื™ืฅ ืคืงื•ื“ื•ืช Shell ื•ืœื’ืฉืช ืœืื™ื ื˜ืจื ื˜. ืขื›ืฉื™ื• ืœื”ื’ื ืชื ื”ืกื•ื›ืŸ ืจืฅ ืขืœ ืžื›ื•ื ื” ืฉืœ Github Actions ื‘ืœื™ ื”ืจืฉืื•ืช ืœืขืฉื•ืช ืฉื•ื ื“ื‘ืจ. ื•ืคื” ืื ื™ ืฉื•ืžืข ื‘ืจืืฉ ืืช ื”ืฉืืœื” ืฉื‘ื˜ื— ื’ื ื”ื ื—ืฉื‘ื• "ืžื” ื›ื‘ืจ ื™ื›ื•ืœ ืœื”ื™ืฉื‘ืจ?". ื ื•, ืžืกืชื‘ืจ ืฉื’ื ืžื›ื•ื ืช ื’ื™ื˜ื”ืื‘ ืืงืฉืŸ ื‘ืœื™ ื”ืจืฉืื•ืช ื™ื›ื•ืœื” ืœืขืฉื•ืช ื ื–ืง ื•ื”ืชื•ืฆืื” ื”ื™ืชื” ื’ื™ืจืกื” ืžืœื•ื›ืœื›ืช ืฉืœ cline ืฉืขืœืชื” ืœ npm. ื”ืกื™ืคื•ืจ ื”ื˜ื›ื ื™ ื”ืžืœื ืœืžืชืขื ื™ื™ื ื™ื ื ืžืฆื ื‘ืœื™ื ืง ื”ื–ื”: https://neciudan.dev/cline-ci-got-compromised-here-is-how#what-is-openclaw-and-why-should-you-care ื”ืœืงื— ื”ื•ื ื™ืฉืŸ ื•ืžืœื•ื•ื” ืื•ืชื ื• ืขื•ื“ ื”ืจื‘ื” ืœืคื ื™ ื™ืžื™ ื” AI. ื‘ืื‘ื˜ื—ืช ืžื™ื“ืข ืœื ืฉื•ืืœื™ื "ืžื” ื›ื‘ืจ ื™ื›ื•ืœ ืœืงืจื•ืช". ืกื•ื’ืจื™ื ืืช ื”ื—ื•ืœืฉื•ืช ืœืคื ื™ ืฉืžื™ืฉื”ื• ืื—ืจ ื™ืžืฆื ืืช ื”ืชืฉื•ื‘ื”.

ToCode
1 419
ื”ื™ ื—ื‘ืจื™ื ืชื’ื™ื“ื• ืžื” ื“ืขืชื›ื ืขืœ ืงื•ื“ ื•ืคื•ืœื™ื˜ื™ืงื”? ื”ื™ื™ืชื ืžืฉืชืžืฉื™ื ื‘ืกืคืจื™ื™ืช ืงื•ื“ ืคืชื•ื— ืขื ื‘ืื ืจ ืฉืœ ืคืจื™ ืคืœืกื˜ื™ืŸ? ืžื” ืœื’ื‘ื™ ืกืœื‘ื” ืื•ืงืจืื™ื ื”? ื•ืœืžื”?

ToCode
1 419
๐Ÿ“Œ ื”ืฆืคื ื” ื‘ Rails - ื”ื˜ื•ื‘, ื”ืจืข ื•ื”ืžื›ื•ืขืจ ืœืจื™ื™ืœืก ื™ืฉ ืžื ื’ื ื•ืŸ ืžื•ื‘ื ื” ืœื”ืฆืคื™ืŸ ืžื™ื“ืข ืฉื ืฉืžืจ ื‘ื‘ืกื™ืก ื”ื ืชื•ื ื™ื. ื”ืžื ื’ื ื•ืŸ ืžื’ื“ื™ืจ ืฉื ื™ ืžืคืชื—ื•ืช ื”ืฆืคื ื” ื•ื‘ื™ื˜ื™ื ืฉืœ ืžืœื— ื›ื“ื™ ืœื‘ืœื‘ืœ ืืช ื”ืื•ื™ื‘, ื›ืœื•ืžืจ ืื ื—ื ื• ืžื’ื“ื™ืจื™ื ื‘ืงื•ื ืคื™ื’ื•ืจืฆื™ื”:
Add this entry to the credentials of the target environment:

active_record_encryption:
  primary_key: YehXdfzxVKpoLvKseJMJIEGs2JxerkB8
  deterministic_key: uhtk2DYS80OweAPnMLtrV2FhYIXaceAy
  key_derivation_salt: g7Q66StqUQDQk9SJ81sWbYZXgiRogBwS
ื•ืื– ืžื”ืงื•ื“ ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ ActiveRecord::Encryption ื›ื“ื™ ืœื”ืฆืคื™ืŸ ืื• ืœืคืขื ื— ืขื ื”ืžืคืชื—ื•ืช ื”ืืœื”, ืื• ืœื”ื’ื“ื™ืจ ืฉื“ื•ืช ืฉืื•ื˜ื•ืžื˜ื™ืช ื™ื•ืฆืคื ื• ื‘ืฉืžื™ืจื” ืœื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื•ื™ืคื•ืขื ื—ื• ื‘ืงืจื™ืื”. ื‘ืžื“ืจื™ืš ื”ืฉื™ืžื•ืฉ ื™ืฉ ืœื”ื ืื™ื ืกื•ืฃ ืžื™ื“ืข ืขืœ ื”ื—ืœืคืช ืžืคืชื—ื•ืช, ืžืชื™ ืœื”ืฉืชืžืฉ ื‘ื”ืฆืคื ื” ื“ื˜ืจืžื ื™ืกื˜ื™ืช ื•ืžืชื™ ืœื ื“ื˜ืจืžื ื™ืกื˜ื™ืช ื•ืฉืืจ ื”ื™ื‘ื˜ื™ื ืฉืœ ืื‘ื˜ื—ืช ืžื™ื“ืข. ืงืœ, ื–ืžื™ืŸ ื•ื˜ื•ื‘ ื›ืžื• ืฉืจื™ื™ืœืก ื™ื•ื“ืข. ื™ืฉ ื’ื ืงืœืืก ื™ืฉืŸ ื•ืžื›ื•ืขืจ ื™ื•ืชืจ ืœื”ืฆืคื ื” ื‘ืฉื MessageEncryptor. ื“ื•ื’ืžืช ื”ืฉื™ืžื•ืฉ ืžื”ืชื™ืขื•ื“ ื ืจืื™ืช ื›ืš:
len   = ActiveSupport::MessageEncryptor.key_len
salt  = SecureRandom.random_bytes(len)
key   = ActiveSupport::KeyGenerator.new('password').generate_key(salt, len) # => "\x89\xE0\x156\xAC..."
crypt = ActiveSupport::MessageEncryptor.new(key)                            # => #<ActiveSupport::MessageEncryptor ...>
encrypted_data = crypt.encrypt_and_sign('my secret data')                   # => "NlFBTTMwOUV5UlA1QlNEN2xkY2d6eThYWWh..."
crypt.decrypt_and_verify(encrypted_data)
ื–ื” ืงื•ื“ ืžื›ื•ืขืจ ื›ื™ ื”ื•ื ืžื›ืจื™ื— ืื•ืชื™ ืœื”ื’ื“ื™ืจ ืœื‘ื“ ืืช ื”ืžืœื— ื•ืœื’ื–ื•ืจ ื‘ืขืฆืžื™ ืืช ื”ืžืคืชื—ื•ืช ื•ืขื•ื“ ืžืฆื™ื’ ืืช ื”ื‘ืกื™ืก ืœื™ืฆื™ืจืช ื”ืžืคืชื— ื‘ืฆื•ืจื” ืžืคื•ืจืฉืช ื‘ืงื•ื“. ื›ืŸ ืืคืฉืจ ืœื›ืชื•ื‘ ื”ืฆืคื ื” ืžืื•ื‘ื˜ื—ืช ืขื MessageEncryptor ืื‘ืœ ื–ื” ื™ื“ืจื•ืฉ ืขื‘ื•ื“ื” ื•ื™ื“ืข ืฉืœื ืžื•ืคื™ืขื™ื ื‘ืชื™ืขื•ื“. ื•ื›ืฉืื ืฉื™ื ืœื ืžืกืคื™ืง ืžืงืฆื•ืขื™ื™ื ืื• ืกื•ื›ื ื™ ืงื™ื“ื•ื“ ื ืชืงืœื™ื ื‘ื›ืืœื” ื‘ืขื™ื•ืช ื”ื ื ื•ื˜ื™ื ืœื–ืจื•ืง ืืช ื”ื—ืœืงื™ื ื”ืงืฉื™ื ื•ืœื”ืคื•ืš ืืช ื”ืงื•ื“ ื”ืžื›ื•ืขืจ ืœืงื•ื“ ืจืข, ืœื“ื•ื’ืžื” ืงื•ื“ ืฉืงื™ื‘ืœืชื™ ืž ChatGPT:
secret_key = Rails.application.key_generator.generate_key("my-secret", 32)

encryptor = ActiveSupport::MessageEncryptor.new(secret_key)

# Encrypt + sign
encrypted = encryptor.encrypt_and_sign("Hello world")

# Decrypt + verify
decrypted = encryptor.decrypt_and_verify(encrypted)

puts encrypted
puts decrypted
ืœืืŸ ื ืขืœืžื• ื”ื‘ื™ื˜ื™ื ื”ืืงืจืื™ื™ื ืฉืœ ื”ืžืœื—? ืฆ'ืื˜ ื›ื ืจืื” ืœื ื—ืฉื‘ ืฉื–ื” ืžืกืคื™ืง ื—ืฉื•ื‘. ืคืจื•ืžืคื˜ ื ื•ืกืฃ ืื’ื‘ ื”ื—ื–ื™ืจ ืœื™ ืืช ื”ืงื•ื“ ื”ื–ื”:
secret_key_base = Rails.application.secret_key_base

# Derive a key
key_len = ActiveSupport::MessageEncryptor.key_len
salt = "my-encryption-salt"
key = ActiveSupport::KeyGenerator.new(secret_key_base).generate_key(salt, key_len)

encryptor = ActiveSupport::MessageEncryptor.new(key)
ื”ืคืขื ื”ื‘ืกื™ืก ืœืžืคืชื— ื”ื•ื secret_key_base ืฉื›ื‘ืจ ื ืžืฆื ื‘ืฉื™ืžื•ืฉ ื›ื“ื™ ืœื”ืฆืคื™ืŸ ืืช ื”ืงื•ืงื™ื– ื•ื›ืš ืงื™ื‘ืœื ื• ืžื™ื—ื–ื•ืจ ืฉืœ ื‘ืกื™ืก ืœืžืคืชื— ื”ืฆืคื ื” ืœืฉื™ืžื•ืฉื™ื ืฉื•ื ื™ื. ืจืง ืื ืื ื™ ืžื‘ืงืฉ ื‘ืžืคื•ืจืฉ ืืช ืฉื™ื˜ืช ื”ื”ืฆืคื ื” ื”ื—ื“ืฉื” ืขื ActiveRecord::Encryption ืื ื™ ื‘ืืžืช ืžืงื‘ืœ ืื•ืชื”. ืœืงื—ื™ื? ื‘ื”ื—ืœื˜. ื›ืฉืงื•ื“ ืชืฉืชื™ืช ื“ื•ืจืฉ ืžื™ื•ืžื ื•ืช ื•ืขื“ื™ื ื•ืช ื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘ื• ื ื›ื•ืŸ ื™ื”ื™ื• ื‘ื ื™ ืื“ื ื•ืกื•ื›ื ื™ ืงื™ื“ื•ื“ ืฉื™ืฉื‘ืจื• ืื•ืชื•.

ToCode
1 419
๐Ÿ“Œ ืื ืงื•ื“ ื ื›ืชื‘ ื‘ื™ืขืจ ื•ืืฃ ืื—ื“ ืœื ืžืฉืชืžืฉ ื‘ื• ื‘ืคืจื•ื™ืงื˜ ื‘ืฉื chatwoot (ืจื™ื™ืœืก) ืžืฆืืชื™ ืืช ื”ืงื•ื“ ื”ื‘ื:
class Api::V1::Accounts::WorkingHoursController < Api::V1::Accounts::BaseController
  before_action :check_authorization
  before_action :fetch_webhook, only: [:update]

  def update
    @working_hour.update!(working_hour_params)
  end

  private

  def working_hour_params
    params.require(:working_hour).permit(:inbox_id, :open_hour, :open_minutes, :close_hour, :close_minutes, :closed_all_day)
  end

  def fetch_working_hour
    @working_hour = Current.account.working_hours.find(params[:id])
  end
end
ื”ืงื•ื“ ืœื ืขื•ื‘ื“ ืžื›ืžื” ืกื™ื‘ื•ืช: 1. ื”ืคื•ื ืงืฆื™ื” fetch_webhook ืœื ืงื™ื™ืžืช. ืื™ ืืคืฉืจ ืœื”ืคืขื™ืœ ืื•ืชื” ืœืคื ื™ update. 2. ื”ืคื•ื ืงืฆื™ื” check_authorization ืžื—ืคืฉืช ืงื•ื‘ืฅ ื‘ืฉื working_hours_policy.rb ืฉื’ื ืœื ืงื™ื™ื. ืื™ืŸ ืืฃ ื‘ื“ื™ืงื” ืขืœ ื”ืงื•ื“ ื•ืœื ืžืคืขื™ืœื™ื ืื•ืชื• ืžืฉื•ื ืžืงื•ื ืื‘ืœ ื”ื•ื ื›ืŸ ืžื—ื•ื‘ืจ ืœ API Endpoint ืœื›ืŸ ืื“ื (ืื• ืกื•ื›ืŸ ืงื™ื“ื•ื“) ืฉืžืกืชื›ืœ ืจืง ืขืœื™ื• ืขืœื•ืœ ืœืงื‘ืœ ืืช ื”ืจื•ืฉื ืฉื”ืคื•ื ืงืฆื™ื” ื•ื”ืงื•ื‘ืฅ ืงื™ื™ืžื™ื. ื•ืื ืื•ืชื• ืื“ื (ืื• ื™ื•ืชืจ ืกื‘ื™ืจ ืกื•ื›ืŸ ืงื™ื“ื•ื“) ื™ื’ื™ืข ืœื›ืชื•ื‘ ืขื›ืฉื™ื• ืคื™ืฆ'ืจ ื—ื“ืฉ ื”ื•ื ืขืœื•ืœ ืœื”ืฉืชืžืฉ ื‘ืื•ืชื ืจื›ื™ื‘ื™ื ืžื“ื•ืžื™ื™ื ื™ื. ื•ื›ืŸ ื–ืืช ื‘ืขื™ื” ืฉืœ ืกื•ื›ื ื™ ืงื™ื“ื•ื“ ื”ืจื‘ื” ื™ื•ืชืจ ืžืืฉืจ ืฉืœ ื‘ื ื™ ืื“ื, ื•ื–ื• ื”ื•ืคื›ืช ืœื”ื™ื•ืช ื‘ืขื™ื” ืฉืœ ื‘ื ื™ ืื“ื ื›ืฉืื•ืชื ื‘ื ื™ ืื“ื ืžืคืขื™ืœื™ื ืกื•ื›ื ื™ ืงื™ื“ื•ื“ ื‘ืœื™ ืœื”ื›ื™ืจ ืืช ื”ืงื•ื“ ื•ื‘ืœื™ ืœืขื‘ื•ืจ ืžืจืืฉ ืขืœ ืชื•ื›ื ื™ืช ื”ืขื‘ื•ื“ื”. ืขื›ืฉื™ื• ืืคืฉืจ ืœื˜ืขื•ืŸ ืฉื‘ื ื™ ืื“ื ื”ื ื”ื‘ืขื™ื” ืฉืœ ืกื•ื›ื ื™ ืงื™ื“ื•ื“ ื•ืื ืจืง ื ื™ืชืŸ ืœืกื•ื›ื ื™ ืงื™ื“ื•ื“ ืœืขื‘ื•ื“ ื‘ืฉืงื˜ ื”ืขื•ืœื ื™ื”ื™ื” ืžืงื•ื ื˜ื•ื‘ ื™ื•ืชืจ. ืืžืจื• ื“ื‘ืจ ื“ื•ืžื” ืขืœ ืžื›ื•ื ื™ื•ืช ืื•ื˜ื•ื ื•ืžื™ื•ืช ื•ื‘ื›ืœ ืžืงืจื” ื–ื” ืœื ื”ื•ืœืš ืœืงืจื•ืช ื•ืœื ื™ืงื“ื ืื•ืชื ื•. ื™ื•ืชืจ ื—ื›ื ืœืฉื™ื ืœื‘ ืฉื”ื™ื•ื ื”ืงื•ื“ ื”ื•ื ื”ืคืจื•ืžืคื˜. ืงื•ื“ ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื‘ื•ืจ ื’ื ืื ืืฃ ืื—ื“ ืœื ืžืคืขื™ืœ ืื•ืชื• ื•ื™ื›ื•ืœ ื‘ืงืœื•ืช ืœืงืœืงืœ ืืช ื”ืชื•ืฆืื•ืช ืฉืœ ืกื•ื›ืŸ ื”ืงื™ื“ื•ื“. ื‘ืขื•ืœื ืฉื‘ื• ื”ืงื•ื“ ื”ื•ื ื”ืคืจื•ืžืคื˜, ืงื•ื“ ื ืงื™ ื”ื•ื ื™ืขื“ ื—ืฉื•ื‘ ืžืชืžื™ื“.

ToCode
1 419
๐Ÿ“Œ ื˜ื™ืค ืคื™ื™ืชื•ืŸ: ืœื ืฆืจื™ืš ืœื›ืชื•ื‘ ืืช ื›ืœ ื”ืงื•ื“ ื‘ init ื›ืฉืื ื—ื ื• ื›ื•ืชื‘ื™ื ืžื•ื“ื•ืœ ื‘ืคื™ื™ืชื•ืŸ ืžืื•ื“ ื ื•ื— ืฉืžืฉืชืžืฉื™ื ื™ื›ื•ืœื™ื ืœื™ื™ื‘ื ืืช ื”ืžื•ื“ื•ืœ ื•ืœื”ืคืขื™ืœ ืคืงื•ื“ื•ืช ื™ืฉื™ืจื•ืช ืขืœ ืฉื ื”ื—ื‘ื™ืœื”, ื›ืœื•ืžืจ ื ื ื™ื— ืฉื™ืฉ ืœื™ ืžื•ื“ื•ืœ ื‘ืฉื mymodule ืื– ืžืฉืชืžืฉื™ื ืžืื•ื“ ืื•ื”ื‘ื™ื ืœื›ืชื•ื‘:
import mymodule

print(mymodule.add(10, 20))
ื“ืจืš ืื—ืช ืœื›ืชื•ื‘ ืืช mymodule ื›ื“ื™ ืฉื–ื” ื™ืขื‘ื•ื“ ื”ื™ื ืคืฉื•ื˜ ืœื›ืชื•ื‘ ืงื•ื‘ืฅ ื‘ืฉื mymodule.py ื•ื‘ืชื•ื›ื• ืœื”ื’ื“ื™ืจ ืืช ื”ืคื•ื ืงืฆื™ื” add. ืื‘ืœ ืื ืืชื ืจื•ืฆื™ื ืœื›ืชื•ื‘ ืคืจื•ื™ืงื˜ ื•ืœืฉืชืฃ ืขื ื—ื‘ืจื™ื ืกื™ื›ื•ื™ ื˜ื•ื‘ ืฉืชืจืฆื• ืœืฉื™ื ืืช ื”ืžื•ื“ื•ืœ ืฉืœื›ื ื‘ืชื•ืš ืชื™ืงื™ื™ื” ืžืกื•ื“ืจืช ืฉืฉืžื” ื™ื”ื™ื” ื›ืฉื ื”ืคืจื•ื™ืงื˜. ื•ืคื” ื”ืขืกืง ืžืชื—ื™ืœ ืœื”ืกืชื‘ืš, ื›ื™ ืื ืื ื™ ื™ื•ืฆืจ ืชื™ืงื™ื™ื” ื‘ืฉื mymodule ื•ื‘ืชื•ื›ื” ืงื•ื‘ืฅ ื‘ืฉื utils.py ืขื ื”ืคื•ื ืงืฆื™ื” ืฉืœื™ ืื– ื™ืฉ ืœื™ ืžื‘ื ื” ืชื™ืงื™ื•ืช:
mymodule/
    __init__.py
    utils.py
ื•ืขื›ืฉื™ื• ืžืฉืชืžืฉื™ื ืฉืœ ื”ืžื•ื“ื•ืœ ืฆืจื™ื›ื™ื ืœื˜ืขื•ืŸ ืืช ื”ืงื•ื‘ืฅ ื”ืคื ื™ืžื™ ืžืชื•ืš ื”ื—ื‘ื™ืœื” ื•ืœื›ืชื•ื‘:
import mymodule.utils

print(mymodule.utils.add(10, 20))
ื”ืขืฆืœื ื™ื ื™ื•ืชืจ ื™ืฉืชืžืฉื• ื‘ alias ื•ื™ื›ืชื‘ื• ื‘ื™ื‘ื•ื:
import mymodule.utils as mymodule

print(mymodule.add(10, 20))
ืื‘ืœ ื–ื” ืœื ื ืจืื” ื ื›ื•ืŸ ื•ืขื“ื™ื™ืŸ ืžืขืฆื‘ืŸ ืืช ื”ืžืฉืชืžืฉื™ื. ื›ื•ืชื‘ื™ื ืžื•ื“ื•ืœื™ื ื™ืฆื™ืจืชื™ื™ื ื™ื•ื“ืขื™ื ืœืฉื™ื ืืช ื”ืงื•ื“ ื‘ืงื•ื‘ืฅ ื” __init__.py ืฉืœ ื”ื—ื‘ื™ืœื”, ื•ื›ืš ืœื ืฆืจื™ื›ื™ื ืืคื™ืœื• ืœื”ืžืฆื™ื ืฉื ืœืงื•ื‘ืฅ ื”ืžืงื•ืจ ื”ืืžื™ืชื™ ื•ื”ื›ืœ ืžืกืชื“ืจ ืขื ื”ื™ื‘ื•ื, ื›ืœื•ืžืจ ื™ื”ื™ื” ืœื ื• ื‘ืฆื“ ืฉืœ ื”ื—ื‘ื™ืœื”:
mymodule/
  __init__.py
ื•ื‘ืชื•ืš ื”ืงื•ื‘ืฅ __init__.py ืชื•ืคื™ืข ื”ื’ื“ืจืช ื”ืคื•ื ืงืฆื™ื” add, ื•ืื– ืžืฉืชืžืฉื™ื ืฉืœ ื”ื—ื‘ื™ืœื” ื™ื•ื›ืœื• ืฉื•ื‘ ืœื›ืชื•ื‘:
import mymodule

print(mymodule.add(10, 20))
ืื‘ืœ ื›ื•ืชื‘ื™ื ื—ื‘ื™ืœื•ืช ื™ื•ืชืจ ื™ืฆื™ืจืชื™ื™ื ื“ื•ื•ืงื ืžืขื“ื™ืคื™ื ืœื”ืฉืชืžืฉ ื‘ืฉื ืงื•ื‘ืฅ ืžืกื•ื“ืจ ืขื‘ื•ืจ ื”ืงื•ื“ื ืฉืœื”ื. ื‘ืžืฆื‘ ื›ื–ื” ื ื›ืชื•ื‘ ืงื•ื‘ืฅ utils.py ืขื ื”ื’ื“ืจืช ื”ืคื•ื ืงืฆื™ื” add, ื•ืงื•ื‘ืฅ __init__.py ืฉื™ื›ื™ืœ ืจืง ืืช ืคืงื•ื“ืช ื”ื™ื‘ื•ื ื•ื”ื™ืฆื•ื ืžื—ื“ืฉ:
from .utils import add
ื•ืฉื•ื‘ ื”ื›ืœ ืขื•ื‘ื“ ืื‘ืœ ืขื›ืฉื™ื• ื’ื ืžืกื•ื“ืจ - ืžืฉืชืžืฉื™ื ื™ื›ื•ืœื™ื ืœื™ื™ื‘ื ืืช ื”ืžื•ื“ื•ืœ mymodule ื•ืœืงืจื•ื ืœืคื•ื ืงืฆื™ื” add ื™ืฉื™ืจื•ืช ื“ืจืš ื”ื™ื‘ื•ื, ืืคื™ืœื• ืฉื”ืคื•ื ืงืฆื™ื” ืžื•ื’ื“ืจืช ื‘ืงื•ื‘ืฅ ืคื ื™ืžื™ mymodule/utils.py ื‘ืชื•ืš ื”ื—ื‘ื™ืœื”.

ToCode
1 419
๐Ÿ“Œ ื›ืŸ ื”ืงื•ื“ ืฉืœื™ ืื ืชื•ื ื™ ืžืื ื ื™ื ื’ ื›ืชื‘ ืคื•ืกื˜ ืืจื•ืš ื•ืžืฉื›ื ืข ื ื’ื“ ืฉื™ืžื•ืฉ ื‘ AI ืœืงื™ื“ื•ื“. ืžืžืœื™ืฅ ืœืงืจื•ื ืื•ืชื• ื›ืืŸ: https://antman-does-software.com/i-will-never-use-ai-to-code-or-write ืื ืชื•ื ื™ ืžืฉื•ื•ื” ื‘ื™ืŸ ืงื™ื“ื•ื“ ืœื›ืชื™ื‘ืช ืกืคืจ. ื›ืžื• ืฉืœื ื”ื™ื™ืช ื ื•ืชืŸ ืœ AI ืœื›ืชื•ื‘ ืืช ื”ืจื•ืžืŸ ื”ื‘ื ืฉืœืš ื•ืžื‘ืงืฉ ืžืžื ื• "ืจืง ืฉืคืจ ืงืฆืช ืืช ื”ื“ืžื•ืช ื”ื–ืืช", ื›ื™ ื‘ื›ืชื™ื‘ื” ื›ืœ ืžื™ืœื” ื—ืฉื•ื‘ื”, ื›ืš ื’ื ื‘ืงื™ื“ื•ื“ ืื ืชืชืŸ ืœ AI ืœื›ืชื•ื‘ ื‘ืฉื‘ื™ืœืš ืืช ื”ืงื•ื“ ื–ื” ื›ื‘ืจ ืœื ื™ื”ื™ื” ื”ืงื•ื“ ืฉืœืš. ื›ืœ ืžื™ืœื” ื—ืฉื•ื‘ื”. ื–ื” ื˜ื™ืขื•ืŸ ืžืขื ื™ื™ืŸ ืื‘ืœ ืœื“ืขืชื™ ืฉื’ื•ื™, ืœื ืžืฉืงืฃ ืืช ื”ื—ื™ื™ื ื”ืืžื™ืชื™ื™ื ืฉืœ ืžืคืชื—ื™ื ื’ื ืœืคื ื™ AI ื•ืœื ืขื•ื–ืจ ืœื ื• ืœื›ืชื•ื‘ ืงื•ื“ ื˜ื•ื‘ ื™ื•ืชืจ. ื‘ื—ื™ื™ื ื”ืืžื™ืชื™ื™ื, ื’ื ืœืคื ื™ AI ืจื•ื‘ ื”ืงื•ื“ ืฉื›ืชื‘ื ื• ืœื ื”ื™ื” 100% ื™ืฆื™ืจื” ืฉืœื ื•. ืขื‘ื•ื“ื” ืขืœ ืžืขืจื›ื•ืช ืงื™ื™ืžื•ืช, ืขื‘ื•ื“ื” ื‘ืฆื•ื•ืช, ืฉื™ืžื•ืฉ ื‘ืกืคืจื™ื•ืช ืฉืœื ืชืžื™ื“ ืื ื—ื ื• ื‘ื—ืจื ื• ื•ืื™ืœื•ืฆื™ ืœื•"ื– ื”ื‘ื™ืื• ืœื›ืš ืฉืžืขืจื›ื•ืช ืชื•ื›ื ื” ืฉืœ ื”ืขื•ืœื ื”ืืžื™ืชื™ ื”ืŸ ืœื ื‘ื“ื™ื•ืง ื™ืฆื™ืจื•ืช ืื•ืžื ื•ืช. ื™ืฉ ื‘ื”ืŸ ื™ื•ืคื™ ืื ื™ ืœื ืžื›ื—ื™ืฉ, ืื‘ืœ ืชืžื™ื“ ื™ืฉ ืžื” ืœืฉืคืจ. ืœื ืงื•ืจื” ืฉืžืคืชื— ื—ื“ืฉ ืžื’ื™ืข ืœืคืจื•ื™ืงื˜ ื•ืื•ืžืจ "ื•ื•ืื• ืื™ื–ื” ืงื•ื“ ืžื“ื”ื™ื ื™ืฉ ืคื”". ืงื•ื“ ื”ื•ื ืœื ื™ืฆื™ืจืช ืžื•ืคืช ืฉืœ ืžืคืชื— ื‘ื•ื“ื“ ืืœื ืชื•ืฆืื” ืฉืœ ืื™ืœื•ืฆื™ื. ืžืคืชื—ื™ื ื˜ื•ื‘ื™ื ื™ื•ื“ืขื™ื ืื™ืš ืœื“ื—ื•ืฃ ืืช ืžืขืจื›ืช ื”ืื™ืœื•ืฆื™ื ื”ื–ืืช ืœื›ื™ื•ื•ืŸ ืงืฆืช ื™ื•ืชืจ ื‘ืจื™ื ื•ืœื”ืฉืคื™ืข ืขืœ ื”ืžืขืจื›ืช ืขืฆืžื” ื›ื“ื™ ืฉื”ืงื•ื“ ื™ื’ื“ืœ ื‘ืฆื•ืจื” ื˜ื‘ืขื™ืช ื‘ืฆื•ืจื” ื˜ื•ื‘ื” ื™ื•ืชืจ. ื›ืฉืื ื—ื ื• ืžื™ื™ืฉืžื™ื ืืช ืื•ืชื ืขืงืจื•ื ื•ืช ืขืœ ืคื™ืชื•ื— ื‘ืืžืฆืขื•ืช AI ืื ื—ื ื• ืžื’ืœื™ื ืฉืžืคืชื—ื™ื ื˜ื•ื‘ื™ื ืœื ื”ื•ืœื›ื™ื ืœืื™ื‘ื•ื“ ืืœื ืœื”ื™ืคืš, ืžื•ืฆืื™ื ื™ื•ืชืจ ื“ืจื›ื™ื ืœื”ื‘ื™ืข ืืช ืขืฆืžื: 1. ืžืคืชื—ื™ื ื˜ื•ื‘ื™ื ืžื’ื“ื™ืจื™ื ืชื‘ื ื™ื•ืช ื‘ืงื•ื“ ืื•ืชืŸ ื” AI ื™ืฉื›ืคืœ. 2. ืžืคืชื—ื™ื ื˜ื•ื‘ื™ื ืžื’ื“ื™ืจื™ื ืฉื™ื˜ื•ืช ืขื‘ื•ื“ื” - ืื™ืš ืขื•ืฉื™ื Deployment, ืžื” ื‘ื•ื“ืงื™ื, ืื™ืš ื‘ื•ื“ืงื™ื. ืกื•ื›ื ื™ ืงื™ื“ื•ื“ ื™ืฉืชืžืฉื• ื‘ืฉื™ื˜ื•ืช ืขื‘ื•ื“ื” ืืœื” ื‘ืืžืฆืขื•ืช MCP ื•ื™ื—ืกื›ื• ืขื‘ื•ื“ื” ืฉืœ ื‘ื ื™ ืื“ื. 3. ืžืคืชื—ื™ื ื˜ื•ื‘ื™ื ืžื’ื“ื™ืจื™ื ืื‘ืกื˜ืจืงืฆื™ื•ืช ื•ืจื›ื™ื‘ื™ ืงื•ื“ ื‘ืกื™ืกื™ื™ื, ื‘ื”ื ืกื•ื›ื ื™ ื”ืงื™ื“ื•ื“ ื™ืฉืชืžืฉื• ื›ื“ื™ ืœื‘ื ื•ืช ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื. ื”ืขื•ื‘ื“ื” ืฉืื ื™ ื™ื›ื•ืœ ืœื‘ืงืฉ ืžืกื•ื›ืŸ ืงื™ื“ื•ื“ ืœื‘ื ื•ืช ืœื™ ืคื™ืฆ'ืจ ื—ื“ืฉ ื‘ืžืขืจื›ืช, ื‘ื›ืœ ืคืจื•ื™ืงื˜ ืœื ื˜ืจื™ื•ื•ื™ืืœื™, ื”ื™ื ืœื ืชื•ืฆืื” ืฉืœ ื”ื—ื•ื›ืžื” ืฉืœ ืกื•ื›ืŸ ื”ืงื™ื“ื•ื“ ืืœื ืฉืœ ืžื‘ื ื” ื˜ื•ื‘ ืฉืœ ื”ืžืขืจื›ืช. ื•ืœืจืื™ื” ื‘ื”ืจื‘ื” ืคืจื•ื™ืงื˜ื™ื ืกื•ื›ื ื™ ื”ืงื™ื“ื•ื“ ืœื ืžืฆืœื™ื—ื™ื ืœื™ื™ืฆืจ ืชื•ืฆืื•ืช ื˜ื•ื‘ื•ืช ื•ืžืคืชื—ื™ื ืžื‘ื–ื‘ื–ื™ื ืฉืขื•ืช ื‘ืจื™ื‘ื™ื ืขื ื”ืกื•ื›ื ื™ื. ื›ืŸ ื”ืงื•ื“ ืฉืœื™, ื”ืžืขืจื›ืช ืฉืœื™, ื”ืžื‘ื ื” ืฉืœื™. ืื ื™ ืžื›ื™ืจ ื›ืœ ืฉื•ืจื” ื‘ื• ื•ืžื›ืชื™ื‘ ืืช ื”ื›ื™ื•ื•ืŸ, ืืคื™ืœื• ืฉืืช ืจื•ื‘ื• ืœื ื”ืงืœื“ืชื™ ื‘ืขืฆืžื™.

ToCode
1 419
๐Ÿ“Œ ื .ื‘. ืขืœื•ื™ื•ืช ืฉืœ AI ืœืคื ื™ ื‘ืขืจืš ืฉื ื” ื‘ื ื™ืชื™ ืคืจื•ื™ืงื˜ ืฉื™ื•ืฆืจ ืชืจื’ื•ืœ ืื•ืฆืจ ืžื™ืœื™ื ื‘ืฉืคื” ืžืกืจื˜ื™ื ืงืฆืจื™ื ื‘ื™ื•ื˜ื™ื•ื‘. ื—ื™ื‘ืจืชื™ ืื•ืชื• ืœื—ืฉื‘ื•ืŸ ื’ื•ื’ืœ ืฉืœื™ ื›ื™ ื’'ืžื™ื ื™ ืคืจื• ืฉืœ ืื•ืชื• ื–ืžืŸ ื”ื™ื” ื”ื“ื‘ืจ ื”ื™ื—ื™ื“ ืฉื”ืฆืœื™ื— ืœืชืžืœืœ ื‘ืฆื•ืจื” ื˜ื•ื‘ื” ืกืจื˜ื™ื ืžื™ื•ื˜ื™ื•ื‘ ื•ื‘ืืคืจื™ืœ 2025 ืงื™ื‘ืœืชื™ ืžื’ื•ื’ืœ ื—ืฉื‘ื•ืŸ ืฉืœ 350 ืฉ"ื— ืขืœ ืฉื™ืžื•ืฉ ื‘ืื•ืชื• ื’'ืžื™ื ื™ ืคืจื• ืจืง ืœืคืจื•ื™ืงื˜ ืคื ืื™ ื”ืงื˜ืŸ ื”ื–ื”. ื‘ื—ื•ื“ืฉื™ื ืฉืื—ืจื™ ื›ื‘ืจ ื ื–ื”ืจืชื™ ื™ื•ืชืจ ื‘ืฉื™ืžื•ืฉ ื‘ื’'ืžื™ื ื™ ืคืจื• ื•ื‘ืžืื™ ืฉื™ืœืžืชื™ ืœื”ื ืจืง 3 ืฉ"ื—, ื™ื•ื ื™ 25 ืฉ"ื—, ื™ื•ืœื™ 76 ืฉ"ื— ื•ืื•ื’ื•ืกื˜ 50. ื—ืœืง ืžื–ื” ืงืฉื•ืจ ืœืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื‘ืžืขืจื›ืช ืฉื”ื™ืชื” ืฆืจื™ื›ื” ืคื—ื•ืช AI ื›ื“ื™ ืœื™ืฆื•ืจ ืืช ื”ืฉื™ืขื•ืจื™ื, ื—ืœืง ืงืฉื•ืจ ืœื–ื” ืฉื”ืขื‘ืจืชื™ ื—ืœืงื™ื ืžื”ืงื•ื“ ืœืขื‘ื•ื“ ืขื ืžื•ื“ืœื™ื ื™ื•ืชืจ ื–ื•ืœื™ื ื•ื—ืœืง ืœื–ื” ืฉืคืฉื•ื˜ ื”ื™ื” ืœื™ ืคื—ื•ืช ื–ืžืŸ ืœืขื‘ื•ื“ ืขืœ ื”ืคืœื˜ืคื•ืจืžื”. ืกืš ื”ื›ืœ ืœืคื ื™ ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืฉื™ืœืžืชื™ ื‘ืขืจืš 20 ืฉ"ื— ืœืขื‘ื•ื“ื” ืขืœ ื•ื™ื“ืื• ืื—ื“ ื•ืื—ืจื™ ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื–ื” ื™ืจื“ ืœ 2-3 ืฉ"ื— ืœื•ื™ื“ืื•. ืžืื– ื’ื•ื’ืœ ื”ืฉื™ืงื• ืืช ื’'ืžื™ื ื™ ืคืœืืฉ ืœื™ื™ื˜ 3.1 ื•ืื•ืœืžื” ื”ืฉื™ืงื• ืืช ืชื•ื›ื ื™ืช Ollama Cloud. ืฉื™ืœื•ื‘ ืฉื ื™ ืืœื” ื”ื•ืจื™ื“ ืืช ื”ืขืœื•ืช ืฉืœ ื™ืฆื™ืจืช ื•ื™ื“ืื• ืœืคื—ื•ืช ืžืื’ื•ืจื”, ืœืœื ืฉื™ื ื•ื™ ื‘ืงื•ื“. ืฉื ื™ ื”ืชื”ืœื™ื›ื™ื ื”ื’ื“ื•ืœื™ื ืฉื›ื‘ืจ ื”ื—ืœื• ื•ื™ืœื•ื• ืื•ืชื ื• ื‘ืฉื ื™ื ื”ืงืจื•ื‘ื•ืช ื”ื ืฉื™ืคื•ืจ ื‘ืฆืจื™ื›ืช ื”ืžืฉืื‘ื™ื ืฉืœ ื”ืžื•ื“ืœื™ื (ืžื•ื“ืœื™ื ื™ื•ืชืจ ืงื˜ื ื™ื ืขื ืชื•ืฆืื•ืช ื˜ื•ื‘ื•ืช ื™ื•ืชืจ) ื•ืชื—ืจื•ืช ื‘ื™ืŸ ื™ื•ืชืจ ืกืคืงื™ื•ืช ืžื•ื“ืœื™ื. ืฉื™ืœื•ื‘ ืฉื ื™ ื”ื“ื‘ืจื™ื ืื•ืžืจ ืฉืขืœื•ืช ื”ืขื‘ื•ื“ื” ืขื LLM ื™ืจื“ื” ืคืœืื™ื ื•ืขื•ื“ ืชืžืฉื™ืš ืœืจื“ืช. ืกืคืงื™ ื” AI ืจื•ืื™ื ืืช ื–ื” ื•ืžื ืกื™ื ืœืคืฆื•ืช ื‘ืืžืฆืขื•ืช ื”ื•ืกืคืช ืฉื™ืจื•ืชื™ ืขืจืš ืžื•ืกืฃ ืœ API ื›ืžื• "ืฉื™ืžื•ืฉ ื‘ืžื—ืฉื‘", "ื—ื™ืคื•ืฉ ื‘ืจืฉืช" ื•ืื—ืกื•ืŸ ืงื‘ืฆื™ื. ืงืฉื” ืœื“ืขืช ื›ืžื” ื˜ื•ื‘ ื–ื” ื™ืฆืœื™ื— ืœื”ื. ื‘ื™ื ืชื™ื™ื ืžื” ืฉื‘ื˜ื•ื— ื”ื•ื ืฉื”ืขืœื•ืช ืฉืœ Inference ื™ื•ืจื“ืช ื•ืžื”ืจ. ื™ื™ืชื›ืŸ ื•ืœื ืจื—ื•ืง ื”ื™ื•ื ืฉื’ื ืขืœ ื™ื™ืฉื•ืžื™ AI ื ืชื—ื™ืœ ืœืฉืœื ื‘ืžื•ื“ืœ ืฉืœ ืžื ื•ื™ ื‘ืžืงื•ื ืขืœ ื‘ืกื™ืก ื˜ื•ืงื ื™ื.

ToCode
1 419
๐Ÿ“Œ ื’ื ื” GPL ื›ื ืจืื” ืœื ื™ืฉืจื•ื“ ืื ื™ ืžื‘ื™ืŸ ืื™ืš ืžืจื’ื™ืฉ ืžืืจืง ืคื™ืœื’ืจื™ื. ืžืืจืง ื›ืชื‘ ืืช Dive Into Python ื•ื’ื ื›ืชื‘ ืžื•ื“ื•ืœ ืคื™ื™ืชื•ืŸ ื‘ืฉื chardet ืฉืžื’ืœื” ืžื” ื”ืงื™ื“ื•ื“ ืฉืœ ืžื—ืจื•ื–ืช. ืžืืจืง ืจืฆื” ืœื”ืฉืื™ืจ ืžืชื ื” ืœืงื”ื™ืœื” ื•ื‘ื ื” ืืช ื”ืคืจื•ื™ืงื˜ ื‘ืจืฉื™ื•ืŸ LGPL ื›ื“ื™ ืœื•ื•ื“ื ืฉืื ืื—ืจื™ื ืœื•ืงื—ื™ื ืืช ื”ืงื•ื“ ื•ื‘ื•ื ื™ื ืขืœ ื‘ืกื™ืกื• ืกืคืจื™ื” ืื—ืจืช ื’ื ื”ืกืคืจื™ื” ืฉืœื”ื ืฆืจื™ื›ื” ืœื”ื™ื•ืช ื—ื•ืคืฉื™ืช. ื•ืื ื™ ื’ื ืžื‘ื™ืŸ ืื™ืš ืžืจื’ื™ืฉ ื“ืŸ ื‘ืœื ืฉืจื“. ืขื•ื“ ื‘ 2014 ื”ื•ื ืจืื” ืฉ chardet ื”ื•ื ื‘ืกืš ื”ื›ืœ ืžื™ืžื•ืฉ ืžื—ื“ืฉ ื‘ืคื™ื™ืชื•ืŸ ืฉืœ ืงื•ื“ ื™ืฉืŸ ืฉืœ ืžื•ื–ื™ืœื” ื•ืœื›ืŸ ืžืžื™ืœื ื”ื™ื” ืฆืจื™ืš ืœื”ื™ื•ืช ืจืฉื•ื ื‘ MPL. ื‘ืœื ืฉืจื“ ื”ื•ื ื”ืžืชื—ื–ืง ืฉืœ ื”ืคืจื•ื™ืงื˜ ืž 2014, ื›ืœื•ืžืจ ื‘ 12 ื”ืฉื ื™ื ื”ืื—ืจื•ื ื•ืช. ื‘ืœื ืฉืจื“ ื”ื•ื ื–ื” ืฉืงื™ื‘ืœ ืคื ื™ื•ืช ืžืžืฉืชืžืฉื™ื ืฉืจื•ืฆื™ื ืœื”ืฉืชืžืฉ ื‘ chardet ื•ืœื ื™ื›ื•ืœื™ื ื‘ื’ืœืœ ื”ืจื™ืฉื™ื•ืŸ ื›ื™ ืืฆืœื ื‘ื—ื‘ืจื” ืืกื•ืจ ืœื”ืฉืชืžืฉ ื‘ LGPL, ืื• ื›ื™ ื”ื ืžืฉืชืžืฉื™ื ื‘ pyinstaller, ื•ื–ื” ืžื™ื™ืฆืจ ืงื•ื‘ืฅ exe ื•ืœื›ืŸ ื›ืœ ื”ืžื•ื“ื•ืœื™ื ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ื—ื•ืคืฉื™ื™ื. ื‘ 2021 ื”ื™ื” ื–ื” ื‘ืœื ืฉืจื“ ืฉื ื™ืกื” ืœืงื“ื ืืช ืฉื™ื ื•ื™ ื”ืจื™ืฉื™ื•ืŸ ืฉื•ื‘ ื•ืจืื” ืื™ืš ืกืคืจื™ื™ืช requests ื”ืคื•ืคื•ืœืจื™ืช ื ืคืจื“ืช ื‘ chardet ื‘ื“ื™ื•ืง ื‘ื’ืœืœ ื ื•ืฉื ื–ื”. ืื– ืžื” ื”ืคืœื ืฉืขื ื›ืœ ื”ื“ื™ื‘ื•ืจื™ื ืขืœ ืงืœื•ื“ ืงื•ื“ ื’ื ื‘ืœื ืฉืจื“ ืœื ืขืžื“ ื‘ืคื™ืชื•ื™? ื”ื•ื ื‘ื ืœืงืœื•ื“ ืขื ืคืจื•ืžืคื˜ ืฉืื•ืžืจ "ืชื‘ื ื” ืœื™ ืกืคืจื™ื” ื—ื“ืฉื” ืฉืขื•ืฉื” ื‘ื“ื™ื•ืง ืžื” ืฉ chardet ืขื•ืฉื” ืื‘ืœ ื‘ืœื™ ืœืงื—ืช ื›ืœื•ื ืžื”ืงื•ื“ ื”ืžืงื•ืจื™". ืงืœื•ื“ ื™ืฆืจ ืžื™ืžื•ืฉ ืคื™ 43 ืžื”ื™ืจ ื™ื•ืชืจ ื•ืืžื™ืŸ ื‘ืื•ืชื” ืžื™ื“ื” ื‘ืœื™ ืฉื•ื ืงื•ื“ ืžืฉื•ืชืฃ. ื›ืš ื ื•ืœื“ื” ื’ืจืกื” 7 ืฉืœ chardet ื•ืื™ืชื” ืจื™ื‘ ืžืชื•ืงืฉืจ ืขื ื”ื™ื•ืฆืจ ื”ืžืงื•ืจื™: https://github.com/chardet/chardet/issues/327 ืื ื—ื ื• ืœื ื™ื•ื“ืขื™ื ืžื” ื™ื”ื™ื” ื”ืขืชื™ื“ ืฉืœ ืขื•ืœื ื”ืงื•ื“ ื”ืคืชื•ื—. ื”ื ื™ื—ื•ืฉ ืฉืœื™ ื”ื•ื ืฉื›ืœ ืฉื™ื˜ืช ื”ืจืฉื™ื•ื ื•ืช ื”ืžื’ื‘ื™ืœื™ื ื”ื•ืœื›ืช ืœื”ื™ืขืœื ืขืงื‘ ื—ื•ืกืจ ื™ื›ื•ืœืช ืื›ื™ืคื”.

ToCode
1 419
ื‘ PDD ืื ื™ ืคืฉื•ื˜ ื›ื•ืชื‘ "ืชื‘ื ื” ืœื™ ืžืฉื—ืง ืื™ืงืก ืขื™ื’ื•ืœ ืขื ื‘ื“ื™ืงื•ืช ื‘ืคื™ื™ืชื•ืŸ" ื•ืžืชืงืŸ ื‘ืœื•ืœืื” ืืช ื”ืคืจื•ืžืคื˜ ืขื“ ืฉื™ื•ืฆื ืžืฉื—ืง ืฉืื ื™ ืจื•ืฆื”. ืฆืจื™ืš ื‘ื“ื™ืงื” ืกืคืฆื™ืคื™ืช? ืื•ืกื™ืฃ ืื•ืชื” ืœืคืจื•ืžืคื˜. ืฆืจื™ืš ืžื—ืœืงื” ืกืคืฆื™ืคื™ืช? ื ื’ื“ื™ืจ ืื•ืชื” ื‘ืคืจื•ืžืคื˜. ื”ื”ื‘ื“ืœื™ื ื”ืžืจื›ื–ื™ื™ื ื‘ื™ืŸ ื”ื’ื™ืฉื•ืช: 1. ื‘ TDD ืื ื™ ืœื•ืงื— ืฉืœื™ื˜ื” ืขืœ ื”ืงื•ื“. ืื ื™ ื™ื•ื“ืข ืžื” ืื ื™ ื›ื•ืชื‘ ื•ืžื” ืฆืจื™ืš ืœื”ื™ื›ืชื‘. ืื ื™ ืงื•ื‘ืข ืืช ื”ืžื‘ื ื” ืฉืœ ื”ืงื•ื“ ื•ื™ื•ื“ืข ื‘ื“ื™ื•ืง ืื™ืš ื™ืจืื” ื”ืงื•ื“ ืฉื” AI ื™ื‘ื ื”. ื›ืžืขื˜ ืœื ื”ื•ืœืš ืœื™ ื–ืžืŸ ืขืœ ืœื—ื›ื•ืช ืœืกื•ื›ืŸ ื”ืงื™ื“ื•ื“ ืื• ืœืงืจื•ื ืืช ื”ืงื•ื“ ืฉืœื•. 2. ื‘ PDD ืื ื™ ืžื•ื•ืชืจ ืขืœ ื”ืฉืœื™ื˜ื” ื•ื‘ื•ื—ืจ ืžืชืคืจื™ื˜, ื‘ืกื’ื ื•ืŸ "ืชืจืื” ืœื™ ืžื” ืืคืฉืจ". ืคื” ื”ืจื‘ื” ื™ื•ืชืจ ื–ืžืŸ ื”ื•ืœืš ืขืœ ืœื”ืกืชื›ืœ ืขืœ ืกื•ื›ืŸ ื”ืงื™ื“ื•ื“ ืขื•ื‘ื“ ื•ืœืงืจื•ื ืืช ื”ืงื•ื“ ืฉืœื•. ืœืคืขืžื™ื ืืคืฉืจ ืœืœืžื•ื“ ืžื”ืงื•ื“ ืฉื”ื•ื ื™ืฆืจ ื•ืœื’ืœื•ืช ื“ื‘ืจื™ื ื—ื“ืฉื™ื. ืœืคืขืžื™ื ืœื. ื‘ื”ื™ื‘ื˜ ืฉืœ ื‘ื“ื™ืงื•ืช ื‘ื’ื™ืฉืช PDD ื™ื”ื™ื• ืœื™ ื”ืจื‘ื” ื™ื•ืชืจ ื‘ื“ื™ืงื•ืช ืื‘ืœ ืื™ื›ื•ืช ื—ื‘ื™ืœืช ื”ื‘ื“ื™ืงื•ืช ื”ื›ืœืœื™ืช ืชื”ื™ื” ืคื—ื•ืช ื˜ื•ื‘ื”. ื‘ื“ื•ื’ืžื” ืฉืœ ื”ืื™ืงืก ืขื™ื’ื•ืœ ื›ืฉื ืชืชื™ ืœ AI ืœื‘ื ื•ืช ืืช ื”ืงื•ื“ ื”ื•ื ื‘ืืžืช ื›ืชื‘ ืœื‘ื“ ืืช ื”ื‘ื“ื™ืงื•ืช ืœืœื•ื’ื™ืงื” ืื‘ืœ ืœื ืžื™ืžืฉ ื‘ื“ื™ืงื•ืช ืœื›ืชื™ื‘ื” ืœืžืกืš. ืื– ืขืฉื™ืชื™ ื ื™ืกื•ื™, ื ืชืชื™ ืœืกื•ื›ืŸ ื”ืงื™ื“ื•ื“ ืืช ื”ืคืจื•ืžืคื˜ ื”ื‘ื:
create a text based tic tac toe game in python with pytest. use uv
Use multiple modules for game logic and display
Implement pytest tests for both logic and display
ืžืื•ื“ ืจืฆื™ืชื™ ืฉื”ื•ื ื™ื›ืชื•ื‘ ื‘ื“ื™ืงื•ืช ืชืฆื•ื’ื” ืคืฉื•ื˜ื•ืช ื›ืžื• ืฉืื ื™ ื›ืชื‘ืชื™ ื‘ื“ื•ื’ืžื” ืฉื”ื“ื‘ืงืชื™, ืื‘ืœ ื–ื” ืœื ืžื” ืฉืงืจื”. ืžื•ื“ื•ืœ ื”ืชืฆื•ื’ื” ืฉืกื•ื›ืŸ ื”ืงื™ื“ื•ื“ ื™ืฆืจ ื›ื•ืœืœ ืคื•ื ืงืฆื™ื” ืฉืžืฆื™ื™ืจืช ืืช ื”ืœื•ื— ืœืžืขืจืš ืฉืœ ืฉื•ืจื•ืช ื•ืคื•ื ืงืฆื™ื” ืื—ืจืช ืฉืžื“ืคื™ืกื” ืืช ื”ืžืขืจืš. ื”ื‘ื“ื™ืงื” ื”ื™ื ืขื“ื™ื™ืŸ ื‘ื“ื™ืงืช data ืฉื‘ื•ื“ืงืช ืจืง ืืช ืžืขืจืš ื”ืฉื•ืจื•ืช ื›ืœื•ืžืจ:
def test_render_board_with_markers(self):
    board = Board()
    board.place_marker("A1", "X")
    board.place_marker("B2", "O")
    rendered = Display.render_board(board)
    assert "X" in rendered
    assert "O" in rendered
ื ืจืื” ืฉ glm ืขื‘ื“ ืžืื•ื“ ืงืฉื” ืจืง ื‘ืฉื‘ื™ืœ ืœื ืœื”ืฉืชืžืฉ ื‘ capsys ืฉืœ pytest ื•ื”ืคืš ืืช ืงื•ื“ ื”ืžืฉื—ืง ืœื™ื•ืชืจ ืžืกื•ืจื‘ืœ. ืื– ื‘ื—ื–ืจื” ืœืฉืืœื” ืฉื‘ื›ื•ืชืจืช, ื”ืื TDD ืขื“ื™ื™ืŸ ืจืœื•ื•ื ื˜ื™? ืœืคืขืžื™ื. ื‘ืขื–ืจืช TDD ืื ื™ ื™ื›ื•ืœ ืœื”ืขื‘ื™ืจ ืืช ื”ืžืกืจ ืœืกื•ื›ืŸ ื”ืงื™ื“ื•ื“ ื‘ืฆื•ืจื” ื”ืจื‘ื” ื™ื•ืชืจ ืžื“ื•ื™ืงืช ืžืืฉืจ ื‘ืขื–ืจืช ืคืจื•ืžืคื˜ ื•ืื ื™ ื—ื•ืกืš ืืช ื”ื•ื•ื™ื›ื•ื—ื™ื ืขื ื”ืกื•ื›ืŸ, ื‘ืžื™ื•ื—ื“ ื›ืฉืื ื™ ื™ื•ื“ืข ืื™ื–ื” ืงื•ื“ ืื ื™ ืžืฆืคื” ืœืจืื•ืช.

ToCode
1 419
๐Ÿ“Œ ื”ืื Test Driven Development ืขื“ื™ื™ืŸ ืจืœื•ื•ื ื˜ื™? ืคื™ืชื•ื— ืžื•ื ื—ื” ื‘ื“ื™ืงื•ืช ืื• TDD ื”ื•ื ื”ืจืขื™ื•ืŸ ืฉื›ื“ืื™ ืœื™ ืœื›ืชื•ื‘ ืงื•ื“ื ืืช ื”ื‘ื“ื™ืงื•ืช ื•ืื– ืœืจืื•ืช ืืช ื”ืงื•ื“, ื•ืื– ืื ื™ ืžืจื•ื•ื™ื— ื’ื ื‘ื“ื™ืงื•ืช ืฉืœ ื”ืงื•ื“ ื•ื’ื ืงื•ื“ ื˜ื•ื‘ ื™ื•ืชืจ ืฉื™ื•ืชืจ ืงืœ ืœื‘ื“ื•ืง ืื•ืชื•. ื ื™ืกื™ืชื™ ืืช ื–ื” ื”ื™ื•ื ืขื AI ื•ื–ื” ืขื‘ื“ ื™ื•ืคื™, ื›ืœื•ืžืจ ื›ืชื‘ืชื™ ื›ืžื” ื‘ื“ื™ืงื•ืช ืฉืžืฉืชืžืฉื•ืช ื‘ืคื•ื ืงืฆื™ื•ืช ื•ืžื—ืœืงื•ืช ืฉื”ืžืฆืืชื™, ื ืชืชื™ ืœ AI ืœื›ืชื•ื‘ ืืช ื”ืงื•ื“, ืœืคืขืžื™ื ื–ื” ื”ืฆืœื™ื— ืœื•, ืœืคืขืžื™ื ื”ื•ื ื”ืชืœื•ื ืŸ ืฉื”ื‘ื“ื™ืงื•ืช ืฉืœื™ ืœื ื”ื’ื™ื•ื ื™ื•ืช. ื›ืฉื”ื•ื ื”ืฆืœื™ื— ื”ื›ืœ ื”ื™ื” ื˜ื•ื‘ ื”ื›ื ืกืชื™ ืืช ื”ืงื•ื“ ืœื’ื™ื˜ ื•ื”ืชืงื“ืžืชื™. ื›ืฉื”ื•ื ื”ืชืœื•ื ืŸ ื ื™ืงื™ืชื™ ืืช ืžื” ืฉื”ื•ื ื›ืชื‘, ืชื™ืงื ืชื™ ืืช ื”ื‘ื“ื™ืงื•ืช ื•ืฉืœื—ืชื™ ืื•ืชื• ืœื™ื™ืฆืจ ืฉื•ื‘. ื‘ืกื•ืฃ ืงื™ื‘ืœืชื™ ืงื•ื“ ืขื•ื‘ื“ ืฉืขืฉื” ื‘ื“ื™ื•ืง ืืช ืžื” ืฉืจืฆื™ืชื™ ื•ื‘ืžื‘ื ื” ืžื—ืœืงื•ืช ืฉืื ื™ ื‘ื—ืจืชื™. ืœืคื ื™ ืฉื ืชื™ื™ื ื”ื™ื™ืชื™ ื—ื•ืชื ืขืœ ื–ื”. ื—ืœื•ื. ื”ื™ื•ื ืื ื™ ืœื ื›ืœ ื›ืš ื‘ื˜ื•ื—. ื”ืืœื˜ืจื ื˜ื™ื‘ื” ืฉืœ TDD ื‘ื” ื’ื ืื ื™ ืžืฉืชืžืฉ ื•ื’ื ืื ื™ ืจื•ืื” ื‘ืชืขืฉื™ื™ื” ื”ื™ื PDD, ื›ืœื•ืžืจ Prompt Driven Development. ื›ื•ืชื‘ื™ื ืคืจื•ืžืคื˜, ื ื•ืชื ื™ื ืœ AI ืœื™ื™ืฆืจ ืงื•ื“ ื•ื‘ื“ื™ืงื•ืช, ืงื•ืจืื™ื ืืช ื”ื‘ื“ื™ืงื•ืช ื•ื”ืงื•ื“, ืื ืื•ื”ื‘ื™ื ืฉื•ืžืจื™ื ื•ืื ืœื ืื•ื”ื‘ื™ื ืžื ืงื™ื ื•ืžืชืงื ื™ื ืืช ื”ืคืจื•ืžืคื˜. ืœื“ื•ื’ืžื” ืขื‘ื•ืจ ืžืฉื—ืง ืื™ืงืก ืขื™ื’ื•ืœ ื‘ TDD ืื ื™ ืžืชื—ื™ืœ ืขื ืงื•ื‘ืฅ ื‘ื“ื™ืงื•ืช ื›ื–ื”:
import pytest
import GameUI


def test_first_player_plays(game_logic):
    game_logic.play(0, 0)
    assert not game_logic.game_over()
    assert game_logic.winner() is None

def test_second_player_plays_in_taken_square(game_logic):
    game_logic.play(0, 0)

    with pytest.raises(Exception):
        game_logic.play(0, 0)

def test_player1_wins_first_row(game_logic):
    game_logic.play(0, 0)
    game_logic.play(1, 0)

    game_logic.play(0, 1)
    game_logic.play(1, 1)

    game_logic.play(0, 2)
    assert game_logic.game_over()
    assert game_logic.winner() == game_logic.players[0]

def test_player2_wins_diagonal(game_logic):
    game_logic.play(0, 1)
    game_logic.play(0, 0)

    game_logic.play(1, 0)
    game_logic.play(1, 1)

    game_logic.play(1, 2)
    game_logic.play(2, 2)
    assert game_logic.game_over()
    assert game_logic.winner() == game_logic.players[1]

def test_cant_play_after_win(game_logic):
    game_logic.play(0, 1)
    game_logic.play(0, 0)

    game_logic.play(1, 0)
    game_logic.play(1, 1)

    game_logic.play(1, 2)
    game_logic.play(2, 2)

    with pytest.raises(Exception):
        game_logic.play(2, 0)
        

def test_show_empty_board(game_logic, capsys):
    GameUI.print_current_game(game_logic)
    printed_text = capsys.readouterr().out
    assert printed_text == """Waiting for player X
. . .
. . .
. . .
"""

def test_show_board_after_play(game_logic, capsys):
    game_logic.play(0, 0)
    game_logic.play(1, 1)
    game_logic.play(2, 0)

    GameUI.print_current_game(game_logic)
    printed_text = capsys.readouterr().out
    assert printed_text == """Waiting for player O
X . .
. O .
X . .
"""

def test_show_draw(game_logic, capsys):
    game_logic.play(0, 0) # X
    game_logic.play(1, 1) # O

    game_logic.play(2, 0) # X
    game_logic.play(1, 0) # O

    game_logic.play(1, 2) # X
    game_logic.play(2, 1) # O

    game_logic.play(0, 1) # X
    game_logic.play(0, 2) # O

    game_logic.play(2, 2) # X

    GameUI.print_current_game(game_logic)
    printed_text = capsys.readouterr().out
    assert printed_text == """Game Over. It's a draw
X X O
O O X
X O X
"""

def test_show_player_1_won(game_logic, capsys):
    game_logic.play(0, 0)
    game_logic.play(1, 0)
    game_logic.play(0, 1)
    game_logic.play(1, 1)
    game_logic.play(0, 2)

    GameUI.print_current_game(game_logic)
    printed_text = capsys.readouterr().out
    assert printed_text == """Bravo! X Won
X X X
O O .
. . .
"""

def test_read_move_from_player(game_logic, monkeypatch, capsys):
    monkeypatch.setattr("builtins.input", lambda _: "0, 0")
    next_move = GameUI.read_next_move(game_logic)
    game_logic.play(*next_move)

    capsys.readouterr() # clear the buffer
    GameUI.print_current_game(game_logic)
    printed_after = capsys.readouterr().out
    assert printed_after == """Waiting for player O
X . .
. . .
. . .
"""
ื•ืื– ื‘ืคืจื•ืžืคื˜ ืžืื•ื“ ืคืฉื•ื˜ ืžืงื‘ืœ ืืช GameLogic ืฉื‘ื“ื™ื•ืง ืžืชืื™ื ืœืžืžืฉืง ืฉื”ื’ื“ืจืชื™.

ToCode
1 419
ืžื•ื“ืœื™ื ืคืชื•ื—ื™ื ืฉืžืกื•ื’ืœื™ื ืœื›ืชื•ื‘ ืงื•ื“ ื”ื ืขื ืงื™ื™ื ื•ืœืจื•ื‘ ืœื ืชืจืฆื• ืœื”ืจื™ืฅ ืื•ืชื ืขืœ ื”ืžื—ืฉื‘ ืืœื ื‘ืขื ืŸ ืฉืœ Ollama (ืื• ื‘ืฉืจืช ืขื ืŸ ืื—ืจ). ื”ืžื•ื“ืœื™ื ื”ืจืœื•ื•ื ื˜ื™ื™ื ื”ื™ื•ื ืœืคื™ืชื•ื— ืงื•ื“ ื”ื: 1. glm-5 2. minimax-2.5 3. kimi-k2.5 4. qwen3-coder-next ืื•ืœืžื” ืžื’ื™ืข ืขื ืื™ื ื˜ื’ืจืฆื™ื” ืžื•ื‘ื ื™ืช ืœืกื•ื›ื ื™ ืงื™ื“ื•ื“ ื•ืืคืฉืจ ืœืงืจื•ื ืขืœื™ื” ื›ืืŸ: https://docs.ollama.com/integrations ื‘ืฉื‘ื™ืœ ืœื”ืจื™ืฅ ืืช ืงืœื•ื“ ืงื•ื“ ืขื ืžื•ื“ืœ ืฉืœ ืื•ืœืžื” ื ืคืขื™ืœ:
ollama launch claude --model minimax-2.5:cloud
ืื• ื›ืœ ืžื•ื“ืœ ืื—ืจ ืฉืชืจืฆื•. ืื ื™ ืฉืžืชื™ ืœื‘ ืฉืžื™ื ื™ืžืงืก ืขื•ื‘ื“ ืžืžืฉ ื˜ื•ื‘ ืขื ืงืœื•ื“ ืงื•ื“. ืกื•ื›ืŸ ืงื™ื“ื•ื“ ืžืชื—ืจื” ืฉืœ ืงืœื•ื“ ืงื•ื“ ื ืงืจื OpenCode ื•ื’ื ืื•ืชื• ืืคืฉืจ ืœื”ืจื™ืฅ ืขื ืื•ืœืžื”, ืคื” ืฉืžืชื™ ืœื‘ ืฉ glm-5 ืขื•ื‘ื“ ื˜ื•ื‘ ื™ื•ืชืจ:
ollama launch opencode --model glm-5:cloud
ื .ื‘. ืื ื™ ืœื ื™ื•ื“ืข ืœืžื” ืงืœื•ื“ ืงื•ื“ ืขื•ื‘ื“ ื™ื•ืชืจ ื˜ื•ื‘ ืขื ืžื™ื ื™ืžืงืก ื•ืื•ืคืŸืงื•ื“ ืขื•ื‘ื“ ื™ื•ืชืจ ื˜ื•ื‘ ืขื glm. ืื ื™ ื›ืŸ ื™ื•ื“ืข ืฉื”ืžืคืชื—ื™ื ืฉืœ ืงืœื•ื“ ืงื•ื“ ืขื•ื‘ื“ื™ื ืžื•ืœ ืงืœื•ื“ ื•ื—ื•ืฉื“ ืฉืžื™ื ื™ืžืงืก ื™ื•ืชืจ ื“ื•ืžื” ืœืงืœื•ื“ ื‘ืชืฉื•ื‘ื•ืช ืฉืœื• ื•ื”ืžืคืชื—ื™ื ืฉืœ ืื•ืคืŸืงื•ื“ ืขื•ื‘ื“ื™ื ืขื glm ื•ืœื›ืŸ ื›ื ืจืื” ื”ืคืจื•ืžืคื˜ื™ื ื•ื”ื›ืœื™ื ืฉื”ื ื‘ื•ื ื™ื ื ื‘ื“ืงื• ื•ืขื‘ืจื• ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืœืžื•ื“ืœ ื–ื”. ืื ืืชื ืžืขื“ื™ืคื™ื ืœืขื‘ื•ื“ ื‘ืชื•ืš VS Code ื™ืฉ ืžืกืคืจ ืื™ื ื˜ื’ืจืฆื™ื•ืช ืœ Ollama ืฉืชื•ื›ืœื• ืœื”ืชืงื™ืŸ ื›ืžื• cline, kilocode ื• Roo Code ื›ื•ืœืŸ ื™ื•ื“ืขื•ืช ืœื”ืชื—ื‘ืจ ืœ Ollama. ืœ VS Code ืขืฆืžื• ื™ืฉ ืื™ื ื˜ื’ืจืฆื™ื” ืขื Ollama ืื‘ืœ ื‘ื™ื ืชื™ื™ื ื”ื™ื ืขื•ื‘ื“ืช ื‘ืžืฆื‘ ask ื‘ืœื‘ื“ ื•ืœื ื‘ืžืฆื‘ ืกื•ื›ืŸ ืื– ืคื—ื•ืช ืจืœื•ื•ื ื˜ื™ืช. โœ ื›ืœื™ื, ืืงื•ืกื™ืกื˜ื ื•ื”ืขืชื™ื“ ื›ืžื• ืฉื“ื‘ืจื™ื ื ืจืื™ื ืขื›ืฉื™ื• ื”ืืงื•ืกื™ืกื˜ื ืžืื•ื“ ืื™ื ื˜ืจืื•ืคืจื‘ื™ืœื™ ื›ืœื•ืžืจ ื™ืฉ ื”ืคืจื“ื” ื‘ื™ืŸ ื”ืžื•ื“ืœ ืœืกื•ื›ืŸ. ืœื›ืŸ ื›ืœื™ ื›ืžื• Ollama ื ื•ืชืŸ ืœื ื• ืืคืฉืจื•ืช ืœื—ื‘ืจ ืžื•ื“ืœ ืฉืœื ื• ืœื›ืœ ืกื•ื›ืŸ ืฉื ื‘ื—ืจ - ื‘ื™ืŸ ืื ื–ื” ืื•ื˜ื•ืžืฆื™ื” (n8n), ืฉื™ื—ื” (onyx) ืื• ื”ื›ื™ ืคื•ืคื•ืœืจื™ ืกื•ื›ืŸ ืงื™ื“ื•ื“. ืœืื—ืจื•ื ื” ืื ื˜ืจื•ืคื™ืง ื™ืฆืื” ื‘ืžืชืงืคื” ืžืฉืคื˜ื™ืช ืขืœ ื”ื—ื‘ืจื•ืช ื”ืกื™ื ื™ื•ืช ื‘ื˜ืขื ื” ืฉื”ืŸ ืžืืžื ื•ืช ืืช ื”ืžื•ื“ืœื™ื ืฉืœื”ืŸ ืžืชื•ืš ื”ืžื•ื“ืœื™ื ื”ืงื™ื™ืžื™ื ืฉืœ ืื ื˜ืจื•ืคื™ืง ื•ื›ืš ื—ื•ืกื›ื•ืช ืœืขืฆืžืŸ ืขืœื•ื™ื•ืช ื‘ืืžืฆืขื•ืช ืžืชืงืคื” ืฉื ืงืจืืช ื“ื™ืกื˜ื™ืœืฆื™ื”. ืื ื™ ืœื ืžื‘ื™ืŸ ืžืกืคื™ืง ื‘ืฉื‘ื™ืœ ืœื”ืจื—ื™ื‘ ืขืœ ื–ื” ืื‘ืœ ื™ื›ื•ืœ ืœืฉืขืจ ืฉืื ืืคืฉืจ "ืœื”ืขืชื™ืง" ืžื•ื“ืœื™ื ื™ื”ื™ื• ืžื™ ืฉื™ืฉืžื—ื• ืœืขืฉื•ืช ืืช ื–ื” ื•ืœื”ืคื™ืฅ ื›ืš ืžื•ื“ืœื™ื ืคืชื•ื—ื™ื. ืืคื™ืœื• ื‘ืœื™ ื“ื™ืกื˜ื™ืœืฆื™ื•ืช ื™ืฉ ื”ื™ื•ื ื”ืžื•ืŸ ืžื•ื“ืœื™ื ืคืชื•ื—ื™ื ื‘ืžืื’ืจื™ื ืฉืœ Ollama ื•ืฉืœ Hugging Face ื›ืš ืฉื ืจืื” ืฉื”ื ืœื ื”ื•ืœื›ื™ื ืœื”ื™ืขืœื. ืื™ืŸ ืกืคืง ืฉื”ืขื•ืœื ืฉืœ ื›ืœื™ ืคื™ืชื•ื— ื•ื›ืœื™ื ืžื‘ื•ืกืกื™ AI ืขื•ื‘ืจ ืจืขื™ื“ืช ืื“ืžื” ืžืฉืžืขื•ืชื™ืช ื‘ืชืงื•ืคื” ื–ื• ื•ืงืฉื” ืœื“ืขืช ืื™ืš ื“ื‘ืจื™ื ื™ืจืื• ืืคื™ืœื• ื‘ืขื•ื“ ื—ื•ื“ืฉ. ืื‘ืœ ื”ืื™ื ื˜ืจืื•ืคืจื‘ื™ืœื™ื•ืช ืคื•ืขืœืช ืžืื•ื“ ืœื˜ื•ื‘ืชื ื•. ืื™ืŸ ืฉื•ื ื‘ืขื™ื” ืœื”ืชืงื™ืŸ Ollama ื•ืœื ืกื•ืช ืœื“ื‘ืจ ืขื ืกื•ื›ืŸ ืฉื™ื—ื” ืคืชื•ื— ืฉืจืฅ ืืฆืœื›ื ืขืœ ื”ืžื—ืฉื‘ ืื• ืขื ืกื•ื›ืŸ ืงื™ื“ื•ื“ ื‘ืขื ืŸ ืฉืœ ืื•ืœืžื” ื›ื“ื™ ืœื”ืฉื•ื•ืช ืชื•ืฆืื•ืช.

ToCode
1 419
๐Ÿ“Œ ืกื™ื›ื•ื ื•ื•ื‘ื™ื ืจ ืžื•ื“ืœื™ื ืคืชื•ื—ื™ื ื‘ืžืคื’ืฉ ืžื“ื‘ืจื™ื AI ื”ืื—ืจื•ืŸ ื“ื™ื‘ืจื ื• ืขืœ ืžื•ื“ืœื™ื ื—ื™ื ืžื™ื™ื ื•ืžื•ื“ืœื™ื ืคืชื•ื—ื™ื. ื”ืฉื‘ื•ืข ืื™ืŸ ืžืคื’ืฉ (ื‘ืœื™ ืงืฉืจ ืœืžืœื—ืžื”, ื–ื” ื“ื™ืœื•ื’ ืฉืชื•ื›ื ืŸ ืžืจืืฉ ื•ื™ืฆื ืœื ื• ื˜ื•ื‘). ืฉื‘ื•ืข ื”ื‘ื ืžืชื•ื›ื ืŸ ืžืคื’ืฉ ื—ืฉื•ื‘ ืขืœ ื’ื™ืฉืช ืฉืœื•ืฉืช ื”ืฉื›ื‘ื•ืช ื•ืื™ืš ืœืงื‘ืœ ืงื•ื“ ื˜ื•ื‘ ืžืกื•ื›ืŸ ืงื™ื“ื•ื“ ืื ื™ ืืขื“ื›ืŸ ื›ืืŸ ื•ื‘ืžื™ื™ืœ ืœืงืจืืช ื—ืžื™ืฉื™ ื”ื‘ื ืื ื™ืชืงื™ื™ื ืœืคื™ ื”ืžืฆื‘. ืขื›ืฉื™ื• ื‘ื•ืื• ื ื–ื›ืจ ืžื” ื”ื™ื” ืœื ื• ื‘ืฉื‘ื•ืข ืฉืขื‘ืจ. โœ ืžื”ื ืžื•ื“ืœื™ื ืคืชื•ื—ื™ื ืฉืœื•ืฉ ื”ื—ื‘ืจื•ืช ื”ื’ื“ื•ืœื•ืช ืฉื‘ื•ื ื•ืช ื›ืœื™ AI ื”ืŸ ื’ื•ื’ืœ, ืื ื˜ืจื•ืคื™ืง ื• OpenAI ื•ืœื›ืœ ืื—ืช ืžื•ื“ืœ ืžื•ื‘ื™ืœ ืžืฉืœื”. ื—ื‘ืจื•ืช ืืœื” ื•ืื—ืจื•ืช ื‘ื•ื ื•ืช ื’ื ืืงื•ืกื™ืกื˜ื ืฉืœื ืกื‘ื™ื‘ ื”ืžื•ื“ืœื™ื - ืกื•ื›ื ื™ ืงื™ื“ื•ื“, APIs, ืคืจื•ื˜ื•ืงื•ืœื™ื ื•ืขื•ืœื ืฉืœื ืฉืœ ื›ืœื™ื. ืžื•ื“ืœ ื”ื•ื ื”ื—ืœืง ืฉืžืงื‘ืœ ื˜ืงืกื˜ ื•ืžื—ื–ื™ืจ ืืช ื”ืžืฉืš ื”ื˜ืงืกื˜. ืืคืฉืจ ืœื”ื’ื™ื“ ืฉื–ื” "ื”ืžื•ื—" ืฉืœ ื›ืœ ื›ืœื™ ื‘ื™ื ื” ืžืœืื›ื•ืชื™ืช. ื”ื›ืœื™ ืขืฆืžื• ืขื•ื˜ืฃ ืืช ื”ืžื•ื“ืœ ื•ืžืœื‘ื™ืฉ ืœื• ืคื•ื ืงืฆื™ื•ื ืืœื™ื•ืช ืื• ื—ื™ื‘ื•ืจ ืœืขื•ืœื, ืœื“ื•ื’ืžื” ืงืœื•ื“ ืงื•ื“ ื”ื•ื ืกื•ื›ืŸ ืงื™ื“ื•ื“ ืฉืขื•ื˜ืฃ ืžื•ื“ืœ ื•ืžื—ื‘ืจ ืื•ืชื• ืœืงื•ื“. ื’ื ืžืžืฉืง ื”ื•ื•ื‘ ืœืฉื™ื—ื” ืขื AI ื”ื•ื ืกื•ื›ืŸ, ื”ื•ื ืขื•ื˜ืฃ ืืช ื”ืžื•ื“ืœ ื‘ื™ื›ื•ืœื•ืช ืฉืžืืคืฉืจื•ืช ื—ื™ืคื•ืฉ ื‘ืจืฉืช ืื• ื”ืจืฆืช ืงื•ื“. ื”ืžื•ื“ืœ, ืื• ื”ืžื•ื— ืฉืœ ื”ื›ืœื™, ืžื‘ื™ื ืื™ืชื• ืกื•ื’ ืžืกื•ื™ื ืฉืœ ื”ื˜ื™ื•ืช, ืชืฉื•ื‘ื•ืช, ื’ื™ืฉื” ื•ื—ืฉื™ื‘ื”. ืžื•ื“ืœ GPT-5.2 ืœื ื™ื—ื–ื™ืจ ืืช ืื•ืชืŸ ืชืฉื•ื‘ื•ืช ื›ืžื• Gemini Flash. ื™ืฉ ื›ืืœื” ืฉื—ื•ืฉื‘ื™ื ืฉืฉืœื•ืฉ ื—ื‘ืจื•ืช ื–ื” ืžืกืคื™ืง ื•ืืคื™ืœื• ื™ื•ืชืจ ืžื“ื™ ืื‘ืœ ืœื“ืขืชื™ ืชื—ืจื•ืช ืคื” ื”ื™ื ื—ื™ื•ื‘ื™ืช ื•ืžื•ืกื™ืคื” ืขื ื™ื™ืŸ ืœืžืฉื—ืง. ืื‘ืœ ื–ื” ืœื ื›ืœ ื›ืš ืคืฉื•ื˜. ื›ืฉืื ื™ ืฉื•ืœื— ืฉืืœื” ืœืžื•ื“ืœ ืฉืจืฅ ื‘ืขื ืŸ ืื ื™ ืกื•ืžืš ืขืœ ืกืคืง ื”ืžื•ื“ืœ ืฉื™ืฉืžื•ืจ ืขืœ ื”ืฉืืœื” ืฉืœื™ ื•ื”ืชืฉื•ื‘ื” ืฉืœ ื”ืžื•ื“ืœ ื‘ืื•ืคืŸ ืžืื•ื‘ื˜ื—. ืื ื”ืฉืืœื” ื›ื•ืœืœืช ืžื™ื“ืข ืคืจื˜ื™ ืื• ืงื•ื“ ืฉืœ ื”ืžืขืจื›ืช ืื ื™ ืกื•ืžืš ืขืœ ืกืคืง ื”ืžื•ื“ืœ ืฉืœื ื™ืฉืชืžืฉ ื‘ืงื•ื“ ื”ื–ื” ืœื“ื‘ืจื™ื ืฉืœื ื”ืจืฉื™ืชื™. ืกื™ื›ื•ื™ ื˜ื•ื‘ ืฉืื ื—ื ื• ืœื ืžื•ื›ื ื™ื ืœืกืžื•ืš ื›ืš ืขืœ ื›ืœ ืื—ื“ ืฉื˜ื•ืขืŸ ืฉื™ืฉ ืœื• ืžื•ื“ืœ ื—ื“ืฉ. ืžื•ื“ืœื™ื ืคืชื•ื—ื™ื ืžืฆื™ืขื™ื ืœื ื• ื“ืจืš ืœืขื‘ื•ื“ ืขื ืžื•ื“ืœื™ื ื—ื“ืฉื™ื ื•ืœื‘ื ื•ืช ืžื—ื“ืฉ ืืžื•ืŸ. ืžื•ื“ืœ ืคืชื•ื— ื”ื•ื ืžื•ื“ืœ ืฉื›ืœ ืื—ื“ ื™ื›ื•ืœ ืœื”ืจื™ืฅ ื•ืœื›ืŸ ืื ื™ ื™ื›ื•ืœ ืœื”ืจื™ืฅ ืื•ืชื• ืขืœ ื”ืžื—ืฉื‘ ืฉืœื™ ืื• ืขืœ ืžื—ืฉื‘ ื‘ืกืคืง ืขื ืŸ ืขืœื™ื• ืื ื™ ืกื•ืžืš. ืงื™ื™ืžื™ื ืžื•ื“ืœื™ื ืคืชื•ื—ื™ื ืฉื™ืกืคืจื• ืœื›ื ืื™ืš ื”ื ืคื™ืชื—ื• ืืช ื”ืžื•ื“ืœ ื•ื ื•ืชื ื™ื ืœื›ื ืืช ื›ืœ ื”ื›ืœื™ื ืœื‘ื ื•ืช ืืช ื”ืžื•ื“ืœ ืœื‘ื“ ืืฆืœื›ื, ื•ื™ืฉ ืžื•ื“ืœื™ื ืคืชื•ื—ื™ื ืงืฆืช ืคื—ื•ืช ื™ื“ื™ื“ื•ืชื™ื™ื ืฉื ื•ืชื ื™ื ืœื›ื ืจืง ืืช ืžื˜ืจื™ืฆืช ื”ืžืฉืงืœื™ื ืฉืœ ื”ืžื•ื“ืœ, ื›ืœื•ืžืจ ื ื•ื›ืœ ืœื”ืจื™ืฅ ืืช ื”ืžื•ื“ืœ ืขืœ ื”ืžื—ืฉื‘ ืฉืœื ื• ืื‘ืœ ืœื ื ื•ื›ืœ ืœื‘ื ื•ืช ืžื˜ืจื™ืฆื” ื›ื–ืืช ืžืืคืก ื•ืœื ื ื“ืข ืžืื™ื–ื” ืžื™ื“ืข ื”ืžื•ื“ืœ ื ื•ืฆืจ. ืžื•ื“ืœื™ื ืคืชื•ื—ื™ื ืžื•ืกื™ืคื™ื ืœืชื—ืจื•ืช - ื—ืœืงื ืžื•ื›ื ื™ื ืœืขื ื•ืช ืขืœ ืฉืืœื•ืช ื‘ื ื•ืฉืื™ื ืฉืฉืœื•ืฉืช ื”ืžื•ื“ืœื™ื ื”ืจื’ื™ืœื™ื ืœื ืขื•ื ื™ื, ื—ืœืงื ื™ืฆื™ื’ื• ืชืฉื•ื‘ื•ืช ื—ื“ืฉื•ืช ื•ื™ืฆื™ืจืชื™ื•ืช ืœืฉืืœื•ืช ื•ื›ื•ืœื ื™ื”ื™ื• ื”ืจื‘ื” ื™ื•ืชืจ ื–ื•ืœื™ื ืžืฉืœื•ืฉืช ื”ืžื•ื“ืœื™ื ื”ื’ื“ื•ืœื™ื ื›ื™ ืืชื ื™ื›ื•ืœื™ื ืœื”ืจื™ืฅ ืื•ืชื ืขืœ ื—ื•ืžืจื” ืฉืœื›ื. ื‘ื ื•ืกืฃ ืœืžื•ื“ืœื™ื ื”ืคืชื•ื—ื™ื ื™ืฉ ื’ื ืžื•ื“ืœื™ื ื—ื™ื ืžื™ื™ื. ืืœื” ืžื•ื“ืœื™ื ืฉื—ื‘ืจื•ืช ืžืฆื™ืขื•ืช ืœืฆื•ืจืš ื‘ื“ื™ืงื” ื•ืงื™ื“ื•ื ืžื›ื™ืจื•ืช, ืœืจื•ื‘ ื”ื ื™ื•ืฆืขื• ืชื—ืช ืฉื ื‘ื“ื•ื™ ื•ื“ืจืš ืืชืจ OpenRouter ื‘ืžืงื•ื ื“ืจืš ืืชืจ ื”ื—ื‘ืจื” ืขืฆืžื”. ื”ืžื•ื“ืœ ื”ื—ื™ื ืžื™ ืžืืคืฉืจ ืœื›ื ื’ื™ืฉื” ื‘ืœื™ ืชืฉืœื•ื ื•ื‘ืชืžื•ืจื” ื”ื ืžืฉืชืžืฉื™ื ื‘ืฉื™ื—ื•ืช ื›ื“ื™ ืœืฉืคืจ ืืช ื”ืžื•ื“ืœ ืื• ืœืืกื•ืฃ ืžื™ื“ืข ืขืœ ืฉืืœื•ืช ืฉื ืฉืœื—ื•ืช. ืฉื™ืžื• ืœื‘ ืฉืžื•ื“ืœ ื—ื™ื ืžื™ ืื™ื ื• ืžื•ื“ืœ ืคืชื•ื—, ืœืคืขืžื™ื ื”ืชืฉื•ื‘ื•ืช ืฉืœื• ื™ื”ื™ื• ื˜ื•ื‘ื•ืช ื™ื•ืชืจ ื•ืชืžื™ื“ ื™ื”ื™ื” ืคื” ืื™ื–ืฉื”ื• ื•ื•ื™ืชื•ืจ ืขืœ ืคืจื˜ื™ื•ืช ื‘ืขื‘ื•ื“ื” ืื™ืชื. โœ ืื™ืš ืขื•ื‘ื“ื™ื ืขื ืžื•ื“ืœื™ื ืคืชื•ื—ื™ื ื”ื›ืœื™ ื”ืื”ื•ื‘ ืขืœื™ื™ ืœืขื‘ื•ื“ื” ืขื ืžื•ื“ืœื™ื ืคืชื•ื—ื™ื ื ืงืจื Ollama (ื™ืฉ ืขื•ื“. ืื•ืœืžื” ื”ื•ื ืคืฉื•ื˜ ื”ืื”ื•ื‘ ืขืœื™ื™). ืืคืฉืจ ืœื”ื•ืจื™ื“ ืื•ืชื• ืžื”ืืชืจ ืฉืœื”ื ื›ืืŸ: https://ollama.com/ ืื•ืœืžื” ืžืฆื™ืข ืฉื ื™ ืžืกืœื•ืœื™ื ืœืขื‘ื•ื“ื” ืขื ื”ืžื•ื“ืœื™ื ื”ืคืชื•ื—ื™ื: 1. ื ื™ืชืŸ ืœื”ื•ืจื™ื“ ื•ืœื”ืจื™ืฅ ื‘ืืžืฆืขื•ืชื• ืžื•ื“ืœื™ื ืขืœ ื”ืžื—ืฉื‘ ืฉืœื›ื. 2. ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื• ื›ื“ื™ ืœื”ืชื—ื‘ืจ ืœืžื•ื“ืœื™ื ืคืชื•ื—ื™ื ืฉืจืฆื™ื ืขืœ ืฉืจืช ื”ืขื ืŸ ืฉืœื”ื. ื‘ืžื—ื™ืจ ืกืžืœื™ ืฉืœ 20$ ืœื—ื•ื“ืฉ ืชืงื‘ืœื• ื’ื™ืฉื” ื›ืžืขื˜ ืœืœื ื”ื’ื‘ืœื” ืœืขื ืŸ ืฉืœ Ollama ื•ืชื•ื›ืœื• ืœืขื‘ื•ื“ ืขื ื›ืœ ื”ืžื•ื“ืœื™ื ื”ืคืชื•ื—ื™ื ืฉื. ื‘ืฉื‘ื™ืœ ืœื”ืจื™ืฅ ืžื•ื“ืœื™ื ืืฆืœื›ื ืขืœ ื”ืžื—ืฉื‘ ืœื ืฆืจื™ืš ืœืฉืœื ืฉืงืœ ืื‘ืœ ื“ืจื•ืฉื” ื—ื•ืžืจื” ื—ื–ืงื”. ืื™ื›ื•ืช ื”ืžื•ื“ืœ ื ืงื‘ืขืช ืœืคื™ ืกื•ื’ ื”ืžื•ื“ืœ ื•ืœืคื™ ืžืกืคืจ ื”ืคืจืžื˜ืจื™ื ื‘ืžื˜ืจื™ืฆืช ื”ืžืฉืงืœื™ื. ืื ื ืกืชื›ืœ ืœื“ื•ื’ืžื” ืขืœ deepseek ืื– ื ืจืื” ื‘ืืชืจ ืฉืœ ืื•ืœืžื” ืฉื™ืฉ ืœื• ืžืกืคืจ ื’ืจืกืื•ืช, ื”ืจืืฉื™ื•ืช ื”ืŸ 1, 2 ื•-3. ื‘ื›ืœ ื’ืจืกื” ื™ืฉ ื›ืžื” ืืคืฉืจื•ื™ื•ืช ืœืžื•ื“ืœ ื•ืœืคืจืžื˜ืจื™ื ืœื“ื•ื’ืžื” deepseek-coder ืฉื–ื• ื’ืจืกื” ืฉืœ ื”ืžื•ื“ืœ ืžืœืคื ื™ ืฉื ืชื™ื™ื ื”ืžื™ื•ืขื“ืช ืœืงื™ื“ื•ื“ ื ื™ืชื ืช ืœื”ื•ืจื“ื” ื‘ื’ืจืกืช 1.3 ืžื™ืœื™ืืจื“ ืคืจืžื˜ืจื™ื, 6.7 ืžื™ืœื™ืืจื“ ืคืจืžื˜ืจื™ื ืื• 33 ืžื™ืœื™ืืจื“ ืคืจืžื˜ืจื™ื. ืžืกืคืจ ื”ืคืจืžื˜ืจื™ื ืžืฉืคื™ืข ืขืœ ื”ื’ื•ื“ืœ ื•ื”ื’ืจืกื” ื”ื’ื“ื•ืœื” ื‘ื™ื•ืชืจ 33 ืžื™ืœื™ืืจื“ ืคืจืžื˜ืจื™ื ืชื•ืคืกืช 19 ื’ืณื™ื’ื”. ืžื•ื“ืœ gpt-oss ืฉื”ื•ื ืžื•ื“ืœ ืคืชื•ื— ืžื‘ื™ืช OpenAI ืžื’ื™ืข ื‘ื’ืจืกืช 20 ืžื™ืœื™ืืจื“ ืคืจืžื˜ืจื™ื ื• 120 ืžื™ืœื™ืืจื“ ื•ื’ืจืกืช ื” 120 ืžื™ืœื™ืืจื“ ื”ื™ื ื‘ื’ื•ื“ืœ 65 ื’'ื™ื’ื”. ื‘ืฉื‘ื™ืœ ืœืฉืื•ืœ ืฉืืœื•ืช ื‘ืฉื™ื—ื” ืชืกืคื™ืง ืœื ื• ื’ืจืกื” ืงื˜ื ื” ืฉืœ 6-7 ืžื™ืœื™ืืจื“ ืคืจืžื˜ืจื™ื. ื‘ืฉื‘ื™ืœ ืกื•ื›ืŸ ืงื™ื“ื•ื“ ืืคื™ืœื• ื” 120 ืžื™ืœื™ืืจื“ ืขืœื•ืœ ืœื”ื™ื•ืช ื‘ืกื™ืกื™ ืžื“ื™. ืื•ืœืžื” ืžืกืคืง ืืคืœื™ืงืฆื™ื” ื’ืจืคื™ืช ื“ืจื›ื” ืืคืฉืจ ืœื“ื‘ืจ ืขื ืžื•ื“ืœื™ื, ืœืฉืื•ืœ ืฉืืœื•ืช ื•ืœืจืื•ืช ืืช ื”ืชืฉื•ื‘ื•ืช ืฉืœื”ื ื‘ืืคืœื™ืงืฆื™ื”. ืฉื•ื•ื” ืœื”ืฉืชืžืฉ ื‘ื” ื›ืฉืžืชื™ื™ืขืฆื™ื ืขื ืžื•ื“ืœื™ื ืžืงื•ืžื™ื™ื ื•ื›ืš ืœืงื‘ืœ ืคืจื˜ื™ื•ืช ืžื™ืจื‘ื™ืช ื‘ืฉื™ื—ื” ืขื ื” AI. โœ ืื™ืš ืœื›ืชื•ื‘ ืงื•ื“ ืขื ืžื•ื“ืœ ืคืชื•ื—