<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مهناز فلاح</title>
        <link>https://virgool.io/feed/@mahnaz.fallah1213</link>
        <description>مهناز هستم یه برنامه نویسِ تازه کار مطالبی که یاد میگیرم رو اینجا به اشتراک میزارم تا با هم یاد بگیریم :)</description>
        <language>fa</language>
        <pubDate>2026-06-16 08:25:28</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2651988/avatar/XJ21on.jpg?height=120&amp;width=120</url>
            <title>مهناز فلاح</title>
            <link>https://virgool.io/@mahnaz.fallah1213</link>
        </image>

                    <item>
                <title>مقدمه ای بر PyQt</title>
                <link>https://virgool.io/@mahnaz.fallah1213/%D9%85%D9%82%D8%AF%D9%85%D9%87-%D8%A7%DB%8C-%D8%A8%D8%B1-pyqt-p9rdc0jq5obg</link>
                <description>سلام، تو این قسمت میخوایم در مورد PyQt صحبت کنیم اینکه چی هست و از کجا اومده و در آخر یه پیاده سازی خیلی کوچیک با PyQt خواهیم داشت .قبل از اینکه در مورد PyQt صحبت کنیم میخوام شما رو با Qt اشنا کنم .این Qt یک فریم ورک تحت زبان C++ هست که اصول WOCA رو دنبال میکنه این اصول میگه Write Once, Compile Anywhere یعنی یه بار بنویس هرجایی دوست داری کامپایلش کن در واقع از Qt برای توسعه برنامه های Cross-platform استفاده میشه . حالا اینکه Cross-Platform چی هست رو با یه مثال ساده توضیح میدم .فرض کنید یه خودکار جادویی داریم که روی انواع سطوح میتونه بنویسه ، سطوح فلزی ، سطوح چوبی ، سطوح کاغذی و ...شما میتونید از یک خودکار جادویی استفاده کنید برای نوشتن روی سطوح مختلف به جای اینکه به چند تا خودکار متفاوت نیاز داشته باشید این منظوری هست که برنامه های Cross-Platform به ما میرسونن .در دنیای نرم افزار Cross-Platform به برنامه هایی گفته میشه که میتونند روی انواع سیستم عامل ها و دستگاه ها اجرا بشن . حالا وقتش رسیده که بدونیم PyQt چیه ، PyQt مثل یک پلی هست که Python و Qt رو به همدیگه متصل میکنه و برای Graphical User Interfaces (GUI) استفاده میشه .در واقع PyQt طیف گسترده ای از اجزای رابط کاربری گرافیکی مثل دکمه ها ، فیلد های متنی و پنجره ها رو فراهم میکنه که باهاشون میتونیم یه interface رو به کاربر نشون بدیم .پیاده سازی برنامه ساده با PyQtتو این پروژه میخوایم یه پنجره با PyQT درست کنیمبا ایمپورت کردن ماژول های لازم شروع میکنیم و یه کلاس به اسم Window ایجاد میکنیم که در این کلاس عنوان پنجره و طول و عرض اون رو مشخص میکنیم و سپس با تابع show() ازش میخواییم که اون پنجره رو به ما نمایش بده .پنجره ی نمایش داده شده به شکل زیر خواهد بوداین مقالرو همینجا به پایان میرسونم امیدوارم ازش استفاده کنید :)</description>
                <category>مهناز فلاح</category>
                <author>مهناز فلاح</author>
                <pubDate>Sun, 20 Aug 2023 19:10:48 +0330</pubDate>
            </item>
                    <item>
                <title>راه اندازی Elasticsearch  با Docker</title>
                <link>https://virgool.io/@mahnaz.fallah1213/%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-elasticsearch-%D8%A8%D8%A7-docker-f4kmqrbq7n9o</link>
                <description>امروز میخوام درمورد الستیک سرچ و نحوه ی راه اندازی اون با داکر صحبت کنم . توی این مقاله من فرض رو بر این میزارم که شما دانش نسبی نسبت به الستیک سرچ و داکر دارید .اولین قدمی که برای این کار باید برداریم اینه که یه فایل docker-compose.yml  ایجاد کنیم . touch docker-compose.ymlقدم بعدی اینه که تو فایل docker-compose.yml مشخص کنیم که از کدوم ورژن ‍Python و از چه سرویس هایی میخوایم استفاده کنیم ، من توی این فایل سرویس ها رو Elasticsearch و Kibana در نظر گرفتم در مورد Logstash هم در اینده یه مقاله منتشر میکنم :)فایل docker-compose.yml  به صورت زیر هست :همونطور که میبینید تو environment اومدم  xpack.security.enabled=true   رو true  در نظر گرفتم . حالا کلا همین یه خط وظیفش چیه ؟؟اگر میخواید Cluster elasticsearch رو در برابر دسترسی های غیرمجاز و مخرب محافظت کنید این یه گام مهمیه که باید اجرا بشه ، وقتی این تنظیم فعال باشه به شما این امکان رو میده که احراز هویت کنید و بتونید وارد الستیک سرچ بشید . و جا داره که اشاره کنم دقت کنید Elasticsearch و Kibana باید در یک نتورک باشند تا کانتینرها بتونن با هم در ارتباط باشند .با دستور docker-compose up  کانتینرها رو به اجرا درمیاریم ، وقتی عملیات تموم شد یه ترمینال دیگه با دستور CTRL+ALT+T باز میکنیم  و کامند زیر رو اجرا میکنیم  docker exec -it elasticsearch bin/elasticsearch-setup-passwords auto --batch  این کامند یه enrolment token  برای احراز هویت generate میکنه ، حتما داکیومنتش کنید که بعدا باهاش کار داریم .قدم بعدی اینه که حالا فایل  docker-compose.yml  رو یه سری تغییرات بدیم ، تنها کاری که باید بکنیم اینه که از اون password که داکیومنتش کردیم تو سرویس kibana استفاده کنیم .به جای password اون password که داکیومنتش کردید رو بزارید و فایل رو یه بار دیگه با کامند docker-compose up اجرا کنید .حالا میتونید تو browser با localhost:9200 به Elasticsearch و با localhost:5601 به Kibana  دسترسی داشته باشید . توجه داشته باشید که vpn حتما خاموش باشه چون در بعضی مواقع باعث میشه به صفحات دسترسی نداشته باشید . همینطور دقت کنید که موقع ورود ازتون username  و password میخواد که به داکیومنتتون مراجعه کنید و از اونجا password رو وارد کنید . تبریک میگم ! شما تونستید elasticsearch  رو با داکر راه اندازی کنید :)این مقاله رو همین جا به اتمام میرسونم امیدوارم که به دردتون بخوره:)References:www.elastic.co</description>
                <category>مهناز فلاح</category>
                <author>مهناز فلاح</author>
                <pubDate>Wed, 19 Jul 2023 17:19:46 +0330</pubDate>
            </item>
                    <item>
                <title>تفاوت لیست و لیست پیوندی (linkedlist)</title>
                <link>https://virgool.io/@mahnaz.fallah1213/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D9%84%DB%8C%D8%B3%D8%AA-%D9%88-%D9%84%DB%8C%D8%B3%D8%AA-%D9%BE%DB%8C%D9%88%D9%86%D8%AF%DB%8C-linkedlist-yft5k2b1ynvz</link>
                <description>امروز میخوام در مورد تفاوت لیست و لینکد لیست ها باهاتون صحبت کنم . با یه مثال خیلی ریز شروع میکنیم و کم کم میرسیم به تفاوت این دو تا موضوع جالبمون :)فرض کنید با سه تا از دوستاتون تو سینما نشستید و دارید فیلم میبینید یه دفعه دوست دیگتون از راه میرسه و میخواد پیش شما بشینه اما کنار شما جا نیست که بشینه خب در این مواقع چیکار میکنید ؟مجبور میشید جا به جا بشید تا دوستتونم پیش شما بشینه !تفاوت اصلی لیست و لینکدلیست هم همینجا مطرح میشه ، یه لیست تو حافظه به صورت پیوسته ذخیره میشه   به این معنی که عناصر در یک بلوک از حافظه ذخیره میشه ، به عکس زیر یه نگاهی بندازید :اما لینکدلیست ها اینشکلی نیستند ، قبل اینکه بگم لینکدلیست ها چه جوری در حافظه ذخیره می شوند میخوام شما رو با شکل و شمایلشون اشنا کنم ، به عکس زیر یه نگاهی بندازید .:همونطور که میبینید هر عنصر در یک لیست پیوندی یک Node شناخته میشه که هر Node  از دو بخش تشکیل شده :1 - Data2 - Nextهر node  در یک لیست پیوندی به نود دیگه در لیست اشاره میکنه پس اینجا next  درواقع اشاره گر ماست .حالا برگردیم به نحوه ی ذخیره شدنشون در حافظه ، ایتم ها در لیست پیوندی میتونند در هرجای حافظه ذخیره بشوند ، هر ایتم ادرس ایتم بعدی خودش رو حفظ میکنه برای همین هر ایتم میتونه در هرجایی از حافظه ذخیره بشه مثل لیست ها به صورت پیوسته در حافظه ذخیره نمیشوند .فرض کنید شما میخوایید دنبال یه ادرس بگردید اطلاع دارید خونه ای که دنبالش میگردید در حوالی میدان A واقع شده است ، به میدان A  میرید و اطلاع پیدا میکنید باید برای رسیدن به ادرس موردنظرتون برید به خیابان B   بعد مراجعه به خیابان B مطلع میشید که باید به کوچه ی C مراجعه کنید . لیست های پیوندی هم همین مفهوم رو میرسونند !!!همونطور که در شکل میبینید ایتم  A  به ایتم B اشاره میکنه پس ایتم A میدونه که ایتم بعدی در کجای حافظه قرار داره .با استفاده از لیست های پیوندی شما میتونید ایتم هارو به راحتی ادد کنید چون اخرین نود ادرس نود بعدی رو نگه میداره !  تا اینجا تنها یکی از تفاوت ها رو متوجه شدیم که مربوط به ذخیره شدنشون در حافظه بود ، حالا میخوایم در مورد یکی از مهمترین تفاوت ها حرف بزنیم  Time Complexity  .پیچیدگی زمانی لیست و لیست پیوندی رو میتونید در شکل زیر مشاهده کنید : همونطور که دیدید پیچیدگی  زمانی لیست پیوندی زمانی که ایتمی رو ادد کنیم O(1) اما پیچیدگی زمانی لیست ها  O(n) هست. چرا ؟؟ چون برای لیست های پیوندی مهم نیست که اخرین ایتم کجای حافظه قرار داره و ایا بعد اخرین ایتم ، بلوک حافظه خالی هست تا ایتم بعدی رو ادد کنه یا نه . اخرین ایتم میاد به ایتمی که قراره به لیست ادد بشه اشاره میکنه و ادرس اون رو در حافظه حفظ میکنه به همین دلیل پیچیدگی زمانیش O(1) هست !اما در لیست ها از اونجایی که به صورت پیوسته در حافظه ذخیره میشوند اگر بلوک حافظه خالی نبود باید المان هارو به بلوک حافظه ای منتقل کنند که جا برای ادد کردن ایتم جدید باشه برای همین پیچیدگی زمانیش O(n) . به همین راحتی !امیدوارم که این موضوع رو به راحتی توضیح داده باشم تا مقاله ی بعدی به درود :) References:Grokking Algorithms Bookwww.realpython.com</description>
                <category>مهناز فلاح</category>
                <author>مهناز فلاح</author>
                <pubDate>Wed, 28 Jun 2023 18:10:21 +0330</pubDate>
            </item>
            </channel>
</rss>