<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های آرتین کریمیان</title>
        <link>https://virgool.io/feed/@artinkarimian</link>
        <description>روبیکا من : 
https://rubika.ir/artinkarimian3

سایت من : 
https://sites.google.com/view/artin-karimian</description>
        <language>fa</language>
        <pubDate>2026-06-15 23:02:59</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/4850460/avatar/cawQLt.jpg?height=120&amp;width=120</url>
            <title>آرتین کریمیان</title>
            <link>https://virgool.io/@artinkarimian</link>
        </image>

                    <item>
                <title>ساخت یک آنتی ویروس به نام Chitartin با پایتون</title>
                <link>https://virgool.io/Compile/%D8%B3%D8%A7%D8%AE%D8%AA-%DB%8C%DA%A9-%D8%A2%D9%86%D8%AA%DB%8C-%D9%88%DB%8C%D8%B1%D9%88%D8%B3-%D8%A8%D9%87-%D9%86%D8%A7%D9%85-chitartin-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-l9u2j7gzdvvm</link>
                <description>خب با استفاده از کد زیر کتابخانه لازم را نصب کنید :pip install psutilحالا کد زیر را بزنید در پایتون :import tkinter as tk
from tkinter import ttk, messagebox, filedialog
import threading
import time
import os
import json
import shutil
import ctypes
import sys
from datetime import datetime
from pathlib import Path

# نیاز به نصب: pip install psutil
try:
    import psutil
except ImportError:
    psutil = None

# -------------------- CONFIG &amp; CONSTANTS --------------------
APP_NAME = &quot;Chitartin Antivirus&quot;
DATA_DIR = Path.home() / &quot;GapAV_Pro_Data&quot;
QUARANTINE_DIR = DATA_DIR / &quot;Quarantine&quot;
HISTORY_FILE = DATA_DIR / &quot;threat_history.json&quot;
DOWNLOADS_DIR = Path.home() / &quot;Downloads&quot;

for d in [DATA_DIR, QUARANTINE_DIR]:
    d.mkdir(exist_ok=True)

# Professional Color Palette (Cybersecurity Theme)
COLOR_BG = &quot;#0a0f1a&quot;
COLOR_CARD = &quot;#161e2d&quot;
COLOR_ACCENT = &quot;#00d4ff&quot;  # Neon Blue
COLOR_DANGER = &quot;#ff4d4d&quot;  # Soft Red
COLOR_SUCCESS = &quot;#00ff88&quot; # Neon Green
COLOR_TEXT = &quot;#e2e8f0&quot;
COLOR_SECONDARY = &quot;#94a3b8&quot;

# -------------------- UTILS --------------------
def is_admin():
    try: return ctypes.windll.shell32.IsUserAnAdmin()
    except: return False

def run_as_admin():
    try:
        script = os.path.abspath(sys.argv[0])
        params = &#039; &#039;.join([f&#039;&quot;{arg}&quot;&#039; for arg in sys.argv[1:]])
        ctypes.windll.shell32.ShellExecuteW(None, &quot;runas&quot;, sys.executable, f&#039;&quot;{script}&quot; {params}&#039;, None, 1)
        return True
    except: return False

# -------------------- CORE ENGINE --------------------
class SecurityEngine:
    def __init__(self):
        self.history = self.load_history()

    def load_history(self):
        if HISTORY_FILE.exists():
            try:
                with open(HISTORY_FILE, &#039;r&#039;) as f:
                    return json.load(f)
            except:
                return []
        return []

    def save_history(self):
        with open(HISTORY_FILE, &#039;w&#039;) as f:
            json.dump(self.history, f, indent=4)

    def scan_file&#40;self, file_path&#41;:
        &quot;&quot;&quot;Advanced Heuristic Scanning&quot;&quot;&quot;
        try:
            p = Path(file_path)
            if not p.exists(): return False, &quot;&quot;
            
            name = p.name.lower()
            ext = p.suffix.lower()
            
            # Suspicious patterns
            bad_keywords = [&quot;crack&quot;, &quot;patch&quot;, &quot;keygen&quot;, &quot;hack&quot;, &quot;trojan&quot;, &quot;miner&quot;, &quot;stealer&quot;, &quot;malware&quot;]
            suspicious_exts = {&quot;.exe&quot;, &quot;.bat&quot;, &quot;.vbs&quot;, &quot;.scr&quot;, &quot;.cmd&quot;, &quot;.ps1&quot;, &quot;.js&quot;, &quot;.msi&quot;}

            if ext in suspicious_exts:
                if any(k in name for k in bad_keywords):
                    return True, &quot;Malware Signature Detected&quot;
                if p.stat().st_size &lt; 70000:
                    return True, &quot;Heuristic: Suspiciously Small Executable&quot;
            
            return False, &quot;&quot;
        except Exception as e:
            return False, str(e)

    def quarantine(self, file_path, reason):
        try:
            src = Path(file_path)
            ts = datetime.now().strftime(&quot;%Y-%m-%d %H:%M:%S&quot;)
            file_name = src.name
            dest_name = f&quot;{datetime.now().strftime(&#039;%Y%m%d_%H%M%S&#039;)}_{file_name}&quot;
            dest_path = QUARANTINE_DIR / dest_name
            
            shutil.move(str(src), str(dest_path))
            
            # Add to history
            entry = {
                &quot;timestamp&quot;: ts,
                &quot;file&quot;: file_name,
                &quot;reason&quot;: reason,
                &quot;location&quot;: str(dest_path)
            }
            self.history.append(entry)
            self.save_history()
            return True, str(dest_path)
        except Exception as e:
            return False, str(e)

# -------------------- GUI APPLICATION --------------------
class GapAVProApp:
    def __init__(self, root):
        self.root = root
        self.root.title(f&quot;{APP_NAME} - Enterprise Edition&quot;)
        self.root.geometry(&quot;1100x750&quot;)
        self.root.configure(bg=COLOR_BG)

        self.engine = SecurityEngine()
        self.stop_event = threading.Event()
        
        # States
        self.is_protected = False
        self.is_monitoring = False
        self.is_watching = False

        self.build_ui()
        self.log(&quot;System Booted. All modules standby.&quot;)

    def build_ui(self):
        # --- Header ---
        header = tk.Frame(self.root, bg=COLOR_CARD, height=70)
        header.pack(fill=&quot;x&quot;, side=&quot;top&quot;)
        
        tk.Label(header, text=f&quot;🛡️ {APP_NAME}&quot;, bg=COLOR_CARD, fg=COLOR_ACCENT, 
                 font=(&quot;Segoe UI&quot;, 20, &quot;bold&quot;)).pack(side=&quot;left&quot;, padx=25, pady=15)

        self.admin_badge = tk.Label(header, text=&quot;ADMIN MODE&quot; if is_admin() else &quot;USER MODE&quot;, 
                                    bg=COLOR_SUCCESS if is_admin() else COLOR_DANGER,
                                    fg=&quot;black&quot;, font=(&quot;Segoe UI&quot;, 9, &quot;bold&quot;), padx=10)
        self.admin_badge.pack(side=&quot;right&quot;, padx=25)

        # --- Dashboard Container ---
        container = tk.Frame(self.root, bg=COLOR_BG)
        container.pack(fill=&quot;both&quot;, expand=True, padx=20, pady=15)

        # Left Panel: Controls
        left_panel = tk.Frame(container, bg=COLOR_CARD, highlightthickness=1, highlightbackground=&quot;#2d3748&quot;)
        left_panel.place(relx=0, rely=0, relwidth=0.45, relheight=0.6)

        tk.Label(left_panel, text=&quot;SECURITY CONTROL&quot;, bg=COLOR_CARD, fg=COLOR_TEXT, 
                 font=(&quot;Segoe UI&quot;, 16, &quot;bold&quot;)).pack(pady=20)

        # Protection Toggle
        self.btn_protect = self.create_toggle_btn(left_panel, &quot;Real-Time Protection&quot;, self.toggle_protection)
        self.btn_monitor = self.create_toggle_btn(left_panel, &quot;System Intelligence&quot;, self.toggle_monitor)
        self.btn_watcher = self.create_toggle_btn(left_panel, &quot;File Watcher&quot;, self.toggle_watcher)

        # Manual Scan Button
        tk.Button(left_panel, text=&quot;🔍 Manual Deep Scan&quot;, bg=COLOR_ACCENT, fg=COLOR_BG,
                 font=(&quot;Segoe UI&quot;, 11, &quot;bold&quot;), width=25, height=2, command=self.manual_scan).pack(pady=10)

        # Settings &amp; Info
        tk.Button(left_panel, text=&quot;⚙️ System Settings&quot;, bg=&quot;#2d3748&quot;, fg=COLOR_TEXT,
                 font=(&quot;Segoe UI&quot;, 10), width=25, command=self.open_settings).pack(pady=5)

        # Right Panel: Intelligence &amp; Stats
        right_panel = tk.Frame(container, bg=COLOR_CARD, highlightthickness=1, highlightbackground=&quot;#2d3748&quot;)
        right_panel.place(relx=0.5, rely=0, relwidth=0.5, relheight=0.6)

        tk.Label(right_panel, text=&quot;LIVE INTELLIGENCE&quot;, bg=COLOR_CARD, fg=COLOR_TEXT, 
                 font=(&quot;Segoe UI&quot;, 16, &quot;bold&quot;)).pack(pady=15)

        self.cpu_stat = self.create_stat_row(right_panel, &quot;CPU Load&quot;, &quot;0%&quot;)
        self.ram_stat = self.create_stat_row(right_panel, &quot;RAM Usage&quot;, &quot;0%&quot;)
        self.proc_stat = self.create_stat_row(right_panel, &quot;Active Processes&quot;, &quot;0&quot;)
        self.health_stat = self.create_stat_row(right_panel, &quot;System Health&quot;, &quot;Optimal&quot;)

        # Bottom Panel: Logs &amp; History
        bottom_panel = tk.Frame(container, bg=COLOR_CARD)
        bottom_panel.place(relx=0, rely=0.62, relwidth=1, relheight=0.38)

        # Tabs for Logs and History
        tab_control = ttk.Notebook(bottom_panel)
        tab_control.pack(fill=&quot;both&quot;, expand=True, padx=10, pady=10)

        self.log_box = tk.Text(tab_control, bg=&quot;#0a0f1a&quot;, fg=COLOR_SECONDARY, font=(&quot;Consolas&quot;, 10), state=&quot;disabled&quot;)
        tab_control.add(self.log_box, text=&quot; Real-time Logs &quot;)

        self.history_box = tk.Text(tab_control, bg=&quot;#0a0f1a&quot;, fg=COLOR_SUCCESS, font=(&quot;Consolas&quot;, 10), state=&quot;disabled&quot;)
        tab_control.add(self.history_box, text=&quot; Threat History &quot;)

        self.refresh_history_ui()

    def create_toggle_btn(self, parent, text, command):
        frame = tk.Frame(parent, bg=COLOR_CARD)
        frame.pack(fill=&quot;x&quot;, padx=30, pady=5)
        
        lbl = tk.Label(frame, text=text, bg=COLOR_CARD, fg=COLOR_TEXT, font=(&quot;Segoe UI&quot;, 11))
        lbl.pack(side=&quot;left&quot;)
        
        btn = tk.Button(frame, text=&quot;OFF&quot;, bg=COLOR_DANGER, fg=&quot;white&quot;, width=6, 
                        font=(&quot;Segoe UI&quot;, 9, &quot;bold&quot;), command=command)
        btn.pack(side=&quot;right&quot;)
        return btn

    def create_stat_row(self, parent, label, value):
        row = tk.Frame(parent, bg=COLOR_CARD)
        row.pack(fill=&quot;x&quot;, padx=40, pady=10)
        tk.Label(row, text=label, bg=COLOR_CARD, fg=COLOR_SECONDARY, font=(&quot;Segoe UI&quot;, 11)).pack(side=&quot;left&quot;)
        val_lbl = tk.Label(row, text=value, bg=COLOR_CARD, fg=COLOR_ACCENT, font=(&quot;Segoe UI&quot;, 12, &quot;bold&quot;))
        val_lbl.pack(side=&quot;right&quot;)
        return val_lbl

    # -------------------- LOGIC --------------------
    def log(self, msg, level=&quot;INFO&quot;):
        ts = datetime.now().strftime(&quot;%H:%M:%S&quot;)
        color = COLOR_TEXT
        if level == &quot;CRITICAL&quot;: color = COLOR_DANGER
        elif level == &quot;SUCCESS&quot;: color = COLOR_SUCCESS
        
        self.log_box.config(state=&quot;normal&quot;)
        self.log_box.insert(&quot;end&quot;, f&quot;[{ts}] [{level}] {msg}\n&quot;)
        self.log_box.see(&quot;end&quot;)
        self.log_box.config(state=&quot;disabled&quot;)

    def refresh_history_ui(self):
        self.history_box.config(state=&quot;normal&quot;)
        self.history_box.delete(&quot;1.0&quot;, tk.END)
        for item in reversed(self.engine.history):
            self.history_box.insert(&quot;end&quot;, f&quot;{item[&#039;timestamp&#039;]} | {item[&#039;file&#039;]} | {item[&#039;reason&#039;]}\n&quot;)
        self.history_box.config(state=&quot;disabled&quot;)

    def toggle_protection(self):
        self.is_protected = not self.is_protected
        self.btn_protect.config(text=&quot;ON&quot; if self.is_protected else &quot;OFF&quot;, 
                                bg=COLOR_SUCCESS if self.is_protected else COLOR_DANGER)
        self.log(f&quot;Protection {&#039;enabled&#039; if self.is_protected else &#039;disabled&#039;}.&quot;, &quot;SUCCESS&quot;)

    def toggle_monitor(self):
        self.is_monitoring = not self.is_monitoring
        self.btn_monitor.config(text=&quot;ON&quot; if self.is_monitoring else &quot;OFF&quot;, 
                                bg=COLOR_SUCCESS if self.is_monitoring else COLOR_DANGER)
        if self.is_monitoring:
            threading.Thread(target=self.system_monitor_loop, daemon=True).start()
        self.log(f&quot;System Intelligence {&#039;enabled&#039; if self.is_monitoring else &#039;disabled&#039;}.&quot;, &quot;SUCCESS&quot;)

    def toggle_watcher(self):
        self.is_watching = not self.is_watching
        self.btn_watcher.config(text=&quot;ON&quot; if self.is_watching else &quot;OFF&quot;, 
                                bg=COLOR_SUCCESS if self.is_watching else COLOR_DANGER)
        self.log(f&quot;File Watcher {&#039;enabled&#039; if self.is_watching else &#039;disabled&#039;}.&quot;, &quot;SUCCESS&quot;)

    def manual_scan(self):
        file_path = filedialog.askopenfilename(title=&quot;Select File to Scan&quot;)
        if not file_path:
            return
        
        self.log(f&quot;Scanning file: {file_path}&quot;)
        detected, reason = self.engine.scan_file&#40;file_path&#41;
        if detected:
            ok, result = self.engine.quarantine(file_path, reason)
            if ok:
                self.log(f&quot;Threat quarantined: {result}&quot;, &quot;CRITICAL&quot;)
                messagebox.showwarning(&quot;Threat Detected&quot;, f&quot;File quarantined:\n{result}&quot;)
                self.refresh_history_ui()
            else:
                self.log(f&quot;Quarantine failed: {result}&quot;, &quot;CRITICAL&quot;)
        else:
            self.log(&quot;No threat detected.&quot;, &quot;SUCCESS&quot;)
            messagebox.showinfo(&quot;Scan Result&quot;, &quot;No threat detected.&quot;)

    def open_settings(self):
        win = tk.Toplevel(self.root)
        win.title(&quot;Settings&quot;)
        win.geometry(&quot;420x260&quot;)
        win.configure(bg=COLOR_BG)

        tk.Label(win, text=&quot;System Settings&quot;, bg=COLOR_BG, fg=COLOR_ACCENT,
                 font=(&quot;Segoe UI&quot;, 16, &quot;bold&quot;)).pack(pady=15)

        tk.Label(win, text=f&quot;Quarantine Folder:\n{QUARANTINE_DIR}&quot;, bg=COLOR_BG, fg=COLOR_TEXT,
                 wraplength=380, justify=&quot;left&quot;).pack(pady=10)

        tk.Button(win, text=&quot;Open Quarantine Folder&quot;, bg=COLOR_ACCENT, fg=COLOR_BG,
                 command=lambda: os.startfile(str(QUARANTINE_DIR))).pack(pady=5)

        tk.Button(win, text=&quot;Close&quot;, bg=&quot;#2d3748&quot;, fg=COLOR_TEXT,
                 command=win.destroy).pack(pady=10)

    def system_monitor_loop(self):
        while self.is_monitoring and not self.stop_event.is_set():
            try:
                if psutil:
                    cpu = psutil.cpu_percent(interval=1)
                    ram = psutil.virtual_memory().percent
                    proc = len(psutil.pids())
                    health = &quot;Optimal&quot; if cpu &lt; 60 and ram &lt; 70 else &quot;Warning&quot; if cpu &lt; 85 else &quot;Critical&quot;

                    self.root.after(0, lambda c=cpu, r=ram, p=proc, h=health: self.update_stats(c, r, p, h))
                time.sleep(1)
            except Exception as e:
                self.root.after(0, lambda: self.log(f&quot;Monitor error: {e}&quot;, &quot;CRITICAL&quot;))
                break

    def update_stats(self, cpu, ram, proc, health):
        self.cpu_stat.config(text=f&quot;{cpu}%&quot;)
        self.ram_stat.config(text=f&quot;{ram}%&quot;)
        self.proc_stat.config(text=str(proc))
        self.health_stat.config(text=health)

    def on_close(self):
        self.stop_event.set()
        self.root.destroy()

# -------------------- MAIN --------------------
if __name__ == &quot;__main__&quot;:
    root = tk.Tk()
    app = GapAVProApp(root)
    root.protocol(&quot;WM_DELETE_WINDOW&quot;, app.on_close)
    root.mainloop()
خب اینم از پروژه امروزکانال روبیکا من : کانال روبیکا من : https://rubika.ir/artinkarimian3اگر ایده یا پروژه ای دارید از طریق لینک زیر :https://formafzar.com/form/zso58پیام خود را وارد کنید راستی به تمام سوالات شما پاسخ داده میشود .رمز داخل سایت (جهت نیاز) : artinkarimian125701</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Fri, 05 Jun 2026 17:48:50 +0330</pubDate>
            </item>
                    <item>
                <title>ساخت یک موتور جست و جو با پایتون</title>
                <link>https://virgool.io/Compile/%D8%B3%D8%A7%D8%AE%D8%AA-%DB%8C%DA%A9-%D9%85%D9%88%D8%AA%D9%88%D8%B1-%D8%AC%D8%B3%D8%AA-%D9%88-%D8%AC%D9%88-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-udo7il0se6vq</link>
                <description>خب سلام برای امروز به وسایل زیر نیاز داریم .1- پایتون2- کتابخانه sys3- کتابخانه PyQt5.QtCore4- کتابخانه PyQt5.QtGui5- کتابخانه PyQt5.QtWidgets6- کتابخانه PyQt5.QtWebEngineWidgetsخب حالا پایتون را باز میکنیم و کد زیر را وارد میکنیم .import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *

# --- بخش نقاشی آیکون‌ها ---
def paint_custom_icon(kind, size=32):
    &quot;&quot;&quot;
    این تابع مثل یک نقاش عمل می‌کند. 
    به جای خواندن فایل، با دستورات ریاضی شکل‌ها را می‌کشد.
    &quot;&quot;&quot;
    pixmap = QPixmap(size, size)
    pixmap.fill(Qt.transparent) # پس‌زمینه شفاف

    painter = QPainter(pixmap)
    painter.setRenderHint(QPainter.Antialiasing) # برای اینکه لبه‌ها نرم و زیبا باشند

    # تنظیمات قلم (Pen) برای رسم خطوط
    pen = QPen(QColor(&quot;#333333&quot;)) 
    pen.setWidth(3)
    pen.setCapStyle(Qt.RoundCap)
    painter.setPen(pen)

    center = size // 2

    if kind == &quot;back&quot;:
        # رسم فلش رو به چپ با خطوط و گوشه‌ها
        painter.drawLine(center + 6, center, center - 8, center)
        painter.drawLine(center - 8, center, center - 2, center - 6)
        painter.drawLine(center - 8, center, center - 2, center + 6)

    elif kind == &quot;forward&quot;:
        # رسم فلش رو به راست
        painter.drawLine(center - 6, center, center + 8, center)
        painter.drawLine(center + 8, center, center + 2, center - 6)
        painter.drawLine(center + 8, center, center + 2, center + 6)

    elif kind == &quot;reload&quot;:
        # رسم یک فلش دایره‌ای (چرخشی)
        rect = QRectF(6, 6, size-12, size-12)
        painter.drawArc(rect, -30 * 16, 270 * 16)
        # نوک فلش
        painter.drawLine(center + 8, 8, center + 12, 12)
        painter.drawLine(center + 12, 12, center + 10, 18)

    elif kind == &quot;home&quot;:
        # رسم شکل خانه با چند خط ساده
        painter.drawLine(size//4, size - 8, size - size//4, size - 8) # کف خانه
        painter.drawLine(size//4, size - 8, size//4, size//2)       # دیوار چپ
        painter.drawLine(size - size//4, size - 8, size - size//4, size//2) # دیوار راست
        painter.drawLine(size//4, size//2, size//2, size//4)       # سقف چپ
        painter.drawLine(size//2, size//4, size - size//4, size//2) # سقف راست

    elif kind == &quot;add&quot;:
        # رسم علامت + با دو خط متقاطع
        painter.drawLine(center, size//4, center, size - size//4)
        painter.drawLine(size//4, center, size - size//4, center)

    painter.end()
    return QIcon(pixmap)

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        # 1. تغییر اسم برنامه و پنجره
        self.setWindowTitle(&quot;Artin Karimian&#039;s search engine&quot;)
        QApplication.setApplicationName(&#039;Artin Karimian\&#039;s search engine&#039;)

        # ایجاد تب‌ها
        self.tabs = QTabWidget()
        self.tabs.setTabsClosable(True)   # دکمه بستن تب
        self.tabs.setMovable(True)        # قابلیت جابه‌جایی تب‌ها
        self.tabs.tabCloseRequested.connect(self.close_tab)

        self.setCentralWidget(self.tabs)
        self.showMaximized()

        self.home_url = &quot;https://virgool.io/@artinkarimian&quot;
        # 2. تغییر اسم تب اولیه
        self.add_new_tab(self.home_url, &quot;Home Tab&quot;) 

        # نوار ابزار (Toolbar)
        navbar = QToolBar()
        self.addToolBar(navbar)

        # اضافه کردن دکمه‌ها با آیکون‌های نقاشی شده
        self.back_btn = QAction(paint_custom_icon(&quot;back&quot;), &#039;&#039;, self)
        self.back_btn.triggered.connect(self.go_back)
        navbar.addAction(self.back_btn)

        self.forward_btn = QAction(paint_custom_icon(&quot;forward&quot;), &#039;&#039;, self)
        self.forward_btn.triggered.connect(self.go_forward)
        navbar.addAction(self.forward_btn)

        self.reload_btn = QAction(paint_custom_icon(&quot;reload&quot;), &#039;&#039;, self)
        self.reload_btn.triggered.connect(self.reload_page)
        navbar.addAction(self.reload_btn)

        self.home_btn = QAction(paint_custom_icon(&quot;home&quot;), &#039;&#039;, self)
        self.home_btn.triggered.connect(self.navigate_home)
        navbar.addAction(self.home_btn)

        self.new_tab_btn = QAction(paint_custom_icon(&quot;add&quot;), &#039;&#039;, self)
        self.new_tab_btn.triggered.connect(self.add_new_tab)
        navbar.addAction(self.new_tab_btn)

        # نوار جستجو
        self.search_bar = QLineEdit()
        self.search_bar.returnPressed.connect(self.search)
        navbar.addWidget(self.search_bar)

    # --- متدهای عملکردی ---
    def add_new_tab(self, url=None, title=&quot;New Tab&quot;): # عنوان تب پیش‌فرض &quot;New Tab&quot; باقی می‌ماند
        browser = QWebEngineView()
        if url:
            browser.setUrl(QUrl(url))
        else:
            browser.setUrl(QUrl(&quot;https://www.google.com&quot;))
        
        tab_index = self.tabs.addTab(browser, title) # اینجا عنوان تب تعیین می‌شود
        self.tabs.setCurrentIndex(tab_index)
        browser.urlChanged.connect(self.update_url)

    def close_tab(self, index):
        # اجازه نده آخرین تب بسته شود
        if self.tabs.count() &gt; 1:
            widget = self.tabs.widget(index)
            self.tabs.removeTab(index)
            if widget:
                widget.deleteLater()

    def go_back(self):
        if self.tabs.currentWidget(): self.tabs.currentWidget().back()

    def go_forward(self):
        if self.tabs.currentWidget(): self.tabs.currentWidget().forward()

    def reload_page(self):
        if self.tabs.currentWidget(): self.tabs.currentWidget().reload()

    def navigate_home(self):
        if self.tabs.currentWidget(): self.tabs.currentWidget().setUrl(QUrl(self.home_url))

    def search(self):
        url_text = self.search_bar.text()
        current_tab = self.tabs.currentWidget()
        
        if not current_tab:
            return

        if &quot;http&quot; in url_text or &quot;https://&quot; in url_text or &quot;about:blank&quot; in url_text:
            # آدرس معتبر است، مستقیماً برو
            current_tab.setUrl(QUrl(url_text))
        else:
            # یک عبارت جستجو است، با گوگل جستجو کن
            search_url = f&quot;https://www.google.com/search?q={url_text}&quot;
            current_tab.setUrl(QUrl(search_url))
            self.search_bar.setText(search_url) # نوار جستجو را هم آپدیت کن

    def update_url(self, q):
        # این تابع فعلاً فقط نوار جستجو را آپدیت می‌کند.
        self.search_bar.setText(q.toString())


if __name__ == &quot;__main__&quot;:
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show() # پنجره را نمایش بده
    app.exec_()خب اینم از پروژه امروز ما .کانال روبیکا من : کانال روبیکا من : https://rubika.ir/artinkarimian3اگر ایده یا پروژه ای دارید از طریق لینک زیر :https://formafzar.com/form/zso58پیام خود را وارد کنید راستی به تمام سوالات شما پاسخ داده میشود .رمز داخل سایت (جهت نیاز) : artinkarimian125701</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Sat, 30 May 2026 23:40:29 +0330</pubDate>
            </item>
                    <item>
                <title>نصب کتابخانه آرتین کریمیان</title>
                <link>https://virgool.io/Compile/%D9%86%D8%B5%D8%A8-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-%D8%A2%D8%B1%D8%AA%DB%8C%D9%86-%DA%A9%D8%B1%DB%8C%D9%85%DB%8C%D8%A7%D9%86-t7grjcjrlfur</link>
                <description>خب برای امروز کتابخانه های (textwrap  و  os ) را لازم داریدخب یکجا برای نگهداری فایل کتابخانه بسازید یعنی یک پوشه به نام artin بسازید و یک پایتون بسازید و کد زیر را داخلش ذخیره با نام aacc و آن را اجرا کنید :import os
import textwrap

package_name = &quot;artinkarimian&quot;

init_code = r&#039;&#039;&#039;
&quot;&quot;&quot;
artinkarimian
A simple Python GUI + web utility library
&quot;&quot;&quot;

import re
import urllib.request
import webbrowser
import tkinter as tk
from tkinter import messagebox


__version__ = &quot;1.0.0&quot;


class Window:
    def __init__(self, title=&quot;artinkarimian Window&quot;, size=&quot;600x400&quot;, bg=&quot;white&quot;):
        self.root = tk.Tk()
        self.root.title(title)
        self.root.geometry(size)
        self.root.configure(bg=bg)

    def set_title(self, title):
        self.root.title(title)

    def set_size(self, size):
        self.root.geometry(size)

    def set_bg(self, color):
        self.root.configure(bg=color)

    def run(self):
        self.root.mainloop()

    def timer(self, ms, func):
        self.root.after(ms, func)


class Label:
    def __init__(self, window, text=&quot;&quot;, x=None, y=None, pack=True, **kwargs):
        self.widget = tk.Label(window.root, text=text, **kwargs)
        if x is not None and y is not None:
            self.widget.place(x=x, y=y)
        elif pack:
            self.widget.pack()

    def set_text(self, text):
        self.widget.config(text=text)


class Button:
    def __init__(self, window, text=&quot;Button&quot;, command=None, x=None, y=None, pack=True, **kwargs):
        self.widget = tk.Button(window.root, text=text, command=command, **kwargs)
        if x is not None and y is not None:
            self.widget.place(x=x, y=y)
        elif pack:
            self.widget.pack()

    def set_text(self, text):
        self.widget.config(text=text)


class Entry:
    def __init__(self, window, x=None, y=None, pack=True, **kwargs):
        self.widget = tk.Entry(window.root, **kwargs)
        if x is not None and y is not None:
            self.widget.place(x=x, y=y)
        elif pack:
            self.widget.pack()

    def get(self):
        return self.widget.get()

    def set(self, value):
        self.widget.delete(0, tk.END)
        self.widget.insert(0, value)


class TextBox:
    def __init__(self, window, width=40, height=10, x=None, y=None, pack=True, **kwargs):
        self.widget = tk.Text(window.root, width=width, height=height, **kwargs)
        if x is not None and y is not None:
            self.widget.place(x=x, y=y)
        elif pack:
            self.widget.pack()

    def get(self):
        return self.widget.get(&quot;1.0&quot;, tk.END).strip()

    def set(self, value):
        self.widget.delete(&quot;1.0&quot;, tk.END)
        self.widget.insert(&quot;1.0&quot;, value)


def show_info(title=&quot;Info&quot;, message=&quot;Hello&quot;):
    messagebox.showinfo(title, message)


def show_warning(title=&quot;Warning&quot;, message=&quot;Warning message&quot;):
    messagebox.showwarning(title, message)


def show_error(title=&quot;Error&quot;, message=&quot;Error message&quot;):
    messagebox.showerror(title, message)


def extract_links(text):
    &quot;&quot;&quot;
    Extract links from plain text or HTML.
    &quot;&quot;&quot;
    pattern = r&#039;https?://[^\s&quot;\&#039;&lt;&gt;]+&#039;
    return re.findall(pattern, text)


def extract_domains(text):
    &quot;&quot;&quot;
    Extract domain names from found links.
    &quot;&quot;&quot;
    links = extract_links(text)
    domains = []
    for link in links:
        match = re.findall(r&#039;https?://([^/]+)&#039;, link)
        if match:
            domains.append(match[0])
    return domains


def open_link(url):
    &quot;&quot;&quot;
    Open a URL in the default browser.
    &quot;&quot;&quot;
    webbrowser.open(url)


def fetch_html(url, timeout=10):
    &quot;&quot;&quot;
    Download HTML content from a URL.
    &quot;&quot;&quot;
    req = urllib.request.Request(
        url,
        headers={&quot;User-Agent&quot;: &quot;Mozilla/5.0&quot;}
    )
    with urllib.request.urlopen(req, timeout=timeout) as response:
        return response.read().decode(&quot;utf-8&quot;, errors=&quot;ignore&quot;)


def save_text(filename, content):
    &quot;&quot;&quot;
    Save text to a file.
    &quot;&quot;&quot;
    with open(filename, &quot;w&quot;, encoding=&quot;utf-8&quot;) as f:
        f.write(content)


def read_text(filename):
    &quot;&quot;&quot;
    Read text from a file.
    &quot;&quot;&quot;
    with open(filename, &quot;r&quot;, encoding=&quot;utf-8&quot;) as f:
        return f.read()


def make_app(title=&quot;My App&quot;, size=&quot;600x400&quot;, bg=&quot;white&quot;):
    &quot;&quot;&quot;
    Quick app creator.
    &quot;&quot;&quot;
    return Window(title=title, size=size, bg=bg)
&#039;&#039;&#039;

setup_code = r&#039;&#039;&#039;
from setuptools import setup, find_packages

setup(
    name=&quot;artinkarimian&quot;,
    version=&quot;1.0.0&quot;,
    description=&quot;Simple GUI and web utility library&quot;,
    author=&quot;artinkarimian&quot;,
    packages=find_packages(),
    install_requires=[],
)
&#039;&#039;&#039;

example_code = r&#039;&#039;&#039;
import artinkarimian as ak

app = ak.make_app(title=&quot;Demo App&quot;, size=&quot;700x500&quot;, bg=&quot;lightblue&quot;)

label = ak.Label(app, text=&quot;سلام! این کتابخانه artinkarimian است&quot;, font=(&quot;Arial&quot;, 14), bg=&quot;lightblue&quot;)

entry = ak.Entry(app, width=40)

def show_text():
    text = entry.get()
    label.set_text(&quot;شما نوشتید: &quot; + text)

btn = ak.Button(app, text=&quot;نمایش متن&quot;, command=show_text)

textbox = ak.TextBox(app, width=60, height=10)

def extract():
    text = textbox.get()
    links = ak.extract_links(text)
    ak.show_info(&quot;Links&quot;, &quot;\\n&quot;.join(links) if links else &quot;لینکی پیدا نشد!&quot;)

btn2 = ak.Button(app, text=&quot;استخراج لینک&quot;, command=extract)

app.run()
&#039;&#039;&#039;

readme_code = r&#039;&#039;&#039;
# artinkarimian

A simple Python GUI and web utility package.

## Features
- Window creation
- Button creation
- Label creation
- Entry input
- TextBox input
- Extract links from text/HTML
- Extract domains
- Open links in browser
- Fetch HTML from websites
- Save/read text files
- Message boxes
- Timer support
&#039;&#039;&#039;

os.makedirs(package_name, exist_ok=True)

with open(os.path.join(package_name, &quot;__init__.py&quot;), &quot;w&quot;, encoding=&quot;utf-8&quot;) as f:
    f.write(textwrap.dedent(init_code).strip())

with open(&quot;setup.py&quot;, &quot;w&quot;, encoding=&quot;utf-8&quot;) as f:
    f.write(textwrap.dedent(setup_code).strip())

with open(&quot;example.py&quot;, &quot;w&quot;, encoding=&quot;utf-8&quot;) as f:
    f.write(textwrap.dedent(example_code).strip())

with open(&quot;README.md&quot;, &quot;w&quot;, encoding=&quot;utf-8&quot;) as f:
    f.write(textwrap.dedent(readme_code).strip())

print(&quot;کتابخانه با موفقیت ساخته شد!&quot;)
print()
print(&quot;برای نصب، این دستورها را اجرا کن:&quot;)
print(&quot;pip install .&quot;)
print()
print(&quot;بعد استفاده کن:&quot;)
print(&quot;import artinkarimian&quot;)بعد از اجرا در همون پوشه سی ام دی را باز کنید .یعنی از دستور cd استفاده کنیدحالا دستور pip install . را بزنید .حتما اون نقظه را بزنیدحالا پس از این از این به بعد در پایتون بروید بزنید import artinkarimian براتون میارهقابلیت ها : شبیه tk پنجره بسازددکمه بسازدلینک را از متن/وب جدا کندLabel بسازدEntry/input بسازدTextBox بسازدHTML صفحه را بگیردلینک را در مرورگر باز کندفایل متنی ذخیره کندفایل متنی بخواندmessage box نشان دهدtimer داشته باشدکانال روبیکا من : کانال روبیکا من : https://rubika.ir/artinkarimian3اگر ایده یا پروژه ای دارید از طریق لینک زیر :https://formafzar.com/form/zso58پیام خود را وارد کنید راستی به تمام سوالات شما پاسخ داده میشود .رمز داخل سایت (جهت نیاز) : artinkarimian125701</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Fri, 29 May 2026 20:31:08 +0330</pubDate>
            </item>
                    <item>
                <title>پروژه دهم پایتون : ساخت یک ویرایشگر عکس</title>
                <link>https://virgool.io/Compile/%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D8%AF%D9%87%D9%85-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%B3%D8%A7%D8%AE%D8%AA-%DB%8C%DA%A9-%D9%88%DB%8C%D8%B1%D8%A7%DB%8C%D8%B4%DA%AF%D8%B1-%D8%B9%DA%A9%D8%B3-bdfqmnjavz8d</link>
                <description>خب سلام ، امروز میخوام با پایتون آموزش ساخت یک ویرایشگر عکس که حتما بدردتون میخورد بسازیم .وسایل مورد نیاز :1-پایتون2-کتابخانه tkinter3-کتابخانه PIL4-کتابخانه ttkbootstrap5-کتابخانه ttkbootstrap.constants6-کتابخانه osخب بعد از نصب کتابخانه های لازم کد زیر را در پایتون وارد میکنیم :import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image, ImageTk
import ttkbootstrap as tb
from ttkbootstrap.constants import *
import os

class LiveImageResizer:
    def __init__(self, root):
        self.root = root
        self.root.title(&quot;ويرايشگر عکس&quot;)
        self.root.geometry(&quot;850x650&quot;)

        self.image_path = None
        self.original_img = None
        self.preview_img = None

        # طراحی صفحه: دو ستون
        main_frame = tb.Frame(root, padding=10)
        main_frame.pack(fill=BOTH, expand=True)

        # پنل کنترل (سمت راست)
        control_panel = tb.Frame(main_frame, width=250)
        control_panel.pack(side=LEFT, fill=Y, padx=10)

        tb.Label(control_panel, text=&quot;تنظیمات حرفه‌ای&quot;, font=(&quot;Tahoma&quot;, 14, &quot;bold&quot;)).pack(pady=10)
        
        self.btn_select = tb.Button(control_panel, text=&quot;انتخاب تصویر&quot;, command=self.load_image, bootstyle=&quot;info&quot;)
        self.btn_select.pack(fill=X, pady=5)

        # ابعاد
        tb.Label(control_panel, text=&quot;عرض جدید:&quot;).pack(anchor=&quot;w&quot;, pady=(10, 0))
        self.w_entry = tb.Entry(control_panel)
        self.w_entry.pack(fill=X, pady=5)
        self.w_entry.bind(&quot;&lt;KeyRelease&gt;&quot;, self.update_preview)

        tb.Label(control_panel, text=&quot;ارتفاع جدید:&quot;).pack(anchor=&quot;w&quot;, pady=(10, 0))
        self.h_entry = tb.Entry(control_panel)
        self.h_entry.pack(fill=X, pady=5)
        self.h_entry.bind(&quot;&lt;KeyRelease&gt;&quot;, self.update_preview)

        # انتخاب پسوند
        tb.Label(control_panel, text=&quot;پسوند خروجی:&quot;).pack(anchor=&quot;w&quot;, pady=(10, 0))
        self.fmt_combo = tb.Combobox(control_panel, values=[&quot;.png&quot;, &quot;.jpg&quot;, &quot;.jpeg&quot;, &quot;.bmp&quot;, &quot;.webp&quot;], state=&quot;readonly&quot;)
        self.fmt_combo.current(0)
        self.fmt_combo.pack(fill=X, pady=5)
        self.fmt_combo.bind(&quot;&lt;&lt;ComboboxSelected&gt;&gt;&quot;, self.update_preview)

        self.btn_save = tb.Button(control_panel, text=&quot;ذخیره نهایی&quot;, command=self.save_image, bootstyle=&quot;success&quot;)
        self.btn_save.pack(side=BOTTOM, fill=X, pady=20)

        # پنل پیش‌نمایش
        self.preview_canvas = tb.Label(main_frame, text=&quot;پیش‌نمایش&quot;, borderwidth=2, relief=&quot;sunken&quot;, anchor=&quot;center&quot;)
        self.preview_canvas.pack(side=RIGHT, fill=BOTH, expand=True, padx=10)

    def load_image(self):
        self.image_path = filedialog.askopenfilename(filetypes=[(&quot;Image files&quot;, &quot;*.png *.jpg *.jpeg *.bmp *.webp&quot;)])
        if self.image_path:
            self.original_img = Image.open(self.image_path)
            self.w_entry.delete(0, END); self.w_entry.insert(0, str(self.original_img.width))
            self.h_entry.delete(0, END); self.h_entry.insert(0, str(self.original_img.height))
            self.update_preview()

    def update_preview(self, event=None):
        if not self.original_img: return
        try:
            w, h = int(self.w_entry.get()), int(self.h_entry.get())
            # پیش‌نمایش با ابعاد جدید
            img = self.original_img.resize((w, h), Image.Resampling.LANCZOS)
            
            # اگر فرمت JPG است و تصویر Transparent است، برای نمایش پیش‌نمایش پس‌زمینه سفید می‌گذاریم
            if self.fmt_combo.get() in [&quot;.jpg&quot;, &quot;.jpeg&quot;] and img.mode in (&quot;RGBA&quot;, &quot;LA&quot;):
                background = Image.new(&quot;RGB&quot;, img.size, (255, 255, 255))
                background.paste(img, mask=img.split()[3])
                img = background

            display_img = img.copy()
            display_img.thumbnail((450, 450)) 
            self.preview_img = ImageTk.PhotoImage(display_img)
            self.preview_canvas.config(image=self.preview_img, text=&quot;&quot;)
        except:
            pass

    def save_image(self):
        if not self.original_img: return
        try:
            w, h = int(self.w_entry.get()), int(self.h_entry.get())
            ext = self.fmt_combo.get()
            final_img = self.original_img.resize((w, h), Image.Resampling.LANCZOS)
            
            save_path = filedialog.asksaveasfilename(defaultextension=ext, filetypes=[(&quot;Image&quot;, f&quot;*{ext}&quot;)])
            if save_path:
                # مدیریت تبدیل مود تصویر برای فرمت‌های خاص
                if ext in [&quot;.jpg&quot;, &quot;.jpeg&quot;] and final_img.mode in (&quot;RGBA&quot;, &quot;P&quot;):
                    final_img = final_img.convert(&quot;RGB&quot;)
                
                final_img.save(save_path)
                messagebox.showinfo(&quot;موفقیت&quot;, f&quot;تصویر با فرمت {ext} ذخیره شد!&quot;)
        except Exception as e:
            messagebox.showerror(&quot;خطا&quot;, f&quot;عملیات ناموفق بود: {e}&quot;)

if __name__ == &quot;__main__&quot;:
    root = tb.Window(themename=&quot;superhero&quot;)
    app = LiveImageResizer(root)
    root.mainloop()خب این هم از پروژه امروز ما کانال روبیکا من : کانال روبیکا من : https://rubika.ir/artinkarimian3اگر ایده یا پروژه ای دارید از طریق لینک زیر :https://formafzar.com/form/zso58پیام خود را وارد کنید راستی به تمام سوالات شما پاسخ داده میشود .رمز داخل سایت (جهت نیاز) : artinkarimian125701</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Fri, 22 May 2026 15:21:32 +0330</pubDate>
            </item>
                    <item>
                <title>چگونه فلش مموری را فرمت کنیم</title>
                <link>https://virgool.io/@artinkarimian/%DA%86%DA%AF%D9%88%D9%86%D9%87-%D9%81%D9%84%D8%B4-%D9%85%D9%85%D9%88%D8%B1%DB%8C-%D8%B1%D8%A7-%D9%81%D8%B1%D9%85%D8%AA-%DA%A9%D9%86%DB%8C%D9%85-nbwqcxzr02fw</link>
                <description>فلش مموریها ابزارهای ذخیرهسازی کوچکی هستند که به دلیل اندازهی جمعوجور و قابلیت حمل بالا، یکی از پرکاربردترین وسایل انتقال اطلاعات محسوب میشوند. با این حال، استفاده مکرر از این دستگاهها ممکن است منجر به مشکلاتی مانند کاهش سرعت، خطاهای سیستمی یا عدم شناسایی فایلها شود. در چنین شرایطی، فرمت کردن فلش مموری راهحلی کارآمد برای بازگرداندن کارایی آن است. همچنین، گاهی اوقات نیاز به تغییر سیستم فایل (مانند FAT32، NTFS یاexFAT ) برای استفاده بهتر در دستگاههای مختلف وجود دارد.فرمت کردن فلش مموری یک فرآیند ساده است که به شما امکان میدهد اطلاعات آن را حذف کنید و سیستم فایل جدیدی برای استفاده انتخاب کنید. این کار برای رفع مشکلاتی مانند خطاهای فایل یا آماده کردن فلش مموری برای استفاده در دستگاههای خاص ضروری است در این مقاله مراحل فرمت کردن فلش مموری را به تفصیل توضیح میدهیم.فرمت کردن فلش مموری  File Explorerیکی از ساده ترین روش ها برای فرمت کردن فلش مموری استفاده از file explorer  ویندور می باشد، در این روش ابتدا باید فلش مموری خود را به سیستم متصل کرده و سپس از طریق My computer ویندوز به بخش فلش مموری رفته و با راست کلیک کرده بر روی فلش خود گزینه format را انتخاب کرده و در ادامه باید تنطیمات مربوط به این بخش را طبق آموزش گفته شده انجام دهیدفرمت کردن فلش مموری  File Explorerدر ادامه باید در بخش file system نوع فرمت فلش مموری خود را باید انتخاب کنید، در کل  چهار نوع فرمت برای فلش مموری وجود دارد که در ادامه به معرفی آنها می پردازیمFat32: این نوع فرمت برای فایل های تا اندازه 4 گیگ و برای دستگاه های تلویزیون، دوربینهای دیجیتال و گیرندههای صوتی مناسب است و توسط سیستم عامل های ویندوز و مک پشتیبانی می شود و برای انتقال دادههای عمومی بین دستگاهها مورد استفاده قرار می گیرد.NTFS: یک سیستم فایل مدرن و قدرتمند است که برای ذخیره و مدیریت دادهها در دیسکهای سخت، SSDها، و حافظههای خارجی طراحی شده است. این سیستم فایل قابلیتهای پیشرفتهای همچون امنیت دادهها، مدیریت بهتر فضای دیسک، و پشتیبانی از فایلهای حجیم را ارائه میدهد.Exfat: یک سیستم فایل بهینه شده برای دستگاههای ذخیره سازی قابلحمل مانند فلش مموریها و کارتهای حافظه است. این سیستم فایل محدودیتهای FAT32 را برطرف کرده و در عین حال سبکتر از NTFS است. امکان ذخیره فایلهای حجیم را بدون محدودیت اندازه فراهم میکند و با سیستم عامل های ویندوز، مک و لینوکس سازگار می باشد.پس از انتخاب نوع فرمت فلش مموری خود با انتخاب گزینه start فرآیند فرمت آغاز می شود و فلش مموری شما تمامی اطلاعات خود را از دست می دهد و پس تکمیل فرآیند فرمت، فلش شما آماده ذخیره عکس، فیلم و تمامی اطلاعات می باشد.فرمت فلش مموری Disk Managementاز دیگر روش های فرمت کردن فلش مموری از طریق سیستم، روش از ابزار Disk Management می باشد. برای دسترسی به این ابزار باید از کلید های ترکیبی windows+R که مربوط به پنجره Run  ویندوز را اجرا کنیم و در پنجره باز شده باید عبارت diskmgmt.msc را تایپ و سپس گزینه enter را بزنید، برای اجرای راحت تر این ابزار برای فرمت کردن فلش مموری باید از سرچ ویندوز خود عبارت Disk Management تایپ و سپس برنامه مورد نظر اجرا کنید.در پنجره Disk Management، لیستی از تمام درایوهای متصل به سیستم نمایش داده میشود. فلش مموری خود را در لیست پیدا کنید. معمولاً به عنوان Removable یا با حجم و نامی مشابه نمایش داده میشود. اطمینان حاصل کنید که درایو انتخابی همان فلش مموری شما است تا از فرمت اشتباهی سایر درایوها جلوگیری شود.روی نام فلش مموری یا پارتیشن آن راستکلیک کنید و سپس گزینه Format را انتخاب کنید، در پنجرهای که باز میشودVolume Label یک نام برای فلش مموری خود وارد کنید. File System سیستم فایل موردنظر را انتخاب کنید (Fat32، NTFSو Exfat)، در بخش Allocation Unit Size بهتر است این گزینه را روی Default  تنظیم کنید. اگر میخواهید دادهها سریع پاک شوند، گزینه Perform a Quick Format  را فعال کنید. روی دکمه OK  کلیک کنید تا فرآیند فرمت آغاز شود.فرمت فلش مموری PowerShellبا سرچ کردن PowerShell در پنجره سرچ ویندوز و اجرا کردن برنامه ، فلش خود را میتوانید فرمت کنید، پس از باز کردن برنامه عبارت Get-Disk  را وارد کنید تا لیست دستگاه های متصل به سیستم نمایش داده می شود، در لیست ظاهرشده، فلش مموری خود را شناسایی کنید. این شناسایی معمولاً با توجه به ظرفیت (Size) و نوع دستگاه (Removable) انجام میشود.Disk Number  را یادداشت کنید. بهعنوانمثال، اگر فلش شما دیسک 2 است، عدد 2 را یادداشت کنید.برای پاک کردن تمام اطلاعات فلش مموری و آمادهسازی آن برای فرمت، دستور زیر را اجرا کنید(عدد 2 را با شماره دیسک فلش خود جایگزین کنید.)Clear-Disk -Number 2 -RemoveData -Confirm:$falseبرای فرمت کردن فلش مموری به سیستم فایل دلخواه باید از کدهای دستوری زیر استفاده کنید.( F را با حرف درایو فلش مموری خود جایگزین کنید (مثلاً E  یا D)Format-Volume -DriveLetter F -FileSystem NTFS -NewFileSystemLabel workUSBفرمت کردن فلش مموری با CMD &#40;Command Prompt&#41;Command Prompt  (CMD) یکی از ابزارهای قدرتمند و کاربردی ویندوز برای انجام عملیات مختلف از جمله فرمت کردن فلش مموری است. در ادامه، مراحل فرمت فلش مموری با استفاده از CMD به همراه دستورات دقیق آورده شده است.باز کردن CMD  با سرچ کردن عبارت cmd در سرچ ویندوز خود و اجرا کردن آن از طریق Administrator ، در ابتدا باید درایور فلش خود را شناسایی کنید، با اجرا کد زیر می توانید درایور فلش مموری خود را پیدا کنید.Diskpartاین دستور ابزار مدیریت دیسک را باز میکند، سپس دستور زیر را اجرا کنید تا لیست دیسکهای متصل به سیستم نمایش داده شود، در لیست ظاهرشده، فلش مموری خود را شناسایی کنید. این کار معمولاً با توجه به ظرفیت (Size) فلش انجام میشود. list diskبرای انتخاب فلش مموری موردنظر، دستور زیر را اجرا کنید (عدد2  را با شماره دیسک فلش خود جایگزین کنید)select disk 2فرمت کردن فلش مموری  File Explorerفلش مموری را با سیستم فایل دلخواه فرمت کنید، با اجرای دستور زیر فلش مموری شما به صورت کامل تمامی اطلاعات خود را از دست می دهد، در این دستور میتوانید به صورت اختصاصی نوع فرمت خود را انتخاب کنید، شما می توانید به جای fat32 از عناوین NTFS و EXFAT استفاده کنید.format fs=fat32 quickفرمت کردن فلش مموری یکی از روشهای کاربردی برای پاکسازی دادهها، تغییر سیستم فایل یا رفع مشکلات نرمافزاری در حافظههای USB است. این عملیات به شما امکان میدهد فلش مموری خود را با تنظیمات جدید و مناسب برای دستگاهها یا سیستمعاملهای مختلف آماده کنید.کانال روبیکا من : کانال روبیکا من : https://rubika.ir/artinkarimian3اگر ایده یا پروژه ای دارید از طریق لینک زیر :https://formafzar.com/form/zso58پیام خود را وارد کنید راستی به تمام سوالات شما پاسخ داده میشود .رمز داخل سایت (جهت نیاز) : artinkarimian125701</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Wed, 20 May 2026 18:31:03 +0330</pubDate>
            </item>
                    <item>
                <title>دانلود رایگان کتاب های got it</title>
                <link>https://virgool.io/@artinkarimian/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D8%B1%D8%A7%DB%8C%DA%AF%D8%A7%D9%86-%DA%A9%D8%AA%D8%A7%D8%A8-%D9%87%D8%A7%DB%8C-got-it-wid6cgfjp7ui</link>
                <description>معرفی کتاب got itمجموعه &quot;Got it&quot; یک سری کتاب چهارسطحی است که توسط انتشارات آکسفورد طراحی و تدوین شده و به طور خاص برای آموزش زبان انگلیسی نوجوانان تهیه شده است. این کتاب‌ها به نوجوانان کمک می‌کنند تا با مفاهیم و اصول زبان انگلیسی آشنا شوند.این مجموعه شامل چهار سطح به ترتیب زیر هستند:StarterLevel 1Level 2Level 3هر جلد از سری کتاب‌های &quot;Got It&quot; به سطوح مختلف یادگیری زبان انگلیسی اختصاص دارد:🟠 Starter: برای زبان‌آموزان مبتدی که تازه شروع به یادگیری زبان می‌کنند.🟢 Level 1: مناسب برای افرادی که در سطح ابتدایی کمی پیشرفته‌تر شده‌اند.🔵 Level 2: برای زبان‌آموزانی که به مهارت‌های متوسط دست یافته‌اند و آماده‌اند تا دانش خود را گسترش دهند.🟣 Level 3: مناسب برای کسانی که در سطح پیشرفته‌تر قرار دارند و به دنبال تقویت بیشتر مهارت‌های خود هستند.این تقسیم‌بندی به یادگیرندگان کمک می‌کند تا بر اساس سطح خود، به طور مؤثرتر یاد بگیرند. ویرایش دوم کتاب‌های &quot;Got it! &quot; با همان روش و ساختار تدریس ویرایش اول عرضه شده، اما محتوای آن کاملاً به‌روز و جدید است. هر سطح از این مجموعه شامل منابع چاپی و کمک‌آموزشی آنلاین است. در هر یک از این چهار سطح، موارد زیر وجود دارد:کتاب درسی و کتاب کار زبان‌آموز (Student Book &amp; Workbook)کتاب کار آنلاین و تمرین‌های اضافی (Online Workbook and Extra Practice)فایل صوتی کتاب های Got Itکتاب Got It teacher&#039;s bookکتاب got it starter                                                       دانلود کتاب got it starter A + workbook                                                        دانلود کتاب got it starter B + workbook                                                           دانلود فایل صوتی Got It 2nd Starter                                                       دانلود کتاب got it starter teacher&#039;s bookکتاب got it 1در این جلد، موضوعاتی مانند فعالیت‌های روزمره، ورزش، تفریحات، سفر و مدرسه با ساختارهای گرامری سطح A2 آموزش داده می‌شود. تمرکز بر مهارت مکالمه و درک مطلب است.                                                          دانلود کتاب got it 1 A + workbook                                                          دانلود کتاب got it 1 B + workbook                                                                 دانلود فایل صوتی Got It 1                                                        دانلود کتاب got it 1 teacher&#039;s bookکتاب got it 2زبان‌آموزان در این سطح می‌توانند درباره‌ی تجربیات گذشته، برنامه‌های آینده و موضوعات شخصی با اعتماد به نفس بیشتری صحبت کنند. مهارت خواندن متون و نوشتن نیز تقویت می‌شود.                                                           دانلود کتاب got it 2 A + workbook                                                          دانلود کتاب got it 2 B + workbook                                                             دانلود فایل صوتی کتاب got it 2                                                        دانلود کتاب got it 2 teacher&#039;s bookکتاب got it 3در این سطح، زبان‌آموزان قادرند دیدگاه‌های خود را بیان کنند، مقایسه کنند، داستان‌نویسی انجام دهند و در موقعیت‌های پیچیده‌تری شرکت کنند. محتوای درسی شامل مباحث اجتماعی و فرهنگی جذاب برای نوجوانان است.                                                            دانلود کتاب got it 3 A + workbook                                                            دانلود کتاب got it 3 B + workbook                                                                دانلود فایل صوتی کتاب got it 3                                                          دانلود کتاب got it 3 teacher&#039;s bookویژگی‌های کتاب got itمزایای ویرایش دوم کتاب‌های &quot;Got It&quot; عبارت‌اند از:هر درس با موضوعات جذاب و تصاویری دلنشین و متون جالب ارائه شده است.برنامه درسی بر اساس نیازهای زبان‌آموزان به‌روز شده و فرصت‌های بیشتری برای تقویت اعتمادبه‌نفس در مهارت‌های نوشتاری (رایتینگ) و شنیداری (لیسنینگ) فراهم می‌کند.از روش یادگیری اکتشافی (Discovery Learning) استفاده شده که زبان‌آموزان را به تفکر و کشف ارتباطات بین موضوعات تشویق می‌کند.آموزش دستور زبان به‌صورت تعاملی صورت‌گرفته و تمرینات متنوعی در سطوح مختلف برای بهبود گرامر انگلیسی ارائه شده است.شامل مواد آموزشی جدیدی مانند ویدئوهاست که به‌منظور ایجاد انگیزه و تشویق زبان‌آموزان طراحی شده‌اند.این کتاب‌ها همچنین به کیت تمرین آنلاین &quot;Got it! Plus&quot; مجهز هستند که بلافاصله بازخورد ارائه می‌دهد.منبع فایل ها (آموزشگاه زبان ملل)</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Wed, 20 May 2026 15:00:36 +0330</pubDate>
            </item>
                    <item>
                <title>دانلود کتابهای Everybody Up</title>
                <link>https://virgool.io/@artinkarimian/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%DA%A9%D8%AA%D8%A7%D8%A8%D9%87%D8%A7%DB%8C-everybody-up-bngugapspfuh</link>
                <description>کتابهای Everybody Up در هفت سطح و مختص سنین ۵ تا ۱۲ سال می باشد.کتابهای Everybody Up با لهجه امریکن و از انتشارات آکسفورد می باشد.جهت دانلود برروی لینک مد نظر کلیک کنید.Everybody Up Starter Student BookEverybody Up Starter workbook BookEverybody Up Starter Teacher BookEverybody Up 1 Student BookEverybody Up 1 workbook BookEverybody Up 1 Teacher BookEverybody Up 2 Student BookEverybody Up 2 workbook BookEverybody Up 3 Student BookEverybody Up 3 work  BookEverybody Up 3 Teacher BookEverybody Up 3 Student Book AudioEverybody Up 4 Student BookEverybody Up 4 work  BookEverybody Up 4 Student Book AudioEverybody Up 4 Teacher BookEverybody Up 5 Student BookEverybody Up 5 work  BookEverybody Up 6 Student BookEverybody Up 6 work  Bookکانال روبیکا من : کانال روبیکا من : https://rubika.ir/artinkarimian3اگر ایده یا پروژه ای دارید از طریق لینک زیر :https://formafzar.com/form/zso58پیام خود را وارد کنید راستی به تمام سوالات شما پاسخ داده میشود .رمز داخل سایت (جهت نیاز) : artinkarimian125701منبع : زبانکده اَوَس</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Tue, 19 May 2026 19:10:27 +0330</pubDate>
            </item>
                    <item>
                <title>ساخت بازی مار در NOTEPAD در ۲ دقیقه</title>
                <link>https://virgool.io/Compile/%D8%B3%D8%A7%D8%AE%D8%AA-%D8%A8%D8%A7%D8%B2%DB%8C-%D9%85%D8%A7%D8%B1-%D8%AF%D8%B1-notepad-%D8%AF%D8%B1-%DB%B2-%D8%AF%D9%82%DB%8C%D9%82%D9%87-o3kk5hcwu5wk</link>
                <description>اگر به دنبال کد بازی HTML هستید تا Snake Game را به راحتی در دفترچه یادداشت ایجاد کنید ، در صفحه مناسبی قرار دارید. در حقیقت ، ساخت بازی مار  در Notepad فقط با کد HTML بسیار آسان است. اساساً می توانید بازی را تنها در ۲ دقیقه انجام دهید. برای انجام این کار نیازی به دانش برنامه نویسی ندارید . همه چیز برای شما انجام شده است ، از جمله CSS و JavaScript. تنها چیزی که نیاز دارید این است که کد بازی HTML زیر را کپی و جایگذاری کنید و می توانید بازی را به صورت رایگان شروع کنید! نکته : کد بازی مار بصورت فایل PDF نیز در انتهای مقاله برای استفاده در دسترس است. همچنین ما دو کد را برای این منظور در اختیار شما قرار داده ایم ، کد اول کمی حرفه ای تر و زیباتر نسبت به کد دوم می باشد. کد اول :اجازه دهید مروری بر این بازی در قالب GIF داشته باشیم.من فقط یک فایل برای این برنامه ایجاد کرده ام زیرا این برنامه از نظر طول و اندازه کوچک است. من کمی از CSS استفاده کردم ، به همین دلیل CSS را بین برچسب &lt;head&gt; قرار دادم . یک فایل HTML با نام “snakegame.html” یا هر نام دیگری که می خواهید ایجاد کنید. فرم کدها را در زیر کپی کرده و روی فایل HTML بچسبانید.&lt;!--Code By WebDevTrick (https://webdevtrick.com)--&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
     &lt;meta charset=&quot;UTF-8&quot;&gt;
     &lt;title&gt;Simple JavaScript Snake Game| Webdevtrick.com&lt;/title&gt;
     
     &lt;style&gt;
     canvas {
          display: block;
          position: absolute;
          border: 5px solid  #009BFF;
          margin: auto;
          top: 0;
          bottom: 0;
          right: 0;
          left: 0;
     }
     &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

var
COLS = 26,
ROWS = 26,
EMPTY = 0,
SNAKE = 1,
FRUIT = 2,
LEFT  = 0,
UP    = 1,
RIGHT = 2,
DOWN  = 3,
KEY_LEFT  = 37,
KEY_UP    = 38,
KEY_RIGHT = 39,
KEY_DOWN  = 40,
canvas,       
ctx,       
keystate, 
frames,   
score;       

grid = {

     width: null,  
     height: null, 
     _grid: null,  

     
     init: function(d, c, r) {
          this.width = c;
          this.height = r;

          this._grid = [];
          for (var x=0; x &lt; c; x++) {
               this._grid.push([]);
               for (var y=0; y &lt; r; y++) {
                    this._grid[x].push(d);
               }
          }
     },

     
     set: function(val, x, y) {
          this._grid[x][y] = val;
     },

     
     get: function(x, y) {
          return this._grid[x][y];
     }
}


snake = {

     direction: null, 
     last: null,           
     _queue: null,     

     
     init: function(d, x, y) {
          this.direction = d;

          this._queue = [];
          this.insert(x, y);
     },

     
     insert: function(x, y) {
          
          this._queue.unshift({x:x, y:y});
          this.last = this._queue[0];
     },

     
     remove: function() {
          
          return this._queue.pop();
     }
};


function setFood() {
     var empty = [];
     
     for (var x=0; x &lt; grid.width; x++) {
          for (var y=0; y &lt; grid.height; y++) {
               if (grid.get(x, y) === EMPTY) {
                    empty.push({x:x, y:y});
               }
          }
     }
     
     var randpos = empty[Math.round(Math.random()*(empty.length - 1))];
     grid.set(FRUIT, randpos.x, randpos.y);
}


function main() {
     
     canvas = document.createElement(&quot;canvas&quot;);
     canvas.width = COLS*20;
     canvas.height = ROWS*20;
     ctx = canvas.getContext(&quot;2d&quot;);
     
     document.body(canvas);

     
     ctx.font = &quot;12px Helvetica&quot;;

     frames = 0;
     keystate = {};
     
     document.addEventListener(&quot;keydown&quot;, function(evt) {
          keystate[evt.keyCode] = true;
     });
     document.addEventListener(&quot;keyup&quot;, function(evt) {
          delete keystate[evt.keyCode];
     });

     
     init();
     loop();
}


function init() {
     score = 0;

     grid.init(EMPTY, COLS, ROWS);

     var sp = {x:Math.floor(COLS/2), y:ROWS-1};
     snake.init(UP, sp.x, sp.y);
     grid.set(SNAKE, sp.x, sp.y);

     setFood();
}


function loop() {
     update();
     draw();
     
     window.requestAnimationFrame(loop, canvas);
}


function update() {
     frames++;

     
     if (keystate[KEY_LEFT] &amp;&amp; snake.direction !== RIGHT) {
          snake.direction = LEFT;
     }
     if (keystate[KEY_UP] &amp;&amp; snake.direction !== DOWN) {
          snake.direction = UP;
     }
     if (keystate[KEY_RIGHT] &amp;&amp; snake.direction !== LEFT) {
          snake.direction = RIGHT;
     }
     if (keystate[KEY_DOWN] &amp;&amp; snake.direction !== UP) {
          snake.direction = DOWN;
     }

     
     if (frames%7 === 0) {
          
          var nx = snake.last.x;
          var ny = snake.last.y;

          
          switch (snake.direction) {
               case LEFT:
                    nx--;
                    break;
               case UP:
                    ny--;
                    break;
               case RIGHT:
                    nx++;
                    break;
               case DOWN:
                    ny++;
                    break;
          }

          
          if (0 &gt; nx || nx &gt; grid.width-1  ||
               ۰ &gt; ny || ny &gt; grid.height-1 ||
               grid.get(nx, ny) === SNAKE
          ) {
               return init();
          }

          if (grid.get(nx, ny) === FRUIT) {
               
               score++;
               setFood();
          } else {
               
               var tail = snake.remove();
               grid.set(EMPTY, tail.x, tail.y);
          }

          grid.set(SNAKE, nx, ny);
          snake.insert(nx, ny);
     }
}


function draw() {
     
     var tw = canvas.width/grid.width;
     var th = canvas.height/grid.height;
     
     for (var x=0; x &lt; grid.width; x++) {
          for (var y=0; y &lt; grid.height; y++) {
               
               switch (grid.get(x, y)) {
                    case EMPTY:
                         ctx.fillStyle = &quot;#fff&quot;;
                         break;
                    case SNAKE:
                         ctx.fillStyle = &quot;#333&quot;;
                         break;
                    case FRUIT:
                         ctx.fillStyle = &quot;#009BFF&quot;;
                         break;
               }
               ctx.fillRect(x*tw, y*th, tw, th);
          }
     }
     
     ctx.fillStyle = &quot;#000&quot;;
     ctx.fillText(&quot;SCORE: &quot; + score, 10, canvas.height-10);
}


main();

&lt;/body&gt;
&lt;/html&gt;کد دوم : کد بازی HTML برای ساخت بازی مار در NOTEPADاگر ترجیح می دهید یک آموزش تصویری نیز ایجاد کرده ام ، آن را در زیر مشاهده کنید:ابتدا کد زیر را کپی کنید:&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;utf-8&quot; /&gt;
&lt;title&gt;Snake Game&lt;/title&gt;
&lt;style type=&quot;text/css&quot;&gt;
body {text-align:center;}
canvas { border:7px dashed #4A4747 }
h1 { font-size:35px; text-align: center; margin: 0; padding-bottom: 25px; text-decoration: underline; font-family: Geneva; color: #0520A5;}
&lt;/style&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
function play_game()
{
var level = 160; // Game level, by decreasing will speed up
var rect_w = 45; // Width
var rect_h = 30; // Height
var inc_score = 50; // Score
var snake_color = &quot;#0520A5&quot;; // Snake Color
var ctx; // Canvas attributes
var tn = []; // temp directions storage
var x_dir = [-1, 0, 1, 0]; // position adjusments
var y_dir = [0, -1, 0, 1]; // position adjusments
var queue = [];
var frog = 1; // defalut food
var map = [];
var MR = Math.random;
var X = 5 + (MR() * (rect_w - 10))|0; // Calculate positions
var Y = 5 + (MR() * (rect_h - 10))|0; // Calculate positions
var direction = MR() * 3 | 0;
var interval = 0;
var score = 0;
var sum = 0, easy = 0;
var i, dir;
// getting play area 
var c = document.getElementById(&#039;playArea&#039;);
ctx = c.getContext(&#039;2d&#039;);
// Map positions
for (i = 0; i &lt; rect_w; i++)
{
map[i] = [];
}
// random placement of snake food
function random_snake()
{
var x, y;
do
{
x = MR() * rect_w|0;
y = MR() * rect_h|0;
}
while (map[x][y]);
map[x][y] = 1;
ctx.fillStyle = snake_color;
ctx.strokeRect(x * 10+1, y * 10+1, 8, 8);
}
// Default somewhere placement
random_snake();
function set_game_speed()
{
if (easy)
{
X = (X+rect_w)%rect_w;
Y = (Y+rect_h)%rect_h;
}
--inc_score;
if (tn.length)
{
dir = tn.pop();
if ((dir % 2) !== (direction % 2))
{
direction = dir;
}
}
if ((easy || (0 &lt;= X &amp;&amp; 0 &lt;= Y &amp;&amp; X &lt; rect_w &amp;&amp; Y &lt; rect_h)) &amp;&amp; 2 !== map[X][Y])
{
if (1 === map[X][Y])
{
score+= Math.max(5, inc_score);
inc_score = 50;
random_snake();
frog++;
}
//ctx.fillStyle(&quot;#ffffff&quot;);
ctx.fillRect(X * 10, Y * 10, 9, 9);
map[X][Y] = 2;
queue.unshift([X, Y]);
X+= x_dir[direction];
Y+= y_dir[direction];
if (frog &lt; queue.length)
{
dir = queue.pop()
map[dir[0]][dir[1]] = 0;
ctx.clearRect(dir[0] * 10, dir[1] * 10, 10, 10);
}
}
else if (!tn.length)
{
var show_score = document.getElementById(&quot;show&quot;);
show_score = &quot;You lose!&lt;br /&gt; &lt;u&gt;Your Score:&lt;/u&gt; &lt;b&gt;&quot;+score+&quot;&lt;/b&gt;&lt;br&gt;&lt;br&gt; Want to try again?&lt;br&gt;&lt;br&gt;&lt;input type=&#039;button&#039; value=&#039;Play Again&#039; =&#039;.reload();&#039; /&gt;&quot;;
document.getElementById(&quot;playArea&quot;).style.display = &#039;none&#039;;
window.clearInterval(interval);
}
}
interval = window.setInterval&#40;set_game_speed, level&#41;;
 = function(e) {
var code = e.keyCode - 37;
if (0 &lt;= code &amp;&amp; code &lt; 4 &amp;&amp; code !== tn[0])
{
tn.unshift(code);
}
else if (-5 == code)
{
if (interval)
{
window.clearInterval(interval);
interval = 0;
}
else
{
interval = window.setInterval&#40;set_game_speed, 60&#41;;
}
}
else
{
dir = sum + code;
if (dir == 44||dir==94||dir==126||dir==171) {
sum+= code
} else if (dir === 218) easy = 1;
}
}
}

&lt;/head&gt;
&lt;body =&quot;play_game()&quot;&gt;
&lt;h1&gt;Play Snake Game&lt;/h1&gt;
&lt;div id=&quot;show&quot;&gt;&lt;/div&gt;
&lt;canvas id=&quot;playArea&quot; width=&quot;450&quot; height=&quot;300&quot;&gt;Sorry your browser does not support HTML5. Try using like Chrome or Firefox.&lt;/canvas&gt;
&lt;/body&gt;
&lt;/html&gt;در مرحله بعد ، Note Pad را در رایانه خود باز کرده و کد را وارد کنید.برای ذخیره کد روی CTRL + S کلیک کنید .در زیر نوع فایل ، All file را انتخاب کرده و به اسم فایل را با عنوان mar.html یا هر چیز دیگری ذخیره کنید .توجه: هر اسمی که برای بازی خود بگذارید ، مطمئن شوید که با فرمت html. ذخیره می کنید.اکنون می توانید به پوشه ای که فایل کد را در آن ذخیره کرده اید بروید و آن را با هر مرورگری که از HTML 5 پشتیبانی می کند باز کنید.مرورگرهای توصیه شده: Chrome/Firefox.کانال روبیکا من : کانال روبیکا من : https://rubika.ir/artinkarimian3اگر ایده یا پروژه ای دارید از طریق لینک زیر : https://formafzar.com/form/zso58پیام خود را وارد کنید راستی به تمام سوالات شما پاسخ داده میشود .رمز داخل سایت (جهت نیاز) : artinkarimian125701</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Mon, 18 May 2026 18:40:53 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش ساخت ویروس کامپیوتری (Fork Bomb) به 3 روش</title>
                <link>https://virgool.io/Compile/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%88%DB%8C%D8%B1%D9%88%D8%B3-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1%DB%8C-fork-bomb-%D8%A8%D9%87-3-%D8%B1%D9%88%D8%B4-rcrkbyqu0xmv</link>
                <description>در این مطلب با آموزش ساخت ویروس کامپیوتری با نام Fork Bomb که یکی از ساده ترین ویروس های کامپیوتری است آشنا خواهیم شد. همیشه تا اسم ویروس می آید فکر می کنیم که این نوع کد مخرب باید یک پیچیدگی زیاد و کدنویسی عجیب و غریبی داشته باشد اما قبل از اینکه بگوییم که چگونه یک ویروس ساده ایجاد کنیم به این تعریف توجه کنید که تعریف ویروس این است که به قطعه کدی گفته می شود که کاری انجام می دهد که از نظر کاربران خوش آیند نیست و نباید انجام شود. همیشه قرار نیست یک برنامه نویس حرفه ای باشید تا بتوانید یک ویروس بنویسید .یکی از ساده ترین انواع ویروس های دنیا تنها با چند خط و بعضا چند کاراکتر کد ایجاد می شود و به زبان Batch در ویندوز و بصورت Shell Script در لینوکس هم قابل اجرا هست ، این ویروس به عنوان Fork Bomb شناخته می شود و باعث می شود که سیستم شما چه ویندوزی و چه لینوکسی Crash کند ، ساختار کاری این ویروس به این شکل است که یک Process ایجاد می کند که این Process دو Process زیر مجموعه ایجاد می کند و به همین ترتیب بصورت دو دویی Process ایجاد می شود به نحوی که دیگر CPU تحمل نگهداری اینقدر Process را نداشته و Crash می کند ، ایجاد کردن این ویروس بسیار ساده است کافیست مراحل زیر را دنبال کنید :ایجاد ویروس Fork Bomb در ویندوزیک فایل Notepad باز کنید و بعد کد زیر را در این فایل وارد کنید و پسوند فایل را به BAT تغییر دهید ، فایل بصورت fork.bat ایجاد خواهد شد و یک ویروس 5 کاراکتری در ویندوز ایجاد می کند ، به محض اینکه بر روی این فایل دابل کلیک کنید تا 30 ثانیه بعد ویندوز شما قطعا Crash خوهد کرد و قطعا در Task Manager بیش از 500 عدد پردازش به یکباره ایجاد می شود که در Command Prompt مشاهده می شود ، دقت کنید اینکار را در کامپیوتر خودتان تست نکنید :%0|%0ایجاد ویروس Fork Bomb به زبان ++Cنمونه کد زیر را در زبان ++C می توانید بنویسید و فایل خروجی ویروس Fork Bomb است :#include  
int main(void) 
{ 
  while(1) 
    fork(); 
  return 0; 
}ایجاد ویروس Fork Bomb توسط Shell Script لینوکسکد زیر را در Bash Shell لینوکس وارد کنید تا Fork Bomb شروع به کار کند :: (){ : |:&amp; };:زمانیکه یک Fork Bomb با موفقیت بر روی یک سیستم اجرا شد برای توقف آن به احتمال زیاد مجبور می شوید که سیستم را Reboot کنید ، متوقف کردن Fork Bomb نیاز به اجرا شدن یک Process دیگر دارد که بتواند Process های مربوط به Fork Bomb را از بین ببرد اما با توجه به اینکه خود برنامه متوقف کنند فرصت اجرا پیدا نمی کند معمولا در نهایت باید سیستم را Reboot کنید و اینکار درست کردن Fork Bomb در زمان اجرا بدون Reboot کردن را طبیعتا سخت و چه بسا غیر ممکن می کند.هدف از ارائه این مطلب این بود که بدانید ویروس ها می توانند بسیار ساده طراحی شوند ، البته Fork Bomb برای ما دیگر ویروس به حساب نمی آید اما به هر حال دانستن اینکه می توانید با چند کاراکتر ساده سیستم را Crash کنید برای شما امیدوارم جذاب بوده باشد ، اگر این ویروس را اجرا کردید خوشحال می شویم بازخورد شما در خصوص اجرای آن را در ادامه دریافت کنیم.کانال روبیکا من : کانال روبیکا من : https://rubika.ir/artinkarimian3اگر ایده یا پروژه ای دارید از طریق لینک زیر : https://formafzar.com/form/zso58پیام خود را وارد کنید راستی به تمام سوالات شما پاسخ داده میشود .رمز داخل سایت (جهت نیاز) : artinkarimian125701</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Sun, 17 May 2026 17:00:23 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش ساخت یک سرور با پایتون (سرور فایل)</title>
                <link>https://virgool.io/Compile/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B3%D8%A7%D8%AE%D8%AA-%DB%8C%DA%A9-%D8%B3%D8%B1%D9%88%D8%B1-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%B3%D8%B1%D9%88%D8%B1-%D9%81%D8%A7%DB%8C%D9%84-wdn480bh6yzd</link>
                <description>خب شما یک پوشه میسازید با نام : File serverدر این پوشه یک پوشه با نام : serverبعد داخل پوشه server یک فایل پایتونی میسازید .موارد لازم :1- پایتون2- کتابخانه flaskداخل فایل پایتونی با اسم app کد زیر را وارد میکنیدimport os
import sqlite3
import secrets
from datetime import datetime, timedelta
from flask import Flask, request, render_template, send_file, redirect, url_for, flash
from werkzeug.utils import secure_filename

app = Flask(__name__)
app.secret_key = &quot;change-this-secret-key&quot;

UPLOAD_FOLDER = &quot;uploads&quot;
DATABASE = &quot;files.db&quot;
MAX_CONTENT_LENGTH = 1024 * 1024 * 1024  # 1 GB

app.config[&quot;UPLOAD_FOLDER&quot;] = UPLOAD_FOLDER
app.config[&quot;MAX_CONTENT_LENGTH&quot;] = MAX_CONTENT_LENGTH

os.makedirs(UPLOAD_FOLDER, exist_ok=True)


def get_db():
    conn = sqlite3.connect(DATABASE)
    conn.row_factory = sqlite3.Row
    return conn


def init_db():
    conn = get_db()
    cursor = conn.cursor()
    cursor.execute(&quot;&quot;&quot;
        CREATE TABLE IF NOT EXISTS files (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            code TEXT UNIQUE NOT NULL,
            original_name TEXT NOT NULL,
            stored_path TEXT NOT NULL,
            uploaded_at TEXT NOT NULL,
            expires_at TEXT NOT NULL,
            max_downloads INTEGER NOT NULL,
            download_count INTEGER NOT NULL DEFAULT 0
        )
    &quot;&quot;&quot;)
    conn.commit()
    conn.close()


def generate_code(length=8):
    alphabet = &quot;ABCDEFGHJKLMNPQRSTUVWXYZ23456789&quot;
    return &quot;&quot;.join(secrets.choice(alphabet) for _ in range(length))


def unique_code():
    conn = get_db()
    cursor = conn.cursor()

    while True:
        code = generate_code()
        cursor.execute(&quot;SELECT id FROM files WHERE code = ?&quot;, (code,))
        row = cursor.fetchone()
        if not row:
            conn.close()
            return code


def delete_file_record(file_row):
    try:
        if os.path.exists(file_row[&quot;stored_path&quot;]):
            os.remove(file_row[&quot;stored_path&quot;])
    except Exception:
        pass

    conn = get_db()
    cursor = conn.cursor()
    cursor.execute(&quot;DELETE FROM files WHERE id = ?&quot;, (file_row[&quot;id&quot;],))
    conn.commit()
    conn.close()


@app.route(&quot;/&quot;)
def home():
    return render_template(&quot;home.html&quot;)


@app.route(&quot;/upload-page&quot;)
def upload_page():
    return render_template(&quot;upload.html&quot;)


@app.route(&quot;/download-page&quot;)
def download_page():
    return render_template(&quot;download.html&quot;)


@app.route(&quot;/upload&quot;, methods=[&quot;POST&quot;])
def upload_file&#40;&#41;:
    if &quot;file&quot; not in request.files:
        flash(&quot;فایلی ارسال نشده است.&quot;)
        return redirect(url_for(&quot;upload_page&quot;))

    file = request.files[&quot;file&quot;]
    if file.filename == &quot;&quot;:
        flash(&quot;هیچ فایلی انتخاب نشده است.&quot;)
        return redirect(url_for(&quot;upload_page&quot;))

    filename = secure_filename(file.filename)
    if not filename:
        flash(&quot;نام فایل معتبر نیست.&quot;)
        return redirect(url_for(&quot;upload_page&quot;))

    try:
        expire_value = int(request.form.get(&quot;expire_value&quot;, &quot;1&quot;))
        expire_unit = request.form.get(&quot;expire_unit&quot;, &quot;hours&quot;)
        max_downloads = int(request.form.get(&quot;max_downloads&quot;, &quot;1&quot;))
    except ValueError:
        flash(&quot;مقادیر وارد شده معتبر نیستند.&quot;)
        return redirect(url_for(&quot;upload_page&quot;))

    if expire_value &lt; 1:
        flash(&quot;مدت اعتبار باید حداقل 1 باشد.&quot;)
        return redirect(url_for(&quot;upload_page&quot;))

    if max_downloads &lt; 1:
        flash(&quot;تعداد دانلود باید حداقل 1 باشد.&quot;)
        return redirect(url_for(&quot;upload_page&quot;))

    now = datetime.utcnow()

    if expire_unit == &quot;minutes&quot;:
        expires_at = now + timedelta(minutes=expire_value)
    elif expire_unit == &quot;hours&quot;:
        expires_at = now + timedelta(hours=expire_value)
    elif expire_unit == &quot;days&quot;:
        expires_at = now + timedelta(days=expire_value)
    else:
        flash(&quot;واحد زمان نامعتبر است.&quot;)
        return redirect(url_for(&quot;upload_page&quot;))

    code = unique_code()
    stored_filename = f&quot;{code}_{filename}&quot;
    stored_path = os.path.join(app.config[&quot;UPLOAD_FOLDER&quot;], stored_filename)
    file.save(stored_path)

    conn = get_db()
    cursor = conn.cursor()
    cursor.execute(&quot;&quot;&quot;
        INSERT INTO files (
            code, original_name, stored_path,
            uploaded_at, expires_at, max_downloads, download_count
        )
        VALUES (?, ?, ?, ?, ?, ?, 0)
    &quot;&quot;&quot;, (
        code,
        filename,
        stored_path,
        now.isoformat(),
        expires_at.isoformat(),
        max_downloads
    ))
    conn.commit()
    conn.close()

    return render_template(
        &quot;success.html&quot;,
        code=code,
        expires_at=expires_at.strftime(&quot;%Y-%m-%d %H:%M:%S UTC&quot;),
        max_downloads=max_downloads
    )


@app.route(&quot;/download&quot;, methods=[&quot;POST&quot;])
def download_file&#40;&#41;:
    code = request.form.get(&quot;code&quot;, &quot;&quot;).strip().upper()

    if not code:
        flash(&quot;کد را وارد کنید.&quot;)
        return redirect(url_for(&quot;download_page&quot;))

    conn = get_db()
    cursor = conn.cursor()
    cursor.execute(&quot;SELECT * FROM files WHERE code = ?&quot;, (code,))
    file_row = cursor.fetchone()

    if not file_row:
        conn.close()
        flash(&quot;کد نامعتبر است یا فایل پیدا نشد.&quot;)
        return redirect(url_for(&quot;download_page&quot;))

    now = datetime.utcnow()
    expires_at = datetime.fromisoformat(file_row[&quot;expires_at&quot;])

    # اگر فایل منقضی شده باشد
    if now &gt; expires_at:
        conn.close()
        delete_file_record(file_row)
        flash(&quot;اعتبار فایل به پایان رسیده و فایل حذف شد.&quot;)
        return redirect(url_for(&quot;download_page&quot;))

    # اگر تعداد دانلود پر شده باشد
    if file_row[&quot;download_count&quot;] &gt;= file_row[&quot;max_downloads&quot;]:
        conn.close()
        delete_file_record(file_row)
        flash(&quot;حداکثر تعداد دانلود این فایل تمام شده و فایل حذف شد.&quot;)
        return redirect(url_for(&quot;download_page&quot;))

    if not os.path.exists(file_row[&quot;stored_path&quot;]):
        conn.close()
        flash(&quot;فایل روی سرور موجود نیست.&quot;)
        return redirect(url_for(&quot;download_page&quot;))

    new_count = file_row[&quot;download_count&quot;] + 1

    cursor.execute(
        &quot;UPDATE files SET download_count = ? WHERE id = ?&quot;,
        (new_count, file_row[&quot;id&quot;])
    )
    conn.commit()
    conn.close()

    # اگر این آخرین دانلود مجاز بود، بعد از این دانلود حذف شود
    response = send_file&#40;
        file_row[&quot;stored_path&quot;],
        as_attachment=True,
        download_name=file_row[&quot;original_name&quot;]
    &#41;

    if new_count &gt;= file_row[&quot;max_downloads&quot;]:
        try:
            if os.path.exists(file_row[&quot;stored_path&quot;]):
                os.remove(file_row[&quot;stored_path&quot;])
        except Exception:
            pass

        conn = get_db()
        cursor = conn.cursor()
        cursor.execute(&quot;DELETE FROM files WHERE id = ?&quot;, (file_row[&quot;id&quot;],))
        conn.commit()
        conn.close()

    return response


if __name__ == &quot;__main__&quot;:
    init_db()
    app.run(host=&quot;0.0.0.0&quot;, port=5000, debug=True)خب حالا داخل پوشه server یک پوشه با اسم : templates میسازید .داخل اون پوشه1- یک فایل میسازید با اسم و پسوند : download.htmlکد داخل آن :&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;fa&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;دانلود فایل&lt;/title&gt;
    &lt;style&gt;
        body {
            margin: 0;
            font-family: Tahoma, Arial, sans-serif;
            background: #f4f6f9;
        }
        .container {
            max-width: 650px;
            margin: 50px auto;
            background: white;
            padding: 30px;
            border-radius: 18px;
            box-shadow: 0 6px 22px rgba(0,0,0,0.1);
        }
        h1 {
            text-align: center;
            color: #222;
        }
        label {
            display: block;
            margin-top: 18px;
            margin-bottom: 8px;
            font-weight: bold;
        }
        input[type=&quot;text&quot;] {
            width: 100%;
            padding: 12px;
            border: 1px solid #bbb;
            border-radius: 10px;
            box-sizing: border-box;
        }
        button {
            margin-top: 25px;
            width: 100%;
            padding: 14px;
            border: none;
            border-radius: 12px;
            background: #28a745;
            color: white;
            font-size: 16px;
            cursor: pointer;
        }
        button:hover {
            background: #1f7d34;
        }
        .back {
            display: inline-block;
            margin-top: 18px;
            text-decoration: none;
            color: #007bff;
        }
        .flash {
            background: #ffe3e3;
            color: #a40000;
            padding: 12px;
            border-radius: 10px;
            margin-bottom: 15px;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;h1&gt;دانلود فایل&lt;/h1&gt;

        {% with messages = get_flashed_messages() %}
          {% if messages %}
            {% for message in messages %}
              &lt;div class=&quot;flash&quot;&gt;{{ message }}&lt;/div&gt;
            {% endfor %}
          {% endif %}
        {% endwith %}

        &lt;form action=&quot;/download&quot; method=&quot;post&quot;&gt;
            &lt;label&gt;کد فایل را وارد کنید&lt;/label&gt;
            &lt;input type=&quot;text&quot; name=&quot;code&quot; placeholder=&quot;مثلاً ABCD1234&quot; required&gt;
            &lt;button type=&quot;submit&quot;&gt;دانلود فایل&lt;/button&gt;
        &lt;/form&gt;

        &lt;a class=&quot;back&quot; href=&quot;/&quot;&gt;بازگشت به صفحه اصلی&lt;/a&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;2- یک فایل با نام و پسوند : home.htmlداخل آن کد :&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;fa&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;سرور آپلود فایل&lt;/title&gt;
    &lt;style&gt;
        body {
            margin: 0;
            font-family: Tahoma, Arial, sans-serif;
            background: linear-gradient(135deg, #e3f2fd, #f8f9fa);
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
        }
        .box {
            background: white;
            width: 420px;
            padding: 35px;
            border-radius: 18px;
            box-shadow: 0 8px 30px rgba(0,0,0,0.12);
            text-align: center;
        }
        h1 {
            margin-bottom: 25px;
            color: #222;
        }
        .btn {
            display: block;
            width: 100%;
            margin: 15px 0;
            padding: 14px;
            text-decoration: none;
            color: white;
            background: #007bff;
            border-radius: 12px;
            font-size: 17px;
            transition: 0.2s;
        }
        .btn:hover {
            background: #0056b3;
        }
        .btn.secondary {
            background: #28a745;
        }
        .btn.secondary:hover {
            background: #1f7d34;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;box&quot;&gt;
        &lt;h1&gt;سرور آپلود فایل&lt;/h1&gt;
        &lt;a class=&quot;btn&quot; href=&quot;/upload-page&quot;&gt;ورود به صفحه آپلود&lt;/a&gt;
        &lt;a class=&quot;btn secondary&quot; href=&quot;/download-page&quot;&gt;ورود به صفحه دانلود&lt;/a&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;3- یک فایل دیگر با نام و پسوند : success.htmlداخل آن کد زیر را وارد میکنید :&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;fa&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;آپلود موفق&lt;/title&gt;
    &lt;style&gt;
        body {
            margin: 0;
            font-family: Tahoma, Arial, sans-serif;
            background: #eef7ee;
        }
        .container {
            max-width: 650px;
            margin: 50px auto;
            background: white;
            padding: 30px;
            border-radius: 18px;
            box-shadow: 0 6px 22px rgba(0,0,0,0.1);
            text-align: center;
        }
        h1 {
            color: #1f7d34;
        }
        .code-box {
            background: #f1f8ff;
            border: 2px dashed #007bff;
            padding: 20px;
            margin: 20px 0;
            border-radius: 14px;
            font-size: 28px;
            font-weight: bold;
            letter-spacing: 3px;
            color: #007bff;
        }
        .info {
            margin-top: 10px;
            color: #333;
            line-height: 1.9;
        }
        .btn {
            display: inline-block;
            margin-top: 20px;
            padding: 12px 20px;
            text-decoration: none;
            color: white;
            background: #007bff;
            border-radius: 12px;
        }
        .btn:hover {
            background: #0056b3;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;h1&gt;آپلود با موفقیت انجام شد&lt;/h1&gt;
        &lt;p&gt;کد مخصوص فایل شما:&lt;/p&gt;
        &lt;div class=&quot;code-box&quot;&gt;{{ code }}&lt;/div&gt;

        &lt;div class=&quot;info&quot;&gt;
            &lt;p&gt;تاریخ انقضا: {{ expires_at }}&lt;/p&gt;
            &lt;p&gt;حداکثر تعداد دانلود: {{ max_downloads }}&lt;/p&gt;
        &lt;/div&gt;

        &lt;a class=&quot;btn&quot; href=&quot;/&quot;&gt;بازگشت به صفحه اصلی&lt;/a&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;4- داخل همان پوشه یک فایل با اسم و پسوند : upload.htmlکد زیر را داخل فایل وارد میکنید :&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;fa&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;آپلود فایل&lt;/title&gt;
    &lt;style&gt;
        body {
            margin: 0;
            font-family: Tahoma, Arial, sans-serif;
            background: #f4f6f9;
        }
        .container {
            max-width: 650px;
            margin: 50px auto;
            background: white;
            padding: 30px;
            border-radius: 18px;
            box-shadow: 0 6px 22px rgba(0,0,0,0.1);
        }
        h1 {
            text-align: center;
            color: #222;
        }
        label {
            display: block;
            margin-top: 18px;
            margin-bottom: 8px;
            font-weight: bold;
        }
        input[type=&quot;file&quot;],
        input[type=&quot;number&quot;],
        select {
            width: 100%;
            padding: 12px;
            border: 1px solid #bbb;
            border-radius: 10px;
            box-sizing: border-box;
        }
        button {
            margin-top: 25px;
            width: 100%;
            padding: 14px;
            border: none;
            border-radius: 12px;
            background: #007bff;
            color: white;
            font-size: 16px;
            cursor: pointer;
        }
        button:hover {
            background: #0056b3;
        }
        .back {
            display: inline-block;
            margin-top: 18px;
            text-decoration: none;
            color: #007bff;
        }
        .flash {
            background: #ffe3e3;
            color: #a40000;
            padding: 12px;
            border-radius: 10px;
            margin-bottom: 15px;
        }
        .row {
            display: flex;
            gap: 12px;
        }
        .row &gt; div {
            flex: 1;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;h1&gt;آپلود فایل&lt;/h1&gt;

        {% with messages = get_flashed_messages() %}
          {% if messages %}
            {% for message in messages %}
              &lt;div class=&quot;flash&quot;&gt;{{ message }}&lt;/div&gt;
            {% endfor %}
          {% endif %}
        {% endwith %}

        &lt;form action=&quot;/upload&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;
            &lt;label&gt;انتخاب فایل&lt;/label&gt;
            &lt;input type=&quot;file&quot; name=&quot;file&quot; required&gt;

            &lt;label&gt;مدت اعتبار فایل&lt;/label&gt;
            &lt;div class=&quot;row&quot;&gt;
                &lt;div&gt;
                    &lt;input type=&quot;number&quot; name=&quot;expire_value&quot; min=&quot;1&quot; value=&quot;1&quot; required&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;select name=&quot;expire_unit&quot; required&gt;
                        &lt;option value=&quot;minutes&quot;&gt;دقیقه&lt;/option&gt;
                        &lt;option value=&quot;hours&quot; selected&gt;ساعت&lt;/option&gt;
                        &lt;option value=&quot;days&quot;&gt;روز&lt;/option&gt;
                    &lt;/select&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;label&gt;حذف فایل بعد از چند بار دانلود&lt;/label&gt;
            &lt;input type=&quot;number&quot; name=&quot;max_downloads&quot; min=&quot;1&quot; value=&quot;1&quot; required&gt;

            &lt;button type=&quot;submit&quot;&gt;تأیید و آپلود&lt;/button&gt;
        &lt;/form&gt;

        &lt;a class=&quot;back&quot; href=&quot;/&quot;&gt;بازگشت به صفحه اصلی&lt;/a&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;حالا از قسمت بالای پوشه server کلمه cmd جای آدرس مینویسیم و وارد cmd میشیم .حالا کد :python app.pyرا ارسال کنید و سرور روشن شد .حالا اگر به داخل گوگل بروید و آدرس :http://127.0.0.1:5000وارد سرور میشوید .برای خاموش کردن صفحه داخل همون cmd باز ، کنترل سی را بگیرید.ساختار کلی پروژه :file_server/│├── app.py├── files.db├── uploads/└── templates/├── home.html├── upload.html├── download.html└── success.htmlکل پروژه را از لینک زیر دانلود کنید :https://my.files.ir/drive/s/5oFQElodY5mDvQwLfB84fVy30e6Q9Z:MTQ4MjQxMnxwYQرمز : artinkarimianکانال روبیکا من : https://rubika.ir/artinkarimian3</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Sat, 16 May 2026 13:50:44 +0330</pubDate>
            </item>
                    <item>
                <title>ایده پروژه پایتون 2025 | ۱۲ ایده عملی در ۴ حوزه کلیدی</title>
                <link>https://virgool.io/Compile/%D8%A7%DB%8C%D8%AF%D9%87-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-2025-%DB%B1%DB%B2-%D8%A7%DB%8C%D8%AF%D9%87-%D8%B9%D9%85%D9%84%DB%8C-%D8%AF%D8%B1-%DB%B4-%D8%AD%D9%88%D8%B2%D9%87-%DA%A9%D9%84%DB%8C%D8%AF%DB%8C-jesjqynbo49z</link>
                <description>یادگیری پایتون زمانی عمیق و ماندگار می‌شود که با پروژه‌های عملی همراه باشد. در این مقاله مجموعه‌ای از ایده‌ پروژه پایتون در سال ۲۰۲۵ گردآوری شده است؛ از نمونه‌های ساده برای آغاز مسیر یادگیری تا پروژه‌های پیشرفته و مناسب پرتفولیو. برای هر ایده سطح دشواری، زمان تقریبی اجرا، کتابخانه‌های کلیدی و مسیر توسعه ارائه شده تا بتوانید متناسب با هدف خود، بهترین انتخاب را داشته باشید. در این مقاله از سایت انجام پروژه های دانشجویی کارت پروژه، 12 ایده پروژه پایتون را با سطح، زمان لازم برای انجام، کتابخانه ها و ابزار، مهارت های لازم، مزیت رزومه و مسیر ارتقا هر کدام، در این مقاله معرفی میکنیم.از بازی و سرگرمی تا تا اسکریپت‌نویسیایده پروژه‌ پایتون این مقاله در 4 حوزه کلیدی دسته‌بندی شده‌اند:بازی و سرگرمیابزار و کاریردیوب و APIدیتاساینس / ML (الگوریتم پایه)هر ایده پایتون در قالب کارت پروژه استاندارد ارائه می‌شود و شامل نام پروژه، سطح، دامنه، زمان تخمینی، کتابخانه‌های کلیدی، مهارت‌های خروجی و ارزش برای رزومه است. این فرمت به خواننده امکان می‌دهد به سرعت پروژه‌های کاربردی پایتون مناسب خود را پیدا کرده، مسیر یادگیری و توسعه مهارت‌ها را هدفمند دنبال کند و از تجربه‌ای عملی و کاربردی بهره‌مند شود.ایده پروژه پایتون در حوزه بازی و سرگرمی1. شبیه‌ساز پرتاب تاسبرنامه‌ای که با هر اجرا یا فشردن یک کلید، یک عدد تصادفی بین ۱ تا ۶ نمایش می‌دهد. شما می‌توانید تعداد پرتاب‌ها را ثبت کنید و نتایج قبلی را مشاهده کنید.سطح: مبتدیزمان: ۱–۲ ساعتکتابخانه‌ها و ابزار: randomمهارت: کار با اعداد تصادفی، شرط‌ها، ورودی/خروجی، مدیریت ساده داده‌هامزیت رزومه: نشان‌دهنده توانایی ساخت برنامه تعاملی مهارت پایه‌ای پایتون و توانایی در حل مسئلهمسیر ارتقا: اضافه کردن تاریخچه پرتاب‌ها، شمارش تعداد پرتاب‌ها یا رابط گرافیکی ساده با Tkinter2. بازی PingPong دوبعدیطراحی بازی ساده پینگ‌پنگ با دو راکت و یک توپ که در صفحه حرکت می‌کند. کاربر با کیبورد یا موس توپ را به سمت حریف هدایت می‌کند و تلاش می‌کند توپ را از دست ندهد.سطح: متوسطزمان: ۴–۶ ساعتکتابخانه‌ها و ابزار: pygame، randomمهارت: طراحی بازی دوبعدی، تعامل گرافیکی، کنترل ورودی کاربرمزیت رزومه: نمونه‌ای عملی از توانایی طراحی بازی دوبعدی و استفاده از کتابخانه‌های گرافیکی در پایتونمسیر ارتقا: اضافه کردن حالت چندنفره، سطوح دشواری، منو و تنظیمات بازی3. بازی Fruit Ninjaساخت بازی مشابه Fruit Ninja که در آن میوه‌ها به صورت تصادفی ظاهر می‌شوند و کاربر باید با کشیدن موس روی آن‌ها برش دهد.سطح: پیشرفتهزمان: ۸–۱۲ ساعتکتابخانه‌ها و ابزار: pygame، randomمهارت: طراحی بازی تعاملی، تشخیص برخورد، مدیریت انیمیشن و رویدادهامزیت رزومه: نمونه‌ای از توانایی طراحی بازی پیچیده و پیاده‌سازی مکانیک‌های واقعی که مهارت عملی شما را نشان می‌دهدمسیر ارتقا: اضافه کردن امتیازدهی، سطوح دشواری، رابط تنظیمات، و جلوه‌های صوتی و بصری بهترایده پروژه پایتون در حوزه ابزار و کاریردی1. ماشین‌حساب سادهبرنامه‌ای که بتواند جمع، تفریق، ضرب و تقسیم دو عدد را انجام دهد. با این پروژه با ورودی کاربر، توابع و شرط‌ها آشنا می‌شوید و یک ابزار تعاملی پایه می‌سازید.سطح: مبتدیزمان: ۱–۲ ساعتکتابخانه‌ها و ابزار: Tkinter (اختیاری)مهارت: کار با ورودی/خروجی، توابع، شرط‌ها، طراحی ساده برنامه تعاملیمزیت رزومه: نمونه‌ای ساده و کاربردی از توانایی حل مسئله و ایجاد ابزار تعاملی با پایتونمسیر ارتقا: اضافه کردن توانایی انجام عملیات با چند عدد، طراحی رابط گرافیکی کامل و زیباتر2. تولید رمز عبور تصادفیبرنامه‌ای با رابط گرافیکی ساده که با یک دکمه، رمز عبور تصادفی با طول مشخص و شامل حروف، اعداد یا نمادها ایجاد می‌کند.سطح: متوسطزمان: ۳–۵ ساعتکتابخانه‌ها و ابزار: Tkinter، randomمهارت: طراحی رابط کاربری، کار با ماژول‌های تصادفی، تعامل با کاربر، مدیریت داده سادهمزیت رزومه: نمونه‌ای عملی از توانایی طراحی ابزار کاربردی با GUI و منطق برنامه‌نویسی پایتونمسیر ارتقا: اضافه کردن ذخیره رمزها در فایل، تولید دسته‌ای رمز، رابط گرافیکی پیشرفته‌تر3. ویرایشگر متن ساده (Notepad)طراحی ویرایشگر متن ساده مشابه نوت‌پد که امکان باز کردن، ویرایش و ذخیره فایل متنی را فراهم می‌کند.سطح: پیشرفتهزمان: ۴–۶ ساعتکتابخانه‌ها و ابزار: Tkinter، filedialogمهارت: طراحی رابط کاربری، کار با فایل‌ها، مدیریت رویدادها، تعامل با کاربر و آشنایی طراحی GUIمزیت رزومه: نمونه عملی از توانایی ایجاد برنامه کاربردی با رابط کاربری گرافیکی و مدیریت داده در پایتونمسیر ارتقا: اضافه کردن قابلیت‌های Undo/Redo، جستجو در متن، تغییر فونت و رنگ متنایده پروژه پایتون در حوزه وب و API1. استخراج ایمیل (Email Extractor)برنامه‌ای ساده که هر متن ورودی را بررسی می‌کند و آدرس‌های ایمیل موجود در آن را به‌طور خودکار پیدا و ذخیره می‌کند. این پروژه ایده خوبی برای تمرین پایتون برای مبتدیان است.سطح: مبتدیزمان: ۲ تا ۳ ساعتکتابخانه‌ها و ابزار: Python Regex، File I/Oمهارت: یادگیری کار با عبارات منظم (Regex)، مدیریت رشته‌ها و فایل‌هامزیت رزومه: نشان‌دهنده توانایی پردازش داده‌های متنی و استخراج اطلاعات کلیدیمسیر ارتقا: تبدیل برنامه به یک ابزار خط فرمان با امکاناتی مثل ذخیره در CSV یا اتصال به ایمیل‌مارکتینگ.2. تبدیل‌کننده قیمت رمزارز (Crypto Price Converter)یک اپلیکیشن وب کوچک که قیمت لحظه‌ای رمزارز را از یک API می‌گیرد و آن را به تومان یا ارز دلخواه تبدیل می‌کند.سطح: متوسطزمان: ۸ تا ۱۲ ساعتکتابخانه‌ها و ابزار: Flask، Requests، JSON، Jinja2مهارت: کار با API، پردازش داده JSON، طراحی وب‌اپ ساده با Flaskمزیت رزومه: نشان‌دهنده توانایی ساخت اپلیکیشن تحت وب و اتصال به سرویس‌های خارجیمسیر ارتقا: اضافه‌کردن نمودار تغییرات قیمت، چند رمزارز همزمان، یا رابط کاربری پیشرفته با Bootstrap یا React.3. API پردازش تصویر (Image Processing API)یک سرویس وب که تصاویر آپلود شده را پردازش می‌کند (مثل تبدیل به سیاه‌وسفید یا تشخیص لبه‌ها) و خروجی اصلاح‌شده را برمی‌گرداند.سطح: پیشرفتهزمان: ۲۰ تا ۳۰ ساعتکتابخانه‌ها و ابزار: FastAPI یا Flask، OpenCV، JSONمهارت: طراحی API، مدیریت فایل‌ها، آشنایی با کتابخانه OpenCV و مفاهیم بینایی ماشین پایهمزیت رزومه: نشان‌دهنده توانایی ترکیب برنامه‌نویسی وب با پردازش تصویر مهارتی برجسته در پروژه‌های واقعیمسیر ارتقا: افزودن مدل‌های ML برای تشخیص اشیاء، فشرده‌سازی تصویر یا ایجاد یک داشبورد تحت وب برای مدیریت فایل‌ها.ایده پروژه پایتون در حوزه دیتاساینس / ML (الگوریتم پایه)1. سری فیبوناچی (Fibonacci Sequence)یک برنامه ساده که بر مبنای عدد ورودی از کاربر، دنباله فیبوناچی (0، 1، 1، 2، 3، 5…) را تا آن عدد تولید می‌کند.سطح: مبتدیزمان: 1–2 ساعتکتابخانه‌ها و ابزار: خودِ پایتون (بدون نیاز به کتابخانه خاص)مهارت: فهم حلقه‌ها (while)، لیست‌ها، طراحی الگوریتم ساده و پیاده‌سازی مرحله‌ای، درک منطق پشت دنباله‌های بازگشتی یا ترتیبیمزیت رزومه: مزیت رزومه آشنایی با مفاهیم پایه مثل الگوریتم‌نویسی و طراحی مرحله‌ایمسیر ارتقا:اضافه کردن نسخه بازگشتی یا با داینامیک پروگرمینگ، رسم نمودار دنباله2. شمارشگر فرکانس حروف (Character Frequency Counter)یک شمارشگر ساده که یک جمله یا متن از کاربر می‌گیرد و تعداد تکرار هر حرف را نمایش می‌دهد (مثلاً: a:3، b:1…).سطح: متوسطزمان: 1–2 ساعتکتابخانه‌ها و ابزار: دیکشنری، input/outputمهارت:پردازش رشته، کار با دیکشنری، شمارش و تحلیل ساده متنمزیت رزومه: نشان‌دهنده توانایی ساده‌سازی و تحلیل متن؛ پایه‌ای برای پردازش داده‌های متنی و پروژه‌های واقعی‌تر.مسیر ارتقا: بهبود برای چندجمله‌ای یا پاراگرافی، افزودن رابط گرافیکی ساده، یا ایجاد خروجی بصری مثل نمودار.3. پیش‌بینی فروش (Sales Forecasting)در این ایده پایتون با استفاده از داده‌های تاریخی فروش، روند آینده پیش‌بینی می‌شود. الگوریتم‌های یادگیری ماشین الگوهای پنهان را پیدا می‌کنند تا تصمیم‌گیری در مدیریت موجودی و استراتژی فروش دقیق‌تر شود.سطح: پیشرفتهزمان: 50 تا 70 ساعتکتابخانه‌ها و ابزار: Pandas، Scikit-learn، XGBoost، Matplotlibمهارت: تسلط بر پیش‌پردازش داده، مدل‌سازی سری‌های زمانی، ارزیابی مدل‌هامزیت رزومه: نشان می‌دهد توانایی استفاده عملی از داده‌ها برای حل مسئله واقعی و تجاری را داری.مسیر ارتقا: اتصال مدل به داشبورد تحت وب یا API برای پیش‌بینی بلادرنگ.جمع‌بندیبا اجرای این 12 ایده پروژه پایتون در حوزه‌های بازی، ابزار کاربردی، وب، داده و اتوماسیون، مسیر یادگیری شما از مبتدی تا پیشرفته هدفمند و عملی خواهد بود. هر پروژه مهارت‌های کلیدی پایتون را تقویت می‌کند و نمونه‌های قابل ارائه در رزومه و پرتفولیو فراهم می‌کند. با انتخاب پروژه متناسب با سطح خود، می‌توانید تجربه عملی، تسلط بر کتابخانه‌های محبوب و توانایی حل مسائل واقعی را به دست آورید و مسیر حرفه‌ای خود در برنامه‌نویسی پایتون را سریع‌تر و موثرتر توسعه دهید.کانال روبیکا من : https://rubika.ir/artinkarimian3</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Wed, 13 May 2026 10:02:16 +0330</pubDate>
            </item>
                    <item>
                <title>راهنمای جامع ورود به شغل برنامه نویس؛ هر آنچه که کارجویان باید بدانند</title>
                <link>https://virgool.io/Compile/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%AC%D8%A7%D9%85%D8%B9-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%B4%D8%BA%D9%84-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D9%87%D8%B1-%D8%A2%D9%86%DA%86%D9%87-%DA%A9%D9%87-%DA%A9%D8%A7%D8%B1%D8%AC%D9%88%DB%8C%D8%A7%D9%86-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%A8%D8%AF%D8%A7%D9%86%D9%86%D8%AF-jmto8rptpzzr</link>
                <description>با افزایش روزافزون کاربرد نرم‌افزار‌های کامپیوتری و اپلیکیشن‌ها در زندگی ما، نیاز سازمان‌ها به جذب افراد فعال در شغل برنامه نویس به سرعت در حال افزایش است. در واقع، در بازار کار برنامه نویسی، برخلاف بازار کار بسیاری از مشاغل دیگر، تعداد فرصت‌های شغلی گاهی بیشتر از تعداد کارجویان است. میزان تقاضای بالا برای جذب برنامه نویس، حقوق برنامه نویس‌ها را افزایش داده است.در این مقاله می‌خواهیم به معرفی شغل برنامه نویسی و بررسی بازار کار آن، وظایف، مسئولیت‌ها و مهارت‌های برنامه نویسان حرفه‌ای، مزیت‌های انتخاب شغل برنامه نویس و دستمزد برنامه‌نویسان بپردازیم. اگر می‌خواهید بدانید که برنامه نویس کیست، شغل برنامه نویسی چیست و چگونه می‌توان در این زمینه درآمدزایی کرد، در ادامه با ما همراه باشید.دلیل وجود فرصت‌های استخدامی زیاد در شغل برنامه نویس چیست؟امروزه، زندگی ما بیش از هر زمان دیگری به فضای مجازی و ابزار‌های دیجیتال گره خورده است. به طوری که برای انجام بسیار از امور روزمره خود، وابستگی زیادی به اینترنت و ابزار‌های نرم‌افزاری مختلف داریم.با این حال، باید بدانید که روند دیجیتالی و مجازی شدن زندگی انسان در آغاز راه است و پیش‌بینی می‌شود که در دهه پیش رو و تا سال ۲۰۳۰، شاهد تحولی عظیم در فناوری‌های دیجیتال باشیم. در واقع، ما اکنون در اوج سومین انقلاب صنعتی، یعنی انقلاب دیجیتال قرار داریم.امروزه، همه کسب‌وکار‌ها و حتی خدمات دولتی در حال دیجیتالی شدن هستند و بنابراین، نیاز به جذب فارغ‌التحصیلان و افراد فعال در رشته برنامه نویسی، بیش از هر دوره دیگری در تاریخ احساس می‌شود. با وجود افزایش اهمیت دانش برنامه نویسی، هنوز مسیری طولانی تا عمومی شدن زبان‌های برنامه نویسی و توسعه یک یا چند زبان برنامه نویسی جامع پیش رو داریم. بنابراین، حداقل تا چند نسل دیگر، برنامه نویسی به صورت یک دانش تخصصی باقی خواهد ماند و حقوق برنامه نویس، به عنوان یک شغل تخصصی، همچنان بالاتر از اکثر مشاغل خواهد بود.مزایای شغل برنامه نویسهر کسی پیش از انتخاب شغل آینده خود باید جنبه‌های بسیار زیادی را در نظر بگیرد. هر شغلی، مزایا و معایب خاص خود را دارد. آشنایی با مزایا و معایب شغل برنامه نویسی به شما کمک می‌کند تا مسیر شغلی خود را آگاهانه‌تر انتخاب کنید. در این بخش می‌خواهیم تعدادی از فایده شغل برنامه نویسی را به شما معرفی کنیم.فرصت‌های شغلی زیادهمانطور که در ابتدای مقاله گفتیم، میزان تقاضا برای جذب افراد متخصص در شغل برنامه نویس، روزبه‌روز در حال افزایش است. برنامه نویسان هرگز بی‌کار نمی‌مانند و نیازی نیست که نگران آینده شغلی خود باشند. پیش‌بینی شده که بازار کار برنامه نویسی کامپیوتر و توسعه نرم‌افزار، از سال ۲۰۱۹ تا سال ۲۰۲۹، حدود ۲۲ درصد رشد داشته باشد.امکان دور کارییکی از بزرگترین مزیت‌های شغل برنامه نویس که باعث شده برنامه نویسان برخلاف بسیاری از افراد دیگر، در دوران همه‌گیری کووید-۱۹ بیکار نشوند، امکان دورکاری برنامه نویسی است. به همه دلیل، بسیاری از کارفرمایان، این روز‌ها اقدام به انتشار آگهی‌های جذب برنامه نویس دورکار می‌کنند. مزایای دورکاری در شغل برنامه نویس عبارت‌اند از:ساعت کاری منعطف: یکی از مهم‌ترین مزیت‌های دورکاری این است که در بسیاری از موارد، ساعت کاری دست خود برنامه نویس است و نیازی به هماهنگی با ساعت کاری کارفرما ندارد.کاهش هزینه‌ها و خطرات رفت و آمد: برنامه نویسی را می‌توانید در منزل خود و بدون نیاز به رفت و آمد‌های پرهزینه و پرخطر به محل کار انجام دهید.راحتی و افزایش کارایی: کار کردن در محیط آرامش‌بخش و راحت منزل، با لباس‌های راحت و گوش دادن به موزیکی که دوست دارید، بسیار لذت‌بخش‌تر از کار کردن در یک شرکت یا سازمان است و همین مزیت، کارایی شما را بسیار بالا می‌برد.امکان یافتن شغل برنامه نویس بدون تحصیلات دانشگاهیشاید این سؤال در ذهنتان به وجود آمده باشد که شغل برنامه نویسی در کدام رشته است. کارفرمایان در انتخاب برنامه نویس، به ویژه جذب برنامه نویس تازه کار برای برخی از مشاغل سطح پایین برنامه نویسی که معمولاً شامل انجام بخش کوچکی از یک پروژه برنامه نویسی گسترده هستند، مدرک تحصیلی از شما نمی‌خواهند. حتی افرادی که سن پایینی داشته باشند، می‌توانند از چنین مشاغلی کسب درآمد کنند.اگر مهارت برنامه نویسی شما خیلی بالا باشد، حتی می‌توانید بدون داشتن تحصیلات و تنها با ارائه نمونه‌کار‌های خود به کارفرما، جایگاه‌ شغلی نسبتاً خوبی را تصاحب کنید. البته ممکن است که از نظر فارغ‌التحصیلان رشته‌های مرتبط، این مورد یکی از معایب شغل برنامه نویس باشد.امکان فریلنسینگبرای اینکه از دانش و مهارت برنامه نویسی خود کسب درآمد کنید، نیازی نیست که حتماً با جذب شدن در یک شرکت یا سازمان، زیر بار تعهد بروید و می‌توانید خیلی راحت، به صورت پروژه‌ای و فریلنسینگ، دورکاری برنامه نویسی را به عنوان شغل اصلی یا شغل دوم خود انجام دهید.امکان اشتغال در زمان تحصیلیکی از مزایای شغل برنامه نویس که راه پیشرفت را برای شما هموار می‌کند، امکان اشتغال حین تحصیل است. از آن جایی که پیدا کردن کار‌های پروژه‌ای و پاره‌وقت در گروه شغلی برنامه نویسی کار راحتی است، بسیاری از دانشجویان رشته‌های مرتبط، در دوره تحصیلشان، برنامه نویسی را به صورت پروژه‌ای شروع می‌کنند.امکان راه‌اندازی کسب‌وکار خودبرنامه نویسان برای اینکه از مهارت خود کسب درآمد کنند، نیازی به استخدام شدن ندارند. یک برنامه نویس می‌تواند نرم‌افزا‌ها و اپلیکیشن‌های کاربردی تولید کرده و به فروش برساند یا برای یک کسب‌و‌کار در حوزه تجارت الکترونیک اپلیکیشن طراحی کند. البته چنین کاری نیازمند ایده‌های بسیار خلاقانه و پشتوانه مالی است. زیرا تا زمانی که نرم‌افزار شما به مرحله فروش نرسد یا کسب و کار الکترونیک شما به درآمدزایی نرسد، هیچ منبع درآمدی ندارید؛ مگر اینکه همزمان با انجام پروژه، شغل دیگری داشته یا به فریلنسینگ مشغول باشید.تحصیلات مورد نیاز برای ورود به شغل برنامه نویسبا اینکه تمامی زبان‌های برنامه نویسی نیازمند دانشی پایه‌ای هستند، اما برای تبدیل شدن به یک برنامه نویس، باید مهارت کدنویسی داشته باشید. با این حال، همانطور که پیش از این گفتیم، برای اینکه به یک برنامه نویس حرفه‌ای تبدیل شوید، نیاز به تحصیلاتی مرتبط در این حوزه ندارید. از سوی دیگر، بسیاری از کارفرمایان هنگام جذب برنامه نویس، تحصیلات را در نظر می‌گیرند و ممکن است مدرک تحصیلی در تعیین حقوق برنامه نویس مؤثر باشد.برخی از کارفرمایان، برای جذب برنامه نویس تازه‌کار به عنوان کارآموز و سپردن بخش کوچکی از یک پروژه نرم‌افزاری، مدرک تحصیلی از شما نمی‌خواهند و تنها کافی است با نمونه کار‌های خود یا به هر طریق دیگری، به آن‌ها نشان دهید که می‌توانید به زبانی که مد نظر کارفرما است، برنامه نویسی کنید. داشتن مدرک لیسانس در رشته‌هایی مثل علوم کامپیوتر، فناوری اطلاعات و مهندسی نرم‌افزار برای ورود به بسیاری از مشاغل کافی است.مهارت‌های مورد نیاز در شغل برنامه نویسمهم‌ترین عاملی که یک سازمان در جذب برنامه نویس و تعیین درآمد برنامه نویسی به آن توجه می‌کند، مهارت‌های برنامه نویس است. در این جا می‌خواهیم مهارت‌هایی که هر برنامه نویسی باید داشته باشد را به شما معرفی کنیم. به یاد داشته باشید که برخی از این مهارت‌ها، جزء ویژگی‌های شخصیتی شما هستند و نمی‌توان آن‌ها را به سادگی از طریق تمرین کردن، تقویت کرد. البته بعضی از مهارت‌های مورد نیاز برنامه نویس، مانند مدیریت زمان، قابل تمرین کردن و یادگیری هستند.انگیزهمهم‌ترین عاملی که در پیشرفت برنامه نویس نقش دارد، انگیزه است. صرف نظر از تجربه شما، همواره چیز‌هایی جدیدی در برنامه نویسی وجود دارند که می‌توانید یاد بگیرید و همیشه روش‌های بهتری برای بهینه‌سازی کد‌ها موجود است. توانایی انگیزه دادن به خود، شما را در مسیر یادگیری و اکتشاف که در شغل برنامه نویس ضروری است، حفظ می‌کند.توجه به جزئیاتمهارت دیگری که کارفرمایان در فرآیند جذب و استخدام در شغل برنامه نویس به آن اهمیت می‌دهند، توجه برنامه نویس به جزئیات است. یک برنامه نویس نباید به ابزار‌های ویرایشی برای تصحیح خطا‌هایش متکی باشد. زیرا حتی اشتباهات کوچک در کدنویسی می‌توانند اثرات قابل توجهی روی خروجی داشته باشند. بنابراین، یکی از مهم‌ترین ویژگی‌های یک برنامه نویس موفق، توجه به جزئیات است.منظم بودنبرنامه نویسی، حتی برای باتجربه‌ترین افراد نیز می‌تواند کار دلهره‌آوری باشد. با این حال، اگر در تمامی جنبه‌های کاری خود منظم باشید و به صورت سازمان‌یافته عمل کنید، می‌توانید کار‌های پیچیده را به بخش‌های کوچک‌تری تقسیم کنید که راحت‌تر می‌توان آن‌ها را مدیریت کرد.مهارت‌های ارتباطیداشتن مهارت‌های ارتباطی مناسب در مصاحبه کاری اهمیت زیادی دارد. ممکن است این سؤال برای شما پیش بیاید که با اینکه بسیاری از سازمان‌ها به دنبال جذب افراد فعال در شغل برنامه نویس به صورت دورکاری هستند، دلیل توجه واحد منابع انسانی سازمان‌ها به مهارت‌های ارتباطی چیست؟ممکن است سازمانی که شما را به عنوان برنامه نویس جذب می‌کند، یک شرکت تخصصی برنامه نویسی نباشد و تنها نیاز به یک کار نرم‌افزاری و پشتیبانی از آن داشته باشد. بنابراین، ممکن شما تنها برنامه نویس یا یکی از چند برنامه نویس شرکت باشید. در چنین مواردی، شما باید بتوانید کار خود را به زبان ساده برای کارفرمای خود که احتمالاً چیزی از برنامه نویسی نمی‌داند، توضیح دهید.علاوه بر این، برنامه نویسان باید به طور پیوسته با یکدیگر در ارتباط باشند تا دانش خود را با هم رد و بدل کنند. از سوی دیگر، هدف از برنامه نویسی، ساخت نرم‌افزار‌ها و اپلیکیشن‌هایی است که قرار است دیگران با آن‌ها کار کنند. به این سه دلیل، هر برنامه نویس باید صرف‌نظر از دورکاری، مهارت‌های ارتباطی خوبی داشته باشد.خلاقیتیکی از مهارت‌هایی که شانس یافتن شغل برنامه نویس را بالا می‌برد، خلاقیت است. شما باید قادر باشید راه‌هایی جدید و بهینه‌تر برای مسائل مختلف طراحی کنید. همه ما نوشتن بلد هستیم، اما آیا همه ما می‌توانیم شکسپیر یا همینگوی باشیم؟ دانستن زبان برنامه نویسی به این معنی نیست که شما برنامه نویس هستید. برنامه نویس کسی است که می‌تواند با خلاقیت خود، کد‌های بهینه و کارآمد بنویسد.مدیریت زمانشما به عنوان یک برنامه نویس، چه حضوری و تمام وقت و چه فریلنسر، باید بتوانید کار را در کمترین زمان ممکن به کارفرما تحویل دهید. معمولاً به کارفرما‌ها توصیه می‌شود که سر برنامه نویس را خیلی شلوغ نکنند تا او بتواند در آرامش خاطر، بهترین و بهینه‌ترین کد‌ها را بنویسد. اما شما نیز به عنوان برنامه نویس باید بتوانید با مدیریت صحیح زمان، پروژه‌ها را در زمانی که انتظار می‌رود، تکمیل کنید.حل مسألهیکی از اصلی‌ترین مهارت‌هایی که هر برنامه نویس باید داشته باشد، توانایی حل مسأله است. برنامه نویس نباید از مشکلات و چالش‌ها بترسد، بلکه باید با آن‌ها مواجه شود و سعی کند آن‌ها را بیابد. برنامه نویس باید بتواند از منطق، تحلیل و داده‌ها برای یافتن راه‌ حل مشکلات استفاده کند. بنابراین، یک برنامه نویس متخصص باید مهارت‌های ریاضیاتی خوبی داشته باشد.شرح وظایف در شغل برنامه‌‎ نویسکارفرمایان، اهداف مختلفی از جذب برنامه نویس دارند. مسئولیت‌ها و وظایف شغلی برنامه نویس، از شغلی به شغل دیگر بسیار متفاوت است. با این حال، ما در این بخش رایج‌ترین مسئولیت‌های شغلی برنامه نویسان را به شما معرفی می‌کنیم.نوشتن و به روزرسانی‌کردن برنامه‌های نرم‌افزاری برای انجام کار‌های مختلفتست کردن برنامه و رفع خطا‌های آنآزمایش کردن نرم‌افزار‌ها برای اطمینان از عملکرد صحیح آن‌ها و اجرای درست دستورالعمل‌هاکامپایل کردن (compiling) و مستند‌سازی توسعه نرم‌افزار و اصلاحات انجام‌شده و کامنت گذاشتن در کد‌هانوشتن دستورالعمل‌ها برای هدایت کاربرانتقسیم کار، هماهنگ‌سازی و بازبینی فعالیت‌های تیم برنامه نویسی در جایگاه‌های شغلی مدیریتیآموزش برنامه نویسی به کارآموزانمشورت با تیم‌های مدیریتی، مهندسی و فنی برای مشخص‌شدن نیاز‌ها و مشکلات نرم‌افزاری سازمان و پیشنهاد دادن راه‌ حل‌هابازبینی، اصلاح و گسترش برنامه‌های وجود برای افزایش کارایی آن‌هانوشتن، تحلیل کردن و بازنویسی برنامه‌ها مطابق با جریان کارتحلیل کردن برنامه‌ها و کنترل استفاده از نرم‌افزا‌های کامپیوتری به عنوان برنامه نویس سیستمیمشورت با اپراتور‌های کامپیوتری یا آنالیزور‌های سیستمی جهت یافتن و برطرف کردن مشکلات در اجرای برنامه‌های کامپیوتریدرآمد شغل برنامه نویسدرآمد شغل برنامه نویسی در ایران و سایر کشورها به عوامل متعددی بستگی دارد. بسیاری از کارفرمایان در فرصت‌های استخدامی شغل برنامه نویس، حقوق برنامه نویس را اعلام نمی‌کنند و هنگام مصاحبه، حقوق مد نظرتان را از شما می‌پرسند. شما زمانی می‌توانید بهترین پاسخ را به این سؤال بدهید که از بازار کار برنامه نویسی و سطح دستمزد‌ رایج برنامه نویسان اطلاع داشته باشید.حقوق مشاغل برنامه نویسی حضوری با حقوق دورکاری برنامه نویسی تفاوت چندانی ندارد. اما بسیاری از فریلنسر‌ها، درآمد پایین‌تری نسبت به برنامه نویسانی دارند که برای سازمان یا شرکت خاصی کار می‌کنند. حقوق زبان‌های برنامه نویسی مختلف نیز با هم دیگر تفاوت دارد. تمامی این جزئیات را می‌توانید در لینک فوق ببیند.پیش از درج حقوق درخواستی در رزومه و ورود به جلسه مصاحبه، حتماً حقوق متوسط را با در نظر گرفتن سابقه‌کاری، تحصیلات و زبان برنامه نویسی خود بدانید تا با درخواست حقوق بالاتر از متوسط، شانس خود را برای یافتن شغل پایین نیاورید.بازار کار شغل برنامه نویس برای کدام زبان‌ها وضعیت بهتری دارد؟چرا برنامه نویسی بازار کار خوبی دارد؟ حدود ۶۰۰ زبان برنامه نویسی وجود دارند. نیاز و محبوبیت زبان‌های برنامه نویسی، سال به سال تغییر می‌کند. به علاوه، زبان‌های برنامه نویسی جدید و دارای ویژگی‌های جذاب نیز خلق می‌شوند. اگر تازه در آغاز راه برنامه نویسی باشید، ممکن است این سؤال برای شما پیش بیاید که فرصت‌های استخدامی شغل برنامه نویس برای کدام زبان برنامه نویسی بیشتر است و شما باید کدام زبان برنامه نویسی را بیاموزید؟همیشه یادگیری یک زبان برنامه نویسی نوعی سرمایه‌گذاری است. اگر شما یک برنامه نویس باتجربه باشید یا چندین زبان برنامه نویسی را بدانید، یادگیری یک زبان جدید برای شما چندان دشوار نیست. اما اگر تازه برنامه نویسی را شروع کرده باشید و بخواهید اولین یا دومین زبان برنامه نویسی خود را یاد بگیرید، بهتر است که یکی از زبان‌های برنامه نویسی اصلی و پرتقاضا را بیاموزید. در اینجا می‌خواهیم مهم‌ترین زبان‌های برنامه نویسی را بر اساس وضعیت بازار کار آن‌ها رتبه‌بندی کنیم.۱- پایتونبا در نظر گرفتن تمامی رنکینگ‌های شناخته‌شده، ترند‌های صنعتی و تعداد آگهی‌های جذب برنامه نویس پایتون، این زبان برنامه نویسی، از نظر بازار کار شغل برنامه نویس در رتبه اول قرار می‌گیرد. در حال حاضر، پایتون یک زبان برنامه نویسی چندمنظوره است که در بسیاری از حوزه‌های توسعه نرم‌افزار کاربرد دارد و شغل برنامه نویس پایتون، یکی از پردرآمدترین شغل های برنامه نویسی است.در سال‌های اخیر، در ایالات متحده آمریکا، پایتون در میان زبان‌های برنامه نویسی دیگر بیشترین تقاضا را داشته و از نظر درآمدی، در رتبه سوم بوده است. جالب است که برنامه نویسان کم تجربه‌ای که زبان برنامه نویسی پایتون می‌دانند، در مقایسه با برنامه نویسان کم‌تجربه زبان‌های دیگر، بیشترین درآمد را دارند.۲- جاوا اسکریپتبعد از پایتون، بیشترین آگهی‌های استخدامی در شغل برنامه نویس، متعلق به زبان برنامه نویسی جاوا اسکریپت است. این زبان برنامه نویسی، از نظر سهمش در آگهی‌های جذب برنامه نویس در سال ۲۰۲۰ در آمریکا، در رتبه سوم و از نظر حقوق برنامه نویس در رتبه چهارم قرار دارد. برنامه نویسان کم‌تجربه جاوا اسکریپت از نظر درآمدی در میان دیگر برنامه نویسان، در سطح متوسط قرار دارند.۳- جاوادر سال‌های اخیر، بخشی از بازار کار جاوا به دلیل توسعه‌ زبان‌های برنامه نویسی دیگر مانند جاوا اسکریپت و پایتون از دست رفته است؛ زیرا به دلیل حجم بالایش، برای فناوری‌های ابری مناسب نیست. با این حال، جاوا با نسخه GraalVM initiative در حال سازگاری خود با فناوری‌های ابری است.این زبان برنامه نویسی، هنوز هم انتخاب اول برای کاربرد‌های شرکتی و سازمانی است و به همین دلیل، تعداد زیادی از آگهی‌های استخدام در شغل برنامه نویس، به جاوا تعلق دارد. این زبان برنامه نویسی، در سال ۲۰۲۰ از نظر میزان تقاضا در ایالات متحده آمریکا در رتبه دوم و از نظر درآمدی، در رتبه ششم قرار داشت. برنامه نویسان جاوا برای اینکه به درآمد متوسطی در میان سایر برنامه نویسان برسند، باید چند سال تجربه داشته باشند.با وجود اینکه سه زبان برنامه نویسی فوق، بیشترین آگهی‌های جذب برنامه نویس را به خود اختصاص می‌دهند، اما زبان‌های برنامه نویسی دیگری مثل C#، C، C++، PHP، Objective-C و سوییفت نیز بازار کار داغی دارند. بیشترین درآمد در میان زبان‌های برنامه نویسی به زبان برنامه نویسی Objective-C تعلق می‌گیرد و Scala در رتبه دوم است.همانطور که پیش از این گفتیم، زبان برنامه نویسی پایتون، در رتبه سوم از نظر درآمدی قرار دارد. در مجموع می‌توان گفت که به دلیل تعداد بالای آگهی‌های جذب برنامه نویس پایتون، این زبان برنامه نویسی بهترین گزینه برای یادگیری و ورود به بازار کار است.جمع‌بندیشغل برنامه نویس یکی از مشاغلی است که روز به روز نیاز به آن بیشتر می‌شود. همه سازمان‌ها، شرکت‌ها و کسب‌وکار‌های کوچک و بزرگ، برای جا نماندن از جریان انقلاب دیجیتال، نیازمند استخدام برنامه نویس هستند. نیاز بالا به برنامه نویسان، سطح حقوق برنامه نویس را افزایش داده است.وظایف و مسئولیت‌های شغلی برنامه نویسی از شغلی به شغل دیگر متفاوت است. اما به طور کلی، کار اصلی برنامه نویس، کدنویسی و اصلاح کد‌های نرم‌افزار‌ها و اپلیکیشن‌ها، نظارت بر عملکرد آن‌ها و عیب‌یابی و به‌روزرسانی برنامه‌ها است. زبان‌های برنامه نویسی متعددی وجود دارند، اما نیاز به استخدام برنامه نویس پایتون، بیش از دیگر زبان‌های برنامه نویسی است و البته این زبان برنامه نویسی، درآمد مناسبی هم دارد. همچنین در صورت تمایل به مهاجرت کاری، می‌توانید به عنوان برنامه نویس به کشور‌های پیشرفته از جمله کانادا، آمریکا، آلمان و… مهاجرت کنید.کانال روبیکا من : https://rubika.ir/artinkarimian3</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Mon, 11 May 2026 12:20:22 +0330</pubDate>
            </item>
                    <item>
                <title>21 راه ساده برای پولدار شدن با تاثیر فوق العاده</title>
                <link>https://virgool.io/@artinkarimian/21-%D8%B1%D8%A7%D9%87-%D8%B3%D8%A7%D8%AF%D9%87-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%BE%D9%88%D9%84%D8%AF%D8%A7%D8%B1-%D8%B4%D8%AF%D9%86-%D8%A8%D8%A7-%D8%AA%D8%A7%D8%AB%DB%8C%D8%B1-%D9%81%D9%88%D9%82-%D8%A7%D9%84%D8%B9%D8%A7%D8%AF%D9%87-zovhjfxhw8yh</link>
                <description>21 روش ساده اما فوق العاده کاربردی وجود دارد که برای پولدار شدن بسیار مناسب است و تاثیر فراوانی در راه رسیدن به این مهم دارد.چند گام تا پولدار شدنکمپانی ویکی هو مجموعه ای از متخصصان در زمینه های مالی را در اختیار دارد و راههای ساده برای پولدار شدن و راه های ذخیره و در بعضی زمینه ها سرمایه گذاری را ارائه می دهد که در ادامه بخشی از ساده ترین راههای پولدار شدن را می خوانید. لازم نیست حتما مرد و یا یک خانم شاغل و موفق باشید نکاتی که در بخش موفقیت نمناک می خوانید نکاتی ساده اما پایه ی اصلی پولدار شدن برای هر کسی است.1. ذخیره کردن را آغاز کنید:این بدان معنا نیست که پولهای اضافی خود را جمع و ذخیره کنید بلکه قانون اصلی این نخریدن لوازم اضافه و جلوگیری از ولخرجی است. یعنی زمانی که به بیرون از خانه میروید و در محل عبور خود به فروشگاه کفش و یا عطر فروشی میرسید آن را ندید گرفته و از کنارش بی توجه عبور کنید. نکته ی ساده و البته مهم دیگر ذخیره کردن پولهای خورد است برای خود قلکی تهیه کرده و مختص پولهای با ارزش پایین تر قرار دهید بعد از مدتی خواهید دی که چقدر کمک کننده است و یا اگر پول درشت دارید تا حد امکان آن را خورد نکنید تا بستر خرج کردن آن فراهم نشود.2. پولدار شدن با بودجه تعیین کردن برای خود:اول یا آخر هرماه هر زمانی که شما پول مشخصی را دریافت میکنید همان موقع برایش برنامه ریزی کنید و برای خود حتی نقطه ی تشویق هم بگذارید که اگر بهتر از حد انتظار در دخل و خرج تان عمل کردید می توانید به تیک های موفقیت خود اضافه کنید.3. همیشه خواهان بهترین ها نباشید:خریدن اجناس با کیفیت ضعیف نه تنها اقتصادی نیست بلکه کاملا به ضرر است پس این بخش به این معنا نیست که اجناس ارزان بخرید اتفاقا برعکس اگر اجناس با کیفیت اما کمتر بخرید اقتصادی تر است. اما گاهی کیفیت حرف اول را نمی زند مثلا اگر برای خرید یک ماشین برنامه دارید و پول شما برای خرید یک ماشین مدل بالا و شیک کافی نیست بهتر است فکر قرض کردن و گرفتن وام را نکنید و ماشینی متناسب و به اندازه ی پولتان بخرید.4. در مصرف انرژی ها صرفه جویی کنید:شعاری است که همیشه از طریق تلویزیون و رادیو می شنویم اما همیشه فکر می کنیم که به نفع کس دیگری به جز خود ما است اما اگر دقت کنید پرداخت کننده ی همین قبوض خود ما هستیم و اگر کمبودی در انرژی ها به وجود آید قیمت بالای آنها را هم ما باید بپردازیم.5. در استفاده از کارت اعتباری هوشیار باشید:زمانی که پول شما داخل کیف پول شماست حواستان به این هست که چه مقدار از پولتان خرج و چه مقدار از آن باقی مانده است اما زمانی که کارت اعتباری دارید قبول کنید که بی احتیاط تر خرج می کنید و این اصلا به نفع شما نیست.6. برای ثروتمند شدن آگاهانه پول خرج کنید:روی هدفتان تمرکز کنید و فکر و ذکرتان را به آن اختصاص دهید اینگونه می توانید از وسوسه خرید یک وسیله غیرضروری و هوس آن نجات پیدا کنید و پولتان را متفکرانه و هوشمندانه خرج کنید تا به هدفتان نزدیک شوید.7. خدمت به مردم با ارائه یک محصول و خدمات خوب:یکی از راه هایی که اکثر ثروتمندان خودساخته طی کرده اند تا به ثروت برسند، خدمت به مردم است. شما با ارائه خدمات به مردم می توانید در ازای این خدمت پول دریافت کنید، هر چه خدمتی که ما ارائه می کنیم با ارزش تر باشد قطعا پول بیشتری به سمت می آید.8. سرمایه گذاری برای پولدار شدن:یکی از بهترین راه ها برای ثروتمند شدن سرمایه گذاری و کار کشیدن از پول است پس به جای خرید وسایل پر زرق و برق و چشم و هم چشمی با دیگران پولتان را با سرمایه گذاری های مناسب  نظیر خرید سهام، اوراق قرضه و دیگر سرمایه گذاری های قانونی و سودآور- چند برابر نمایید و یا اینکه پولتان در بازار مسکن و یا در طلا و حتی ارز سرمایه گذاری کنید.9. راه اندازی کسب و کار برای پولدار شدن:راه اندازی کسب و کار برای خود بهترین روش برای کسب ثروت است زیرا وقتی صاحب کسب و کار خودتان شدید، بعد از رسیدن به سوددهی مناسب، می توانید با آرامش خیال در زمینه های دیگر هم سرمایه گذاری کنید. این قدم منطقی ترین روش برای پولدار شدن است اما کمی زمان خواهد برد.10. قبل از شروع، بیاموزید:قبل از انجام هر کاری، حتی با دوستان و آشنایان خود قرار داد بسته و در مورد جزئیات به توافق برسید زیرا ممکن است آشنایان شما به دلیل نزدیکی به شما هم اندازه خدمت ارائه شده به آنها، به شما پول نپردازند.11. هدف خود را یافته و برای آن برنامه ریزی کنید:اگر در فکر پولدار شدن هستید باید هدف شما خاص و مشخص شده باشد. شما با یافتن هدفتان و تمرکز بر روی آن بی نظم و شلختگی و بی برنامگی را از زندگی خود دور می کنید و راه های رسیدن به این هدف را سرمشق زندگی تان خواهید کرد. مثلا اگر هدفتان اندوختن پول باشد از خرج های اضافی چشم پوشی می کنید و با درایت بیشتر پول خرج خواهید نمود.12. کاری که دوست دارید را انجام دهید:شما برای پولدار شدن و رسیدن به موفقیت باید عاشق کارتان باشید، اگر بیش از حد به کارتان و هدفتان علاقه نداشته و روی آن ها تمرکز نداشته باشید مسیر شما برای موفقیت و پولدار شدن بسیار طولانی و شاید هم بی پایان خواهد بود. بخش موفقیت نمناک بر این باور است که اشتیاق به کار را نمی توان به صورت آگاهانه بالا برد و اگر عاشق کارتان نباشید به سختی می توان دیدگاه شما در مورد آن را تغییر دهید. اگر هم نتوانید آن کار را رها کنید باید دلیلی برای دوست داشتن و ادامه کار خود پیدا کنید.13. پرداخت مالیات کمتر برای پولدار شدن:بعد از به دست آوردن پول شما باید بخشی از آن را به عنوان مالیات به دولت بپردازید. شما می توانید راه پرداخت کمتر مالیات را بیابید و این کار را درست و به موقع انجام دهید.14. هزینه های کوچک را مدیریت کنید:نظارت بر هزینه ها می تواند سود شما را افزایش قابل توجهی بدهد پس حتی هزینه های کوچک را هم مدیریت نمایید.15. برای پولدار شدن قرض نگیرید!برای پولدار شدن حتی برای خرید مسکن و یا سرمایه گذاری نیز پول قرض نگیرید. قرض گرفتن آسان است ولی پس دادن آن بسیار سخت است پس هیچگاه پول قرض نگیرید.16. آموخته های اشتباهتان را دور بریزید:این باور را که افراد ثروتمند آدم های بدی هستند و افراد فقیر انسانهای با اخلاق و خوبی هستند را دور بریزید و یا این باور غلط که پول چرک کف دست است، پول علف خرس است، پول جن و من بسم الله، پول زیر پای فیل، پول خوشبختی نمی آورد و... را تغییر دهید. دنیای بیرونی شما عوض نمیشود مگر اینکه افکارتان را تغییر دهید.17. برای پولدار شدن افکارتان را تغییر دهید:پول یعنی رفاه بیشتر، آرامش، فرصت بیشتر و …اصولا در تفکر ثروت، ناآرامی و عدم امنیت جایگاهی ندارد پس اینکه جمع کردن و خرج کردن آن اغلب همراه اضطراب و احساس نا امنی است را دور بریزید.18. پول و آینده زندگی شما برای هیچ کسی غیر از خودتان اهمیت ندارد:این را همیشه بدانید که دلسوزتر از خودتان در زندگی تان وجود ندارد فقط خودتان باید برای آینده و پولتان اهمیت دهید پس برای علاقه مندی ها و مهارت های خود ارزش بیشتری قایل شوید.19. درآمد خود را چند گانه کنید:یکی از راه های پولدار شدن استفاده از فرصت های چندگانه شغلی است. برای افزایش در آمد خود، راه های دیگری را پیدا کنید که بتواند با درآمد اصلی و قبلی شما ادغام شود تا از طریق اضافه کردن درآمدهای زنجیره ای به درآمد های سابق، پولدار شوید.20. برای پولدار شدن با دیگر افراد موفق همراه شوید:راهی فوق العاده برای حرکت رو به رشد شما به سوی موفقیت مالی معاشرت با افراد موفق است. پای صحبت این افراد بنشینید و از تجربیاتشان بهره ببرید و در زندگیتان از این تجربیات استفاده نمایید تا به موقعیت مالی خوبی راه یابید.21. ریسک پذیر بودن در زندگی برای پولدار شدن:فقرا،سخت برای پول کار می کنند اما پول برای ثروتمندان سخت کار می کند پس اگر می خواهید زندگیتان عوض شود، ریسک کنید و بگذارید پولتان برای شما کار کند.کانال روبیکا من : https://rubika.ir/artinkarimian3</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Sun, 10 May 2026 19:32:12 +0330</pubDate>
            </item>
                    <item>
                <title>چجوری پشت صفحه ی کامپیوتر والپیپر متحرک بگذاریم.</title>
                <link>https://virgool.io/@artinkarimian/%DA%86%D8%AC%D9%88%D8%B1%DB%8C-%D9%BE%D8%B4%D8%AA-%D8%B5%D9%81%D8%AD%D9%87-%DB%8C-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-%D9%88%D8%A7%D9%84%D9%BE%DB%8C%D9%BE%D8%B1-%D9%85%D8%AA%D8%AD%D8%B1%DA%A9-%D8%A8%DA%AF%D8%B0%D8%A7%D8%B1%DB%8C%D9%85-zkvm0rekbcrf</link>
                <description>خب اول برنامه Lively Wallpaper را از طریق لینک زیر نصب کنید .https://www.yasdl.com/277424/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-lively-wallpaper.htmlخب حالا پس از نصب ، رمز را کپی و فایل را استخراج و حالا برنامه را باز کنید.برنامه را از شورت کات باز کنید یعنی از جایی که نصب کردید شورت کات بگیرید .حالا وارد برنامه میشوید و مجوز های لازم را به آن میدهید .حالا شما میتوانید مثل عکس زیر هم از صفحات پیشفرض استفاده کنید و هم خودتان بارگذاری کنید .خب حالا شما میتوانید دانلود کنید و داخل برنامه بارگذاری کنید و اجرا کنید.روبیکا من : https://rubika.ir/artinkarimian3اگر ایده یا پروژه ای دارید در نظرات بگویید .</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Sun, 10 May 2026 09:30:20 +0330</pubDate>
            </item>
                    <item>
                <title>یو فو ها یا بشقاب پرنده ها چی هستند و ما از کجا میدانیم وجود دارن ؟</title>
                <link>https://virgool.io/@artinkarimian/%DB%8C%D9%88-%D9%81%D9%88-%D9%87%D8%A7-%DA%86%DB%8C-%D9%87%D8%B3%D8%AA%D9%86%D8%AF-%D9%88-%D9%85%D8%A7-%D8%A7%D8%B2-%DA%A9%D8%AC%D8%A7-%D9%85%DB%8C%D8%AF%D8%A7%D9%86%DB%8C%D9%85-%D9%88%D8%AC%D9%88%D8%AF-%D8%AF%D8%A7%D8%B1%D9%86-veoyzrmipwkw-veoyzrmipwkw</link>
                <description>یوفوها چه چیزی هستند؟این پرسش که یوفوها چه چیزی هستند، از اساس پرسش نادرستی است. این اشیا از این نظر یوفو یا «اشیا ناشناس پرنده» نامیده می‌شوند که ناشناسند و هیچکس نمی‌تواند چیستی آن‌ها را توضیح دهد. البته در حال حاضر پنتاگون و ناسا به جای عبارت یوفو، از اصطلاح یواِی‌پی (UAP) به عنوان خلاصه عبارت «پدیده‌ هوایی ناشناخته» (unidentified aerial phenomena) برای توضیح استفاده می‌کنند. همچنین در برخی گزارش‌ها از آن‌ها به عنوان «پدیده‌های غیرعادی غیرقابل توضیح» (unexplained anomalous phenomena) نام برده شده است.از سال ۱۹۴۷ خلبانان آمریکایی بارها مدعی شده‌اند که این اشیا مرموز را که با شتاب بی‌نظیر حرکت می‌کنند دیده‌اند. در سال‌های اخیر برای توضیح این پدیده‌ها، گزارش‌های غیر علمی زیادی منتشر شده که ماهیت آن‌ها را غیرطبیعی و به بیرون از زمین نسبت می‌دهد. با این‌حال دانشمندان چندان به این خط داستانی علاقه‌مند نیستند. آن‌ها به دنبال تائید شواهد وجود حیات میکروبی در سیاره‌های دور دست هستند؛ نه این‌که مشابه فیلم‌های علمی_تخیلی، فضایی‌ها با سفینه‌های خود به سطح زمین برسند.گزارش‌های تخصصی مهمی وجود دارد که توضیح می‌دهد چرا ارتباط این پدیده‌ها به زیست فضایی اعتبار علمی ندارد. با این‌حال ادعای ماهیت غیرزمینی این پدیده‌ها همواره در میان جوامع طرفدار داشته است. به گزارش نشریه آمریکایی «فوربس» از زمانی که تاریخ ثبت شده، انسان‌ها به این فکر می‌کردند که آیا ما تنها هستیم یا نه. از آن‌جایی که بحث پیرامون وجود زیست در فضا از علایق مردم جهان محسوب می‌شود، ادعاهای مربوط به نسبت یوفوها و فضایی‌ها از جذابیت رسانه‌ای زیادی برخوردار است.در کنار همه این توضیحات، بر اساس گزارش پنتاگون در سال ۲۰۲۲ درباره تصاویری که خلبانان منتشر کرده بودند، هیچ شواهدی مبنی بر وجود زیست فرازمینی وجود ندارد. در واقع اگرچه صحت تصاویر تائید شده اما این تصاویر به هیچ‌وجه به معنی حضور موجودات فضایی (!) نیست.به گزارش نشریه آتلانتیک از یک اختر زیست‌شناس، زیست فرازمینی با توجه به جذابیت آن برای دانشمندان، از اساس چیزی نیست که بتوان آن‌را مخفی کرد. در نتیجه این فرضیه که ناسا به دروغ حیات فرازمینی را انکار می‌کند چندان میان دانشمندان معتبر نیست.بر اساس گزارش پنتاگون، در سال ۲۰۲۲ از مجموع ۵۱۰ تصویر دریافتی، ۱۷۱ مورد غیرقابل توضیح بوده؛ با این‌حال منشا غیرزمینی این پدیده‌ها هرگز اثبات نشده است. به گفته یک کارشناس اخترشناسی، «بیشتر پدیده‌های ناشناس که توسط ارتش گزارش شده‌اند، بالون‌های هواشناسی، هواپیماهای بدون سرنشین، هواپیماهای نظامی ناشناس یا مربوط به نقص‌های دوربین بوده‌اند.»اما در مورد ۱۷۱ مورد از پدیده‌هایی که تصویر آن بررسی شده، هیچ توضیح علمی وجود ندارد. ناسا در توضیحاتی در رابطه با این موارد گفته بود: «بیشتر رویدادها دارای توضیحات متعارف هستند. رویدادهایی باقی‌مانده که ما آنها را درک نمی‌کنیم، آن‌هم به این دلیل که در رابطه با آن‌ها داده‌هایی کم کیفیت وجود دارد که برای تشخیص ماهیت آن‌ها کافی نیست.»به عقیده دانشمندان، این پدیده‌ها «ناشناخته» تلقی می‌شوند چون تصاویر موجود چندان با کیفیت نیست که بتوان آن‌ها را تشخیص داد. بر این اساس یک پهپاد معمولی در فاصله زیاد از دوربین می‌تواند یک‌ یوفو تلقی شود! اما نگرش‌های دیگری هم در رابطه با این پدیده‌ها وجود دارد.دسته‌ای از طرفداران تئوری‌های توطئه، این پدیده‌ها را به پروژه‌های مخفی نظامی پنتاگون نسبت می‌دهند. گروهی از هواداران شبه علم نیز چنانچه گفته شد، ماهیت این موارد را به حیات غیرانسانی و فضایی مرتبط می‌دانند. در این بین، گروهی از کارشناسان نظامی این احتمال را مطرح کرده‌اند که ممکن است برخی اجسام دیده شده، انواعی از پرنده‌های نظامی چینی و یا روسی باشد که پنتاگون نتوانسته آن‌را تشخیص دهد. با این‌حال اسناد علمی هیچ‌کدام از احتمالات یاد شده را تائید نمی‌کنند. جلسه اخیر کنگره آمریکا نیز چیز جدیدی به اطلاعات موجود اضافه نکرده است.با این‌حال از آن‌جایی که این پدیده‌ها بارها در مرزهای هوایی ایالات متحده دیده شده‌اند، پنتاگون مسئول اصلی بررسی رویدادهای مربوط است زیرا اگر این پدیده‌ها مبدأیی زمینی داشته باشند، این مساله با امنیت ملی ایالات متحده ارتباط دارد و طبیعی است بیش از ناسا، به پنتاگون و امور ارتش این کشور مرتبط باشد. تمرکز پنتاگون بر این پدیده‌ها، حواشی مربوط به آن‌را بیش از آن‌که به علم مربوط شود، امنیتی کرده است.چه ارتباطی به امنیت بین‌الملل دارند؟چنانچه اشاره شد، شروع جنجال‌ها پیرامون یوفوها به اوایل جنگ سرد بازمی‌گردد؛ هم‌زمان با دکترین ترومن در سال ۱۹۴۷ که روند روابط شوروی و ایالات متحده را دچار دگرگونی کرد. این سال همچنین سال تشکیل شاخه مستقل نیروی هوایی برای ارتش آمریکا بود. برای شاخه تازه تاسیس هوایی، وجود اشیای ناشناسی در هوا، بهترین توجیه برای بقا و افزایش بودجه محسوب می‌شد.بر خلاف جنگ‌های قرن‌های پیشین که در آن با محوریت دولت‌های همسایه اروپا، توسعه نیروی زمینی و دریایی اولویت داشت، تقابل ایالات متحده و شوروی، با وجود فاصله این دو کشور، اهمیت جنگ‌های هوایی را افزایش داد. این روند در نهایت به مسابقه فضایی هم کشیده شد. از اساس تلاش‌های ناسا برای دسترسی به ماه و دیگر اجرام فضایی، نه با هدف توسعه علمی که به دلیل رقابت با شوروی مهم بود.تلاش‌های ناسا برای دسترسی به ماه و دیگر اجرام فضایی، نه با هدف توسعه علمی که به دلیل رقابت با شوروی مهم بودکشف فضا به این دلیل دنبال می‌شد که در رقابت‌های نظامی از آن استفاده شود. در واقع، فضای ماورای جو در ابتدا، زمین بازی جدیدی برای نبرد نظامی ابرقدرت‌ها بود. در نهایت نیز جنگ سرد، با هراس شوروی از تکمیل پروژه تحقیقاتی دولت آمریکا با عنوان جنگ ستارگان به پایان خود رسید. این پروژه قرار بود از فضا، موشک‌های اتمی شوروی را هدف قرار دهد.فضای جنگ سرد اهمیت کشف واقعیت یوفوها را افزایش داده بود. به گزارش فارن پالیسی «بشریت از ابتدای تاریخ ثبت‌شده، چیزهای عجیبی را در آسمان می‌دید، اما این تحولات [مربوط به جنگ سرد] بشقاب پرنده را به یک تهدید امنیت ملی تبدیل کرد.» ایالات متحده به دنبال آن بود تا نخستین کشوری باشد که به ماهیت این پدیده‌ها پی می‌برد. حتی بحث‌هایی مبتنی بر احتمال استفاده‌ از این پدیده‌ها برای توسعه نظامی مطرح شده بود. با این حال با پایان جنگ سرد، اهمیت این پدیده‌ها هم کاهش یافت.در حال حاضر، وضعیت مشابهی در جهان ایجاد شده که بار دیگر اهمیت ماهیت یوفوها را افزایش داده است. تقابل ایالات متحده و چین به اندازه‌ای رسیده که بسیاری آن‌را به جنگ سرد جدید نسبت می‌دهند. در وضعیت کنونی، اهمیت فضای ماورای جو بیشتر از گذشته مطرح شده است؛ مساله‌ای که ایالات متحده را وادار به تشکیل «نیروی فضایی» در سال ۲۰۱۹ کرد. بر این اساس، پیروزی در رقابت فضایی به اولویت کشورها تبدیل شده است. اگر مسابقه فضایی پیشین با دسترسی انسان به ماه پایان یافت، برخی انتظار دارند مسابقه فضایی قرن ۲۱ با کشف حیات فرازمینی یا رویدادهای خارق‌العاده دیگر به نقطه پایان برسد.بشقاب پرنده یا به انگلیسی UFO به یک فضاپیما گفته می شوداولین مشاهده بشقاب پرنده در سال ۱۹۴۷ اتفاق افتاد، زمانی که تاجری به نام کنت آرنولد ادعا کرد که گروهی ۹تایی از اشیاء عجیب با سرعت زیاد را در کنار کوه رینیر (Mount Rainier) در حالی دیده است که هواپیمای کوچک خود را هدایت می کرده است.در فرهنگ عمومی عبارت بشقاب پرنده یا به انگلیسی UFO به یک فضاپیما گفته می شود که البته تعریف آن شامل هرگونه اشیاء هوایی ناشناخته می شود. دیدن بشقاب پرنده بارهای زیادی در طول تاریخ و در سراسر جهان گزارش شده است که همیشه با این سوال همراه بوده که آیا حیات در دیگر سیاره ها و در دیگر نقاط دنیا وجود دارد یا خیر؟ اولین مشاهده بشقاب پرنده در سال ۱۹۴۷ اتفاق افتاد، زمانی که تاجری به نام کنت آرنولد ادعا کرد که گروهی ۹تایی از اشیاء عجیب با سرعت زیاد را در کنار کوه رینیر (Mount Rainier) در حالی دیده است که هواپیمای کوچک خود را هدایت می کرده است. آرنولد تخمین زده که این شئ پرنده می توانسته چندین هزار کیلومتر در ساعت حرکت کند. زمانی که دیدن این بشقاب پرنده ها افزایش یافت، در سال ۱۹۴۸، دولت ایالت متحده شروع به تحقیقاتی روی آن ها کرد. درباره یوفوها (UFO)اصطلاحی در میان مهندسین با عنوان “نسبت سیگنال به نویز” وجود دارد که عبارت است از میزان سختی دریافت سیگنال واقعی (صداهای عبوری از خطوط تلفن) و دریافت آنها در میان تمام صداهای اضافی و مزاحم که همان نویز می باشد. در خصوص یوفوها نسبت سیگنال به نویز بسیار ژرف و دست نیافتنی است و از همینرو قابل شنیدن نیست. بشقاب پرنده - UFOالبته موضوعیت کلی ماجرا با تلاش انسان برای سفر به فضا بی ارتباط است. اگر بشر در پی ساخت بشقاب پرنده و یا سفینه فضایی باشد پس باید وسیله ی مورد نیاز خودش را بسازد و مهم نیست که این وسیله قبلا توسط سایرین ساخته شده باشد یا نه. اینکه گفته می شود ممکن است با مطالعه بر روی داستان های مربوط به بشقاب پرنده ها، موجودات فضایی و یوفوها چیزهایی یاد بگیریم درست نیست. اول اینکه مشکل “نسبت سیگنال به نویز” حل نشده است و حتی اگر داستان های گفته شده صحت داشته باشند تنها در حد موضوعات علمی-تخیلی کاربرد دارند. موضوعات علمی-تخیلی از این جهت مفید هستند که می توانند تصویری ذهنی از مساله ی پیشرو برای شما رسم کنند تا سرنخی برای آغاز در اختیار داشته باشید. حتی اگر یوفوها واقعا حقیقت داشته باشند، که در پاره ای از ابهام است، و فیلم هایی از آنها در اختیار داشته باشیم بازهم کمک چندانی نخواهد بود.فرضیه موجودات فرازمینی با اینکه با شکست مواجه شدمشاهدات بشقاب پرندهفرضیه موجودات فرازمینی با اینکه با شکست مواجه شد، اما دانشمندان و مهندسانی مانند جی الن هاینک (نجوم شناس) نتیجه گیری کردند که بخش کوچکی از گزارش های قابل اعتماد بشقاب پرنده شواهد مشخصی برای حضور فرازمینی ها از کره خاکی بود. هاینک موسسه ای تحت عنوان مطالعات بشقاب پرنده ها تاسیس کرد تا تحقیقات روی این مشاهدات را ادامه دهد. به جز پروژه کتاب آبی، تنها مدارک رسمی و مکتوب شده از دیدن بشقاب پرنده در کانادا نگهداری می شده که در سال ۱۹۶۸ از وزارت دفاع کانادا به شورای پژوهشی ملی کانادا منتقل شد. پرونده های کانادایی شامل حدود ۷۵۰ مشاهده این اجسام ناشناخته بود. رکوردهای دیگر و البته کمتری در انگلستان، سوئد، دانمارک، استرالیا و یونان نگهداری می شود. در اتحاد جماهیر شوروی بیشتر این تحقیقات توسط کارهای مربوط به ارتش انجام می گیرد. مشاهدات بشقاب پرنده در چین نیز با تحقیقات نظامی آمیخته شده و برای مردم هنوز منتشر نشده است. بشقاب پرنده ها در ایراننوشتار‌های اصلی: رؤیت اشیای ناشناس پرنده در ایران و اشیای پرنده ناشناخته در آسمان تهران (۱۳۵۵)در دورهٔ جدید که موج رؤیت بشقاب‌پرنده‌ها به اوج رسید، نام ایران نیز در بین کشورهایی قرار گرفت که نه‌تنها تعداد قابل‌توجهی گزارش از آن مخابره می‌شد، بلکه تعدادی از گزارش‌های مهم ازنظر طرفداران وجود بشقاب‌پرنده‌ها در ایران رخ داده‌بود. در این بین، یکی از گزارش‌ها اهمیت بیشتری داشت: شیء ناشناس پرنده که در بامداد روز ۱۹ سپتامبر سال ۱۹۷۶ (۲۸ شهریور ۱۳۵۵) در تهران دیده شد. بر اساس گزارشی از این ماجرا، که در ۳۱ اگوست ۱۹۷۷ (۱۳۵۶) منتشر شد، ساعت ۱۲:۳۰ نیمه شب ۱۹ سپتامبر تلفن هایی از منطقهٔ شمیران به نیروی هوایی ارتش ایران زده می‌شود و طی آن، گزارش رؤیت یک شیء پرندهٔ ناشناس در افق شمالی گزارش می‌شود. دقایقی بعد، برج مراقبت فرودگاه مهرآباد تهران حضور این جِرم را در رادار خود تأیید می‌کند و بلافاصله یک فروند هواپیمای شکاری به تعقیب آن برمی خیزد. داستان بشقاب‌پرنده‌ها در ایران برای چندین سال دوران آرامی را سپری کرد تا اینکه از اوایل دو سال گذشته و با مشاهده اشیاء نورانی در برخی شهرها، بار دیگر داستان از نو آغاز شد. اولین گزارش‌ها از مرزن‌آباد و سپس بابل و مشکین‌شهر آغاز شد؛ جایی که گوی‌های نورانی می‌توانست علاوه بر اینکه موجب وحشت اهالی شود، حتی خسارات زیادی به‌جای گذارد. این پدیده، که هم‌زمان در برخی از کشورهای جهان هم رؤیت شد، به‌سرعت مورد بررسی قرار گرفت و نتیجه به‌زودی مشخص شد. آذرگوی‌های گلوله‌ای، که یک پدیدهٔ نادر ولی شناخته شده‌است. البته در مورد بابل، گونه‌ای از تخلیهٔ انرژی ژئوفیزیکی علت اصلی حادثه اعلام شد، اما مشکین شهر نه‌تنها پایان داستان آذرخش‌های گلوله‌ای را رقم زد، آغاز فصل جدید بشقاب‌های پرنده نیز از همان‌جا آغاز شد.بشقاب پرنده ها در چند نقطه ایران مشاهده شده استگزارش های اخیر درمورد یوفو۲۵ و ۲۶ فروردین‌ماه ۱۳۸۳ خبرگزاری‌ها خبر مشاهده شیء ناشناس نورانی را در آسمان مشکین‌شهر و اردبیل دادند، بلافاصله صدا و سیما تصاویری که توسط یک دوربین آماتور (ساده) از این اجرام تهیه شده بود منتشر ساخت و بدین ترتیب موج جدید آغاز شد. خبرگزاری ایرنا در کمتر از ۷۲ ساعت بیش از ۶ خبر از رؤیت این اجرام در آسمان شهرهای مختلف ایران از مشکین‌شهر و اردبیل گرفته تا گنبدکاووس و تبریز و اراک و اشنویه و سنندج و… منتشر کرد.گزارش اول از دو شیء پرندهٔ ناشناس در آسمان سخن می‌گفت که تلألوئی با رنگ‌های مختلف داشتند و حرکت‌هایی نامشخص در آسمان انجام می‌دادند هنوز دربارهٔ این گزارش نمی‌توان اظهار نظر کرد، چرا که هیچ داده مشخصی از آن وجود ندارد. اما در بقیهٔ موارد با شیء درخشان در افق جنوب غرب یا شمال غرب مواجه شدیم که حتی از آن هم تصاویری تهیه و پخش شد. به غیر از گزارش اول که مانند رؤیت بسیاری از اجرام پرنده اطلاعات ناقص و نامشخصی دارد، برای بقیهٔ پاسخ قاطعی وجود دارد. چیزی که حتی باور آن نیز مشکل است که چطور چنین شمار زیادی از مردم و رسانه‌ها به آن بی توجه بوده اند. گزارش ایرنا از دیده شدن این شیء در تبریز را مرور کنید:«تعدادی از شاهدان عینی گفتند یک شیء نورانی را چهارشنبه شب در آسمان تبریز مشاهده کرده‌اند. به گفته آنان، این شیء که طیف‌هایی از نورهای قرمز، آبی و سبز از آن به سرعت ساطع می‌شده‌است، مقارن ساعت ۲۰:۳۰ چهارشنبه در جنوب آسمان تبریز در منطقهٔ ولیعصر رؤیت شد، در طرفین این شیء نورانی دو بازوی نورانی خط‌گونه وجود داشت. یکی از شاهدان افزود، این شیء از سمت شرق به غرب با سرعتی بسیار کند و غیر محسوس در حرکت بود.» «یک شیء نورانی بار دیگر سه شنبه شب در ارتفاع پائین در ضلع جنوبی شهر گنبد کاووس دیده شد. به گفتهٔ منابع مردمی، این شیء از ساعت ۲۰ تا ۲۲:۳۰ دقیقه در آسمان ظاهر شده و رنگهای مختلف از خود انعکاس می‌داد. این شیء نورانی، کم کم در آسمان ناپدید شد. دوشنبه شب نیز یک شیء نورانی در ارتفاع پایین در ضلع جنوبی شهر گنبد کاووس مشاهده شده بود.» ایرنا گزارش داده بود که «این شیء به مدت ۹۰ تا۱۲۰ دقیقه در آسمان ظاهر شده و رنگهای مختلف از خود انعکاس می‌داد. از این شیء نورانی، دو نور جدا شده و کم‌کم در آسمان ناپدید شد.» «در ساعت ۲۲:۱۵ پنج شنبه ۱۸ خرداد ۱۳۹۱ شیئی نورانی به مدت ۱۰ دقیقه در ضلع شمالی آسمان گنبد کاووس مشاهده شد که ابتدا به صورت حبابی بود که داخل آن یک نور روشنی بود، سپس این حباب به دوقسمت تقسیم شد و یک شکل مخروطی کنار آن تشکیل شد و در آخر به‌صورت غباری آسمان را گرفت و ناگهان ناپدید شد.» آذر ۱۳۹۵ شیء بزرگ از آسمان مازندران رد شد و به گفته شاهدان عینی بی‌سیم پلیس و آنتن تمام تلفن‌های خانگی و تلفن‌های همراه تا چند ساعت قطع بودند. اما صحت آن را تاکنون هیچ منبع رسمی اعلام نکرده.یک شیء نورانی در ارتفاع پایین گنبد کاووس مشاهده شد که رنگهای مختلف از خود انعکاس می‌دادمشخصات کلی بشقاب پرندهبشقابهای پرنده صورتهایی از یک شی با پیچیدگی متغیر است و معمولا از شکل هندسی کروی مشتق می‌شوند و به شکل دیسک ، بیضوی (شبیه به توپ راگبی) ، دوکی ، استوانه‌ای و مخروطی دیده شدند. بیشتر آنها به شکل بشقاب با قطری حدود 7.5 متر و با گنبدی به ارتفاع 1.5 تا 1.8ر در وسط بودند. بشقابهای پرنده قادرند به سرعت ابعاد خود را تغییر دهند. بشقاب پرنده شی کاملا مجهزی است که شکل سطح قابل مشاهده آن نقش ثانوی در پرواز دارد و معمولا فاقد بال و چرخ است. این اشیاء وقتی از فاصله نزدیک مشاهده می‌شوند، دارای ابعاد نسبتا کوچک ، غالبا کوچکتر از 20 متر هستند، ولی ابعاد انعکاسی راداری آنها تقریبا به اندازه یک هواپیمای جت بوتینگ 707 است. بشقابهای پرنده ، معما بصورت دسته جمعی پرواز می‌کنند، ولی بصورت انفرادی نیز زیاد دیده شده‌اند. آنها ، گاه در فضا به قطعات کوچکتر تقسیم می‌شوند و در چندین مورد هم قطعات کوچک نورانی بهم پیوسته و شی واحدی را بوجود می‌آوزند. ازعجایب اینکه ، بشقابهای پرنده قادرند بطور ناگهانی و آنی خود را از نظرها ناپدید کنند. بشقابهای پرنده قابلیت ساکن ایستادن در هوا را دارند و می‌توانند شتاب و سرعت زیاد را داشته باشند. از ویژگیهای جالب و جذابشان نور افشانی آنها می‌باشد. گزارشها نشان می‌دهند که آنها در دو فاز مختلف تاریک و روشن مشاهده می‌شوند، اغلب روی زمین می‌نشینند، گاه چنان آرام می‌نشینند که گویی روی قشری از مه آرمیده‌اند. از ویژگیهای دیگرشان، وجود یک یا چند سرنشین در آنهاست که معمولا مایل به مشاهده شدن نیستند. سرنشینان بشقابهای پرنده مجهز به دستگاهی با توانایی تابش پرتوهایی هستند که از میان اشخاص و دیوار عبور می‌کند. سرنشینان قادر به پرواز بوده ، اصابت تیر را احساس نکرده و متقابلا می‌توانند مشاهده کنندگان را فلج کنند. در برخی گزارشها آمده که سرنشینان شبیه انسان هستند. بشقابهای پرنده در پرواز در ارتفاعات کم و یا در روی زمین اثرهایی بر دستگاههای ساخت بشر و محیط اطراف بر جای می‌گذارند. بشقابهای پرنده از تواناییهای هواپیماهای مدرن کاملا آگاهند، از اینرو فاصله خود را اسلحه هوایماها و توپهای ضد هوایی طوری حفظ می‌کنند تا هموراه در خارج از برد موثر آنها قرار گیرند و می توانند کلیه سیستم های الکترونیکی و موتوری و راداری و ... هواپیماها را از کار بیاندازند. مشاهده کنندگانی که به بشقابهای پرنده خیلی نزدیک شدند، در معرض آثار رادیواکتیو قرار گرفتند. به علاوه ، این اشیاء قادرند رادار را به موقع حس و خنثی نمایند و مانع قفل شدن رادارهای کنترل آتش شوند و در دید رادارهای دور برد واقع نشوند. سرنشینان بشقاب پرنده مجهز به سیستم مولد نیروی دافعه قابل حمل‌اند، که پرواز و شناور شدن آنها را در فضا ممکن می‌سازد. به علاوه ، پدیده‌های عدم اصابت گلوله به دستگاه و سرنشینان آن به کمک میدان دافعه قابل توجیه‌اند.بشقاب پرنده ها به شکل های مختلفی ظاهر می شوندگروهی از افسران بازنشسته آمریکا بعد از سال‌ها مدعی شدند اجرام پرنده ناشناس بارها روی تاسیسات هسته‌ای آمریکا در سراسر این کشور پرواز کرده‌اند. به گزارش شبکه تلویزیونی فاکس‌نیوز، این افسران مدعی شدند بشقاب‌های پرنده بارها هدف حملات تاسیسات دفاع ضد هوایی آمریکا قرار گرفته‌اند و بارها موشک‌های پرتاب شده را خنثی کرده‌اند. رابرت سالاس که از جمله افسران سکوهای موشکی در آمریکا به‌شمار می‌آید گفته است کسانی که این اجرام پرنده را دیده‌اند می‌گویند اجسام بیضی‌شکل و قرمز رنگ بودند. پرواز این اجسام باعث از کار افتادن سامانه موشک‌های هسته‌ای شد.این حادثه بارها پیش آمد. رابرت هیستین محقق اجرام فضایی ناشناس موسوم به یوفو نیز گفت من با بیش از 120 نفر از افسران بازنشسته نیروی هوایی که در رویدادهای مرتبط با پرواز یوفوها بر فراز تاسیسات اتمی حضور داشتند مصاحبه کرده‌ام. این افسران گفته‌اند که موشک‌ها در زمان پرواز این اجرام کار نمی‌کردند. وی باور دارد کاری که این بشقاب‌های پرنده انجام می‌دهند نوعی کار اکتشافی به‌شمار می‌آید و این پروازها در آمریکا و شوروی نیز صورت گرفته است و با توجه به دوران تاریکی که در زمان جنگ سرد حاکم بود و ممکن بود به جنگی اتمی ختم شود، این بشقاب‌های پرنده تلاش می‌کردند به شکلی در این امر مداخله کنند.روبیکا من : https://rubika.ir/artinkarimian3</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Sat, 09 May 2026 17:41:21 +0330</pubDate>
            </item>
                    <item>
                <title>درآمد زایی از یک سایت با اطمینان</title>
                <link>https://virgool.io/@artinkarimian/%D8%AF%D8%B1%D8%A2%D9%85%D8%AF-%D8%B2%D8%A7%DB%8C%DB%8C-%D8%A7%D8%B2-%DB%8C%DA%A9-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%A8%D8%A7-%D8%A7%D8%B7%D9%85%DB%8C%D9%86%D8%A7%D9%86-jazkqqdyodsm</link>
                <description>خب من چند روز پیش بود ، داشتم دنبال سایت رآمد زایی میگشتم . هرکدام را که پیدا کردم دروغ بود به غیر از یکی از آنها اسمش هم میترا رنک بود .خب شما میتونید با کلیک روی کلمه (میترا رنک) وارد سایت شوید یا از طریق لینک زیر :https://mitrarank.ir/reagent/1981212خب حالا وقتی وارد شید صفحه ای مثل صفحه پایین میبینید .خب حالا اول برای شروع وارد به حساب کاربری خودتان میشید .خب دید که این برنامه واقعی هست ببینید داخل تصویر هم زده شده برداشت شده و واقعا هم برداشت شد .طبق درخواست من به پشتیبانی قبلا برداشت با ایمیل بوده فقط الان هم با ایمیل و هم با شماره تماس میباشد .ببینید این درآمد روزانه ای که میده خیلی کم هستش و مثلا روزانه میتونید 20 هزار تومان درآمد کنین و برای برداشت این حداقل باید 50 هزار تومان داشته باشد .خب حالا میریم سراغ آموزش درآمد زایی از این سایت .روی سه خط کنار بزنید و از آنجا کسب درآمد شخصی را بزنید .خب حالا شما میتوانید با انتخواب هر کدام از اینها یکجوری درآمد بکنین .اگر سوالی داشتید از پشتیبانی سایت کمک بگیرید .لینک های میترا رنک :کسب درآمد شخصیروش های متنوع کسب درآمد با حداقل امکانات و متناسب با شرایط کاری و زندگی کاربراناشتراک گذاری در شبکه های اجتماعیکسب درآمد از به اشتراک گذاری محتوا در سایت ها، پیام رسان و ها شبکه های اجتماعیhttps://mitrarank.ir/reagent/1981212/socialedبازدید خودکار از سایت هاکسب درآمد از بازدید از وب سایت ها به کمک یک سامانه هوشمند و خودکارhttps://mitrarank.ir/reagent/1981212/surfedانجام وظیفه های کوچکثبت نام در یک سایت، ارسال نظر و نقد درباره یک محصول و انجام کارهای کوچک دیگر...https://mitrarank.ir/reagent/1981212/jobedجستجو در گوگل، یاهو و...کسب درآمد از انجام فرآیند جستجو در گوگل، یاهو و... براساس سفارش های موجود در سایتhttps://mitrarank.ir/reagent/1981212/searchedبازدید غیرخودکار ( دستی )بازدیدهای دستی و مورد به مورد با امکان کسب درآمد بیشتر به ازای هر بازدیدhttps://mitrarank.ir/reagent/1981212/manualsurfedکسب درآمد حرفه ایروش های متنوع مناسب برای کسب درآمد از وب سایت، وبلاگ، کانال ها و صفحه های پر بازدیدهمکاری در نمایش تبلیغتنوع بی نظیر کدهای آماده نمایش تبلیغ متناسب با نیاز طراحان و مدیران سایت هاhttps://mitrarank.ir/reagent/1981212/coworkerکوتاه کردن و مدیریت لینک هاتبدیل و کوتاه کردن رایگان لینک ها و کسب درآمد از به اشتراک گذاری آنها با دیگرانhttps://mitrarank.ir/reagent/1981212/linkهمکاری در نمایش استوریمعرفی پیج اینستاگرام و همکاری در نمایش استوری های تبلیغاتیhttps://mitrarank.ir/reagent/1981212/profileهمکاری در نمایش بک لینککسب درآمد روزانه از نمایش بک لینک در وب سایت شماhttps://mitrarank.ir/reagent/1981212/backlinksiteبارگذاری و مدیریت فایل هابارگذاری رایگان فایل و کسب درآمد از به اشتراک گذاری آنها با دیگرانhttps://mitrarank.ir/reagent/1981212/recordکانال روبیکا ما : https://rubika.ir/artinkarimian3</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Wed, 06 May 2026 14:41:08 +0330</pubDate>
            </item>
                    <item>
                <title>پروژه نهم پایتون : تشخیص احساسات از روی متن</title>
                <link>https://virgool.io/Compile/%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%86%D9%87%D9%85-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D8%A7%D8%AD%D8%B3%D8%A7%D8%B3%D8%A7%D8%AA-%D8%A7%D8%B2-%D8%B1%D9%88%DB%8C-%D9%85%D8%AA%D9%86-wfsk3uw1x0wq</link>
                <description>خب اول وسایل لازم که در زیر نوشته شده را تهیه کنید .پایتونکتابخانه sysکتابخانه PyQt5کتابخانه textblobخب پس از نصب کتابخانه های لازم کد زیر را در پایتون میزنید .import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QFont, QIcon
from PyQt5.QtCore import Qt
from textblob import TextBlob # Import TextBlob

# --- برای نصب TextBlob ---
# pip install PyQt5
# pip install textblob
# python -m textblob.download_corpora  # این دستور رو یک بار اجرا کنید

class SentimentApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
        
    def initUI(self):
        self.setWindowTitle(&#039;Sentiment Analyzer (TextBlob)&#039;)
        # self.setWindowIcon(QIcon(&#039;/path/to/your/icon.png&#039;)) # Optional: Set an icon
        self.setGeometry(150, 150, 650, 450) # Adjusted size slightly
        
        # Main layout
        layout = QVBoxLayout()
        
        # Title
        title = QLabel(&#039;Sentiment Analysis with TextBlob&#039;)
        title.setFont(QFont(&#039;Arial&#039;, 18, QFont.Bold))
        title.setAlignment(Qt.AlignCenter)
        title.setStyleSheet(&quot;color: #333;&quot;)
        layout.addWidget(title)
        
        # Input Label
        input_label = QLabel(&#039;Enter your text (English):&#039;)
        input_label.setFont(QFont(&#039;Arial&#039;, 12))
        input_label.setStyleSheet(&quot;margin-top: 15px;&quot;)
        layout.addWidget(input_label)
        
        # Text Edit for input
        self.text_edit = QTextEdit()
        self.text_edit.setFont(QFont(&#039;Arial&#039;, 11))
        self.text_edit.setPlaceholderText(&quot;Type or paste your English text here...&quot;)
        self.text_edit.setMinimumHeight(100) # Give it some space
        self.text_edit.setStyleSheet(&quot;padding: 10px; border: 1px solid #ccc; border-radius: 5px;&quot;)
        layout.addWidget(self.text_edit)
        
        # Button Layout
        btn_layout = QHBoxLayout()
        
        analyze_btn = QPushButton(&#039;Analyze Sentiment&#039;)
        analyze_btn.clicked.connect(self.analyze_sentiment)
        analyze_btn.setStyleSheet(&quot;&quot;&quot;
            QPushButton {
                background-color: #4CAF50; color: white; padding: 10px 20px;
                border: none; border-radius: 5px; font-size: 12pt;
            }
            QPushButton:hover {
                background-color: #45a049;
            }
        &quot;&quot;&quot;)
        btn_layout.addWidget(analyze_btn)
        
        clear_btn = QPushButton(&#039;Clear All&#039;)
        clear_btn.clicked.connect(self.clear_all)
        clear_btn.setStyleSheet(&quot;&quot;&quot;
            QPushButton {
                background-color: #f44336; color: white; padding: 10px 20px;
                border: none; border-radius: 5px; font-size: 12pt;
            }
            QPushButton:hover {
                background-color: #da190b;
            }
        &quot;&quot;&quot;)
        btn_layout.addWidget(clear_btn)
        
        layout.addLayout(btn_layout)
        
        # Result Display Area
        result_label_title = QLabel(&#039;Analysis Result:&#039;)
        result_label_title.setFont(QFont(&#039;Arial&#039;, 14, QFont.Bold))
        result_label_title.setStyleSheet(&quot;margin-top: 20px; color: #555;&quot;)
        layout.addWidget(result_label_title)
        
        self.result_display = QLabel(&#039;—&#039;)
        self.result_display.setFont(QFont(&#039;Arial&#039;, 16))
        self.result_display.setAlignment(Qt.AlignCenter)
        self.result_display.setStyleSheet(&quot;background-color: #e0e0e0; padding: 20px; border-radius: 8px; font-weight: bold;&quot;)
        layout.addWidget(self.result_display)
        
        # Polarity and Subjectivity Scores
        score_layout = QHBoxLayout()
        
        self.polarity_label = QLabel(&#039;Polarity: 0.0&#039;)
        self.polarity_label.setFont(QFont(&#039;Arial&#039;, 11))
        score_layout.addWidget(self.polarity_label)
        
        self.subjectivity_label = QLabel(&#039;Subjectivity: 0.0&#039;)
        self.subjectivity_label.setFont(QFont(&#039;Arial&#039;, 11))
        score_layout.addWidget(self.subjectivity_label)
        
        layout.addLayout(score_layout)
        
        # Footer/Explanation
        footer = QLabel(&#039;Powered by TextBlob. Polarity ranges from -1 (negative) to 1 (positive). Subjectivity ranges from 0 (objective) to 1 (subjective).&#039;)
        footer.setFont(QFont(&#039;Arial&#039;, 9))
        footer.setWordWrap(True)
        footer.setAlignment(Qt.AlignCenter)
        footer.setStyleSheet(&quot;color: #777; margin-top: 10px;&quot;)
        layout.addWidget(footer)
        
        self.setLayout(layout)
    
    def analyze_sentiment(self):
        text = self.text_edit.toPlainText().strip()
        
        if not text:
            QMessageBox.warning(self, &#039;Empty Input&#039;, &#039;Please enter some English text to analyze.&#039;)
            return
        
        try:
            # Use TextBlob for sentiment analysis
            blob = TextBlob(text)
            sentiment = blob.sentiment
            
            polarity = sentiment.polarity
            subjectivity = sentiment.subjectivity
            
            # Determine sentiment category
            if polarity &gt; 0.1: # Threshold can be adjusted
                sentiment_category = &#039;POSITIVE 😊&#039;
                color = &#039;#4CAF50&#039; # Green
            elif polarity &lt; -0.1: # Threshold can be adjusted
                sentiment_category = &#039;NEGATIVE 😞&#039;
                color = &#039;#f44336&#039; # Red
            else:
                sentiment_category = &#039;NEUTRAL 😐&#039;
                color = &#039;#ff9800&#039; # Orange
            
            # Update result display
            self.result_display.setText(f&#039;{sentiment_category}&#039;)
            self.result_display.setStyleSheet(f&quot;background-color: #e0e0e0; padding: 20px; border-radius: 8px; font-weight: bold; color: {color};&quot;)
            
            # Update score labels
            self.polarity_label.setText(f&#039;Polarity: {polarity:.3f}&#039;)
            self.subjectivity_label.setText(f&#039;Subjectivity: {subjectivity:.3f}&#039;)
            
        except Exception as e:
            QMessageBox.critical(self, &#039;Error&#039;, f&#039;An error occurred during analysis: {e}\n\nMake sure you have run &quot;python -m textblob.download_corpora&quot;.&#039;)
            self.result_display.setText(&#039;Error&#039;)
            self.polarity_label.setText(&#039;Polarity: N/A&#039;)
            self.subjectivity_label.setText(&#039;Subjectivity: N/A&#039;)

    def clear_all(self):
        self.text_edit.clear()
        self.result_display.setText(&#039;—&#039;)
        self.polarity_label.setText(&#039;Polarity: 0.0&#039;)
        self.subjectivity_label.setText(&#039;Subjectivity: 0.0&#039;)

if __name__ == &#039;__main__&#039;:
    app = QApplication(sys.argv)
    
    # --- IMPORTANT: Download necessary corpora for TextBlob ---
    # You only need to run this part once.
    # If you haven&#039;t run it before, uncomment the next line and run the script.
    # Then, comment it out again and run the script normally.
    # import nltk
    # nltk.download(&#039;punkt&#039;)
    # nltk.download(&#039;averaged_perceptron_tagger&#039;)
    # nltk.download(&#039;brown&#039;) # Needed for some TextBlob features
    # nltk.download(&#039;wordnet&#039;) # Needed for WordNetLemmatizer
    # nltk.download(&#039;movie_reviews&#039;) # Example corpus used by TextBlob
    # nltk.download(&#039;stopwords&#039;) # If you plan to use stopword removal
    # Or simply run: python -m textblob.download_corpora in your terminal
    
    # It&#039;s better to run this in terminal: python -m textblob.download_corpora
    
    window = SentimentApp()
    window.show()
    sys.exit(app.exec_())پس از اجرای کد بالا تصویر زیر را میبینید .برای دانلود همین پایتون یا فایل تبدیل شده به برنامه روی نوشته لینک بزنید و 15ثانیه صبر کنید و فایل را دریافت کنید .اینم از این پروژه اگر ایده یا پروژه ای دارید در نظرت بنویسید.</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Mon, 04 May 2026 14:30:36 +0330</pubDate>
            </item>
                    <item>
                <title>پروژه هشتم پایتون : استخراج لینک از وب</title>
                <link>https://virgool.io/Compile/%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%87%D8%B4%D8%AA%D9%85-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A7%D8%B3%D8%AA%D8%AE%D8%B1%D8%A7%D8%AC-%D9%84%DB%8C%D9%86%DA%A9-%D8%A7%D8%B2-%D9%88%D8%A8-klfkawgromhz</link>
                <description>خب وسایلی که نیاز دارید :پایتونکتابخانه requestsکتابخانه beautifulsoup4کتابخانه pyperclipکتابخانه tkinterخب پس از نصب کتابخانه های لازم کد زیر را داخل پایتون وارد میکنیم .import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import requests
from bs4 import BeautifulSoup
import pyperclip # کتابخانه برای دسترسی به کلیپبورد

# تابع استخراج لینکها
def fetch_and_extract_links(url):
    links = set() # استفاده از set برای جلوگیری از تکرار لینکها
    try:
        response = requests.get(url, timeout=10)
        response.raise_for_status() # بررسی خطاهای HTTP
        soup = BeautifulSoup(response.text, &#039;html.parser&#039;)
        
        for link_tag in soup.find_all(&#039;a&#039;, href=True):
            href = link_tag[&#039;href&#039;]
            # پاکسازی لینکها و تبدیل لینکهای نسبی به مطلق
            if href.startswith(&#039;#&#039;) or href.startswith(&#039;&#039;):
                continue
            
            # تبدیل لینک نسبی به مطلق
            if not href.startswith(&#039;http://&#039;) and not href.startswith(&#039;https://&#039;):
                from urllib.parse import urljoin
                href = urljoin(url, href)
                
            links.add(href)
            
    except requests.exceptions.RequestException as e:
        messagebox.showerror(&quot;خطای درخواست&quot;, f&quot;خطا در دریافت آدرس: {e}&quot;)
        return None
    except Exception as e:
        messagebox.showerror(&quot;خطای تجزیه&quot;, f&quot;خطا در پردازش صفحه: {e}&quot;)
        return None
        
    return sorted(list(links)) # مرتبسازی لینکها قبل از بازگرداندن

# تابع برای پیست کردن آدرس از کلیپبورد
def paste_from_clipboard():
    try:
        clipboard_content = pyperclip.paste()
        url_entry.delete(0, tk.END) # پاک کردن محتوای فعلی فیلد
        url_entry.insert(0, clipboard_content) # درج محتوای کلیپبورد
    except Exception as e:
        messagebox.showerror(&quot;خطای کلیپبورد&quot;, f&quot;امکان پیست کردن وجود ندارد: {e}&quot;)

# تابع برای کپی کردن نتایج استخراج شده
def copy_results_to_clipboard():
    try:
        results_content = results_text.get(&quot;1.0&quot;, tk.END) # دریافت کل متن از ناحیه نتایج
        if results_content.strip(): # فقط اگر محتوایی وجود دارد کپی کن
            pyperclip.copy(results_content)
            status_label.config(text=&quot;نتایج در کلیپبورد کپی شد!&quot;)
        else:
            messagebox.showwarning(&quot;محتوای خالی&quot;, &quot;هیچ لینکی برای کپی کردن وجود ندارد.&quot;)
    except Exception as e:
        messagebox.showerror(&quot;خطای کپی&quot;, f&quot;امکان کپی کردن نتایج وجود ندارد: {e}&quot;)

# تابع برای نمایش لینکها در رابط کاربری
def display_links():
    url = url_entry.get().strip()
    if not url:
        messagebox.showwarning(&quot;ورودی نامعتبر&quot;, &quot;لطفاً یک آدرس URL معتبر وارد کنید.&quot;)
        return
        
    # افزودن http:// اگر کاربر وارد نکرده باشد
    if not url.startswith(&#039;http://&#039;) and not url.startswith(&#039;https://&#039;):
        url = &#039;http://&#039; + url
        url_entry.delete(0, tk.END)
        url_entry.insert(0, url)

    status_label.config(text=&quot;در حال استخراج لینکها...&quot;)
    results_text.config(state=tk.NORMAL)
    results_text.delete(&#039;1.0&#039;, tk.END) # پاک کردن نتایج قبلی
    results_text.config(state=tk.DISABLED)
    
    app.update_idletasks() # بهروزرسانی رابط کاربری قبل از عملیات طولانی

    extracted_links = fetch_and_extract_links(url)
    
    results_text.config(state=tk.NORMAL)
    if extracted_links is not None:
        if extracted_links:
            for link in extracted_links:
                results_text.insert(tk.END, link + &#039;\n&#039;)
            status_label.config(text=f&quot;تعداد {len(extracted_links)} لینک پیدا شد.&quot;)
            copy_button.config(state=tk.NORMAL) # فعال کردن دکمه کپی
        else:
            status_label.config(text=&quot;هیچ لینکی در صفحه یافت نشد.&quot;)
            copy_button.config(state=tk.DISABLED) # غیرفعال کردن دکمه کپی
    else:
        status_label.config(text=&quot;عملیات با خطا مواجه شد.&quot;)
        copy_button.config(state=tk.DISABLED) # غیرفعال کردن دکمه کپی
        
    results_text.config(state=tk.DISABLED)


# --- ساخت رابط کاربری ---
app = tk.Tk()
app.title(&quot;استخراج لینک از وب&quot;)
app.geometry(&quot;700x600&quot;) # تنظیم اندازه پنجره

# فریم اصلی
main_frame = ttk.Frame(app, padding=&quot;10&quot;)
main_frame.pack(fill=tk.BOTH, expand=True)

# فریم ورودی URL و دکمهها
input_frame = ttk.Frame(main_frame)
input_frame.pack(fill=tk.X, pady=5)

# برچسب URL
url_label = ttk.Label(input_frame, text=&quot;آدرس URL:&quot;)
url_label.pack(side=tk.LEFT, padx=5)

# فیلد ورودی URL
url_entry = ttk.Entry(input_frame, width=50)
url_entry.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=5)

# دکمه پیست (جدید)
paste_button = ttk.Button(input_frame, text=&quot;پیست&quot;, command=paste_from_clipboard)
paste_button.pack(side=tk.LEFT, padx=5)

# دکمه استخراج
extract_button = ttk.Button(input_frame, text=&quot;استخراج لینکها&quot;, command=display_links)
extract_button.pack(side=tk.LEFT, padx=5)

# دکمه کپی نتایج (جدید)
copy_button = ttk.Button(input_frame, text=&quot;کپی نتایج&quot;, command=copy_results_to_clipboard, state=tk.DISABLED) # در ابتدا غیرفعال
copy_button.pack(side=tk.LEFT, padx=5)

# ناحیه نمایش نتایج
results_text = tk.Text(main_frame, wrap=tk.WORD, state=tk.DISABLED, font=(&quot;Arial&quot;, 10))
results_text.pack(fill=tk.BOTH, expand=True, pady=10)

# نوار اسکرول برای ناحیه نتایج
scrollbar = ttk.Scrollbar(results_text, orient=tk.VERTICAL, command=results_text.yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
results_text.config(yscrollcommand=scrollbar.set)

# برچسب وضعیت
status_label = ttk.Label(main_frame, text=&quot;آماده&quot;)
status_label.pack(fill=tk.X, pady=5)

# --- اجرای برنامه ---
# اطمینان از نصب بودن pyperclip
try:
    import pyperclip
except ImportError:
    messagebox.showerror(&quot;خطای وابستگی&quot;, &quot;لطفاً کتابخانه &#039;pyperclip&#039; را نصب کنید: pip install pyperclip&quot;)
    app.destroy() # بستن برنامه اگر کتابخانه نصب نباشد

app.mainloop()فایل نهاییالان وقتی کد را بزنیم ، صفحه بالا را میبینیم .حالا اگر لینک را کپی کنیم و روی پیست کلیک کنیم و استخراج را بزنیم صفحه زیر را میبینید .برای دانلود همین پایتون یا فایل تبدیل شده به برنامه روی نوشته لینک بزنید و 15ثانیه صبر کنید و فایل را دریافت کنید .اینم از این پروژه اگر ایده یا سوالی دارید در نظرات بنویسید .</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Mon, 04 May 2026 08:50:40 +0330</pubDate>
            </item>
                    <item>
                <title>جادوی نهفته در کدها: وقتی منطق با هنر در هم می‌آمیزد — سفری به عمق دنیای دیجیتال</title>
                <link>https://virgool.io/Compile/%D8%AC%D8%A7%D8%AF%D9%88%DB%8C-%D9%86%D9%87%D9%81%D8%AA%D9%87-%D8%AF%D8%B1-%DA%A9%D8%AF%D9%87%D8%A7-%D9%88%D9%82%D8%AA%DB%8C-%D9%85%D9%86%D8%B7%D9%82-%D8%A8%D8%A7-%D9%87%D9%86%D8%B1-%D8%AF%D8%B1-%D9%87%D9%85-%D9%85%DB%8C-%D8%A2%D9%85%DB%8C%D8%B2%D8%AF-%E2%80%94-%D8%B3%D9%81%D8%B1%DB%8C-%D8%A8%D9%87-%D8%B9%D9%85%D9%82-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D8%AF%DB%8C%D8%AC%DB%8C%D8%AA%D8%A7%D9%84-sp527skco5re</link>
                <description>ساخته شده توسط هوش مصنوعیدر جهان امروزی، جایی که فناوری به عنوان قلب تپنده زندگی هر انسان و هر سازمانی عمل می‌کند، کمتر کسی است که اهمیت و عظمت پشت پرده‌اش را درک کند. این پرده، واقعی‌تر از آن است که تصور کنید، و آن، مجموعه‌ای از زبان‌های منسجم و ساختارمند است که باز هم به ظاهر، تنها مجموعه‌ای از صفر و یک است، اما در واقع، زبان‌هایی هستند که فلسفه، هنر و منطق را در کنار هم جای داده‌اند.حالا تصور کنید اولین بار که این خطوط کد را در ویرایشگر می‌نویسید، در واقع دارید درون یک دنیای جدید قدم می‌گذارید. دنیایی که قوانین خودش را دارد، اما خودش یک فضای آزاد و بی‌انتهای بی‌نظیر است. این جایی است که می‌توانید هر چیزی که در ذهنتان است را به واقعیت تبدیل کنید. اینجا، زبان برنامه‌نویسی، به عنوان یک زبان جهانی و بی‌مرز، قدرت بیان ایده‌های خام و خلاقانه شما را دارد.در اصل، کدنویسی همانند نقاشی است. تفاوت در این است که نقاش در قالب رنگ و شکل، احساس و زیبایی را منتقل می‌کند و برنامه‌نویس با منطق و ساختار، همچنان در پی ساختن چیزی است که هم کارآمد و هم زیبا باشد. هر برنامه، مانند یک اثر هنری است؛ پر است از جزئیات ظریف، از ساختارهای منطقی فوق‌العاده پیچیده و در عین حال، درک‌پذیر. و این شکلی است که در آن، هنر و علم به یکی می‌شوند، و دنیای پُر رمز و راز کامپیوتر، به شکل یک اثر هنری زنده و پویا در می‌آید.دنیای کد، جایی که منطق و خلاقیت در هم می‌آمیزندهمانطور که یک کمیک، یک رمان یا یک تابلوی نقاشی، نشان می‌دهد، هنر واقعی، ترکیبی است از مهارت و حس، دانش و احساس، منطق و الهام. در دنیای برنامه‌نویسی هم دقیقا همین‌طوره. هر نکته، هر دستور، هر حلقه و شرط، بخشی از یک سیستم بزرگ‌تر است؛ سیستمی که در آن، هر خط، حکم یک ساز در سمفونی عظیم را دارد.مثلاً وقتی یک تابع در پایتون می‌نویسید تا کار خاصی را انجام بده، در واقع دارید یک بخش از یک سیستم پیچیده را مدیریت می‌کنید، همان‌طور که یک معمار، تصمیم می‌گیرد که هر جزء از ساختمان در کجای ساختمان قرار گیرد، و در کنار هم، یک سازه بی‌نظیر بسازد. این فن، مهارت، دانش و البته، ذوق هنری می‌خواهد. چون در پس هر منطق، احساس و زیبایی نهفته است.پایتون، زبان قدرت و سادگیآیا می‌دانید که چرا پایتون به سرعت در دل میلیون‌ها برنامه‌نویس در سراسر جهان نفوذ کرده است؟ چون پایتون، نه تنها یک ابزار است، بلکه یک دنیای بی‌نهایت است. کسی که در آن وارد می‌شود، دیگر محدود به کارهای معمولی نیست، بلکه می‌تواند بازی‌های پیچیده، دنیای مجازی، تحلیل داده‌ها، طراحی هوشمند، و حتی هنرهای دیجیتال را در قالب پروژه‌های خودش بیافریند.مثلاً، فرض کنید می‌خواهید یک توپ ساده را در صفحه حرکت بدهید. آنقدر کد می‌نویسید که انگار دارید یک اثر هنری می‌کشید. بازی با Pygame، این امکان را می‌دهد که نه تنها یک برنامه ساده، بلکه یک دنیای منحصر به فرد خلق کنید، جایی که هر حرکت، هر رنگ، هر تعامل، نشانگر نوعی هنر و خلاقیت است.و یا تصور کنید می‌خواهید داده‌های عظیم را تحلیل کنید. با Pandas و NumPy، در حالی که می‌کوشید، دارید جدا کردن رشته‌هایی از حقیقت‌های پنهان هستید، درست مثل یک کاوشگر در غارهای تاریک داده‌ها، هر جانے‌اش از طریق کد، به کشف یک گنج واقعی منجر می‌شود.هنر برنامه‌نویسی، فلسفه زندگیاین فرآیند، چیزی فراتر از نوشتن چند خط کد ساده است. این، یک فلسفه است. فلسفه‌ی حل مشکلات، فلسفه‌ی ساختن، فلسفه‌ی درک ساختارهای عمیق و پیچیده‌ی جهان. هر قطعه کد، در واقع، یک نوع بیان است، زبان دیگری برای درک هستی و هنر. یک نوع زبانِ جهانی، بی‌مرز که توانایی‌اش در انتقال پیام، احساس و هدف، با هر زبان بشری برابری می‌کند.وقتی کدی می‌نویسید، در واقع دارید یک جهان کوچک را با قوانین خودتان می‌سازید. شما تصمیم می‌گیرید که چه چیزهایی در آن جهان وجود داشته باشند، چگونه با هم تعامل کنند، و چه قوانینی بر آن‌ها حاکم باشد. این فرآیند، شبیه به تفکر فلسفی است؛ شما باید مفاهیم را بشکافید، روابط بین آن‌ها را درک کنید، و سپس یک سیستم منسجم و معنادار بسازید.کشف کردن، خلق کردن، و تاثیر گذاشتندنیای کدنویسی، دنیای کشف و خلق است. شما مدام در حال یادگیری چیزهای جدید هستید، با ابزارها و تکنیک‌های تازه آشنا می‌شوید، و ایده‌هایتان را به واقعیت تبدیل می‌کنید. هر پروژه جدید، یک ماجراجویی است. شما با چالش‌های جدیدی روبرو می‌شوید، راه‌حل‌های خلاقانه پیدا می‌کنید، و در نهایت، اثری از خود به جای می‌گذارید.این تاثیرگذاری، فقط در مقیاس بزرگ نیست. حتی یک اسکریپت کوچک که کار تکراری شما را خودکار می‌کند، در زمان شما صرفه‌جویی می‌کند و به شما اجازه می‌دهد تا روی کارهای مهم‌تر و خلاقانه‌تر تمرکز کنید. این همان “تاثیر” است؛ تاثیری که از دل منطق و تلاش شما بیرون می‌آید.آغوش باز تکنولوژی برای هنرمندان و منطق‌دانانپس، اگر اهل هنر هستید و به منطق هم علاقه دارید، دنیای کدنویسی، به خصوص با پایتون، آغوش باز کرده است. اینجا جایی است که می‌توانید هر دو جنبه وجودتان را شکوفا کنید. شما می‌توانید یک “جادوگر دیجیتال” باشید که با ترکیب دانش و خلاقیت، دنیا را به جایی بهتر تبدیل می‌کند.یادتان باشد، هر خط کدی که می‌نویسید، نه تنها یک دستورالعمل برای کامپیوتر، بلکه یک بیان از تفکر، یک اثر هنری، و یک گام به سوی آینده است. پس بیایید این جادو را کشف کنیم و با هم، دنیای دیجیتال را با رنگ‌های خلاقیت و نور منطق، روشن‌تر کنیم.فراتر از صفر و یک: جادوی الگوریتم‌ها و زیبایی ساختارهایادتان هست گفتیم کدنویسی شبیه نقاشی است؟ خب، بیایید کمی عمیق‌تر شویم. هر خط کد، فقط یک دستور ساده نیست؛ بلکه بخشی از یک الگوریتم است. الگوریتم‌ها، همان دستورالعمل‌های گام به گام هستند که مغز متفکر پشت هر برنامه محسوب می‌شوند. آن‌ها مانند نت‌های موسیقی در یک قطعه هستند که اگر درست کنار هم چیده شوند، ملودی دلنشینی خلق می‌کنند. اما اگر اشتباه چیده شوند، صدای ناهنجاری تولید می‌کنند.برنامه‌نویسان، مانند آهنگسازان، با دقت و ظرافت، این الگوریتم‌ها را طراحی می‌کنند. آن‌ها باید پیش‌بینی کنند که چه ورودی‌هایی ممکن است به برنامه داده شود و برنامه در هر شرایطی چگونه باید واکنش نشان دهد. اینجاست که خلاقیت و منطق به شکلی خیره‌کننده در هم می‌آمیزند. آیا یک الگوریتم برای مرتب‌سازی داده‌ها، باید سریع باشد یا حافظه کمتری مصرف کند؟ این انتخاب‌ها، خود، یک تصمیم هنری است که بر اساس اولویت‌ها و محدودیت‌های پروژه گرفته می‌شود.پایتون و دنیای بصری: خلق تصاویر با کدگفتیم پایتون فقط برای کارهای فنی نیست. حتی در خلق تصاویر و آثار بصری هم نقش دارد! کتابخانه‌هایی مثل Matplotlib و Seaborn فقط برای رسم نمودار نیستند. آن‌ها ابزاری قدرتمند برای تجسم هنری داده‌ها هستند. تصور کنید بتوانید با داده‌های فروش یک محصول، یک نمودار میله‌ای رنگارنگ و پویا بسازید که نه تنها اطلاعات را منتقل کند، بلکه از نظر بصری نیز چشم‌نواز باشد. این نمودار می‌تواند داستان خودش را بگوید؛ داستانی از رشد، افت، یا ثبات.حتی فراتر از نمودارها، با ترکیب پایتون با کتابخانه‌های پردازش تصویر مانند Pillow (PIL Fork)، می‌توانید تصاویر را ویرایش کنید، فیلترهای هنری اعمال کنید، یا حتی تصاویر جدیدی خلق کنید. اینجاست که مرز بین کدنویسی و هنر دیجیتال کاملاً محو می‌شود. شما نه تنها منطق را به کامپیوتر می‌آموزید، بلکه به آن هنر یاد می‌دهید!فراتر از سرگرمی: کدنویسی به مثابه حل مسئله جهانیقدرت کدنویسی، فقط در ساخت بازی و اپلیکیشن‌های سرگرم‌کننده خلاصه نمی‌شود. این قدرت، ابزاری است برای حل بزرگترین چالش‌های بشریت. دانشمندان با استفاده از پایتون، مدل‌های پیچیده آب و هوایی را شبیه‌سازی می‌کنند تا تغییرات اقلیمی را بهتر درک کنند. پزشکان، الگوریتم‌هایی می‌نویسند که به تشخیص زودهنگام بیماری‌ها کمک می‌کند. مهندسان، ربات‌هایی طراحی می‌کنند که در اکتشافات فضایی یا عملیات نجات خطرناک به کار می‌آیند.وقتی شما یک برنامه‌نویس هستید، فقط یک فرد فنی نیستید؛ شما یک حل‌کننده مسئله هستید. شما ابزاری در دست دارید که با آن می‌توانید به طور مستقیم در بهبود زندگی انسان‌ها سهیم باشید. این حس رضایت که کد شما توانسته تغییری مثبت ایجاد کند، با هیچ چیز دیگری قابل مقایسه نیست. این همان “جادوی نهفته” است که از دل منطق و خلاقیت برمی‌خیزد.زبان برنامه‌نویسی به عنوان یک ابزار فلسفیهر زبان برنامه‌نویسی، دیدگاه خاص خودش را به مسائل تحمیل می‌کند. پایتون، با تمرکز بر خوانایی و سادگی، ما را تشویق می‌کند تا به ساختار منطقی و انسان‌محور بودن کدها فکر کنیم. این فلسفه، ما را وامی‌دارد تا از پیچیدگی‌های غیرضروری دوری کنیم و بر روی هدف اصلی تمرکز کنیم.وقتی کدی می‌نویسید، در واقع دارید یک جهان کوچک را با قوانین خودتان می‌سازید. شما تصمیم می‌گیرید که چه چیزهایی در آن جهان وجود داشته باشند، چگونه با هم تعامل کنند، و چه قوانینی بر آن‌ها حاکم باشد. این فرآیند، شبیه به تفکر فلسفی است؛ شما باید مفاهیم را بشکافید، روابط بین آن‌ها را درک کنید، و سپس یک سیستم منسجم و معنادار بسازید.کشف کردن، خلق کردن، و تاثیر گذاشتندنیای کدنویسی، دنیای کشف و خلق است. شما مدام در حال یادگیری چیزهای جدید هستید، با ابزارها و تکنیک‌های تازه آشنا می‌شوید، و ایده‌هایتان را به واقعیت تبدیل می‌کنید. هر پروژه جدید، یک ماجراجویی است. شما با چالش‌های جدیدی روبرو می‌شوید، راه‌حل‌های خلاقانه پیدا می‌کنید، و در نهایت، اثری از خود به جای می‌گذارید.این تاثیرگذاری، فقط در مقیاس بزرگ نیست. حتی یک اسکریپت کوچک که کار تکراری شما را خودکار می‌کند، در زمان شما صرفه‌جویی می‌کند و به شما اجازه می‌دهد تا روی کارهای مهم‌تر و خلاقانه‌تر تمرکز کنید. این همان “تاثیر” است؛ تاثیری که از دل منطق و تلاش شما بیرون می‌آید.آغوش باز تکنولوژی برای هنرمندان و منطق‌دانانپس، اگر اهل هنر هستید و به منطق هم علاقه دارید، دنیای کدنویسی، به خصوص با پایتون، آغوش باز کرده است. اینجا جایی است که می‌توانید هر دو جنبه وجودتان را شکوفا کنید. شما می‌توانید یک “جادوگر دیجیتال” باشید که با ترکیب دانش و خلاقیت، دنیا را به جایی بهتر تبدیل می‌کند.یادتان باشد، هر خط کدی که می‌نویسید، نه تنها یک دستورالعمل برای کامپیوتر، بلکه یک بیان از تفکر، یک اثر هنری، و یک گام به سوی آینده است. پس بیایید این جادو را کشف کنیم و با هم، دنیای دیجیتال را با رنگ‌های خلاقیت و نور منطق، روشن‌تر کنیم.</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Sun, 03 May 2026 13:21:00 +0330</pubDate>
            </item>
                    <item>
                <title>پروژه هفتم پایتون : ماشین حساب</title>
                <link>https://virgool.io/Compile/%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%87%D9%81%D8%AA%D9%85-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-%D8%AD%D8%B3%D8%A7%D8%A8-pd9ljkgrbmdd</link>
                <description>خب وسایل لازم برای ساخت این پروژه :1- پایتون2-کتابخانه tkinterخب حالا کد زیر را داخل پایتون وارد میکنیم .from tkinter import *

class Application(Frame):
    &quot;&quot;&quot; Main class for calculator&quot;&quot;&quot;

    def __init__(self, master):
        &quot;&quot;&quot; Initialise the Frame. &quot;&quot;&quot;
        super(Application, self).__init__(master)
        self.task = &quot;&quot;
        self.UserIn = StringVar()
        self.grid()
        self.create_widgets()

    def create_widgets(self):
        &quot;&quot;&quot; Create all the buttons for calculator. &quot;&quot;&quot;
        # User input stored as an Entry widget.

        self.user_input = Entry(self, bg = &quot;#5BC8AC&quot;, bd = 29, 
        insertwidth = 4, width = 24,
        font = (&quot;Verdana&quot;, 20, &quot;bold&quot;), textvariable = self.UserIn, justify = RIGHT)
        self.user_input.grid(columnspan = 4)

        self.user_input.insert(0, &quot;0&quot;)

        # Button for value 7
        self.button1 = Button(self, bg = &quot;#98DBC6&quot;, bd = 12,
        text = &quot;7&quot;, padx = 33, pady = 25, font = (&quot;Helvetica&quot;, 20, &quot;bold&quot;), 
        command = lambda : self.buttonClick(7))
        self.button1.grid(row = 2, column = 0, sticky = W)

        # Button for value 8
        self.button2 = Button(self, bg = &quot;#98DBC6&quot;, bd = 12, 
        text = &quot;8&quot;,  padx = 35, pady = 25, 
        command = lambda : self.buttonClick(8), font = (&quot;Helvetica&quot;, 20, &quot;bold&quot;))
        self.button2.grid(row = 2, column = 1, sticky = W)

        # Button for value 9
        self.button3 = Button(self, bg = &quot;#98DBC6&quot;, bd = 12, 
        text = &quot;9&quot;,  padx = 33, pady = 25,
        command = lambda : self.buttonClick(9), font = (&quot;Helvetica&quot;, 20, &quot;bold&quot;))
        self.button3.grid(row = 2, column = 2, sticky = W)

        # Button for value 4
        self.button4 = Button(self, bg = &quot;#98DBC6&quot;, bd = 12,
        text = &quot;4&quot;,  padx = 33, pady = 25,
        command = lambda : self.buttonClick(4), font = (&quot;Helvetica&quot;, 20, &quot;bold&quot;))
        self.button4.grid(row = 3, column = 0, sticky = W)

        # Button for value 5
        self.button5 = Button(self, bg = &quot;#98DBC6&quot;, bd = 12, 
        text = &quot;5&quot;,  padx = 35, pady = 25,
        command = lambda : self.buttonClick(5), font = (&quot;Helvetica&quot;, 20, &quot;bold&quot;))
        self.button5.grid(row = 3, column = 1, sticky = W)

        # Button for value 6
        self.button6 = Button(self, bg = &quot;#98DBC6&quot;, bd = 12, 
        text = &quot;6&quot;,  padx = 33, pady = 25,
        command = lambda : self.buttonClick(6), font = (&quot;Helvetica&quot;, 20, &quot;bold&quot;))
        self.button6.grid(row = 3, column = 2, sticky = W)

        # Button for value 1
        self.button7 = Button(self, bg = &quot;#98DBC6&quot;, bd = 12, 
        text = &quot;1&quot;,  padx = 33, pady = 25, 
        command = lambda : self.buttonClick(1), font = (&quot;Helvetica&quot;, 20, &quot;bold&quot;))
        self.button7.grid(row = 4, column = 0, sticky = W)

        # Button for value 2
        self.button8 = Button(self, bg = &quot;#98DBC6&quot;, bd = 12, 
        text = &quot;2&quot;,  padx = 35, pady = 25,
        command = lambda : self.buttonClick(2), font = (&quot;Helvetica&quot;, 20, &quot;bold&quot;))
        self.button8.grid(row = 4, column = 1, sticky = W)

        # Button for value 3
        self.button9 = Button(self, bg = &quot;#98DBC6&quot;, bd = 12, 
        text = &quot;3&quot;,  padx = 33, pady = 25,
        command = lambda : self.buttonClick(3), font = (&quot;Helvetica&quot;, 20, &quot;bold&quot;))
        self.button9.grid(row = 4, column = 2, sticky = W)

        # Button for value 0
        self.button9 = Button(self, bg = &quot;#98DBC6&quot;, bd = 12, 
        text = &quot;0&quot;,  padx = 33, pady = 25,
        command = lambda : self.buttonClick(0), font = (&quot;Helvetica&quot;, 20, &quot;bold&quot;))
        self.button9.grid(row = 5, column = 0, sticky = W)

        # Operator buttons
        # Addition button
        self.Addbutton = Button(self, bg = &quot;#98DBC6&quot;, bd = 12, 
        text = &quot;+&quot;,  padx = 36, pady = 25,
        command = lambda : self.buttonClick(&quot;+&quot;), font = (&quot;Helvetica&quot;, 20, &quot;bold&quot;))
        self.Addbutton.grid(row = 2, column = 3, sticky = W)

        # Subtraction button
        self.Subbutton = Button(self, bg = &quot;#98DBC6&quot;, bd = 12, 
        text = &quot;-&quot;,  padx = 39, pady = 25,
        command = lambda : self.buttonClick(&quot;-&quot;), font = (&quot;Helvetica&quot;, 20, &quot;bold&quot;))
        self.Subbutton.grid(row = 3, column = 3, sticky = W)

        # Multiplication button
        self.Multbutton = Button(self, bg = &quot;#98DBC6&quot;, bd = 12, 
        text = &quot;*&quot;,  padx = 38, pady = 25,
        command = lambda : self.buttonClick(&quot;*&quot;), font = (&quot;Helvetica&quot;, 20, &quot;bold&quot;))
        self.Multbutton.grid(row = 4, column = 3, sticky = W)

        # Division button
        self.Divbutton = Button(self, bg = &quot;#98DBC6&quot;, bd = 12, 
        text = &quot;/&quot;,  padx = 39, pady = 25,
        command = lambda : self.buttonClick(&quot;/&quot;), font = (&quot;Helvetica&quot;, 20, &quot;bold&quot;))
        self.Divbutton.grid(row = 5, column = 3, sticky = W)

        # Equal button
        self.Equalbutton = Button(self, bg = &quot;#E6D72A&quot;, bd = 12, 
        text = &quot;=&quot;,  padx = 100, pady = 25,
        command = self.CalculateTask, font = (&quot;Helvetica&quot;, 20, &quot;bold&quot;))
        self.Equalbutton.grid(row = 5, column = 1, sticky = W, columnspan = 2)

        # Clear Button
        self.Clearbutton = Button(self, bg = &quot;#E6D72A&quot;, bd = 12,
        text = &quot;AC&quot;, font = (&quot;Helvetica&quot;, 20, &quot;bold&quot;), width = 28, padx = 7, command = self.ClearDisplay)
        self.Clearbutton.grid(row = 1, columnspan = 4, sticky = W)

    def buttonClick(self, number):
        self.task = str(self.task) + str(number)
        self.UserIn.set(self.task)

    def CalculateTask(self):
        self.data = self.user_input.get()
        try:
            self.answer = eval&#40;self.data&#41;
            self.displayText(self.answer)
            self.task = self.answer

        except SyntaxError as e:
            self.displayText(&quot;Invalid Syntax!&quot;)
            self.task = &quot;&quot;

    def displayText(self, value):
        self.user_input.delete(0, END)
        self.user_input.insert(0, value)

    def ClearDisplay(self):
        self.task = &quot;&quot;
        self.user_input.delete(0, END)
        self.user_input.insert(0, &quot;0&quot;)


calculator = Tk()

calculator.title(&quot;Calculator&quot;)
app = Application(calculator)
# Make window fixed (cannot be resized)
calculator.resizable(width = False, height = False)

calculator.mainloop()وقتی کد را وارد کنید برنامه زیر را میبینید .فایل نهاییبرای دانلود همین پایتون یا فایل تبدیل شده به برنامه روی نوشته لینک بزنید و 15ثانیه صبر کنید و فایل را دریافت کنید .خب حالا اینم از ماشین حساب اگر ایده یا پروژه ای را دارید در نظرات بنویسید .</description>
                <category>آرتین کریمیان</category>
                <author>آرتین کریمیان</author>
                <pubDate>Sun, 03 May 2026 10:20:28 +0330</pubDate>
            </item>
            </channel>
</rss>