پست های نوشته شده:

a story about "Curly Boy"

March 8, 2024, 10:36 a.m. by mehrshadina

👨‍💻🔒🌟🍀👫 Name: Curly Boy Age: 21 Occupation: Programmer & Hacker Status: Single and Searching Appearance: Curly hair, dashing smile Personality: Intelligent, witty, and charming 🌟🌟🌟 Curly Boy sat in front of his computer, lines of code dancing across the screen. His curly hair framed his face, and his eyes sparkled with determination. He was a hacker by night, unraveling digital mysteries and leaving no trace behind. But during the day, he longed for something more—a connection beyond the virtual world. His friends teased him about being a "handsome hacker," but Curly Boy knew there was more to life than lines of code. He yearned for companionship, someone to share late-night coding sessions and early morning coffee runs. His heart fluttered at the thought of a girl who could match his wit and challenge his intellect. And so, Curly Boy ventured into the real world. He attended tech meetups, hoping to find someone who understood his passion for programming. But the sea of faces blurred together, and he felt lost in the crowd. Was there a girl out there who would appreciate his curly hair and quirky sense of humor? One day, as he sipped his coffee at a cozy café, he noticed her—a fellow programmer with a mischievous smile. Her eyes lit up when she talked about algorithms and data structures. Curly Boy's heart raced. Could she be the one? They started coding together, their fingers dancing across keyboards. She laughed at his cheesy programming jokes, and he admired her elegant solutions. As the sun set, they shared stories of bugs conquered and databases optimized. Curly Boy realized he wasn't alone anymore; he had found his partner in code. And so, Curly Boy and his newfound girlfriend continued their programming adventures. They built apps, solved puzzles, and dreamed of a future where their love was as bug-free as their code. Curly Boy's curly hair became their secret symbol—a reminder that sometimes, the most unexpected connections lead to the best adventures. 🌟🌟🌟 Remember, Curly Boy's story is just a figment of imagination, but who knows? Maybe there's a real-life curly-haired programmer out there, waiting for their own love story to unfold. 🌟❤️👩‍💻

فلورا

March 9, 2024, 1:52 a.m. by mehrshadina

فلورا ؟ این یک داستان درباره فلورا است.یک دوست و فرد عاشق دنیای ریاضی و هندسه روی کاناپه خونه نشستم ، دوستانم با دوست دخترشان در حال صحبت اند و من درست توی همین لحظه میخواهم فلورا ، اینکه کیه و چطوری آشنا شدیم را تعریف کنم ، الان ساعت ۱۰ دقیقه به ۱۲ شب هست امروز ۳۰ بهمن ۱۴۰۰ هست درست به یاد نمی اورم اما فکر میکنم ، حدود ۴ سال از جدایی ما میگذره. معرفی فلورا را از ابتدای آشنایی اغاز میکنم ، اشنایی ما ، در دوران دبیرستان بود ، یک مسابقه به اسم ریاضیات کانگارو بین مدارس برگزار میشد و به یاد دارم ریاضیات کانگارو یک صفحه اینستاگرام داشت و در نزدیکی ثبت نام این مسابقه ، چالش و پست های اینستاگرامی توسط دبیرخانه ریاضیات ایران طراحی شده بود که دانش آموزان میتوانستند ، سوال ها را حل و جواب درست را در کامنت ها ارسال کنند. سپس سازمان ریاضیات کانگارو از بین پاسخ های ارسال شده قرعه کشی میکرد و برنده قرعه کشی کامت ها میتوانست رایگان در مسابقه ریاضیات کانگارو شرکت کند. همه بچه ها از سرتا سر ایران در این چالش ها شرکت کرده بودند و هرکدام پاسخ خودشان را ارسال کرده بودند. تا اینکه زمان قرعه کشی فرا رسید و سازمان ریاضیات ایران نتایج را در چند پست اعلام کرد. یکی از افرادی که در قرعه کشی برنده شده بود فلورا بود . (آهنگ black lung از the death south درحال پخش هست). همان لحظه با خود گفتم ، دوست دارم ایشان رو بشناسم و واقعا باهاشون دوست بشم‌. برای همین تصمیم گرفتم کاری کنم تا باهم آشنا شویم. این کار را با ساختن یک اکانت خانوم در اینستاگرام شروع کردم. اکانتی با پست ها ، پروفایل ، فالوور وحتی فالووینگ هایی که اصلا بنظر نمی‌آمد این اکانت یک اکانت مجازی باشد. پس از یک هفته از ساخت اکانت ، یک سوال ریاضی با اکانتی که ساخته بودم برای فلورا فرستادم و از ایشان خواستم تا در حل سوال من را راهنمایی کند و این سوال را حل کند. در حقیقت ، من حل این سوال را بلد بودم و این سوال یک سوال آسان بود. تنها برای شروع صحبت سعی کردم اینگونه صحبت را شروع کنم. خانوم فلورا پس از دیدن سوال ، سوال را حل کرد و برای من ارسال کرد. پس از این سوال من در روز های اینده چندین سوال دیگر هم برای ایشان ارسال کردم و با او کم کم دوست شدم پس از یک ماه فلورا را فالو کردم. همه چیز طبیعی و واقعی بود ، دوست های مجازی که برای هم سوالات ریاضی ارسال می‌کردیم و از حل این سوالات لذت میبردیم... بعد از مدتی ، یکی از روز هایی که فلورا برام یک سوال ریاضی فرستاده بود (برای اکانت دختر) ، گفتم من این سوال را نمی‌توانم حل کنم و باید به پسر خاله خودم ، این سوال را بدم ، پسرخاله من یک فرد خیلی باهوش هست و فکر می‌کنم حتما می‌تواند این سوال را حل کند. در این لحظه من برای اولین بار اسم واقعی خودم را گفتم و بعد از چند ساعت سوال حل شده را با اکانت دختر (حل از طرف مهرشاد) برای فلورا ارسال کردم. دوست داشتم بگم فلورا این خود من هستم ، من ، مهرشاد ، کسی هستم که از حل سوالات ریاضی لذت میبرم ... سوال های بیشتری بیا حل کنییم... اما باید همه مراحل اشنایی را ارام و آهسته پیش میبردم... با حل سوالات و معرفی کم کم شخص مهرشاد ،‌ خود واقعی ام را داشتم پر رنگ تر میکردم. و کم کم اکانت مجازی را کمرنگ و پاک کردم بعد از مدتی ، با اکانت اصلی خودم یک سوال ریاضی برای ایشان ارسال کردم و گفتم که در حل این سوال کمی شک دارم ، میتوانم از شما کمک بخواهم که حل من را برسی کنید ؟ بهترین حل سوالی که میتوانستم را برای حل سوال انجام داده بودم ... فلورا هم جواب سوال من را داد بعد از مدتی فلورا یک سوال به اکانت واقعی خودم ارسال کرد و همین طور که زمان میگذشت من واقعی و فلورا بیشتر و بیشتر باهم دوست میشدیم. و این رابطه به صمیمیت کامل رسید. چقدر احتمال داره توی دنیا ادم بتونه به این مرحله ای از دوستی با یک نفر برسه ؟ اما خوب به هر حال شد. همه چیز عالی بود ما باهم خوشحال بودیم مثل هر رابطه ی دیگری که تابه حال دیده اید . پس از مدتی ما باهم دعوا های کوچیک داشتیم که خوب این نشان دهنده واقعی بودن رابطست رابطه ای که این چیز هارو نداشته باشه واقعی نیست. این بحث ها و دعوا های بین ما تا مدتی پیش رفت و ما کمی سرد شده بودیم. تا اینکه بعد از ۲ سال رابطه در تابستان سال ۱۱ ام دبیرستان. در ان زمان کرونا شروع شده بود ... ما به تهران مسافرت رفتیم و من برای یک هفته تهران بودم. به فلورا گفتم میای بریم بیرون ؟ فلورا گفت که الان زوده و چند وقت دیگر که بزرگ تر شویم قطعا زمان بهتری برای بیرون رفتن هست... خلاصه من هم اصرار کردم و سعی کردم حرف هایی بزنم که بگم واقعا دوست دارم ببینمش و خیلی حیفه که نمیتوانم ببینمش اما تاثییری نداشت. خلاصه ۶ روز گذشت و در روز آخر مسافرت من روزی که فرداش میخواستم برگردم خونه همون شب فلورا یک پیام فرستاد که با مادرم صحبت کردم و مادرم گفته باهم بیرون برید . چرا که نه ؟ در روزی که فلورا قرار بیرون رفتن گذاشته بود من پول کافی برای وعده ناهار نداشتم و فلورا قراری که گذاشت در یک از رستوران ها و پاساژ های گران شهر بود. همان لحظه با مادرم مشورت کردم و ازش پرسیدم که پول داریم ؟ میتونم برم ناهار با فلورا بیرون. که مادر گفت نه پول نداریم ... به فلورا اصرار کردم که در جای دیگری یکدگیر را ملاقات کنیم. اما فلورا قبول نکرد. من گفتم که فردا ناهار جایی مهمان هستیم و این قضیه را بهانه کردم تا پول نداشتن را مخفی کرده باشم. ماجرا اینطوری تمام شد که من نتوانستم فلورا را ببینم. این ماجرا ۳ روز گذشت یک روز صبح یا ظهر وقتی اینستاگرام خودم را چک کردم متوجه شدم که فلورا من را بلاک کرده است. باورم نمیشد که چه اتفاقی افتاده است. چرا بلاک شده ام ؟ هیچ چیزی را متوجه نمیشدم و احساس خیلی بدی داشتم. چندین بار به فلورا اس ام اس دادم که چی شده ؟ چرا این کار را کرده است و فلورا جواب پیام من را نمیداد تا اینکه بعد از چند ساعت فلورا پاسخ داد من باخودم خیلی فکر کردم و ما باهم تفاهم نداریم... این نقطه ای بود که همه خاطرات و سوال هایی که باهم حل کرده بودیم توی ذهنم به سرعت میگذشت و من نمیتوانستم حرفی بزنم یا اینکه چیزی بگویم. در انتهای مکالمه گفتم موفق باشی و ارتباط ما در این نقطه برای همیشه پایان یافت...

ساختار یک پروژه اندروید چیست؟ (قسمت ۱)

March 17, 2024, 7:20 p.m. by mehrshadina

در این پست می خواهم یک پروژه اندروید را در اندروید استودیو آغاز کنیم و بخش به بخش نوشتن یک پروژه تا تکمیل و نصب برنامه اندرویدی را برسی کنیم. برای شروع برنامه اندروید استودیو را از خود وبسایت اصلی اندروید استوادیو دانلود کردم . توجه کنید که وبسایت اندروید استودیو آیپی های ایران را به طور کلی بلاک کرده است بنابر این برای دانلود و به صورت کلی برای کار کردن با این برنامه در ایران نیاز به فیلترشکن داریم. مراحل نصب اندروید استودیو در وبسایت رسمی خود این شرکت توضیح داده شده است و از این سو نصب این برنامه را من آموزش نمی‌دهم و بر عهده خودتان می‌باشد. آموزش این پست را با باز کردن برنامه اندروید استودیو شروع می‌کنم : ![wellcome-to-android-studio.png](/media/img/wellcome-to-android-studio.png) صفحه بالا اولین صفحه ای می‌باشد که پس از اجرای برنامه اندروید استودیو با آن روبه رو می‌شوید. برای ساخت پروژه من بر روی دکمه New Project کلیک میکنم و وارد مرحله بعدی می‌شویم. در برنامه Android Studio، وقتی شما بر روی "New Project" کلیک می‌کنید، یک پنجره باز می‌شود که شما را به ساخت یک پروژه جدید هدایت می‌کند. در این پنجره، شما با چندین دایرکتوری و گزینه مختلف مواجه می‌شوید که هر کدام وظیفه‌ها و تنظیمات خاص خود را دارند. ![new-project.png](/media/img/new-project.png) این دایرکتوری‌ها و گزینه‌ها عبارتند از: - "Phone and Tablet": این گزینه به شما امکان ساختن برنامه‌هایی را برای تلفن همراه و تبلت فراهم می‌کند. - "Wear OS": این گزینه به شما اجازه می‌دهد برنامه‌هایی برای دستگاه‌های هوشمند از جمله ساعت‌های هوشمند با سیستم عامل Wear OS توسعه دهید. - "Television": این گزینه به شما امکان ساخت برنامه‌هایی را برای دستگاه‌های تلویزیون با سیستم عامل اندروید فراهم می‌کند. - "Automotive": این دایرکتوری به شما اجازه می‌دهد برنامه‌هایی برای خودروهایی با سیستم عامل Android Auto بسازید. - "Glass": این گزینه به شما امکان توسعه برنامه‌هایی را برای دستگاه‌های پوشیدنی Google Glass می‌دهد. (در ورژن نصب شده در سیستم عامل من گزینه Glass موجود نیست اما در ورژن های pro برنامه AndroidStudio این قسمت موجود می‌باشد.) همچنین، شما می‌توانید از گزینه "No Activity" استفاده کنید تا بدون اضافه کردن یک فعالیت اولیه به پروژه، یک پروژه خالی ایجاد کنید و سپس به دلخواه خود فعالیت‌ها و قسمت‌های مختلف را اضافه کنید. برای مثال و به صورت دلخواه در این آموزش بر روی ناحیه Navigation Views Drawer Activities کلیک میکنم و بر روی دکمه Next کلیک میکنم تا وارد مرحله بعدی شویم. در تصویر پایین میتوانید منوی بعدی را مشاهده کنید: ![choosing-project-name.png](/media/img/choosing-project-name.png) در این مرحله پروژه خود را به صورت زیر پیکربندی کنید: فیلد Name برای وارد کردن نام پروژه شما استفاده می شود، در این ناحیه My FileManager را تایپ کنید. قسمت Package name را همانطور که هست رها کنید. به این ترتیب فایل های شما در ساختار فایل سازماندهی می شوند. در این حالت، نام بسته com.example.myfilemanager خواهد بود. قسمت Save location را همانطور که هست رها کنید. این شامل مکانی است که تمام فایل های مربوط به پروژه شما در آن ذخیره می شوند. مکان رایانه خود را یادداشت کنید تا بتوانید فایل های خود را پیدا کنید. API 24: Android 7.0 (Nougat) را از منوی قسمت Minimum SDK انتخاب کنید. حداقل SDK نشان دهنده حداقل نسخه اندرویدی است که برنامه شما می تواند روی آن اجرا شود. بر روی دکمه Finish کلیک کنید و منتظر بمانید تا پروژه به صورت کامل ساخته شود. ![building-gradle.png](/media/img/building-gradle.png) صبر می‌کنیم تا این مرحله تمام شود و در نهایت پنجره نهایی اندروید استودیو باز می‌شود که میتوانید این تصویر را در پایین مشاهده کنید: ![Project-full-view.png](/media/img/Project-full-view.png) در ناحیه FileExplore برنامه AndroidStudio این ناحیه را برای نمایش تمام دایکتوری های ساخته شده و بخش های پروژه بر روی Project تنظیم می‌کنم و همه فایل ها و دایکتوری های ساخته شده به صورت زیر می‌باشد. ![project-directories.png](/media/img/project-directories.png) توضیحاتی در مورد هرکدام از آنها ارائه می‌دهم: - .gradle: این فولدر شامل فایل‌های مربوط به Gradle Wrapper است که به طور خاص برای پروژه شما تولید شده‌اند. - .idea: این فولدر شامل تنظیمات مربوط به پروژه در IntelliJ IDEA است. این شامل اطلاعاتی مانند تنظیمات و تنظیمات پروژه، تنظیمات دیباگ، و غیره می‌شود. - app: این فولدر اصلی برنامه شما است و تمام کد و منابع مربوط به برنامه در این فولدر قرار دارند. این شامل فایل‌های Java، فایل‌های XML برای طرح‌بندی صفحات، منابع مربوط به UI (مانند تصاویر و آیکون‌ها) و غیره است. - gradle: این فولدر حاوی فایل‌های مربوط به Gradle Wrapper است که برای مدیریت و ساخت پروژه استفاده می‌شوند. - .gitignore: این فایل شامل فهرستی از فایل‌ها و فولدرهایی است که باید از طریق Git ردیابی نشوند و در زمان commit و push از پروژه حذف شوند. - build.gradle.ktls: این فایل شامل تنظیمات مربوط به Gradle برای پروژه است که به طور معمول شامل تنظیماتی مانند ورژن Gradle، وابستگی‌های پروژه و غیره می‌شود. - gradle.properties: این فایل شامل تنظیمات Gradle است که برای پروژه مورد استفاده قرار می‌گیرد، از جمله تعیین JDK و تنظیمات مربوط به Gradle. - gradlew: این فایل یک اجرای پرتابل از Gradle Wrapper است که اجازه می‌دهد Gradle را بدون نیاز به نصب مجدد روی سیستم عامل‌های مختلف اجرا کنید. - gradlew.bat: این فایل نسخه برای سیستم‌های ویندوز از gradlew است و برای اجرای دستورات Gradle در سیستم‌های ویندوز استفاده می‌شود. - local.properties: این فایل شامل تنظیمات محلی برای پروژه است، مانند مسیر SDK اندروید و تنظیمات مربوط به مسیرهای دیگر مورد نیاز برای پروژه. - settings.gradle.kts: این فایل شامل تنظیمات مربوط به پروژه است که تعیین می‌کند که کدام فایل‌ها و فولدرها به عنوان ماژول‌های پروژه شناخته شوند. این فایل‌ها و فولدرها معمولاً برای هر پروژه‌ی اندروید ایجاد می‌شوند و هرکدام وظایف مختلفی را انجام می‌دهند تا مدیریت پروژه‌ی شما را ساده‌تر کنند و فرآیند توسعه را بهبود بخشند. ![src-dir.png](/media/img/src-dir.png) #### پوشه app پوشه "app" یکی از اصلی‌ترین پوشه‌ها در ساختار یک پروژه‌ی اندروید است و شامل منابع و کدهای مربوط به برنامه‌ی شما است. در زیر توضیحاتی در مورد محتویات این پوشه داده می‌شود: - src: این پوشه شامل کدهای Java و منابع XML برای طرح‌بندی صفحات نمایش و منابع مربوط به برنامه‌ی شما است. معمولاً این پوشه دارای دو زیرپوشه به نام‌های "main" و "test" است. در زیرپوشه‌ی "main" کدهای اصلی برنامه و منابع قرار دارند و در زیرپوشه‌ی "test" کدهای تست واحد برنامه قرار می‌گیرد. - build.gradle.kts: این فایل شامل تنظیمات Gradle برای ماژول "app" می‌باشد. این فایل شامل تنظیماتی مانند ورژن SDK اندروید، وابستگی‌های پروژه و تنظیمات مربوط به ساخت و اجرای برنامه است. - proguard-rules.pro: این فایل شامل تنظیمات ProGuard است که برای بهینه‌سازی و امنیت کد در هنگام عرضه برنامه استفاده می‌شود. ProGuard یک ابزار برای کاهش اندازه فایل‌های APK، بهینه‌سازی کد و حفاظت از آنها در برابر روش‌های تهدیدی مانند reverse engineering است. این موارد اساسی‌ترین محتویات پوشه "app" در یک پروژه‌ی اندروید هستند و تمامی کدها، منابع و تنظیمات مربوط به برنامه‌ی شما در این پوشه قرار دارد. ![src-dir.png](/media/img/src-dir2.png) #### محتویات src پوشه‌های "androidTest" و "test" در ساختار پروژه‌های اندروید هر دو برای نوشتن و اجرای تست‌های مختلف برنامه استفاده می‌شوند، اما هر کدام مخصوص نوع خاصی از تست‌ها هستند. در زیر توضیحاتی در مورد تفاوت این دو پوشه ارائه می‌شود: - پوشه "androidTest": این پوشه معمولاً برای تست کردن عملکرد برنامه در محیط اجرای واقعی (مانند دستگاه یا شبیه‌ساز اندروید) استفاده می‌شود. تست‌های موجود در این پوشه به نام "آزمون اجرایی" (Instrumentation Test) معروف هستند. این تست‌ها قادرند با محیط اجرایی برنامه تعامل کنند و عملکرد و ویژگی‌های مختلف برنامه را بررسی کنند، از جمله تعامل با دستگاه‌های سخت‌افزاری و سرویس‌های سیستم. - پوشه "test": این پوشه بیشتر برای نوشتن تست‌های واحد (Unit Test) برنامه استفاده می‌شود. تست‌های واحد معمولاً بر روی قسمت‌های کوچک و مستقل برنامه تمرکز دارند و بدون وابستگی به محیط اجرایی برنامه اجرا می‌شوند. این تست‌ها به کمک فریمورک‌های آزمون مانند JUnit یا TestNG انجام می‌شوند و هدف آنها اطمینان حاصل کردن از صحت عملکرد کدهای مختلف و توابع در شرایط مختلف است. بنابراین، تفاوت اصلی بین این دو پوشه این است که "androidTest" برای تست کردن در محیط اجرایی برنامه و "test" برای تست کردن واحدی از کدها و توابع بدون وابستگی به محیط اجرایی برنامه استفاده می‌شوند. #### پوشه main ![main-dir.png](/media/img/main.png) پوشه "main" یکی از مهم‌ترین پوشه‌ها در ساختار یک پروژه‌ی اندروید است و شامل منابع و کدهای اصلی برنامه شما است. این پوشه به طور معمول دو زیرپوشه‌ی "java" و "res" را شامل می‌شود، همچنین فایل "AndroidManifest.xml" نیز در این پوشه قرار دارد. در زیر توضیحاتی در مورد محتویات این پوشه ارائه می‌شود: - پوشه "java": این پوشه شامل کدهای Java برنامه‌ی شما است. اکثر فعالیت‌ها، ساختارها و کلاس‌هایی که شما در پروژه ایجاد می‌کنید، در این پوشه قرار می‌گیرند. اینجاست که شما کدهای مربوط به فعالیت‌ها (Activities)، فرگمنت‌ها (Fragments)، سرویس‌ها (Services)، کلاس‌های مدل (Model Classes)، کلاس‌های مدیریت داده (Data Management Classes) و غیره را قرار می‌دهید. - پوشه "res": این پوشه شامل منابع (Resources) برنامه‌ی شما است. اینجاست که شما فایل‌های XML برای طرح‌بندی صفحات نمایش (Layouts)، تصاویر، آیکون‌ها، رشته‌های متنی، سبک‌ها، استایل‌ها، منوها و سایر منابع مربوط به UI و UX برنامه‌ی خود را قرار می‌دهید. - فایل "AndroidManifest.xml": این فایل شامل تنظیمات اصلی برنامه‌ی شما است. اینجاست که شما اطلاعات مهمی مانند نام برنامه، نسخه‌نامه، فعالیت‌ها، سرویس‌ها، اجازه‌ها (Permissions) و سایر تنظیمات مربوط به برنامه خود را تعریف می‌کنید. این فایل بسیار حیاتی برای اجرای و عملکرد صحیح برنامه است. پوشه "main" شامل محتویات اصلی و اساسی پروژه‌ی اندروید شما است و تمامی منابع و کدهای مربوط به برنامه در این پوشه قرار دارند. ### ادامه این پست را در قسمت دوم اموزش ببینید : ##### [https://mehrshadina.ir/blog/post/4](https://mehrshadina.ir/blog/post/4/)