<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های علی معرفتی</title>
        <link>https://virgool.io/feed/@marefati110</link>
        <description>just a tech /  DevOps / marefati110@gmail.com</description>
        <language>fa</language>
        <pubDate>2026-06-16 14:59:56</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/67143/avatar/5qtWPp.jpeg?height=120&amp;width=120</url>
            <title>علی معرفتی</title>
            <link>https://virgool.io/@marefati110</link>
        </image>

                    <item>
                <title>آشنایی با ابزار dive</title>
                <link>https://virgool.io/@marefati110/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1-dive-o3xuqlmuvod3</link>
                <description>diveاگر با داکر کار میکنید حتما براتون سوال شده وقتی که دارین یه image رو pull می کنید لایه هایی که image ازش تشکیل چی هستن و چیکار میکنن dive ابزاری برا چرخ زدن داخل ایمیج ها است  اینکه ببینید از چی ساخته شدن , توی هر لایش چه اتفاق هایی افتاده , چه فایل هایی ساخته شده , تغییرکرده یا حدف شده.البته کاربرد های بیشتر هم داره میتونید ازش استفاده کنید تا ایمیج هایی که می سازید رو انالیز کنید و سعی کنید حجمش رو کم کنید یا هر چیز دیگه ای. خودش هم معیار های برای بهنیه بودن داره و یه سری اپشن هایی رو دولوپ کرده برای ci که خیلی نمیشه روش حساب کرد.خلاصه که برای فان هم شده چیزه باحالیه.</description>
                <category>علی معرفتی</category>
                <author>علی معرفتی</author>
                <pubDate>Thu, 05 Nov 2020 23:01:52 +0330</pubDate>
            </item>
                    <item>
                <title>اجرای vscode سمت سرور</title>
                <link>https://virgool.io/@marefati110/%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-vscode-%D8%B3%D9%85%D8%AA-%D8%B3%D8%B1%D9%88%D8%B1-ezyu58wslqwc</link>
                <description>یکی از مشکلاتی که داشتم این بود که برای اینکه یه کدی رو بخوام سمت سرور تست کنم هر بار باید روی لوکال خودم تغیرات رو ایجاد میکردم و بعد از commit و pull و ... و در نهایت دوباره اپ رو ران میکردم تا نتیجه رو ببینم .برای همین بعد از یکم سرچ این ریپازیتوری رو پیدا کردم که به شما اجازه میده vscode رو سمت سرور اجرا و با مرورگرتون بازش کنید و راحت کد بزنید. (چی از این بهتر D: )می تونید مراحل نصب رو طبق داکیومنت سایت دنبال کنید یا اینکه مثل من ایمیج داکرش استفاده کنید.docker run -it -p 127.0.0.1:8080:8080 \
  -v &amp;quot$PWD:/home/coder/project&amp;quot \
  -u &amp;quot$(id -u):$(id -g)&amp;quot \
  codercom/code-server:latestحتما هم برای امنیت بیشتر https رو هم پیاده کندی که خیالتون راحت باشه .این مقاله در آینده تکمیل و مراحل پیاده سازی کاملش رو توضیح میدم </description>
                <category>علی معرفتی</category>
                <author>علی معرفتی</author>
                <pubDate>Sat, 08 Aug 2020 23:57:41 +0430</pubDate>
            </item>
                    <item>
                <title>راه اندازی sentry</title>
                <link>https://virgool.io/@marefati110/%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-sentry-hyzv6xftuhxj</link>
                <description>امروزه دیگه استفاده از یه issue tracker برای هر پروژه های واجب شده چه پروژه شخصی خودتون باشه یا پروژه های بزرگ و شرکتی .از مطرح ترین پلترفرم هایی که این خدمات رو ارایه میدن میشه به سایت های زیر اشاره کردSentryRoolbarAirbrackeRaygunBugsnagهر کدوم از این سرویس های مزایا و معایت خودشون رو دارن. همچنین دو مشکل عمده که بهش برمیخوریم تحریم بودن و محدودیت در خدماتشون هست.یکی از دوست داشتنی ترین این سرویس ها sentry که یه محصول رایگان و متن بازه و به راحتی می تونید اون رو روی سرور شخصی خودتون پیاده کنید. من از داکر برای پیاده سازیش استفاده کردم که کار رو خیلی راحت تر هم کرده.برای راه اندازی مراحل زیر رو انجام بدین$ git clone https://github.com/marefati110/sentry-docker-compose.git
$ cd sentry-docker-compose
$ docker-compose up -d
$ docker-compose exec sentry /bin/sh -c &amp;quotsentry upgrade&amp;quot
$ docker-compose restartو تمام حالا می تونید با ای پی سرورتون و با پورت 9000 بهش دسترسی داشته باشید. منبع</description>
                <category>علی معرفتی</category>
                <author>علی معرفتی</author>
                <pubDate>Sat, 11 Jul 2020 21:21:37 +0430</pubDate>
            </item>
                    <item>
                <title>دورز زدن فیلتر/تحریم با wireguard و cloudflare</title>
                <link>https://virgool.io/@marefati110/%D8%AF%D9%88%D8%B1%D8%B2-%D8%B2%D8%AF%D9%86-%D9%81%DB%8C%D9%84%D8%AA%D8%B1%D8%AA%D8%AD%D8%B1%DB%8C%D9%85-%D8%A8%D8%A7-wireguard-%D9%88-cloudflare-yrq2z3mecibf</link>
                <description>چند وقت پیش بود که با  اپ اندرویدی 1.1.1.1 اشنا شدم ایده جالبی بود برام صرفا با تغییر DNS میشه هم اینترنت امن تری داشت هم سرعت بیشتر و هم اینترنت بدون مرز همچنین دیگه دردسر های pptp و ... رو نداره .تنظمیم کردن مستقیم DNS کامیوتر روی 1.1.1.1 یه سری مشکلاتی داره و کارایی لازم رو نداره برا همین از wireguard استفاده میکنیم.من روش کار رو برای ubuntu میگم ولی برای تمامی نسخه های لینوکس و مک و ویندوز این روش قابل استفاده است.$sudo apt install wireguard resolvconfاز این رپو برای ساختن یه پروفایل برای wireguard استفاده میکنیم لازمه که به قسمت release رفته و نسخه مطابق با پلتفرمتون رو دانلود کنید.$sudo chmod -x wgcf_1.0.6_linux_amd64
$sudo chmod -R 777 wgcf_1.0.6_linux_amd64
$sudo ./wgcf_1.0.6_linux_amd64 register
$sudo ./wgcf_1.0.6_linux_amd64 generateفایل wgcf-profile.conf ساخته شده رو به مسیر زیر کپی کنیم$sudo cp ./wgcf-profile.conf /etc/wireguard/wg0.confحالا با دستور زیر سرویسش رو راه اندازی می کنیم $sudo wg-quick up wg0میتونید ست کنید که همیشه ران باشه$sudo systemctl enable wg-quick@wg0لذت ببرید.</description>
                <category>علی معرفتی</category>
                <author>علی معرفتی</author>
                <pubDate>Sun, 28 Jun 2020 23:30:15 +0430</pubDate>
            </item>
                    <item>
                <title>انتقال داده ها از MySQL به Elasticsearch</title>
                <link>https://virgool.io/@marefati110/%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7-%D8%A7%D8%B2-mysql-%D8%A8%D9%87-elasticsearch-oxaqti4yefk2</link>
                <description>امروز یه چالش باحال داشتم و گفتم  باهاتون به اشتراک بزارم شاید کارتون راحت تر و سریع تر انجام بشه.برای انتقال داده ها از logstash استفاده میکنیم البته اگر از django استفاده میکنید نگاهی به این package ها هم بندازید. برای node کتابخونه های مشابهی نمیشناسم و سرچ هم نکردم البته اگر می شناسید معرفی کنید .o.O https://github.com/barseghyanartur/django-elasticsearch-dsl-drf  https://github.com/sabricot/django-elasticsearch-dsl خب کاملا واضحه که باید سرویس elasticsearch در حال اجرا باشه . من برای راحتی الستیک رو با داکر راه اندازی کردم .docker run -d -p  9200:9200 --name elasticsearch elasticsearch:7.6.2حالا باید سرویس logstash رو اجرا کنیمdocker run -d -v ~/pipeline:/usr/share/logstash/pipeline/  --link elasticsearch --name logstash logstash:7.6.2 برای ارتباط بین logstash و mysql از mysql-connector استفاده می کنیم که پیش فرض روی logstash وجود نداره به همین دلیل :docker exec -itu 0 logsatsh bash

$ yum install -y wget
$ cd /usr/share/logstash
$ wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.20/mysql-connector-java-8.0.20.jar
$ cp mysql-connector-java-8.0.20.jar  /usr/share/logstash/logstash-core/lib/jars/
$ exitحالا به مسیر ~/pipeline برید و فایل migrate.conf را بسازید.input {  jdbc {    jdbc_driver_library =&gt; &amp;quot/usr/share/logstash/mysql-connector-java-8.0.16.jar&amp;quot     jdbc_driver_class =&gt; &amp;quotcom.mysql.jdbc.Driver&amp;quot     jdbc_connection_string =&gt; &amp;quotjdbc:mysql://SERVER_ADDRESS:PORT/DATABASE?autoReconnect=true&amp;useSSL=false&amp;quot    jdbc_user =&gt; &amp;quotUSERNAME&amp;quot    jdbc_password =&gt; &amp;quotPASSWORD&amp;quot    jdbc_paging_enabled =&gt; true    tracking_column =&gt; &amp;quotunix_ts_in_secs&amp;quot    use_column_value =&gt; true    tracking_column_type =&gt; &amp;quotnumeric&amp;quot    schedule =&gt; &amp;quot0 */60 * * * *&amp;quot
    last_run_metadata_path =&gt; &amp;quot/usr/share/logstash/sql_last_value.yml&amp;quot    statement =&gt; &amp;quotSELECT *, UNIX_TIMESTAMP(modification_time) AS unix_ts_in_secs FROM es_table WHERE (UNIX_TIMESTAMP(modification_time) &gt; :sql_last_value AND modification_time &lt; NOW()) ORDER BY modification_time ASC&amp;quot  }}filter {  mutate {    copy =&gt; { &amp;quotid&amp;quot =&gt; &amp;quot[@metadata][_id]&amp;quot}    remove_field =&gt; [&amp;quotid&amp;quot, &amp;quot@version&amp;quot, &amp;quotunix_ts_in_secs&amp;quot]  }}output {  elasticsearch {      hosts =&gt; [&amp;quotelasticsearch:9200&amp;quot]      #user =&gt; &amp;quotelastic&amp;quot      #password =&gt; &amp;quotPASSWORD&amp;quot      index =&gt; &amp;quotINDEX_NAME&amp;quot      document_id =&gt; &amp;quot%{[@metadata][_id]}&amp;quot  }}در آخر کافیه سرویس رو restart کنیدdocker restart logstashمی تونید لاگ ها رو هم نگاه کنید تا از نتیجه کار مطمن بشیدdocker logs -f --tail 20 logstashبرای توضیحات بیشتر حتما این مقالات رو بخونید و تفاوت هایی کانفیگ بالا و مقالات زیر مطالعه کنید. https://www.elastic.co/blog/how-to-keep-elasticsearch-synchronized-with-a-relational-database-using-logstash  https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html </description>
                <category>علی معرفتی</category>
                <author>علی معرفتی</author>
                <pubDate>Tue, 26 May 2020 02:32:51 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش نصب zammad</title>
                <link>https://virgool.io/@marefati110/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%86%D8%B5%D8%A8-zammad-lqr4o14kmpto</link>
                <description>اگر نمی دونید zammad چیه به تعریفی که خوده سایتش کرده یه نگاه می اندازیم.Zammad is a web-based, open source user support/ticketing solution.از zammad می تونید به عنوان یه چت آنلاین برای وب سایت خودتون استفاده کنید ولی قابلیت های خیلی بیشتری از یه چت داره البته بیشتر برای کار هار درون سازمانی انجام میشه  از فیچر های دیگه هم voip ربات تلگرام و ... اشاره کنم .(باید بگم که فیچر هایی که شرکت ها و برنامه ای دیگه ای ارايه می دهند خیلی بهتر و بیشتر از چت zammad هست پس انتظار زیادی نداشته باشید اگر صرفا به دنبال چت خوب براس سایتتون هستید tidio رو بهتون معرفی می کنم.)طبق document سایتش چندین راه برای نصبش وجود داره اگر centos یا ubuntu یا debian و .. استفاده می کنید خیلی راحت repository اضافه و نصبش می کنید. البته باید بگم elasticsearch جز پیش نیاز های این برنامه هست و اگر روی سیستمون نداشته باشید بهتون خطا میده و اجاز نصب ندارید.ممکمه بخواید این برنامه رو روی داکر بیارید بالا در حالی که سرویس elasticsearch شما روی یه کانتینر دیگه در حال اجرا باشه پس چه طور مشکل رو حل کنیم ؟؟ (در ادامه)توی document قسمتی هست به نام install from source  مراحل نصب رو از اونجا شروع میکنیم.من از debian 10  و mysql استفاده میکنم برای نصب توضیحات اضافی دیگه ام نمیارم و صرفا command ها رو می نویسم.$ docker run -it --name zammad -p 80:3000 --link elasticsearch debian

$ apt-get update
$ apt-get install -y nano vim curl wget git patch build-essential bison zlib1g-dev libssl-dev libxml2-dev libxml2-dev sqlite3 libsqlite3-dev autotools-dev libxslt1-dev libyaml-0-2 autoconf automake libreadline-dev libyaml-dev libtool libgmp-dev libgdbm-dev libncurses5-dev pkg-config libffi-dev gnupg default-libmysqlclient-dev gawk nginx libimlib2-dev procps

$ useradd zammad -m -d /opt/zammad -s /bin/bash

$ echo &amp;quotexport RAILS_ENV=production&amp;quot &gt;&gt; /opt/zammad/.bashrc
$ echo &amp;quotexport RAILS_SERVE_STATIC_FILES=true&amp;quot &gt;&gt; /opt/zammad/.bashrc

$ su - zammad

$ curl -O https://ftp.zammad.com/zammad-latest.tar.gz
$ tar -xzf zammad-latest.tar.gz
$ rm zammad-latest.tar.gz

$ gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

$ curl -L https://get.rvm.io | bash -s stable
$ source /opt/zammad/.rvm/scripts/rvm
$ echo &amp;quotsource /opt/zammad/.rvm/scripts/rvm&amp;quot &gt;&gt; /opt/zammad/.bashrc
$ echo &amp;quotrvm --default use 2.5.5&amp;quot &gt;&gt; /opt/zammad/.bashrc

$ rvm install 2.5.5
$ gem install bundler

$ bundle install --without test development postgres # for Mysql
      # bundle install --without test development mysql # for postgresql

$ cp config/database/database.yml config/database.yml
$ vi config/database.yml  #  username,  password of database

$ rake db:create
$ rake db:migrate
$ rake db:seed
$ rake assets:precompile

$ rails s -p 3000 &amp;&gt;&gt; log/zammad.log &amp;
$ script/websocket-server.rb start &amp;&gt;&gt; log/zammad.log &amp;
$ script/scheduler.rb start &amp;&gt;&gt; log/zammad.log &amp;

$ exit
$ cp /opt/zammad/contrib/nginx/zammad.conf /etc/nginx/sites-available/zammad.conf
$ vi /etc/nginx/sites-available/zammad.conf #change localhost to ip
$ ln -s /etc/nginx/sites-available/zammad.conf /etc/nginx/sites-enabled/zammad.conf
$ systemctl restart nginxبرای متصل کردنش به elasticsearch هم می تونید ازاین قسمت راهنمایی بگیرید (step 3)در نهایت می تونید کانتینر رو کامیت کنید و داشته باشینش برای همه مراحل هم می تونید یه داکر فایل درست کنید که راحت باشید :)</description>
                <category>علی معرفتی</category>
                <author>علی معرفتی</author>
                <pubDate>Wed, 20 May 2020 14:54:08 +0430</pubDate>
            </item>
                    <item>
                <title>شکستن پسورد ویندوز</title>
                <link>https://virgool.io/@marefati110/how-crack-window-bmqd4ovzvqw3</link>
                <description>سلام امروز تصمیم گرفتم یه پست فان بنویسم چه طوری پسورد لاگین ویندوز (7 و 8 و 10) رو کرک کنیم . البته فنی تر بخوام بگم بیشتر یه ترفنده تا کرک (الکی بزرگش نکنیم) :)خب تنها چیزی که نیازی داریم اینه که لینوکس رو لایو بیاریم بالا .بعدش فایل منیجر لینوکس (نشد با ترمنیال) رو باز میکنید میرید به محل نصب ویندوز برید. (باید متوجه شده باشید که لازمه هارد encrypt نشده باشه) ./windows/system32/و فایل cmd.exe رو به utilman.exe تغییر نام بدین .دوباره سیستم رو بوت کنیم و در صفحه لاگین ویندوز روی ایکون (ease of access) کلیک کنید . می بیند که cmd باز میشه با دسترسی administrator حالا خیلی راحت میتونید با دستور زیر پسورد رو تغییر بدین . net user USERNAME PASSWORDحالا دوباره تمام مراحل رو تکرار کنید و فایل ها رو دوباره تغییر نام بدین. (تمام)این ترفند رو می تونید خودتون امتحان کنید و ازش لذت ببرید . بهتون پیشنهاد میکنم از دنیای ویندوز خارج و وارد دنیای لینوکس بشید تا در امان باشید  :)</description>
                <category>علی معرفتی</category>
                <author>علی معرفتی</author>
                <pubDate>Wed, 29 Apr 2020 22:05:21 +0430</pubDate>
            </item>
                    <item>
                <title>Regolith Linux</title>
                <link>https://virgool.io/@marefati110/regolith-linux-vohlyriz40d5</link>
                <description>اگر براتون سواله که Regolith چیه نگاهی به تعریف خوده سایتش میندازیم :Regolith is a modern desktop environment designed to let you work faster by reducing unnecessary clutter and ceremony. Built on top of Ubuntu, GNOME, and i3, Regolith stands on a well-supported and consistent foundation.خب اگر دوست دارین محیط دسکتاپ زیبا و در عین حال راحت و سریعی داشته باشین و کنترل خوبی رو هم بخواین پیشنهاد میکنم ازش استفاده کنید.یه مزیت خوب دیگه ای هم که داره شماره درگیر نصب تک تک پکیچ های مختلف و کافنیگ اونا نمیکنه و خیلی سریع راه اندازی میشه .( خودم با i3 مشکل داشتم ) :))))</description>
                <category>علی معرفتی</category>
                <author>علی معرفتی</author>
                <pubDate>Wed, 29 Apr 2020 02:49:18 +0430</pubDate>
            </item>
                    <item>
                <title>از هوش مصنوعی استفاده کن و راحت پایتون کد بزن!</title>
                <link>https://dataio.ir/از-هوش-مصنوعی-استفاده-کن-و-راحت-پایتون-کد-بزن-ebnrqrglanws</link>
                <description>دیگه کسی نیست که با  intellisense آشنا نباشه . خیلی به ما کمک میکنن و راحت بهتون اجازه میدن گزینه های قابل استفاده رو انتخاب کنی و دیگه لازم نیست تایپ کنی و .....امروز میخوام بهتون پلاگین kite رو معرفی کنم که با استفاده از الگوریتم های ماشین لرنینگ بهترین انتخاب ها و auto complete ها رو برای ما انجام میده و باعث میشه خیلی راحت تر و سریع تر کد بزنیداین پلاگین برای vscode atom pycharm و .. می تونید دانلود کنید . برا ی آشنایش بیشتر هم باهاش حتما به سایتش سر بزنید . برای فان هم شده نصبش کنید و امتحانش کنید .</description>
                <category>علی معرفتی</category>
                <author>علی معرفتی</author>
                <pubDate>Thu, 09 Apr 2020 19:13:26 +0430</pubDate>
            </item>
                    <item>
                <title>Jupyter notebook + Ts/Js</title>
                <link>https://virgool.io/@marefati110/jupyter-notebook-tsjs-vjt2alionqha</link>
                <description>سلام تصیمیم گرفتم که توی این مقاله این ایده رو باهاتون مطرح کنم چه طور داخل Jupyter از جاواسکریپت یا تایپ اسکریپت استفاده کنیم .خودم با Jupyter وقتی اشنا شدم که داشتم وارد حوضه های ماشین لرنینگ میشدم خیلی جاب بود برام دیگه نیازی نبود به خاطر اینکه یه خط کد رو بخواین تست کنید همه کد رو از اول ران کنید نقطه قوتش اینجاست میتونی هم کد بزنی  هم همزمان دیباگ کنی خب این سرعت کد زدن من رو چند برار میکرد و خیلی راضی بودم تا اینکه وارد دنیای js شدم خب برام سخت بود سرعتم کم شده بود و به این فکر کردم که میشه داخل jupyter هم از js استفاده کرد یا نه ؟؟ بله نه تنها js بلکه خیلی از زبان ها....از  c گرفته تا go و ..فقط کافیه براش یه سرچ ساده بزنید و کرنل  های زبان مد نطرتون رو نصب کنید . هدفم این بود که اگر شما هم مثل من برای مدت طولانی فکر میکردید Jupyter فقط برای پایتونه سخت در اشتباهید. itypescript : typescript kernelijavascript : javascript kernel</description>
                <category>علی معرفتی</category>
                <author>علی معرفتی</author>
                <pubDate>Tue, 07 Apr 2020 17:27:22 +0430</pubDate>
            </item>
                    <item>
                <title>گراف دوستی بچه های دانشگاه خورازمی</title>
                <link>https://virgool.io/@marefati110/%DA%AF%D8%B1%D8%A7%D9%81-%D8%AF%D9%88%D8%B3%D8%AA%DB%8C-%D8%A8%DA%86%D9%87-%D9%87%D8%A7%DB%8C-%D8%AF%D8%A7%D9%86%D8%B4%DA%AF%D8%A7%D9%87-%D8%AE%D9%88%D8%B1%D8%A7%D8%B2%D9%85%DB%8C-yzdpuzuhyb3x</link>
                <description>تقریبا ۱٫۵ سال پیش بود که یه پروژه کوچیک برای خودم شروع کرده بودم ایدم این بود که بیام یه crawler بنویسم که بیاد از پیچ خودم توی اینستا گرام شروع کنه و تمامی بچه هایی که دانشجوی دانشگاه خوارزمی بود رو پیدا کنه و وارد دیتابیس کنه یه سری چالش ها بود که می خوام براتون تعریف میکنم.اول بزارید نحوه کارش رو بگمcrawler از پیچ خودم شروع میکنه و اطلاعت تمای فالور ها و فالوینگ هام رو بدست میاره بعدا با فیلتر که میشن افراد وارد پیچ اونا میشه و این قضیه همینطوری ادامه پیدا میکنه و همه رو داخل دیتابیس وارد میکنه و ریلیشن میزنه بینشون در اخر هم با یه الگوریتم میاد و به هر نودی یه ارزشی میده.چالش ها :۱)محدودیت های اینستاگرام برای crawling اینستا خیلی زود تشخیص میده که یه ربات داره تو سایتش میچرخه و بعد از چنتا رکوست بلاک میشی راهکار هایی که برا دور زدنش انجام دادم فاصله انداختن بین دوتا رکوست اونم با تایم های تصادفی .بخشی رو با  private-api های اینستاگرام نوشتم و بخشیش رو هم از selenium کمک گرفته بودم همزمان هم از چنتا اکانت اینستاگرام استفاده میکردم و به سرعت مناسبی رسیده بودم.۲) پیدا کردن افراد درستچالش بدی این بود که چطور بچه های دانشگاه رو از بقیه فالور ها و فالوینگ های تشخیص بدم از اون جایی که خیلی از بچه ها توی bio اینستا زدن که دانشجوی دانشگاه خوارزمی هستن خیلی راحت از این موضوع استفاده کردم ولی تکلیف کسایی که bio ندارن چی ؟؟ با چنتا تکنیک آماری ساده مثل میزان مشاهده شدن این افراد در بین بقیه افرادی که ازشون مطمن هستیم و ... حل شد.مشکل دیگه این بود که پیچ یه سری از دوستان private بود خب تنها کاری که میشد کرد درخواست دوستی بود ادامه ماجرا (این مشکل بزرگی نبود و به داده ها صدمه ای وارد نمیکرد دلیلش رو جلوتر میگم).۳) دخیره سازی داده ها برای سیو کردن داده ها  sql خیلی مناسب نبود می تونید در این مورد بیشتر مطالعه کنید تا کامل متوجه بشید. من از دیتابیس neo4j استفاده کردم (اسکرین شات قرار داده شده) و به راحتی داده ها رو وارد دیتابیس میکردم برا اولین بار بود از graph database ها استفاده میکردم  جالبه که زبان دیگه های برای query زدن داره به نام cypher اولش شاید براتون سخت باشه ولی به عنوان یه چیز جدید که بخواین یاد بگیرید کار باحالیه.همچین کتابخونه های خوبی هم داشت که راحت میشد توی برنامتون ازشون استفاده کنید . py2neo کار رو خیلی بیشتر هم براتون راحت میکنه.اگر قرار باشه دوباره از دیتابیس های مبتنی بر گراف استفاده کنم میرم سراغ orientdb هم برای کوری زدن از sql میتونید استفاده کنید و خیلی راحت با js توش توابعی رو که لازم دارید رو پیاده سازی کنید.۴) تا کی باید ادامه بدم ؟سوالی که برام پیش اومده بود این بود که تا کی باید بزارم برنامه کار کنه ؟ چند تا نکته هست: × با توجه به فیلتر هایی که انجام میشد روند پیدا کردن افراد جدید نزولی است× هزینه کار بالا بود و زمان زیادی رو می گرفتبه همین دلیل چنتا سرچ کردم برای پروژه  های مشابه (اغلب اوقات تو اولین نفر نیستی :)) ) کار های باحالی پیداکردم ولی در صدر اونا گوگل رو ماکروسافت که هین کار رو با ایمیل انجام داده بودن تا رابطه بین افراد رو پیدا کنند (در اخر امار جالبی هم بتون میدم) کافی بود اونقدری این کار رو ادامه بدم تا به صورت میانگین کمترین فاصله بین دو فردی که ارتباط مستقیمی با هم ندارند کمتر از ۷ باشه. پس برنامه برای چندین روز در حال کار بود  O.oچالش های دیگه ای هم بود مثل ترسیم داده ها چون neo4j برای این کار خیلی بده یکم که داده ها زیاد میشه به شدت سیستم کند میشه که از d3.js میشه استفاده کرد . برای ارزش دهی به هر نود هم از مدل ها مارکوف استفاده کردم الگوریتم خیلی هوشمندانه ای داره می تونید مطالعه کنید درموردش .در کل در دو مرحله crawling رو انجام دادم یک بار فقط اسم افراد و فالور ها و فالوینگ ها شون رو جمع اوری میکردم ولی برا دفعه های بعد لیست کسایی که کامنت گزاشتن یا لایک کردن و .... رو هم گرفتن. قاعدتا الگوریتم ارزش دهی و .. رو هم دستخوش تغییرات زیادی شد.درمورد گوگل و ماکروسافت گفتم که همچین کاری رو با میلیون ها  ایمیل انجام داده بودن نتیجه جالبی که گرفته بودن این بود که میانگین کمترین فاصله بین دو فرد که باهم ارتباط مستقیمی ندارن (بهم ایمیلی نداده بودن یا توی این پروژه همدیگه رو فالو نکرده بودن) کمتر مساوی ۷ هست WoWw چیز باحالی بود وقتی خوندمش این نه تنها در ایملی و فالو بلکه در دنیای واقعی شما می تونید به هرکسی از دنیا کانکت بشین تقریبا با ۷ تا ادم واسط (که پیدا کردنشون غیر ممکنه O.o ) در حال محسابه همچین معیاری روی پروژه خودم بودم که به دلیل بسته بودم و ارتباط بیشتر بچه های دانشگاه به صورت میانگین تقریبا به عدد ۵٫۶ رسیدماینجا بود که مشکل اکانت های private خیلی خودش رو نشون نمیداد و می شد ازشون صرفه نظر کرد چون فالور های گمشده اون اکانت ها از راه هایی دیگه ای در دسترس بود .در آخر بیش از ۳۰۰۰ نفر از بچه ها شناسایی و ۷۸۰۰۰ ریلشن بیشنون ایجاد شده بود.من علی معرفتی هستم و طرفدار سفت و سخت دنیای برنامه های آزاد .دوست دارم هر چیزی رو که بلدم رو به اشتراک بزارم و این فرهنگ رو گسترش بدیم تا همه بتونیم باهم پیشرفت کنیم.اگر خواستین بیشتر باهم در ارتباط باشیم به من ایمل بزنید : marefati110@gmail.com</description>
                <category>علی معرفتی</category>
                <author>علی معرفتی</author>
                <pubDate>Sun, 05 Apr 2020 15:08:10 +0430</pubDate>
            </item>
                    <item>
                <title>چرا چندتا چیز باحال یاد نگیریم ؟؟</title>
                <link>https://virgool.io/@marefati110/%DA%86%D8%B1%D8%A7-%DA%86%D9%86%D8%AF%D8%AA%D8%A7-%DA%86%DB%8C%D8%B2-%D8%A8%D8%A7%D8%AD%D8%A7%D9%84-%DB%8C%D8%A7%D8%AF-%D9%86%DA%AF%DB%8C%D8%B1%DB%8C%D9%85-gok7cbllzcqi</link>
                <description>سلام برخلاف بقیه مقاله ها به جایی که بخوام مقاله ای رو بنویسم و محتوایی رو انتقال بدم (یکم انتقال میدم منم) محتوا رو میسپرم دست خواننده .حالا موضوعش چیه؟؟بیاین فریمورک ها یا کتابخونه ها و یا هر چیزی رو که فکر میکنید باحله معرفی کنید تقریبا بیشتر چیز های رو که خودمم دارم یاد میگیرم بهم معرفی کردن اینطوری هم به هم کمک میکنیم هم باعث پیشرفت بقیه هم میشیم .خب اول خودم شروع میکنم :اگر با strapi آشنا نیستید پیشنهاد میکنم حتما به سایتش یه سر بزنید یه  cms headless  خیلی باحال که کلی فیچر داره و میتونه بهتون کمک کنه درسته روی نسخه بتا هست ولی جواب گوی پروژه های بزرگ هم هست هر ماه هم آپدیت میده و تیم قوی هم پشتش هست :)اگر از express هم استفاده میکنید باید به این framework هم یه نگاه بندازید خیلی راحت میتونی از typescript استفاده کنید به همراه کلی فیچر های دیگه که کد زدن رو براتون راحت تر میکنه و خوانایی کدتون رو میبره بالا خیلی هم تمرکز روی استفاده از decorator ها داره O.oخب نوبت شماست :)))</description>
                <category>علی معرفتی</category>
                <author>علی معرفتی</author>
                <pubDate>Wed, 01 Apr 2020 02:10:11 +0430</pubDate>
            </item>
                    <item>
                <title>Caching in Django With Redis</title>
                <link>https://virgool.io/@marefati110/caching-in-django-with-redis-i4wtfwp1n5jl</link>
                <description>سلام این اولین پست من در ویرگول و برای شروع فعالیتم میخواستم تجربه ای که امروز برای پیاده سازی caching در Django  داشتم براتون بنویسم.خب برای شروع باید بگم که من یه RESTful API با DRF پیاده سازی کردم که  همه VIEW ها هم از ‌ModelViewSet ارث بری داشتن :from rest_framework.viewsets import ModelViewSet

from .models import CommentsModel
from .serializers import CommentsALLSerializer

class CommentsViewSet(ModelViewSet):
    queryset = CommentsModel.objects.all()
    serializer_class = CommentsALLSerializer
    http_method_names = [&#039;get&#039;]
    permission_classes = (AllowAny,)خب با توجه با  Document خوده Django که خیلی هم خوب توضیح داده وقتی بخواید یه view رو cache کنید فقط کافیه یه از method_decorator و cache_page استفاده کنید ولی مشکل وقتی ایجاد میشه که view های ما تابع نیستن .برای همین شما باید چند متدی رو که میخوایید caching روشون انجام بشه رو override  کنید.من کدم رو به این شکل تغییر دادم :class CommentsViewSet(ModelViewSet):
    queryset = CommentsModel.objects.all()
    serializer_class = CommentsALLSerializer
    http_method_names = [&#039;get&#039;]
    permission_classes = (AllowAny,)

    @method_decorator(cache_page(60 * 60 * 5))
    def dispatch(self, request, *args, **kwargs):
        return super().dispatch(request, *args, **kwargs)با استفاده از متد dispatch من همزمان میتونم متد های list و retrieve رو cache کنم البته تصمیم با شماست اگر بخواید میتونید decorator ها رو روی این متد ها اعمال کنید .برای انتخاب نحوه caching هم Django روش های متنوعی رو مثال زده ولی چیزی از redis نگفته با یکم سرچ من این repository  رو پیدا کردم که تمام نیاز هام رو رفع می کرد همچنین Document نسبتا خوبی داره که من پیشنهاد میکنم ازش استفاده کنید.امیدوارم کمک خوبی کرده باشم .</description>
                <category>علی معرفتی</category>
                <author>علی معرفتی</author>
                <pubDate>Fri, 06 Mar 2020 18:04:53 +0330</pubDate>
            </item>
            </channel>
</rss>