کار با PDF
چند وقتی هست لازم دارم با فایل های pdf کار کنم و نمیخوام هزینه زیادی کنم و حتی نرم افزار اضافی نصب کنم برای همین هم با سایت زیر آشنا شدم که همه ی کارهایی که لاز درم رو انجام میده:

آموزشهای جادو
چند وقتی هست لازم دارم با فایل های pdf کار کنم و نمیخوام هزینه زیادی کنم و حتی نرم افزار اضافی نصب کنم برای همین هم با سایت زیر آشنا شدم که همه ی کارهایی که لاز درم رو انجام میده:

چند روز پیش برای استفاده از open CV در ویندوز ۱۱ دچار مکشل شدم و درواقع در فراخوانی کتابخونه پایتونی با خطای زیر مواجه شدم:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python311\Lib\site-packages\cv2\__init__.py", line 181, in <module>
bootstrap()
File "C:\Python311\Lib\site-packages\cv2\__init__.py", line 153, in bootstrap
native_module = importlib.import_module("cv2")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ImportError: DLL load failed while importing cv2: The specified module could not be found.
حالا مشکل از کجا بود؟
نوع ویندوزی که نصب شده بود. ویندوز از سری N بود و خوب این باعث میشه نشود از OpenCV استفاده کرد. برای حل موضوع لازمه یک نرم افزار نصب بشه که روش زیر رو ترجیح میدم:
ابتدا نرم افزار PowerShell زو به صورت Run as administrator باز کنید و دستور زیر رو بزنید تا Media Pack نصب بشه. احتمالا مشکل شما هم بر طرف خواهد شد:
DISM /Online /Add-Capability /CapabilityName:Media.MediaFeaturePack

قبل از هرچیز باید بگم چرا اصلا این ویدجت رو لازم دارم. من چند ویندزو مختلف دارم که هرکدوم کاربرد مختلفی دارند و همه البته روی یک سیستم بالا میان. برا یهمین لازم دونستم که به نوع یبه خودم توضیح بدم اینها هر کدوم چی هست. نکته مهم اینکه من بصورت دستی یک واتر مارک برای هر سیستمم ایجاد میکردم حالا با کمک هوش مصنوعی تونستم فایل زیر و اماده کنم تا اطلاعاتیکه میخوام رو توی سیستم نمایش بده. الان حتی میتونم اگه چیز دیگه ای هم لازم بود بهش اضافه کنم.
توی ویندزو ۱۱ لازم است ابتدا Power Shell رو ابتدا به صورت Run As Administrator باز کنید و دستور زیر رو اجرا کنید.
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
در ادامه با هر ویرایش گر متنی که دارید میتونید فایل زیر رو ایجاد کنید:
# System Info Overlay Widget for Windows 11
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
# Get system info
$os = Get-CimInstance Win32_OperatingSystem
$winVersion = "$($os.Caption) $($os.Version)"
$winBuild = $os.BuildNumber
$computerName = $env:COMPUTERNAME
# === 2. Get Active IP Addresses (LAN & Wi-Fi) ===
$ips = @()
$adapters = Get-NetAdapter | Where-Object { $_.Status -eq 'Up' -and $_.InterfaceDescription -notlike "*Loopback*" }
foreach ($adapter in $adapters) {
$ipConfig = Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex -AddressFamily IPv4 -ErrorAction SilentlyContinue
if ($ipConfig) {
$ips += "$($adapter.Name): $($ipConfig.IPAddress)"
}
}
$ipText = if ($ips.Count -gt 0) { ($ips -join "`n") } else { "No active network" }
# Create form (widget window)
$form = New-Object System.Windows.Forms.Form
$form.Text = "System Info"
$form.Size = New-Object System.Drawing.Size(340, 180)
$form.StartPosition = "Manual"
# --- SAFE POSITIONING IN BOTTOM-RIGHT ---
try {
$screen = [System.Windows.Forms.Screen]::PrimaryScreen.WorkingArea
# Force integers
$screenWidth = [int]$screen.Width
$screenHeight = [int]$screen.Height
$formWidth = [int]$form.ClientSize.Width
$formHeight = [int]$form.ClientSize.Height
$x = $screenWidth - $formWidth - 40
$y = $screenHeight - $formHeight - 20
# Ensure non-negative
$x = [Math]::Max(0, $x)
$y = [Math]::Max(0, $y)
$form.StartPosition = 'Manual'
$form.Location = New-Object System.Drawing.Point($x, $y)
} catch {
# Fallback to default location if screen info fails
$form.StartPosition = 'CenterScreen'
}
#$form.Location = New-Object System.Drawing.Point(20, 20) # Top-left corner
# Remove always-on-top
$form.TopMost = $false
# Transparent background (black = transparent)
$form.FormBorderStyle = 'None'
$form.ShowInTaskbar = $false
$form.Opacity = 0.92
$form.BackColor = [System.Drawing.Color]::Black
$form.TransparencyKey = [System.Drawing.Color]::Black
# === 4. Create Label ===
$label = New-Object System.Windows.Forms.Label
$label.ForeColor = [System.Drawing.Color]::White
$label.Font = New-Object System.Drawing.Font("Segoe UI", 14)
$label.AutoSize = $false
$label.Size = $form.ClientSize
$label.TextAlign = "MiddleLeft"
#$label.Padding = New-Object System.Windows.Forms.Padding(10, 0, 0, 0) # Left padding for readability
$label.Text = "$winVersion `nPC: $computerName `n$ipText"
# Add label to form
$form.Controls.Add($label)
# Make it click-through (optional)
$form.TopMost = $false
$form.Show()
$form.Focus()
# Keep the window alive
while ($form.Created) {
[System.Windows.Forms.Application]::DoEvents()
Start-Sleep -Milliseconds 100
}
این فایل رو با نام دلخوام و پسوند ps1 ذخیره کنید. خوب فایل ما آماده شد. برای تست کردن روی اون راست کلیک کنید و Run with PowerShell رو بزنید. باید ویدجت شما بالا بیاد.
حالا میخوایم همین رو کاری کنیم با بالا اومدن ویندوز خودش بالا بیاد و لازم نباشه هر بار به صورت دستی بازش کنیم. برای این کار مسیر زیر رو برید:
1- Press `Win + R` , type `shell:startup`, hit enter.
2- Right-click → New → Shortcut
3- location:
-- powershell.exe -WindowStyle Hidden -ExecutionPolicy Bypass -File "C:\Path\To\SystemInfoWidget.ps1"
4- Name it (e.g., "SysInfo Widget").
راه دیگه ای که داریم هم اینکه یک فایل با پسوند vbs بسازید و متن زیر رو توش کپی کنید:
CreateObject("Wscript.Shell").Run "powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -File ""F:\SystemInfoWidget.ps1""", 0, False
حالا برای این فایل جدید در shell:startup یک میانبر با ادرس زیر بسازید:
wscript.exe "F:\RunWidget.vbs"
کار با فایل های pdf در سیستمعامل ویندوز یا مک احتمالا خیلی راحت باشد. البته به شرطی که بخواهید از ابزار های تجاری موجود استفاده کنید. ابزار هایی مثل adobe acrobat ، PDF Exchange یا Foxit PDF Editor pro و ... . اما واریش و کار با این ابزار ها عموما در لینوکس امکان پذیر نیست از طرفی شما وابسته هستید به این ابزار ها و امکانات آنها. اما در لینوکس و کلا سیستم های آزاد هم شما ابزار هایی برای کار با pdf ها دارید. در این پست دستورات مختلفی که در طی زمان با اون ها کا رمیکنم رو معرفی می کنم.
برای این کار ابزار qpdf میتونه کمک کننده باشه:
qpdf sample.pdf --rotate=90 -- output.pdf

یکی از تفاوتهایی که چینش زاستاندارد صفحه کلید فارسی در ویندوز و لینوکس دارند. دکمه های ترکیبی با AltGr یا همون دگرساز سمت راست است. در ادامه یک چینش مطابق چیزی که در لینوکس وجود دارد رو ایجاد کردم و میتوانید از اون توی ویندزو استاده کنید.
برای تولید این چینش از نرم افزار KbdEdit استفاده شده است.
لینک دانلود فایلها: download
در صورتی که در شبکه های مجازی لازم باشد متنی بنویسیم که از ترکیب کلمات فارسی و انگلیسی باشد عموما این نرم افزار ها برای تشخسص جهت از اولین کاراکتر نوشته شما کمک میگیرند و RTL بودن یا نبودن رو تشخیص میدهند.
حالاتصور کنید اگه کلمه ای که میخواهید بنویسید بصورت انگلیسی باشد. به این ترتیب در زمان نمایش با کل متن شما به عنوان یک جمله انگلیسی (یا به بیانی دیگر LTR) برخورد میشود.
خوب توی کیبور استاندارد میتونید از نویسه RLM استفاده کنید. این یک نویسه از نوع فرمت بندی است. و شما پس از نوشت این نویسه چیزی در متن مشاهده نمیکنید. برای دسترسی به این نویسه راه های زیر را در اختیار دارید:
در کیبورد استاندارد: altGr + 0 ، در HTML از ‏ و ‏ و ‏ استفاده میکنیم و در نهایت کد unicode این نویسه U+200F است.
برای نوشتن هر نویسه با کد unicode اون در لینوکس فرایند زیر را انجام دهید.
ابتدا با گرفتن دکمه های ctrl+shift+u در محل نوشت یک حرف u انگلیسی ظاهر میشود. دکمه ها را رها کنید. کد مورد نظر را تایپ کنید و یک بار اسپیس بزنید.
نویسه مورد نظر شما چاپ میشود.

یکی از مشکلاتی که خیلی وقتها با اون مواجه میشوم. مشکل دانلود فایلهای کتابخونههایی است که استفاده میکنم. مشکل از اونجایی است که گاهی حجم اینها زیاد است و مشکل بزرگتر هم سرعت اینترنت در ایران است. از این رو توی این پست میخوام راه کاری که برای پایتون (Python) بهش رسیدم رو توضیح بدم.
نکته اول اینکه لازم است یک سرور محلی برای خودتون درست کنید برای این منظور هم کتابخونه pypi-server رو پیشنهاد میدهم. بعد از نصب این ابزار (یک کتابخونه پاتونی است) کافیه که بهش پوشه حاوی فایل های whl خودتون رو بدید.
# install from
## https://pypi.org/project/pypi-server/
pypi-server run -p 8091 /$HOME/whlRepo
طبق دستور بالا من از دایرکتوری whlRepo که توی دارکتوری اصلی کاربر ساختم استفاده میکنم و روی پرت 9081 یک سرور محلی بالا میارم. حالا چطور ازش استفاده کنم؟ گام اول اینکه یه سری کتابخونه توش دانلود کنید و البته هر بار میخواهید نصب کنید اول دانلود کنید، حالا چطور؟
pip download --extra-index-url http://localhost:8091 -d /$HOME/whlRepo <packages name>
با دستور بالا فایل های مربوطه توی دایرکتوری گفته شده دانلود میشوند. نکته جالب اینکه اول توی خود ریپازیتوری سرچ میکنه و اگه نبود میره از اینترنت دانلود میکنه. بعد از اینکه دانلود تموم شد میتونید با دستور زیر نصب رو انجام بدید
pip install --extra-index-url http://localhost:8091 <packages name>
حالا یه نکته ریز دیگه میمونه و اونم اینکه به جای دو دستور زیر من یک فانکشن توی شل ایجاد میکنم و اینجوری بدون مشکل با دستور خودم که ایجاد کردم هر دو مرحله رو انجام میدم:
# in .bashrc
mypip() {
PKGS=("$@")
pip download "${PKGS[@]}" --extra-index-url http://localhost:8091 -d /$HOME/whlRepo && pip install "${PKGS[@]}" --extra-index-url http://localhost:8091
}
البته برای اینکه همیشه این سرویس بالا باشه میتونیم یه سرویس توی systemd ایجاد کنیم بصورت زیر :
sudo nano /etc/systemd/system/pipyserver.service
و محتویاتش رو به شکل زیر بنویسیم:
[Unit]
Description=A minimal PyPI server for use with pip/easy_install.
After=network.target
[Service]
Type=simple
# systemd requires absolute path here too.
PIDFile= /home/<your user>/whlRepo/pypiserver.pid
User=<your user>
Group=<your user>
ExecStart=pypi-server run -p 8091 /home/<your user>/whlRepo --log-file /home/<your user>/whlRepo/log.log
ExecStop=/bin/kill -TERM $MAINPID
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
WorkingDirectory=/home/<your user>/whlRepo
TimeoutStartSec=3
RestartSec=5
سپس با دستورات زیر فعالش کنید:
sudo systemctl enable pipyserver.service
sudo systemctl start pipyserver.service
sudo systemctl status pipyserver.service

چند وقت پیش برای نصب یک کتابخونه توی گولنگ به مشکل برخوردم و خوب طبیعتا مشکل از وضعیت تحریم اعمال شده بر ایران بود از این رو یا باید حتما از فیلترشکن استفاده کنیم یا اینکه به سمت استفاده از میرور ها برویم. در این پست استفاده از میرور ها برای پکیجمنیجر های مختلف آمورش داده میشود:
در لینوکس یا مک به راحتی با دستور زیر میتونید از gpproxy.cn استفاده کنید
$ echo "export GO111MODULE=on" \u003e\u003e ~/.profile
$ echo "export GOPROXY=https://goproxy.cn" \u003e\u003e ~/.profile
$ source ~/.profile
در ویندوز هم در بخش system environment variables به راحتی دو متغییر تعریف کنید مقادیسر اون ها رو مطابق زیر قرار دهید:
# Variable : Value
GO111MODULE : on
GOPROXY : https://goproxy.cn
منبع: goproxy
برای کسانی که از زبیان راست استفاده می کنند می توان میررور https://rsproxy.cn/ را معرفی کرد.
برای استفاده هم فقط کافیه دو متغیر زیر رو توی سیستم تعریف کنید:
export RUSTUP_DIST_SERVER="https://rsproxy.cn"
export RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup"
منبع: rsproxy
برای پایتون چندید میرور لیست وجود دارد که می توانید از آنها برای بهبود سرعت دانلود استفاده کنید.
برای مثال شرکت های ایرانی ارائه دهنده PyPi mirror مثل runflare. در ادامه لیستی از این شرکت ها ارئه شده است.
برای استفاده از هرکدام از سرورهای فوق از دستور الگوی زیر استفاده کنید
pip install --trusted-host [host] -i [address] package-name
البته میتوانید از دستورات زیر برای تنظیم به صورت سراسری استفاده کنید
pip config --user set global.index [address]
pip config --user set global.index-url [address]
pip config --user set global.trusted-host [host]

این چند وقت یهو دیدم دیگه نمیتونم فایلها و پوشه ها رو به راحتی با vscode باز کنم. درواقع میخوام با راست کلیک کردن روی پوشهها و فایل ها، گزینهای برای باز کردن با vscode داشته باشم. برای این منظور لازمه یه کم تغیراتی رو توی registery بدیم.
البته در ادامه فایلی که من اماده کردم رو هم میتونید اجرا کنید و خودش توی رجیستری تغییرات را اعمال میکنه. Vscode.reg
اول دکمه های win + r رو میزنیم. توی برنامه ای که باز شد مینویسیم:
regedit
در صفحه نرم افزار که باز شد کافیه ابتدا در مسیر:
[Computer\HKEY_CLASSES_ROOT\*\shell]
یک دارکتوری به نام Vscode بسازیم.
سپس توی این دارکتوری یک دارکتوری به اسم command در ادرس
[\Computer\HKEY_CLASSES_ROOT\*\shell\Vscode]
بر روی فایل (Default) راست کلیک کرده و modify بزنید.
اینجا در این سمت مقدار هرچیزی که بنویسید توی منوی راست کلیک نمایش داده میشود من نوشتم :
Open with Code.
حالادر همین ادرس یک Key ایجاد کنید با عنوان Icon و مقدار
C:\Users\ssmns\AppData\Local\Programs\Microsoft VS Code\Code.exe
یا هر ادرسی که یک ایکون برای Vscode دارید.
خوب تا اینجای کار برای فایل ها تغییرات داده شده ولی فقط یک ایتم توی منو ایجاد شده و نه اینکه کار کنه. پس توی ادرس زیر
[\Computer\HKEY_CLASSES_ROOT\*\shell\Vscode\command]
بر روی فایل (Default) راست کلیک کرده و modify بزنید.
اینجا بنویسد:
"C:\Users\ssmns\AppData\Local\Programs\Microsoft VS Code\Code.exe\" "%1
خوب کارمون تموم شده با این تفاوت که هنوز برای پوشه ها کاری نکردیم.
برای اون ها همین کار ها رو انجام بدید با این تفوات که مسیر اصلی به صورت زیر است:
[Computer\HKEY_CLASSES_ROOT\Directory\shell]
و مقدار
[\Computer\HKEY_CLASSES_ROOT\Directory\shell\Vscode\command]
باید به صورت زیر باشد:
"C:\Users\ssmns\AppData\Local\Programs\Microsoft VS Code\Code.exe" "%V"