اندازه‌گیری زمان اجرای تکه‌ ‌‌کدها در پایتون

کتابخانه numpy در پایتون یکی از نیازهای اولیه هر برنامه‌نویس پایتون است، اگر کار علمی با پایتون انجام می‌دهید یا با اعداد ارقال سروکار دارید، زندگی بدون numpy جهنم است.
مثل اکثر مطالب دیگر بلاگ که پاراگراف اول چندان به موضوع اصلی نوشته ارتباطی ندارد، این پست نیز از همین قانون پیروی می‌کند و چندان ارتباطی با کتابخانه numpy ندارد. فرض کنید میخواهیم بدانیم بهینه‌ترین راه برای ایجاد یک آرایه با مقادیر اولیه خاص به کمک کتابخانه numpy در پایتون کدامیک از روش‌های زیر است.

1
2
3
import numpy as np;a = np.empty((1000, 1000)); a.fill(5.0)
import numpy as np;a = np.empty((1000, 1000)); a[:] = 5.0
import numpy as np;a = np.full((1000, 1000), 5.0)

کتابخانه timeit ساده‌ترین راه برای اندازه‌گیری زمان اجرای تکه کدهای پایتون و انتخاب روش بهینه میان این گزینه‌ها است، این کتابخانه را می‌توان مستقیما در ترمینال فراخوانی کرد.
برای آزمایش سه راه حل بالا دستور اجرایی مورد نظر ما چنین خواهند بود.

1
2
3
4
5
6
$ python -m timeit "import numpy as np;a = np.empty((1000, 1000)); a.fill(5.0)"
10 loops, best of 3: 7.19 msec per loop
$ python -m timeit "import numpy as np;a = np.empty((1000, 1000)); a[:] = 5.0"
10 loops, best of 3: 7.24 msec per loop
$ python -m timeit "import numpy as np;a = np.full((1000, 1000), 5.0)"
10 loops, best of 3: 6.87 msec per loop

همانطور که از خروجی سه دستور فوق دیده می‌شود استفاده از تابع full راه حل مناسبتری‌است. برای استفاده از این کتابخانه درون کدهای خود نیز میتوانیم به شکل زیر عمل کنیم

1
2
import timeit
timeit.timeit("import numpy as np;a = np.empty((1000, 1000)); a.fill(5.0)", number=1000)

مخفی کردن فایل‌های خاص در اتم، سابلایم و ویژال استدیو کد

چند زمانی هست که با پایتون سر و کار دارم و همزمان که پایتون کد میزنم از VSCode و Atom برای کد نوشتن استفاده میکنم، چیزی که در هردو ویرایشگر بصورت مشترک وجود داره و آزار دهنده‌است، نشون دادن فایل‌های .pyc توی لیست فایل‌های پروژه در نوار کناری ویرایشگر هست. برای این میگم اتم و وی‌اس‌کد این رو دارند، چون توی سابلایم‌تکست بصورت پیش‌فرض این فایل‌های مخفی شدند و در لیست فایل‌های نمایش داده نمی‌شوند. خب روده درازی کافیه برای سراغ کار:

Atom

بخش تنظیات اتم همونطور که دیدید گرافیکی هست، به بخش تنظیمات برید (میانبر ctrl+, یا cmd+, ) و در بخش core دنبال فیلد متنی با عنوان Ignored Names بگردید به انتهای اون فیلد عبارت , *.pyc رو اضافه کنید. اگه قصد مخفی کردن فایل‌‌های دیگه‌ای رو هم دارید میتونید عبارت منظم مربوط به تشخیص اون فایل رو هم به این فیلد اضافه کنید، فقط توجه داشته باشید که عبارات منظم نوشته شده توی این فیلد با ویرگول از هم جدا می‌شوند

Atom Ignored Names

Visual Studio Code

در ویژال استدیو کد تنظیمات بصورت متنی و به فرمت json هست و برای مخفی کردن فایل‌های .pyc تنها کافیه به بخش تنظیمات برید (میانبر ctrl+, یا cmd+, ) و کد زیر رو به تنظیمات خودتون اضافه کنید.

1
2
3
"files.exclude": {
"**/*.pyc": true
}

اگه قصد مخفی کردن فایل‌های دیگه‌ای هم هستید متونید مثل کد بالا عمل کنید و پترن مربوط به فایل‌های مدنظر خودتون رو بنویسید.

Sublime Text

قبلا هم گفتم که سابلایم‌تکست خودش بصورت پیش‌فرض فایل‌های .pyc رو مخفی می‌کنه، دلیل که اینجا سابلایم رو هم آوردن اینه که اگه قصد داشتید فایل‌های خاص دیگه‌ای رو مخفی کنید با تنظیمات این ویرایشگر هم کمی آشنا باشید. به بخش تنظیمات برید (میانبر ctrl+, یا cmd+, ) و کد زیر رو به تنظیمات خودتون اضافه کنید.

1
"file_exclude_patterns": ["*.pyc", "*.pyo", "*.exe", "*.dll", "*.obj","*.o", "*.a", "*.lib", "*.so", "*.dylib", "*.ncb", "*.sdf", "*.suo", "*.pdb", "*.idb", ".DS_Store", "*.class", "*.psd", "*.db", "*.sublime-workspace"]

کد بالا تنظیات پیش‌فرضی هست که سابلایم داره و من فقط همون مقدار پیش‌فرض رو اینجا نوشتم، همونطور که خودتون میبینید *.pyc هم جزو پترن‌های مخفی کردن فایل‌ها هست.

NginX: Redirect http requests to https

تو جهان حاضر بعیده کسی دستی تو وب داشته باشه و از خواص امنیتی داشتن SSL آگاه نباشه، امروزه دیگه HTTPS یک نیاز برای سایت‌ها محسوب میشه. برای همین هم سایت‌هایی مثل letsencrypt.org بوجود اومدن تا به افراد بی‌بضاعتی مثل ما که توانایی خرید گواهینامه SSL نداریم کمک کنند. در کل SSL چیز خوبیه که داشته باشیم، البته بگذریم از این که درستش این بود که HTTP وجود نداشت و همه چی HTTPS بود، ولی ما کاری به این کارا نداریم.
اگه گواهینامه معتبری برای دامنه خودتون ندارید پیشنهاد میکنم حتما سری به letsencrypt.org بزنید و یک گواهینام معتبر برای خودتون بگیرید. این گواهینامه‌ها البته محدودیت زمانی دارند ولی تو خود سایت راه رو نشون داده که چجوری خیالتون از منقضی نشدنش راحت بشه.

ادامه را بخوانید

چگونه از electron برای ایجاد یک برنامه استفاده کنیم

اتفاقات زیادی تو زندگی میوفته که باعث میشه آدم تصمیماتش رو تغییر بده، این پست و کلا پست جدید تو بلاگ قرار نبود تا تموم شدن برنامه‌ای که میخوام بسازم نوشته بشه، پیش خودم تصمیم گرفته بودم که پست جدید رو بعد از تموم شدن darling مینویسم. (دارلینگ اسم برنامه‌ای هست که قصد دارم بعنوان واسط کاربری مدیریتی برای hexo بنویسم و در حال حاضر فقط بخش‌هاییش رو پیاده سازی کردم و نیازمند بسی تغییره)
البته موضوع پست چندان بیربط به این برنامه نیست و اینکه این پست رو هم دارم با نسخه خیلی اولیه darling مینویسم که فعلا نقشnotepad رو داره :) توی این پست قراره نحوه راه اندازی الکترون و اجرای یک کد خیلی کوچک توی اون رو با هم ببینیم.
بدون هیچ حرف دیگه‌ای بریم سراغ کارامون

ادامه را بخوانید

چگونه سطح دسترسی فایل‌ها را به کمک گیت به حالت اولیه برگردانیم

اگه اشتباهی یا خواسته سطح دسترسی فایل‌های پروژه خودتون رو تغییر داده باشید و پشیمون شده باشید، چجوری این اشتباه خودتون رو جبران می‌کنید؟ راه حل خودمونی اینه که خودمون دستی سطح‌دسترسی هارو برگردونیم ولی اگه این وسط فایل‌هایی وجود داشتند که نیازمند دسترسی خاصی بودند و ما یادمون نبود یا حواسمون نبود، بووووم. اگه کد پروژتون رو با گیت مدیریت می‌کنید راه حل ساده است،‌ فقط کافیه از گیت بپرسید که کدوم فایل‌ها تغییر کردند، فایل‌هایی که سطح دسترسی اونها تغییر کرده رو پیدا کنید و برگردونید به حالت اصلی.
میشه تنها با یک خط دستور تو ترمینال این کار رو انجام داد. چجوری؟

ادامه را بخوانید

ایجاد mappingهای پیش‌فرض برای ایندکس‌ها در الاستیک‌سرچ

الاستیک سرچ یک موتور جست‌جوی رایگان و قدرتمند هست که قابلیت‌های بسیاری داره و میشه از اون در موارد زیادی استفاده کرد با کمی سرچ می‌تونید با کاربرد‌های مختلف اون آشنا بشید.
الاستیک برای اینکه بتونه داکیومنت‌هارو درون خودش نگه داره و بدونه که چجوری باید درون اون‌ها جست‌وجو کنه نیازمند یک mapping هست که توسط مدیر سیستم ایجاد میشه. این mapping مشخص میکنه که کدوم فیلد چه کاربردی داره، نوعش چی هست و چجوری باید index بشه، اصلا index بشه یا نه، چجوری آنالیز بشه، اینکه در سرچ کلی نقش داشته باشه یا نه و … . هر مجموعه‌ای که به الاستیک اضافه میشه (الاستیک این مجموعه‌ها رو index نامگذاری میکنه) باید دارای یک مپ باشه تا الاستیک بدونه که چجوری باید با داکیومنت(داده)های درون اون برخورد کنه. پس یعنی شما موظف هستید که پیش از اضافه کردن داده به index یک mapping برای اون index بسازید.

ادامه را بخوانید

نصب و راه‌اندازی کاساندرا روی دو سرور

کاساندرا یک دیتابیس Distribute هست که توسط بنیاد آپاچی داره گسترش پیدا می‌کنه، ویژگی‌های خوبی داره از جمله اینکه واسط راحتی برای برقراری ارتباط داره، cql شبیه sql هست و به همون راحتی. اینجا نمی‌خوام خوبی و بدی کاساندرا رو بگم اینجا قراره باهم ببینیم چجوری میشه با کاساندرا یک کلاستر ایجاد کرد.
برای اینکه بتونیم نصب کاساندرا روی دو سرور رو شبیه‌سازی کنیم،نیاز به یک centOs روی VirtualBox داریم که از اون بعنوان سرور دوم استفاده کنیم،سرور اول هم همون سیستم‌عامل خودمون هست(البته میشه چندتا کاساندرا رو روی سیستم عامل خودمون اجرا کنیم و کانفیگ کنیم، این راهی بود که من انتخاب کردم). همچنین برای اینکه centOs هم به اینترنت متصل باشه و هم بتونم با یک IP مشخص با اون ارتباط برقرار کنیم توی تنظیمات شبکه VirtualBox آداپتور اول رو بصورت NAT و آداپتور دوم رو بصورت Host Only تنظیم می‌کنیم، اولی برای اتصال به اینترنت و دومی برای دسترسی استفاده میشه.

ادامه را بخوانید

Atom Packages

قبلا تو بلاگ راهنمای کوتاهی درمورد اتم نوشته بودم و چند پکیج کاربردی رو توی اون معرفی کرده بودم، ولی پکیج‌هایی که الان بصورت روزمره از اون‌ها استفاده میکنم هیچ‌کدوم از پکیج‌هایی که در اون پست معرفی کردم، نیستند، به همین دلیل تصمیم گرفتم پست جدیدی بذارم و این پکیج‌هارو معرفی کنم.
اگر هنوز دستور apm رو توی خط فرمان خود فعال نکردید همین الان اون رو فعال کنید، نحوه فعال کردن این دستور رو توی مطلب قبلی می‌تونید پیدا کنید.

ادامه را بخوانید

Let's Encrypt Postfix and Dovecot

اگه شما صاحب کسب و کار هستید یا حتی یک سرور شخصی دارید و هنوز گواهینامه ssl معتبر ندارید حتما به let's encrypt سر بزنید و یک گواهینامه ssl متعبر برای دامنه خودتون بگیرید. اگر میل سرور هم راه انداختید و میخواید که از گواهینامه‌ای که گرفتید برای اون استفاده کنید، این پست برای شماست، اگه میل سرور ندارید روی این لینک کلیک کنید و برید ببینید lets encrypt چیه.

ادامه را بخوانید

تنظیمات لازم برای پشتیبانی بیش از ۶۴کیلو اشاره‌گر در اندروید

فایل apk نرم‌افزارهای اندروید حاوی فایل ایندکسی به فرم Dalvik Executable هستند که این فایل حاوی کدهای کمپایل شده مورد نیاز برای اجرای برنامه است. این فرمت حداکثر میتواند تعداد 65,536 متود را آدرس دهی کند که این متودها حاوی شامل متودهای خود اندروید، کتابخانه‌های استفاده شده در برنامه و کدهای خود شماست، به بیان کامپیوتری برنامه‌های اندروید میتوانند تعداد 64K متود را آدرس‌دهی کنند. (برای یک سیستم عامل توی دنیای امروز کمی شرم‌آور بنظر میرسه، هرچند همین 64K خودش عدد بزرگی هست)
بلا بلا بلا بلا - بیاید فرض کنیم کلی حرف دیگه که می‌تونید براحتی از منبع این پست پیدا کنید رو من اینجا گفتم - خب حالا نکته اینجاست که اگه واقعا بیشتر از 64K متود داشتیم چه گلی باید به سرمون بگیریم؟

ادامه را بخوانید