موجودی عجیب! به نام Bloom Filter در برنامه نویسی

بلوم فیلتر و کاربرد آن در برنامه نویسی

خُب این بلوم فیلتر چیه و به چه دردی میخوره را من هم نمی‌دونستم تا اینکه توی مقاله‌ای برای کاهش مصرف حافظه و کاهش افزونگی داده‌های تبادل شده بین نودهای شبکه‌های تحمیل پذیر تاخیر یا DTN بهش برخوردم که البته الان DTN موضوع مورد بحثم نیست و بعدا در یک نوشته جدا بهش می‌پردازم.

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

فرض کنید می‌خواهیم وجود یک عنصری را در مجموعه جستجو کنیم، اگر ساختار داده (Data Structure) به شما جواب داد که این عضو در مجموعه وجود دارد احتمال دارد که وجود نداشته باشد. اما اگر بگوید وجود ندارد، قطعاً درست است. بر این اساس خطای مثبت داریم ولی خطای منفی امکان پذیر نمی‌باشد.

احتمالا شما هم مثل من گیچ شدید 🙂

فرض کنید ما یک برگه کاغذ داریم که فقط و فقط مشخصات داده‌هایی که وارد میشن را می‌نویسیم دقت کنید ما در مورد داده‌های که خارج میشن چیزی نمی‌نویسیم. به این معنی که ممکنه یک داده‌ای وارد شده باشه و بعد هم خارج شده باشه و ما فقط زمان ورود اسمش را ثبت کردیم. بزارید با یک مثال پیش بریم. فرض کنید متغیرهای X,U,A,H وارد شدند. حالا اگر یک نفر از ما سوال کنه که داده X داخل لیست هست یا نه؟ ما چه جوابی می‌تونیم بدیم؟ همونطور که شما هم دارید حدس می‌زنید، درسته ما می‌تونیم بگیم X در لیست وجود داره اما این را هم در نظر داشته باشید که یک احتمال هم هست که متغیر X توی لیست نباشه و خارج شده باشه و از اونجایی که ما فقط و فقط اسامی ورودی ها را یادداشت می‌کنیم این توضیح در مورد خطای مثبت و خطای منفی درست هست. توجه داشته باشید ما نمی‌رویم داخل مجموعه‌ای که عنصرها داخلش ذخیره شدند جست و جو انجام بدیم و ببینیم آیا هنوز عنصر وارد شده هست یا نه، ما فقط یک لیست ثبت نامی یا همون برگه کاغذ را داریم که فقط و فقط لیست ورودی ها را داخلش می‌نویسیم. مثلا ما نمی‌رویم داخل دانشگاه تک تک اتاق اساتید را بررسی کنیم و دنبال آقای X بگردیم. بجای این کار فقط لیست اسامی وارد شده درب ورودی را چک می‌کنیم.

حالا بیاید دنبال Y بگردیم و خب نتیجه جست و جو به ما میگه که Y در لیست نیست. در این حالت ما قطعا می‌تونیم بگیم که Y وجود نداره چرا؟ چون اصلا وارد نشده هنوز تا اسمش توی کاغذ ما ثبت بشه.

یک سوال مهمی که پیش میاد این هست که این ساز و کار به چه دردی می‌خوره و چه کاربردی داره؟ کجاها می‌تونه باعث کاهش افزونگی و افزایش سرعت بشه؟

با این مقدمه بریم سراغ معرفی ساختار داده‌های احتمالاتی و بلوم فیلتر و کاربردش در برنامه نویسی


تعریف Bloom filter

احتمالا می‌دونید که جدول درهم سازی(hash table) چطور کار می کنه؟ اگر نمی‌دونید پیشنهاد می‌کنم یک سری به ویکی بزنید.

در علوم رایانه، جدول درهم‌سازی یا جدول هش نوعی ساختمان داده است که مقدارهایی[۱] که باید ذخیره شوند را به وسیله تابع هش (درهم سازی) با کلیدهای ویژه‌ای مرتبط می‌سازد. عملیات اولیه‌ای که این جدول تسهیل می‌کند عمل مراجعه است. به این معنی که کاربر می‌تواند با سرعتی کارآمد داده مورد نظرش را در آن بیابد. در جدول‌های هش همچنین افزودن داده‌های جدید در زمان کم امکان‌پذیر است. زمان لازم برای جستجو و افزودن وابسته به نوع جدول و میزان داده‌ها هستند. این زمان می‌تواند با انتخاب جدول مناسب به مرتبه زمانی O(1) برسد.

وقتی شما یک داده جدید در یک آرایه یا لیست ساده وارد می کنید، index همون مکانی که داده در آن قرار داده می شه از روی داده ای که داره تشخیص داده نمی‌شه. این به این معنی هست که ارتباط مستقیمی بین index و مقدار ذخیره شده در اون خونه از آرایه وجود ندارد.به همین دلیل اگر شما نیاز داشته باشید که یک مقدار را در آرایه جست و جو کنید، مجبور خواهید شد که همه Index ها را جست و جو کنید تا داده مورد نظرتون را پیدا کنید. اما در جدول درهم‌ساز شما key یا index را توسط هش کردن مقدار یا value تشخیص می دید. بعد این مقدار را در این index از لیست قرار می دید. به این معنی که key از روی مقدار value تشخیص داده می‌شه و هر زمانی شما نیاز به بررسی اینکه آیا value موجود هست یا نه داشته باشید شما فقط مقدار value را hash‌ می‌کنید و بعد بر اساس key جست وجو می‌کنید که توی تصویر زیر نشون داده شده. این خیلی سریعتر هست و مرتبه الگوریتم نیز O(1) است که خب خیلی سریع‌تر از O(n) است.

نحوه عملکرد جدول درهم سازی یا hash table

خب تا اینجا مقدمات اصلی یا بهتره بگم پیش نیازهایی در مورد بلوم فیلتر را با هم بررسی کردیم و دیگه رسیدیم به قسمت های ساده تر و اصلی، بزارید با یک مثال کمی ملموس‌تر توی دنیای برنامه نویسی جلو بریم. بیاید در نظر بگیریم که یک لیست بزرگی از پسوردهای ضعیف وجود دارد و آن‌ها روی برخی از سرورهای remote ذخیره شده‌اند. امکان لود همه پسوردها بصورت فوری در حافظه memory/RAM به خاطر فضای کم وجود ندارد. هر زمان یک کاربر پسورد خودش را وارد می‌کند شما می‌خواهید بررسی کنید که اگر پسورد ضعیف بود به کاربر یک هشدار بدید. چه کار می‌تونید بکنید؟ در نظر بگیرید که شما لیست پسوردهای ضعیف را دارید، شما می تونید این‌ها را در یک جدول درهم ساز یا چیزی مشابه ذخیره کنید و هر زمان که می‌خواهید بررسی کنید، به جای جستجوی داده اصلی شما می توانید چک کنید که آیا هیچ گزینه متناظری وجود دارد یا نه. این تناظر یا تشابه ممکن است سریع باشد اما هزینه جست و جوی آن روی دیسک یا روی شبکه در یک سرور ریموت ممکنه زیاد یا باعث کندی باشه.

فراموش نکنید که شما این کار را برای هر پسوردی که توسط کاربر وارد میشه باید انجام بدید. چطور میشه هزینه این کار را کاهش داد؟

بلوم فیلتر میتونه به ما کمک کنه. اما چطوری؟ بریم ببینیم بلوم فیلتر چطور کار می‌کنه.

طبق تعریف بلوم فیلتر می‌تونه یک مقدار را در حالت‌های “احتمال وجود آن در مجموعه است” یا “قطعا در آن مجموعه نیست” بررسی کند. تفاوت ظریف بین احتمالا و قطعا نه در اینجا بسیار مهم است.

به خاطر این جمله “احتمالا در مجموعه است“ می‌باشد که چرا این ساختار داده‌ها احتمالاتی نامیده می‌شوند. و با تعریف هایی که شده بدین معنی است که مثبت کاذب امکان پذیر هست اما منفی کاذب غیر ممکن است. عجله نکنید، در ادامه با مثال عملی می‌بینیم که دقیقا اینا یعنی چی. بلوم فیلتر اساسا شامل یک بردار بیتی یا لیست بیتی(یک لیست شامل مقدار بیت فقط ۰ یا ۱) به طول m، با مقدار اولیه ۰ مانند شکل زیر است:

مقداردهی لیست بیتی بلوم فیلتر

برای اضافه کردن یک آیتم به بلوم فیلتر، ما اول آیتم مون را به k تابع هش مختلف می دهیم هر تابع هش یک عدد به ما می‌دهد که ما متناظر با هر عدد توی آرایه‌مون مقدار اون خونه را برابر ۱ قرار می‌دهیم. همونطور که می‌تونید ببینید در جدول هش ما از یک تابع هش تکی استفاده کردیم و به عنوان نتیجه فقط یک index تکی به عنوان خروجی داشتیم.

اما در این مثال از بلوم فیلتر ما از تابع هش چندگانه (k تعداد توابع هش) استفاده می‌کنیم که خروجی چندگانه نیز خواهیم داشت.

خروجی تابع هش چندگانه برای کلمه geeks

همونطور که در تصویر بالا مشخص هست برای ورودی آیتم geeks ما سه تابع هش داریم که هر تابع یک مقدار به ما بر می‌گردونه که در این مثال مقدار ۱ ,۴,۷ هست یعنی خونه شماره ۱ , ۴ و ۷ را از صفر به ۱ تغییر میدهیم که ما آن ها را مشخص کردیم.

خروجی تابع هش چندگانه برای کلمه nerd

به همین ترتیب برای ورودی دیگری به نام nerd توابع هش به ما ۳ خروجی ۳,۴,۵ را می‌دهد.

شاید متوجه شده باشید که index شماره ۴ یا همون خونه شماره ۴ قبلا با کلمه geeks علامت گذاری شده(از صفر به ۱ تغییر داده شده). خب تا اینجا با بردار بیتی خودمان را با دو وردی پر کرده ایم. و حالا می تونیم بررسی کنیم که آیا مقدار مورد نظر ما داخل آن وجود دارد یا نه. اما چطوری؟ خیلی ساده هست. ما یک جدول هش ایجاد کردیم. ورودی مورد نظرمون که می‌خواهیم جست و جو کنیم را با سه تا تابع هش می‌کنیم و نتیجه سه تا تابع که سه تا عدد است را بررسی می کنیم که کدام index‌ها یا ساده‌تر کدوم مکان‌های آرایه میشه. مثلا اگر بخواهیم ببینیم کلمه nerd وجود دارد یا نه کافیه ابتدا این کلمه را بدیم به سه تابع هش و خروجی که سه تا عدد است را داخل آرایه تک بعدی بررسی کنیم. که خب هر سه تا خونه مقدارش برابر ۱ است یعنی این عنصر احتمالا وجود دارد.

جستجوی کلمه cat در بلوم فیلتر

در ادامه بزارید جست و جو برای کلمه cat را انجام دهیم که خروجی سه تابع هش این کلمه برابر ۱ ,۳,۷ هست که می‌تونیم ببینیم که مقدار هر سه تا خونه ۱,۳,۷ برابر ۱ هست که این به این معنی است که ما می‌توانیم بگوییم “احتمالا کمله cat در لیست وارد شده است”. اما وارد نشده است!!

پس این خطا از کجا است؟ در واقع هیچ خطایی رخ نداده. به این اتفاق میگن خطای مثبت کاذب که در ادامه نحوه جلوگیری از این اتفاق را هم توضیح می‌دهم. بلوم فیلتر به ما می گوید که این نشان می دهد که شاید کلمه cat قبلا وارد شده بوده است زیرا همه خانه‌های index مربوط به خروجی سه تابع هش برای کلمه cat برابر ۱ است(حتی با داده های مختلف دیگه). خب این کجاش مفیده و بدرد می‌خوره؟

بیاید در نظر بگیریم اگر خروجی توابع هش برای کلمه cat به جای ۱,۳,۷برابر ۱,۶,۷ می‌بود، در این صورت چی می‌شد؟ ما می تونستیم ببینیم که Index مربوط به ۶ برابر ۰ است. که به این معنی هست که با هیچ ورودی، قبلا این خونه علامت‌گذاری(تغییر از صفر به ۱) نشده. که به این معنی است که کلمه cat هیچ وقت وارد نشده است. این نحوه کار بلوم فیلتر است که می تواند به ما بگوید “دقیقا”داده در لیست وجود ندارد. خب به طور خلاصه:

  • اگر ما برای یک مقدار جست و جو کردیم و نتیجه هر هش‌ای را پیدا کردیم که مقدار آن برابر ۰ بود ما می‌توانیم با اطمینان بگوییم که در لیست وجود ندارد.
  • اگر همه indexهای خروجی توابع هش برابر ۱ باشد آنگاه ممکن است مقدار جست و جو شده وجود داشته باشد.

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

خب بزارید برگردیم به مثال پسورد که ابتدا در موردش صحبت کردیم. اگر ما بررسی پسوردهای ضعیف را با این نوع از بلوم فیلتر پیاده سازی کنیم، ابتدا، ما بلوم فیلترمان را با یک لیست از پسوردهای ضعیف که به ما یک بردار بیتی می‌دهد که برخی از indexهای آن با ۱مقدار دهی شده و مابقی با ۰ مقدار دهی شده است، ایجاد می‌کنیم. از آنجایی که اندازه بلوم فیلتر نمی تواند خیلی بزرگ باشد و یک اندازه ثابت دارد، این می تواند به راحتی در حافظه ذخیره شود حتی در صورت نیاز می‌تواند در سمت client ذخیره شود.

به همین دلیل است که بلوم فیلتر بسیار space-efficient است. در حالی که یک جدول هش نیاز به داشتن اندازه دلخواه بر اساس داده‌های ورودی دارد، بلوم فیلترها می توانند با اندازه ثابت به خوبی کار کنند و این یعنی عملیات جستجو خیلی سریع‌تر و ساده‌تر خواهد بود.

بنابراین هر بار که کاربر پسورد خود را وارد می کند ما آن را به توابع هش می‌دهیم و خروجی توابع هش که مکان خانه‌های آن در بردار بیتی است را بررسی می‌کنیم که وجود نداشته باشد. اگر پسورد به اندازه کافی قوی باشد بلوم فیلتر به ما نشان می دهد که پسورد دقیقا در لیست پسورد های ضعیف نیست و نیازی نیست که ما کوئری سمت سرور بزنیم. اما اگر پسورد ضعیف بود و به ما جواب مثبت(ممکن است مثبت کاذب باشد) داده شود، ما یک درخواست سمت سرور برای بررسی لیست اصلی می کنیم. همانطور که می‌بینید اغلب اوقات ما حتی نیاز به درخواست از سرور و یا از دیسک برای چک کردن لیست نداریم که این باعث بهبود قابل توجهی در سرعت نرم افزار می‌شود چرا که صرفا یک بردار بیتی را بررسی می‌کنیم و سمت دیتابیس کوئری نمی‌زنیم. در صورتی که بخواهیم بردار بیتی را در سمت سرویس گیرنده یا client ذخیره کنیم، هنوز هم می توانیم آن را در حافظه سرور بارگزاری کنیم و حداقل برخی از زمان جست و جوی دیسک را صرفه جویی کنیم. به بیان ساده‌تر به جای مراجعه به لیست بلندی از پسوردها و جست و جو داخلشون که از مرتبه n یا دیگر مرتبه ها است ما از روی پسوردها یک بردار بیتی درست می‌کنیم و برای بررسی کلمه مورد نظر را هش می‌کنیم مثلا ۳ تا خروجی میده فقط ۳تا خونه بردار بیتی را بررسی می کنیم که سرعت کار ما را خیلی بالا می‌بره.

همچنین در نظر بگیرید که اگر نرخ خطای مثبت بلوم فیلتر شما ۱% باشد به این معنی است که در میان هزینه های مراجعه به سرور یا دیسک، تنها ۱% از کوئری‌های ما با خطا مواجه خواهد شد و ۹۹درصد دیگر سمت سرور نخواهند رفت. بد نیست نه؟

عملیات‌های بلوم فیلتر

یک بلوم فیلتر ساده از دو عملیات test (یا بررسی) و add (یا اضافه کردن) پشتیبانی می‌کند. Test برای چک کردن اینکه آیا یک عنصر در مجموعه وجود دارد یا نه و عملیات add هم برای اضافه کردن یک عنصر به مجموعه.

به نظرتون امکان حذف کردن یک ایتم از بلوم فیلتر وجود دارد؟ قبل از ادامه دادن یکم روی جواب تون فکر کنید.

قبل از جواب دادن به سوال بالا بیاید یک مثال بصورت عملی بررسی کنیم. فرض کنید در بردار بیتی دو کلمه geeks و nerd را اضافه کردیم:

حالا ما میخواهیم عنصر geeks را از بلوم فیلتر حذف کنیم. بنابراین اگر ما ۱,۴,۷ را از بردار بیتی حذف کنیم که قبلا توسط geeks علامت گذاری شده بودند، و ما مقدارشونا به ۰ تغییر بدیم چه اتفاقی می افتد؟

به سادگی می‌تونید ببینید که اگر ما در ادامه کلمه nerd را جست و جو کنیم همانطور که می‌بینید Index شماره ۴ برابر ۰ هست و این به ما می‌گوید که دقیقا nerd در لیست وجود ندارد در حالی که اشتباه است. این بدین معنی است که امکان حذف در بلوم فیلتر وجود ندارد.

پس راه حل چیه؟ در واقع توی بلوم فیلتر ساده چنین امکان وجود نداره. اما اگر واقعا به چنین چیزی نیاز دارید می تونید از یک نسخه تغییر یافته بلوم فیلتر به نام Counting bloom filter استفاده کنید. ایده ساده است. به جای مرتب سازی یک بیت تکی از مقدارها، ما یک مقدار integer را ذخیره می کنیم و بردار بیتی ما بردار integer خواهد بود. قابلیت حذف کردن باعث افزایش اندازه و هزینه ما خواهد شد. در این حالت به جای علامت گذاری یک مقدار بیت با ۱ هنگام ورود داده، ما مقدار integer را به مقدار ۱ افزایش می دهیم و اگر داده جدیدی وارد بلوم فیلتر کردیم یک واحد دیگه افزایش می‌دهیم مثلا مقدار خانه اگر ۱ بود با افزایش مجدد به ۲ تغییر داده می‌شود و در هنگام حذف کلمه یک واحد از خانه‌هایی خروجی توابع هش کم می‌کنیم. برای بررسی اینکه یک عنصر موجود هست یا نه کافی هست که عنصر را هش کنیم و خانه هایی را که بررسی میکنیم مقدارشون بیشتر از ۰ باشه. که قابلیت حذف را ما فعلا نیاز نداریم و بیشتر از این هم بهش نمی‌پردازیم.


اندازه Bloom filter و تعداد توابع Hash

شاید به این فکر کرده باشید که اگر اندازه بلوم فیلتر کوچک در نظر گرفته بشه ممکنه سریع همه خونه های آن برابر ۱ بشه و بعد از این هر کلمه‌ای چه در لیست باشه چه نباشه را بررسی کنیم جواب مثبت برگردانده بشه. بنابراین اندازه بلوم فیلتر خیلی مهم است. در اینجا اگر اندازه بلوم فیلتر بزرگ انتخاب شود ما جواب های مثبت کاذب کمتری داریم و اگر اندازه کوچک باشد ما جواب های مثبت کاذب بیشتری خواهیم داشت. اینجا یک موضوع جدید خواهیم داشت با عنوان نرخ خطای مثبت کاذب. پارامتر مهم دیگر این است که چه تعداد تابع هش نیاز داریم؟

اینجا است که تحقیقات دانشگاهی می‌تواند به کمک ما بیاد(این موضوع را برای این اشاره کردم که بعضی از دوستان فکر می‌کنند دانشگاه در مقطع تحصیلات تکمیلی به چه دردی میخوره؟ دقیقا به درد کارهای تحقیقاتی می‌خوره که اینجا یک نمونه‌ش را اشاره می‌کنم).

طبق مقاله ارائه شده که نتیجه آن در شکل زیر نشان داده شده می‌توانید ببینید که اندازه بلوم فیلتر و تعداد توابع هش به صورت مناسب چقدر هست:

در نمودار بالا با افزایش تعداد تابع هش یعنی k، نرخ خطا که با p نشان داده شده کاهش پیدا می‌کند. در واقع ما می‌توانیم نرخ خطای کاذب مثبت P را بر اساس اندازه بلوم فیلتر که با m و تعداد تابع هش که با k نشان می‌دهیم، اگر تعداد عنصر ورودی ما(مثلا تعداد پسوردها) برابر n باشد، می‌توانیم بصورت زیر محاسبه کنیم:

محاسبه احتمال خطای کاذب برای بلوم فیلتر

اگر به ریاضیات علاقه ای ندارید نگران نباشید 🙂 در واقع ما فقط نیاز داریم که مقدار m و k را مشخص کنیم. اگر نرخ خطای مثبت کاذب ما برابر p باشد و تعداد داده‌های ورودی برابر n باشد ما می تونیم از فرمول های زیر برای محاسبه پارامترهامون استفاده کنیم:

محاسبه اندازه بلوم فیلتر m و تعداد توابع هش مورد نیاز k

نکته دیگه که باید توجه کنید این هست که هدف استفاده از بلوم فیلتر جست و جوی سریعتر هست، ما نمی توانیم از توابع هش با سرعت پایین استفاده کنیم. بنابراین توابع هش رمزنگاری Sha-1 و MD5 انتخاب خوبی برای بلوم فیلترها نیستند. توابع هش سریعتری پیاده سازی شدن که می‌توانید ازشون استفاده کنید. مثلا murmur fnv HashMix انتخاب های بهتری هستند.

کاربردها

بلوم فیلتر برای بررسی عضو داخل یک مجموعه است. مثال ساده بلوم فیلتر برای کاهش هزینه مراجعه به دیسک یا شبکه برای کلیدهای ناموجود است. همونطور که ما می‌توانیم ببینیم بلوم فیلترها می توانند یک کلید را در O(k) جست و جو کنند که k تعداد تابع هش است. این بسیار سریعتر هست که کلید ناموجود را جست و جو کنیم. اگر عنصر در بلوم فیلتر نباشد پس ما نیازی به جست و جوی پر هزینه نداریم. از طرف دیگه اگر عنصر در بلوم فیلتر موجود باشد ما جست و جو را انجام می‌دهیم و می‌توانیم انتظار داشته باشیم که در برخی موارد ما نرخ خطای مثبت کاذب(false positive rate) داشته باشیم. و عنصر موجود نباشد. در ادامه برخی مثال‌های استفاده از بلوم فیلتر را معرفی می‌کنیم.

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

خیلی خلاصه شبکه های تحمل پذیر تاخیر یا DTN شبکه هایی هستند که بر خلاف شبکه های سنتی که ارتباط end-to-end اگر با تاخیر مواجه بشه ارتباط را خاتمه میده می تونن تاخیر را تا حدود زیادی تحمل کنند. در صورت نیاز به مطالعه بیشتر اینجا را می‌توانید مطالعه کنید. در این شبکه ها دو تا گره(node) که همون دستگاه‌ها هستند حالا می‌تواند یک ماشین مجهز به wifi توی بزرگراه هوشمند باشه یا اینکه یک ماهواره در مدار زمین باشه وقتی با همدیگه مواجه می‌شوند باید بسته‌هایی که در بافر خودشون دارند را با یکدیگر مبادله کنند. یک راه ساده انتقال کل بافر هر نود برای نود دیگه است که خب سربار خیلی زیادی داره و از طرف دیگه ممکنه یک نود برخی از پکت‌ها را قبلا توسط بقیه نودها دریافت کرده باشه مجددا دریافت کنه و باعث سربار اضافی بشه. برای کاهش سربار و جلوگیری از ارسال تکراری پکت ها استفاده از بلوم فیلتر یک راهکار خوبی است. به این صورت که ابتدا هر نود یک بردار بیتی(بلوم فیلتر) از بسته هایی که دارد ایجاد می‌کند که حجم بسیار پایینی دارد و آن را برای نود دیگه ارسال می‌کند. و نود قبل از ارسال بسته‌ها چک ‌می‌کند که آیا داخل بلوم فیلتر دریافتی وجود دارند یا نه. اگر بلوم فیلتر جواب منفی داد یعنی بسته‌ها در نود دیگر وجود ندارند و باید ارسال بشوند و اما اگر بلوم فیلتر اعلام کنه که بسته موجود است از ارسال آن جلوگیری میشه. که این می‌تواند باعث کاهش سربار تبادلات شود.

مثال های استفاده از بلوم فیلتر:

  • برای هشدار به کاربران در مورد ضعیف بودن پسورد که در بالا توضیح داده شد.
  • برای جلوگیری از دسترسی کاربران به سایت های مخرب
  • برای بررسی اینکه چه کاربرانی قبلا از سایت شما بازدید کردند بر اساس IP هاشون.
  • برای بررسی اینکه چه تعداد از کاربران محتوای سایت شما را خوانده اند

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

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

در پست های آینده سعی می‌کنم یک مثال کاربردی را بصورت کدنویسی پیاده سازی کنم و شرح بدم.

در پایان امیدوارم این مطلب مفید بوده باشه براتون. اگر سوالی داشتید حتما بپرسید. این مطلب هم اولین نوشته من هست اگر در مورد متن اشکالی/انتقادی/پیشنهادی داشتید خوشحال می‌شم بیان کنید.

منابع

https://en.wikipedia.org/wiki/Bloom_filter

https://hackernoon.com/probabilistic-data-structures-bloom-filter-5374112a7832

https://www.geeksforgeeks.org/bloom-filters-introduction-and-python-implementation/

https://www.semantics3.com/blog/use-the-bloom-filter-luke-b59fd0839fc4/

https://medium.com/better-programming/probabilistic-data-structures-bloom-filter-5374112a7832

نوشته موجودی عجیب! به نام Bloom Filter در برنامه نویسی اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

میخوام برنامه نویس بشم

چقدر خوب آفرین! وقتی یکی به من میگه میخوام برنامه‌نویس بشم تنها جوابی که به ذهنم میاد همینه. اما معمولا سوال بعدی اینه که چه زبانی بخونم؟ و جواب من اینه هرچی دوست داری. یا سوال اینه که کدوم زبان همه بهتره و خفن‌تره که در اینصورت میگم نمیدونم همه شون خوبن دیگه.

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

خلاصه بعد از خوندن سوالای دوستان جوان‌ترم (خودمم هنوز جوانم) تصمیم گرفتم یه متن فارسی بنویسم برای کسایی که میخوان برنامه نویس بشن، البته برنامه نویس وب. برای کسایی که میخوان برنامه نویس غیر وب بشن پیشنهاد میدم گوگل کنن، حتما یه نفر یه جای دنیا یه نقشه راه براشون نوشته.

سوال اول اینه من میخوام برنامه نویسی وب انجام بدم از کجا شروع کنم؟

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

سوال دوم کار برا برنامه نویسی هست؟

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

خب برگردیم به سوال اول، یک نفر میخواد برنامه نویس وب بشه و میخواد بدونه از کجا شروع کنه. اول از همه باید بدونین که تو سال ۲۰۱۹ وب دولوپرها تو سه شاخه فعالیت میکنن، frontend, backend, devOps. بکندی‌ها برنامه مینویسن با دیتابیس و سرور سر و کار دارند و در واقعا برنامه ای که اطلاعات رو میگیره و پردازش میکنه و به کاربر تحویل میده رو انجام میدن. فرانتندی‌ها رو ظاهر سایت می‌کنن در واقع چیزی که کاربر نهایی میبینه و باهاش کار میکنه. DevOps ها برنامه‌های تولید شده رو به دست مشتری تو کوتاهترین زمان میرسونن. البته دوآپس یک اصطلاح تقریبا جدید هست که از سال ۲۰۰۹ بوجود آمده.

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

خب قدم اول اینکه HTML یاد بگیرید. به هر حال پایه همه سایت‌ها که میبینیم HTML هست. HTML یک زبان هست، البته نه زبان برنامه نویسی، یک زبان نشانه گذاری هست که مرورگرها میتوانند آن را بخوانند. چه بکند کار باشید و چه فرانتند باید HTML رو بلد باشین. یادمه یه روزی یکی به من گفت یعنی شما همه‌ی تگ‌های HTML رو حفظین؟ گفتم تقریبا آره. واقعیت اینه که قرار نیست از شما امتحان گرفته بشه و بشینید دو روز تگ‌ها رو توی جعبه لایتنر بزارید و با مفهومشون حفظ کنید. کافیه ۱۰ تا صفحه رو بسازید میبینید که دیگه حفظ میشین تگ‌ها رو. به نظر من خوندن و یادگیری HTML کاریه که باید تو یکی دو روز تموم بشه چون کلی چیز دیگه هست که باید برای یادگیریش وقت بزارید.

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

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

نوشته میخوام برنامه نویس بشم اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

تنبلی و تنبلی

موقع تنبلیم یاد کوالا میوفتم آخه (منبع عکس)

از اولین پستم دو روز میگذره، یکم تنبلیم گرفت و نتونستم دیروز پست رو بذارم…

الان که یادم میوفته میبینم که میتونستم پست بذارم. شاید هم به این دلیل پست نذاشتم که دیروز به همه کارهایی که قرار بود انجام بدم نرسیدم، یعنی انجام ندادم. باید یکم برنامه ریزی دقیق تر و معقولانه تری انجام بدم برای خودم.

دو روز پیش با خودم قرار گذاشتم که آموزش زبان جاوا رو از صفر شروع کنم و تا دو ماه هر روز ساعت ۱۸ تا ۲۱ فقط یادگیری زبان جاوا رو پیگیری کنم که برای تقویت برنامه نویسیم بهتر باشه! ولی متاسفانه پروژه ای که دیروز از سمت کارفرما تایید شد دستخوش تغییرات اساسی در کد نویسی شد و از اپلیکیشن اندروید به وب اپلیکیشن تغییر کرد! من هم تا یک ساعتی تو کما بودم…

من تا حالا کار وب انجام ندادم بیشتر سرم تو لاک خودم بود و با اندروید سر و کله میزدم، آخرش که از کما در اومدم تصمیمم رو گرفتم و گوشیمو برداشتم با استرس تمام با کارفرما تماس گرفتم و قضیه رو صادقانه گفتم که من اصلا سمت وب هیچ تجربه ای ندارم به جز چند خط کدی که با PHP زدم، گفتم که میخوام Angular و NOdeJs رو یاد بگیرم و کارشون رو انجام بدم و البته اینکه تنها نیستم و از یک دوست خوب در این زمینه کمک میگیرم و دوتایی باهم دیگه پروژه رو انجام میدیم و درخواست یک ماه وقت بیشتر کردم برای انجام پروژه .

در کمال تعجب ایشون خیلی خوشحال شدند و کار رو به ما سپردن.

شاید از جسارت بنده خوششون اومده، شایدم از این دسته آدم هایی هستن که میگن به جوان ها باید فرصت داد! در هر صورت ازشون تشکر کردم بابت اعتمادشون و این فرصتی که بهمون دادن، منم قراره کلی انرژی بذارم تا بتونم سربلند بیام بیرون به امید خدا.

البته ممکنه بتونیم متقاعدشون کنیم با .Net Core روی لینوکس کار کنیم و با raspberry board پروژه شون رو اجرا کنیم.

کلی استرس دارم و کلی تحقیق کردم در مورد ویژگی هر دو تاشون و باید تا جمعه که میشه فردا جواب قطعی رو بهشون بدم.

کسی میتونه تو این زمینه راهنماییم کنه؟ قراره زبانی انتخاب کنم که بتونه هم به سخت افزار raspberry board دسترسی داشته باشه مخصوصا پورت COM و اینکه با Angular بتونه کار کنه و یه وب سرویس عالی هم داشته باشه.

ممنون میشم راهنماییم کنید.

با سپاس از اینکه وقت گذاشتین و پست بنده رو خوندین.

نوشته تنبلی و تنبلی اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

پیدا کردن منشا خطا در برنامه با آنالیز فایل Dump

هنگامی که خطاهای غیر منتظره در برنامه مدیریت شده شما رخ می دهد ، شما اطلاعات کمی در مورد این مسئله دارید. اگرچه شما میتوانید تا حدودی جلوی این نوع خطاهای غیرمنتظره را با ابزارهای خطایابی و لاگر رصد کنید ولی همیشه اینطور نیست. ضبط و تجزیه و تحلیل Dump های حافظه ممکن است آخرین گزینه برای شما باشد. خوشبختانه ویژوال استودیو ابزاری عالی برای تجزیه و تحلیل Dump های حافظه است! در این پست به شما نشان می دهم که چگونه Dump های حافظه را جمع آوری کنید و توسط ویژوال استودیو راه حل را پیدا کنید.

ابزارهایی وجود دارند که حافظه را مورد کاوش قرار داده و فعالیت هایی که یک پروسس انجام می دهد را مانیتور می کنند. در حال حاضر ابزارهای مختلفی وجود دارند از جمله Visual Studio, ProcDump, DebugDiag و WinDbg که ما در این پست از ProcDump استفاده می کنیم.

برای شروع من یک برنامه ساده ایجاد کردم که شامل یک button است و با فشردن آن یک خطای نامشخص اتفاق می افتد.

برنامه را اجرا میکنیم، سپس به TaskManager رفته و آیدی پروسس برنامه را پیدا میکنیم.

آیدی پروسس ما ۱۰۸۹۶ می باشد.

ProcDump را دانلود کرده و توسط CMD به این صورت اجرا کرده تا تمامی فعالیت های پروسس موردنظر را زیرنظر بگیرد و فایل Dump را تولید کند.

procdump.exe -ma -e 10896

حالا نوبت به کلیک روی Button جهت ایجاد خطا می رسد. روی باتون کلیک کرده و منتظر می شویم تا Dump از حافظه جمع آوری و در سیستم تولید شود.

عملیات با موفقیت انجام شده و فایل Dump در ادرس مشخص ایجاد می شود.

پیدا کردن منشا خطا

بعد از ایجاد فایل Dump نوبت به پیدا کردن منشا خطا و رسیدن به کد موردنظر می رسد. ویژوال استودیو را باز کنید و فایل Dump را درون VS درگ/دراپ کنید.

در پنجره ای که باز میشود میتوانید مشخصات کاملی از برنامه را مشاهده کنید. سمت راست چند گزینه وجود دارد که با توجه به نوع برنامه (مدیریت شده یا محلی) و زبان برنامه نویسی باید انتخاب کنید. از آنجایی که برنامه ما با زبان سی شارپ ایجاد شده گزینه اول یعنی Debug with Managed only را انتخاب می کنیم.

بعد از انتخاب این گزینه بلافاصله به کدی که باعث ایجاد خطا میشود هدایت می شویم

کلام آخر اینکه سعی کنید تا حد ممکن خودتان خطاها را مدیریت کنید و از ابزارهای خطایاب مانند AppCenter نیز استفاده کنید. اخیرا WPF و WinForm نیز به AppCenter اضافه شده اند.

نوشته پیدا کردن منشا خطا در برنامه با آنالیز فایل Dump اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

معرفی نسخه ۲ Web Template Studio برای VSCode

Web Template Studio چیست؟

Web Template Studio یکسری قالب از پیش تعریف شده هستش که توسط ویزاردی که در اختیار برنامه نویس قرار میده میتونه محیط توسعه برنامه رو همراه با کامپوننت های موردنیاز پیکربندی و آماده کنه، فلسفه اصلی طراحی همچین افزونه ای کاهش زمان برنامه نویس ها برای اماده کردن محیط برنامه نویسی هست

در حال حاظر Web Template Studio از React , Vue, Angular و از Nodejs و Flask برای بک اند پشتیبانی میکنه.

شما میتونید هر ترکیبی از بک اند و فرانت اند رو که دوست داشتید باهم استفاده کنید و اپلیکیشنتون رو باهاش ایجاد کنید.

WTS کاملا متن باز هستش و توسط کارآموزهای شرکت ماکروسافت ایجاد شده

راه اندازی

ابتدا افزونه رو از اینجا دانلود و نصب کنید

با فشردن کلید های Ctrl + Shift + P و نوشتن Web Template Studio ویزارد رو باز کنید

قدم اول : نام پروژه و محل ذخیره

قدم دوم : انتخاب فریمورک

قدم سوم : افزودن صفحات به پروژه

این صفحات برای بازدهی بالا بازطراحی شده اند. برای شروع شما میتوانید انواع مختلف قالب های صفحه را ایجاد کنید که شامل blank، grid، list و حالت master details می باشد.

شما می توانید با کلیک روی preview پیشنمایش این صفحات را مشاهده کنید.

قدم چهارم : سرویس های ابری

درحال حاظر سرویس ابری Azure پشتیبانی میشود

قدم پنجم : بازبینی و ایجاد پروژه

در این مرحله شما میتوانید نمای کلی از پروژه را مشاهده کنید و تغییرات موردنیاز را در صورت لزوم اعمال کنید سپس با کلیک روی Create Project پروژه را ایجاد کنید.

قدم ششم : اجرای برنامه

برای اجرای برنامه خود ترمینال را باز کنید و دستور زیر را ارسال کنید

yarn install

سپس

yarn start

نوشته معرفی نسخه ۲ Web Template Studio برای VSCode اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

۱::۲ – آشنایی با HTML

هفته اول :: جلسه دوم

به نام حضرت دوست که هرچه داریم از اوست

در جلسه ی دوم دوره ی عملی برنامه نویسی وب (Web Development Advanced Bootcamp) قصد داریم آشنایی ابتدایی با مفاهیم HTML بدست بیاریم تا در ادامه جلسات با تمرین های و کارهای عملی که انجام میدهیم آرام آرام این آشنایی عمیق تر و عمیق تر شود.

در جلسه ی قبل با روش کار WEB آشنا شدیم و نقش HTML را در فرآیندهای وب فهمیدیم چیست.

ساختار یک فایل HTML

یک فایل HTML به شکل زیر می باشد.




This is my Web Page Title




زبان HTML زبانی است بر پایه ی برچسب (tag) ها. همانطور که در بالا میبینیم تمامی عبارت های قرار کرفته در بین <> ها تگ هستند. که هر کدام ویژگی خاص خود را دارد. در ادامه تگ ها و ویژگی هاشون رو توضیح خواهم داد.

خط اول : همانطور که در جلسه ی قبل گفته شد وقتی فایل HTML از سرور به کامپیوتر ما میرسد Browser ما شروع میکند به خواندن و تحلیل کردن آن. خوب برای اینکه به Browser بگوییم الان با چه نوع فایلی رو بروست خط اول را مینویسم تا مرورگر مانند یک فایل HTML با فایل رسیده برخورد کند.

خط دوم : این تگ که به تگ ریشه (Root) هم معروف است تگ اصلی HTML است که در ابتدای صفحه باز شده و در انتهای صفحه بسته شده است .

خط سوم : این تگ مشخصات سربرگ یک فایل html را مشخص میکند. مقدار های موجود در این بخش که خطوط ۳ تا ۵ می باشد در صفحه ی ما نمایش داده نمیشود. با مقدار هایی که در این بخش قرار خواهند گرفت به مرور زمان طی دوره آشنا خواهیم شد.

خط چهار : عنوان صفحه ی ما را مشخص میکند در تصویر ۱ محل نمایش این عنوان را مشاهده میکنید.

تصویر ۱ – title

خط شش : تگ body بخش اصلی صفحه وب ماست. که تمام محتوای سایت مان را در بین تگ باز و بسته ی body قرار میدهیم.

تمرین ۱ : همین الان notepad را بازکنید و کدهای html بالا را در آن بنویسید البته به جای … می تونید یک عبارتی را بنویسید و در title هم اسم خودتان را بنویسید. حالا فایل حاصل شده را با پسوند .html برروی کامپیوترتان ذخیره کنید. روی فایل دابل کلیک کنید تا فایل در یکی از مرورگرهای کامپیوترتان باز شود. (تبریک میگم اولین صفحه ی وب تان را ساختید)

Element and Attribute

همانطور که گفتیم زبان html از تگ ها درست شده است و حالا با Elementها آشنا میشیم که به ترکیب تگ باز ، تگ بسته و ویژگی های آن تگ گفته میشود. برای مثال به Element زیر نگاه کنید.

Hamid Reza Madani

اسم element

a

تگ باز – opening tag

تگ بسته – closing tag

ویژگی – attribute

href=”http://www.hrmadani.ir”

محتوا – Content

Hamid Reza Madani

بعضی از element ها هم در html تگ بسته ندارند مانند:

آشنایی با چند Tag پرکاربرد


Hamid Reza Madani

I’m an experienced web developer


src=”https://files.virgool.io/upload/users/4295/avatar/qR3j1J.png?x-oss-process=image/resize,h_90,w_90,center” alt=”hrmadani” />
You can follow me with @hrmadani in all social media

Follow me in the Instagram
href=”https://www.instagram.com/hrmadani/”>@hrmadani
and you can read my posts in
href=”https://virgool.io/@hrmadani”>virgool.io

Thank you…

Copyright © 2019 HRMadani Personal Blog

اولین تگ پر کاربردی که قصد دارم بهتون معرفی کنم تگهای

تا

است که تیتر درست میکند. که

بزرگترین تیتر و

هم کوچکترین آنهاست.

تگ دوم

هست. برای این که بهتر با این مفهوم آشنا بشید تصور کنید تمام این تگ ها جعبه هایی هستند که محتوایی را داخل خودشون ذخیره میکنن. مثلا جعبه ی تیتر که معرفی کردین یا جعبه ی عکس و … بعضی از این جعبه ها توسط مرورگر حالت نمایش متفاوتی خواهند داشت مثل تیتر و بعضی هم فقط قرار است یک محوطه ای باشند برای اینکه محتوایی را در بر بگیرند. تگ

یکی از اون تگ هایی هست که برای خودش یه ویژگی های ظاهری رو دارد. این تگ معرف پاراگراف است.

یکی دیگر از تگ هایی که نقش یک جعبه رو بازی میکند بدون اینکه ویژگی ظاهری داشته باشه تگ

است.

تگ برای ما لینک میسازد که یک ویژگی مهم دارد و آن هم href است که داخل آن آدرس مقصد لینک نوشته میشود.

تگی که به ما امکان میدهد تا تصاویر را در وب نمایش دهیم تگ است که این تگ هم ویژگی ای دارد به نام src که منبع عکس را به ما معرفی میکند.

همانطور که میبینید یکسری از تگ ها مثل دارای تگ بسته هم هستند و یکسری های دیگر مثل دیگر تگ بسته نخواهند داشت و این تگ ها داخل خودشان بسته میشوند.

/>

آدرس دهی نصبی

همانطور که در بالا دیدید برای تگ های img و a نیاز داریم به جایی آدرس بدهیم. در اینجا باید با مفهوم آدرس دهی نصبی آشنا بشیم. آدرس دهی نصبی در یک عبارت ساده یعنی بدانیم کجا هستیم تا از همانجا با قوانین آدرس دهی کامپیوتری بتوانیم به مقصد برسیم.

۱- آدرس دهی به سایتی دیگر

@hrmadani

همانطور که مشاهده میکنید آدرس کامل یک وب سایت دیگر را در لینکی در صفحه ی خودمان قرار داده ایم که باعث میشود با کلیک برروی عبارت داخل تگ ما به وب سایت داخل href منتقل بشویم.

۲- آدرس منبعی در سایت دیگر

ممکن است شما بخواهید یک عکس را که در سایتی دیگر است در صفحه ی خودتان نمایش دهید. با قرار دادن آدرس کامل آن عکس در ویژگی SRC میتوانید آن عکس را نمایش دهید.

شما می توانید از منابع دیگری هم از وب سایت های دیگر استفاده کنید.

۳- آدرس صفحه ی دیگری در وب سایت خودتان

Home

برای مثال در صفحه ی about.html هستید و قصد دارید به صفحه ی اصلی سایت منتقل شوید که فایل این دو صفحه در کنار یک دیگر قرار دارد شما برای این کار میتوانید با ثبت اسم فایل به آن صفحه لینک داشته باشید.

فرض کنید ساختار پوشه بندی و محل قرار گیری فایل ها در وب سایت ما به صورت زیر است:

الان قصد داریم در فایل index.html لینکی درست کنیم که با کلیک برروی آن به File1.html منتقل شویم. لینک مورد نظر به چه شکلی خواهد بود؟

File1

حالا میخواهیم در Index.html لینک ورود به File2.html را داشته باشیم. حالا چطور؟

حالا قصد داریم در File3.html لینک انتقال به File1.html را داشته باشیم. لینک مورد نظر به چه شکلی خواهد شد؟

همانطور که در بالا دیدیم برای رفتن به پوشه ی بالاتر کافیست از “/..” استفاده کنیم.

تمرین ۲ : حالا شما با ساختن این درخت سعی کنید در تمام فایل ها لینک رسیدن به فایلهای دیگر را ایجاد کنید.

Image Element

به ویژگی های تگ img زیر دقت کنید.

در تگ بالا ویژگی های زیر را میتوانیم مشاهده کنیم.

alt

این ویژگی کمک میکند تا در زمانی که به هر دلیلی عکس ما نمایش داده نشد این متن به جای تصویر مورد نظر ما نمایش داده شود. البته این ویژگی کمک های بیشتری به ما میکند از جمله اینکه به SEO (بهینه سازی سایت برای موتورهای جستجو – این موضوع را در آینده توضیح خواهم داد.) سایت کمک میکند و …

title

زمانی که mouse تان را روی عکس نگه دارید این متن ظاهر میشود. البته این بخش هم کاربردهای بیشتری دارد که به این بخش مربوط نمیشود و در جای خودش حتما تشریح خواهم کرد.

دو ویژگی بعدی هم طول و عرض تصویر را مشخص میکند که با روش های مختلفی میتوان این اندازه ها را مشخص کرد که الان من از اندازه هایی برحسب پیکسل استفاده کردم.

HTML Comment

یکی از چیزهایی که کد یک مبتدی یا کسی که کار را بلد نیست از کد یک حرفه ای متمایز میکند کامنت های بجا و دقیق در کد است. برای همین در هر زبان برنامه نویسی قاعده ای برای ثبت توضیحاتی در کد در نظر گرفته شده است که این توضیحات اضافه در زمان اجرای برنامه یا کد اجرا نمیشوند و صرفا توسط کسانی که به کد دسترسی دارند قابل مشاهده است.

در html هم قاعده ی کامنت نوشتن در کد به شکل زی است.

تمرین نهایی این جلسه

وب سایتی طبق طرح اولیه ی زیر درست کنید.

htmlتمرین نهایی

با کلیک برروی دکمه ی Top به بالای صفحه منقل میشویم.

https://www.instagram.com/hrmadani/

عالم عامل عاشق باشید.

نوشته ۱::۲ – آشنایی با HTML اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

۷ ایده ناب ساخت اپلیکیشن جدید و پردرآمد

اگر شما هم دنبال ایده های ناب و خلاقانه برای ساخت اپلیکیشن پردرآمد هستید و میخواهید یک اپلیکیشن جدید رو با یک ایده عالی بسازید پیشنهاد میکنم حتما این مقاله رو مطالعه کنید، چون در این مقاله ما ۷ ایده جدید ساخت اپلیکیشن رو پیشنهاد می کنیم. ایده هایی که می تونند موجب ساخت یک اپلیکیشن پردرآمد توسط شما بشوند و زندگی شما رو از این رو به اون رو کنند، چون ما در «بررسی درآمد برنامه نویسان ایرانی اندروید» با واقعیت های عجیب و درآمدهای میلیونی توسعه دهندگان اپلیکیشن های موبایل مواجه شدیم. بخت با شما یاره. پس با ما همراه باشید.

۷ ایده ناب ساخت اپلیکیشن جدید و پردرآمد

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

۱٫ ایده ساخت اپلیکیشن طراحی دکوراسیون داخلی مجازی

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

ایده ساخت اپلیکیشن طراحی دکوراسیون داخلی مجازی

در طراحی این اپلیکیشن از فناوری واقعیت افزوده (Augmented Reality) استفاده کنید. کمی بیشتر روی این ایده فکر کنید و از این ایده یک اپلیکیشن فوق العاده بسازید.

۲٫ ایده ساخت اپلیکیشن مترجم تصویری انگلیسی

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

ایده ساخت اپلیکیشن مترجم تصویری انگلیسی

یعنی اگر همچین اپلیکیشنی برای ما ایرانی ها وجود داشت مطمئنا من جزء اولین نفرها بودم که اون رو خریداری میکردم. مطمئن باشید اگر این اپلیکیشن خوب ساخته شه همون روزهای اول میلیون ها نفر از دانش آموزش ها، دانشجوها و … اون رو دانلود خواهند کرد.

۳٫ ایده ساخت اپلیکیشن قصه های صوتی برای کودکان

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

ایده ساخت اپلیکیشن قصه های صوتی برای کودکان

۴٫ ایده ساخت اپلیکیشن کمک به مادران به وسیله صدای نوزاد

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

ایده ساخت اپلیکیشن کمک به مادران به وسیله صدای نوزاد

اینطوری هم به خیلی از پدر و مادرها کمک کردیم و هم به اون بچه ی کوچولو. اپلیکیشن جالبی میتونه باشه، خیلی از پدر و مادرها هم بهش نیاز دارند. میتونید از پزشک ها برای پیاده سازی اپلیکیشن این ایده کمک بگیرید.

۵٫ ایده ساخت اپلیکیشن پیش بینی مسابقات فوتبال

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

ایده ساخت اپلیکیشن پیش بینی مسابقات فوتبال

نکته: قبل از پیاده سازی فیسبوک، ایده شبکه های اجتماعی مطرح شده بود حتی شبکه اجتماعی MySpace پیاده سازی شده بود اما فیسبوک این ایده را بهتر پیاده سازی و ارائه کرد و اکنون میلیاردها دلار از این ایده درآمد دارد.

۶٫ ایده ساخت اپلیکیشن کتاب های ترجمه شده ایرانی برای بازار جهان

خوشبختانه ایران که از منظر فرهنگ و تمدن پیشنه غنی داره و صدها کتاب از بزرگان ما وجود دارد که مردم زیادی از سراسر کشورها خواستار اون ها هستند. کار ترجمه، چاپ و ارسال این کتاب ها هزینه های زیادی داره، پس این یک فرصت فوق العاده برای توسعه دهندگان جهت ساخت یک اپلیکشین پردرآمد هست. یک بازار بزرگ جهانی در انتظار این اپلیکیشن هست. برای اینکه بهتر با این بازار آشنا بشید و با انگیزه بیشتر این اپلیکیشن رو بسازید، پیشنهاد میکنم «چرا باید برنامه نویسی اندروید را یاد بگیریم» رو مطالعه کنید.

ایده ساخت اپلیکیشن کتاب های ترجمه شده ایرانی برای بازار جهان

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

۷٫ ایده ساخت اپلیکیشن یافتن ایده ها و هم تیمی

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

ایده ساخت اپلیکیشن یافتن ایده ها و هم تیمی

چرا این ایده ها رو به شما گفتیم؟
شاید برای شما سوال پیش اومده که چرا این ایده ها رو به شما گفتیم و پیش خودمون نگه نداشتیم. هدف ما در بادانش ارزش آفرینی با کمک کردن به دوستانی است که میخواهند شروع کنند و این در تحقق شعارمون یعنی هموار کردن مسیر موفقیت هست. از طرفی ما در پست « آنچه در موفقیت ایده ها مهم تر است » به ۲ نکته مهم در این راستا پی بردیم. اول اینکه آنچه که از خود ایده ها مهم تر هستند نحوه پیاده سازی و اجرای اون ها است. شاید خیلی از این ایده ها قبلا وجود داشته و به ذهن شما هم رسیده باشه، مهم نیست. اینکه شما چطور این ایده ها رو پیاده سازی می کنید مهم تر است. دوم اینکه شاید هم کسانی این ایده ها رو پیاده سازی کرده باشند بازهم مهم نیست که اولین باشید، سعی کنید بهترین باشید.

اگر شما هم ایده ای دارید می توانید با ما در میان بگذارید، تا ضمن کمک سایر دوستانتون، ما رو هم در تکمیل در این مقاله یاری کنید.

و اما نکته آخر

اگر شما قابلیت پیاده سازی این ایده ها رو دارید و مایلید با همکاری بادانش اون ها رو بهتر پیاده سازی کنید، ما باکمال میل به شما کمک میکنیم تا با همکاری هم، این ایده ها رو به بهترین شکل عملی کنیم. برای اینکار کافی است با ایمیل بادانش تماس بگیرید و یا فرم همکاری با بادانش رو پر کنید.

نوشته ۷ ایده ناب ساخت اپلیکیشن جدید و پردرآمد اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

مقایسه ی React native، Xamarin، Flutter و Ionic

سلام مجدد به همه ی همراهان عزیز سایت همیار توسعه دهنده.

مدتیه که شرکت های مختلف مدام دارن روش هایی رو ارائه میدن که برنامه نویسا بتونن تحت یه کد نویسی واحد برای سیستم عامل های Android و IOS کد بزنن. به این شکل که شما به یه زبون خاصی کد مینویسی و بعد برای سیستم عامل دلخواه خروجی میگیری. همیشه دغدغه ی برنامه نویسا مخصوصا برنامه نویس های جوان این بوده که بالاخره کدوم بهتره یا کدوم آینده ی بهتری داره که شروع کنن به یادگیری. توی این مقاله در سایت همیار توسعه دهنده میخوام بین ابزار های ارائه شده یه مقایسه انجام بدم تا بتونه به همه ی کسایی که تو این زمینه مشکل دارن کمک کنه.

مقایسه ی React native، Xamarin، Flutter و Ionic که چهار ابزار معروف ارائه شده از طرف شرکت های مطرح هستن و مدتیه که سر و صدا کردن. البته چند وقت پیش یدونه جدید پیدا کردم به اسم Native Script که چون تازه اومده نمیتونم دربارش خیلی نظر بدم. فقط در این حد که میتونید با فریم ورکهای جاوا اسکریپت مثل Vue.js یا Angular اپ های Native با Performance خوب تولید کنید.

برای درک بهتر مقایسه ها، مطالب رو دسته بندی کردم و از چند جهت مقایسه میکنم:
زبان برنامه نویسی، Performance، المنت های استفاده شده در UI، پشتیبانی توسط سازنده یا برنامه نویس های دیگه، کارایی، اپ های نوشته شد و هزینه و Open source بودن.

۱- زبان برنامه نویسی

  • React Native: توی React Native شما بیشتر با جاوا اسکریپت کد میزنید و تماما استاندارد های ES6 رو رعایت میکنید. اگر قبلا با فریم ورک react js کار کرده باشید و به اون مسلط باشید یه نقطه ی قوت بزرگ براتون محسوب میشه و میتونید خیلی سریع پیش برید. همچنین اگر توی گیت هاب کامپوننتی پیدا نکردید و یا قصد دارید از یه کتابخونه ی خاص Native استفاده کنید که برای ری اکت نیتیو وجود نداشت میتونید اون رو توی کد های اندرویدش import کنید و در واقع این تیکه رو به زبان خود java یا Swift یا obj-c کد بزنید.
  • Xamarin: توی زامارین شما باید به زبون C# تحت dot net enviroment کد بزنید که برای برنامه نویس های سی شارپ خیلی خبر خوبیه. مخصوصا اینکه میتونید از Xamarin forms استفاده کنید که البته خوب نیست تو بخش های بعدی بهتون میگم.
  • Ionic: توی ionic شما تماما مثل طراحی سایت به زبون های html,css,js کد میزنید که البته type script هم توش پشتیبانی میشه.
  • Flutter: زبان استفاده شده در فلاتر زبان تازه تاسیس Dart هستش که خیلی شبیه جاواست و برای برنامه نویس هایی که قبلا جاوا کار کردن دستورات خیلی به چشم آشنا میاد.

۲- Performance

  • React Native: ری اکت نیتیو از ویو های کاملا نیتیو استفاده میکنه و به لحاظ performance نزدیک به نمونه ی Native کار میکنه و خیلی روون و دلچسبه. اگر بخوایم بهش نمره بدیم میتونیم بگیم حدودا ۴ از ۵٫
  • Xamarin: اگر از Xamarin forms استفاده کنید خیلی پرفرومنس بالایی حس نمیکنید و میشه بهش ۳ از ۵ داد اما درحالت جدا جدا یعنی android یا ios تقربا چیزی شبیه نیتیو بهتون تحویل میده و میشه بهش ۴ از ۵ داد..
  • Ionic: بخاطر اینکه کل برنامه ی شما عملا یه وب ویوی سادس نهایتا بشه بهش ۲ از ۵ داد. واقعا کنده.
  • Flutter: فلاتر از ویوهای اختصاصی خودش استفاده میکنه و اصلا کاری به ویوهای Native نداره. بخاطر همین پردازش های خاص خودش رو هم داره و در نهایت یه پرفرومنس عالی ارائه میده. به نظر میاد خیلی راحت بشه برنده ی این بخش معرفیش کرد و ۵ از ۵ رو بهش اختصاص داد.

۳- المنت های طراحی UI

  • React Native: ری اکت نیتیو از ویوهای کاملا نیتیو استفاده میکنه
  • Xamarin: زامارین با ویوهای کاملا نیتیو کار میکنه
  • Ionic: این دوست عزیز فقط از html , css استفاده میکنه
  • Flutter: فلاتر با ویوهای کاملا اختصاصی که اسمشون ویجت هست کار میکنه.

۴- پشتیبانی ها و مشارکت برنامه نویسان

  • React Native: بیشترین مشارکت رو توی توسعه از طرف برنامه نویسا داره و برنده ای این بخش با امتیاز ۵٫
  • Xamarin: مشارکت برنامه نویسا توی توسعه ی زامارین خیلی خوبه و پشتیبانی خوبی هم داره و میشه بهش ۳٫۵ از ۵ داد.
  • Ionic: باورم نمیشه که هنوز برنامه نویسا دارن اینو توسعه میدن ولی خوب میشه بهش ۳٫۵ داد.
  • Flutter: فلاتر خیلی معروف نبود اما یه شیب عجیب روبه بالا تو ماه های اخیر باعث شد امتیازی که میخوایم بهش بدیم از ۲ به ۵ برسه و کنار ری اکت نیتیو قرار بگیره.

۵- کارایی در طراحی

  • React Native: با ری اکت نیتیو میتونید ۱۰۰% اپ هایی که میخواید رو تولید کنید و محدودیت خاصی از این نظر دیگه وجود نداره.
  • Xamarin: زامارین بخاطر محدودیت هایی که داره خیلی نمیشه روش مانور داد و شما میتونید با اون برنامه های ساده بنویسید شاید ۸۰درصد کارایی براتون داشته باشه.
  • Ionic: اینم مثل زامارین فقط میتونه اپ های ساده بهتون بده نهایتا ۶۰ درصد اپ هارو بتونه براتون طراحی کنه.
  • Flutter: فلاتر قدرت بالایی از خودش نشون داده و درست مثل ری اکت میتونید ۱۰۰% اپلیکیشن ها رو باهاش پیاده سازی کنید

۶- اپلیکیشن های نوشته شده

  • React Native: فیسبوک و اینستاگرام بزرگترین برنامه های نوشته شده با ری اکت هستن
  • Xamarin: برنامه های oio,ther world bank و storyo که هیچکدوم هم نمیشناسم با زامارین نوشتن
  • Ionic: برنامه های justwatch و pacifica
  • Flutter: هنوز کسی ریسک آنچنانی سر فلاتر نکرده الان فقط برنامه ی Hamilton رو میشناسم که با فلاتر نوشتن

۷- هزینه ها

همه ی ابزار ها از طرف سازنده به صورت Opern Source ارائه شده و کاملا رایگانن.

۸- نتیجه

میدونم از این جمله بدتون میاد اما مجبورم بازم بگم که کاملا بستگی به خودتون داره. اول و آخر هچکدوم از راه های بالا مثل Native کار کردن نمیشه اما اگر میخواید برید سمت سیستم های Cross Platform روی ری اکت نیتیو و فلاتر تمرکز کنید و وقتتون رو برای بقیه ی موارد تلف نکنید.
ترتیب بندی نهایی:
۱- React Native , Flutter
2- Xamarin
3- Native Script
4- Ionic

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

اگه دوست داشتید یه سر به وبسایت شخصی ما هم بزنید

نوشته مقایسه ی React native، Xamarin، Flutter و Ionic اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

آموزش برنامه نویسی اندروید | کار با Event Bus

سلام

امروز میخوام یه کتابخونه ی فوق العاده کاربردی رو بهتون معرفی کنم که خیلی جاها حجم کدنویسی شما رو به شدت پایین میاره.
کتابخونه ی EventBus، یه سیستم حرفه ای برای BroadCast کردن رویدادها به کار میره. شما در هرجای برنامه ( سرویس و … ) میتونید یه اتفاق رو به هرجایی که Subscribe این اتفاق هست ارسال کنید. مثلا توی آموزش خواندن پیامک در اندروید که داشتیم شما میتونید این اتفاق رو خیلی راحت پس زمینه بررسی میکنیم و نتیجه رو میاریم رو UI و متن گرفته شده رو داخل تکست باکس قرار میدیم.

نحوه ی کار با کتابخونه EventBus :

۱- نصب با Gradle:

compile 'org.greenrobot:eventbus:3.1.1'

نصب با Maven:


org.greenrobot
eventbus
۳٫۱٫۱

۲- ساخت مدل از اطلاعات:

ساخت مدل بستگی به خودتون داره اما برای پیامک، من مدل رو به این شکل ساختم:

public class SmsModel {
    String text;

    public SmsModel(String text) {
        this.text = text;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}

۳- برای سپردن اطلاعات به EventBus:

EventBus.getDefault().post(new SmsModel(SOME_DATA_STRING));

۴- حالا برای اینکه یه تابع رو subscribe این خبر کنیم تو اکتیویتی مورد نظر یه تابع مینویسیم با انوتیشن زیر:

@Subscribe
public void onRec(SmsModel model) {
   
    txtCode.setText(model.getPercent());
    
}

۵- نکته آخر اینکه توی اکتیویتی مورد نظر حتما این چند خط رو اضافه کنید:

@Override
public void () {
    super.();
    EventBus.getDefault().register(this);
}

@Override
public void () {
    super.();
    EventBus.getDefault().unregister(this);
}

تمام شد حالا شما با رخداد خاص تو مرحله ۳ میتونید اطلاعات رو به هرجایی که خواستید بفرستید.

امیدوارم براتون مفید باشه

برای دیدن مطالب بیشتر به وب سایت hamyardeveloper.ir مراجعه کنید

نوشته آموزش برنامه نویسی اندروید | کار با Event Bus اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

افزایش سرعت اندروید استودیو

اندروید استودیو یک محیط برنامه نویسی برای نوشتن برنامه در پلتفرم اندروید هست که در سال ۲۰۱۳ توسط گوگل معرفی شد, این برنامه یکی از پر طرفدارترین محیط های برنامه نویسی برای توسعه دهندگان اندروید است و زبان برنامه نویسی جاوا و اندروید استودیو اولین پیشنهاد گوگل برای توسعه دهندگان اندروید است. Android Studio با اینکه گزینه اول برای برنامه نویسان اندروید بوده ولی به دلیل هنگ کردن و سرعت پایین برخی ها از استفاده از آن ضرف نظر کردن.

برخی از افراد تازه که شروع یادگیری برنامه نویسی اندروید کردند اساسی ترین مشکلی که با آن برخورد میشود این است که سرعت پایین اندروید استودیو به آنها اجازه نیمدهد تا کار های لازم را انجام دهند, خودم هم ترجبه داشتم گاهی اوقات اینقدر هنگ میکنه حتی نمیتونی یک خط کد بنویسی و آخر م اعصابت خورد میشه و قید یادگیری برنامه نویسی اندروید رو میزنی.

من با اینکه رم سیستمم ۱۲ بود و cpu core i7 داشتم ولی بازم مشکل هنگ و کند شدن با این برنامه داشتم و بلاخره با صد تا بد بختی تونستم راهی پیدا کنم تا این مشکل رو بر طرف کنم.

اگر در ادامه با آرنا وب همراه باشید ترفند افزایش قطعی سرعت اندروید استودیو رو بهتون میگم پس در ادامه مطلب همراه ما باشید.

افزایش قطعی سرعت اندروید استودیو

اگر به سایت های دیگر سر زدید و گفتن در اندروید استودیو برو فلان جا فلان کارو کن تا سرعت برنامه افزایش پیدا کنه در اینجا باید بگم در اشتباهید همه این راه ها رو من رفتم نشده و فقط دو راه قطعی داره که خودم تست کردم و جواب گرفت که در ادامه با آن میپردازیم.

مهاجرت به لینوکس

بهترین و ارزان ترین راه برای استفاده از اندروید استودیو مهاجرت به لینوکس است, سیستم عامل لینوکس بسیار سبک است بیشترین سازگاری رو با اندروید استودیو دارد و میتوانید با خیال راحت تر در این سیستم عامل کد بزنید.

شاید بپرسید کار کردن با لینوکس بسیار سخت باشد اما باید بگم کاملا در اشتباه هستید بنده خودم یک سال هست به لینوکس نسخه ابونتو مهاجرت کردم و الان نمیتونم ازش دل بکنم و برگردم به سیستم چون هم خیلی راحت هم خیلی پر سرعت و همه کار باهاش میکنم.

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

اگر میخواهید کلا برنامه نویسی کنید (جز زبان .net) حتما رو بیاورید به لینوکس نسخه ابونتو خیلی بدرد برنامه نویس جماعت میخوره محیط بسیار خوبه و اینکه یک برنامه نویس رو جست و جو گر به بار میاره.

همچنین محیط اندروید استودیو بسیار روان و ساده میشود بنده خودم به شخصه تو ابونتو سه تا پروژه اندروید استودیو رو باز کرده بودم و دو تا شبیه ساز هم زمان داشت کار میکرد اما هیچ گونه احساس کندی سیستم نمیکرد و کاملا راحت بودم.

ارتقا سخت افزار سیستم

اگر شخصی هستید که نمیتوانید از ویندوز دل بکنید بهتون حق میدم چون کاملا به محیط آدم کرده و نمیتونید از سیستم عامل دیگه استفاده کنید بهترین راه اینکه ارتقا سخت افزاری بدید. شما با ارتقا رم و راتقا هاردتون به هارد ssd میتوانید خودتون راحت کنید

من با اینکه خودم رم سیستم ۱۲ و cpu i7 داشتم ولی باز مشکل هنگ کردن اندروید استودیو داشتم و کلا تو مخم بود گاهی اوقات اعصابم خورد میشد در لپ تاپم رو محکم میبستم. تقریبا اینجور سیستم کاملا به درد برنامه نویسی اندروید میخوره ولی موقع خرید لپ تاپ هارد ssd رو معیار قرار ندادم اگر شما میخواین یک سیستم یا لپ تاپ مخصوص برنامه نویسی خریداری کنید حتما معیار اولتون هارد ssd اشد چون بدون هارد ssd در سیستم عامل ویندوز نمیشه برنامه نویسی اندروید کرد.

سیستم مورد نیاز برای برنامه نویسی در اندروید استودیو برای ویندوزی اینکه که حد اقل رم ۸ داشته باشند و اینکه هاردشون صد درصد ssd باشه مهم نیست ظرفیت هارد چقدره مهم اینه که اندروید استودیو صد درصد داخل هارد ssd نصب شده باشد و اینکه cpu هم حتما باید i7 باشد یا ممکن بازم با هنگی مواجه شوید.

اگر ارتقا سخت افزاری دادید حتما لینوکس رو کنار ویندوزتون رو نصب کنید و تو اون هم اندروید استودیو نصب کنید و هم استودیو رو تو ویندوز کار کنید هم لینوکس اصلا تو سیتسم عامل ابونتو لینوکس اندروید استودیو یه چیز دیگه و سرعت شگفت انگیزی داره حتی مخصوصا هاردتون ssd باشه.

نتیجه گیری

یک برنامه نویس حتما باید آرامش داشته باشد اگر سرعت سیستمی که باهاش کار میکند زیاد نباشد حتما اعصاب و روانش بهم میریزه و نمیتونه کار خود رو به خوبی انجام بده. در بالا بهترین راه رو برای استفاده پر سرعت تر با Android Studio رو بهتون گفتم اگر جای های دیگر راه های دیگر بود بدونید کار ساز نیست من چند سال پیش تمام این راه ها رو رفتم.

پیشنهاد به شخصه خودم جهت برنامه نویسی اندروید اینه که برید مهاجرت کنید به لینوکس خیلی خوبه من که راضیم و مشکلی ندارم اگر ارتقا هم ارتقا سخت افزار انجام بدم باز تو همین لینوکس میمونم چون برای یک برنامه نویس لینوکس مخوصا نسخه ابونتو یه چیزی دیگست.

نوشته افزایش سرعت اندروید استودیو اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی