<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های majid</title>
        <link>https://virgool.io/feed/@majidpv</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 11:51:28</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2773/avatar/y5MjFx.png?height=120&amp;width=120</url>
            <title>majid</title>
            <link>https://virgool.io/@majidpv</link>
        </image>

                    <item>
                <title>طراحی  API</title>
                <link>https://virgool.io/@majidpv/api-components-gzvhlxvfqvkd</link>
                <description>قواعد اصلی و کلی برای پیاده سازی اصولی یک  API  بصورت زیر است. هر کدام از این قواعد دارای جزییات و مفاهیم زیادی می‌باشد. در این قسمت صرفا اشاره‌ای به آنها کردم. برای ریز شدن در جزییات هرکدام باید جداگانه در موردشان بخوانید.اشتباه نکنید، این قواعد ربطی به محدودیت های REST ندارد، صرفا قواعدی هستند که برای درست و کامل پیاده سازی کردن API لازم است.۸ بخش اصلی در طراحی  API نام گذاری صحیح APIتعریف صحیح Endpoints و Routesاستفاده صحیح از Query Parametersموارد پرتکرار در Request Headerمشخص کردن دیتاهای مورد نیاز در Request Bodyموارد پرتکرار در Response Headerمشخص کردن دیتاهای مورد نیاز در Response Bodyانتخاب درست Status Code برای انواع Responseها۱. نام گذاری صحیح APIفرض کنید می‌خواهید ‌ api برای گرفتن اطلاعات یک کاربر بخصوص طراحی کنید، نباید نام api غیرشفاف باشد.  &quot; GetUsers &quot; یک نامگذاری اشتباه برای این api خواهد بود. چون تصور می‌شه api با این نام اطلاعات تمام کاربران را به ما می‌دهد. همچنین نباید از فعل استفاده کنیم. باید از اسمی استفاده کنیم که نماینده موجودیتی است که End point ما قصد  انجام کوئری روی آن را دارد. دلیل این است که متد درخواست HTTP  ما خود یک فعل دارد.از یک نام واضح و مختصر استفاده کنید. اگر قصد دارید روی جدول کاربران کوئری بزنید، نباید نام api، مربوط به یک یا گروهی از کابران باشد. (Create Users/Delete User)۲. تعریف صحیح Endpoints و Routesیک endpoint جایی است که  API درخواست‌ها را دریافت می کند. در واقع توابع یا resourceهایی هستند که از طریق API می‌توان به آنها دسترسی داشت.مانند حذف یک پست یا اطلاعات کتابخانه و یا یک کتاب خاص. endpoint عملکرد خاصی را انجام می دهند و تعدادی پارامتر را می‌گیرد و داده‌ها را باز می گرداند. برای اکثر سرویس‌ها، endpoint یک URL است.یک route نامی است که برای دسترسی به endpoint استفاده می‌شه. یک route می‌تونه چند endpoint مرتبط داشته باشه و اینکه از کدوم آنها استفاده بشه به HTTP Verb بستگی داره.برای مثال http://localhost:8000/users رو در نظر بگیرید.در این مثال http://localhost:8000/users و http://localhost:8000/users/{userId} دو endpoint هستند و اینها route های زیر را دارند:GET /usersGET /users/userIdPUT /users/userId.......۳. استفاده صحیح از Query Parameters:پارامترهای پرس و جو رایج ترین نوع پارامترها هستند. آنها در انتهای URL درخواست پس از علامت سوال (؟)، با جفت های مختلف name=value که با علامت (&amp;) از هم جدا شده اند ظاهر می شوند. پارامترهای پرس و جو می توانند مورد نیاز و اختیاری باشند. از این پارامتر بیشتر برای فیلترکردن دیتا و یا صفحه بندی استفاده می شود.GET /users/findByStatus?status=availableGET /books?offset=100&amp;limit=50تعریف Header:هدرهای API بخشی از request/response هستند که برای انتقال meta data در مورد request و response مورد نظر استفاده می‌شوند. به عبارت ساده تر، اینجا جایی است که می توانید اطلاعات اضافی در مورد request/response ارائه دهید. به عنوان مثال، مشخص میکنن که داده‌های ارسال شده در قالب JSON هستند، کدام نسخه از API را فراخوانی کند و .....هدرها عموما بصورت جفت key:value هستند.۴. موارد پرتکرار در Request Header:User-Agent:نرم افزار و نسخه client را شناسایی می کند.Accept:فرمت ترجیحی response را مشخص می کند و اطمینان می دهد که سرور response را در قالبی ارائه می دهد که کلاینت بتواند پردازش و درک کند. برای مثال &quot;application/json&quot; به سرور نشان می دهد که کلاینت response را در قالب JSON می‌پذیرد. چند نمونه از فرمت های قابل قبول:Application/JSON - Application/XML - Text/HTML - Text/plain  Content-typeبرای نشان دادن نوع دیتایی که درrequest body وجود دارد. برای مثال &quot;application/json&quot; نشان می دهد که request body در قالب JSON است. چند نمونه از فرمت های قابل قبول:Application/JSON - Application/XML - Text/HTML - Text/plainAuthorization: برای ارائه اطلاعات احراز هویت به سرور استفاده می شود. این به client اجازه می‌دهد تا credential یا token را که هویت و مجوزهای آن را تأیید می کند، وارد کند و دسترسی به resourceها را تضمین کند. Authorization نقش مهمی در اجرای مکانیسم‌های کنترل دسترسی ایفا می‌کند و تضمین می‌کند که فقط clientهای مجاز می‌توانند اقدامات خاصی را انجام دهند یا داده‌های خاصی را از API فرخوانی کنند. چند مثال معمول از این هدر:API key authentication: The client  includes an API key in the Authorization header to authenticate itself.  The server validates the API key to ensure that the client has the  necessary permissions to access the requested resources.Token-based authentication: The client  includes an access token in the Authorization header, such as a JSON Web  Token (JWT). This token contains information about the client&#x27;s  identity and permissions. The server verifies the token&#x27;s authenticity  and grants access based on the token&#x27;s claims.OAuth authentication: In scenarios where  third-party authentication is required, the Authorization header can be  used to send the OAuth token or bearer token. This allows the server to  authenticate the client using the OAuth provider and grant access based  on the provided token.Role-based access control: The  Authorization header can also be used to convey the client&#x27;s role or  specific access level. This information helps the server enforce access  control policies and restrict certain actions or resources based on the  client&#x27;s assigned role or privileges.Cache-Controlدستورالعمل‌هایی را به clinetها و واسطه‌ها (مانند حافظه‌های پنهان) در مورد مدیریت ذخیره‌سازی response ارائه می‌کنند. آنها با کاهش انتقال دیتاهای غیر ضروری و بهبود زمان response، به بهینه سازی عملکرد کمک می کنند. هنگامی که یک response در حافظه پنهان ذخیره می شود (cached)، body ذخیره شده به requestها بازگردانده می شود، نه اینکه اطلاعات هر بار بازیابی شود. چند مثال از این هدر:publicمشخص می کند که response را می توان ذخیره کردprivate: The response can be stored, but not in a shared cache.مشخص می کند که response را می توان ذخیره کرد اما برای یک کاربر خاص در نظر گرفته شده است.max-age: The time in seconds for which a cached response is acceptable.حداکثر زمان (بر حسب ثانیه) را مشخص می‌کند  که response ذخیره شده در cache قابل قبول است.no-cache: Used by clients to specify that a stored response shouldn’t be used,  or by the server shouldn’t use the response for subsequent requests  without validation on the origin server.توسط کلاینت ها برای تعیین اینکه یک response ذخیره شده نباید استفاده شود، یا توسط سرور نباید از response برای requestsهای بعدی بدون اعتبارسنجی در سرور مبدا استفاده کند.no-store: A cache must not store the request or response - if specified by the client or server respectively۵. موارد پرتکرار در Response Header:هدرهای response بخشی جدایی ناپذیر از پروتکل HTTP هستند و توسط سرورها برای ارائه اطلاعات اضافی در مورد response ارسال شده به کلاینت استفاده می شوند. response headerها نقش مهمی در انتقال جزئیات مهم در مورد response سرور دارند. می‌توانند شامل اطلاعات مختلفی مانند نوع محتوای response، دستورالعمل‌های حافظه پنهان، اطلاعات سرور و غیره باشند. اینها با request headerها مرتبط هستند زیرا جزئیات مهمی را ارائه می دهند که به کلاینت کمک می کند تا response دریافتی را درک کند و پردازش کند. به عنوان مثال، هدر &quot;Content-Type&quot; کلاینت را در مورد قالب داده های بازگردانده شده (به عنوان مثال، JSON، XML) مطلع می کند و به کلاینت اجازه می دهد تا پاسخ را به طور مناسب تجزیه و مدیریت کند.Content-typeبرای نشان دادن نوع دیتایی که درresponse body وجود دارد. برای مثال &quot;application/json&quot; نشان می دهد که response body در قالب JSON است. چند نمونه از فرمت های قابل قبول:Application/JSON - Application/XML - Text/HTML - Text/plainLocationاین هدر برای هدایت کلاینت به یک URL دیگر استفاده می شود. کلاینت باید به طور خودکار URL را در Location header دنبال کند. معمولاً برای تغییر مسیرهای HTTP استفاده می شود، مانند زمانی که کاربر فرمی را ارسال می کند و به صفحه تأیید هدایت می شود.نمونه کد قابل قبول Request HeaderPOST /api/orders HTTP/1.1Host: api.amaxon.comAuthorization: Bearer YOUR_ACCESS_TOKENContent-Type: application/jsonAccept: application/jsonUser-Agent: AmaxonApp/1.01نمونه کد قابل قبول Response HeaderContent-Type: application/jsonX-RateLimit-Limit: 100X-RateLimit-Remaining: 96۶. مشخص کردن دیتاهای مورد نیاز در Request Bodyهنگامی که شما نیاز به ارسال داده از کلاینت به API دارید، آن را به عنوان Request Body ارسال می‌کنید. این جایی است که ما دیتا و ویژگی‌هایی که می‌خواهیم در request خود ارسال کنیم، مشخص می‌کنیم. بجز متد GET بقیه متدها همیشه request body دارند.اینکه چه دیتاهایی در request body قرار دهید بستگی به تعریف آبجکتها در API و دیتابیس شما دارد. در API Documentation باید ۳ مورد مشخص شود: ۱. کدام فیلدها اجباری و کدام اختیاری است ۲. شرح هر فیلد ۳. نمونه ای از دیتای ارسالی ساختار request bodyبسته به API  و نوع دیتا ارسالی، request body را می توان به روش های مختلفی پیاده سازی کرد. اینها سه نوع رایج پیاده سازی هستند:Raw از نظر فنی می تواند هر نوع رشته ای را در خود جای دهد، اما به طور کلی شامل XML یا JSON می شود، به عنوان مثال. {&quot;firstName&quot;:&quot;Pied&quot;, &quot;lastName&quot;:&quot;Piper&quot;}x-www-form-urlencodedبرای ارسال مقادیر متنی ساده در یک رشته پرس و جو استفاده میشود. مثال key1=value1&amp;key2=value2. در ایت روش همه کارکترها کدگذاری می‌شوند. مثلا فاصله(space) با %20 جایگزین میشه.Binaryبرای پیوست کردن تصاویر، فیلم ها، صداها و سایر فایل های غیر متنی استفاده می‌شود.​انواع دیگر عبارتند از GraphQL و فرم های چند بخشی. فرمت صحیح بستگی به سرور دارد و داکیومنت API همیشه باید به شما بگوید که دقیقاً چگونه دیتا را ارسال کنید که به درستی پردازش شوند.نمونه ای از یک Request Bodyاگر قصد داشته باشیم با متد PUT اطلاعات کاربری را آپدیت کنیم، request body و route آن میتواند بصورت زیر باشد:GET /users/findByName?name=saeed{  &quot;Name&quot;: &quot;Majid&quot;,  &quot;Number&quot;: 57,  &quot;Team&quot;: &quot;Arsenal&quot;}در این مثال اطلاعات هر ۳ فیلدی که در request body مشخض شده است برای کاربری با نام saeed آپدیت می شود. نکته مهم در تعریف request body این است که فقط دیتاهایی را مشخص کنیم که به آنها نیاز است.۷. تعریف Response Bodyدرست مانند request body، برای نگهداری و ارسال دیتاهایی که می‌خواهیم به کلاینت ارسال کنیم، استفاده می‌شود. البته در پاسخ به بعضی از requestها به response body نیاز نیست و تنها با ارسال یک status code مشخص میکنیم که درخواست کلاینت انجام شد یا نشد. برای مثال هنگام لاگین به یک سایت تنها نیاز است status code ارسال کنیم و مشخص کنیم که لاگین موفق بود و یا به چه علت لاگین انجام نشد.متدهای GET همیشه نیاز به یک Response body دارند.ساختار response body همانند request body است و فقط دیتاهایی که در اینها مشخص میکنیم تفاوت دارد. و نکته اصلی این است که از ارسال دیتاهای غیرضروری از طریق response body خودداری کنید.۸. انتخاب درست Status Codeنشان می دهد آیا سرور با موفقیت درخواست را انجام داده است یا خیر - و اگر نه، چرا. اولین بخشی از Response که خطا را مشخص میکند و همچنین دولوپرها برای دیباگ کردن به آن توجه میکنند status code ها هستند، در نتیجه انتخاب درست status code ها اهمیت زیادی دارند. حتما صفحه ویکی پدیا را مطالعه کنید.همانطور که قبلا گفتم هنگام لاگین به یک سایت تنها نیاز است که status code را مشخص کنیم که در اینجا می تواند موارد زیر باشد:200 OK. 401 Unauthorized. نکات مهم در تعریف صحیح APIاطلاعات اضافی برای API ایجاد نکنید (Don&#x27;t Create Side Effects on the API)برای مثال اگر یک کاربر فقط نام یک کاربر را درخواست می‌کند، نام کامل و ID را هم به کاربر ارسال نکنید. فقط همان چیزی که نیاز است. ارسال response body کوچک اهمیت بالایی دارد.هنگام ایجاد یک API، سعی کنید تا حد امکان همه چیز را در یک تابع تعریف نکنید. اگر وظایف زیادی را به طور همزمان انجام دهد، باید به چند API تقسیم شود. پیاده سازی صفحه بندیهنگامی که یک میکروسرویس بزرگ ایجاد می‌کنید و  Response body یا Response Object بیش از حد بزرگ می‌شود، صفحه‌بندی باعث می‌شود API بتواند مقدار کمی از اطلاعات را برگرداند. صفحه بندی روشی برای جداسازی محتوای دیجیتال به صفحات مختلف در یک وب سایت یا یک Response Object است.یک پایگاه داده با هفتاد کاربر را تصور کنید. API به جای ارسال پاسخ همه کاربران به یکباره و کند کردن آن، getUsers را فراخوانی می کند.می‌توانید پاسخ را تجزیه کنید، مانند بازگرداندن سی کاربر اول، سی کاربر بعدی و ده کاربر بعدی. از Fragmentation استفاده کنیدهنگامی که یک API به صورت داخلی ارتباط برقرار می کند، response معمولا کوتاه است. اما وقتی response بزرگ باشد، استثناست و وقتی استثنا باشد، یعنی یک مشکلی وجود دارد. این زمانی اتفاق می‌افتد که response از اندازه نرمال خود بیشتر شود (10 کیلوبایت یا 15 کیلوبایت). راه حل در اینجا این است که response را تجزیه کنید و آن را ذره ذره به سرویس دیگری بدهید.</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Sun, 03 Mar 2024 15:56:37 +0330</pubDate>
            </item>
                    <item>
                <title>تفاوت URL و URI</title>
                <link>https://virgool.io/@majidpv/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-url-%D9%88-uri-uf65hmuypfyw</link>
                <description>دانستن تفاوت بین URI و URL می تواند مسیر توسعه وب سایت شما را ساده تر کند. به عنوان مثال، می‌توانید راحت‌تر یک REST API طراحی کنید، یک URI یا یک URL هر منبع را در وب شناسایی می‌کند.URL : Uniform Resource Locatorیک URL شناسه ای است که فقط مکان یک صفحه وب را نشان می دهد. به آدرس وب و  HTTP، FTP و mailto اشاره دارد.URI: Uniform Resource Identifierیک URI  رشته ای از کاراکترها است که به طور کلی هر منبع وب را با استفاده از نام، مکان یا هر دو شناسایی می کند. یک URL و یک (uniform resource name) URN دو نوع URI هستند.به طور خلاصه، تفاوت اصلی بین URI و URL این است که اولی می تواند یک نام، یک مکان یا هر دو باشد، در حالی که دومی فقط مکان یک resource را ارائه می دهد.پروتکل های وب مانند HTTP و HTTPS از URI برای برقراری ارتباط با resources در اینترنت استفاده می کنند. معماری URI ها رشته ای از کاراکترها است که نشان دهنده آدرس یک منبع وب است که معمولاً ترکیبی از نام و آدرس منبع است.اجزای URI protocol://[authority]path[?query][#fragment]۱. پروتکل: قبل از اینکه یک URI بتواند به یک منبع دسترسی پیدا کند، باید نوع پروتکل مشخص شود.http://این پروتکل پرکاربردترین پروتکل در اینترنت است. مخفف عبارت HyperText Transfer Protocol است که برای دسترسی به منابع در اینترنت استفاده می شود.https://این شبیه به http  است، اما داده‌های در حال انتقال را با استفاده از یک ارتباط امن (SSL/TLS) رمزگذاری می‌کند.mailtoاین پروتکل برای ارسال و دریافت ایمیل استفاده می‌شود.ftpاین پروتکل که مخفف «پروتکل انتقال فایل» است، فایل‌ها را داخل یک شبکه انتقال می‌دهد.2. authorityاطلاعات کاربر: شامل نام کاربری و پسورد که با colon جدا می‌شوند. دامنه: نام منحصر به فردی است که وب سایت را در اینترنت شناسایی می کند. ( میدانیم که دامین مربوبه به ip هاست/سرور میباشد. پس میتوانیم ip نیز بنویسیم) شماره پورت: این جز اختیاری است و شماره پورت مورد استفاده برای دسترسی به منبع را مشخص می کند.۳. آدرس/path: مکان/آدرس منبع را در ساختار دایرکتوری سرور مشخص می کند. میبایست خالی باشد یا با یک &quot; / &quot; از سایر بخشها جدا شود. برای مثال ۴. کوئری/Query string: این جز اختیاری است و اطلاعات اضافی را مشخص می کند که هنگام درخواست منبع، به سرور ارسال شود.5. Fragment Component:این جز اختیاری شامل یک شناسه قطعه (fragment identifier) است که یک منبع دوم را مشخص می‌کند. این جز به بخش دیگری از منبع اولیه اشاره دارد. قبل از یک قطعه یک نماد هشتگ وجود دارد و با پایان یک URI خاتمه می یابد.یک مثالhttps://example.ir/test/test1?search=test-question#part2protocol = https://domain = example.irpath = /test/test1query = ?search=test-questionfragment = part2دلایلی که باید از URI استفاده کنیمInteroperability یکURI نسبت به URL  قابلیت استفاده بیشتری دارد زیرا می‌تواند در سیستم‌ها و پروتکل‌های مختلف استفاده شوند. از سوی دیگر، URLها مختص اینترنت هستند و فقط توسط مرورگرهای وب و سایر برنامه‌های مبتنی بر اینترنت استفاده می‌شوند.برای مثال ISAN یک سریال برای شناسایی آثار صوتی/تصویری مانند فیلم‌ها و مستندها و ...  است. با استفاده از urn: scheme یک URI می‌تواند سریال ‌ISAN را بدون استفاده از پروتکل شناسایی کند. برای مثال urn:isan:0000-0000-2CEA-0000-1-0000-0000-Y  فیلم سینمای اسپایدر من است. Namespace independenceیک URL مختص اینترنت است و از یک DNS استفاده می کند، در حالی که URIها به یک طرح نامگذاری خاص یا DNS متصل نیستند. این بدان معناست که URI ها می توانند منابع را در هر سیستم نام گذاری ای شناسایی کنند، در حالی که URL ها فقط می توانند منابع موجود در فضای نام اینترنت را شناسایی کنند.Identify abstract and physical resourcesدر واقع URI می‌توانند هر منبعی، مانند شماره تلفن، مکان‌ها، کتاب‌ها و افراد را مشخص کنند. این منبع لزوما محدود به صفحات وب نیست که از طریق اینترنت قابل دسترسی هستند.Multiple URIs can be linked with one resourcبه عنوان مثال، داده های http://www.example.com/abc/2022/Q1 ممکن است در http://www.example.com/abc/Q12022 در دسترس باشد.این باعث می شود client-server بهتر به یک منبع اشاره کند.هزینه‌های URIURIs should be permanentهنگامی که یک URI ایجاد کردید، تغییر آن می تواند به  وب سایت شما آسیب برساند. Not compatible with all browsersاگرچه URI ها را می توان در بسیاری از مرورگرهای محبوب مانند Google Chrome و Mozilla Firefox استفاده کرد، برخی از مرورگرهای نسخه قدیمی مانند Internet Explorer 5،6،7 یا Safari 5 و 6 توسط  URIs پشتیبانی نمی شوند.چه زمانی از URL استفاده کنیم؟Referring to an email addressRetrieving web pagesRedirecting a resourceمی توانید از یک URL برای هدایت یک سورس قدیمی به آدرس جدید استفاده کنید. معمولاً برای جابجایی یک صفحه وب استفاده می شود. به عنوان مثال، اگر آدرس وب سایت خود را از https://www.blog.example.com به https://www.example.com/blog تغییر دهید،                          می توانید 301 redirect را پیاده سازی کنید. انجام این کار بازدیدکنندگان را از دریافت HTTP status code مانندخطای 404 جلوگیری می کند.Referring to an internal pageیک URL را می توان بدون پروتکل و نام دامنه نمایش داد، اما فقط یک مسیر را نشان می دهد. از آن برای پیوند دادن یک فایل خاص در همان دامنه استفاده می شود که می توان آن را URL نسبی نامید. به عنوان مثال،  URL = https://www.example.com/news/business/elative URL = /news/business/نتیجه گیریدرک تفاوت بین URI یا URL و استفاده از آنها ضروری است. به عنوان مثال، ساختن یک REST API با استفاده از  یک URI یا یک URL می تواند عملکرد REST API را بهبود بخشدیک URI مخفف یک شناسه منبع یکنواخت است، یک رشته کاراکتر که به طور کلی یک منبع را با نام، مکان یا هر دو، در اینترنت شناسایی می کند. همچنین، یک URI می تواند انواع فایل ها و منابع دیگر را متمایز کند.از سوی دیگر، URL رشته ای از کاراکترها است که آدرس منبع و نحوه دسترسی به آن را در صفحه وب نشان می دهد. از آنجایی که URL بخشی از یک URI است، آنها از ساختار مشابهی پیروی می کنند.منابع:https://refine.dev/blog/uri-vs-url/https://www.hostinger.com/tutorials/uri-vs-url</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Sun, 12 Feb 2023 21:09:26 +0330</pubDate>
            </item>
                    <item>
                <title>Hash vs Encrypt</title>
                <link>https://virgool.io/@majidpv/hash-vs-encrypt-p1lvshi3alar</link>
                <description>هش و رمزگذاری دو عملیات مهم و اساسی هستند. هر دوی این تکنیک ها داده‌های ورودی را به فرمت متفاوتی تغییر می‌دهند. هش کردن روی متن ورودی، یک hash value  ایجاد می کند، در حالی که رمزگذاری داده ها را به ciphertext تبدیل می کند.رمزگذاری یک فرآیند برگشت پذیر است ( دو طرفه )، در حالی که هش کردن یک فرآیند برگشت ناپذیر است (‌یک طرفه).هش کردن / Hashingهش کردن یک پروسس است که هر نوع داده ای با طول‌‌های متفاوت رو با استفاده از تابع هش، به یک داده با طول مشخص و ثابت (معمولا ۱۶۰، ۲۵۶، ۵۱۲ بیت) تبدیل می‌کند. این داده با  نام‌هایhash value, hash code checksum, simply hash شناخته می‌شود.دو کاربرد Hashing:برای بررسی اینکه محتوا یک فایل یا پیام در حین انتقال از طریق شبکه تغییر نکرده است. به عنوان مثال، کاربر A می تواند یک فایل را برای کاربر B ارسال کند و مقدار هش را همراه با پیام اصلی ارائه دهد. کاربر B می تواند مقدار هش فایل دریافتی را محاسبه کند. تطبیق هر دو مقدار هش به کاربر B اطمینان می دهد که فایل تغییر نکرده است.یکی دیگر از کاربردها در hash table است. hash table یک ساختار داده است که داده‌ها را با hash value به عنوان شاخص جدول و داده‌های اصلی را به عنوان مقدار شاخص ذخیره می کند. یکی از ویژگی های الگوریتم‌های هش این است که ورودی یکسان، تا ابد خروجی یکسان دارد.۳ ویژگی اصلی و مهم توابع Hash۱: قطعی بودن (Deterministic)مهم نیست چند بار یک ورودی دلخواه را وارد تابع هش می‌کنید، در هر بار تلاش باید یک نتیجه یکسان دریافت کنید. کوچکترین تغییر در ورودی باید باعث تغییر خروجی شود.۲: محاسبه سریعیک  تابع هش باید ورودی را به سرعت تبدیل به خروجی (hash value) کند. اگر این  فرآیند به اندازه کافی سریع نباشد، سیستم ما کارآمد نخواهد بود.۳: غیرقابل بازگشت بودنتابع  هش ما باید به گونه‌ای باشد که اگر ما ورودی خود را A در نظر بگیریم و هش  خروجی را (H(A در نظر بگیریم، رسیدن به A از روی (H(A غیرعملی باشد. در واقع توابع هش برگشت پذیر هستند، اما باید به نحوی باشند که باتوجه به منابع سخت افزاری امروز این کار در عمل غیرممکن باشد.از لحاظ ریاضی اینکه دو ورودی به توابع هش خروجی یکسان داشته باشند امکان پذیر است. اما تلاش شده است این توابع نوعی ایجاد شوند که این احتمال نزدیک به صفر باشد. در مورد برگشت پذیر نبودن هم هیمنطور،‌ ای توابع نوعی طراحی شده اند که باتوجه به سخت افزارهای امروزی محاسبه ورودی از روی هش، سالها زمان میبرد.یکی از خطرات امنیتی کامپیوترهای کوانتمی این است که برگشت پذیر بودن توابع هش را بطور چشمگیری کاهش می‌دهند.What is salting?یکی از ویژگی های هش این است که ورودی یکسان خروجی یکسان دارد. حالا تصور کنید یک مهاجم جدولی (rainbow list) از پسوردهای ممکن و خروجی آنها داشته باشد اگر مهاجم بتواند به دیتابیس دسترسی پیدا کند و مقدار هش های پسوردها رو بدست آورد، می‌تواند با مقایسه هش پسورد و جدولی که دارد پسورد صحیح را پیدا کند. این یکی از اصلی ترین مشکلات امنیتی توابع هش است.روش salting جایگزینی برای رمزگذاری یا هش نیست. این در واقع یک تابع است که می تواند به هش اضافه شود تا ایمن تر شود. با این روش، چندین کاراکتر رندم و اضافی به خروجی هش اضافه می‌کنیم تا به این صورت حتی با استفاده از rainbow list  ورودی تابع هش قابل شناسایی نباشد.حتی در این روش هم مهاجم می‌تواند به rainbow lis کاراکترهای اضافی و رندم اضافی کند تا بتواند پسورد صحیح را پیدا کند، اما زمانی که برای یافتن پسورد نیاز دارد بصورت نمایی زیاد می‌شود تا در عمل پیدا کردن پسورد غیر ممکن شود.هش به خودی خود امنیت خاصی ندارد. در حالی که لایه‌ای از امنیت را به ذخیره‌سازی رمز عبور اضافه می‌کند، بیشتر مهاجمان سایبری می‌توانند به راحتی با استفاده از ابزارهایی مانند rainbow lis، هش را دور بزنند. افزودن unique salt به هر هش به طور تصاعدی امنیت هش را بالا می‌رود.رمزگذاری / Encryptionرمزگذاری فرآیندی است که داده‌ها را از فرمت اصلی به فرمت دیگری ترجمه می کند. فرمت اصلی داده‌ها به عنوان plaintext و فرمت رمزگذاری شده داده ها به عنوان ciphertext شناخته می شود. ciphertext توسط یک کلید مخفی رمزگشایی می شود.هدف اصلی از رمزگذاری محافظت از محرمانه بودن داده‌ها است. الگوریتم‌های مدرن رمزگذاری، محرمانه بودن داده‌ها را تضمین می‌کنند و ویژگی‌های امنیتی کلیدی از جمله احراز هویت، یکپارچگی را ارائه می‌کنند.ویژگی احراز هویت اجازه می دهد تا مبدا پیام را تایید کنید و ویژگی یکپارچگی تضمین می کند که محتوای یک پیام از زمان ارسال آن تغییر نکرده است. انواع رمز نگاریAsymmetric encryption algorithmsSymmetric encryption algorithmsDeterministic encryption algorithmsProbabilistic encryption algorithmsالگوریتم رمزنگاری Symmetricالگوریتم های رمزگذاری متقارن تنها از یک کلید مخفی برای رمزگذاری و رمزگشایی داده‌ها استفاده می‌کنند. اگر داده‌ها از کامپیوتری به کامپیوتری دیگر منتقل شود، کامپیوتر دوم باید به نحوی همان کلید را در اختیار داشته باشند.مهمترین ویژگی این روش سرعت بالای رمزنگاری و رمزگشایی است. هرچند به اشتراک گذاشتن کلید باعث پایین آمدن امنیت می‌شود. سازمان‌ها با استفاده از الگوریتم نامتقارن، کلید الگوریتم متقارن را با طرف دوم به اشتراک می‌گذارند.چند مدل از الگوریتم رمزنگاری متقارنAES (Advanced Encryption Standard)DES (Data Encryption Standard)IDEA (International Data Encryption Algorithm)Blowfish (Drop-in replacement for DES or IDEA)RC4 (Rivest Cipher 4)RC5 (Rivest Cipher 5)RC6 (Rivest Cipher 6)الگوریتم رمزنگاری Asymmetricالگوریتم های رمزگذاری نامتقارن از دو کلید استفاده می کنند نه یک کلید. یک کلید عمومی و یک کلید خصوصی.کلید خصوصی مانند کلید در الگوریتم رمزگذاری متقارن مخفی نگه داشته می شود. با این حال، برخلاف رمزگذاری متقارن، این کلید خصوصی هرگز نیازی به انتقال یا اشتراک گذاری ندارد.در عوض، فرستنده داده‌ها را با استفاده از یک کلید عمومی رمزگذاری می‌کند، و گیرنده با یک کلید خصوصی به آن دسترسی پیدا می کند.چند مدل از الگوریتم رمزنگاری نامتقارنRSADiffie-HellmanElliptic-curve algorithms</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Sun, 12 Feb 2023 18:07:25 +0330</pubDate>
            </item>
                    <item>
                <title>What is a Database Index?</title>
                <link>https://virgool.io/@majidpv/what-is-a-database-index-qpoctpneuug3</link>
                <description>ایندکس کردن دیتابیس یک مفهوم مهم در دیتابیس‌ها است. هرکسی که بخواهد یک دیتابیس طراحی کند یا از یک دیتابیس استفاده کند باید با آن آشنا باشد.در دنیای واقعی بارها ایندکس گذاری رو دیده ایم. مثل ایندکس حروف الفبا یا ایندکس موضوعی در کتابخانه‌معمولا یک ایندکس بر روی ستون‌ یا ستون‌هایی ایجاد می‌شه که ما میخواهیم با استفاده از کوئری هایی مثل WHERE اطلاعاتی از اون ستون کسب کنیم. اگر یک ایندکس ایجاد نکرده باشیم، دیتابیس کل ردیف‌های جدول را می‌خواند تا خروجی مناسب کوئری WHERE را پیدا کند. اگر تعداد ردیف‌ها خیلی زیاد باشد این باعث می‌شود که ‌API ها کند شوند و .....ایندکس، حاوی تمام اطلاعات لازم برای دسترسی سریع  به داده‌ها است.اندازه داده ‌ها ‌( تعداد و سایز دیتاهای مختلف صعودی هستند) به سرعت در بیشتر شدن است. در واقع، برخی از غول‌های فناوری چند صد پتابایت داده را در روز پردازش می‌کنند. ذخیره همه این داده‌ها در یک دیتابیس خوب و لازم است، اما برای یک شرکت، دسترسی موثر به آن داده‌ها برای موفقیت بسیار مهم است.هدف از ایندکس، فراهم کردن شرایطی است که با کمترین جستجو و به سادگی به یک داده‌‌‌ی مشخص دسترسی پیدا کنیمایندکس چیست؟ایندکس یک ساختار داده خاص است که به ما امکان می‌دهد اطلاعات رو به سرعت پیدا کنیم. این ساختار مانند یک Binary Tree است. ( مقادیر کوچکتر در سمت چپ و مقادیر بزرگتر در سمت راست) بجای اجبار به جست و جوی کل ردیف‌های دیتابیس کافی است مقادیر ردیف ‌را در ایندکس ( binary tree) مقایسه کنیم تا سریعتر به نتیجه برسیم.وقتی یک ایندکس از یک یا چند ستون می‌سازیم، ما مقادیر آنها رو در یک ساختار جدید ذخیره می‌کنیم. همچنین ما یک اشاره گر به آدرس اصلی ردیف هایی که مقادیرشان را داریم، ذخیره می‌کنیم. ( اشاره گر به آدرس اصلی داده های جدول روی دیسک) پس از اینکه داده‌ها بر اساس معیارهای جستجوی ما مرتب شدند، مکان یابی رکوردهای مورد نظر بسیار ساده تر می شود.ذخیره داده‌ها در ساختاری جدید و همچنین ایجاد و ذخیره اشاره‌گر، همگی نیاز به داشتن حافظه‌ اضافی از حافظه اصلی دیتابیس دارند. این یعنی هرچند در زمان جست و جو سریعتر می‌شویم اما منابع بیشتری ( اینجا حافظه‌ ) را نیاز خواهیم داشت.ساختن یا انتخاب ایندکس؟هر جدول دارای یک کلید اصلی که یکتا است و می‌توانیم از آن به عنوان ایندکس استفاده ‌کنیم. هر بار که یک ردیف جدید با یک کلید اصلی اضافه می شود، ایندکس به طور خودکار به روز می شود. با این حال، گاهی اوقات ما باید بتوانیم به سرعت داده‌هایی را که به عنوان یک کلید اصلی ذخیره نمی شوند، جستجو کنیم. برای مثال، ممکن است نیاز داشته باشیم که مشتریان را به سرعت از طریق شماره تلفن جستجو کنیم. استفاده از یک کلید اصلی ایده خوبی نخواهد بود زیرا می توانیم چندین مشتری با یک شماره تلفن یکسان داشته باشیم. در این موارد، ما می توانیم ایندکس های خود را ایجاد کنیم.اگرچه  کلید و ایندکس به جای یکدیگر استفاده می شوند، کلید به معنای محدودیتی است که بر رفتار ستون اعمال می شود. کلید اصلی یک فیلد غیر تهی است که به طور منحصر به فرد هر ردیف را شناسایی می کند. اما ایندکس یک ساختار داده خاص است که جستجوی داده‌ها را در جدول تسهیل می کند.ساختن یک ایندکس جدید به فضای دیسک بیشتری نیازی دارد. بنابراین غیر منطقی است که همه ترکیب‌های ممکن را ایندکس کنیم. پس برای ساخت یک ایندکس به موارد زیر دقت کنید:ایندکس را برای جدول‌هایی بسازید که انتظار دارید ستون و ردیف‌های زیادی داشته باشد.ستون‌هایی را ایندکس کنید که انتظار دارید در مورد آنها جست و جو شود. برای مثال ایندکس کردن شماره موبایل بهتر است تا ایندکس کردن نام یا آدرس یک فرد در جدول مشخصات فردی.ستونی را ایندکس کنید که UNIQE نباشد. برای مثال ایندکس کردن ملی کد ملی ( به این دلیل که برای هر فرد یکتا هستش) کمکی برای بهبود جست و جو نمی‌کند. اما ایندکس کردن شماره موبایل یا کد شهر برای جست و جو کمک می‌کند.اغلب مجبور هستیم روی یک ستون دو نوع ایندکس انجام دهیم. برای مثال، به منظور جست و جو نام یک نویسنده لازم است یک ایندکس روی ستون نام خانوادگی داشته باشیم و یک ایندکس روی ترکیب ستون‌های نام و نام خانوادگیچیزهایی که باید در مورد ایندکس به خاطر بسپاریداگر یک جدول بیش از یک ایندکس داشته باشد، INSERT کردن داده داخل جدول را  کند می‌کند. به این دلیل که علاوه بر قرار گرفتن در مکان درست داخل جدول، ایندکس نیز نیاز به بررسی و تنظیم مجدد دارد که همین باعث می‌شود زمان بیشتری صرف شود. ( اضافه کردن یک node به binary tree !!!)اگر نیاز است تغییرات زیادی روی جدولی که ایندکس دارد انجام دهیم، باتوجه به شرایط، شاید بهتر باشد ابتدا ایندکس را حذف کنیم، جدول را تغییر دهیم و سپس ایندکس جدید را بسازیم. فرض کنید میخواهید تعداد زیادی کتاب به دیتابیس کتابخانه اضافه کنید ( INSERT ) بهتر است ایندکس را حذف کنیم و داده های جدید را به جدول اضافه کنیم و دوباره ایندکس گذاری کنیم. ( normalization داده ها تاثیر گذار است)ایندکس گذاری بصورت پیش فرض توسط دیتابیس انجام می‌شود. به این معنی که اگر یک insert, update or delete انجام شود، باید روی تمامی ایندکس های آن جدول هم انجام شود !!!!!پس هرچند ایندکس باعث می‌شود که سرعت جست و جو بهتر شود اما در بعضی موارد به علت اینکه نیاز به حافضه دارد و همینطور عملیات روی binary tree زمانبر است باعث ایجاد مشکلاتی می‌شود.یک مثال از تاثیر ایندکس روی جست و جوفرض کنید ما میخواهیم نام یک کتاب رو دیتابیسی که ۱ میلیون کتاب دارد جست و جو کنیم. جست و جوی عادی در بدترین حالت کل ردیف های یک دیتابیس را جست و جو می‌کند. پس پیچیدگی این جست و جو برابر با O(n) خواهد بود. ( اگر متوجه این قسمت نشدید باید الگوریتم و پیچدگی های زمانی رو مطالعه کنید)حالا فرض کنید ما یک ایندکس روی ستون عنوان کتاب‌ها و براساس حروف الفا داریم. کافی است عنوان کتاب رو با ردیف ۵۰۰،۰۰۰ در ایندکس مقایسه کنیم. سپس براساس نتیجه جست و جو، ایندکس وسط سمت چپ یا راست را دوباره مقایسه می‌کنیم و ..... در بدترین شرایط ۲۰ بار نیاز هست که این ایندکس جست و جو شود. ( ۲ به توان ۲۰ برابر ۱۰۴۸۵۷۶ است. اگر این موضوع رو متوجه نشدید درخت باینری و پیچیدگی های زمانی را مطالعه کنید) پس با داشتن ایندکس بدترین زمان جست و جو برابر با O(log n) خواهد بود!!!!! در پست بعدی با ایندکس بیشتر آشنا می‌شید و چند مورد از ایندکس‌های PostgreSQL را خواهید دید.</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Thu, 09 Feb 2023 21:50:00 +0330</pubDate>
            </item>
                    <item>
                <title>راه اندازی دتیابیس در Flask با استفاده از SQLAlchemy</title>
                <link>https://virgool.io/@majidpv/%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%D8%AA%DB%8C%D8%A7%D8%A8%DB%8C%D8%B3-%D8%AF%D8%B1-flask-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-sqlalchemy-xdxkbqsr8ys1</link>
                <description>یکی از راه های اتصال و کار با دیتابیس‌ها استفاده از ORM (object-relational mappe) ها هستش. یکی از این ابزارها برای زبان پایتون Alchemy است. خب برای شروع و استفاده از Alchemy لازم است که موارد زیر نصب بشه: ( و مثل هر پروژه پایتونی دیگه بهتره که از virtualenv and requirements.txt استفاده کنید)salalchemyflask-alchemy ( an extension for Flask that adds support for SQLAlchemy to your application.) ساختن مدل‌ها (جدول‌ها)بعد از نصب موارد بالا (pip install -r requirements.txt) در فولدر پروژه تون (همون فولدری که app.py قرار داره)  یک فایل بنامdb.py بسازید‌ (نام این فایل هرچیزی میتواند باشد) و یک فولدر به اسم models ایجاد کنید. ( دقت کنید که اسم این فولدر models باشد!)  داخل این فولدر یک فایل ایجاد کنید. اینکه نام این فایل چی باشه بهتره که جوری نام گذاری کنید مرتبط با جداول دیتابیس باشه. من برای هر جدولم یک فایل جداگانه ایجاد کردم. در این مرحله ۲تا فایل درست کردم ( چون بنظرم اینجوری دیباگ کردن مدلها ساده تر میشه نسبت به حالتی که همه مدلها در یک فایل باشند) tracks.py &amp; albums.py داخل فولدر models ساختم. ( کمی جلوتر init.py را توضیح دادم) ساختار پروژه باید چیزی شبیه به عکس زیر باشه:داخل db.py کدهای  زیر را بنویسید:در خط سوم یک آبجکت از sqlqlchemy رو به متغیر db ارتباط میدیم. نام این متغیر رو می‌تونید هرچیزی بذارید.در ادامه ما می‌تونیم با استفاده از این آبجکت دیتبابیس رو به پروژه مون متصل کنیم و داخل app.py ازش استفاده کنیم.فرض من اینه که دوتا جدول دارم به اسم Tracks و Albums. رابطه بین این دوتا جدول به این صورت هستش که هر موسیقی باید داخل یک آلبوم باشه و هر آلبوم می تونه چندتا موسیقی داشته باشه. پس رابطه این دوتا جدول بصورت یک به چند هستش. (One(albums) To Many(tracksحالا باید جدول های دیتابیس مون رو با استفاده از پایتون تعریف کنیم. اینکه اصول کار با  sqlqlchemy چی هستش، من کامل نمی‌دونم!!! فعلا در همین حد یادگرفتم. اما خیلی شبیه به Modelها در جنگو هست.تعریف جدول Tracksتعریف جدول Albumsدر خط اول یک instance از sqlalchemi رو به کدمون اضافه می‌کنیم. داخل این نمونه هرچیزی که برای استفاده از جداول نیاز داریم وجود داره. در واقع هر کلاسی که اینجا می‌سازیم به یک جدول با ستون هایی نگاشت می‌شود.با استفاده از __tablename__ نام جدول‌ها رو مشخص کردم.هر attribute کلاس در واقع نام یک ستون در جدول رو مشخص می‌کنه. در هر دو جدول ستون id مشخص کننده کلید اصلی هستش.خب، SQLAlchemy می دونه که جدول Albums توسط کلاس AlbumModel استفاده می‌شه. پس ما می‌تونیم با تعریف یک کلید خارجی، یک آبجکت از AlbumModel بسازیم. ستون albumId_ مشخص کننده کلید خارجی هستش. با استفاده از  db.relationship رابطه بین دو تا جدول رو مشخص کردم و یک آبجکت از AlbumModel به album_ نسبت دادم. چون آبجکت album_ از کلاس AlbumModel استفاده می‌کنه sqlalchemy متوجه میشه که در این جدول یک کلیدخارجی وجود داره که به AlbumModel اشاره می‌کنه، پس این آبجکت به نمونه ای از AlbumModel نگاشت می‌شه که کلید خارجی این جدول مشخص می‌کنه.در جدول Albums هم یک آبجکت از TrackModel ایجاد کردم. و اینجوری این جدول به راحتی می‌تونه ردیف متناسبش رو در جدول Tracks رو ببینه :) البته به این معنی نیست که یک رابطه چند به چند ایجاد شده!!در هر دو جدول یک آبجکت دارم که با تعریف back_populates به همدیگه متصل شده اند. اینجوری sqlalchemy متوجه می‌شه که این آبجکت‌ها دو سر یک رابطه هستند و دیگر نیازی به تعریف کلید خارجی در جدول دوم نداریم. البته دقت کنید که این رابطه ‌همچنان یک رابطه یک به چند هستش. قبول دارم کمی گیج کننده است ولی به مرور و با کد زدن بیشتر به مفهوم این مورد پی می‌برید. و قطعا پیشنهاد میکنم که داکیومنت  sqlalchemy و flask_sqlalchemy رو بخونید.صرفا براساس تجربه‌های دیگران و اینکه در برخی منابع دیدم این نوع تعریف رابطه باعث بهبود عملکرد میشه و دسترسی ما به مدلها رو راحت تر می‌کنه، ترجیج دادم اینگونه رابطه رو تعریف کنم و از هر دو جدول قابل دسترسی باشه اما یک رابطه یک به چند باشه!ساختن init__.py__برای اینکه در ادامه پروژه راحت باشیم و نیاز نباشه که مدام مدلها را import کنیم از این فایل استفاده میکنیم. در ادامه هرجایی از پروژه اگر import models رو بنویسیم،  هرتعداد مدلی که داخل فولدر models باشه import میشه بدون اینکه نیاز باشه دونه دونه انجام بدید.در این مرحله چون مدلهای کمی دارم بظاهر این کار نیاز نیست اما در ادامه متوجه میشید که این فایل چقدر کمک میکنه.کانفیگ کردن app.pyالان نیاز هستش که دیتابیس رو به پروژه متصل کنیم. اول از همه importها رو انجام بدید:import osfrom flask_smorest import Api (در ادامه متوجه میشید این قسمت چی هستش)from db import dbimport modelsکانفیگ های زیر را هم به app اضافه کنید.app.config[&amp;quotSQLALCHEMY_DATABASE_URI&amp;quot] = &amp;quotsqlite:///data.db&amp;quot
app.config[&amp;quotSQLALCHEMY_TRACK_MODIFICATIONS&amp;quot] = False
db.init_app(app)دو خط اول کانفیگ های مربوط به دیتابیس و SQLAlchemy  هستند و در خط سوم sqlalchemy  رو به app متصل کردم. ( db  یک آبجکت از sqlalchemy است که در فایل db.py تعریف کردم.)بررسی کردن اطلاعات/Data validation اینکه چه دیتایی وارد دیتابیس بشه و چه مواردی ممنوع هستد و .... و جلوگیری کنیم از ورود اطالاعات غیرتکرای  و هم اینکه خطاها رو مدیریت کنیم تا برای کاربر قابل فهم باشند از  marshmallow در فلسک استفاده میشه.مارشمالو برای موارد زیر استفاده می‌شه و اینجا فقط به منظور data validation ازش استفاده کردم.Validate input data.Deserialize input data to app-level objects.Serialize app-level objects to primitive Python  types. The serialized objects can then be rendered to standard formats  such as JSON for use in an HTTP API.بزودی پست جداگانه ای برای این قسمت منتشر می‌کنم. فعلا منتظر باشید.تا اینجا ما مدل‌هامون رو تعریف کردیم. ( درواقع همون جدولهای دیتابیس رو) به مرور این مدلها بزرگ می‌شن و نیاز به کوئری هم خواهیم داشت. فعلا در همین حد که با استفاده از sqlalchemy جدولهای دیتابیس رو ساختیم و به پروژه متصل کردیم کافیه. به مرور این پست کامل میشه.</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Wed, 25 Jan 2023 19:53:00 +0330</pubDate>
            </item>
                    <item>
                <title>REST API and RESTFul API</title>
                <link>https://virgool.io/@majidpv/rest-api-and-restful-api-tr8qkw23huwz</link>
                <description>وقتی صحبت از API می‌شه معمولا صحبت از Web APIs می‌کنیم. REST یکی از متدهای Web API هستش که برای برقراری ارتباط بین کلاینت و سرور  استفاده می‌شه.REST مخفف عبارت Representational State Transfer است مانند سایر سبک های معماری، REST دارای اصول و محدودیت هایی است. اگر یک API به عنوان RESTful نامیده شود، باید به این اصول پایبند باشد.اگر نمی‌دونید HTTP چیه و قواعدش چجوری هست قبلا از خوندن ادامه این پست حتما در موردش مطالعه کنید.در ادامه کلمات فارسی رو می‌خونید که قطعا گیج کننده هستند. هرچی گشتم نتونستم معادل مناسب پیدا کنم و پس از ترجمه لغوی استفاده کردم که بنظر می‌رسه ترجمه خیلی اشتباهی هم نیست. تلاش کردم بطور مجزا منظورم رو از هر کلمه یا اصطلاحی که گیج کننده هست رو توضیح بدم. پس اگر کلمه یا اصطلاحی رو متوجه نشدید کمی پایینترش توضیح را داده ام.REST یک معماری است، نه یک پروتکل یا یک استاندارد. توسعه دهندگان API می توانند REST را به روش های مختلفی پیاده سازی کنند.REST معمولاً توسط افراد در سیستم های وب برای تعامل با یکدیگر استفاده می شود. به عنوان مثال، بازیابی و به روز رسانی اطلاعات حساب در توییتر.REST APIها را می توان تقریباً با استفاده از هر زبان برنامه نویسی توسعه داد و از انواع فرمت های داده پشتیبانی می کند. تنها شرط لازم این است که آنها با شش اصل طراحی REST زیر همسو شوند - که به عنوان محدودیت های معماری نیز شناخته می شوند:مستقل از حالتهمه ارتباطات دارای REST API باید بدون حالت باشند. این بدان معنی است که هر تعاملی مستقل است و هر Request و Response تمام اطلاعات مورد نیاز برای تکمیل تعامل را داخل خود دارند. هر درخواست کلاینت توسط سرور به عنوان یک درخواست کاملاً جدید تفسیر می شود و سرور چیزی در مورد درخواست‌های گذشته به خاطر نمی‌آورد.رابط یکپارچهرابط یکنواخت برای طراحی هر REST اساسی است. این نشان می دهد که سرور اطلاعات را در قالبی استاندارد منتقل می کند. منبع در فرمتی خاص‌ یک representation در REST نامیده می شود. این فرمت می تواند با نمایش داخلی منبع در سرور متفاوت باشد. برای مثال، سرور می‌تواند داده‌ها را به صورت متن ذخیره کند اما آن‌ها را در قالب نمایش HTML ارسال کند.چهار محدودیت زیر می توانند به یک رابط REST یکنواخت دست یابند:شناسایی منابع (Identification of resources) اینترفیس (Interface) باید به طور منحصر به فرد هر منبع (resource) درگیر در تعامل بین کلاینت و سرور را شناسایی کند.دستکاری منابع( Manipulation of resources through representations)منابع باید نمایش یکنواختی (uniform representations) در پاسخ (Response) سرور داشته باشند. استفاده کنندگان API باید از این نمایش ها برای تغییر وضعیت (State) منابع در سرور استفاده کنند.پیام های خود توصیفی (Self-descriptive messages)هر resource representation باید حاوی اطلاعات کافی برای توصیف نحوه پردازش پیام باشد. همچنین باید اطلاعات اقدامات اضافی را که کلاینت می‌تواند روی منبع انجام دهد ارائه کند.هایپر مدیا به عنوان موتور حالت برنامه (Hypermedia as the engine of application state)کلاینت باید فقط URI اولیه برنامه را داشته باشد. برنامه کلاینت باید به صورت پویا تمامی منابع و تعاملات دیگر را با استفاده از لینک ها هدایت کند.یک منبع (Resource) می‌تواند هر چیزی باشد که API امکان فراهم‌سازی اطلاعاتی را در موردش داشته باشد. به عنوان مثال در API اینستاگرام،  منبع می‌تواند یک کاربر، یک عکس یا یک هشتگ باشد. هر منبع دارای یک شناسه  منحصربه‌فرد (Unique Identifier) است. شناسه می‌تواند یک نام یا یک عدد باشد.جداسازی کلاینت و سروردر طراحی REST API، کلاینت و سرور باید کاملاً مستقل از یکدیگر باشند. تنها اطلاعاتی که کلاینت باید بداند URI منبع درخواستی است. به طور مشابه، سرور نباید  کلاینت را به جز ارسال داده های درخواستی به آن از طریق HTTP تغییر دهد.قابلیت ذخیره سازی در حافظه پنهان در صورت امکان، منابع باید در سمت کلاینت یا سرور قابل کش شدن باشند. response های سرور همچنین باید حاوی اطلاعاتی در مورد مجاز بودن ذخیره سازی برای منبع باشد. هدف بهبود عملکرد در سمت کلاینت و در عین حال افزایش مقیاس پذیری در سمت سرور است.معماری سیستم لایه ای در  REST، request ها و response ها از لایه های مختلفی عبور می کنند. به عنوان یک قاعده کلی، فرض نکنید که کلاینت و سرور مستقیماً به یکدیگر متصل می شوند. ممکن است تعدادی واسطه مختلف در حلقه ارتباطی وجود داشته باشد. REST APIها باید طوری طراحی شوند که نه کلاینت و نه سرور نتوانند تشخیص دهند که آیا با برنامه نهایی( سرور با کلاینت / کلاینت با سرور) یا یک واسطه ارتباط برقرار می کند.کد در صورت تقاضاکد در صورت تقاضا (Code On Demand) یک اصل اختیاری است. یک API حتی بدون  فراهم کردن کد در صورت تقاضا می‌تواند RESTful در نظر گرفته شود. کلاینت  می‌تواند از سرور درخواست کد بدهد و سپس، پاسخ از سرور حاوی مقداری کُد  خواهد بود. وقتی پاسخ در قالب HTML‌ است، معمولاً این پاسخ به صورت یک  اسکریپت خواهد بود. پس از دریافت کد، کلاینت می‌تواند آن را اجرا کند.اگر یک API به این قوانین پایبند باشد یک RESTful API در نظر گرفته می‌شود. منبع چیست؟ (What is a Resource)مفهوم اطلاعات در REST یک منبع است. هر اطلاعاتی که بتوانیم نام ببریم می تواند منبع باشد. به عنوان مثال، یک منبع REST می تواند یک سند یا تصویر، مجموعه ای از منابع دیگر، یا یک شی غیر مجازی (به عنوان مثال، یک شخص) باشد.  در API اینستاگرام،  منبع می‌تواند یک کاربر، یک عکس یا یک هشتگ باشد. هر منبع دارای یک شناسه  منحصربه‌فرد (Unique Identifier) است. شناسه می‌تواند یک نام یا یک عدد باشد.وضعیت منبع، در هر زمان خاص، به عنوان نمایش منبع شناخته می‌شود. چرا از REST استفاده کنیم؟ API های REST انعطاف پذیر هستند. آنها می توانند انواع مختلفی از درخواست ها را مدیریت کنند و داده ها را در قالب های مختلف ارسال کنند. API های REST مقیاس پذیر هستند. آنها برای ارتباط بین هر دو نرم افزار بدون در نظر گرفتن اندازه یا قابلیت طراحی شده اند. همانطور که یک وب اپ رشد می‌کند و منابع بیشتری را اضافه می‌کند، REST API آن قادر خواهد بود به سرعت تعداد و تنوع رو به افزایش، درخواست‌ها را مدیریت کند. API های REST از فناوری های وب موجود استفاده می کنند که ساخت و استفاده از آنها را نسبتاً آسان می کند. برای درخواست منبع از طریق REST API، فقط باید URL آن را ارائه دهید.</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Sun, 22 Jan 2023 14:06:53 +0330</pubDate>
            </item>
                    <item>
                <title>API چیست</title>
                <link>https://virgool.io/@majidpv/api-%DA%86%DB%8C%D8%B3%D8%AA-yqfl5kgvwoex</link>
                <description>اگر تخصص و کار شما در حوزه IT باشد قطعا مجبور خواهید API بسازید و از API های دیگران استفاده کنید.APIها یک جز کلیدی از دنیای دیجیتال ما هستند و میلیاردها تجربه دیجیتال را در هر دقیقه امکان پذیر می کنند.API چیست؟کلمه API مخفف Application Programming Interface میباشد.APIs are mechanisms that enable two or more software components to communicate with each other using a set of definitions and protocols.API ها مکانیسم هایی هستند که دو یا چند بخش یک یا دو نرم افزار را قادر می سازند تا با استفاده از مجموعه ای از تعاریف و پروتکل ها با یکدیگر ارتباط برقرار کنند.Application: Software (or a component of software) that does a taskبرای مثال : موتور جست و جو گوگل، اسکایپ که تماس صوتی را فراهم می‌کند و ....Programing(P): Program that does the task in the applicationبرنامه ای که توسط اون کاری انجام می‌شه. برای مثال الگوریتم ترجمه گوگل وظیفه انجام دادن ترجمه رو به عهده داره. ( در واقع source code )Interface: Place to tell the program to runهر کدام از اپ های موبایل یک interface هستند. صفحه گوگل ترنسلیت یک interface است.این خیلی مهمه که درک کنید وقتی از API صحبت می‌کنیم معمولا در مورد APIهای بر بستر وب صحبت می‌کنیم اما APIها فقط محدود به وب نیستند.چرا API مهم است؟Just use the program, don&#x27;t write itبرای استفاده از داده های آب و هوا نیازی نیست برنامه ای بسازید که داده های آب و هوا رو بدست بیاره، فقط کافیه از داده‌های شرکت‌های دیگر استفاده کنید.Platform independentالگوریتم سرچ گوگل وابسته به سیستم عامل است؟ اپلیکشن اندروید و ios رو می‌تونید دانلود کنید و همینطور از نسخه وب استفاده کنید. فقط کافیه به اپلیکشن بگید که درخواست تون رو انجام بده.API چگونه کار می‌کند:معماری API معمولاً بر حسب کلاینت - سرور توضیح داده می شود.تصور کنید مشتری (Client) یک رستوران هستید. گارسون (API) به عنوان یک واسطه بین مشتریانی مانند شما و آشپزخانه (Web Server) عمل می کند. شما سفارش خود را به گارسون می‌گویید (Request)، گارسون آن را از آشپزخانه درخواست می‌کند. در نهایت گارسون آنچه را که سفارش داده اید (Response) در اختیار شما قرار می‌دهد.در این مثال، گارسون عملاً انتزاعی از API است. در مهندسی نرم افزار، abstraction یک مفهوم اساسی است که هدف آن ساده کردن یک مکانیسم پیچیده تنها با تمرکز بر جزئیات با اهمیت بالاتر است. در این مثال، به عنوان یک مشتری، نیازی نیست بدانید که آشپزخانه یا رستوران چگونه کار می کند تا به آنچه می خواهید برسید. فقط باید بدانید که چگونه آن را سفارش دهید.دسته بندی APIها بر اساس نوع استفاده:سیستم عاملدیتابیسریموت:API های راه دور برای تعامل از طریق یک شبکه ارتباطی طراحی شده اند. منظور ما از راه دور این است که منابعی که توسط API دستکاری می‌شوند، جایی خارج از کامپیوتری هستند که درخواست را انجام می‌دهند. از آنجایی که پرکاربردترین شبکه ارتباطی اینترنت است، بیشتر APIها بر اساس استانداردهای وب طراحی می شوند. همه API های راه دور وب API نیستند، اما منصفانه است که فرض کنیم که API های وب از راه دور هستند.وب:API های وب معمولاً از HTTP برای پیام های درخواستی استفاده می کنند و تعریفی از ساختار پیام های Response ارائه می دهند. این پیام های Response معمولاً به شکل یک فایل XML یا JSON هستند. هر دو فرمت XML و JSON ترجیح داده می شوند زیرا داده ها را به گونه ای ارائه می کنند که برای سایر برنامه ها به راحتی قابل دستکاری است.دسته بندی APIها بر اساس پروتوکل‌:SOAP APIs:APIهای طراحی شده با SOAP از XML برای قالب پیام خود استفاده می کنند و درخواست ها را از طریق HTTP یا SMTP دریافت می کنند. SOAP اشتراک‌گذاری اطلاعات را برای برنامه‌هایی که در محیط‌های مختلف اجرا می‌شوند یا به زبان‌های مختلف نوشته شده‌اند، آسان‌تر می‌کندREST APIs:REST مجموعه ای از محدودیت های معماری است، نه یک پروتکل یا یک استاندارد. توسعه دهندگان API می توانند REST را به روش های مختلفی پیاده سازی کنند.REST مخفف Representational State Transfer است.REST مجموعه‌ای از توابع مانند GET، PUT، DELETE و غیره را تعریف می‌کند که کلاینت‌ها می‌توانند از آنها برای دسترسی به داده‌های سرور استفاده کنند. کلاینت و سرور با استفاده از HTTP داده‌ها را منتقل می‌کنند.در دنیای امروز وقتی صحبت از API می‌شود عموما منظور یک Web API هستش که با استفاده از REST پیاده سازی شده است. در ادامه بیشتر با REST APIs آشنا خواهیم شد.</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Sat, 21 Jan 2023 19:42:43 +0330</pubDate>
            </item>
                    <item>
                <title>Docker Compose آموزش سریع</title>
                <link>https://virgool.io/@majidpv/docker-compose-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B3%D8%B1%DB%8C%D8%B9-v0r5jmglmwsr</link>
                <description>
اگه نمی‌‌دونید داکر چیه و جرا باید ازش استفاده کنیم، این پست رو بخونید.در این مقاله موارد زیر را با استفاده از جنگو و PostgreSQL توضیح می‌دهم:Docker ComposeDockerfiledocker-compose.ymlحتما توصیه می‌کنم بخش آخر، جمع بندی، را بخونید. از گیج شدن بعد خوندن این پست کاملا جلوگیری می‌کنه.What is Docker Compose?داکر Compose یک ابزار برای تعریف و اجرای اپ‌هایی هستش که از چند کانتینر مختلف استفاده می‌کنند.فرض کنید شما روی توسعه یک وب اپلیکشن توسط فریمورک Django با استفاده دیتابیس PostgreSQL کار می‌کنید. اگر بخواهید از داکر استفاده کنید، باید کانتینر ‌مربوط به ‌Django و PostgreSQL رو جداگانه کانفیگ و اجرا کنید. (‌اینجا فرض من اینه میدونید داکر چیه و چرا باید کانتیترهای جنگو و دیتابیس رو جدا اجرا کرد) اما با استفاده از داکر  compose می‌تونید هر دو کانتینر رو به عنوان یک سرویس و با یک دستور اجرا کنید.موارد استفاده از Docker Composeتست خودکار (Automated testing environments)یکی از ویژگی‌های جالب docker compose پشتیبانی از اجرای تست‌های واحد و  E2E، به صورت سریع و قابل تکراره و این تست‌ها در محیط‌های مخصوص به خودش  انجام می‌شه.چندین محیط ایزوله شده در یک هاست (Single host deployments)داکر Compose از تداخل سرویس های مختلف جلوگیری می‌کنه. می‌تویند از یک سرویس کپی یا کانفینگ‌های مختلفی روی لوکال یا سرور داشته باشید.محیط توسعه (Development Environments)داکر Compose یک راه سریع و ساده برای شروع پروژه ها است چون به سرعت محیط‌های توسعه ایزوله جدید را ایجاد می‌کنه. نرم افزار تمام وابستگی‌های سرویس برنامه (دیتابیس‌ها، API های وب سرویس و غیره) را کانفیگ می‌کنه. این به شما امکان می‌ده با استفاده از یک فرمان، یک یا چند کانتینر برای هر وابستگی ایجاد و شروع کنید.Benefits of Docker Compose:راه اندازی سریع و ساده (Fast and simple configuration)به لطف اسکریپت های YAML و متغیرهای محلی، می‌توانید به راحتی سرویس‌های برنامه را کانفیگ یا تغییر دهید. ( اینکه YAML چیه رو در ادامه می‌خونید)ارتباطات امن (Secure internal communication)قابلیت حمل و پشتیبانی CI/CDاز آنجایی که همه سرویس‌ها در داخل فایل docker-compose تعریف شده‌اند، توسعه‌دهندگان می‌توانند به راحتی به کل کانفیگ دسترسی داشته باشند. با استفاده از  فایل docker-compose ، در عرض چند دقیقه محیط توسعه آماده میشه که این به راه اندازی و فعال کردن CI/CD Pipeline کارآمد کمک می‌‌کنه.استفاده بهینه از منابع (Efficient use of resources)داکر Compose به شما امکان می‌ده چندین محیط ایزوله را روی یک هاست اجرا کنید. اجرای همه چیز روی یک سخت افزار به شما اجازه می‌ده منابع آزاد بیشتری داشته باشید.چجوری از Docker Compose استفاده کنیم؟۱.  ایجاد یک Dockerfile . این فایل Image های داکر را می‌سازد که به عنوان پایه کانتینرها استفاده می شه. یک Dockerfile، اسکریپت با دستورالعمل‌هایی در مورد نحوه ساخت Docker Image است. این دستورالعمل‌ها در واقع گروهی از دستورات هستند که به طور خودکار در محیط داکر برای ساخت Docker Image خاص اجرا می‌شوند.۲.  سرویس‌ها را در یک فایل Compose تعریف کنید. یک فایل جدید در دایرکتوری پروژه با نام docker-compose.yml ایجاد کنید و سرویس‌ها رو با استفاده از سینتکس YAML تعریف کنید.۳. با استفاده از دستور  docker compose up کل برنامه اجرا می‌‌شه. ( images &amp; containersl سرویسها اجرا می‌شوند.)  در ادامه متوجه می‌شید در اکثر مواقع نیازی به انجام مرحله اول نداریم.آماده کردن فریمورک جنگو با استفاده از Docker Composeبرای اینکه یک مثال ببینیم ۳ مرحله docker compose  چجوری اجرا میشه، جنگو و postgreSQL رو با استفاده docker compose کانفیگ می‌کنم. یک دایرکتوری با هر اسمی دلخواهی ایجاد کنید. از این دایرکتوری برای ایجاد سورس اولیه مورد نیاز برای ساختن image استفاده می‌کنیم.۱. فایلی با نام  Dockerfile در داخل پوشه پروژه تون (‌دایرکتوری که مرحله قبل ساختید) ایجاد کنید. در لینوکس و مک با دستور touch Dockerfile اینکار انجام میشه.نکته مهم اینه که اسم فایل حتما و حتما باید ‌Dockerfile باشه. بدون هیچ فرمتی مثل txtاسکریپت زیر رو داخل Dockerfile بنویسید. # syntax=docker/dockerfile:1
FROM python:3.10.2
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /majid
COPY . .
RUN pip install -r requirements.txtاگر این پست رو بخونید متوجه می‌شید که Docker image را می‌شه براساس Docker image های دیگه ساخت. در واقع تعداد زیادی Base Image داریم که براساس اونها Image خودمون رو می‌سازیم. Base Image در واقع یک لینوکس کوچک هستش که روی هر کدامشان یک یا چند ابزار پایه با کمترین Dependencyها نصب شده اند.اولین دستورالعمل یک دستور FROM است که به داکر می‌گوید از چه Base image ای برای برنامه خود استفاده می‌کنم. اینجا Base image ما image رسمی پایتون هستش که از قبل دارای تمام ابزارها و بسته‌های مورد نیاز برای جنگو است. در این مورد از Python 3.10.2 استفاده می کنم.با استفاده از ENV متغیرهایی که نیاز داریم رو تعریف و مقداردهی می‌کنیم.متغیر PYTHONDONTWRITEBYTECODE=1 به این معنی هستش که پایتون فایلهای pyc. رو ایجاد نمی‌کنه.متغیر PYTHONUNBUFFERED=1 به این معنی هستش که وقتی کانتینر اجرا شد خروجی بافر نشه.دستور WORKDIR برای تنظیم یک دایرکتوری کاری پیش‌فرض هنگام اجرای بقیه دستورات استفاده می‌شه. این به Docker می گوید که از این مسیر به عنوان مکان پیش فرض برای همه دستورات بعدی استفاده کنه. که از این آدرس می‌شه به عنوان ریشه در دستورات بعدی استفاده کرد. ( اگر آدرس WORKDIR شما بصورت path/to/project/code باشد، می‌تونید تنها از code/ در دستورات بعدی استفاده کنید و این آدرس به آدرس اصلی پوشه روی ماشین شما اشاره می‌کنه) دستور COPY دو پارامتر می گیره: پارامتر اول  به Docker آدرس مبدا را می‌گوید و پارامتر دوم به Docker می گوید که می خواهید فایل(ها) در کجا کپی شود. در این مورد، پارامتر اول ما &lt; . &gt; هستش. &lt; . &gt; در اینجا به پوشه فعلی ( پوشه ای خودمون در ابتدا ساختیم و داخلش Dockerfile رو قرار دادیم) اشاره می‌کنه. پارامتر دوم در واقع باید آدرس WORKDIR باشه که در اینجا &lt; . &gt; هستش که اینسری &lt; . &gt; به WORKDIR اشاره می‌کنه. ( توضیح دادم که از آدرس WORKDIR می‌تونیم به عنوان ریشه در آدرس دهی هامون استفاده کنیم)دستور بعدی فایل  requirements.txt را نصب می‌کند.در حال حاضر ما یک image جدید بر اساس  Python 3.10.2 داریم (البته هنوز ساخته نشده) و dependencies های مورد نیاز رو هم داخلش تعریف کردیم.ما دستورالعمل‌های کامل برای ایجاد یک تصویر سفارشی داریم اما هنوز آن را نساخته‌ایم. دستور انجام این کار بصورت زیر هستش. قبل اینکه دستور را بزنید باید داخل ترمینال با دستور cd وارد دایرکتوری که Dockerfile قرار داره، بشید.  docker build -t django-image .در این دستور t - یک تگ به نام django-image به docker image انتساب می‌ده. اینکار برای خوانایی راحتتر انجام می‌شه. در آخر دستور بالا &lt; . &gt; بیانگر این است که Dockerfile در دایرکتوری فعلی هستش.در اینجا خروجی زیادی وجود خواهد داشت که من فقط دو خط اول و آخری را آورده ام.تا اینجا ما با استفاده از Base image: Python3.9 یک Image ساختیم. در این پست توضیح دادم که چجوری می‌شه یک کانتینر ساخت و اجراش کرد. در اینجا هم ما باید کانتینر بسازیم. می‌تونیم مشابه پست قبلی و کانتینرمون رو بسازیم. اما یادتون باشه که در اینصورت ما فقط یک کانتینر براساس Python3.9 و برای جنگو ایجاد کرده ایم. اگر بخواهیم کانتینر برای PostgreSQL رو هم ایجاد کنیم باید مشابه پست قبلی، اول Image مناسب رو از سایت داکرهاب pull کنیم و .....  اما Docker Compose اومده که ما بتونیم بصورت ساده تر و دقیقتر (‌و همینطور خواناتر) همه کانتینرهامون رو بسازیم.۲.فایل docker-compose.yam برای پروژه جنگو با دیتابیس PostgreSQLبرای ساخت و اجرای کانتیر یکسری دستورعمل نیاز هستش که بوسیله فایل docker-compose.yml این دستورالعمل هارو مشخص می‌کنیم. ابتدا یک فایل ایجاد کنید و نام آن را دقیقا برابر docker-compose قرار دهید. فرمت فایل هم می‌تواند yaml یا yml باشد.‌ ( docker-compose.yml ) این فایل دقیقا کنار Dockerfile باشد.اینکه فایل YAML چیه و چه دستوراتی می‌تونیم داخلش بنویسیم و همینطور سینتکس اون چجوری هستش رو حتما سرچ کنید. اینجا صرفا دستورات پایه‌ای و اصلی مورد نیاز برای وب اپلیکشین جنگو و postgrsql رو می‌نویسم.سپس داخل این فایل کدهای زیر را بنویسید:services:
    web:
        build: .
        command: python manage.py runserver 0.0.0.0:8000
        volumes:
            - .:/code
        ports:
            - &amp;quot8000:8000&amp;quot
        environment:
            - POSTGRES_NAME=postgres
            - POSTGRES_USER=postgres
            - POSTGRES_PASSWORD=postgres
        depends_on:
             - db
در خط اول کلمه servces برای این است که مشخص کنیم میخواهیم  که کدام سرویس‌ها (یا کانتینرها) را می‌خواهیم اجرا کنیم. در اینجا ما سرویس وب را می‌خواهیم اجرا کنیم و در خط دوم web را نوشتم.در خط بعدی build به Dockerfile اشاره می‌کنه. و چون ‌docker-compose.yml کنار داکرفایل هستش، می‌تونیم فقط از . استفاده کنیم ( آدرس دهی در لینوکس به این صورت هستش)در خط بعدی پورتی که میخواهیم جنگو ازشون استفاده کنه رو مشخص کردم. و با استفاده از command دستور اجرای جنگو رو نوشتم. در خط بعدی هم آدرس Docker Volume  رو مشخص کردم.در ادامه متغیرهای محلی جنگو را مشخص کردم. اگر با جنگو آشنا باشید به خوبی می‌دانید معنی هرکدام چی هستش.سرویس web برای اجرا وابسته به سرویس db هستش و در خط آخر این رو مشخص کردم.در ادامه کدهای بالا کدهای زیر را هم بنویسید:db:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgresدر خط اول سرویسی که میخواهیم اجرا بشه رو مشخص کردم.در خط بعدی مشخص کردم که سرویس db (کانتینر) بر اساس کدوم Docker Image باشه. در خط بعدی آدرس Docker Volume رو مشخص کردم ( این آدرسی است که درصورتی که دیتابیس رو روی لوکال نصب کنید، اطلاعات داخلش ذخیره خواهد شد. بطور سنتی ماهم از همون آدرس استفاده کردیم. شما می‌تونید هرآدرس دلخواهی استفاده کنید) . سپس متغیرهای محلی دیتابیس رو تعریف کردم. که اگر با جنگو و postgrsql آشنا باشید کاملا می‌دونید چه متغیرهایی هستند. ( هرچند از روی اسم شون هم مشخص هستش)در نهایت فایل docker-compose.yml شما باید بصورت زیر باشه:services:
  db:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    ports:
      - &amp;quot8000:8000&amp;quot
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/majid
    environment:
      - POSTGRES_NAME=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    depends_on:
      - db
با استفاده از دستور زیر می‌توانید هر دو کانتینتری که در داخل فایل بالا مشخص کردیم رو همزمان بسازیم و اجرا کنیم ( میتونید داخل فایل بالا چندین سرویس (کانتینر) تعریف کنید):docker copmpose upاگر خروجی مشابه خروجی زیر داشتید یعنی همه چی درست نصب و اجرا شده:با استفاده از دستور docker container ls -a می‌تونید نام کانتینر مروبط به دیتابیس که ایجاد و اجرا شده رو پیدا کنید. سپس توسط دستور زیر به دیتابیس postgresql متصل بشید:docker exec -it container-name psql -U postgresمتصل شدن به دیتابیس PostgreSQLحتما الان سوال می‌پرسید که پس جنگو چیشد؟ چرا نمی‌تونیم آدرس ۰.۰.۰.۰:۸۰۰۰ رو روی مرورگر بدرستی ببینیم؟ دلیلش اینه که هنوز فریمورک جنگو رو اجرا نکردید!!!برای اینکار ۳ راه وجود داره: جنگو رو جداگانه خودتون اجرا کنید. ( البته باید در همون مسیری که فایل requirement.txt نصب شده اینکار را بکنید. چون جنگو در اون مسیر نصب شده)به جای docker compose up در اولین مرتبه که قصد شروع پروژه رو دارید از دستور زیر استفاده کنید:docker compose run web django-admin startproject composeexample .دقت کنید که تنها برای بار اول این دستور رو انجام بدید، در دفعات بعدی باید از دستور docker compose up استفاده کنید.این دستور به Compose میگه تا با استفاده از imageهای وب سرویس، دستور django-admin startproject Name را در یک کانتینر اجرا کند. و خب همانطور که داخل فایل docker-compose.yml توضیح دادم، image با استفاده از دستور build ساخته می‌شه ( که در فایل ما به Dockerfile اشاره می‌کنه)توصیه میکنم حتما از روی سایت داکر، دستور docker compose run رو مطالعه کنید تا فرقش رو با دستور docker compose up متوجه بشید. ( همانند دستورات docker create &amp; docker run برای ایجاد و اجرای کانتینر)۳. بجای استفاده از Dockerfile از base image  جنگو استفاده کینم.البته این راه رو توصیه  نمیکنم. چون dependencyهای هر پروژه (requirements.txt) متفاوت هستش. حتی ممکنه شما قصد داشته باشید از ورژن خاصی از پایتون یا جنگو استفاده کنید. پس بهتره برای پروژه جنگو از base image استفاده نکنیم و تمام موارد مورد نیاز رو با استفاده از Dockerfile و requirements.txt مشخص کنیم و image مناسب رو بسازیم.در انتها بعد از اجرا کردن جنگو، میبایست تنظیمات پیشفرض جنگو رو متناسب با سرویس db که در docker-compose.yml تعریف کردید، تغییر بدید.# settings.py
import os 
[...]

DATABASES = {
    &#039;default&#039;: {
        &#039;ENGINE&#039;: &#039;django.db.backends.postgresql&#039;,
        &#039;NAME&#039;: os.environ.get(&#039;POSTGRES_NAME&#039;),
        &#039;USER&#039;: os.environ.get(&#039;POSTGRES_USER&#039;),
        &#039;PASSWORD&#039;: os.environ.get(&#039;POSTGRES_PASSWORD&#039;),
        &#039;HOST&#039;: &#039;db&#039;,
        &#039;PORT&#039;: 5432,
    }
}متوقف کردن کانتینرها/سرویس‌هاتنها با استفاده از دستور  docker compose down  می‌تونید اینکار رو انجام بدید.آیا Dockerfile دوبار اجرا نشد؟؟اگر به نحوه اجرای دستورات docker compose up و docker build ( در مرحله ۲ توضیحش دادم )‌ دقت کرده باشید متوجه می‌شید که هنگام اجرای هر دو دستور Dockerfile هم اجرا می‌شه و داکر شروع میکنه به ساختن ‌‌imageای که توسط Dockerfile مشخص کردیم. ( البته در مثال ما چون image یکبار ساخته شده در مرحله بعدی با اینکه داکرفایل اجرا میشه اما image دیگه ساخته نمیشه)پس ما می‌تونیم وقتی هر دو فایل Dockerfile, docker-compose.yml را ایجاد کردیم، تنها دستور docker compose up رو بزنیم.چون هرکانتینر باید از روی یک image ساخته بشه و داخل فایل docker-compose.yml برای سرویس web به وسیله دستور build مشخص کردیم که کانتینر براساس image ای که مشخصاتش داحل Dockerfile هست ساخته بشه.جمع بندی مهمدر پروژه های تجاری و حتی پروژه های کوچک ما قطعا بیش از یک سرویس وجود داره. مفهوم docker compose برای این بوجود آمده تا بجای اینکه دونه دونه همه کانتینرها رو بسازیم، صرفا با یک دستور همه کانتینرها ایجاد بشن.پس با ساخت و نوشتن دستورالعملهای مناسب داخل فایل docker-compose.yml می‌تونیم براحتی همه سرویس ها رو اجرا کنیم.در صورتی که برای برخی سرویس ها مثل جنگو نیاز داشته باشیم که image مناسب رو خودمون بسازیم تا کانتینر بر اساس اون اجر بشه، تنها با استفاده از Dockerfile و استفاده از دستور build بجای image داخل docker-compose.yml می‌تونیم اینکار رو انجام بدیم.  (پس Dockerfile برای هرپروژه ای لازم نیست)مثالی که اینجا زدم با استفاده از فریمورک جنگو و postgrSQL بود. شما می‌تونید هرسرویس دیگری را کاملا مشابه همین مثال با استفاده docker compose بالا بیارید. تنها تفاوتی که وجود خواهد داشت دستورالعمل های داخل docker-compose.yml و فایل Dockerfile &#40; اگر نیاز داشته باشید به این فایل&#41; خواهد بود.نکته ای که باید از این پست متوجه بشید اینه که docker-compose.yml و Dockerfile چی هستند. (‌ البته من سینتکس و بادگیری نوشتن این دو فایل رو توضیح ندادم) و از همه مهتر عملکرد داکر کامپوز به چه صورت هستش.</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Tue, 17 Jan 2023 19:37:59 +0330</pubDate>
            </item>
                    <item>
                <title>داکر/Docker چیست؟ مفهوم اصلی و علت بوجود آمدنش</title>
                <link>https://virgool.io/@majidpv/%D8%AF%D8%A7%DA%A9%D8%B1docker-%DA%86%DB%8C%D8%B3%D8%AA-%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D8%B5%D9%84%DB%8C-%D9%88-%D8%B9%D9%84%D8%AA-%D8%A8%D9%88%D8%AC%D9%88%D8%AF-%D8%A2%D9%85%D8%AF%D9%86%D8%B4-wac8yc60rcoc</link>
                <description>در گذشته وقتی تیم برنامه نویسان کد رو تحویل تیم زیرساخت میدادن تا روی سرور نصب بشه، معمولا مشکلاتی بوجود میامد که کد روی سرور درست کار نمی‌کرد. اما کد روی سیستم برنامه نویسان درست کار می‌کرد و اینجا همیشه بحثی بین برنامه نویسان و تیم زیرساخت شکل می‌گرفت و هرگروه مشکل رو به گروه دیگه ربط می‌داد (احتمالا برای شما هم پیش اومده که پروژه تون روی سیستم خودتون درست کار می‌کنه اما روی سیستم استاد یا دوستتون اجرا نمیشه). در طول زمان راه حل های زیادی برای مدیریت بهتر سرویس ها و جلوگیری از مشکلی که بالا توضیح دادم، مطرح شد. یکی از راه‌ حل‌های قدیمی مجازی سازی بود. مجازی سازی الان هم کاربرد زیادی داره‌(اما در جاهای دیگه)  اما داکر ترند امروزی دنیای تکنولوژی برای مدیریت بهتر سرویس ها هستش.سرویس چیه؟ سرویس می‌تونه یک پروژه دانشجویی به زبان پایتون یا جاوا، یک دیتابیس mysql، یک دیتابیس postgresql، یک ایمیل سرویس و ... و حتی بخش تایید هویت و ورد کاربران هم می‌تونه یک سرویس باشه.  داکر یک پلتفرم است که مدیریت سرویس‌ها رو راحت‌تر می‌کنهچرا داکر از مجازی سازی بهتر سرویس‌ها رو مدیریت می‌کنه؟ بطور کلی و خلاصه مجازی سازی سه‌تا مشکل بزرگ داره که داکر این‌ها رو نداره:در مجازی سازی منابع سرور بین سرویس‌ها تقسیم می‌شن. فرض کنید پیش بینی کردیم ‌سرویس ‌X یک گیگ رم و یک هسته CPU رو لازم داره و بهش اختصاص می‌دیم. اگر سرویس X در عمل از 500MB رم استفاده کنه سرویس های دیگه نمی‌تونن از اون ۵۰۰مگابایت باقیمانده و تخصیص داده شده به سرویس X استفاده کنند. پس عملا بخشی از منابع سرور ما هدر رفته.برای اینکه ایزوله سازی سرویس‌ها رعایت بشه، برای هر سرویس باید یک سیستم عامل جداگانه روی سرور نصب کنیم. که اینکار باعث میشه، زمان ما گرفته بشه تا برای هر سرویس یک سیستم عامل نصب کنیم و هم اینکه اینجوری نمی‌تونیم تعداد زیادی سرویس روی سرورمون داشته باشیم.‌ ( چون منابع هر سرور محدود هستند) اگر سرویس ما روی ویندوز باشه و بخواهیم همون سرویس رو روی لینوکس یا مک هم اجرا کنیم، برای اینکار باید سرویس مون رو روی لینوکس و مک هم نصب کنیم. اینکار هم باعث میشه زمان ما گرفته بشه و هم اینکه کلی دردسر کانفیگ‌ سیستم عامل هم خواهیم داشت. از همه مهمتر اینکه اینجوری یک سرویس روی سه تا سیستم عامل همزمان نصب هستش و منابع زیادی از سرور فقط در اختیار یک سرویس قرار می‌گیره.ایزوله سازی یعنی اینکه سرویس‌ها برای اجرا به متغیری (مثل کانفیگ شبکه، ورژن دیتابیس و ...)  نیاز نداشته باشند که باعث ایجاد تداخل و یا مشکل برای سرویس دیگری بشود. داکر با استفاده از مفهومی به نام  Dockr Image و Container هر سه مشکل بزرگ مجازی سازی رو برطرف می‌کنه.کانتینر/Containerکانتینر در داکر دقیقا مثل کانتیرهای واقعی هستش. یک محیط بسته که مواردی بصورت مرتب داخلش قرار داده شده و همه اون چیزها باهم دیگه جابجا می‌شن. در اینجا داخل کانتینرها کدها و  Dependencyهای سرویس مون رو قرار می‌دیم.این یعنی هر سرویس در محیط ایزوله مخصوص خودش ( container ) قرار داره. اینجوری براحتی و با سرعت بالا سرویس‌ها رو می‌تونیم در اختیار تیم‌های دیگه بذاریم و هر سرویس بصورت ایزوله اجرا بشه. چجوری این کار انجام می‌شه؟؟داکر Image داکر Image یک تصویر از اپلیکشن یا سرویسی است که می‌خواهیم اون رو اجرا کنیم. در واقع یک بسته اجرایی با حجم کم و مستقل است که هرچیزی برای اجرای یک اپلیکیشن نیاز است را داخلش داره. این موارد شامل کدها، ابزارهای سیستمی، کتابخانه‌ها، تنظیمات و ... هستند. داکر  Image یک فایل قابل حمل است که شامل یک سری دستورالعمل بوده که مشخص می‌کند Container کدام کامپوننت‌های نرم افزاری را اجرا کند.بطور ساده و خلاصه، وقتی از داکر استفاده می‌کنیم درواقع از یک یا چند کانتینر استفاده می‌کنیم که براساس Docker Image های مختلف ساخته شده اند. معماری داکر به گونه ای هستش که هسته سیستم عامل، منابع سخت افزاری و نرم افزاری و .... رو بین کانتینرها به اشتراک می‌ذاره و هر کانتینر بصورت ایزوله و جدا از هم اجرا میشن. اینجوری ما می‌تونیم چند سرویس مختلف داشته باشیم که هرکدوم در کانتینر خودش اجرا میشه و با سرویس های دیگه تداخل نخواهد داشت.توضیح بیشتر در مورد Docker Imageبطور معمول image ها از روی imageهای دیگر ساخته میشن. چندین base image وجود داره که برنامه نویسان بطور معمول از اون base image ها استفاده می‌کنند و image دلخواه رو می‌سازند. docker image بصورت لایه ای هستش. از لایه اول به لایه آخر ( در داخل Dockerfile ) یکسری دستورات می‌نویسیم که مشخص میکنه اپلیکشن ما چجوری ساخته بشه و dependencyهای پروژه چه چیزهایی هستند. با ساختن image می‌تونیم از روش یک کانتینر بسازیم و روی هر ماشینی که از داکر رو پشتیبانی می‌کنه، پروژه رو اجرا کنیم.داکر بر پایه لینوکس ساخته شده. درواقع docker image  یک لینوکس کوچک هستش. image base ها هم  یک لینوکس کوچک هستند که روی آنها ابزارهای پایه با حداقل dependencyها نصب شده اند. در هسته لینوکس امکانی برای اشتراک گذاری منابع وجود داره و داکر با استفاده از این امکان محیط های ایزوله ای ایجاد می‌کنه که از منابع سیستم بصورت اشتراکی استفاده می‌کنند. باتوجه به سه مشکلی که از مجازی سازی گفتم و اینکه در یک پروژه تجاری صدها یا هزاران سرویس وجود خواهد دشات،‌ الان می تونید درک کنید که داکر اومده چیکار کنه و چجوری می‌خواد باعث مدیریت بهتر سرویس‌ها باشه.فرض کنید چندین سرویس روی چندین کانتینر مختلف دارید، در حالت مجازی سازی باید هر سرویس روی یک سیستم عامل جداگانه باشه حتی اگر  بصورت مداوم نیاز به استفاده ازش نداشته باشیم. اما در داکر می‌توینم همه کانتینرها رو روی یک سیستم عامل داشته باشم و هرکانتینر زمانی اجرا می‌شه که بهش دستور بدیم. پس منابع سیستم در صورت نیاز به کانتینرها تعلق می‌گیره. اینجوری هم منابع سیستم بصورت بهینه استفاده میشن و هم اینکه می‌تونیم تعداد زیادی کانتینر داشته باشیم. از همه مهمتر که سرعت کد زنی بالا میره و دیگه نیازی نیست برای هر ماشینی جداگانه کد بزنیم یا درگیر برطرف کردن dependencyها باشیم.تا اینجا متوجه شدیم داکر چیه و چرا بوجود اومده و چجوری باعث می‌شه مدیریت سرویس ها راحتتر بشه. وارد معماری داکر نشدم و صرفا مفهوم داکر و عملکرد کلی داکر رو توضیح دادم. در پست های بعدی  نحوه استفاده از داکر رو می‌نویسم.</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Tue, 17 Jan 2023 13:29:37 +0330</pubDate>
            </item>
                    <item>
                <title>How to Dockerize a Simple MySQL DB؟</title>
                <link>https://virgool.io/@majidpv/how-to-dockerize-a-simple-mysql-db-awzjrwgeqw29</link>
                <description>در این مقاله، من دستورالعمل های اجرایی در مورد نحوه ایجاد یک کانتینر Docker، تغییر وضعیت داخلی آن و سپس ذخیره کانتینر به عنوان یک Image را با جزییات نسبتا کامل میگم.در زمان داکرایز کردن و انجام دستورات احتمال زیاد، مثل من، سیستم بهتون خطاهای زیادی میده. تاجاییکه امکانش بود و خطاها یادم بود سعی کردم خطاهارو هم بگم. در هرصورت با سرچ کردن ساده براحتی میتونید خطاها رو برطرف کنید. نکته مهم اینه که دستورات پایه را دیده باشید و بدونید در هرمرحله درحال انجام چه دستوری هستید.Pull the MySQL Docker Imageخوشبختانه MySQL  یک Docker image داره که در Docker Hub موجود است.میتونید هر نسخه ای که در سایت هستش رو روی لوکال خودتون دانلود کنید.sudo docker pull mysql:tagکلمه tag ورژن mysql رو مشخص میکنه. بهتره که tag رو برابر latest بذارید تا آخرین نسخه mysql اجرا بشه.Command: docker images [options]با دستور بالا میتونید imageهایی که از داکرهاب دانلود کردید رو ببینید.اگر MySQL Image روی لوکال شما دانلود شده باشه، خروجی درست باید شبیه به این تصویر باشه   Create a Docker Volume کانتینرهای داکر به طور پیش‌فرض اطلاعات را حفظ نمی‌کنند. آنها پردازش‌ها را انجام می‌دن و وقتی کانتیر متوقف میشه یا حذفش میکنیم، تمام اطلاعاتی که روی هارد نوشته شده بود از بین می‌ره. از Docker Volumes برای حفظ داده‌ها استفاده خواهیم کرد. برای خوندن توضیحات بیشتر به اینجا برید.sudo docker volume create [name]با استفاده از دستور زیر مثل عکس بالا میتونید volumeهای لوکال خودتون رو ببینید.sudo docker volume lsCreate a Docker MySQL Containerقبل از هرچیزی برای جلوگیری از هرگونه وقت تلف شدن و یا گرفتن خطا بررسی میکنیم  پورتی که میخواهیم رابط کانتیر و host (اینجا لوکال هاست) باشه خالی هستش یا اشغال شده. برای اینکار از دستور زیر استفاده کنید و اگر خروجی چیزی دریافت نکردید یعنی پورت خالی هستش. اگر خالی نبود یک پورت دیگه امتحان کنید.sudo lsof -i :[portt number]الان یک MySQL Docker image بر روی لوکال داریم و یک Docker Volume برای ذخیره اطلاعات،پس می‌تونیم کانتینر را ایجاد کنیم. ایجاد کانتیر با استفاده از دستور زیر هستش. این دستور optionهای زیادی داره که باتوجه به کانتیری که میخواهیم و ابزاری که قصد داریم داکرایزش کنیم باید optionهای مناسب رو انتخاب کنیم. sudo docker create [options] image [command] [args ...] اما دستوری که ما برای داکرایز کردن MySQL استفاده میکنیم دستور زیر هستش:docker create --name mysql-db -v mysql-volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=your_password -p 3306:3306 mysqlتوضیحات دستور بالا خیلی مهمه:--name: نام کانتینر رو مشخص میکنیم. در این مثال من نام کانتینر رو mysql-db گذاشتم.-e: (Set environment variables)برای تعریف کردن متتغیرها  هستش. چون ما داریم از mysql یک کانتیر می سازیم پس باید متغیرهای لازم mysql رو حتما مشخص کنیم. برای mysql  اولین و اصلی ترین متغیر لازم MYSQL_ROOT_PASSWORD هستش که من اینجا برابر your_password گذاشتم. ( اگر مایل بودید میتونید متغیرهای دیگری هم اینجا تعریف کنید)-v:  (Bind mount a volume)تعریف آدرس یک فایل سیستم. در اینجا میخواهیم Docker Volume و آدرسش روی هارد رو به کانتیر بدیم. بطور پیش فرض MySQL اطلاعاتش رو در لینوکس روی آدرس var/lib/mysql/ ذخیره میکنه، به همین دلیل روی لینوکس آدرس Docker Volume رو  var/lib/mysql/ قرار میدن.-p: (Publish a container&#x27;s port(s) to the host)پورت کانتیر برای ارتباط با host مشخص میشه. من از پورت ۳۳۰۶ استفاده کردم.mysql: (Image) نام image ای که قصد داریم یک کانتیر با استفاده از اون ایجاد کنیم. توجه کنید اولین مرحله این بود که mysql image رو ازdocker hub دانلود کنیم.راه دیگری که برای ساخت کانتیر وجود داره استفاده از دستور  docker run [options] image [args ...] هستش که خیلی شبیه به دستوری هست که من استفاده کردم. اما من ترجیح دادم که از دستور docker create استفاده کنم. چون دستور docker run اول یک کانتیر ایجاد میکنه و بعد اونو اجرا میکنه. پس اگر ما بخواهیم که کانتیری که قبلا ایجاد کردیم رو اجرا کنیم، نمیتونیم از این دستور استفاده کنیم. پس بهتره از اول دستورات رو کامل و منطقی انجام بدیم.ساخت یک کانتیر و مشاهده کانتیرهای موجود روی لوکالبا استفاده از دستور زیر‌ (در اسکرین شات بالا مشخص هستش) میتونید کانتیرهایی ساخته شدن رو ببینید. sudo docker container ls -aدقت کنید که PORTS کانتیرها مشخص نشده. به محض اجرای یک کانتیر پورتهایی که در دستور تعریف کانتیر مشخص کردیم به کانتیر تعلق می‌گیره. البته به شرطی که اون پورت توسط پروسس دیگری قبل از اجرای کانتیر اشغال نشده باشه. میتونید با استفاده از دستور sudo lsof -i :port number بررسی کنید که پورت آزاد هستش یا توسط چه پروسسی اشغال شده.docker start [container&#x27;s name]می رسیم به اجرای کانتینر. با استفاده از دستور بالا میتونیم کانتیری که در مرحله قبل ساختیم رو اجرا کنیم. اگر همه چیز درست پیش رفته باشه و پورتی که در تعریف کانتیر مشخص کرده بودیم خالی باشه. باید خروجی مشابه خروجی زیر ببینید.خروجی درست پس از اجرای کامل کانتینراول با استفاده از دستور sudo lsof -i :3306 بررسی کردم که پورت خالی هست یا نه. که چون خالی بود خروجی خالی شد. (البته بهتره این مرحله رو قبل از ساخت کانتیر انجام بدیم) و بعدش دستور docker start mysql-db رو اجرا کردم تا کانتیری که ساختم اجرا بشه. اگر همه چیز درست باشه باید خروجی تون مشابه خروجی من باشه. در نهایت هم نشون دادم که پورت 3306 توسط داکر اشغال شده.البته روش بهتر بیینیم که کانتیر اجرا شده یا نه و اینکه کل کانتیرهای درحال اجرا رو ببینیم اینه که از دستور زیر استفاده کنیم.sudo docker psConnecting to the MySQL Container تا اینجا یک کانتیر ساختیم با استفاده از mysql Image که از Docker Hub دانلود کرده بودیم. حالا میتونیم وارد محیط mysql در داکر بشیم. با استفاده از دستور زیر وارد محیط mysql کانتیر میشیم بدون اینکه نیاز به نصب mysql client داشته باشیم.sudo docker exec -it mysql-db mysql -u root -pورود به محیط mysqlاگر خروجی مشابه بالا داشته باشید یعنی به خوبی یک کانتیر mysql برای خودتون ایجاد کردید و حالا میتونید از اون استفاده کنید.برای اینکار روش های دیگری هم هستش. یک روش استفاده از mysql client است. برای اینکار باید mysql client رو روی لوکال نصب کنید و البته کانفیگ های مناسب برای اتصال بصورت remote هم انجام بدید. در نهایت با استفاده از دستور mysql -u root -h 127.0.0.1 -p به کانتینرتون متصل بشد. توجه کنید که ۱۲۷.۰.۰.۱ درواقع ip لوکال هاست هستش. روش دیگر هم استفاده از یک GUI-based client مثل MySQL Workbench هستش.</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Sat, 07 Jan 2023 20:37:05 +0330</pubDate>
            </item>
                    <item>
                <title>انتخاب کلید اصلی در دیتابیس (How to Choose a Good Primary Key)</title>
                <link>https://virgool.io/@majidpv/%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A8-%DA%A9%D9%84%DB%8C%D8%AF-%D8%A7%D8%B5%D9%84%DB%8C-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-how-to-choose-a-good-primary-key-ao4ngxv99hhy</link>
                <description>در SQL Database، کلید اصلی یک بخش ضروری از هر جدول است. اگر می‌خواهیم سادگی، سازگاری و عملکرد را تضمین کنیم، برای  انتخاب کلید اصلی مناسب هر جدول، باید عوامل مختلفی را در نظر بگیریم.عوامل موثر در انتخاب کلید اصلییکتا بودن: (Uniqueness) این مهمترین ویژگی است که باعث می‌شود ردیف های ستون کلید اصلی مقادیر یکسان نداشته باشند. (میدانیم که کلید اصلی نمی‌تواند Null باشد)ثبات: (Stability) تعریف (یعنی ستون یا ستون هایی که کلید اصلی را تشکیل می دهند) و  مقادیر نباید تغییر کنند. تغییر ستون‌های PK به معنی تعریف دوباره همه کلیدهای خارجی متصل به PK است، در حالی که برای تغییر مقدار ستون PK میبایست تمام ردیف‌های متصل (FK) تغییر کنند.تقلیل ناپذیری: (Irreducibility) اگر از یک کلید اصلی ترکیبی استفاده می‌کنید، هیچ ستون یا ترکیب کوچک‌تری از ستون‌ها نباید  ویژگی‌های جدول را به‌طور منحصربه‌فرد شناسایی کنند. به عبارت دیگر، اگر ستونی را از PK حذف کنید، ترکیب باید یکتا نباشد. به خاطر داشته باشید که اگر کلید اصلی ترکیبی را انتخاب کنید، کلید اصلی شما پیچیده‌تر خواهد بود و از منابع بیشتری (ذخیره‌سازی و حافظه) استفاده می‌کند.سادگی: (Simplicity) تا جایی که ممکن است از ستون های کمتری استفاده کنید و ستون هایی را انتخاب کنید که مقادیر آنها به راحتی خوانده شوند.ستون هایی که مقادیر آنها برای انسان قابل فهم باشد، باعث آسونتر شدن مدیریت/کاربا دیتابیس می شود. برای مثال مقادیر ستون name  در جدول Artist بطور واضح در مورد نام آرتیست میباشد. اما مقادیر ستون Category بطور واضح مشخص نیست در مورد چه دسته بندی می باشند. دسته بندی ملیت، جنسیت، وزن و ....کلیدهای اصلی را می توان به دو دسته اصلی تقسیم کرد:۱. کلیدهای جانشین (Surrogate Keys) از یک یا چند ستون جدول توسط سیستم تولید می‌شود. این کلیدها ارتباط طبیعی با ستون های دیگر جدول ندارند و معمولا هنگام اجرا و دقیقا قبل از وارد کردن رکوردها به جدول ایجاد می شوند.برای مثال ستون شماره سریال در جدول محصول.۲. کلیدهای طبیعی (Natural keys)یک یا چندستون که از قبل در جدول وجود دارند. این کلیدها با بقیه ستون های جدول رابطه طبیعی دارند.برای مثال ستون کدملی در جدول کاربران.سایز و نوع داده کلید اصلیاگر کلید طبیعی را انتخاب شده باشد سایز و نوع داده کلید براساس نوع داده مقادیری است که باید در ستون کلید طبیعی ذخیره شود.اگر کلید جانشین انتخاب شده باشد باید نوع داده و سایز مناسب برای کلید را انتخاب کنید. پرکاربردترین انواع داده برای کلیدهای اصلی عبارتند از:1. عددی (Numeric) این ساده ترین انتخاب است. از فضای کمتری نسبت به سایر انواع داده (معمولاً 1-8 بایت) استفاده می کند، بنابراین هم باعث صرفه جویی در ذخیره سازی و هم بهبود JOIN و LOOKUP می شود. 2. UUID/GUID (Universally Unique Identifier/Globally Unique Identifier) برای پر کردن خودکار مناسب است، اما برای کاربران کمی گیج کننده. کلیدها به 16 بایت فضای ذخیره سازی نیاز دارند (و برای انجام JOIN و LOOKUP به حافظه بیشتری نیاز دارند).  UUID ها و GUID ها برای محیط های توزیع شده عالی هستند.&quot;&quot; انتخاب درست اندازه و نوع داده Surrogate Key اهمیت زیادی دارد  &quot;&quot;تصمیم گیری در مورد کلید اصلیکلید جانشین یا کلید طبیعی؟ یک پاسخ برای این سوال وجود دارد: بستگی دارد. اگر کسی سعی کرد شما را متقاعد کند که باید فقط کلیدهای طبیعی یا کلیدهای جایگزین داشته باشید، فقط لبخند بزنید :)قبل از هرچیزی به یاد داشته باشید:اگر کلید طبیعی را انتخاب کرده اید و ممکن است مقادیر ستون یا ستون‌های آن تغییر کند، باید آن مقادیر را در تمام جداول با کلیدهای خارجی متصل به آن کلید طبیعی به روز کنید.  اگر یک کلید اصلی از چندین ستون تشکیل شده باشد، کلیدهای خارجی شما نیز چند ستونی خواهند بود. تجربه دیگران نشان می دهد که کلیدهای اولیه با بیش از 2 ستون غیر منطقی هستند. مدل دیتابیس غیرقابل خواندن می شود، پرس و جو از داده ها خسته کننده است، و در نهایت ... یک طراح DB کار بیشتری برای انجام دارد :)مقایسه کلید طبیعی و کلید جانشینتجربه مهندس ها میگه هر زمان که مقادیر Natural keys ممکن است تغییر کند یا زمانی که یک Natural key بیش از حد پیچیده است، از یک Surrogate Key استفاده کنید. فقط به این مثال نگاه کنید:جدول کشور کاملاً قابل فهم است. Natural key جدول city باید هم name و هم country_name باشد زیرا ممکن است شهرهای زیادی با یک نام در کشورهای مختلف وجود داشته باشد. در مورد جدول street و  adress هم نیاز به کلید اصلی با دو ستون داریم. در مورد خیابان و آدرس جداول هم همینطور است. در نهایت با جدول company که ۴ ستون کلید خارجی دارد مواجه می شویم.جدا از هزینه جست و جو در این دیتابیس تصور کنید شهرداری تصمیم گرفت نام یکی از شهرها رو تغییر بده :)) در این صورت هزینه update کردن دیتابیس خیلی سنگین میشه.اما استفاده از Surrogate Keys تمام مشکلات بالا رو از بین خواهد برد: تصویر پایین.ممکن است موارد بالا را به اینجوری تفسیر کنید که Surrogate Key همیشه بهتر از Natural key هستند. این درست نیست. اصولاً استفاده از Surrogate Key گاهی بی معنی است. اگر یک جدول فنی با کدهای غیرقابل تغییر دارید، نیازی به اضافه کردن ستون غیر ضروری برای Surrogate Key نیست. اگر یک Natural key از تعداد کمی ستون (در حالت ایده آل فقط یک ستون) تشکیل شده است و مقادیر آن تغییر نمی کند - از آن به عنوان یک Natural key استفاده کنید.در نهایت، برای کسانی که در مورد استفاده از Surrogate Key تردید دارند، توجه داشته باشید که حتی در دنیای واقعی نیز نمونه‌های زیادی از این شناسه‌ها وجود دارد. شماره تامین اجتماعی، شماره بارکد، شناسه گواهینامه رانندگی و .... همه آنها مجموعه ای از اعداد بی معنی هستند. </description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Mon, 02 Jan 2023 16:42:41 +0330</pubDate>
            </item>
                    <item>
                <title>معرفی و خلاصه کتاب کار عمیق</title>
                <link>https://virgool.io/@majidpv/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D9%88-%D8%AE%D9%84%D8%A7%D8%B5%D9%87-%DA%A9%D8%AA%D8%A7%D8%A8-%DA%A9%D8%A7%D8%B1-%D8%B9%D9%85%DB%8C%D9%82-jh50ubgpeu0a</link>
                <description> https://www.aparat.com/v/edLcQ/Quit_social_media_%7C_Dr._Cal_Newport_%7C_TEDxTyso شده بگید کاش می‌تونستم ساعت‌های بیشتری رو صرف رسیدن به فلان هدف بکنم؟ راهش رو نیوپورت بهتون یاد میده.کار عمیق چیه؟ کاری که بدون وقفه و مزاحمت، متمرکز و با توانایی‌های وجودی روی یک مسأله انجام می‌دیم. بهترین ایده‌ها با کار عمیق به دست میاد. کار عمیق مثل یک سوپر پاوره. اگه یاد بگیریم می‌تونیم کیفیت کاری که می‌کنیم رو خیلی بالا ببریم. کتاب کار عمیق نشون می‌ده که چطوری متمرکز کار کنیم.چرا کتاب کار عمیق رو یشنهاد می‌کنیم؟حالا  دیگه همه می‌دونن که رسانه‌ها یا شبکه‌های اجتماعی عتیادآور هستند. چیزی  که خیلی‌ها نمی‌دونن اینه که چطوری به این اعتیاد غلبه کنند و وقت و انرژی‌شون رو بگذارند روی هدف و کاری که براشون مهمه. کتاب کار عمیق قراره  به ما یاد بده که چرا کار عمیق مهمه و چطوری محل کار یا شرایط محیط مون رو  برای کار عمیق کردن تغییر بدیم.نویسنده  کتاب کار عمیق کیست؟کال  نیوپورت نویسنده‌ی کتاب کار عمیق دکترای مهندسی برق و علوم کامپیوتر دارد.  حوزه‌ی اصلی فعالیتش تئوری سیستم‌های توزیع و الگوریتم‌های سیستم‌های  ارتباطی است. به قول خودش برای اثبات قضایا نسبت به تدوین کد بیشتر وقت می‌گذارد. تا به امروز، بیش از ۶۰ مقاله منتشر کرده. در دنیای نویسندگی  بیشتر به دنبال موضوعاتی است که نشان دهد تکنولوژی چه تاثیراتی بر جامعه داشته. کتاب مینیمالیسم دیجیتال کتاب جدید نیوپورت در سال ۲۰۱۹ منتشر شده.از کجا گوش کنیم؟پادکست بی پلاس این کتاب رو معرفی کرد و متن‌‌های بالا هم عینا از سایت بی‌پلاس برداشتم. اپیزود ۲۲ بی پلاس خلاصه این کتاب رو میگه. هم از سایتش و هم از گوگل پادکست میتونید گوش کنید. خلاصه کردن کتاب توسط منچند توضیح مهم در مورد این خلاصه:۱- بیش از ۹۵درصد این نوشته‌ها، عینا کلمات و جمله بندی مترجم هستش.۲- اصطلاح کار عمیق ساخته و پرداخته نویسنده کتاب است.۳-  برای طولانی نشدن این نوشته، از بیان مثالها و زندگی شخصیت‌های نخبه تا حد زیادی چشم پوشی کردم. در نتیجه برای درک بهتر پیشنهاد میکنم که کتاب اصلی را بخونید.این بخش به‌مرور تکمیل میشه.۱. مقدمهبخش اول: ایده۲. فصل اول: کار عمیق ارزشمند است۳. فصل دوم: کار عمیق کمیاب است</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Thu, 06 Aug 2020 19:05:19 +0430</pubDate>
            </item>
                    <item>
                <title>خلاصه کتاب کار عمیق- قسمت دوم</title>
                <link>https://virgool.io/@majidpv/%D8%AE%D9%84%D8%A7%D8%B5%D9%87-%DA%A9%D8%AA%D8%A7%D8%A8-%DA%A9%D8%A7%D8%B1-%D8%B9%D9%85%DB%8C%D9%82-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-uviceayqa0v1</link>
                <description>قسمت اول خلاصه کتاب کار عمیق: مقدمهبخش اول: ایدهفصل اول: کار عمیق ارزشمند استچرا برخی افراد در اقتصاد ما عملکرد بسیار خوبی داشته‌اند؟ دو نوع پاسخ به این سوال وجود دارد. نوع اول پاسخ‌ها در محدوده جزئیات قرار دارند و بر ویژگی‌های شخصیتی و تاکتیک‌هایی که بر پیشرفت آدمها کمک‌ می‌کنند، تمرکز می‌کنند. نوع دوم پاسخ‌ها در محدوده کلیات قرار دارند و کمتر بر افراد  و بیشتر بر نوع کار آنها متمرکز هستند. پاسخ‌‌هایی که کلیات را درنظر می‌گیرند بیشتر به بحث ما مربوط می‌شوند؛ چراکه بهتر مشخص می‌کنند که اقتصاد فعلی ما، به چیزی پاداش می‌دهد.اریک برینجولفسون و اندرو مک‌آفی(Erik Brynjolfsson Andrew McAfee)، در کتاب تاثیر گذارشان به‌نام &quot;مسابقه با ماشین&quot; بیان کردند: ما در اوایل مرحله بازسازی بزرگ قرارداریم، مرحله‌ای که تکنولوژی‌هایمان در حال رقابت و پیشرفت هستند، اما بسیاری از مهارت‌ها و سازمان‌هایمان عقب مانده‌اند.این عقب ماندگی برای بسیاری از کارگران و کارمندان اخبار بدی را پیش بینی می‌کند. احتمالا کارفرمایان به جای استخدام افراد جدید به استخدام ماشین‌های جدید خواهند پرداخت. البته این واقعیت از دید جهانی، ترسناک نیست. براساس بررسی نویسنده کتاب، تفکر اقتصادی رایج ادعا می‌کند که رشد بی‌سابقه و تاثیر تکنولوژی، در حال ایجاد بازسازی عظیمی در اقتصاد ما هستند. در این اقتصاد جدید، سه گروه مزایای خاصی خواهند داشت: کسانی که می‌توانند به خوبی و خلاقانه با ماشین‌های هوشمند کار کنند، کسانی که در کاری که انجام می‌دهند،‌بهترین هستند و کسانی که به سرمایه دسترسی دارند.( کارگران با مهارت بالا، سوپر استارها، مالکان)واضح است که این بازسازی بزرگ، تنها روند اقتصادی برای مهم بودن در حال حاضر نیست و سه گروهی که ذکر شد،‌تنها گروه‌هایی نیستند که به خوبی کار خواهند کرد، اما آنچه برای بحث در این کتاب مهم است، این روندها هستند. به هرحال این سه گروه مهم هستند. اگر بتوانید به هریک از گروه‌ها بپیوندید در این صورت به خوبی کار خواهید کرد. اگر نتوانید، با اینکه ممکن است هنوز هم کارتان را خوب انجام دهید. اما موقعیتتان متزلزل تر خواهد بود.پرسشی که باید در حال حاظر با آن مواجه شویم، واضح است: چطور میتوان به این برندگان پیوست؟     درمورد گروه سوم(مالکان) راه و روش سریعی در دسترس نیست و اگر در دسترس بود بعید بود آنرا در کتابی با دیگران به اشتراک بگذارم. اما دو گروه برنده دیگر، در دسترس هستند. چگونگی دسترسی به آنها، هدفی است که در ادامه مورد بررسی قرار می‌دهیم.دو توانایی اصلی برای رشد در اقتصاد جدیدتوانایی سریع ماهر شدن در کارهای سخت.توانایی تولید در سطح ممتاز، هم از نظر کیفیت و هم از نظر سرعت.تاکید می‌کنم ماشین‌های هوشمند پیچیده‌ هستند و ماهر شدن در آنها دشوار است. بنابراین برای پیوستن به گروهی که می‌توانند با این ماشین‌ها خوب کار کنند،‌لازم است که توانایی‌تان را برای مهارت پیدا کردن در کارهای سخت پرورش دهید و چون این تکنولوژی‌ها به سرعت در حال تغییر هستند،‌ این روند تسلط برکارهای سخت هرگز به پایان نمی‌رسد: باید بارها و بارها‌، قادر به انجام سریع آن باشید.البته توانایی ذکر شده تنها برای خوب کارکردن با ماشین‌های هوشمند نیست، برای سوپر استار شدن و ..... نیز بسیار ضروری می‌باشد. اگر می‌خواهید فوق ستاره شوید، تسلط بر مهارت‌های مربوطه ضروری است؛ اما کافی نیست. پس از آن باید این پتانسیل بالقوه را به نتایج ملموسی که مردم برای آنها ارزش قائل هستند، تبدیل کنید. این توانایی تولید، درمورد کسانی هم که به فکر تسلط بر ماشین هوشمند هستند، به کار می‌رود. این موضوع نگرش کلی دیگری را برای پیوستن به صفوف برندگان در اقتصادمان فراهم می‌کند: اگر تولید نکنید، پیشرفت نخواهید کرد. مهم نیست که چقدر ماهر یا بااستعداد هستید.پس از درک این دو توانایی که برای پیشرفت در دنیای تکنولوژی‌های جدید و نوآور اساسی هستند، اکنون می‌توانیم پرسش بدیهی بعدی را بپرسیم: چگونه می‌توان این توانایی‌های اصلی را پرورش داد؟ اینجاست که به نظریه اصلی کتاب می‌رسیم: دو توانایی اصلی که آنها را توصیف کردیم،‌ به توانایی شما برای انجام کار عمیق بستگی دارند. اگر در این مهارت پایه‌ای تسلط پیدا نکرده‌اید، برای یادگیری مطالب سخت یا تولید در سطح ممتاز، دچار مشکل خواهید شد.وابستگی این توانایی‌ها به کار عمیق، بلافاصله آشکار نمی‌شود؛ این موضوع نیاز به نگاه دقیق‌تری به علم یادگیری، تمرکز و بهره‌وری دارد. بخش‌‌های پیش‌رو این نگاه دقیق را میسر می‌کنند.کار عمیق به شما کمک می‌کند تا مطالب دشوار را به سرعت بیاموزیدآنتونیون- دالماس سرتیلانگر(Antonin-Dalmace Sertillanges): بگذارید ذهنتان به لطف همگرایی پرتوهای توجه، به عدسی تبدیل شود؛ بگذارید روحتان، مقصد همه آن چیزی باشد که در ذهن شما به عنوان ایده غالب و کاملا جذاب تثبیت شده است. به عبارت دیگر یادگیری به تمرکز شدید نیاز دارد.کی. آندرس اریکسون: تفاوت میان افراد متخصصان و افراد عادی، بازتاب تلاش‌های طولانی و سنجیده آنها برای بهبود عملکردشان در حوزه‌ای خاص است.برای تسلط بر هرکار دشوار شناختی، به نوعی خاص از تمرین نیاز است. اجزای اصلی این تمرین معمولا به شرح زیر است: (۱) توجه‌تان به شدت روی مهارت خاصی که تلاش می‌کنید در آن بهتر شوید یا ایده‌ای که سعی در تسلط بر آن دارید، متمرکز شده است؛ (۲) شما بازخورد دریافت می‌کنید، بنابراین می‌توانید روش خود را اصلاح کنید تا توجه‌تان را دقیقا در جایی حفظ کنید که کارآمدتر است. برای یادگیری سریع چیزهای سخت، باید به شدت و بدون حواس پرتی تمرکز کنید. به عبارت دیگر، یادگیری، کارکرد کار عمیق است.***در این قسمت مطالبی در زمینه نورولوژیکی بطور مفصل بیان شده است که من اشاره ای به آن موارد نکردم.***کار عمیق به شما کمک می‌کند تا در سطح ممتاز ارائه کنیدایده ‌ای وحود دارد که بنظر می‌رشد مهترین عامل برای بهره‌وری و بازدهی بالا می‌باشد: دسته‌بندی کردن کارهای فکری دشوار اما مهم، در دروه‌های طولانی و بدون وقفه. در هریک از دسته‌بندی‌‌‌ها به روش قبلی، تقسیم توجه و تمرکز در مقیاس زمانی کوچکتر نیز کارایی مارا افزایش می‌دهد.با ادغام کار با تمرکز شدید و بدون وقفه، می‌توان از قانون زیر استفاده کرد:                                              شدت تمرکز * زمان صرف شده = تولید با کیفیت بالا مفهوم پسماند توجه(Attention residue) بیان‌ می‌کند که عادت معمول کار کردن در حالت نیمه حواس پرتی، عملکرد شمارا به طور بالقوه خراب می‌کند. ممکن است بنظر بی‌ضرر باشد که هرچنددقیقه یکبار نگاه سریعی به تلگرام و ... بیندازید اما این بررسی سریع، هدف جدیدی را برای توجه شما معرفی می‌کند. حال اگر نتوانید در حال حاظر به این هدف جدید رسیدگی کنید(که اغلب اینگونه است) مجبور خواهید شد که به کار اول برگردید. پسماندهای توجهی که با چنین جابه‌جا‌یی‌های حل نشده‌ای کنار گذاشته ‌می‌شوند، عملکرد شمارا کاهش می‌دهند.**مفهوم پسماند توجه را بیان نکردم. برای درک کامل این مفهوم یا در گوگل سرچ کنید یا کتاب را بخوایند**برای تولید در بالاترین سطح خودتان،‌نیاز دارید که مدت طولانی با تمرکز کامل و بدون حواس‌پرتی روی یک وظیفه، کار کنید. به بیان دیگر،‌نوع کاری که عملکرد شمارا بهینه می‌کند، کار عمیق است.پس جک دروسی چی؟این بخش کتاب در مورد مدیران اجرایی و دسته‌ای خاص از مشاغل صحبت می‌کند که عملا فرصت تمرکز شدید برای چند ساعت در روز را ندارند و حتی این تمرکز کمک قابل توجهی نیز به حل مشکلاتشان نمی‌کنند. برای مثال مدیران اجرایی شرکت‌ها بخصوص شرکت‌های بزرگ(مانند جک دروسی) در طول روز با انواع حواس پرتی‌ها از جمله جلسات  مختلف، نامه‌نگاری‌ها و .... روبه‌رو می‌شوند و نه تنها باعث پایین ‌آمدن کارایی‌ آنان نمی‌شود، بلکه این نوع حواس پرتی‌ها از بطن و ماهیت شغل آنان و غیرقابل اجتناب هستند.به بیان دیگر: کار عمیق،‌تنها مهارت باارزش در اقتصاد ما نیست و ممکن است که بدون این توانایی، کاری به خوبی انجام شود، اما موقعیت‌هایی که انجام کار غیر عمیق قابل توصیه است بطور فزاینده‌ای کمیاب هستند.</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Thu, 06 Aug 2020 18:21:34 +0430</pubDate>
            </item>
                    <item>
                <title>خلاصه کتاب کار عمیق - قسمت اول</title>
                <link>https://virgool.io/@majidpv/httpsvirgooliomajidpv%D8%AE%D9%84%D8%A7%D8%B5%D9%87-%DA%A9%D8%AA%D8%A7%D8%A8-%DA%A9%D8%A7%D8%B1-%D8%B9%D9%85%DB%8C%D9%82-apjt3a6tltk3</link>
                <description>حقیقتی که شخصیت‌‌های مبتکر و مهم نسل‌های گذشته پذیرفته‌اند:‌ زندگی عمیق، زندگی خوبی است.مقدمهدر سال ۱۹۲۲ کار یونگ که روانپزشک مشهوری بود، از اتاقی مخصوص در خانه‌ای سنگی نزدیک سواحل شمالی دریاچه زوریخ، برای مراقبه استفاده می‌کرد. می‌گفت:(( فقط خودم در اتاق هستم. همیشه کلید آنرا پیش خودم نگه می‌دارم. هیچ فرد دیگری مجاز نیست آنجا باشد، مگر با اجازه من.)) یونگ هفت صبح از خواب بیدار می‌شد و پس از خوردن صبحانه ای مفصل، دوساعت را باتمرکز کامل، صرف نوشتن در اتاق خصوصی‌اش می‌کرد. سخنرانی‌ها و مشاره‌های یونگ، اورا در زوریخ مشغول ‌می‌کرد اما او تنها به این مسائل بسنده نمی‌کرد. می‌خواست روش درک ما از ناخودآگاهمان را تغییر دهد و این هدف، به تفکری عمیق‌تر و دقیق‌تر از آن چیزی که می‌‌توانستدر بحبوبه شیوه زندگی پرمشغله شهری‌اش به آن دست پیدا کند، نیاز داشت. عزلت گزینی یونگ برای فرار از زندگی حرفه‌اش نبود، بلکه برعکس برای پیشرفت و ارتقا آن بود.کار عمیق: فعالیت‌های حرفه‌ای انجام شده در حالت تمرکز کامل بدون حواس پرتی که توانایی‌های شناختی شما را به حد اعلای خود برساند. این تلاش‌ها ارزش‌آفرین هستند، مهارت شمارا بهبود می‌بخشند و تکرار آنها دشوار است.کار عمیق، برای بهره‌گیری کامل از استعداد و ظرفیت ذهنی‌تان ضروری است. در حال حاظر، پس از دهه تحقیق در روانشناسی و علوم ‌اعصاب می‌دانیم که حتی فشار روانی همراه با کار عمیق هم برای بهبود توانایی‌هایتان ضروری است.در واقع اگر زندگی سایر شخصیت‌های تاثیرگذار را مطالعه کنید، متوجه خواهید شد که تعهد به کار عمیق، موضوعی مشترک در بین آنهاست.در سال ۲۰۰۹ در حالی که جی.کی رولینگ در حال نوشتن کتاب &quot;خلا موقت&quot; بود، کارمندانش حساب کاربری تویتری را به نام او راه‌اندازی کردند و یک سال و نیم ابتدایی، تنها توییت او این بود: (( این صفحه واقعی من است، اما چیزی از من نخواهید شنید زیرا در حال حاظر، قلم و کاغذ برایم اولویت دارد.))مورد عجیب و خلاف انتظار دیگر، نیل استیونسن است که دسترسی به او از طریق وسایل الکترونیکی تقریبا ناممکن است. اینطور توضیح می‌دهد که: اگر زندگی ام را به نحوی سازماندهی کنم که بتوانم زمان‌های طولانی، متوالی و بدون وقفه زیادی بدست آورم، می‌توانم رمان بنویسم.دلیل کاهش انس و علاقه دانش ورزان به کار عمیق، به خوبی واضح است: ابزارهای شبکه‌ای. منظور دسته گسترده‌ای از ابزارهاست که خدمات ارتباطی را فراهم می‌کنند. یکی از مطالعات شرکت مکینزی در سال ۲۰۱۲ نشان داد که، دانش ورزان بطور متوسط بیش از ۶۰درصد ساعت کاری‌شان را در ارتباطات الکترونیکی و جست‌وجو در اینترنت سپری می‌کنند و نزدیک به ۳۰درصد وقت آنها، تنها صرف خواندن و پاسخ دادن به ایمیل‌ها می‌شود.این وضعیت توجه نصفه‌نیمه، با کار عمیق که نیازمند دوره‌های طولانی تفکر مداوم است، سازگار نیست. اگرچه در عین حال، دانش‌ورزان مدرن در حال هدر دادن وقتشان هم نیستند. در حقیقت آنها همیشه می‌گویند گرفتار هستند. چه چیزی این تناقض را توضیح می‌دهد؟ می‌‌توان از طریق کاری که تعریف آن‌، نقطه مقابل ایده کار عمیق است، توضیحات زیادی در مورد این موضوع داد:کار کم عمق: کارهای غیرشناختی و غیرمهارتی که اغلب نیاز به تمرکز کامل و حذف حواس پرت‌کن ها ندارند. این تلاش‌‌ها اثر خلاقانه‌ای در جهان ایجاد نمیکنند و تکرار آنها آسان است.بعبارت دیگر، دانش‌‌ورزان در عصر ابزارهای شبکه‌ای، بطور فزاینده‌ای کار کم عمق را جایگزین کار عمیق می‌کندد. بطور مداوم در حال ارسال و دریافت پیام و ایمیل هستند و ..... . در نیتجه تلاش‌های مهمتری که باید به خوبی از تفکر عمیق بهره ببرند، در اثر حواس پرتی به بخش‌های تکه تکه و ذره‌ای تقسیم، و با کیفیت پایینی ارائه می‌شود. شواهد فزاینده‌ای وجود دارد که نشان می‌دهد این تغییر به سوی کارهای کم عمق، انتخابی نیست که بتوان براحتی آنرا معکوس کرد.در واقع شما زمان زیادی را درحالت کم عمقی و آشفتگی سپری می‌‌کنید و به این ترتیب، توانایی‌تان‌ را برای انجام کارهای عمیق به طور دائم کاهش می‌دهید.این ایده که ابزارهای شبکه، کار مارا از حالت عمیق به‌سمت کم عمقی هل می‌دهند، جدید نیست. کتاب &quot;کم عمق‌ها&quot; اولین کتابی بود که تاثیر اینترنت را بر مغز و عادات کاری بررسی کرد.پیشنهاد من: برای درک بهتر اهمیت اولویت‌بندی کارها‌ و تاثیر کارهای بی اهمیت که به کم عمق بودن منجر میشود، کتاب &quot;اصل گرایی&quot; را مطالعه کنید و یا اپیزود ۳۸ پادکست بی پلاس را گوش دهید.برای اینکه بفهمید در اقتصاد ارزش آفرین نیستید، راه‌های زیادی وجود دارد. جیسون بن زمانی این موضوع را فهمید که پس از گذشت یک دوره نه چندان طولانی از پذیرش شغل مشاور مالی، متوجه شد اکثریت قریب به اتفاق وظایف کاری‌اش با ترکیب گزارش‌های اکسل، می‌تواند به صورت خودکار انجام شود. بنابراین مصمم شد که ارزشش را برای جهان افزایش دهد. پس از یک دوره تحقیق به این نتیجه رسید که برنامه نویس کامپیوتر شود. اما مانعی وجود داشت: جیسون بن، چیزی از نوشتن کدهای برنامه نویسی نمی‌دانست. اینجا بود که او به همان مشکلی برخورد که بسیاری از افراد را از حرکت به سمت مسیرهای شغلی عالی دور نگه میدارد: یادگیری چیزی پیچیده، مانند برنامه نویسی کامپیوتر، به تمرکز شدید و بدون وقفه روی مفاهیم شناختی دشوار نیاز دارد. به عبارت دیگر این کار، تنها با کار عمیق ممکن است.بن به خوبی نسبت به مشکلش با کار عمیق آگاه بود، بنابراین افزون بر یادگیری برنامه نویسی، می‌دانست که باید بطور همزمان به ذهنش بیاموزد که چگونه کار عمیق کند. ایده او طاقت فرسا اما موثر بود. خود را در اتاقی بدون کامپیوتر حبس می کرد و تنها کتاب‌های درسی و ..... آنجا بود. با گذشت زمان در تمرکز کردن بهتر شده بود و در نهایت به مرحله‌ای رسید که بطور مرتب پنج ساعت یا بیشتر، بدون داشتن حواس پرتی روی یادگیری این مهارت جدید و دشوار تمرکز می‌کرد. او می‌گوید: در طول آن دوره، نزدیک به هجده کتاب در این زمینه مطالعه کردم. پس از گذشت دوماه از مطالعه در حبس خانگی به دو بوت کمپ پیوست. بن با توجه به آمادگی و پرورش توانایی جدیدش برای انجام کارهای عمیق، نسبت به دیگران برتری داشت. او می‌گفت:(( برخی از افراد با آمادگی حضور پیدا نکرده‌اند. نمی‌توانند تمرکز کنند. نمی‌توانند به سرعت یاد بگیرند.))داستان جیسون بن، بر درس مهمی تاکید می‌کند: کار عمیق مهارتی است که امروزه ارزش زیادی دارد.دو دلیل برای این ارزشمندی وجود دارد. اولین مورد، مربوط به یادگیری است. ما در دوران اقتصاد اطلاعاتی زندگی می‌کنیم که وابسته به سیسیتم‌های پیچید‌ه‌ای است که به سرعت در حال تغییرند. به عنوان مثال، بعضی از زبان‌های برنامه نویسی تا سی سال پیش وجود نداشتند و احتمالا تا سی سال دیگر هم منسوخ خواهند شد یا مورد بهتری پیدا خواهد شد. بنابراین برای ارزشمند ماندن در اقتصادمان، باید بر هنر یادگیری مطالب پیچیده با سرعت بالا، تسلط داشته باشیم. این امر مهم، نیاز به کار عمیق دارد. اگر این توانایی را پرورش ندهید، به احتمال زیاد از پیشرفت‌های تکنولوژی عقب خواهید ماند.دومین دلیل برای ارزشمند بودن کار عمیق، این است که انقلاب‌ شبکه‌های دیجیتال، تاثیرات مثبت و منفی دارد. اگر بتوانید چیز مفیدی خلق کنید، دسترسی مخاطب به آن اساسا بدون محدودیت است. عاملی که پاداش مادی و معنوی شمارا به میزان قابل توجی افزایش می‌دهد. از سوی دیگر اگر چیزی تولید کنید که متوسط باشد، پس به مشکل برخواهید خورد، زیرا پیدا کردن جایگزین بهتر در اینترنت برای مخاطب شما بسیار آسان است. برای موفقیت باید بهترین چیزهایی که میتوانید را تولید کنید، امر مهمی که نیاز به عمیق بودن دارد.ضرورت در حال رشد کار عمیق، امر جدید است. در اقتصاد صنعتی، دوقشر وجود داشتند: کارگران کم مهارت و متخصصان. کار عمیق برای متخصصان بسیار مهم بود، اما اکثر طبقه کارگران میتوانستند بدون اینکه توانایی تمرکز بدون حواس پرتی را پرورش دهند، خوب عمل کنند. تغییر زیادی در دهه‌های گذشته در کارشان اتفاق نیفتاده بود. اما هرچقدر که به سمت اقتصاد اطلاعاتی حرکت می‌کنیم، تعداد بیشتری از مردم، دانش ورز ‌می‌شوند و کار عمیق در حال تبدیل شدن به روند اصلی است، حتی اگر اکثریت افراد این واقعیت را درک نکرده باشند. به بیان دیگر کار عمیق توانایی حیاتی برای هرکسی است که به دنبال حرکت رو به جلو در اقتصاد اطلاعاتی بشدت رقابتی در سطح جهانی است.فرضیه کار عمیق: توانایی انجام کارهای عمیق بطور فزاینده‌ای در حال کمیاب شدن است و دقیقا در همان زمان در اقتصاد ما، بطور فزاینده‌ای در حال ارزشمند شدن است. در نتیجه افراد کمی که این مهارت را پرورش می‌دهند و سپس آنرا محور اصلی زندگی کاری خود قرار می‌دهند، پیشرفت خواهند کرد.پیشنهاد من: برای درک بیشتر اقتصاد اطلاعاتی و همینطور رشد و تاثیر گذازی تکنولوژی بر آینده، در مورد انقلاب صنعتی چهارم، که درحال وقوع است تحقیق کنید.فصل اول: کار عمیق ارزشمند است</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Tue, 28 Jul 2020 17:21:05 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش کامل راه اندازی Raspberry Pi 4</title>
                <link>https://virgool.io/@majidpv/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D9%85%D9%84-%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-raspberry-pi-4-dlcgl8jwpwup</link>
                <description>این آموزش به مرور کامل میشه و هرنکته و مورد جدیدی که در کار با رزبری باهاش مواجهه بشم، قطعا به این نوشته اضافش میکنم.در اینکه رزبری چه ویژگی‌هایی داره و چه استفاده‌هایی میتونیم ازش داشته باشیم شکی نیست. یکی از ساده ترین کارهایی که میشه باهاش انجام داد، اینه که متصلش کنیم به تلوزیون خونه و به عنوان یک مینی کامپیوتر ازش استفاده کنیم؛ بخصوص اینکه برخلاف TVBOXها که به سختی میتونن فیلترنت رو دوربزنن، میتونیم به راحتی VPN و PROXY روی رزبری نصب کنیم و هم فیلترنت رو دوربزنیم و هم از شر تحریمها راحت بشیم. اما نکته مهم اینه که راه‌اندازی رزبری پای۴ به همین سادگی‌‌ها نیست. یسری دنگ و فنگ عجیب داره. به جرات میتونم بگم هیچ سایتی و هیچ فردی حداقل به زبان فارسی آموزش کاملی از راه‌‌اندازی رزبری پای منتشر نکرده، چون خیلی دنبالش گشتم. تقریبا تمامی مشکلات ریز و درشتی که تو مراحل استفاده از رزبری پای ۴ داشتم رو حل کردم و دومورد کوچک مونده که اوناهم بعد اینکه حل شدن به این آموزش اضافه میکنم.رزبری پای ۴ دتا پورت USB 3 و دوتا پورت USB 2 داره. اولین و مهم‌ترین نکته اینه که قبل از وصل کردن برد رزبری به منبع تغذیه، تمامی اتصالات مثل دانگل موس و کیبورد و کابل شبکه و micro hdmi و حتی جک صداوصل شوند. وقتی رزبری به منبع تغذیه وصل هستش خیلی مهمه که نه کابلی وصل بشه نه کابلی قطع بشه. همینطور در مورد usb. خریدخیلی مهمه که جنسی که میخریم سالم باشه، بخصوص چیزهای الکترونیکی که نمیشه براحتی عیب یابی و تعمیرشون کرد. توی تحقیقاتی که داشتم سه فروشگاه صنعت بازار، دانشجوکیت و ECA معتبرترین فروشگاه‌هایی بودن که من پیدا کردم. ولی متاسفانه به لطف مشکلات داخلی و خارجی این فروشگاه ها قیمت بالایی برای رزبری دارند که حتی با نرخ روز ارز هم همخونی نداره. گذشته از این دو فروشگاه اول یعنی صنعت بازار و دانشجوکیت هم قیمت‌هاشون تفاوت فاحشی با ECA داره. خب از اونجایی که ECA هم قیمت کمتری داشت و هم احساس کردم بطور تخصصی‌تر تو این حوزه فعالیت داره تصمیم گرفتم که از این فروشگاه خرید کنم. لوازم جانبی رزبریاین قسمت خیلی مهمه!!! لوازم جانبی مثل microSD card, micro HDMI, cable Type-C و شارژر با خروجی 5V و min 3A باید با دقت تهیه بشند. اولین توصیه اینکه کارت حافظه‌ای که تهیه میکنید حتما مطمئن باشید سرعت نوشتن و خوندنش بالای 90MB/s باشه. البته برای من کمتره!!! درمورد آداپتور و کابل type C هم خیلی وسواس بخرج بدید. رزبری روی برق موردنیازش خیلی جدیه. کمی مشکل و انرژی کمتر از حداقل انرژی مورد نیازش باعث میشه بوت نشه و به مرور باعث خرابی بشه. کابل micro HDMI هم توصیه میکنم که از جمهوری بخرید. یه پاساژ هستش که اسمش یادم رفته، تقریبا وسط فاصله بین علاالدین و ساختمان آلمینیوم قرار داره. قیمتهای این پاساژ بشدت پایینه و کابلهاشون هم کیفیت خوبی دارند.و مهمترین نکته تهیه فن و کیس برای رزبری هستش. اگر میخواهید طول عمر رزبری بالا باشه حتما کیس و فن مناسب رو براش تهیه کنید. ( با رزبری۴ ویدیو 4K با لگ پایینی پخش شد، توانایی پخش رو داره و کمی لگ میزنه در حدی نیست که اذیت کنه. اما رزبری بشدت داغ میشه. پس اگه قصد کار سنگین با رزبری رو دارید حتما فن نصب کنید)نصب سیستم عاملدر این مورد انتخاب های زیادی داریم. هرکس میتونه با توجه به نیازش سیستم عامل مناسب خودش رو انتخاب کنه. انتخاب من Raspbian هست. دلیل خاصی نداره این انتخاب من جز اینکه برای خود کمپانی رزبری هستش و حدسم این بود سازگاری بیشتری داشته باشه. البته فقط و فقط حدسم بود. مراحل نصب سیستم عامل هم خیلی ساده هستش. با سه روش مختلف میتونیم سیستم عامل رو روی کارت حافظه نصب کنیم. اولین روش و ساده ترین روش استفاده از raspberry pi imager هستش. با استفاده از این نرم افزار میتونیم به راحتی سیستم عامل رو روی کارت حافظه نصب کنیم.بعد از دانلود و نصب و اجرای این نرم افزار، اول از همه باید مطمئن باشید که اینترنت پرسرت و پایداری داشته باشید چون خود این نرم افزار سیستم عاملی که بهش بگید رو دانلود و همزمان روی کارت حافظه write میکنه. از گزینه‌‌های مشخص شده اول سیستم عامل رو انتخاب کنید، بعد مقصدی که قصد دارید سیستم عامل روش write  بشه رو انتخاب کنید(همون کارت حافظه) در آخر هم گزینه WRITE رو بزنید و منتظر بمونید که مراحل نوشتن انجام بشه. اگر اینترنت خوبی داشته باشید کمتر از چهل دقیقه دانلود و نوشتن انجام میشه.بعد از تموم شدن مراحل بالا، قدم اول یعنی نوشتن سیستم عامل روی کارت حافظه رو انجام دادید.Raspberry Pi Imagerروش دوم هم که به سادگی روش اول هستش ولی ممکنه بخاطر برخی جزئیات که در ادامه توضیح میدم، موفق به استفاده از این روش نباشید. این روش اینجوریه که یک فایل به اسم NOOB دانلود میکنید، فایل رو روی کارت حافظه کپی میکنید و بعدش کارت حافظه رو داخل رزبری قرار میدید و با متصل کردن رزبری به مانیتور یا تلوزیون و همینطور اینترنت، پنجره ای باز میشه که مراحل نوشتن(نصب) سیستم عامل روی کارت حافظه رو توضیح میده و میتونید.( مشابه روش اول) دقت داشته باشید که باید رزبری رو به اینترنت متصل کنید و هم اینکه موس رو فراموش نکنید.پنجره باز شده بعداز متصل کردن رزبری به تلوزیونروش سوم که توصیه نمیکنم و البته خودم از این روش استفاده کردم اینه که، فایل سیستم عامل(iso) رو دانلود کنید، و بعد با استفاده از نرم افزارهای مخصوص یا کامندلاین سیستم عامل رو روی کارت حافظه write کنید. این روش هم دردسر بیشتری داره و هم اگر اشتباهی رخ بده به خوبی متوجه نمیشید. توصیه میکنم که از روش اول استفاده کنید.شروع به کارخب اولین مشکل به احتمال زیاد هیمنجا رخ میده!! من سیستم عامل رو بدرستی روی کارت حافظه نوشتم و رم رو داخل رزبری گذاشتم و رزبری به به LCD SONY که بیشتر از ده سال پیش خریدیم متصل کردم. ال ای دی قرمز رزبری که نشونه داشتن حداقل انرژی برق مورد نیاز رزبری هستش روشن شد و روشن میمونه،          ال ای دی سبز که نشونه بوت شدن سیستم عامل هست شروع به چشمک زدن کرد و خاموش شد. تا اینجا همه چی درست و کامل بود و نشانه ای از وجود مشکل نداشتم اما هیچ تصویری روی تلوزیون نمایش داده نمیشد!!!حل اولین مشکل: عدم خروجی تصویراین مشکل مربوط به تنظیمات پیشفرض pi 4 هستش که با برخی از تلوزیون‌ها(بخصوص مدلهای قدیمی) سازگار نیست. برای حل این مشکل باید بخش Video options in config.txt رو بررسی کنیم. بطور خلاصه با قرار دادن دوخط کد در فایل config.txt مشکل عدم خروجی حل میشه. اون دوخط کد هم اینا هستند:sdtv_mode=2 &amp; enable_tvout=1بخاطر بروز همین مشکل، توصیه کردم که از نصب به روش noob خودداری کنید. اگر حوصله دارید و قصد استفاده حرفه ای از رزبری رو دارید حتما این بخش رو با دقت بخونید.مشکل دوم: عدم خروجی صدا با کابل micro HDMIرزبری پای ۴ دو پورت خروجی micro HDMI داره، برای این رزبری که من دارم ازش استفاده میکنم، پورت micro hdmi که نزدیک به پورت تغذیه پای۴ هستش، هم صدا داره هم تصویر اما پورت دورتر صدا نداره!!!اینکه چرا یه پورت micro hdmi صدا نداره رو نمیدونم و چون اون یکی پورت مشکلی نداره و از همون پورت استفاده میکنم، یادم رفته که برم دنبال حل این مورد. هرورقت این مشکل رو حل کردم، این قسمت رو کامل میکنم. اگر هم شما قبلا این مورد رو برطرف کردید، حتما تو قسمت کامنت‌‌ها راه حل رو بیان کنید.اضافه کردن زبان فارسیخب طبق معمول همه سیستم‌ عاملها زبان فارسی بطور پیشفرض فعال نیست. برای اضافه کردن زبان فارسی به رزبری طبق مراحل زیر پیش برید:Right click on the panel and choose Add/Remove Panel ItemsClick AddClick &#x27;Keyboard Layout Handler&#x60;Click CloseRight click on the flag that appears on the panelChoose &#x27;Keyboard Layout Handler Settings&#x27;Uncheck Keep system layoutsAdd the layouts you need and change the toggling keycombo to your likingاما اینجا یه ایراد خیلی بزرگ هستش!!!! هردفعه که رزبری بوت میشه،‌این تنظیماتی که انجام دادید حذف میشن و دوباره باید زبان فارسی رو طبق همین مراحل اضافه کنید.(برای من که اینجوری هستش) این دومین مشکل از کار با رزبین که من هنوز دنبال رفعش نرفتم. راه اندازی openVPN اگر مثل من openvpn رو نصب و کانفیگ کردید و حتی کاملا درست هم اجرا شد ولی نتونستید از فیلترنت عبور کنید احتمال زیاد مشکل از DNS هستش. برای حل این مورد، این سایت رو بخونید. بطور خلاصه باید DNS server رو تغییر بدیم. طبق مراحل زیر پیش برید:sudo nano /etc/dhcpcd.confreplace this line: static domain_name_server = 8.8.4.4  8.8.8.8 بقیه جزئيات کار با رزبینتا اینجا کانفیگ‌‌ و تنظیمات اولیه رو انجام دادیم. ولی برخی جزئیات هستش که برای همه یکسان نیست. اولین مورد رزولشن رزبین هستش. یه مشکل جالبی که وجود داره اینه که باید با رزولشن و کانفیگ های ویدیو رزبین خیلی بازی کرد تا رزولشن مناسب تلوزیون/مانیتور خودتون رو پیدا کنید. چون من رزبری رو به دو نمایشگر متفاوت وصل میکنم اونقدر قدرت مانور روی این مورد ندارم. پس حتما خودتون اون بخش کانفیگ ویدیو که در بالا توضیح داد بخشیش رو، کاملا بررسی کنید.رزبری پای کارت گرافیک نداره، پس خیلی منطقی هستش که اگر کارهای گرافیکی مثل پخش ویدیو 4K رو انجام بدیم، گرمای شدیدی ایجاد میشه. پس حتما وصل کردن فن رو جدی بگیرید. در این مورد هم دستمون خیلی بازه. میتونیم فن‌های مختلف و تعداد متفاوت روی برد نصب کنیم. این موضوع تماما به گرمای ایجاد شده و خلاقیت خودمون بستگی داره. پین ‌‌های برد رزبری پای۴ خروجی برق ۵ولت دارند. پس دقت کنید حتما فن ۵ولت تهیه کنید.(اگر سرچ کنید متوجه میشید که تو دنیا افرادی فن ۱۲ولت وصل کردن و مشکلی ندارند ولی من فن ۱۲ولت وصل کردم اما کار نکرد!! پس ریسک نکنید و فن ۵ولت تهیه کنید)نحوه اتصال پین‌های فن به برد رزبری پای ۴  (قرمز برق ۵ولت و سیاه زمین میباشد)البته تهیه کیس رو فراموش نکنید. در این عکس بالا از کیس با قابلیت نصب فن استفاده نشده.قدرت و کیفیت وایرلس رزبری مناسبه. فاصله رزبری از مودم من تقریبا ۵ متر هستش و این نکته رو هم بگم که مودم تو پارکینگ هستش!! هیچ مشکلی هم در این مورد ندارم. هم سرعت و هم پایداری اتصال، خوبه.</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Sun, 31 May 2020 21:11:49 +0430</pubDate>
            </item>
                    <item>
                <title>ساخت ایمیل برای دامین دلخواه</title>
                <link>https://virgool.io/@majidpv/httpsvirgooliomajidpv%D8%B3%D8%A7%D8%AE%D8%AA-%D8%A7%DB%8C%D9%85%DB%8C%D9%84-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AF%D8%A7%D9%85%DB%8C%D9%86-%D8%AF%D9%84%D8%AE%D9%88%D8%A7%D9%87-pdg9c6cwyl7e</link>
                <description>در مواقعی که شرکت‌ها و یا افراد حقیقی تصمیمی برای راه‌اندازی سایت ندارند اما نیاز دارند تا ایمیل یا ایمیل‌هایی را با نام خودشان یا شرکتشان داشته باشند؛ و نیز کسب‌وکارهای کوچک که ساخت ایمیل سرور برای آنان منفعتی ندارد، می‌توان اقدام به خرید سرویس ایمیل نمود. جدای از موارد بالا، ساخت ایمیل سرور نیاز به دانش و توانایی فنی بالایی دارد. استفاده از تکنولوژی‌‌ها برای ساخت ایمیل سرور و بروز نگه‌داشتن سرور در کنار مشکلات امنیتی، همه و همه استفاده از یک خدمات دهنده ایمیل اختصاصی را انتخابی معقول می‌کند.شرکت‌های خدمات دهنده ایمیل اختصاصی اندک هستند و اغلب آنان غیررایگان و یا دسترسی ایران را مسدود کرده‌اند. یکی از بهترین شرکت‌ها Zoho می‌باشد، که هم رایگان و هم مناسب برای دسترسی از داخل ایران است.در این آموزش به بررسی روند ساخت ایمیل info@yourdomain با استفاده از خدمات zoho می‌پردازم.قدم اول ثبت دامین برای ساخت ایمیل اختصاصی، داشتن یک domain الزامی است. در ایران برای ثب domain می‌توان از سایت‌های مختلفی که این امکان را فراهم می‌کنند استفاده کرد، اما در هرصورت باید برای ثبت دامنه ir. حتما در nic.ir حساب کاربری داشته‌باشیم. توجه داشته باشید که برای ثبت نام در این سایت باید تمامی اطلاعات هویتی خود را وارد کنید!!! به همین منظور مستقیما از سایت nic.ir دامنه موردنظر را ثبت می‌کنیم. مرجع اصلی ثبت دامنه ir. در ایران،‌ سایت مذکور میباشد.پس از ثبت نام و ورود به سایت ایرنیک،‌ از منو دامنه‌ها،‌ گزینه ثبت دامنه را انتخاب کنید. در صفحه باز شده، دامنه دلخواه را وارد کنید و گزینه بررسی موجود بودن دامنه را بزنید.ثبت دامنه دلخواه در سایت nic.irدرصورتی که دامنه مجاز به ثبت باشد وارد مرحله بعدی میشوید. در صفحه بازشده ابتدا مدت زمانی که می‌خواهید دامنه برای شما ثبت شود را انتخاب کنید( قابل تمدید در پایان مهلت) سپس گزینه خودم برای سایر سوالات را انتخاب کنید. رابط اداری، فنی و مالی مربوط به شرکتها می‌باشد. در انتها گزینه بازنگری را بزنید.در مرحله آخر، صفحه‌ای باز می‌شود که اطلاعات وارد شده در مراحل قبلی را نشان می‌دهد. درصورتی که اطالاعات وارد شده صحیح می‌باشد، گزینه اقدام به ثبت را فشار دهید. در انتها باید هزینه مشخص شده را پرداخت نمایید. توجه کنید درصورتی که هزینه را پرداخت نکنید، دامنه موردنظر به مدت ۲۴ساعت برای شما بصورت رزرو باقی می‌ماند و در این فرصت می‌توانید با وارد شدن به سایت ایرنیک، گزینه سبدخرید،‌ ثبت دامنه خود را نهایی کنید. در غیراین صورت دامنه از رزرو شما خارج می‌شود.قدم دوم DNSتقریباً هر آن چه که بر روی اینترنت وجود دارد با یک درخواست DNS (Domain Name System) شروع می‌شود. DNS کتابچه‌ی آدرس‌های اینترنتی است. هنگامی که بر روی یک لینک کلیک می‌کنید، اولین کاری که دستگاه شما انجام می‌دهد مراجعه به DNS است. برای آگاهی کامل از نحوه عملکرد DNS، این آموزش را مطالعه بفرمایید.لازم به ذکر است در این آموزش و ایمیل مورد استفاده ما، از هاست استفاده نکرده‌ایم. بسیاری از شرکت‌های خدمات دهنده هاست، خود نیز خدمات DNS را ارائه می‌کنند.برای تنظیمات DNS مربوط به دامنه خود، نیاز داریم تا ازیک خدمات دهنده DNS استفاده کنیم. در این آموزش از شرکت arvancloud استفاده میکنیم. پس از ثبت نام و ورود به سایت ابرآروان، از نوار کناری، منوی DNS را انتخاب کنید. ابتدا دامنه ثبت شده از مرحله قبل را باید در این قسمت وارد کنیم، به همین منظور افزودن دامنه جدید را انتخاب کنید. بعد از وارد کردن دامنه، نتظیمات DNS برای شما نشان داده می‌شود.ثبت دامنه در سایت ابرآرواندر این مرحله، بدون ایجاد هرگونه تغییر تنظیمات، مراحل ثبت را ادامه دهید تا دامنه، در لیست دامنه‌های شما ثبت شود. در انتها باید صفحه‌ای مشابه عکس زیر نمایش داده شود.مرحله پایانیبرای اینکه دامنه شما از سرتاسر دنیا قابل دسترسی باشد، نیاز است تا در تمامی سطح‌های DNS ثبت شود. این کار چنددقیقه زمان میبرد. متاسفانه برای دامنه‌های ir. گاهی اوقات چندساعت زمان می‌برد. شما میتوانید با استفاده از intoDNS.com تغییر/تایید DNS دامنه خود را چک کنید.قبل از ادامه نیاز است با مفهوم record آشنا شوید. رکورد DNS به عنوان دستورالعمل برای سرور DNS عمل میکند. در این آموزش تنها به توضیح مختصر سه رکورد اکتفا کرده‌ام.  بزودی آموزش کامل رکوردهای DNS را نیز منتشر می‌کنم. پیشنهاد می‌کنم درصورتی که با رکوردهای DNS آشنایی ندارید، قبل از اقدام به ساخت ایمیل اختصاصی و تظیمات مرتبط، حتما اطلاعات کافی از رکوردها کسب کنید.رکورد MX: کلمه MX مخفف Mail Exchanger است، که مسئول شناسایی ایمیل سرورها برای دامین است. زمانی که شما ایمیلی به آدرس user@mydomain.ir ارسال می‌کنید، ایمیل سرور شما باید ابتدا دنبال رکوردMX برای mydomain.com بگردد که متوجه شود کدام ایمیل سرور آنرا مدیریت می‌کند. ( برفرض میتواند abcd.mydomain.ir یا هرآدرس دیگری باشد). این رکورد شامل اطلاعات سرورهای ایمیل برای دامنه و مقدار اولویت سرورها است. درواقع DNS به کمک MX record یک ایمیل سرور را به یک دامنه مرتبط می‌سازد.رکورد SPF: مخفف Sender Policy Framework است. پس از ارسال ایمیل، قبل و بعد از دریافت ایمیل توسط ایمیل سرور مقصد، سروری با نام Sender ID Framework مسئول برسی اعتبار سرور ارسال کننده ایمیل است. رکورد DKIM: مخفف DomainKeys Identified Mail است. یک سیستم تصدیق هویت ایمیل است که جهت شناسایی حقه‌های پست الکترونیکی طراحی شده است. این مکانیزم امکانی را فراهم میکند که میل سرورهای گیرنده  ایمیل بررسی کنند که ایمیل دریافتی از Domain مربوطه توسط مدیریت دامنه مجاز و تائید شده باشد. یک امضای دیجیتال شامل پیغامی است که میتواند توسط دریافت کننده از طریق Public Key امضا کننده که در DNS دامنه قرار  داده شده است اعتبار سنجی شود.رکورد TXT: رکورد Text جهت اضافه کردن  توضیحات بکار می رود. از مهمترین کاربردهای این رکورد، استفاده در سیستم  تصدیق ایمیل SPF (Sender Policy Framework) می باشد. قدم سوم Zohoاین سایت پلن‌های مختلفی برای ایجاد ایمیل اختصاصی دارد که تنها یک پلن آن رایگان است. توجه داشته باشید پلن رایگان zoho تنها از یک دامنه پشتیبانی می‌کند. برای استفاده از خدمات سایت نیاز به ثبت نام دارید. برای اینکار باید وارد دامنه zoho/mail بشوید، گزینه ثبت نام رایگان( sign up for free) را بزیند.در انتهای صفحه باز شده، پلن رایگان zoho قرار دارد که باید این پلن را انتخاب کنید.انتخاب پلن رایگاندر صحفه بازشده برای ثبت نام، ابتدا باید نام دامنه‌ خودتان( دامنه ثبت شده در قدم اول) را وارد کنید.قبل از وارد کردن دامنه مطمئن شوید که دامنه شما در DNS server ثبت شده باشد. شما میتوانید با استفاده از intoDNS.com تغییر/تایید DNS دامنه خود را چک کنید.درصورتی که نام دامنه صحیح وارد شده باشد و مشکلی نباشد، صفحه‌ای باز می‌شود که باید اطلاعات خودتان را وارد کنید. توجه داشته باشید که در این صفحه آدرسی که برای Administrator Account وارد می‌کنید به عنوان ایمیل حساب کاربری شما در خدمات zoho مورد استفاده قرار می‌گیرد. و ایمیلی که برای Contact Email وارد می‌کنید به عنوان ایمیل پشتیبان و متصل اکانت شما در سایت zoho قرار می‌گیرد.توجه کنید در عکس زیر، دامنه وارد شده برای این آموزش test.ir می‌باشد.در مرحله بعدی باید شماره تلفن خود را تایید کنید.در اولین ورود به اکانت خود، برای امنیت بیشتر باید گزینه‌ای را جهت ارسال کد تایید ورود ثبت کنید. پس از تایید گزینه انتخاب شده وارد اکانت خود می‌شوید.در این مرحله باید دامنه خود را تایید کنید.در ابتدا از لیست DNS Manger گزینه Others را انتخاب کنید. سپس با انتخاب یکی از سه رکورد پیشنهادی و مطابق مراحل گفته شده، مقادیر رکورد را در تنظیمات رکورد DNS ابرآروان وارد کنید.در این آموزش از رکورد TXT استفاده شده است.برای وارد کردن مقادیر در DNS ابرآروان وارد حساب کاربری خود شوید. از نوار کناری گزینه DNS را انتخاب کنید. از نوار بازشده گزینه مدیریت رکوردها را انتخاب کنید.از لیست نوع رکورد، رکورد TXT را انتخاب کنید. مقادیر رکورد را مطابق مقادیر گفته شده در zoho وارد کنید و در انتها گزینه افزودن را بزنید. شما باید رکورد جدید را در لیست رکوردهای خود ببینید.برای تایید نهایی دامنه در zoho باید پس از اضافه کردن رکورد در ابرآروان، گزینه Verify by TXT را بزنید.توجه کنید پس از افزودن رکورد در ابرآروان، ممکن است تایید توسط zoho با کمی تاخیر انجام شود.مقادیر رکورد TXT برای تایید دامنهمرحله بعدی افزودن کاربر است. بصورت پیش فرض Super Administrator، همان کاربری است که در برای اولین بار وارد حساب کاربری شده است.(همان Administrator Account که در مرحله ثبت مشخصات وارد کردید) در صورتی که کاربر جدیدی در این مرحله ایجاد کنید، این کاربر به عنوان Super Administrator درنظر گرفته می‌شود.ساخت گروه را فعلا درنظر نگیرید و از آن رد بشوید.برای شروع بکار ایمیل و دریافت ایمیل از دیگران، در مرحله Configure Email Delivery باید در DNS manger یک کورد MX تعریف کنیم. همانند مرحله تایید دامنه وارد قسمت مدیریت رکوردهای DNS ابرآوران بشوید و مقادیر مشخص شده را برای ایجاد رکورد جدید MX وارد کنید. در آخر گزینه MX Lookp را بزنید.توجه کنید پس از افزودن رکورد در ابرآروان، ممکن است تایید توسط zoho با کمی تاخیر انجام شود.مرحله بعدی افزودن رکورد SPF و DKIM می‌باشد. برای افزودن رکوردها مقادیر مشخص شده را در برای ایجاد رکورد TXT در DNS Manger خود( در اینجا ابرآروان) وارد کنید.مقادیر رکورد SPFمقادیر رکورد DKIMدر پایان این مرحله و تایید شدن این دو رکورد، ایمیل شما ایجاد و آماده استفاده می‌‌باشد.(متاسفانه بدلیل قطع شدن اینترنت و خاموش کردن لب تاپ، گرفتن اسکرین شات از دو مرحله آخر را فراموش کردم. دو مرحله آخر برای شروع استفاده الزامی ندارد و بعدا در Control Panel اکانت خود می‌توانید تنظیمات بیشتری انجام دهید.)در آخر و در قسمت کنترل پنل اکانتتان باید با تصویری مشابه تصویر زیر مواجه شوید. درصورتی که هرکدام از چهار مورد تیک سبز نداشته باشد، یعنی مراحل قبل بطور صحیح انجام نشده است و نیاز است با کلیک کردن روی همان مورد مجدد تنظیمات مرتبط را انجام دهید.برای رفتن به صفحه کنترل پنل، مطابق شکل زیر، از صفحه ایمیل خود My Profile را انتخاب کرده و از نوار باز شده Control Panel را بزنید.ایمیل اختصاصی شما در zoho برای اضافه کردن ایمیل‌های بیشتر مشابه info@yourdomain باید در کنترل پنل وارد قسمت User Details شوید و تب Add User را بزنید. در این قسمت اطلاعات مربوط به کاربر جدید را وارد کنید. برای امنیت بیشتر، تیک اجبار به تغییر رمز عبور پس از اولین ورود کاربر، را برندارید.اضافه کردن کاربر(ایمیل) جدیدبرای ورودی و دسترسی به هرکدام از ایمیل‌ها باید با رمز عبور همان ایمیل وارد سایت zoho شوید. توجه داشته باشید که تنها   Super Administrator امکان مدیریت تمامی کاربرها را دارد.برای مدیریت تمامی یوزرهای خود نیز میتوانید در تب User Details  ، تمامی یوزرها را ببینید. توجه داشته باشید که تنها در حساب Super Administrator این امکان وجود دارد.لیست تمامی کاربران  در پلن رایگان zoho امکان ایجاد حداکثر 25 ایمیل وجود دارد.امیدوارم این آموزش با تمامی کمبودها و ایراداتش ، مناسب و راهنمای شما باشد.</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Sun, 12 Apr 2020 03:11:57 +0430</pubDate>
            </item>
                    <item>
                <title>فصل سوم: سیاست‌های ناظر به مهار تورم(بخش اول)</title>
                <link>https://virgool.io/@majidpv/%D9%81%D8%B5%D9%84-%D8%B3%D9%88%D9%85-%D8%B3%DB%8C%D8%A7%D8%B3%D8%AA%D9%87%D8%A7%DB%8C-%D9%86%D8%A7%D8%B8%D8%B1-%D8%A8%D9%87-%D9%85%D9%87%D8%A7%D8%B1-%D8%AA%D9%88%D8%B1%D9%85%D8%A8%D8%AE%D8%B4-%D8%A7%D9%88%D9%84-nmja0ewsyghu</link>
                <description>فرهنگ اقتصادی حاکم بر افکار عمومی در ایران چپ گرایانه و مداخله جویانه است. عموم مردم متصور هستند که دولت در هر چیز باید مداخله کند. همین که تورم ایجاد می‌شود همه انتظار دارند که دولت ستاد تعزیرات حکومتی را فعال کند. چنین تقاضاهایی به شکل فشار سیاسی حاکمیت را به سمت‌وسوی غلط می‌کشاند.امید است با مطالعه این فصل درک بهتری نسبت به غلط بودن روال بالا پیدا کنیم.معرفی مفاهیم پولیحجم پول: میزان اسکناس و مسکوک در دست اشخاص به اضافه سپرده‌های دیداری بخش خصوصی نزد بانک‌ها را حجم پول گویند که آنرا با M1 نشان می‌دهند.شبه پول: مجموع وجوه در حساب‌های پس‌انداز و مدت‌دار را گویند. از این جهت شبه پول می‌گویند که بلافاصله قابل نقد شدن نیستند.نقدینگی: مجموع پول و شبه‌پول را نقدینگی گویند و آنرا با M2 نشان می‌دهند.پایه پولی: منابعی که اگر در اختیار بانک‌های تجاری قرار گیرد، می‌تواند با استفاده از آن به بسط حجم پول بپردازند.منابع پایه پولی: پول نقد نزد مردم، خالص دارایی‌های بانک مرکزی، خالص بدهی دولت به بانک مرکزی، بدهی بانک‌ها به بانک مرکزی و خالص سایر دارایی ها و بدهی‌ها.ضریب فزاینده پولی: ضریبی که نشان می‌دهد نظام بانکی چند برابر سپرده‌ای که در اختیار داشته، پول بانکی خلق کرده است.سرعت گردش پول: تعداد دفعاتی که یک حجم پول ثابت در درون نظام اقتصادی، طی یک دوره زمانی، مشخص تبدیل به درآمد می‌گردد.تعریف تورمطبق تعریف،‌تورم عبارت است از افزایش سطح عمومی قیمت‌ها.اگر قیمت چند کالا افزایش و همزمان قیمت چند کالای دیگر کاهش یابد، بطوری که سطح عمومی قیمت‌ها تعییر نکند، تورمی وجود نخواهد داشت. در همه اقتصادها چنین تغییر و تحولاتی وجود دارد. این تغییرات لزوما پدیده‌ای منفی نیست؛ بلکه بر پویایی و انعطاف بازارها دلالت دارد.اندازه گیری تورمسطح عمومی قیمت‌‌ها از طریق اندازه گیری قیمت‌های خرده فروشی یا شاخص هزینه زندگی محاسبه می‌گردد. بانک مرکزی اقلام بسیار متنوعی را که در زندگی روزمره یک خانوار مصرف می‌شود‌(حدود سیصد قلم کالا و خدمات) را فهرست می‌کند. میانگین قیمت نقاط مختلف شهرها برای یک کالای خاص،‌ قیمت آن کالا است.معمولا نرخ اجاره مسکن، در شاخص قیمت مصرف کننده، حضور دارد. به همین دلیل با اینکه قیمت مسکن ممکن است افزایش شدیدی داشته باشد ولی نرخ تورم کمتر از آن اعلام می‌گردد. چرا که نرخ اجاره مسکن معمولا به اندازه قیمت مسکن رشد نمی‌کند. متاسفانه برخی از مردم از این مسئله دچار سوبرداشت شده‌اند که مسئولین تهیه آمار تورم، سعی در کم نمایی این متغیر اقتصادی دارند؛ درحالی که چنین نیست. استاندارد مطالعه و اندازه گیری نرخ تورم در همه کشورهای دنیا، چنین روالی دارد.تورم در ایران و جهانعملکرد ایران در مهار تورم در طی دهه چهل شمسی بسیار مثبت بوده است. اما پس از وقوع شوک قیمت نفت در دهه پنجاه و افزایش ناگهانی درآمد نفت، تورم به شکل مزمنی در اقتصاد ایران باقی ماند. برخلاف آنچه عموم مردم می‌پندارند، نرخ تورمدر ایران خیلی شدید نبوده و طی سالهای گذشته جز در سالهای ۱۳۷۳-۷۴ و سالهای ۹۱ و ۹۲، نرخ تورم همواره کمتر از ۳۰٪ بوده است. عملکرد ایران در کاهش تورم، به‌مراتب ضعیفتر از کشورهایی بوده است که از لحاظ تورم مشکلات حاد داشته‌اند. تمام کشورهایی که گرفتار تورم سه رقمی یا چهاررقمی بوده‌اند، توانسته اند نرخ تورم خودرا تک رقمی کنند؛ اما متاسفانه تورم در ایران هنوز تک رقمی نشده است.به تعبیر دکتر نیلی، همانگونه که در علم طب می‌گویند بیماری وبا به‌کلی ریشه کن شده، در علم اقتصاد کلان نیز معضل تورم به کلی ریشه‌کن شده‌است و روش درمان این معضل،‌کاملا آشکار است.(نیلی، ۱۳۸۴)دکتر نیلی دلیل ناکامی ایران در مهار تورم را ملاحظات اقتصاد سیاسی می‌داند. از یکسو مردم و نمایندگان آنها مطالبات زیادی دارند و فشار زیادی بر دولت وارد می‌آورند تا دولت تعهدات بیشتری از توانش را پیرا شود. از سوی دیگر، دولت(اعم از مجریه و مقننه) هم برای ایمکه نزد مردم مقبول باشد و بتواند از مردم رای بگیرد،‌تمایل دارد که پول بیشتری از توان دولت خرج کند. جمع این دو عامل موجب‌ می‌شود که دولت دچار کسری بودجه شود و این کسری بودجه، به شرحی که بعدا خواهد آمد، به تورم منتهی می‌گردد.شکل صفحه ۷۹ کتابپیامدهای تورمبنظر می‌رسد که برای توده مردم، تورم در درجه اهمیت اول را دارد؛ اما برای اقتصاددانان که به علت و ریشه مسائل توجه دارند، تورم در درجات بعدی اهمیت است. شاید یکی از دلایل این امر،‌آگاهی اقتصاددانان از پدیده شاخص‌بندی است.مهمترین پیامد منفی تورم، ایجاد بی‌ثباتی در اقتصاد است. ثبات یکی ازمهمترین پیش شرط‌های رشد بنگاه‌های اقتصادی است؛ چرا که تنها در شرایط باثبات، امکان پیش‌بینی آینده میسر می‌گردد تا درست و غلط بودن سرمایه گذاری مشخص شود. دیگر پیامد منفی تورم،‌روی آوردن مردم برای خرید کالاهی بادوام نظیر زمین، مسکن و خودرو است. علت این امر آنست که نگه داشتن پول در شرایط تورمی، به معنی کاهش قدرت خرید و کاهش ارزش آن است. یکی از دلایلی که قیمت مسکن در ایران بالاست این است که مردم به مسکن به عنوان یک فرصت سرمایه‌گذاری و یک سپر در برابر تورم و راهی برای مقابله با کاهش ارزش پس اندازشان نگاه می‌کنند. عدم درنظر گرفتن نرخ تورم در قراردادها، معضل بسیار رایجی است. این مسئله شاید بنظر خیلی ساده بیاید، ولی در عمل مشاهده می‌گردد که نه تنها محاسبات توده مردم بلکه۷ بسیاری از اقتصاد خوانده‌ها نیز به دلیل نادیده گرفتن تورم مخدوش می‌گردد. برخی می‌گویند ادعای اینکه افزایش قیمت بنزین، موجب کاهش مصرف آن خواهد شد، ادعایی صحیح نیست زیرا در گذشته اینگونه نبوده. در پاسخ باید گفت که آیا افزایش قمیت بنزین بیشتر از نرخ تورم بوده یا کمتر؟ اگر کمتر باشد که معمولا این گونه است، آنگاه عدم کاهش مصرف بنزین و افزایش آن، امری قابل انتظار است و مثال نقضی برای ادعای گفته‌شده محسوب نمی‌شود.تورم موجب می‌شود که میان مقادیر اسمی و واقعی تفاوت ایجاد شود و این خود در محاسبات اقتصادی، به بروز اشتباهات متعدد می‌انجامد. با یک مثال ساده میتوان این غفلت رایج را آزمود. فرض کنید خانه‌ای به قمیت 100000$ با استفاده از وامی که بهره سالانه آن 7٪ است خریده اید و می‌توانید این خانه را سالی 6000$ اجاره دهید. حال اگر نرخ تورم 2٪ باشد آیا نگه داری این خانه بمدت یکسال عقلانی است؟( ابتدا جواب این سوال را خودتان بدهید سپس ادامه متن را بخوانید) اکثر افراد میگویند 7درصد 100000$ معدل 7000$ میشود که کمتر از 6000$ است. لذا از انجام اینکار ضرر می‌کند و بهتر است که خانه را به فروش رساند. در مقابل این استدلال میتوان گفت که آن دو درصد تورم روی قیمت خانه تاثیر دارد و فرد از نگه داری خانه به مدت یکسال 2000$ سود می‌کند. لذا در مجموع 1000$ به سودش خواهد بود؛ به عبارت دیگر نرخ بهره اسمی وام مذکور ۷٪ ولی نرخ بهره واقعی ۵٪ است.این مثال را دکتر هادی صالحی اصفهانی در کلاسهای درس خود مطرح می‌کند. بنابر اظهار نظر ایشان معمولا ۸۰٪ دانشجویان لیسانس و ۵۰٪ دانشجویان فوق لیسانس به این سوال جواب غلط می‌دهند. در عین حال باید یادآور شد که فرض ضمنی این مسئله این است که نرخ تورم در قیمت مسکن، منعکس می‌شود.تورم دارای اثرات بازتوزیع ثروت و درآمد در جامعه است. در شرایط تورمی، کسانی که درآمد ثابت دارند معمولا متضرر می‌شوند.  در شرایط تورمی سیاست گذاری‌های غلط دولت تشدید می‌گردد علت این امر آنست که در فضای تورمی فشار افکار عمومی بر دولت تشدید می‌شود و سیاست گذاران اقتصادی و سیاسی برای اتخاذ سیاست‌‌های عوام فریبانه و مضر دچار وسوسه می‌شوند. یک نمومه رایج از چنین سیاست‌هایی، سیاست کنترل قیمت است که در ادامه به معرفی و نقد آن خواهیم پرداخت.در اینجا ضروری است تا تفکیکی میان تورم پیش بینی شده و تورم پیش بینی نشده قائل شویم. معمولا اگر تورم از پیش مشخص و پیش بینی شده باشد،‌هزینه های آن بسیار کمتر می‌شود. چرا که مردم از طریق شاخص بندی میتوانند خود را با شرایط تورمی تعدیل و سازگار کنند.در مقابل پدیده تورم که نشانگر رشد قیمت‌هاست، پدیده تورم منفی قرار دارد که به معنی کاهش سطح عمومی قیمت‌هاست. خیلی از مردم تورم منفی را ایده‌آل و یک هدف بزرگ اقتصادی می‌دانند؛ درحالی که اقتصاددانان با توجه به منافع و جوانب کل اقتصاد، این پدیده را خطرناک و مذموم قلمداد می‌کنند. برای توضیح بیشتر در باب تورم منفی به این سایت مراجعه کنید.نقش نظام بانکی در اقتصادیکی از مهمترین کارکردهای نظام بانکی، خلق پول بانکی است. درگذشته سکه‌های طلا و نقره به عنوان وسیله مبادله مورد استفاده قرارمی‌گرفت. به تدریج صرافی‌های معتبری ایجاد شدند که مردم سکه‌های خودرا به آنها می‌سپردند و ازآنها تنها دست خطی می‌‌گرفتند. این دست در معاملات، مبادله میشد و افراد برای خریدوفروش، بجای حمل انبوهی از سکه، صرفا دست خط مذکور را مبادله می‌کردند. این دستخط ها به تدریج شکل اسکناس به خود گرفت. به مرور زمان، صرافان متوجه شدند که همه امانت‌ گذاران بطور همزمان برای پس گرفتن سکه‌‌های خود ه آنها رجوع نمیکنند و همواره مقادیری سکه و طلا در اختیار آنها بصورت معطل باقی می‌ماند. از سوی دیگر،‌آنها دریافتند وقتی سکه‌ای در اختیار آنهاست میتوانند آنرا به چندین نفر قرض دهند و از محل این قرض دهی، بهره دریافت کنند؛ چرا که به‌جای تحویل سکه‌های موجود انبار، کافی است صرفا کاغذهای بیشتری منتشر سازند. در عین حال صرافان با زیرکی و احتیاط، آن مقدار سکه طلا نگه‌داری می‌کردند که بطور روزمره افراد برای دریافت آن مراجعه  می‌کردند.این اقدام ساده که اساس فعالیت بانکداری امروزی را رقم می‌زند، عملیات خلق پول خوانده می‌شود. امروزه بانک‌ها نیز دست به خلق پول می‌زنند. آنها بر حسب منابعی که در اختیار دارند میتوانند از طریق اعطای اعتبار، خلق پول نمایند. این پول را پول بانکی می‌گویند.نقش بانک مرکزی در اقتصادحال که کارکرد بانک‌ها در خلق پول روشن شد، بانک‌ها تا چه حد می‌توانند در فعالیت خلق پول نقش داشته باشند؟ درگذشته گاه صرافی‌ها و بانکهای اولیه، بشکل بی‌‌رویه اقدام به خلق پول می‌کردند. به همین دلیل وقتی مشتریان آنها به هردلیلی رای پس گرفتن سکه‌های خود و پس‌دادن دستخط‌های مذکور مراجعه میکردند، بحران بانکی ایجاد میشد. تکرار فجایعی از این دست بانک‌ها را به این فکر واداشت که محدودیت‌هایی ایجاد کنند. یک نهاد لازم است تا این محدودیت‌ها را مدیریت کند و نیز بر اجرای آن نظارت داشته باشد؛ با تپجه به این ضرورت بانک‌های مرکزی ایجاد شدند.همچنین بانکها موظفند درصدی از سپرده‌ها که اصطلاحا &quot;نسبت سپرده قانونی&quot; خوانده می‌شود را در اختیار بانک مرکزی قرار دهند، بانک مرکزی بابت این منابع معمولا بهره‌ای پرداخت نمی‌کند. حجم این منابع مالی در حدی است که اگر مشکلی برای بانک بوجود آید، بانک مرکزی بتواند به بانک مذکور کمک کند.(توجه داشته باشید که همواره توان مالی بانک‌ها کمتر از تعهداتشان است)ابزارهای سیاست‌گذاری پولیبانک مرکزی به‌جای اینکه به‌شکل دستوری و مستقیم بخواهد نرخ بهره را تغییر دهد، تلاش می‌کند از طریق ابزارهاییی که در اختیار دارد بر نرخ بهره تاثیر بگذارد.۱. تغییر نسبت ذخیره قانونی بانک‌ها: طبیعی است هرچه نسبت مذکور بیشتر تعیین شود، منابع کمتر در اختیار بانک‌ باقی می‌ماند تا با آن خلق پول کند. برای مثال اگر نسبت مذکور ۲۰درصد قرار داده شود و یک بانک دارای ۱۰۰۰﷼ سپرده باشد، مشخص است تنها ۸۰۰﷼ آن برای خلق پول در اختیار بانک است. اگر بانک این مقدار را وام دهد، وام گیرنده آنرا خرج می‌کند و آن پول می‌چرخد تا نهایتا در بانکی دیگر سپرده‌گذاری می‌شود. بانک دوم نیز اگر ۸۰درصد آن مقدار پول یعنی ۶۴۰﷼ را وام دهد ..... . می‌ةوان این فرآیند را ادامه داد تا جایی که دیگر چیزی برای وام دادن باقی نمانده باشد. اگر کل سپرده‌ها و کل ذخایر قانونی را باهم جمع بزنیم به عددی به‌مراتب بزرگتر از ۱۰۰۰﷼خواهیم رسید. در این مثال این عدد، ۵۰۰۰﷼ است که ۵ برابر اصل مبلغ می‌باشد. در اینجا این عدد ۵ اتفاقی بدست نمیاده بلکه معکوس نسبت سپرده قانونی است.۲. عملیات نرخ تنزیل مجدد: نرخ تنزیل،‌نرخ بهره‌ای است که بانک مرکزی بابت وام‌هایی که در اختیار بانک‌های تجاری قرار می‌دهد، مطالبه می‌کند. باتوجه به اینکه این نرخ را بانک مرکزی معمولا خیلی بالا تعیین می‌کند، بانک‌ها را مجاب می‌کند تا محتاطانه ‌تر رفتار کرده و در مدیریت منابع خو دقت کنند تا مجبور نشوند از بانک مرکزی وام بگیرند.۳. عملیات بازار باز: اعمال این ابزار منوط به وجود اوراق قرضه در اقتصاد است. در سالهای بعد انقلاب بدلیل ربوی دانستن این اوراق، انتشار اوراق قرضه متوقف گردید. طبیعتا بانک مرکزی نیز از یکی از مهمترین و رایج ترین ابزارها‌ی‌ سیاست گذاری پولی محروم شد. بدلیل فقدان این سازوکار پولی، تنها اشاره می‌گردد که اوراق قرضه، اوراق بهادری است که بر اساس درصدی که بر روی آن قید شده به دارنده خود سالانه سود پرداخت می‌کند.وقتی بانک مرکزی شروع به خرید اوراق قرضه می‌کند، پول موجود در بانک مرکزی را به درون جامعه می‌فرستد و در عوض اوراق قرضه نگه‌داری می‌کند. در اینجا مکانسیم عرضه و تقاضا فعال است. وقتی پول در جامعه زیاد شد، قیمت آن یعنی بهرد در جامعه افت می‌کند. عکس آن وقتی است که بانک مرکزی شروع به فروش اوراق قرضه می‌کند.برخی تصور کرده‌اند که اوراق مشارکت، دارای همان کارکرد اوراق قرضه است؛‌درصورتی که این تصور نادرست است. اولا به دلیل الزام بانک مرکزی برای خریدوفروش اوراق مشارکت به قیمت اسمی، این اوراق ماهیتی متفاوت از اوراق قرضه پیدا کرده‌اند. در کشورهای دیگر وقتی بانک مرکزی اقدام به فروش اوراق قرضه می‌کند، پولی ناشی از این فروش را نگه‌میدارد و وارد فرآیند بانکی نمی‌کند؛ لذا نقدینگی را درجامعه کم کرده و کنترل می‌‌کند. اما وضیعت اوراق مشارکت کاملا متفاوت است، چرا که اوراق مشارکت برای جذب پس انداز مردم و هزینه کردن آن در پروژه‌های عمرانی در دست دولت یا شرکت‌های دولتی منتشر می‌شود. به تعبیر ساده‌تر، در مکانیسم فروش اوراق مشارکت، بخشی از نقدینگی جذب و در اختیار دولت قرار گرفته تا هزینه شود و نهایتا به جامعه برمی‌گردد؛ در حالی که در اوراق قرضه وضعیت به این شکل نیست؛ به ‌عبارت دیگر در ایران بانک مرکزی صرفا عامل فروش اوراق است، نه اینکه این اوراق، ابزاری برای مدیریت نقدینگی باشدنمودار بانک مرکزی ایرانتاثیرات سیاست پولیمهمترین هدف بانک مرکزی، ایجاد ثبات در اقتصاد از طریق کنترل تورم است. وقتی بانک مرکزی می‌بیند رشد اقتصادی خیلی بیشتر از توان اقتصاد شده است و کمبود منابع تولید، موجب بالارفتن هزینه‌‌ها شدهو این به افزایش تورم در اقتصاد ‌می‌انجامد، شروع به اعمال سیاست انقباضی می‌‌کند؛ یعنی می‌خواهد پول در جامعه کم شود تا رونق فعالیت‌های اقتصادی کاهش یابد. برای این منظور اوراق قرضه  را به فروش می‌رساند و در مقابل پول از جامعه دریافت می‌کند. با این اقدام، نقدینگی از سطح جامعه کم شده و نرخ بهره افزایش می‌یابد. با رشد نرخ بهره و کاهش نقدینگی، رشد اقتصادی و تورم کاهش می‌یابد. در مقابل وقتی اقتصاد در رکود قرار دارد و باید بیکاری کاهش یابد، بانک مرکزی شروع به خرید اوراق قرضه می‌کند. با این کار پول در جامعه زیاد شده و نرخ بهره کاهش می‌یابد. با کاهش نرخ بهره، افراد انگیزه کمتری برای پس انداز داشته و ترجیح می‌دهند تا مصرف خود از کالاها و خرید دارایی‌ها را افزایش دهند. افزایش مصرف و سرمایه گذاری، موجب افزایش تقاضا در کل اقتصاد می‌شود که اینن امر خود افزایش اشتغال و رشد اقتصادی به دنبال خواهد داشت. باید توجه داشت که این کاهش نرخ بهره و افزایش پول در جامعه، می‌تواند موجب فشارهای تورمی گردد. لذا بانک‌های مرکزی با وسواس و دقت زیادی در تلاش هستند تا اقتصاد از حالت رکود خارج شود، بدون اینکه موجب تشدید تورم شوند.فصل دوم کتاب اقتصاد برای همه با عنوان سیاست پولی</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Sat, 11 Apr 2020 23:52:36 +0430</pubDate>
            </item>
                    <item>
                <title>خلاصه کتاب اقتصاد برای همه(فصل دوم: سیسات پولی)</title>
                <link>https://virgool.io/@majidpv/httpsvirgooliomajidpv%D8%AE%D9%84%D8%A7%D8%B5%D9%87-%DA%A9%D8%AA%D8%A7%D8%A8-%D8%A7%D9%82%D8%AA%D8%B5%D8%A7%D8%AF-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%87%D9%85%D9%87%D9%81%D8%B5%D9%84-%D8%AF%D9%88%D9%85-%D8%B3%DB%8C%D8%B3%D8%A7%D8%AA-%D9%BE%D9%88%D9%84%DB%8C-o0q9ajltujpk</link>
                <description> فصل اول: سیاست‌های معطوف به رشد اقتصادیمقدمهمعمولا اقتصاد را به چهار بازار تقسیم می‌کنند: بازار محصول، بازار پول، بازار کار و بازار سرمایه. بانک مرکزی به تنظیم سیاست پولی و وزارت اقتصاد و دارایی(و نهادهای مشابه) به تنظیم سیاست مالی می پردازد. هدف بانک مرکزی عمدتا ایجاد ثبات(قیمتها) در اقتصاد تعریف می‌شود و گاه مدیریت نوسانات اقتصادی نیز به عنوان هدف دوم مشخص می‌گردد. مبارزه با تورم یکی از مهمترین وظایف بانک مرکزی است.در ایران سازمان میریت و برنامه ریزی بیش از وزرات اقتصاد در امر سیاست گذاری  اقتصادی و خصوصا سیسات مالی موثر است؛ چرا که بودجه کشور در این سازمان تهیه می‌شود.مفهوم نرخ بهرهاز آنجا که همه انسان‌ها، مصرف x مقدرا در زمان حال را به آینده ترجیح می‌دهند، حتما باید در آینده مقداری بیشتر از x به مصرف کننده پیشنهاد کرد تا وی از مصرف x مقدار در زمان حال منصرف گردد. این تفاوت، در واقع همان نرخ بهره است. نرخ بهره تفسیر دیگری به عنوان هزینه فرصت سرمایه نیز پیدا میکند.وجود تقاضا برای سرمایه مالی،‌مفهوم کمیابی سرمایه را به میان می‌آورد. طبیعی است هر عاملی که کمیاب باشد(منظور بی نهایت نبودن است) ، قیمت  می یابد و به این قیمت اصطلاحا نرخ بهره گفته می‌شود. نرخ بهره یا قیمت سرمایه مانند اکثر مفاهیم اقتصادی در اقتصاد مدرن بر اساس تعامل عرضه و تقاضا مشخص می‌گردد.عرضه در بازار سرمایه به مفهوم میزان وفور سرمایه است. هرچه در یک اقتصاد سرمایه بیشتر باشد، نرخ بهره کمتر خواهد بود. میزان کمیابی سرمایه تابعی از پس انداز است، هرچه درآمد ملی بیشتر و مصرف جامعه کمتر باشد، میزان پس انداز بیشتر خواهد شد.حال هرچه نرخ بالاتر باشد عاملین اقتصادی تمایل بیشتری خواهند داشت تا از مصرف حال خود کم کنند به امید مصرف بیشتر در آینده. از سوی دیگر، افراد از محل پس انداز خود درآمد بیشتری کسب می‌کنند. لذا انگیزه اینکه مصرف حال خود را افزایش دهند و بخش کمتری از درآمد خود را پس انداز کنند، افزایش میابد. این اثر دوم را اصطلاحا اثر درآمدی افزایش نرخ بهره گویند.  بنابراین افزایش نرخ بهره دو اثر متفاوت دارد و برای قضاوت باید به بررسی تجربی پرداخت که کدام یک بر دیگری غلبه می‌کند. بررسی های تجربی نشان می‌دهد میزان پس انداز عمومی با افزایش نرخ بهره تغییر نیافته و نسبت به تغییرات نرخ بهره، بی کشش است.قیمت تعادی سرمایهنرخ بهره همانند متغیر قیمت در اقتصاد، متغیری درونزا است و نمی‌توان از بیرون آنرا تعیین نمود. به شرحی که در فصل بعد گفته خواهد شد، سیساتگذاران پولی می‌توانند بر نرخ بهره(اسمی و آنهم در کوتاه مدت) تاثیر بگذراندد؛ اما نمی‌توانند در بلند مدت آنرا همانند متغیری برون‌زا کنترل کنند.در اقتصاد متغیری درون‌زا خواند میشود که در اختیار و کنترل سیاست گذار نیست تا هرگونه بخواد کم و زیاد کند. بلکه از تعامل متغیرهای سیستم از درون سیستم مشخص می‌شود.قیمت تعادلی سرمایه یا همان نرخ بهره تعادلی، قیمیت است که در آن میزان تقاضا برای سرمایه(سرمایه گذاری) با میزان عرضه سرمایه(پس انداز) برابر می‌شود. [فعلا فرض بر بسته بودن اقصتاد است] اگر مقامات پولی بخواهند به طور دستوری قیمت سرمایه را کمتر از قیمت تعادلی آن تعیین کنند، تعادل ایجاد شده میان عرضه و تقاضا برهم می‌خورد. از یک سو عرضه سرمایه در بازار رسمی کمتر و از سوی دیگر تقاضا برای دریاقت تسهیلات بالا می‌رود. اجرای این سیاست همان تبعاتی را در عرصه پولی دارد که وقتی مسئولین تلاش می‌کنند، قیمت کالاها را در اقتصاد کمتر از نرخ تعادلی آنها قرار دهند. این پیامد چیزی جز تشکیل بازار سیاه موازی نیست.( پیشنهاد می‌کنم برای درک بیشتر این موضوع حتما کتاب را مطالعه کنید)نرخ بهره واقعی و اسمی این تفاوت تنها با طرح نرخ تورم معنا می‌گردد. در یک اقتصاد تورمی، نرخ بهره واقعی از تفاضل نرخ بهره اسمی از نرخ تورم مشخص می‌گردد. نرخ سود سپرده ها از سال ۶۵ تا ۸۲ از نرخ ۶.۸۲ تا ۱۱.۸ افزایش یافته بود، اما وقتی توجه گردد در این بازه زمانی، نرخ تورم دورقمی و در برخی مقاطع افزایشی بوده است، منفی بودن نرخ واقعی سود سپرده و کاهش یافتن آن مشخص میگردد. با این توضیحات دلیل بالاتر بودن نرخ بهره در ایران نسبت به کشورهای توسعه یافته مشخص می‌گردد؛ نرخ تورم در اغلب کشورها تک رقمی است که نتیجه آن پایین بودن نرخ بهره می‌باشد.در برخی کشورها نظیر ژاپن، نرخ بهره در برخی مقاطع صفر شده ست. حال عده ای بدون تحلیل درست مسئله، خواستار تقلید از این امر در نظام بانکی ایران می‌شوند. درصورتی که نرخ بهره در ژاپن در شرایطی صفر شد که در آن کشور پدیده مذموم کاهش عمومی قیمت‌هارخ داده بود؛ به عبارت دیگر در آن کشور نرخ توم منفی گردیده بود. لذا اگر بهره حقیقی را حساب کنیم بازهم به عددی مثبت می‌رسیم.تفاوت نرخ بهره داخل و خارجدر توجیح این تفاوت باید به چند عامل توجه داشت:نخست آنکه نظام بانکی در کشورهای غربی توسعه یافته و رقابتی است. این امر موجب می‌شود هزینه‌های واسطه گری بشدت کاهش یابد؛ درحالی که در ایران بدلیل رقابت کمتر در بازار بانکی، این نرخ نسبتا بالاست.دوم آنکه مقوله ریسکدر اینجا نقض منحصر بفردی ایفا می‌کند. در کشورهای غربی ، نظام‌های اعتبارسنجی مشتریان به بانک‌ها کمک میکنند تا به شکل دقیق تری میان متقاضیان وام دست به گزینش بزنند؛ در حالی که در کشور ما چنین تمهیداتی هنوز وجود ندارد. علاوه برا این، نظام مالی کشورهای غربی امکان بیشتری در اختیار افراد می‌گذارد تا وثیقه های متنوع تری به بانک‌ها عرضه کنند درحالی که چنین امری در ایران میسر نیست. مجموع عوامل فوق باعث می‌شود ریسک وام دادن در ایران بالا باشد.سوم آنکه نرخ تورم عاملی جدی و تعیین کننده است.چهارم آنکه عدم ارتباط بانک‌های ایران با بانک‌های جهانی باعث می‌شود نرخ تورم در داخل و خارج ایران به سمت هم همگرا نشوند.نظام بانکی ایراندر کل بعد انقلاب بجز برخی دوره‌های کوتاه، نرخ سود سپرده که توسط نظام تصمیم گیری بانکی تعیین می‌شود ، کمتر از نرخ بهره واقعی، به معنی متضرر شدن افرادی است که سرمایه خودرا به بانک‌ها می‌سپارند. برخی مصوبات دولتی نیز موجب شد تا سازمان‌های دولتی نظیر صندوق‌های بازنشستگی درآمد خودرا در بانک‌های دولتی نگه‌دارنی کنند. این امر باعث شد صندوق‌های بازنشستگی و امثالهم که باید مستقل از دولت خدماتی را در اختیار بازنشستگان  قرار دهند، عملا ورشکسته شوند.از سوی دیگر، مقامات پولی نرخ بهره تسهیلات را معمولا پایین‌تر از تورم تعیین می‌کنند. این امر به معنی آنست که هرکس تسهیلاتی دریافت کند و آن را صرف خرید و فروش کالاهای سرمایه‌ای کند، بطور طبیعی و بدون هرگونه زحمتی،‌ سود کرده است. به تعبیر ساده و همه فهم، نام درست این سود، رانت است. حال اگر امروزه می‌خواهیم یکی از سرچشمه‌های فسادهای بزرگ در اقتصاد را جست‌وجو کنیم، باید بیش از تمرکز بر حقوق مدیران، بر نحوه قیمت گذاری سرمایه یعنی نرخ بهره متمرکز شویم.علاوه بر موارد فوق و موارد دیگر، دولت در ایران عموما منابع موجود در شبکه بانکی را، عملا منابع خود قلمداد می‌کند و تعیین تکلیف برای بانک‌ها درباره نحوه هزینه منابعشان را حق خود می‌داند. به همین دولت وقتی بحث از حمایت دولت از یکی از صنایع مطرح می‌شود، بلافاصه تصویب می‌شود که شبکه بانکی، باید وام ارزان در اختیار آن بخش قرار دهد. پیامد منفی (و کوچکتر) این روش، غیرشفف شدن میزان حمایت‌های دولت از بخش‌های مختلف است. پیامد منفی و بزرگتر آنست که ایتنگونه تسهیلات بنیه شبکه بانکی را تضعیف می‌کند؛ چرا اگر در حوزه‌هایی که تکلیف می‌شود بازدهی بالا باشد، دیگر نیازی به تکلیف از بالا وجود ندارد و خود شبکه بانکی به این کار اقدام می‌کند.نقش بانک مرکزی در اقتصاد(۱)آخرین نمونه از رفتارهای نامناسب بانک‌ها را در بحران وام‌های مسکن در آمریکا از سال ۲۰۰۷ به این سو، می‌توان دید. افزایش قیمت مسکن بانک‌ها را دچار اشتباه محاسباتی و نادیده گرفتن معیارهای توانایی بازپرداخت وام کرد. و چون تصور می‌شد بازار مسکن رو به رو رشد است، خود خانه‌های خریداری شده به عنوان وثیقه وام درنظر گرفته شد. ناگاه بازار مسکن دچار شکست و کاهش قیمت شد و اکثر دریافت کنندگان وام نیز اعلام ورشکستی کردند و خانه خریداری شده را به عنوان وثیقه به بانک‌ها تحویل دادن. از آنجاکه قیمت خانه‌ها افت کرده بود، بانک‌ها با مصادره خانه‌ها نتوانستند به اصل پول داده شده و بهره آن دست یابند؛ لذا شدیدا ورشکسته شدند. دولت آمریکا برای جلوگیری از بحران ناگزیر شد، از پول مالیت دهندگان کمک زیادی به بانک‌های دچار مشکل بکند. در ارزیابی این پدیده عده ای تذکر دادند که بانک مرکزی آمریکا باید پیشاپیش نسبت به رفتار ریسکی بانک‌ها هشدار می‌داد تا اقتصاد کشور را با بحران مواجه نکنند.در ایران سابقه ورشکستگی بانک‌ها و زیان‌های بزرگ نظام بانکی چندان وجود ندارد. لذا عموم مردم درک روشنی از مخاطرات این پدیده و احتمال وقوع آن ندارند؛‌اما باید اذعان داشت که پدیده ورشکستگی بانک‌ها، پدیده‌ای جدی و بسیار محتمل در تاریخ بانکداری به شمار می‌رود.در بحران مالی سال ۲۰۰۷ بانک نورثرن انگلیس بدلیل هجوم مردم برای خارج کردن سپرده‌ها دچار بحران شد، نکته قابل توجه این است که بانک مرکزی انگلیس در ابتدا تمایلی برای حمایت از این بانک نداشت، اما وقتی احساس شد که بحران از این بانک به بانک‌های دیگر سرایت خواهد کرد، بانک مرکزی انگلیس وارد عمل شد و برنامه نجات بانک مذکور را به اجرا درآورد.                           مطالعه ادامه فصل دوم: سیاست افزایش یا کاهش نرخ بهره</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Thu, 05 Mar 2020 00:49:52 +0330</pubDate>
            </item>
                    <item>
                <title>خلاصه کتاب اقتصاد برای همه (فصل اول)</title>
                <link>https://virgool.io/@majidpv/httpsvirgooliomajidpv%D8%AE%D9%84%D8%A7%D8%B5%D9%87-%DA%A9%D8%AA%D8%A7%D8%A8-%D8%A7%D9%82%D8%AA%D8%B5%D8%A7%D8%AF-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%87%D9%85%D9%87-%D9%81%D8%B5%D9%84-%D8%A7%D9%88%D9%84-mm45jydsvwov</link>
                <description>رشد تولید ناخالص داخلیدر این نوشتار سعی در خلاصه کردن کتاب &quot;اقتصاد برای همه&quot; نوشته دکتر علی سرزعیم دارم، بطوری که خواننده این متن تشویق به مطالعه کامل کتاب شود. سعی بر این دارم که هر فصل کتاب را در یک نوشته بطور خلاصه منتشر کنم به نحوی که نظر و برداشت شخصی وارد  این متن نشود و نیز عین کلمات کتاب منتقل شود. اقتصاددانان مبرز در ایران بسیار معدود هستند و همین افراد معدود نیز از لزوم گفت و گو با جامعه غافل‌اند. در عین حال کتاب‌های اقتصادی در مقایسه با کتاب‌های فلسفی و علوم سیاسی به مراتب اندک است. در میان کتاب‌های موجود نیز کتاب‌های مارکسیستی و کتاب‌های تخصصی دانشگاهی سهم قابل توجهی دارند و کتاب‌هایی که برای مخاطب عام باشد بسیار معدود و انگشت شمار است.کتاب اقتصاد برای همه، همانطور که از عنوانش مشخص است؛ مفاهیم اقتصادی را به زبان ساده و روان برای عموم مردم که ارتباط و دانش کمتری نسبت به علم اقتصاد دارند بیان می‌کند.به عنوان یک ناظر بیرونی مشکلی که در عرصه اندیشه اقتصادی در ایران مشاهده می‌کنم درک محدود مباحث اقتصادی در میان شهروندان و سیاست گذاران است،‌که نتیجه آن افراط و تفریط و ناکارآیی رویکردهای اتخاذ شده به سیاست اقتصادی است.نخستین بار که پیش نویس کتاب حاظر را دیدم، ارایه نسخه نهایی آنرا به عموم گام بسیار مثبتی ارزیابی کردم و متوجه شدم که قلم ساده و روان آقای دکتر سرزعیم در بیان موثر و هممه فهم مباحث پیچیده اقتصاد توانمند است. لذا ایشان را به تکمیل و ادامه کار تشویق کردم و خودم نیز به سهم خود در بهبود آن مشارکت ورزیدم.&quot;هادی صالحی اصفهانی&quot; استاد اقتصاد دانشگاه ایلینوی در اوربانا - شمپین - آمریکافصل اول: سیاست‌های معطوف به رشد اقتصادیشاید مهمترین دغدعه هر اقتصاد ایرانی این است که چگونه می‌توان از آموزه های علم اقتصاد استفاده کرد تا ایران از وضعیت کنونی‌اش خارج  و توسعه‌یافته شودشاخص سنجش اقتصادتولید ناخالص داخلی یک کشور، جمع ارزش کالاها و خدمات نهایی تولید شده در داخل یک اقتصاد را در بازه زمانی مشخص(یک سال) نشان می‌دهد. این متغیر قدرت تولید یک اقتصاد را نشان می‌دهد. حال که قرار است ارزش کالاها باهم جمع زده شود، ممکن است یک مشکل بروز کند و آن این است که اگر به دلیل تورم، قیمت‌ها در یک اقتصاد بالا رود، معنای آن این خواهد بود که ارزش کالاها و خدمات تولید شده در این اقتصاد بالارفته است. اما این اتفاق واقعا رخ نداده و اقتصاد بزرگتر نشده بلکه عدد مذکور به واسطه رشد قیمت متورم شده است.باید قبول کرد که این اشکال وارد است. در آمارهای کلان اقتصادی که تحت عنوان حسابهای ملی تهیه می شود متغیری را که بر اساس قیمت‌های روز محاسبه شده باشد، تولید ناخالص داخلی به قیمت جاری می‌گویند. مفهوم مرتبط دیگر،ارزش افزوده است. تولید ناخالص داخلی را می‌توان از طریق جمع ارزش افزوده فعالیت های مختلف در بخش‌های گوناگون محاسبه کرد.تولید ناخالص داخلی به یک معنا، قدرت زایندگی هراقتصاد را نشان می‌دهد. در اینجا میتوانید رتبه بندی کشورها در سال ۲۰۱۸ را مشاهده کنید.رتبه های بالا به کشورهای پیشرفته نظیر آمریکا، چین و ژاپن اختصاص دارد و ایران جایگاه ۲۷ام دنیا قرار دارد.شاخص پیشرفتحال چگونه می‌توان دریافت که آیا یک کشور در مسیر پیشرفت قرار دارد یا نه و  آیا سرعت پیشرفت آن خوب است یا نه؟ ملاک کمی و قابل استناد برای سنجش میزان و سرعت پیشرفت، رشد اقتصادی است. رشد اقتصادی هرکشور از محاسبه نرخ تغییرات تولید ناخالص ملی محاسبه می‌شود. ممکن است در یک بخش اقتصاد رونقی ایجاد شود و در بخشی دیگررکودی عمیق بوجود آمده‌ باشد. برای سنجش عملکرد یک اقتصاد به متغیر رشد اقتصادی در آن دوره توجه می‌شود. رشد اقتصادی از محاسبه نرخ رشد تولید ناخالص داخلی بدست می‌آید.طبق اطلاعات بانک مرکزی، اقتصاد ایران در دهه چهل شمسی عملکرد بسیار درخشان و ممتازی داشته است. رشد اقتصادی ایران از سال 1365 منفی می‌شود. با شروع دوران بازسازی، ایران نرخ رشد بالاتر از ۱۰درصد را تجربه می‌کند که به دلیل استفاده از ظرفیت های خالی و بازدهی بالای سرمایه گذاری محقق شد. اما مستمر نبود. متاسفانه با وقوع بحران ارزی در سالهای ۷۲و۷۳ اقتصاد ایران مجددا به دوره رکود منتقل شد و این وضعیت تا سال ۸۰ که همزمان با افزایش قیمت نفت و انجام اصلاحات ساختاری برنامه ریزی شده در برنامه سوم بود،ادامه یافت. شاخص رفاه و توسعهبرای پرهیز از ابهام‌ها و مناقشه‌های نظری حول محور توسعه، از شاخص درآمد سرانه استفاده میشود. درآمد سرانه مفهومی خاص تر از مفهوم توسعه است اما در عوض، معنای روشن تری دارد. مهمترین زیت مفهوم درآمد سرانه کمی و قابل سنجش بودن آنست. اگر درآمد ملی بر جمعیت یک کشور تقسیم شود، متغیر درآمد سرانه بدست می آید.به رغم این واقعیت که  تجارت جهانی موجب شده است تا کالاهای قابل مبادله در همه جای دنیا کمابیش قیمت‌های مشابهی داشته باشند، قیمت کالاهای غیرقابل مبادله و خدمات در سراسر جهان یکسان نیست و بصورت محلی تعیین می‌شود. از این رو، قایسه درآمد سرانه بدون درنظر گرفتن این واقعیت میزان بهره مندی افراد را بدرستی نشان نمی‌دهد چرا که بخشی از سبد مصرفی افراد را کالاها و خدمات غیرقابل مبادله تشکیل می‌دهد. شاخصی که این نکته را لحاظ می‌کند، اصطلاحا درآمد سرانه بر اساس قدرت خرید خوانده می‌شود.برای اینکه موقعیت ایران در رتبه بندی جهانی از نظر درآمد سرانه تنزل نکند، طی برنامه سوم چنین درنظر گرفته شد که ایران باید پیوسته رشد ۶درصدی داشته باشد. در برنامه چهارم، برنامه‌ریزان با تحلیل تحولات محیطی و به منظور دستیابی به هدف تعیین شده ظرف مدت بیست سال، چنین توصیه کردند که ایران باید سالانه ۸درصد رشد اقتصادی داشته باشد. در اینجا ضروری است روند درآمد سرانه در ایران که شاخصی از تحول رفاه مردم در طی زمان است، مورد توجه قرار گیرد.از آنجا که به مرور زمان مشخص شد که درآمد سرانه به تنهایی گویای خیلی از واقعیتهای اجتماعی نیست، شاخص توسعه انسانی تعریف گردید تا بر اساس آن فاکتورهایی نظیر سلامت، آموزش و ... همزمان با درآمد سرانه درنظر گرفته شود و طبق آن رتبه بندی کشورها انجام شود.در نظام تصمیم گیری ایران به مقوله رشد اقتصادی کمتر بها داده می‌شود. شاید ساده ترین شاهد این مسئله این است که وقتی اعلام میشود نرخ رشد اقتصادی در سال گذشته ۱درصد کاهش یافته کسی برافروخته نمیشود، گویی هیچ اتفاقی نیفتاده است. اما وقتی اعلام میشود تورم چنددرصد افزایش یافته بلافاصله واکنش های اجتماعی و سیاسی ظاهر می‌شود.رشد اقتصادی تعیین کننده این است که چقدر طول می‌کشد تا درآمد سرانه یک کشور دو برابر شود.سیاست های محرک رشدحال که مشخص شد افزایش نرخ رشد اقتصادی راه توسعه اقتصاد است، به این سوال می‌پردازیم که چه عوامل موجب افزایش رشد اقتصادی می‌شود و چه سیاست هایی در این راستا باید اتخاذ شود.سرمایه گذاری داخلی، سرمایه گذاری خارجی، استقراض خارجی، سرمایه گذاری مستقیم خارجی و قرارداد بیع متقابل از جمله سیاست های محرک رشد است که در این متن به آنها اشاره نشده است(در متن کتاب مفصل توضیح داده شده است). امنیت سرمایهاولین فاکتور در ایجاد رشد و توسعه اقتصادی، صیانت از حقوق مالکیت است. تقریبا با اطمینان می‌توان گفت که در اکثر مطالعات آماری صورت گرفته در درباره رضد اقتصادی، یکی از متغیرهای تبیین کننده رشد و توسعه کشورها، یزان رعایت حقوق مالکیت است. ( برای نمونه به بزلی و پرسوت(۲۰۱۳) مراجعه کنید)وجه دیگر صیانت از حقوق مالکیت، حق بهره برداری از منافع مالکیت است. مصداق روشن این مسئله مداخلات دولت در قیمت گذاری محصولات است. غیر از تبعات منفی که این امر دارد(در بخش های بعدی به آن پرداخته خواهد شد)، باید توجه داشت که این اقدام دقیقا مصداق نفی حقوق مالکیت است.از سوی دیگر به دلیل حاکمیت دولت بر اقتصاد، هرکس بخواهد به صورت جدی فعالیت اقتصادی انجام دهد، خواسته یا ناخواسته با دولت سروکار پیدا میکند. هرچه اندازه فعالیت فرد بزرگتر باشد، تعامل او با دولت بیشتر خواهد شد. به همین دلیل به عرصه سیاست کشیده می شود که این امر باتوجه به شرایط سیاسی ایران امری، کاملا ریسکی و ناپسند میان عاملین اقتصادی شناخته شده است. برای دوری از این مورد عاملین اقتصادی بجای گسترش طرح کسب و کار خود، به متنوع کردن ایده،های تجاری خود روی آوردند. برای مثال در ایران بر خلاف سایر نقاط فروشگاه‌های زنجیره‌ای کمی فعالیت دارند که یکی از علت‌های آن دوری از عرصه سیاست است.یکی از ساده ترین شواهدی که نشان دهنده عدم صیانت از حقوق مالکیت در ایران است، نبود فهرست ثروتمندترین افراد ایران است.ثبات سیاسی و سیاست گذاری یکی دیگر از دلایل کمبود سرمایه گذاری خصوصی در ایران، بی ثباتی اقتصادی است. بی ثباتی اقتصادی مولود علل مختلفی است. نخست آنکه درهر کشوری تورم وجود داشته باشد، بی ثباتی زیاد خواهد بود. بعد دیگری از مسئله بی ثباتی اقتصادی ناظر به نوسان در سیاست گذاری هاست. نمونه‌های فراوان و مشخصی در این زمینه وجود دارد که از ذکر آنها بدلیل اشراف خواننده به مباحث روز کشور، خودداری می‌کنم.معضل مهمی که در ایران وجود دارد،‌آنست که دولت بابت تغییر سیاست‌های اعلام شده خود هزیه نمی‌دهد و کلیه هزینه‌های این تغییر، بر دوش عاملان اقتصادی است. سیاست‌های اعلام شده قراردادی نانوشته میان دولت و عاملان اقتصادی است. حال اگر دولت سیاست‌هایش را تعییر دهد، درواقع قرارداد را نقض کرده است. اگر دستگاه قضایی ایران توسعه یافته‌بود، این امکان وجود داشت که بخش خصوصی بتواند بابت زیان‌های متحمل شده از تغییر سیاست‌ها شکایت نماید و تقاضای جبران خسارت کند.معنای دقیق پاسخگویی دولت همین است. برخی از مسئولین سیاسی که این مفهوم را در شعارهای خود مطرح ساختند، عملا معنای آن را تحریف کردند. معنای دقیق پاسخگویی همان تعهد به سیاست های اعلام شده و پاسخگویی در برابر زیان های وارده در صورت تخطی از آنست.نهادها برای تحلیل دلایل موفقیت برخی کشورها در رسیدن به توسعه یافتگی، باید به عواملی عمیق تر از عوامل مقطعی نگاه کرد. درواقع، اگر شخص شد که مردم یک کشور، بطور نظام مند بهتر سامان دهی میشوند و فعالیت بهتر و مولدتری دارند،‌این را نباید صرفا به مسائل کوتاه مدت مثل سیاستهای دولت وقت ارجاع داد، بلکه احتمالا امور ماندگارتری تضمین کننده موفقیت بلندمدت جوامع هستند. اقتصاددانان این امور ماندگار را نهادها نامیده اند.آنچه نهادگرایان معمولا به عنوان مصادیق نهاد ذکر میکندد، عموما نهاد قضا برای صیانت از حقوق مالکیت و حاکمیت قانون است.برای اینکه اهمیت نهادها در ایران به خوبی درک شود، کافی است به این مثال توجه گردد. اصولا افزایش سرمایه گذاری باید به افزایش تولید و به تبع آن، به رشد اقتصادی منهتی شود. حال باید به این مسئله پرداخت که آیا سرمایه گذاری های صورت گرفته در اقتصاد ایران دارای بازده مناسبی بوده است؟ با یک نگاه اجمالی به داده ها میتوان دید که پاسخ منفی است.علت پایین بودن بازده سرمایه گذاری در بخش دولتی متفاوت از بخش خصوصی است. پاسخ آنست که سرمایه گذاری های دولتی عموما نامناسب بوده است. در بخش سیاست های مالی(فصل هفتم) به تفصیل تشریح خواهد شد که مکانیسم حاکم بر نظام بودجه ریزی و تصمیم گیری در ایران به شکلی است که موجب میشود پروژه های غیراقتصادی به تصویب و اجرا برسد. در رابطه با بازدهی پایین سرمایه گذاری بخش خصوصی نیز میتوان به این واقعیت اشاره کرد که محاسبه سرمایه گذاری بخش خصوصی بر اساس متغیرهای موجود صورت میگیرد.  اگر سیاست گذاری های دولت به شکلی باشد که علامت نادرستی به فعالین  اقتصادی ارسال کند، در این صورت سرمایه گذارها به اشتباه می افتند.دیگر عوامل محرک رشد اقتصادیتئوری رشد سولورابرت سولو معتقد بود که اگر رشد اقتصادی تنها مرهون سرمایه گذاری باشد نهایتا همه کشورها اعم از توسعه یافته و توسعه نیافته به هم خواهند رسید و سرانجام نرخ رشد اقتصادی همه کشورها پس از توسعه یافتن صفر میشود.این فرضیه در ادبیات علم قتصاد، فرضیه همگرایی گفته می‌شود.دلیل فرضیه سولو این است که هرچه در کشورهای توسعه یافته انباشت سرمایه بیشتر صورت گیرد به دلیل نزولی بودن نرخ بازدهی سرمایه گذاری، افزایش بازدهی کمتر می‌شود. از سوی دیگر با انباشت سرمایه، استهلاک سرمایه ها بیشتر می‌گردد. لذا در جایی که انباشت سرمایه زیاد است نرخ رشد اقتصادی یا همان نرخ بازده سرمایه گذاری کم خواهد بود، اما نرخ استهلاک بالاست و همه بازدهی صرف جبران استهلاک می‌شود و چیزی برای رشد باقی نمی ماند. اما در کشورهای درحال توسعه انباشت سرمایه کم است، میزان استهلاک ناچیز است و در عین حال نرخ بازدهی بسیار بالاست. درتیجه رشد اقتصادی بالا خواهد بود.تئوری های جدید رشدپیش بینی مدل سولو در عمل محقق نشد. عدم تحقق پدیده همگرایی، محققین رشد اقتصادی را به حل مسئله اول‌(رشد مستمر کشورهای توسعه یافته) و محققین اقتصاد توسعه و اقتصاد سیاسی را به حل مسئله دوم(عدم رشد کشورهای در حال توسعه) مشغول ساخت. محققین رشد اقتصادی به مرور به این باور رسیدند که همانگونه که سولو پیش بینی کرده بود انباشت سرمایه به تنهایی نمی‌تواند رشد اقتصادی مستمر را در غرب ایجاد کند.اولین عاملی که شناخته شد، پدیده تحقیق و توسعه و نوآوری بود.محققین اقتصادی معتقدند که فعالیت های تحقیق و توسعه برخلاف سرمایه، دارای خصوصیت بازدهی صعودی به مقیاس است. لذا میتواند اثرات نزولی بودن بازدهی سرمایه را جبران کند. اگر تحقیق و توسعه در سطحی  وسیع در کل اقتصاد صورت بگیرد میتواند رشد اقتصادی به همراه بیاورد.عامل دومی که به مرور شناخته شد، سرمایه انسانی است. مهارتهای انسانی همانند سرمایه فیزیکی قابل انباشت است و همانند تحقسق و توسعه دارای خصوصیت بازدهی صعودی به مقیاس است.در مجموع باید اذعان کرد که به رغم اهمیت مقوله تحقیق و توسعه، هنوز برای کشورهای درحال توسعه، سرمایه گذاری و سرمایه انسانی از اهمیت و اولویت بیشتری برخوردار است. ایجاد نوآوری منوط به وجود زیرساختهای زیادی است که جز با توسعه یافتگی فراهم نمیشود.فضای کسب و کاررایج ترین و متندترین شاخص فضای کسب و کار هرسال توسط بانک جهانی ارائه می شود. این شاخص سهولت یا دشواری شرایط را برای کارآفرینی که قصد ایجاد و بهره برداری از یک کسب و کار کوچک و متوسط را دارد، شفاف میکند. در این مطالعه ۱۸۵کشور مورد بررسی قرار گرفته و ایران در سال ۲۰۱۵ از حیث سهولت انجام کسب و کار، رتبه ۱۳۰ و در سال ۲۰۱۳، رتبه ۱۴۵ را کسب کرده است.شاخص دیگری که مورد توجه است، شاخص رقابت پذیری است. این گشاخص بر خلاف شاخص قبل که عمدتا بر اساس امور کمی بناشده بود تا حدودی بر ارزیابی های کیفی بناشده است و هیمن امر اعتبار آن را کاهش داده است اما در هرصورت، برخی نقاط قوت و ضعف اقتصاد ایران را به خوبی نشان میدهد. بر اساس گزارش سال ۲۰۱۲، ایران از بین ۱۴۲ کشور جایگاه ۶۲ را کسب کرده است.برای بررسی بیشتر جایگاه ایران بر اساس شاخص های مختلف مربوط به کسب کار میتوانید به گزارش های Doing Business Website و همینطور Global Competitiveness Report مراجعه کنید.فصل دوم: سیاست پولی</description>
                <category>majid</category>
                <author>majid</author>
                <pubDate>Sun, 01 Mar 2020 13:41:09 +0330</pubDate>
            </item>
            </channel>
</rss>