[{
      "id":         "/fidibo-waydroid",
      "url":        "/fidibo-waydroid.html",
      "image":      "assets/article_images/waydroid/waydroid.png",
      "title":      "اجرا کردن فیدیبو به وسیله Waydroid روی گنو/لینوکس",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2024-05-15 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"اجرا کردن فیدیبو به وسیله Waydroid روی گنو/لینوکس\"\ndate: 2024-05-15\ncategories: development\nimage: assets/article_images/waydroid/waydroid.png\ntoc: true\n---\n\nتازگی ها برای تفنن از Arch Linux روی لپتاپ جدیدم استفاده میکنم\n\n1. یه مقداریش برمیگرده به اینکه دوست داشتم تنوع بدم و دیگه از Ubuntu استفاده نکنم چون روی سرور و WSL از ابونتو استفاده میکنم.\n1. دلیل دیگه اش هم برمیگشت به تجربه نه چندان دوست داشتنی که با [NixOS](https://nixos.org) داشتم.\n1. اگه ارچ وجود نداشت احتمالا انتخابم [Gentoo](https://www.gentoo.org/) میبود.\n1. خارج شدن از کنج عافیت[^1]\n\nبه نظرم Arch اون تعادلی که بین خیلی ساختار یافته بودن سیستم عامل و سهل گیری رو داره و استفاده از اون برای من دوست داشتنیه.\n\nاما برگردیم به ماجرای اجرا کردن فیدیبو روی لینوکس.\nچهار سال قبل درمورد این [نوشتم](/fidibo-anbox) که چطور فیدیبو رو به وسیله anbox روی گنو/لینوکس اجرا کنیم اما دیروز که داشتم نگاه میکردم متوجه شدم که anbox دیگه توسعه داده نمیشه ولی یه پروژه مشابه شده وجود داره که همون مسیر اجرا کردن اندروید به عنوان کانتینر روی لینوکسه.\n\n### چرا Waydroid ؟\n\nبرای اجرا کردن اپلیکیشن های اندروید روی کرنل لینوکس ما دوتا راه بیشتر نداریم یا اینکه از مجازی‌ساز[^2] استفاده کنیم یا اینکه پروسه رو به وسیله کانتیتر[^3] اجرا کنیم.\n\nمسیر اول که استفاده از مجازی‌ساز باشه رو تو [مقاله](/fidibo-anbox) قبلی بهش اشاره کردم مناسب سیستم های ضعیف نیست.\n\nفعلا جایگزینی برای Waydroid وجود نداره که ساده تر باشه.\n\n### نصب و اجرای Waydroid روی Arch\n\n```bash\n# installing yay aur package manager\npacman -Sy --needed git base-devel\ngit clone https://aur.archlinux.org/yay.git\ncd yay\nmakepkg -si\n\n#Change the Arch kernel to zen kernel\n\nsudo pacman -S linux-zen linux-zen-headers\n\nreboot\n\n#install Waydroid\nyay -S waydroid\n\n#running Waydroid serivce\nsudo systemctl start waydroid-container.service\n\n#enable the waydroid service(optional)\nsudo systemctl enable waydroid-container.service\n\n#init and usage of waydroid\n\nsudo waydroid init\n\nwaydroid show-full-ui\n\nwaydroid app install fidibo.apk\n\n```\n\nاگه همه چیز به خوبی و خوشی پیش رفته باشه حالا میتونید کتاب مورد علاقه خودتون رو بخونید\n\n![کتاب طریق شاهان](assets/article_images/waydroid/the-way-of-kings-persian.png)\n\n[^1]: Comfort Zone\n[^2]: Virtualization\n[^3]: Container\n"
    },{
      "id":         "/ipam",
      "url":        "/ipam.html",
      "image":      "assets/article_images/ipam/Netbox_logo.png",
      "title":      "چرا IPAM مهمه و چجوری از اون تو زیرساخت خودمون استفاده کنیم؟",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2024-05-06 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"چرا IPAM مهمه و چجوری از اون تو زیرساخت خودمون استفاده کنیم؟\"\ndate: 2024-05-06\ncategories: development\nimage: assets/article_images/ipam/Netbox_logo.png\ntoc: true\n---\n\nتو مقاله [مسیری که طی میشود تا به یک وبسایت برسیم](/web-application-system-design.html) به صورت مفصل از اهمیتی که دانش شبکه برای یه مهندس دواپس داره صحبت کردم یعنی دانشی که کمک میکنه متوجه بشه چه خطایی ممکنه تو سیستم اتفاق افتاده باشه.\n\nاما دانش خطایابی تنها یکی از اون چیزاییه که یه مهندس دواپس خوب رو میسازه و معماری صحیح سیستم یکی دیگه از اون مهارت هایی که کمک میکنه مهندس های بهتری باشیم.\n\nبرای معماری درست زیرساخت ما ابتدا باید شاکله اصلی یعنی تخصیص درست منابع رو بلد باشیم و همون طور که میدونید تعداد IP ها و range های اون ها هم بی انتها نیست و اکثر مواقع برای اینکه بین range های ما همپوشانی وجود نداشته باشه باید دست به دامن ابزارهای مستندسازی بشیم.\n\n> ⚠️ توجه: داشتن دانش حداقلی از IP برای فهم مطالب زیر الزامیه.\n> توصیه میکنم اگه نیاز به آموزش دارین دوره رایگان network+ اردشیر کاویانی رو روی [یوتوب](https://www.youtube.com/watch?v=9t1RXmoaRpM&list=PL1OoRITklYLjTid8GeMffc-RlsWKYosFq&ab_channel=4rahecomputer) ببینید.\n\n### چه روش هایی برای subnetting وجود داره؟\n\nساده ترین راه اینه که از یه وبسایت مثل [این](https://www.davidc.net/sites/default/subnets/subnets.html) استفاده کنیم و subnet های خودمون رو بر اساس bitmask که میخوایم بسازیم برای مثال اگه از بازه `192.168.0.0/16` استفاده کنیم میتونیم این رو به دو یا چند subnet دیگه بشکونیم به این صورت تصویری که میبینید\n\n![](assets/article_images/ipam/subnetting.png \"subnetting\")\n\nاین روش با اینکه ساده است اما معایبی هم داره مثل:\n\n1. بعد از تقسیم بازه به subnet های کوچکتر باید مستندسازی رو جای دیگری انجام داد مثلا تو یک فایل متنی ذخیره کرد.\n1. باید هربار داده های قبلی رو اضافه کرد و سیستم کمکی به ما جهت تخصیص منابع نمیکنه مثلا اگه از قبل یه بازه استفاده شده باشه هشدار نمیده.\n\nاما راه ساده تر و بهتری هم برای مستندسازی و ایجاد IP و Prefix وجود داره و اونم استفاده از ابزارهای IPAM هستش\nابزارهایی مثل\n\n1. [netbox](https://docs.netbox.dev/en/stable/)\n1. [phpipam](https://phpipam.net/)\n\nکاری که این ابزارها انجام میدن فراهم کردن یه رابط کاربری/API برای ایجاد و مدیریت و نگهداری دیتایی که درمورد IP تو سیستم ما وجود داره حالا این IP میتونه یه range/prefix باشه میتونه firewall باشه میتونه virtual machine باشه ولی اصل ماجرا اینه که یه source of truth وجود داره که میتونیم بهش اطمینان کنیم که IP رو به درستی تخصیص دادیم.\nدر ادامه چند مثال رو به وسیله [netbox terraform provider](https://registry.terraform.io/providers/e-breuninger/netbox/latest/docs) میزنم تا موضوع بیشتر جا بیفته.\n\n### چطور میتونیم از netbox برای ایجاد subnet استفاده کنیم؟\n\nمرحله اول نصب netbox هستش که از حوصله این مقاله خارجه ولی میتونید از این [helm chart](https://github.com/netbox-community/netbox-chart) برای نصب netbox آستفاده کنیم.\n\nمرحله بعدی استفاده از api_token است که میتونه متعلق به admin باشه که به صورت پیشفرض مقدارش `0123456789abcdef0123456789abcdef01234567` است.\n\n#### استفاده از netbox terraform provider\n\nساختار پروژه تستی ما به این صورت است\n\n```\n+-- main.tf\n\\-- providers.tf\n```\n\nمحتوای providers.tf\n\n```\nterraform {\n  required_providers {\n    netbox = {\n      source  = \"e-breuninger/netbox\"\n      version = \"3.8.5\"\n    }\n  }\n}\n\nprovider \"netbox\" {\n  server_url = \"https://yournetbox.com\"\n  api_token  = \"0123456789abcdef0123456789abcdef01234567\"\n}\n\n```\n\nمحتوای main.tf\n\n```\n\nresource \"netbox_prefix\" \"test\" {\n  prefix = \"192.168.0.0/16\"\n  status = \"active\"\n}\n\nresource \"netbox_available_prefix\" \"test\" {\n  parent_prefix_id = netbox_prefix.test.id\n  description      = \"Test\"\n  prefix_length    = 25\n  status           = \"active\"\n}\n\noutput \"test\" {\n  value = netbox_available_prefix.test\n}\n\n```\n\nخروجی terraform plan\n\n```\n➜  netbox tf plan\n\nTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:\n  + create\n\nTerraform will perform the following actions:\n\n  # netbox_available_prefix.test will be created\n  + resource \"netbox_available_prefix\" \"test\" {\n      + description      = \"Test\"\n      + id               = (known after apply)\n      + parent_prefix_id = (known after apply)\n      + prefix           = (known after apply)\n      + prefix_length    = 25\n      + status           = \"active\"\n    }\n\n  # netbox_prefix.test will be created\n  + resource \"netbox_prefix\" \"test\" {\n      + id     = (known after apply)\n      + prefix = \"192.168.0.0/16\"\n      + status = \"active\"\n    }\n\nPlan: 2 to add, 0 to change, 0 to destroy.\n\nChanges to Outputs:\n  + test = {\n      + description      = \"Test\"\n      + id               = (known after apply)\n      + is_pool          = null\n      + mark_utilized    = null\n      + parent_prefix_id = (known after apply)\n      + prefix           = (known after apply)\n      + prefix_length    = 25\n      + role_id          = null\n      + site_id          = null\n      + status           = \"active\"\n      + tags             = null\n      + tenant_id        = null\n      + vlan_id          = null\n      + vrf_id           = null\n    }\n\n```\n\nاگه همه چی به خوبی پیش رفته باشه با اجرای `terraform apply` باید `192.168.0.0/16` به عنوان parent و یه اولین رنج خالی به عنوان subnet ساخته شده باشه.\n\n### کاربرد واقعی استفاده از netbox terraform provider کجاست؟\n\nمثال بالا سناریو ساده ساختن یه نتورک و ایجاد یه سابنت بود ولی تو دنیای واقعی زیرساخت بسیار بزرگ تر و پیچیده تر از اونه که بتونیم همه prefix ها و IP ها رو به خاطر بسپاریم علاوه بر این تخصیص دستی manual و هربار داکیومنت کردنش وقتگیر و غیر ضروریه اینجاست که netbox به کمک ما میاد تا این پیچیدگی ها رو ساده کنه.\n\nاز اونجایی که terraform به صورت defacto زبان کلاود تبدیل شده این یکپارچگی با netbox کمک میکنه زیرساخت قابل فهم تری داشته باشیم که تو مقیاس بزرگتر دید بهتری رو به معمار و تیم توسعه و نگهداری میده.\n"
    },{
      "id":         "/cehck-certificate-revoke-status-python",
      "url":        "/cehck-certificate-revoke-status-python.html",
      "image":      "assets/article_images/certificate-revoke/crl-vs-ocsp.png",
      "title":      "چک کردن revoke گواهینامه SSL به وسیله پایتون",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2023-10-16 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"چک کردن revoke گواهینامه SSL به وسیله پایتون\"\ndate: 2023-10-16\ncategories: development\nimage: assets/article_images/certificate-revoke/crl-vs-ocsp.png\ntoc: true\n---\n\nگاهی وقت ها لازم میشه که قبل از اینکه یه گواهی نامه SSL به پایان برسه ما اون رو revoke کنیم\n\n#### اما پروسه revoke کردن تو گواهینامه SSL چیه؟\n\n![](assets/article_images/certificate-revoke/pubkey.png \"Public key certificate\")\n\nگواهی نامه SSL درواقع یه public key که توسط CA امضا شده روشی که برای امضا کردن این Public key استفاده میشه اینه که ما یه درخواست امضا کلید عمومی که شامل اطلاعاتی مثل کمپانی و منطقه زمانی و اطلاعاتی میشه که برای گواهی لازمه رو به یه CA بدیم تا اون رو برای ما امضا کنه و درنهایت یه کلید عمومی امضا شده به ما تحویل بده. [اینجا](https://www.digicert.com/easy-csr/openssl.htm) برای مثال میتونید به راحتی یه درخواست CSR رو برای openssl بسازید و کپی کنید و تو خط فرمان خودتون اجرا کنید.\n\nحالا گاهی وقتا پیش میاد که مثلا کلید خصوصی که باهاش درخواست CSR رو دادیم افشا میشه یا اینکه دیگه تمایلی نداریم که از گواهی فعلی استفاده کنیم و میخوایم که این گواهینامه رو به ملکوت اعلی بفرستیم.\n\nدوتا روش برای اینکار وجود داره که ارائه دهنده های گواهینامه یا CA انجام میدن:\n\n- CRL یا Certificate revocation list\n- OCSP یا Online Certificate Status Protocol\n\nاین دو روش افزونه یا extention برای گواهینامه های استاندارد x509 هستند\n\n#### روش CRL\n\n![](assets/article_images/certificate-revoke/CRL.png \"CRL\")\n\nتو روش CRL ارائه دهنده گواهینامه یه لیست از گواهی هایی که به پایان رسیده یا revoke شدن رو برای مرورگر یا سیستم ما ارسال میکنه و اینشکلی باعث میشه که سیستم ما متوجه بشه که اعتبار گواهینامه به پایان رسیده که تو تصویر بالا میتونید فرایندش رو ببینید\n\n#### روش OCSP\n\n![](assets/article_images/certificate-revoke/OCSP-1.png \"OCSP\")\n\nروش OCSP روش مدرن تریه که کلاینت درخواست اعتبارسنجی رو مستقیما برای CA میفرسته تا تایید کنه\n\nروش OCSP به دو حالت انجام میشه یا خود کلاینت درخواست رو به CA ارسال میکنه یا webserver از قبل درخواست رو ارسال میکنه و همراه با گواهی SSL تحویل کلاینت میده\nروش دوم به خاطر اینکه بار رو از روی کلاینت برمیداره روش بهتری برای سخت افزارهایی هستش که توان پردازشی پایین تری رو دارند\nمثلا توی nignx [به این صورت](https://support.globalsign.com/ssl/ssl-certificates-installation/nginx-enable-ocsp-stapling) میشه این قابلیت رو فعال کرد.\n\n![](assets/article_images/certificate-revoke/OCSP-Stapling-1.png \"OCSP-Stapling\")\n\n#### چطوری به وسیله python اعتبار گواهی نامه SSL رو تایید کنیم\n\nبرای این کار دوتا wrapper نوشته شده که میتونید از اونا برای validate کردن certificate استفاده کنید\n\n- [crl-checker](https://pypi.org/project/crl-checker/) برای CRL\n- [OCSP-Checker](https://pypi.org/project/ocsp-checker/) برای OCSP\n\nمن برای راحتی کار یه اسکریپت ساده نوشتم که هردوتا رو استفاده میکنه به این صورت که اول پیش نیاز ها رو نصب میکنیم\n\n```\npip install ocsp-checker crl-checker\n```\n\nو بعدش این اسکریپت رو تو یه فایل مثلا `main.py` ذخیره میکنیم\n\n```\nimport ssl\nimport argparse\nfrom crl_checker import check_revoked, Revoked, Error\nfrom ocspchecker import ocspchecker\n\nparser = argparse.ArgumentParser()\nparser.add_argument(\"hostname\")\nparser.add_argument(\"port\")\n\nargs = parser.parse_args()\n\n\ndef get_server_certificate(hostname, port):\n    cert = ssl.get_server_certificate((hostname, port))\n    return cert\n\n\ndef check_server_pem_revoked():\n    cert_pem = get_server_certificate(hostname=args.hostname, port=args.port)\n    try:\n        check_revoked(cert_pem)\n    except Revoked as e:\n        print(f\"Certificate revoked: {e}\")\n    except Error as e:\n        print(f\"Revocation check failed. Error: {e}\")\n        raise\n\n\ndef OCSP_revoked(hostname, port):\n    ocsp_request = ocspchecker.get_ocsp_status(host=hostname, port=port)\n    return ocsp_request\n\n\ncheck_server_pem_revoked()\n\nOCSP_revoked(hostname=args.hostname, port=args.port)\n\n\n```\n\nو حالا کافیه که ارگیومنت های خودمون رو به اسکریپت تو کامند لاین بدیم به این صورت\nبرای مثال برای چک کردن گواهی سایت خودم که معتبره\n\n```\npython3 main.py behroozam.com 443\n```\n\nو برای یه گواهی نامعتبر از این مثالی که [Digicert](https://www.digicert.com/kb/digicert-root-certificates.htm) استفاده میکنم\n\n```\npython3 main.py digicert-tls-ecc-p384-root-g5-revoked.chain-demos.digicert.com 443\n```\n"
    },{
      "id":         "/how-to-generate-random-number-openssl",
      "url":        "/how-to-generate-random-number-openssl.html",
      "image":      "assets/article_images/openssl/openssl-logo.png",
      "title":      "ساختن کلید متقارن یا رمز به وسیله openssl ؟",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2023-09-21 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"ساختن کلید متقارن یا رمز به وسیله openssl ؟\"\ndate: 2023-09-21\ncategories: development\nimage: assets/article_images/openssl/openssl-logo.png\ntoc: true\n---\n\n### یه مقدمه کوتاه درمورد اعداد رندوم\n\nخیلی وقت ها پیش میاد که لازم باشه برای انکود و دیکود کردن فایل ها یا ساختن پسورد ها نیاز به یه اپلیکیشن دم دستی داشته باشیم که برامون سریع یه رشته رندوم رو به عنوان کلید متقارن یا رمز بسازه\n\nیکی از بهترین ابزارها برای این کار [openssl rand](https://www.openssl.org/docs/manmaster/man1/openssl-rand.html) هستش که یه [DRBG](https://en.wikipedia.org/wiki/Pseudorandom_number_generator) یا به عبارت دیگه deterministic random bit generator است.\n\n### منظور ازdeterministic random bit generator چیه؟\n\nتو دنیای واقعی برای ساختن عدد رندوم ( رمز یا کلید متقارن ) باید بریم سراغ زبان های برنامه نویسی و الگوریتم هایی که برای ساختن این اعداد ساخته شده\nفانکشن های زبان های برنامه نویسی همواره یه ورودی و یه خروجی دارن و اون وسط یه سری عملیات هستش که ورودی ما رو به خروجی تبدیل میکنه.  \nبا این تفاسیر پس همیشه ما باید انتظار عدد یکسانی رو داشته باشیم چون\n`f(x) = x2`\nاما برای رفع این مسئله از چیزی استفاده میشه به عنوان [seed](https://en.wikipedia.org/wiki/Random_seed) یا دانه که مقدار اولیه که قراره به فانکشن ما داده بشه رو هربار عوض میکنه تا خروجی فانکشن ما همیشه متفاوت باشه ولی این مقدار اولیه هم خودش رندوم واقعی نیست و از مثلا زمان کامپیوتر یا پوینتر ماوس برای مقدار اولیه استفاده میکنه به همین دلیله که به این الگوریتم ها میگن pseudorandom number generators چون درنهایت اگه ما مقدار اولیه و روش کار الگوریتم رو بدونیم میتونیم که رشته اعداد رو بازتولید کنیم.\n\nتوجه کنید که این مبحث اعداد رندوم تو علوم کامپیوتر یکی از مهم ترین و کاربردی ترین قسمت ها هستش و این توضیح بالا ورژن خیلی ساده شده بحثه پس اگه به موضوع علاقه مند شدین توصیه میکنم این [مقاله](https://www.digitalocean.com/community/tutorials/random-number-generator-c-plus-plus) رو درمورد اینکه چطور به وسیله CPP یه random number generator رو بنویسیم بخونید.\n\n### ویژگی های یه عدد رندوم خوب چیه؟\n\nاما یه عدد رندوم مناسب باید چه ویژگی هایی داشته باشه:\n\n1. همه اعداد از شانس برابرانتخاب شدن برخوردار باشن\n1. مستقل باشه یعنی نسبت به اعدادی که انتخاب شدن یا انتخاب خواهند شد رابطه ای برقرار نباشه ( مثلا تصاعد هندسی در اعداد برقرار نباشه )\n\n### چطوری به وسیله openssl rand یه رشته تصادفی بسازیم؟\n\nبرنامه openssl رو تقریبا میشه روی همه سیستم عامل های مدرن gnu/linux و posix پیدا کرد و کاربرد های زیادی داره که از حوصله این مقاله خارجه ولی اگه سری به man page قسمت openssl rand بزنیم میبینیم که از چند تا اپشن پشتیبانی میکنه\n\nبه صورت پیشفرض خروجی که openssl rand داره یه رشته رندوم Bytes هستش تو اکثر مواقع این رشته به درد کار ما نمیخوره چون encoding خاصی نداره و برای اکثر نرم افزارها غیرقابل خوندنه.\n\nیعنی اگه تایپ کنیم `openssl rand 64` برنامه ما یه رشته به اندازه 64 bytes ایجاد میکنه\n\nاما دوتا آپشن کاربردی دیگه hex و base64 هستن یعنی خروجی بایتی رو که برنامه openssl ایجاد کرده به base64 یا hexadecimal تبدیل میکنه\n\n#### base64\n\nاما فرمول سایز رشته خروجی ما چی هستش\n\nتو استاندارد base64 هر کاراکتر 6 bit هستش و از سه تا بلاک 8 bit ای ساخته شده به عبارتی هرکاراکتر ما مثل عدد یا حرف به 24 bit و 4 تا کاراکتر base64 تبدیل میشه.\n\nتصور کنید که ما خروجی یه رشته 32 بایتی رو از base64 انتظار داریم\n\nپس تو فرمول ما `4*(n/3)=32` مقدار n میشه 24 بایت\nچرا چون هر 3 تا بایت میشه یه کاراکتر base64 که خودش 4 تا کاراکتر utf8 میشه پس با این حساب ما به 24 بایت مقدار اولیه برای ساختن یه رشته 32 کاراکتری احتیاج داریم.\n\nکه به این صورت میتونیم یه رشته رندوم 32 بایتی رو به وسیله openssl بسازیم و انکود کنیم\n\n```\nopenssl rand -base64 24\n```\n\n##### اگه نیاز به یه رشته 64 بیتی یا 31 بیتی داشتیم چی؟\n\nاز اونجایی که مقدار 64 رند هستش و باقیمانده در تقسیم نداره کار محاسبه راحته کافیه مقدار 64 رو تو فرمول خودمون قرار بدیم `4*(n/3)=64` که میشه 48\n\n```\nopenssl rand -base64 48 | tr -d '\\n' | wc -m\n```\n\nمشاهده میکنیم که اندازه خروجی ما 64 کاراکتر یا به عبارت دیگه 64 بایته.\n\nبرای محاسبه 31 بیت باید تو فرمول خودمون عددمون رو گرد کنیم\nیعنی `4*(n/3)=31` که خروجیش میشه 32 یعنی به صورت دقیق نمیتونیم 31 بایت داشته باشیم\n\n```\nopenssl rand -base64 23 | tr -d '\\n' | wc -m\n```\n\n#### Hex\n\nهر کاراکتر تو مقیاس هگزادسیمال 4bit هستش یعنی هر بایت تبدیل میشه به دو کاراکتر هگزادسیمال\nبه همین سادگی میتونیم از فرمول n/2 استفاده کنیم\nیعنی اگه نیاز به 24 بایت خروجی داشته باشیم کافیه 24/2=12 رو به دست بیاریم\n\n```\nopenssl rand -hex 12\nopenssl rand -hex 12 | tr -d '\\n' | wc -m\n```\n"
    },{
      "id":         "/comparison-of-preprocessing-data-tools",
      "url":        "/comparison-of-preprocessing-data-tools.html",
      "image":      "assets/article_images/data-pre-processing/data-preparation-process.jpg",
      "title":      "من چطوری دیتا رو پردازش میکنم ؟",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2023-07-24 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"من چطوری دیتا رو پردازش میکنم ؟\"\ndate: 2023-07-24\ncategories: development\nimage: assets/article_images/data-pre-processing/data-preparation-process.jpg\ntoc: true\n---\n\n### مقدمه\n\nیکی از کارهایی که که تو زیرساخت به تناوب تکرار میشه گزارش گیری و مقایسه منابع هستش مخصوصا زمانی که replication داریم و یا میخوایم از دیتامون بکاپ داشته باشیم یا تحلیل لاگ webserver برای پیدا کردن خطا ...\n\nاز پراستفاده ترین مدل این مقایسه ها میشه به \n* union(full join) \n* intersection(inner join) \n* complement(right or left join) \n\nاشاره کرد. \n\n![](assets/article_images/data-pre-processing/sqljoins.jpg \"sql joins\")\n\nدر ادامه میخوام درمورد ابزارهایی که برای پردازش این دیتا استفاده میکنم صحبت کنم \n\n### awk\nساده ترین نوع مقایسه این مجموعه ها اینه که تو unix از `awk` برای گزارش های خودمون استفاده کنیم که ابزار خوب و ساده و سریعیه و میتونه میلیون ها رکورد روبه سرعت مقایسه کنه اما استفاده از `awk` ضعف هایی هم داره مخصوصا زمانی که حجم داده یا منطق کد پیچیده تر میشه\n* awk برای مقایسه field ها character های اون ها رو باهم مقایسه میکنه و از hash map و الگوریتم های membership checking یا دیتا استراکچری مثل [binray tree](https://en.wikipedia.org/wiki/Binary_tree) استفاده نمیکنه این به خودی خودش ضعف محسوب نمیشه ولی وقتی حجم و پیچیدگی دیتا از یه حدی بیشتر میشه سرعت پردازش رو خیلی کاهش میده یا مصرف حافظه رو به حدی بالا میبره که باعث میشه سیستم عامل برنامه awk ما رو Kill کنه \n\n* برای استفاده موثر از awk باید از ابزار های دیگه unix مثل `uniq` و `sort` برای مرتب کردن دیتا استفاده کرد که خوانایی کد رو پایین میاره و نیازمند تکراره( به دلیل همون مسئله ای که بالاگفتم چون awk کاراکتر ها رو باهم مقایسه میکنه اگه فایل ما sort شده باشه سرعت این مقایسه بیشتر میشه ) \n\n### python\nراه حل جایگزین دیگه استفاده از پایتون ( یا هر زبان برنامه نویسی دیگه ای ) هستش\nاما پایتون هم با وجود قدرت و انعطاف پذیری که داره محدودیت هایی برای ما داره همون طوری که میدونید پایتون یه زبان سطح بالا هستش که object ها رو تو memory ذخیره میکنه و اگه ما خودمون به صورت منطقی این memory managment رو انجام ندیم احتمال اینکه برنامه ما برای رکورد های حجیم توسط OOM سیستم عامل kill بشه بالا است. و این کار یعنی memory managment هم ساده نیست و نیازه که منطق کد تغییر کنه\n\nمورد دیگه اینه که پایتون به خودی خودش به صورت بهینه از تمامی منابع سیستم استفاده نمیکنه و تو حالت عادی single thread هستش و برای استفاده بهینه از منابع باید از روش های پیچیده تر استفاده کرد \n\nاما استفاده از پایتون مزیت هایی هم داره: \n\n* برای سناریو هایی که لازمه دیتا از منابع مختلف جمع آوری بشه و منطق برنامه پیچیده تره \n* ایجاد وب سرویس به سادگی برای پردازش دیتا ورودی و خروجی \n\n### SQL databases\nراه حل سوم و پیشنهادی برای دیتای حجیم و پیچیده استفاده از database engine ها برای اینکار هستش به چند دلیل\n\n* این نرم افزارهای عموما DBMS برای کار با دیتا حجیم ساخته شدن و بحث memory managment موقع طراحی نرم افزار اعمال شده\n\n* زبان Query که استفاده میشه معمولا sql هستش و این زبان قدرتمند این قابلیت رو به ما میده که از operator های این زبان برای مجموعه ها استفاده کنیم.\n\n* برای عملیات های پیچیده با شروط مختلف که نیازمند درنظر گرفتن پارامتر های زیادی هستش میشه از کوئری های تودرتو استفاده کرد\n\n* برای بهینه کردن کوئری های SQL خود DBMS ها ابزارهای مفیدی دارن که آنالیز کوئری رو راحت میکنه \n\n* برنامه های DBMS از دهه شصت میلادی به این سو وجود داشتن و همواره درحال بهبود و بهتر شدن بودن طبیعیه که سرعت و دقت و مصرف منابعشون به شدت بهینه تر باشه \n\n* اکثریت DBMS های مدرن امکان sharding و replication رو به ما میدن که برای پردازش حجم بسیار زیادی از داده دست ما رو باز میزاره \n\nبرای درک بهتر این مسئله میریم سراغ یه مثال و بعدش راه حل های مختلفی که این سه ابزار یعنی awk و python و sqlite3 جلوی ما میزارن\n\n### گزارش گیری از اشتراک دو مجموعه\n\nموردی که من باهاش مواجه شدم بحث گزارش گیری از دو storage account مختلف روی azure بود و من این کار رو به وسیله ابزار [rclone](https://rclone.org/) انجام دادم که به مراتب سریع تر از [cmdlet](https://learn.microsoft.com/en-us/powershell/module/az.storage/get-azstorageblob?view=azps-10.1.0) های خود مایکروسافت هستش.\n\nسوای اینکه چطور میشه از object هایی که روی cloud هست گزارش گرفت بحث اصلی مقایسه این دوتا دیتاست هستش که درادامه سعی میکنم ابتدا دیتایی مشابه(sample data) رو ایجاد کنم و بعدش روش های مختلفی که میشه این دوتا رو باهم مقایسه کرد رو برسی کنیم\n\nبرای اینکه sample data رو بسازیم به سه شرط احتیاج داریم\n* دیتا یکتا در مبدا (source)\n* دیتا یکتا در مقصد(destination)\n* دیتا مشترک بین source و destination\n\nاینجوری ما یه مجموعه(set) خواهیم داشت که باهم یه سری اعضا رو به اشتراک گذاشته ان.\n\nبرای ساختن دیتا sample روی bash\n\n```\n#creating source objects\n\nfor i in {0..10000000}\ndo\n  echo \"object$i\" >> source.txt\ndone\n\n# creating destination objects\n\n for i in {5000000..15000000}\ndo\n  echo \"object$i\" >> dest.txt\ndone\n\n```\nبا کامند بالا حالا ما دوتا فایل `source.txt` و `dest.txt`داریم که 5 میلیون آبجکت مشترک دارند\n\n#### گزارش گیری به وسیله awk\n\nبرای اینکه اشتراک بین دوتا مجموعه رو به دست بیاریم باید column های این دوتا فایل رو باهم مقایسه کنیم\nخوندن [این مقاله](https://www.cs.princeton.edu/courses/archive/spr04/cos333/03awk) رو برای فهمیدن اجزای مختلف کامند های AWK توصیه میکنم ولی اگر کد پایین رو بشکونیم ما چند تا منطق رو داریم\n* `FNR==NR` به این معنی هستش که آخرین رکوردی[^1]  که `AWK` محاسبه میکنه به تعداد خطوطی که تو فایل اول یعنی `source.txt` وجود داره علت این مسئله هم برمیگرده به رفتار awk که تا زمانی که NR بزرگ میشه به کارش ادامه میده. تو حالت عادی NR مجموع تعداد خطوطی هستش که تو دوتا فایل وجود داره ولی وقتی ما `FNR=NR` قرار میدیم `NR` برابر با تعداد خطوط فایل اول یعنی `source.txt` میشه. \n\n* مرحله دوم ریختن مقدار اولین field لاگ ما یعنی `object[ID]` تو یه متغیر به اسم `found` هستش\n\n* مرحله بعدی مقایسه این متغیر با اولین field فایل دوم یعنی `dest.txt` هستش\n```\nawk 'FNR==NR{found[$1]++; next} $1 in found' source.txt dest.txt\n```\n\nاجرا شدن این کد روی سیستم من حدود 5 ثانیه وقت گرفت که میتونه به نسبت کامپیوتر و میزان فضای پردازشی شما متفاوت باشه ولی برای یه گزارش گیری سریع محسوب میشه و به نظرم روش های بعدی براش overkill محسوب میشن پس سعی میکنم حجم داده و پیچیدگیش رو کمی بیشتر کنم تا محدودیت ها خودش رو بیشتر نشون بده.\n\n\n\n#### گزارش گیری به وسیله python\n\nهمون طور که [بالا](#python) به اون اشاره کردم روش های زیادی برای کار با دیتا تو پایتون وجود داره و معمولا رابطه مستقیمی بای این داره که حجم و پیچیدگی دیتا شما به چه صورت هستش مثلا برای دیتا بالا که به وسیله awk پردازشش کردیم کد مشابه پایتونی میتونه به این صورت و به وسیله set که builtin datastrucure خود پایتون هست انجام بشه \n```\nimport sys\nimport csv\n\nsourceblobs = frozenset(line.strip() for line in open(\"source.txt\").readlines())\ndestinationblobs = frozenset(line.strip() for line in open(\"dest.txt\").readlines())\n# get the size of sets\nprint(\"size of the source blob\", sys.getsizeof(sourceblobs))\nprint(\"size of the destination blob\", sys.getsizeof(destinationblobs))\n\n#sharedobject = frozenset( sourceblobs & destinationblobs )\nintersection = sourceblobs & destinationblobs\n\nwith open('report.csv', 'w') as f:\n    write = csv.writer(f)\n    write.writerow(['Filename'])\n    for item in intersection:\n        write.writerow([item])\n\n```\n\n##### ولی اگه حجم دیتا از یه حدی بیشتر بود چی؟ \n\nخب برای ساختن دیتاست بزرگتر bash نمیتونه ابزار خوبی باشه چون while به اندازه کافی سرعت مناسبی رو نداره پس دست به دامن python میشیم برای ساختن دیتاست خودمون. \n> برای ساختن دیتاست شبیه به دنیای واقعی مثل آدرس و اسم و بقیه رکورد های معمول بهتره که از ابزارهایی که برای این کار موجوده مثل [faker](https://faker.readthedocs.io/en/master/) استفاده کرد \n\n```\ndef create_huge_log(outputfile_location,start_range,end_range):\n    with open(outputfile_location, 'a') as outfile:\n        for item in range(start_range,end_range):\n            outfile.write(\"object\" + str(item) + '\\n')\n\ncreate_huge_log(\"./source_huge\",1,100000000)\ncreate_huge_log(\"./dest_huge\",50000000,150000000)\n\n```\n\nبا اجرا کردن همون کامند awk اگه میزان رم سیستم شما مثل من محدود باشه سیستم عامل به دلیل مصرف بیش از حد رم کامند awk شما رو kill میکنه \n\n```\nawk 'FNR==NR{found[$1]++; next} $1 in found' source_huge dest_huge > tmp\n```\nپس باید به سراغ یه راه حل جایگزین رفت یعنی استفاده از دیتاتایپ یا روش دیگه ای برای برای پردازش دیتا خودمون \n\n##### استفاده از dask برای پردازش دیتا تو حجم زیاد \n\nاگه قبلا از pandas که یکی از محبوب ترین پکیج های پایتون برای پردازش dataframe های خودتون استفاده کرده باشین حتما به محدودیت های حافظه برخورد کردین . \nبرای رفع این مسئله یه پکیج پایتونی به اسم dask وجود داره که به جای اینکه یبارکی تمام دیتا شما رو تو یه dataframe لود کنه اون رو به پارتیشن های مختلف میشکونه و اینجوری باعث میشه که لود شدن دیتا در مقایسه با set یا panda dataframe خیلی سریعتر باشه ولی یه tradeoff هم داره که به نسبت حجم داده سرعت پردازش هم پایین تر میاد. \n\n1. خوندن [این مقاله](https://pub.towardsai.net/python-pandas-vs-dask-dataframes-a-comparative-analysis-c0f59dad5eeb#:~:text=Pandas%20is%20better%20suited%20for,choice%20for%20handling%20larger%20datasets.) برای مقایسه pandas و dask رو توصیه میکنم.\n1.  خوندن [این مقاله](https://rcpedia.stanford.edu/topicGuides/merging_data_sets_dask.html) برای استفاده از dask برای عملیات merge رو توصیه میکنم.  \n\nیه خوبی دیگه که dask رو میتونه برای استفاده های جدی تر به گزینه خوبی تبدیل کنه اینه که multithread هستش و میتونه distributed روی ماشین های مختلفی اجرا بشه که ضعف سرعت در مقایسه با بقیه ابزارهایی که همه چیز روی RAM لود میشه کمتر بشه. \n\nاما بریم سراغ کد : \n\n```\nimport dask.dataframe as dd\n\nsource_data_frame = dd.read_csv(r\"./source_huge\")\ndest_data_frame = dd.read_csv(r\"./dest_huge\")\n\nmerged = dd.merge(source_data_frame, dest_data_frame, on=[\"log\"], how='inner')\n\nmerged.to_csv('./report.csv', single_file = True)\n```\n\nهمون طور که متوجه شدین سرعت بزرگترین مزیت استفاده از dask نیست ولی میتونید مطمعا باشید که برنامه شما به خاطر مصرف تمام حافظه kill نمیشه. \n\n#### گزارش گیری به وسیله sqlite3\nدنیای SQL compatible database ها پر از اسامی پر افتخاری مثل Mysql و MS sql server و Postgresql و Mariadb هستش. \n\nاین بسته به تجربه و راحتی استفاده شما داره که کدوم یکی از این ها رو برای پردازش دیتا خودتون استفاده میکنید ولی برای تعداد خیلی زیادی از سناریو ها به نظر من دیتابیس سبک و قدرتمند sqlite پاسخگو هستش. \n\nاما بریم سراغ پردازش دیتا خودمون.\n\n```\n#copy files to csv format \n\ncp dest_huge dest_huge.csv\ncp source_huge source_huge.csv\n\n#add csv field \nsed  -i '1i log' source_huge.csv\nsed  -i '1i log' dest_huge.csv\n\n#create tables and import data \n\nsqlite3 set.db\ncreate table sourcelog(log text);\ncreate table destlog(log text);\n.import source_huge.csv sourcelog --csv\n.import dest_huge.csv destlog --csv\n.exit \n\n#run sql query to get intersect between two source and dest tabel \n\nsqlite3 -header -csv set.db 'SELECT * FROM sourcelog INTERSECT SELECT * FROM destlog;' > intersect.csv\n```\nهمون طور که متوجه شدین sqlite3 در مقایسه با بقیه ابزارها با سرعت خیلی بیشتری جواب میده\n\n###  نتیجه گیری \n\nشاید بپرسین با وجود اینکه دیدیم sqlite3 سریعتر از بقیه ابزارها جواب میده پس چرا بازم از اونا استفاده میکنیم؟ \n\n* برای iterate کردن با دیتا کم که معمولا اکثر اوقات دیتا ما حجیم نیست ابزاری مثل awk یا python خیلی کار دیباگ رو راحت و سریع میکنه \n\n* برای مقایسه sql و dask به نظرم این [مقاله](https://docs.dask.org/en/latest/dataframe-sql.html) خیلی خوب tradeoff ها رو توضیح داده \n\nدرنهایت انتخاب ابزار مناسب برای پردازش دیتا برایندی از مقیاس و پیچیدگی و زمان و منابع شما. \n \n[^1]: خط تو فایل لاگ ما FNR indicates how many records have been read from the current input file\n"
    },{
      "id":         "/practical-usage-of-sets-in-daily-life.md",
      "url":        "/practical-usage-of-sets-in-daily-life-md.html",
      "image":      "assets/article_images/scammers/sellingdreams.jpg",
      "title":      "در ستایش مجموعه ها و کاربردشون در زندگی واقعی",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2023-07-21 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"در ستایش مجموعه ها و کاربردشون در زندگی واقعی\"\ndate: 2023-07-21\ncategories: development\nimage: assets/article_images/scammers/sellingdreams.jpg\ntoc: true\n---\n\n\nهمه ما تو دوران تحصیلمون از اینکه کاربرد بعضی از مباحث چیه ناله کردیم. \nبه نظرم این از ضعف سیستم آموزشی ما هم هستش البته که قبل از درست کردن احساس نیاز مستقیما میره سراغ فرو کردن یه مسئله به صورت کاملا محض تو مغز بچه های طفل معصوم. \n\nیکی از این مباحثی که خیلی بزرگی و کاربردش اون موقع ها به چشم نمیومد بحث مجموعه ها بود \n\n### اما مجموعه چی هستش ؟ \n\n> **مجموعه یه مدل ریاضیه برای گردآوری چیزهای مختلف.** \n\nخب این توصیف خیلی کلی و شاید ملموس نباشه بهتره از مثال استفاده کنیم \n\nمثلا تصور کنید که ما میخوایم اسم تمامی فایل هایی که تو یه دایرکتوری وجود داره رو جمع آوری کنیم این میشه ساختن یه مجموعه ای از اسامی فایل ها. به این صورت \n\n```\n#create a temporary directory \nmkdir /tmp/sets\ncd /tmp/sets\n\n# in t in range between 1-100 create files with the number\n# in the filename \n\nfor i in {1..100};\n do touch TEST$i; \ndone\n\n#by listing the filenames we create a set \n\nls -la \n```\n\nیعنی ما یه صفت مثل اسم فایل رو مبنا قرار دادیم و بر این اساس اومدیم یه مجموعه ای از این اسامی ساختیم. \n\n### کاربرد مجموعه ها تو زندگی واقعی یه مهندس دواپس چیه؟ \n\n"
    },{
      "id":         "/cognitive-methods-to-deal-with-the-scammers",
      "url":        "/cognitive-methods-to-deal-with-the-scammers.html",
      "image":      "assets/article_images/scammers/sellingdreams.jpg",
      "title":      "رویافروشی: روش های شناختی برای اینکه سرمون کلاه نره",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2023-07-20 00:00:00 +0000",
      "tags":       [],
      "categories": ["life"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"رویافروشی: روش های شناختی برای اینکه سرمون کلاه نره\"\ndate: 2023-07-20\ncategories: life\nimage: assets/article_images/scammers/sellingdreams.jpg\ntoc: true\n---\n\n### تاریخچه متخصری از بازاریابی\n\nتو دنیای قدیم وقتی یه بابایی یه دکون یا مغازه داشت منتظر میموند تا مشتری بیاد و چیزی رو ازش بخره \nتا سال های سال این روند وجود همینجوری ادامه داشت تا زمانی که مدیا و رسانه و خط تولید و انقلاب صنعتی بازار رو متحول کرد یعنی دیگه اوس محمود تو خونه خودش یه محصولی رو تولید نمیکرد که به دست مشتری برسونه و مشتری دیگه از طریق شنیدن از دوستان و اطرافیان متوجه کیفیت یه محصول نمیشد پس نقش تبلیغات از کیفیت بیشتر شد و روش های مارکتینگ هم عوض شد یعنی به جای باز کردن دکون و منتظر بودن برای مشتری حالا باید ما به دنبال مشتری میرفتیم. \n\nاینجا بود که رویا فروشی تو دوران مدرن خلق شد یعنی فروش محصول بی کیفیت فقط به اتکا به هنر بازاریابی. \n\nحالا ما با یک دنیایی مواجه هستیم که خریدار باید کیفیت محصولات رو تشخیص بده و این اغلب درمورد محصولاتی که شکل کالای فیزیکی رو ندارند مثل محصولات آموزشی یا ایده ها سخت تره یعنی نیاز به افراد متخصصی رو داره که محصولات رو برسی کرده باشن چون لزوما نمره یا ریت بالا تو سایت فروشنده به معنای واقعی بودن این نمرات نیست. \n\nاما بریم سراغ مهارت هایی که تا حد زیادی میتونه ما رو نسبت به اکثریت کلاهبردار ها و فروشنده های زرنگ که دنبال انداختن کالای بنجل خودشون به ما هستن رو بگیره ( این ها کاملا تجربه های شخصی خودمه و هیچکدوم از کتاب یا مقاله دیگه ای نیست ) \n\n### روش های شناختی برای اینکه سرمون کلاه نره\n1. **هیچ گربه ای برای رضای خدا موش نمیگیره** این یه ضرب المثل معروف فارسیه که خیلی تو مواقعی که سعی داریم نیت آدم ها رو بشناسیم به ما کمک میکنه مثلا اگه یه مدیر محصول به ما ایمیل زد که بیا بریم ناهار باهمدیگه به حساب شرکت ما به احتمال زیاد میخواد مصول شرکتشون رو به شما بفروشه.\nانگلیسی زبان ها هم  یه ضرب المثل مشابه دارن که میگه [There ain't no such thing as a free lunch](https://en.wikipedia.org/wiki/There_ain%27t_no_such_thing_as_a_free_lunch) یعنی ناهار مجانی وجود نداره. \n1. **نیاز های خودمون رو بشناسیم** اینجوری اگه یه فروشنده با جاروبرقی پرنده به سراغمون اومد میتونیم بگیم بهش احتیاجی نداریم هرچند که جاروبرقی پرنده بهترین محصول دنیا باشه. اینشکلی هم تو فضا صرفه‌جویی کردیم هم تو پولی که خرج میکنیم هم در انتها حس احمق بودن برای خریدن محصولاتی که به هیچ دردی نمیخورن نخواهیم داشت. \n1. **بهینه جست و جو کنیم**. با وجود اینترنت این روزها بدیهیه که جست و جو کردن اولین واکنش ما انسان مدرن نسبت به پیدا کردن اطلاعات نسبت به محصولات باشه \nمثلا اگه بخوایم مهارت جدیدی رو یاد بگیریم کافیه که سرچ کنیم ولی بهینه سرچ کردن با سرچ کردن به تنهایی متقاوته. تو جست و جوی بهینه ما صرفا روی اولین لینکی که گوگل به ما پیشنهاد میکنه کلیک نمیکنیم و همه اعتمادمون رو صدرصد پای اولین لینک نمیزاریم. همون طور که میدونید شرکت ها به گوگل بابت تبلیفات پول میدن و کلی هم هزینه َSEO میکنن که لینک اول باشن پس با دقت مقایسه کنید \n1. **از متخصصین سوال بپرسیم**. همون جوری که برای معده درد به سراغ پزشک متخصص میرین برای سوال هایی مثل آینده کاری و اینکه چطور برنامه نویسی رو یاد بگیریم از متخصصین سوال کنید. بهترین جا هم برای پرسیدن این سوالات انجمن های تخصصی مثل reddit هستش. \n\n### سخن آخر\nاگه با وجود رعایت همه موارد بالا بازم گیر سخنان انگیزشی و آموزش دهنده های مکار افتادین به خودتون سخت نگیرید و سعی کنید از تجربیات خودتون درس بگیرین. همون جوری که شما روز به روز درحال پیشرفت هستین کلاهبردار ها و انگیزشی ها و رویافروش ها درحال به روز کردن روش های خودشون برای به قلاب انداختن هرچه بیشتر طعمه های خودشون هستند. \n"
    },{
      "id":         "/class-vs-variable-powershell",
      "url":        "/class-vs-variable-powershell.html",
      "image":      "assets/article_images/powershell/powershell.png",
      "title":      "تعریف کردن class تو powershell",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2023-07-18 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"تعریف کردن class تو powershell\"\ndate: 2023-07-18\ncategories: development\nimage: assets/article_images/powershell/powershell.png\ntoc: true\n---\n\n### مقدمه \n\nبه عنوان یه لینوکس ادمین هربار که مجبور میشدم سراغ کارهای پیچیده اسکریپتینگ برم راه حل تو لینوکس استفاده از Python بود به دو دلیل:\n\n1. bash از [OOP](https://en.wikipedia.org/wiki/Object-oriented_programming) ساپورت نمیکنه \n1. bash برای loop  های پی در پی گیج کننده است\n\n ولی تو اکوسیستم ماکروسافت استفاده از Python به دلیل [cmdlet](https://learn.microsoft.com/en-us/powershell/scripting/developer/cmdlet/cmdlet-overview?view=powershell-7.3) های آماده ای که خود ماکروسافت در اختیار توسعه دهنده گذاشته انتخاب غلطیه. \n\nتو پست قبلی درمورد مقایسه کردن powershell و bash از برتری powershell به خاطر object oriented بودنش گفتم یکی از مثال های بارز این قابلیت powershell تعریف custom object هستش.\n\nمیخوام سه مثال مقایسه تعریف variable و objects رو تو Python و Bash و Powershell بزنم تا راحت تر متوجه این تفاوت بشید \n\n\n### تعریف class تو python \n\n```\nclass Person:\n  def __init__(self, name, lastname, eyecolor,  age):\n    self.FirstName = name\n    self.LastName = lastname\n    self.EyeColor = eyecolor\n    self.age = age\n\np1 = Person(\"John\", \"Doe\", \"Brown\", 36)\n\nprint(p1.FirstName)\nprint(p1.LastName)\n```\n\n### تعریف class تو Powershell \n\n```\nclass Person {\n    [String]$FirstName\n    [String]$LastName\n    [String]$EyeColor\n    [Int]$Age\n}\n\n$johnDoe = New-Object Person\n$johnDoe.FirstName = 'John'\n$johnDoe.LastName = 'Doe'\n$johnDoe.EyeColor = 'Brown'\n$johnDoe.Age = 33\n\n$johnDoe.FirstName\n$johnDoe.LastName\n\n```\n\n### تعریف variable تو bash\n\n```\nname=\"John\" \nlastname=\"Doe\"\n\necho $name \necho $lastname \n\n```\n\n### برتری استفاده از class نسبت به تعریف variable برای هر آبجکت چیه ؟ \n\nبه صورت خلاصه برتری class نسبت به variable \n\n1. کد ما درنهایت تمیز تر و خوانا تره و برای تغییر کافیه که class تغییر کنه \n1. از تکرار بیهوده جلوگیری میشه \n\n اگه تصور کنیم تعداد زیادی instance ما از هرکدوم از این class ها داشته باشیم Powershell و Python سربلند بیرون میان \n برای مثال ما بخوایم فرد دیگه ای رو ثبت کنیم مثلا تو Powershell\n \n```\n$mamad = New-Object Person\n$mamad.FirstName = 'mamad'\n$mamad.LastName = 'gholi'\n$mamad.EyeColor = 'Black'\n$mamad.Age = 25\n\n$mamad.FirstName\n$mamad.LastName\n```\n\nولی تو bash مجبوریم که به ازای هر مقدار جدیدی ما یه variable تعریف کنیم یا این محدودیت های bash رو به روش های دیگه ای دور بزنیم. \n"
    },{
      "id":         "/usbipd-win",
      "url":        "/usbipd-win.html",
      "image":      "assets/article_images/usbipd-win/usbipd-win.png",
      "title":      "ماونت کردن فایل سیستم Ext4 روی wsl2 ویندوز",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2023-07-17 00:00:00 +0000",
      "tags":       [],
      "categories": ["homelab"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"ماونت کردن فایل سیستم Ext4 روی wsl2 ویندوز\"\ndate: 2023-07-17\ncategories: homelab\nimage: assets/article_images/usbipd-win/usbipd-win.png\ntoc: false\n---\n\n> این اولین مطلب از سری مطالب [HomeLab](/homelab) محسوب میشه که یه مقدمه خوبه برای همه کسایی که با rpi روی ویندوز کار میکنن\n\nههمون طور که میدونید برخلاف روزمره که از سیستم عامل لینوکس برای کاراستفاده میکنم\nسیستم عامل سیستم خونگی من ویندوزه اونم به چند دلیل\n1. من کار کردن با سیستم عامل های مختلف رو به خاطر تنوع و تغیییری که میده دوست دارم\n1. بازی کردن بخش بزرگی از تفریح من خارج از محیط کار محسوب میشه و ویندوز با ساپورت خوب درایور ها و بازی ها پلتفرم عالی برای بازی کردنه. لینوکس هم تو سال های اخیر مخصوصا با پشتیبانی steam خیلی بهتر شده ولی هنوز فاصله داره\n\nاما ویندوز یه ضعف بزرگ داره اونم ساپورت به شدت ضعیفش از فایل سیستم Ext4 هستش که یکی از محبوب ترین فایل سیستم های متن باز و آزاد هستش\n\nبعد از کلی گشتن تو فروم های مختلف و تست کردن نرم افزارهای مختلف میتونم بگم هیچ نرم افزار رایگانی حداقل روی ویندوز وجود نداره که بشه به راحتی باهاش فایل سیستم Ext4 رو mount کرد و فایل ها رو ادیت کرد\n\nاین خبر بد بود ولی خبر خوب اینه که میشه drive ها رو از windows به وسیله نرم افزار [usbipd-win](https://github.com/dorssel/usbipd-win) به wsl2 متصل کرد اما نیازمند یه سری ژانگولر بازیه.\n\n[این](https://github.com/dorssel/usbipd-win/wiki/WSL-support#building-your-own-usbip-enabled-wsl-2-kernel) آموزش رسمی خود usbpid برای چگونه کامپایل کردن کرنل برای لینوکسه ( من نمیدونم چرا به صورت دیفالت این درایور ها رو فعال نمیکنن واقعا احمقانه است که از همه کاربرا انتظار داشته باشیم که فیچری مثل usb mass storage رو خودشون فعال کنن )\n\n[اینم](https://microhobby.com.br/blog/2019/09/21/compiling-your-own-linux-kernel-for-windows-wsl2/) یه آموزش دیگه که ویدئو یوتوبم داره\n\nآموزش رسمی یه نواقصی رو هم داره مثلا بعضی از پیش نیاز ها ممکنه وجود نداشته باشه یا فایل `bzImage` تو شاخه `arch/x86_64/boot/bzImage` وجود داره\n\nاین پیش نیاز گمشده است\n\n```\nsudo apt install dwarves\n\n```\n\nمن به صورت کامل `vmlinux` که کرنل کامپایل شده هستش رو به مسیر  ` /mnt/c/Users/<username>` انتقال دادم\nو فایل کانفیگ wsl من به این صورته\n\n```\n# cat /mnt/c/Users/<user>/.wslconfig\n\n[wsl2]\nlocalhostForwarding=true\nkernel=C:\\\\Users\\\\<user>\\\\vmlinux%\n```\n\nو اما برای ماونت کردن یه sdcard مثلا که از sdcard reader هستش کافیه که لیست دیواس های فعلی رو روی سیستم ویندوزی خودمون بگیریم و بعدش دیوایسی که میخوایم رو به wsl  اتچ کنیم\n\n```\nusbipd list\nusbipd wsl attach --busid 4-3\n\n```\n\nاگه خوش شانس بوده باشید و همه چیز بر وفق مراد پیش رفته باشه حالا باید بتونید با استفاده از کامند `lsblk` دیسک مورد نظر و پارتیشن هاش رو ببینید\nبرای ماونت کردن پارتیشن های Ext4 کافیه تو مسیر mnt یه دایرکتوری بسازین و پارتیشن رو به اون ماونت کنید به این صورت\n\n```\nsudo mkdir /mnt/rpi\nsudo mount /dev/sdd1 rpi\n\n```\n\nحالا میشه به وسیله `dd` از `image` نسخه پشتیبان تهیه کرد و از اینکه روی ویندوز بود سوگواری نکرد.\n"
    },{
      "id":         "/homelab",
      "url":        "/homelab.html",
      "image":      "assets/article_images/homelab/homelab.jpg",
      "title":      "آزمایشگاه خانگی: از ایده تا عمل",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2023-07-17 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"آزمایشگاه خانگی: از ایده تا عمل\"\ndate: 2023-07-17\ncategories: development\nimage: assets/article_images/homelab/homelab.jpg\ntoc: true\n---\n\n\n### چی شد به این نتیجه رسیدم که یه آزمایشگاه خونگی رو راه بندازم؟\nچند وقتی که بیشتر بلاگ نویسی میکنم \nمیتونه دلایل زیادی داشته باشه ولی فکر میکنم به خاطر اینه که این روزا وقت آزاد بیشتری برای نوشتن دارم و دوست دارم از این فرصت به خوبی استفاده کنم. \n\nدلیل دیگه اینه که میبینم homelab چقدر میتونه هم برای خودم ارزشمند باشه هم کاربرایی که اینجا منو به زبان فارسی دنبال میکنن. \n\n\nاما درمورد عنوان این پست بلاگ \nداشتم به این فکر میکردم که به صورت دائمی یه HomeLab کوچولو و تر و تمیز رو بیارم بالا که همه چیزش ( به غیر از secret ها ) کاملا opensource باشه و با ایده بلاگ که بهبود یه تلاش دائمی است همخوانی داشته باشه \n\nمنظور از اینکه بهبود یه تلاش دائمی است اینه که من هرچند وقت یه بار به گذشته نگاه میکنم به مسیر و به چیزایی که نوشتم یا میدونستم و بعد به چیزایی که امروز دغدغه خودم هستش و درموردشون مینویسم نگاه میکنم اگه جایی برای ثبت این تغییرات وجود نداشت من هیچوقت متوجه نمیشدم چه مسیری رو طی کردم. \nگاهی وقت ها هم خسته شدم یا کنار گذاشتم \nنه به مدت کوتاهی شاید حتی چندین سال ولی همیشه اینجا وجود داشت و آماده بود تا بهش برگردم. \n\nدرمورد هوم‌لب هم این صادقه یعنی نگاه میکنم میبینم طی این سالیان من همیشه درحال ساختن و خراب کردن این هوم‌لب بودم ولی وقتشه که پایه ها و ستون های این رو بزارم من که هم برای خودم سودمند باشه یعنی جایی که میشه با چند تا کلیک دوباره هوم‌لب رو اورد بالا هم برای دیگرانی که این وبلاگ رو دنبال میکنن. \nبرای مثال پستی که درمورد استفاده از [ArgoCD](/kubernetes-ensoulment-argocd) نوشتم میتونه به صورت عملی روی هوم‌لب بیاد بالا و هرکسی با هر سطح دانشی با دنبال کردن پست های هوم لب درنهایت بتونه هوم لب خودش رو داشته باشه. \n\nچیزی که دوست دارم تو این مطالب منعکس بشه دانش پایه تا حدودی سخت افزار و لینوکس شبکه و زیرساخت هستش.\n\nاتومیشن و تمیز کار کردن هم بخش بزرگی از ماجراست \nیعنی صرفا قرار نیست که یه quick start باشه و قراره دغدغه روزمره و دنیای واقعی ما رو پاسخ بده. \n\n### آزمایشگاه خانگی چه ویژگی های قراره داشته باشه؟ \n\n1. روی Raspberry Pi 4 Model B اجرا میشه\n1. به صورت headless و با سیستم عامل Debian \n1. تمامی کانفیگ ها برای سیستم عامل به وسیله ansible اعمال میشه \n1. تمامی منیفست ها برای کلاستر کوبرنتیز به وسیله Helm یا Kustomize \n1. مانیتورینگ monitoring \n1. جمع آوری لاگ log management \n1. ردیابی ریکوئست ها opentracing \n1. دسترسی به کلاستر به وسیله tailscale\n1. سرویس دیسکاوری با hashicorp consul \n1. مدیریت secret های درون کلاستر \n\nو هر مورد دیگه ای که به ذهنم برسه بعدا که میتونه کلاستر رو بهتر و باحال تر و باارزش تر کنه \n"
    },{
      "id":         "/secure-management-of-secrets-in-the-development-and-infrastructure-environment",
      "url":        "/secure-management-of-secrets-in-the-development-and-infrastructure-environment.html",
      "image":      "assets/article_images/secrets/secrets.png",
      "title":      "مدیریت امن secret ها تو محیط توسعه و زیرساخت",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2023-07-14 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"مدیریت امن secret ها تو محیط توسعه و زیرساخت\"\ndate: 2023-07-14\ncategories: development\nimage: assets/article_images/secrets/secrets.png\ntoc: true\n---\n\n> قبل از اینکه مقاله رو بنویسم فکر نمیکردم انقدر طولانی و مفصل بشه ولی برای خودمم عجیب شد که چقدر روش ها و رویکرد ها برای مدیریت رمز و رموز توسعه نرم افزار زیاده پس اگه جایی از قلم افتاده یا نیاز به توضیحات بیشتر وجود داره خوشحال میشم که فیدبکتون رو برام بفرستید حالا چه تو شبکه های اجتماعی چه تو کامنت های بلاگ \n\nیکی از چالش هایی که همه دواپس ها و توسعه دهنده ها باهاش رو به  رو میشن یه روش امن و صحیح برای ذخیره پسورد ها و credentials و secrets تو محیط های مختلف توسعه است \n\nقبل از اینکه سراغ اینکه چه روش هایی برای مدیریت این secrets های حساس وجود داره بزارین درمورد این صحبت کنیم که چه الگوهای غلطی[^1]  برای مدیریت secret ها تو دنیای نرم افزار وجود داره تا با شناختنشون از اون ها جلوگیری کنیم \n\n### الگوهای های غلط مدیریت secret ها \n\n##### به اشتراک گذاری پسورد ها \n\nهمه ما عادت داریم که از ابزارهای مسیجینگ مثل slack برای پیام دادن به همکارهامون استفاده کنیم اما به اشتراک گذاری secret ها چرا تو slack عاقلانه نیست \n* شرکت slack ممکنه هک بشه و اونوقت history مکالمه های ما کف دست هکراست \n* ما همه از ابزارهای integration برای مدیریت راحت تر slack استفاده میکنیم. اگه به هر دلیلی این third-party ها شروع کنن به جمع آوری و پایش history ما این وضعیت دوست داشتنی برای ما نخواهد بود \n\nاما این تنها بدی استفاده از یه پسورد مشترک برای همه چیز نیست تصور کنید یکی از اعضای تیم جدا بشه اونوقت مطمعا باشید اگه از یه پسورد مشترک برای همه نرم افزارهای خودتون استفاده کرده باشید قرار نیست که عوضش کنید و این خودتون و کمپانی رو هم تو ریسک میندازه \n\n#### اشتراک گذاری secret ها به وسیله ایمیل یا online storage \n\nتصور کنید شرکت شما از یه mail server خصوصی استفاده میکنه این به این معنی نیست که همه مکالمه های شما امنه \n* اگه کاربرای شرکت از web client  برای دسترسی به ایمیل های خودشون استفاده میکنن احتمال اینکه یه افزونه غیر مجاز دلش بخواد محتوای ایمیل کاربر رو بخونه وجود داره \n* احتمال این وجود داره که به صورت اتفاقی ایمیل هایی که حاوی محتوای حساس هستن برای آدمایی که نباید فوروارد بشن \n* اگه ایمیل کاربرمون هک بشه خیلی وضعیت بدی میشه \n* مدیریت این همه پسوردی که قراره به وسیله ایمیل به آدم های مختلف فرستاده بشن عملا غیر ممکنه و هیچ منبع قابل اطمینانی وجود نداره که باور داشته باشیم secret ای که فرستاده شده عملا همون چیزی که تو محیط وجود داره. \n\nاوضاع درمورد online storage ها به مراتب بدتره. \nتصور کنید که قراره یه password رو به وسیله google drive برای یه کاربر دیگه share کنید \n* شما خیلی به گوگل اعتماد دارید که محتوای فایل رمزنگاری نشده شما رو نخونه \n* شما خیلی به کاربر خودتون اعتماد دارید که از پسورد سخت برای اکانت گوگلش استفاده میکنه یا 2FA رو برای اکانتش فعال کرده \n* اگه به هر دلیلی سیستم کاربرتون هک بشه پسورداتون کف دارک وبه \n\n#### اشتراک گذاری credentials به وسیله مخزن رمزنگاری نشده \n\nخیلی شایعه که برنامه نویس ها برای API از credentials استفاده کنن \n* بدترین سناریو اینه که secret تو کد hardcode شده باشه اینشکلی هرکسی که به source code دسترسی داشته باشه میتونه بره یه چرخ تو محتوا  API یا سرویس ما بزنه \n* مدل دوم اینه که secret تو یه فایل `.env` ذخیره شده باشه اونوقت عملا rollout کردن secret های جدید منوط به redeploy کردن رو پروداکشنه.\n* تو شرایطی که یکی از اعضای تیم کمپانی رو ترک کرده باشه و یهو بزنه به سرش که بزنه پروداکشن رو بترکونه ( دلش پره از دست شرکت ) راه سریعی برای جلوگیری دسترسیش وجود نداره \n\n#### صرف نظر کردن از env به وسیله gitignore \n\nیکی از متولودوژی های مرسوم توسعه نرم افزار [The twelve-factor app](https://12factor.net/) هستش. [سومین فاکتور](https://12factor.net/config) این متودولوژی به صراحت میگه که secret باید تو env ذخیره و استفاده بشن. \nاین به خودی خودش بد نیست که ما env ها رو از هم تفکیک کنیم و به وسیله `.gitignore` از اینکه یهو به مخزن ما راه پیدا کنن جلوگیری کنیم \n\nولی اینکار بدون ابزار مناسب و صرفا به همین سادگی باعث میشه که فرایند دیباگ کردن نرم افزار مخصوصا وقتی تیم ها بزرگ هستن تبدیل به فاجعه بشه \n\nبزارید یه مثال بزنم تصور کنید ما یه app ساده nodejs داریم که قراره تو سه محیط \n```\n.env.dev\n.env.stg\n.env.prod \n```\nدیپلوی بشه. از اونجایی که این مقادیر فقط روی سرور های ما و سیستم دولوپرمون وجود دارن دواپس یا باید دسترسی تیم توسعه رو به هر سه محیط باز کنه که به خودی خودش اصلا روش خوبی نیست یا اینکه تیم به روش های بالا که گفتیم ناامن هستن credentials رو بین خودشون به اشتراک بزارن \n\n\n### اما چه روش های امنی برای به اشتراک گذاری و استفاده از secrets وجود داره ؟\n\nواقعیتش اینه که سفت یا سخت تر بودن امنیت منوط به شرایط هر شرکت یا گروه توسعه نرم افزاریه. یعنی یه روش یکسان خیلی خوب برای همه وجود نداره. بعضی ها به خاطر حساس تر بودن زیرساختشون مجبورن که استاندارد های سفت و سخت تری رو داشته باشن که قابل درکه. \n\nاینجا میخوام درمورد چند روش خیلی شایع برای رمزنگاری و به اشتراک گذاری credentials ها صحبت کنم\n\nابتدا بریم سراغ password ها برای انسان ها و بعد به سراغ credentials برای ماشین ها \n\n### مدیریت پسورد ها \n\nهمین چند ماه قبل بود که last-pass برای چندمین بار هک شد و اطلاعات دیتابیس شرکت به کلی leak شد البته که اگه از یه master-password سفت و سخت استفاده میکنین  به این راحتی ها امکان crack شدن دیتابیس رمز هاتون نمیره ولی به هر صورت این نشون میده که برای مدیریت پسورد ها باید به سراغ سرویس ها یا نرم افزارهایی رفت که آزمون خودشون رو پس داده باشن \n\n#### نرم افزارهای انلاین مدیریت پسورد \n\nمزیتی که این نرم افزارها مثل 1password دارن اینه که کار رو خیلی راحت میکنن شما یه vault شخصی خواهی داشت و shared vaults که به راحتی میشه بینشون پسورد ها رو به اشتراک گذاشت. هم رابط کاربری خوب و هم پشتیبانی خوب از cli  و api از مزیت های دیگه cloud password manager مثل 1password هستش که باعث میشن اون anti-pattern هایی که بالا گفتیم درمورد این ابزار صادق نباشه. \n\nاما از بدی ها میشه گفت که شما چقدر به این شرکت ها اطمینان دارید؟ \n\n#### نرم افزار های آفلاین مدیریت پسورد \n\n##### keepass\n\nآشنایی من با keepass برمیگرده به شرکت فناپ و مدیر خوب و فهیمم [ناصر خلقی](https://ir.linkedin.com/in/naser-kholghi?trk=public_profile_project_contributor-image) که منو با این ابزار آشنا کرد. \n\nاین ابزار از یک کلید متفارن برای رمزنگاری دیتابیس خودش استفاده میکنه و اگه به دیتبایس منیجر های انلاین اعتماد ندارید گزینه خیلی خوبیه. \nکافیه که فایل دیتابیس رو از طریق git یا file storage بین اعضای تیم به اشتراک بذارید \n\n##### pass \n\nیکی از ابزارهای افلاین امن و پرطرفدار بین اهالی gnu/linux نرم افزار [pass](https://www.passwordstore.org/) هستش که از کلید نامتقارن gpg برای رمزنگاری استفاده میکنه \nاز مزیت هایی که این ابزار رو به keepass برتری میده اینه که میشه key-id اعضای مختلف تیم رو به صورت مجزا sign کرد به این صورت بدون به اشتراک گذاشتن یه کلید متقارن بین اعضای تیم میشه از مزیت اینکه هرکسی با gpg key خودش مشارکت کنه استفاده کرد. \n\n\n### مدیریت credentials\n\nتفاوت credentials و secrets \n\n#### نرم افزار های مدیریت انلاین credentials \n\n##### azure kv \n\n##### aws secret manager \n\n##### hashicorp vault \n\n#### نرم افزار های افلاین مدیریت credentials \n\n##### git-crypt \n\n##### sops \n\n[^1]: Anti-pattern\n\n"
    },{
      "id":         "/separate-work-personal-git-config",
      "url":        "/separate-work-personal-git-config.html",
      "image":      "assets/article_images/git/git.png",
      "title":      "من چطوری از پروفایل مختلف برای git استفاده میکنم؟ ",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2023-07-10 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"من چطوری از پروفایل مختلف برای git استفاده میکنم؟ \"\ndate: 2023-07-10\ncategories: development\nimage: assets/article_images/git/git.png\ntoc: true\n---\n\nحتما شده رو سیستم شخصی خودتون یا شرکت لازم باشه بین یوزنیم یا ایمیل های  مختلف برای گیت جا به جا بشید و این مسئله معمولا باعث میشه که هربار مجبور بشین به صورت local تنظیمات هرکدوم از مخزن های خودتون رو تغییر بدین یا حداقل این کاری بود که من معمولا انجام میدادم\n \n```\ngit config --local user.name \"user\"\ngit config --local user.name \"mail@mail.com\"\n```\n\nاما یه کار ساده تر هم میشه انجام داد و اون ایجاد پروفایل برای جدا کردن کار و زندگیه. \n\n### چطوری میشه بر اساس path کانفیگ های مختلف git رو از همدیگه تفکیک کرد ؟ \n\nاین ساختار پیشنهادی من برای ساختن و مدیریت مخزن های مختلف روی سیستم خودتونه \n\n```\n`-- projects\n    |-- personal\n    `-- work\n```\n\nحالا کافیه که تو Home dir خودتون یه کانفیگ به اسم `.gitconfig` بسازید \n\n```\n[includeIf \"gitdir:~/projects/work/\"]\n    path = .gitconfig-work\n[includeIf \"gitdir:~/projects/personal/\"]\n    path = .gitconfig-personal\n```\n\nحالا به ازای هرکدوم از تنظیماتی که برای هرکدوم از مخزن ها لازم دارید فایل کانیفگ رو برای work یا personal میسازید \n\n```\n#.gitconfig-personal\n[user]\n    email = user@mail.com\n    name = username\n```\n```\n#.gitconfig-work \n[user]\n        email = work-email\n        name = work-username\n```\n\nبعد از ذخیره کردن فایل ها برای اینکه ببینیم تنظیماتمون اعمال شده میتونیم این کامند رو اجزا کنیم و تنظیمات گیت خودمون رو ببینیم \n\n```\ngit config --list --show-origin\n```\n"
    },{
      "id":         "/kubernetes-ensoulment-argocd",
      "url":        "/kubernetes-ensoulment-argocd.html",
      "image":      "assets/article_images/argocd/argocd.png",
      "title":      "دمیدن روح به کوبرنتیز با ArgoCD",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2023-07-07 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"دمیدن روح به کوبرنتیز با ArgoCD\"\ndate: 2023-07-07\ncategories: development\nimage: assets/article_images/argocd/argocd.png\ntoc: true\n---\n\nاز وقتی بلاگ نویسی رو شروع کردم یادم میاد که میخواستم به بقیه چیزایی که بلدم رو یاد بدم ولی نکته اینه که میون این همه محتوای آموزشی که روی اینترنت وجود داره خیلی راحت امکانش وجود داره که محتوای من گم بشه پس با خودم گفتم چیزی که من مینویسم باید تجربه خودم باشه نه صرفا چیزی که به راحتی با سرچ کردن میتونه به دست بیاد. \nیعنی نقطه اتصالی باشه بین دانسته های مختلفی که دارم و تجربیاتم و سعی کردم اینو تو پست های وبلاگم هم انعکاس بدم.\n\nدرمورد کوبرنتیز چون تبدیل به یگانه orchestrator و PaaS برنده بازار شد طبیعی که این تعداد این مطالب بیشتر باشه. \n\nاما بزارید در مورد این صحبت کنم که \n\n### چرا کالبد کوبرنتیز\n\nقبل از کوبرنتیز هم ارکستریتر های دیگه ای وجود داشتن من شخصا طرفدار [رنچر](https://www.rancher.com/) بودم ولی خیلی ها هم از [سوارم](https://docs.docker.com/engine/swarm/) استفاده میکردن. \nزیرساخت سنتی تر مبتنی بر baremetal یا vm  بود که عملا ایزوله کردن اپلیکیشن ها رو از همدیگه رو غیرممکن یا خیلی سخت میکرد.[این](https://www.backblaze.com/blog/vm-vs-containers/) یه مقایسه خوبه درمورد مجازی سازی درمقابل کانتینر. \n \n ![](assets/article_images/argocd/containers-vs-virtual-machines.jpg \"vm vs container\")\n\n\nسربار vm نسبت به کانتینر خیلی بیشتر بود و bootstrap کردنشم خیلی طول میکشید یا نیاز به زیرساخت خودش رو داشت مثل زیرساحت IaaS. \nاونچیزی که به نظرم باعث برتری و درنهایت استاندارد شدن کوبرنتیز کرد دیزاین برتری بودش که با تجربه گوگل به دست اومده بوده \nدیزاینی که از همون اولش انترپرایز بود \nکوبرنتیز با مفهوم namespace برای جدا کردن tenant ها \nو با مفهوم پاد برای ایزوله کردن یک یا تعدادی از کانتینرها و استفاده از [CRI](https://kubernetes.io/docs/concepts/architecture/cri/) و [CSI](https://kubernetes.io/blog/2019/01/15/container-storage-interface-ga/) و [CNI](https://www.tigera.io/learn/guides/kubernetes-networking/kubernetes-cni/) \nتونست ماژولار باشه و برای تعداد خیلی زیادی از شرکت ها جذاب باشه.\n\n ![](assets/article_images/argocd/k8s-multi-tenancy.png \"k8s multi tenancy\")\n\nجامعه کاربری که دور کوبرنتیز هم شکل گرفت باعث شد که این lifescycle توسعه نرم افزار متحول بشه چیزی که امروز بهش میگیم [cloud native applications](https://landscape.cncf.io/) محصول این تحوله. \n\n<object data=\"https://landscape.cncf.io/images/landscape.pdf\" width=\"100%\" height=\"100%\" type='application/pdf'></object>\n\n\nاین بلوغ و شکوفایی کوبرنتیز هنوز به انتهای خودش نرسیده \nدور این اکوسیستم ابزارهای مسیریابی و لاگ و سنجه و استقرار و .... \nشکل گرفته که امروز میخوام درمورد یکی از محبوب ترین ابزارهای استقرار[^1] یعنی ArgoCD صحبت کنم. یکم درمورد معماریش و اینکه چطور کار میکنه و بعد درمورد اینکه چطوری میشه یه نسخه HA و تر و تمیز ازش بالا اورد و البته سناریو های مختلفی که ممکنه ما باهاشون رو به رو بشیم یا بهشون نیازمند باشیم. \n\n### ArgoCD چیست و چگونه روح رو به کالبد کوبرنتیز میدمه ؟ \n\n### تاریخچه استقرار در دوران کرتاسه و کوبرنتیز \n\nاین استعاره روح و بدن خیلی مورد علاقه دوستان فلسفه و تئولوژیه ولی شاید برای توصیف مرز زیرساخت و استقرار به کار بیاد \nاصولا مفهوم دواپس هم برای کمرنگ کردن این مرز به وجود اومد.\n\n در دوران [کرتاسه](https://fa.wikipedia.org/wiki/%DA%A9%D8%B1%D8%AA%D8%A7%D8%B3%D9%87) سیس ادمین ها زیرساخت و امنیت و دسترسی رو ایجاد و مدیریت میکردن و شاید اگه استقراری هم درکار بود تو فواصل زمانی خیلی دیر به دیر نرم افزار رو به روزرسانی میکردن حالا به مدل سنتی و با ftp یا sftp یا مدل یکمی آپدیت تر و به وسیله ابزار های source control مثل git یا Configuration management مثل ansible یا chef. \n\n اما با تغییر پارادایم های توسعه نرم افزار به سمت چارچوب هایی مثل Agile همه چیز به سمت سریع تر شدن پیش رفت پس لازم بود که سریع Deploy کرد و سریع Fail شد و rollback کرد این با سیستم سنتی سیس ادمین خسته و دولوپر تنها تو اتاق 3x4 شدنی نبود. \nهمون جوری که یه دود و دم خوب زغال خوب میخواد لازمه این تغییر پارادایم هم ابزار خوب بود.\n\n> اگه ما کوبرنتیز رو دود دم درنظر بگیریم یعنی کیف و حال زیرساخت و توسعه نرم افزار ArgoCD میشه زغال خوب.  \n\nحالا که درمورد تاریخچه صحبت کردم بزارید درمورد این صحبت کنم که قبل از اینکه ابزارهایی مثل [Flux](https://fluxcd.io/) و [ArgoCD](https://argo-cd.readthedocs.io/en/stable/) و [Spinnaker](https://spinnaker.io/) وجود داشتن از چه چیزی برای دیپلوی روی کوبرنتیز استفاده میشد. \n\nهمون طور که میدونید مدل کوبرنتیز client و server هستش و resource ها به صورت declarative درخواست میشن. برای فهمیدن تفاوت Imperative و Declarative خوندن [این مقاله](https://programiz.pro/resources/imperative-vs-declarative-programming/#:~:text=Imperative%20programming%20specifies%20and%20directs,about%20how%20the%20program%20works.) رو توصیه میکنم.\n\n ![](assets/article_images/argocd/declarative-vs-imperative.jpg \"declarative vs imperative \")\n\n اگه این ریسورس معتبر باشه یعنی kube-api و validation webhook ها تشخیص بدن که میشه این ریسورس رو ساخت درنهایت status این ریسورس اپدیت میشه و ساخته میشه در غیر این صورت بسته به اینکه ارور ما معنایی هستش یا لغوی از ساخته شدن ریسورس جلوگیری میشه. \n\nاز اونجایی که هیچ چیزی بهتر از مثال نمیتونه راحت تر معنا رو برسونه من میام و یه کلاستر تستی رو میسازم و سعی میکنم روش یه پاد رو استقرار کنم \n\nبرای ساختن کلاستر های تستی و توسعه کوبرنتیز هیچ چیزی رو ساده تر از [k3s](https://k3s.io/) نیافتم برای حتی راحت تر کردن ساخت کلاستر های k3s شرکت رنچر که قبلا هم گفته بودم از ابزار های محبوب منه اومده و یه ابزار کوچولو و خیلی خوبی رو ساخته به اسم [k3d](https://k3d.io/). \n\nتصور میکنم که شما از یه سیستم linux استفاده میکنید و docker و kubectl رو هم روی سیستمون نصب دارید \nمن خودم الان روی سیستم ویندوزی خودم با HyperV و ubuntu server 22.04 هستم. \n \n#### نصب و راه اندازی اولین کلاستر تستی کوبرنتیزمون به وسیله k3d\n![](assets/article_images/argocd/k3d.png \"k3d\")\n\nابتدا اخرین k3d رو نصب میکنیم \n```\nwget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash\n```\nبعد یه کلاستر تستی رو میسازیم \n\n```\n k3d cluster create local-k8s --servers 1 --agents 3\n```\nاگه همه چیز به خوبی پیش رفته باشه وقتی میزنیم \n```\nkubectl cluster-info\n```\nباید کلاسترتون رو ببینید که به خوبی و خوشی داره کار میکنه \n\nاما بریم سراغ اولین دیپلوی روی کلاستر تستی خودمون  \nاین manifest اولین پادی هست که میخوایم روی default namespace اعمال کنیم \n\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: nginx\nspec:\n  containers:\n  - name: nginx\n    image: nginx:1.14.2\n    ports:\n    - containerPort: 80\n\n```\nاز اونجایی که kubectl ریسورس های ریموت رو هم قبول میکنه من ازلینک رسمی خود مخزن رسمی کوبرنتیز استفاده میکنم ولی شما میتونید همین فایل yaml  بالا رو ذخیره کنید و اجرا کنید \n\n```\n#if you savaed the pod  manifest in file \n# kubectl apply -f simple-pod.yaml\n\nkubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/pods/simple-pod.yaml\n```\n\nاگه همه چیز به خوبی و خوشی انجام شده باشه شما باید ببینید که پاد شما ساخته شده و درحال اجرا هستش \n\n```\n➜  ~ k get pods\nNAME    READY   STATUS    RESTARTS   AGE\nnginx   1/1     Running   0          2m14s\n```\n این میشه ساده ترین مدل استقراری که manifest های declarative کوبرنتیز رو اعمال کرد. \nاما مثل هر چیز ساده ای این مدل دیپلوی کردنم ضعف هایی داره که باعث میشه به درد سناریوهای سازمان ها شرکت ها و حتی تیم های کوچیک نخوره . \nبیاین چند تا سناریو یکم پیچیده تر رو باهم برسی کنیم؟ \n* چی میشه اگه به جای یه محیط توسعه چند تا محیط توسعه داشته باشیم مثلا development و staiging و production \n* چی میشه اگه بخوایم نسخه های مختلفی از نرم افزارمون رو روی تو محیط های مختلف داشته باشیم\n* چی میشه اگه بخوایم از pipeline های CI/CD برای توسعه نرم افزارمون استفاده کنیم \n\nدراوردن یه روش تر و تمیز مهندسی شده که جوابگوی سناریو های پیچیده تر ما باشه نیاز به ابزارهای پیچیده تری داره که در ادامه درموردشون صحبت میکنم. \n\n#### استقرار به روش kustomize یا Helm\n\nبرای جواب دادن به نیازهای بالا جامعه کاربری کوبرنتیز تعداد خیلی زیادی ابزار ایجاد کرد که به نظر من در انتها این دوتا بین اهالی دنیای CNCF مقبول تر افتادن.\n\n* [Helm](https://helm.sh/) \n* [kustomize](https://kustomize.io/)\n\nسناریو های بالا رو تصور کنید که ما سه namespace داریم \n\n*  Prod => Production\n* Stg => Staiging\n* Dev => Development \n\nمیایم و این نیم اسپیس ها رو تو کلاستر تستسی که ساختیم ایجاد میکنیم\n \n```\nfor ns in prod dev stg\nkubectl create ns $ns\n```\n\nاحتمالا شما با resource های دیگه کوبرنتیز مثل [Deployment](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) و [Statefulset](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/) هم آشنایی دارید که برای دیپلوی نرم افزار روی کلاستر کوبرنتیز منطقی تر هستند ولی چون هدف این پست بلاگ آموزشی هستش من با همون ساده ترین شکل ریسورس که پاد[^2] باشه ادامه میدم و برای اینکه مثال ها در دسترس باشه و بعدا ازشون برای َArgoCD استفاده کنیم یه [مخزن](https://github.com/behroozam/kubernetes-deployment-example) روی گیتهاب میسازم. \n\n##### kustomize \n![](assets/article_images/argocd/kustomize.png \"kustomize\")\n\nبرای اینکه از kustomize برای دیپلوی کردن روی سه namespace ای که ساختیم استفاده کنم همچین ساختار فایلی رو ایجاد میکنم که تو [مخزن](https://github.com/behroozam/kubernetes-deployment-example) گیتهابم موجود هستش و میتونید clone کنید \n```\n.\n|-- base\n|   |-- kustomization.yaml\n|   `-- simple-pod.yaml\n|-- kustomization.yaml\n`-- overlays\n    |-- dev\n    |   `-- kustomization.yaml\n    |-- prod\n    |   `-- kustomization.yaml\n    `-- stg\n        `-- kustomization.yaml\n\n```\nو برای ساختن خروجی که مد نظرمون هستش کافیه که این کامند رو اجرا کنیم \n\n```\nkustomize build\n\n```\nکاستومایز خودش به تنهایی کار دیپلوی کردن روی کلاستر کوبرنتیز ما انجام نمیده صرفا یه template engine که خروجی مانیفست های مد نظر ما رو در انتها ایجاد میکنه \nپس برای اعمال این مانیفست ها روی کلاستر کوبرنتیز خودمون لازمه که خروجی kustomize  رو به kubectl پایپ کنیم. \n\n```\nkustomize build | kubectl apply -f  -\n```\n\n##### Helm \n![](assets/article_images/argocd/helm.svg \"helm\")\n\nهلم یا حلم :)) یکی از محبوب ترین ابزارهای کانفیگ/دیپلوی کوبرنتیز هستش برتری هایی نسبت به kustomize داره که میشه گفتش به نسبت ابزار بهتر و کامل تریه به چند دلیل \n\n* هلم رو میشه به صورت چارت[^3] استفاده کرد و ورژن زد یعنی میشه ورژن های مختلفی از یه چارت داشت \n* هلم رو میشه rollback  کرد ولی برای kustomize به همین سادگی فشردن یه دکمه نیست \n* هلم برنامه نویس پسند تره یعنی میشه فانکشن های کاستوم یا helper نوشت که کار نوشتن تمپلیت ها رو راحت تر میکنه \n* مستقل از kubectl و لزومی به داشتنش نداره \n\nاما بریم به سراغ دیپلوی کردن پاد nginx به وسیله helm \n\n```\n#clone kubernetes examples repo\ngit clone https://github.com/behroozam/kubernetes-deployment-example.git\n#change directory to examples\ncd kubernetes-deployment-example/examples\n#Deploy helm chart to each environment \nfor env in dev stg prod \nhelm install nginx-pod ./helm --namespace $env\n\n```\nو برای لیست کردن رلیز های خودمون میتونیم اینشکلی لیست رلیز های خودمون رو ببینیم\n \n```\nhelm list --all-namespaces\n```\n\n\n#### با این وجود چه نیازی به ArgoCD وجود داره ؟ \n\nپس شاید بپرسید که با وجود داشتن helm و kustomize  چه لزومی به یه ابزار سومی مثل ArgoCD وجود داره \n\nهمون طوری که هلم و کاستومایز برای پاسخ دادن به نیاز کاربرایی ایجاد شدن که نیاز به آزادی عمل بیشتری برای دیپلویمنت های خودشون داشتند.\n\n ArgoCD هم برای شرکت ها و سازمان ها و تیم ها واصولا جاهایی که نیاز به همکاری برای دیپلوی کردن اپلیکیشن ها دارن ایجاد شد. \n\nاز حدود 5 6 سال قبل یه مفهومی خیلی پرطرفدار شده و تا به امروز هم پرطفدار باقی مونده به اسم GitOps. \n\n##### Gitops چیه؟ \n\nمن دنبال تعریف کتابی و ویکیپدیایی از گیتاپس نیستم به نظرم همون طوری که خیلی دقیق نمیشه دواپس رو تعرف کرد گیتاپسم دست آدمی رو باز میزاره برای تعریف خودش. من فکر میکنم وقتی فهمیدیم که Git چقدر کار توسعه رو راحت میکنه و میتونیم تغییرات رو ببینیم و PR بدیم و ... کلا flow کار خیلی روان و راحت شد تو توسعه نرم افزار مخصوصا به صورت تیمی. \nاین رو ذهنیت همگی تاثیرگذاشت به صورتی که توافق کردیم که هرانچیزی که روی ریپازیتوری های ما هست باید تو پروداکشن هم باشد. \n\n#### ArgoCD چطور از GitOps استفاده میکنه ؟ \n\nبه نظرم جواب این سوال که آرگو چطور از گیت‌آپس استفاده میکنه سوال چیستی ArgoCD رو هم پاسخ میده \nمیشه گفتش اینجا نقطه تلاقی دوتا از بهترین استراکچر هایی که تا حالا درموردشون صحبت کردیم یعنی مانیفست های کوبرنتیز که declarative بودن و git که قابلیت همکاری تیمی رو به ما میداد. \n\nمزیت سومی هم که آرگو رو نسبت به رقبا برتری میده پشتیبانی کردنش از هر سه روشی که بالا برای دیپلوی زدن مثال زدم یعنی kubectl و helm  و kustomize  هستش. \nبا این تفاوت که دست ما برای اینکه روی کلاستر های مختلف و namespace های مختلف دیپلوی کنیم بازه \n\nبزارید دوباره وارد عالم مثال ها بشیم و این شکلی راحت تر متوجه بشیم \nبرای این مسئله با k3d به جای ساختن یه دونه کلاستر من چهارتا کلاستر ایجاد میکنم که یکیشون وظیفه control plane ارگو رو بر عهده داره و سه تای دیگه محیط توسعه هستن \n\n#### دیپلوی ArgoCD به وسیله Helm روی کلاستر k3d \n\nاول چهارتا کلاستر رو ایجاد میکنیم \n```\nk3d cluster create argocd-control-plane  --servers 1 --agents 1\nfor cluster in dev stg prod\nk3d cluster create $cluster  --servers 1 --agents 1\n```\nبعد به وسیله helm ارگو رو روی کلاستر argocd-control-plane نصب میکنیم \n[این](https://github.com/argoproj/argo-helm/tree/main/charts/argo-cd) آدرس چارت رسمی argocd هستش \n\nتوجه کنید که برای کاستومایز کردن نصب ArgoCD برای نیاز خودتون لازمه که مقدار value ها رو عوض کنید ولی من چون هدف اینجا آموزشی و کلاستر ها هم تستی هستن از مقادیر دیفالت استفاده میکنم \n\nمن برای سویچ کردن بین cluster های مختلفی که توی kubeconfig خودم دارم از ctx و برای namespace ها از پلاین ns استفاده میکنم که میتونید از طریق [این](https://dev.to/aws-builders/kubectl-cli-plugins-ctx-and-ns-1696) آموزش نصبشون کنید \n\n```\nk ctx k3d-argocd-control-plane\nhelm repo add argo https://argoproj.github.io/argo-helm\nhelm install argocd argo/argo-cd --namespace argocd --create-namespace\n```\nاگه همه چیز به خوبی پیش رفته باشه کافیه که حالا پورت argocd رو port-forward کنید \n```\nkubectl port-forward service/argocd-server -n argocd 8080:443 --address='0.0.0.0'\n```\n\nحالا اگه ادرس vm یا ماشینتون رو روی borwser بازکنید باید به همچین اخطاری مواجه بشید که درمورد ssl هستش این رو بایپس کنید و وارد صفجه لاگین بشین \nبرای کردنشیال میتونید پسورد ابتدایی که ArgoCD میسازه رو به این صورت دریافت کنید \n\n```\nkubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=\"{.data.password}\" | base64 -d\n```\n\nحالا داستان جذاب کار کردن با خود manifest های ArgoCD شروع میشه ولی بزارید ابتدا بریم سراغ اضافه کردن کلاستر های فعلی که داریم به ArgoCD تا بتونیم pod خودمون رو درنهایت روی همه کلاستر های خودمون اجرا کنیم \n\n##### اضافه کردن کلاستر های موجود به ArgoCD \n\nهمون طور که بالا دیدین مایه کلاستر برای نصب ArgoCD ایجاد کردیم و سه کلاستر دیگه که نماینده محیط های توسعه مختلف ما باشن \nتو دنیای دواپس و با تعاریف دواپسی به همچین حالتی میگن multi cluster and multi tenant یعنی ما چند کلاستر داریم که میتونن چندین namespace هرکدوم توی خودشون جا بدن \n\nبرای اضافه کردن cluster ها راحت ترین کار استفاده از [cli](https://argo-cd.readthedocs.io/en/stable/cli_installation/) خود argocd هستش\n\n> توجه کنید که k3d به صورت دیفالت از آدرس 0.0.0.0 برای ادرس context شما استفاده میکنه برای اینکه بتونید از api کلاسترتون تو ArgoCD هم استفاده کنید باید از آپشن --api-port استفاده کنید برای مثال \nk3d cluster create dev --api-port 192.168.168.108:6448 \n\n\n```\nargocd login 0.0.0.0:8080\nargocd cluster add k3d-dev --name dev\nargocd cluster add k3d-stg --name stg\nargocd cluster add k3d-prod --name prod\n```\nاگه همه چیز با موفقت پیش رفته باشه ArgoCD سه ریسورس روی کلاستر مقصد ساخته و کلاستر های شما روی ArgoCD server شما باید به این شکل باشه \nآرگو برای اینکه بتونه روی کلاستر های ریموت دسترسی داشته باشه و manifest ها رو بسازه و مدیریت یا مانیتور کنه نیازداره که دسترسی cluster wide داشته باشه برای همین میاد و سه ریسورس رو روی کلاستر ریموت میسازه \n\n```\nk get clusterroles.rbac.authorization.k8s.io argocd-manager-role\nk get clusterrolebindings.rbac.authorization.k8s.io argocd-manager- \nk get sa -n kube-system argocd-manager\n```\n\n#### ساختن ApplicationSet روی ArgoCD \n\nتا اینجای کار ما کلاستر هامون رو به آرگو اضافه کردیم و اگه همه چیز خوب پیشرفته باشه میرسیم به اصل ماجرا یعنی دیپلوی کردن اپلیکیشن های خودمون روی env های مختلف \nساده ترین مدل دیپلوی روی Argocd به وسیله Application که [CRD](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/)  هستش اتفاق میفته برای مثال میخوام که پادی که با kubectl ساختم رو روی کلاستر stg اجرا کنم \n\nاول نیازه که یه manifest رو برای Application که nginx-pod هستش ایجاد کنم \n\n```\napiVersion: argoproj.io/v1alpha1\nkind: Application\nmetadata:\n  name: nginx-pod\n  namespace: argocd\nspec:\n  project: default\n  source:\n    repoURL: https://github.com/behroozam/kubernetes-deployment-example.git\n    targetRevision: HEAD\n    path: examples/kubectl/\n  destination:\n    server: https://192.168.168.108:6445\n\n```\nادرس سرور چیزی که تو kubeconfig خودتون به عنوان آدرس کلاستر دارین ( درواقع kube-apiserver )\n\nبعد از اینکه این مانیفست رو به کلاستر argocd-control-plane اپلای کنید میبینید که اپلیکیشن ساخته میشه ولی sync نیست. \n\n[پالیستی دیفالت](https://argo-cd.readthedocs.io/en/stable/user-guide/auto_sync/) ArgoCD اینجوری که برای sync کردن تغییراتی که روی ریپازیتوری گیت خودتون دارید باید به صورت دستی دکمه sync رو بزنید ولی خب میشه این رو هم به حالت اتوماتیک تغییر داد \nاگه همه چیز خوب پیشرفته باشه پاد ما ساخته شده و درحال اجراست به این صورت \n```\n k get pods  -n default --context k3d-prod\nNAME    READY   STATUS    RESTARTS   AGE\nnginx   1/1     Running   0          6m55s\n```\n\nهمون طور که گفتم اپلیکیشن ساده ترین مدل دیپلویمنت ما هستش و نیازهای ما رو برای مدل های پیچیده تر دیپلوی حل نمیکنه \nتصور کنید که لازم باشه که روی بیش از یک کلاستر و یک نیم‌اسپیس دیپلوی داشته باشیم \nدر این صورت باید برای هرکدام از کلاستر ها و نیم اسپیس ها یه اپلیکیشن جداگانه بسازیم که از حوصله اکثر ماها دواپس های خسته خارجه. \nبرای این مسئله ArgoCD از ApplicationSet  استفاده میکنه که مجموعه ای از یه سری generator ها برای ساختن کانفیگ اپلیکیشن های ما هستن \n\nیرای مثال تصور کنید که میخوایم هلم چارت nginx  رو به این صورت دیپلوی کنیم \n* prod cluster => green namespace \n* stg cluster => red namespace \n\nمیایم و از جنریتور cluster برای این مسئله استفاده میکنیم ولی قبلش برای اینکه کلاستر ها رو از هم بتونیم تفکیک کنیم بهشون label اضافه میکنیم برای مثال `cluseterenv` \n\nحالا این مانیفست ApplicationSet رو اعمال میکنیم.\n\n> توجه کنید که حتما مانیفست رو روی نیم اسپیس argocd و روی کلاستر control-plane اعمال کنید در غیر این صورت argocd وقعی به ریسورسی که تو namespace های دیگه ایجاد کرده باشید نمیزاره \n\n\n```\napiVersion: argoproj.io/v1alpha1\nkind: ApplicationSet\nmetadata:\n  name: nginx-pod\nspec:\n  generators:\n  - clusters:\n      selector:\n        matchLabels:\n          clusterenv: stg\n      values:\n        namespace: red\n  - clusters:\n      selector:\n        matchLabels:\n          clusterenv: prod\n      values:\n        namespace: green\n  template:\n    metadata:\n      name: 'nginx-pod-{{nameNormalized}}'\n    spec:\n      project: default\n      source:\n        repoURL: https://github.com/behroozam/kubernetes-deployment-example.git\n        path: examples/helm\n        helm:\n          releaseName: nginx-pod-{{values.namespace}}\n      destination:\n        server: '{{server}}'\n        namespace: '{{values.namespace}}'\n      syncPolicy:\n        syncOptions:\n          - CreateNamespace=true\n```\nحالا اگه همه چیز به خوبی پیش رفته باشه باید این دوتا اپلیکیشن رو ببینید که باید sync بشن \n\nو بعد از سینک شدن همه چیز باید سبز باشه \n\n##### چیزایی که باید بعدا اضافه کنم مثل ACL و PROJECT و SSO \n\n[^1]: Deployment\n[^2]: [Pod](https://kubernetes.io/docs/concepts/workloads/pods/)\n[^3]: [Chart](https://helm.sh/docs/topics/charts/)\n\n"
    },{
      "id":         "/powershell-vs-bash",
      "url":        "/powershell-vs-bash.html",
      "image":      "assets/article_images/powershell/powershell.png",
      "title":      "powershell یا bash مسئله این است ؟",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2023-06-30 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"powershell یا bash مسئله این است ؟\"\ndate: 2023-06-30\ncategories: development\nimage: assets/article_images/powershell/powershell.png\ntoc: true\n---\n### مقدمه \nبه عنوان یه کاربری که سال ها هستش اکه از zsh یا bash استفاده میکنم به تازگی با powershell آشنا شدم و حسابی ازش خوشم اومد\nبه نظرم بزرگ ترین برتری که powershell نسبت به bash و کلا shell های unix داره اینه که با object سروکار داره یعنی اینکه خروجی کامند صرفا یه plain text نیست. \n\n### مقایسه لیست کردن سرویس ها \nبرای مثال میام از cmdlet پاورشل به اسم Get-Service استفاده میکنم که به من لیست سرویس های درحال اجرا روی ویندوز رو میده\n```\nGet-Service -Name *\n```\nخروجی این کامند تو powershell مثل اینه که تو bash و سیستم هایی که از systemd برای process management استفاده میکنن بزنیم\n\n```\nsystemctl list-unit-files\n```\n### اما تفاوت چیه ؟\n\nتفاوت اینه که برخلاف bash که داره یه باینری به اسم systemctl  رو صدا میزنه که برای ما خط رو چاپ کنه powershell داره از utility های خودش که اسکریپت های powershell هستن استفاده میکنه که تاثیر گرفته از زبان C  و  شئی گراست\nیعنی این cmdlet  ما یه سری Method و Property داره\nبرای دیدن این ها میتونیم از کامند Get-Member استفاده کنیم به این صورت\n```\nGet-Service -Name * | Get-Member\n```\nتصور کنید که ما فقط میخوایم که اسم سرویس به همراه وضعیت فعلی که داره رو مشاهده کنید تو لینوکس یا bash راهی نداریم به جز فیلتر کردن خروجی کامند به این صورت که\n```\n systemctl list-unit-files | grep enabled\n```\nاینجوری میتونیم لیست سرویس های فعالی رو که داریم ببینیم\nاما powershell به ما این قابلیت رو میده که بر اساس Property  کار فیلتر کردن رو انجام بدیم\n```\nGet-Service * | Select-Object -Property Name,Status | Where-Object {.Status -eq 'Running'}\n```\n\n### چرا powerhsell ممکنه برای برنامه نویس ها جذاب تر باشه ؟\n\nفکر میکنم این برای کسایی که با زبان های برنامه نویسی بیشتر سروکار دارن تجربه خوشایند تری باشه هرچند میشه تاثیر هردو دنیا رو اینجا دید مثلا توی اغلب زبان های برنامه نویسی ما بلاکی از کد رو به بلاک دیگه pipe نمیکنیم به غیر از شاید Templating Languages که خیلی رایجه که دیتا رو به این شکل تغییر داد \nبرای مثال برای تغییر دادن زمان به human readable فرمت تو jekyll\n\n```bash \npage.Date | date: \"%-d %B %Y\"\n```\n\nبرای آشنایی با بقیه قابلیت هایی که powershell داره خوندن این [مقاله](https://adamtheautomator.com/powershell-objects/) رو توصیه میکنم.\n\n### نتیجه‌گیری\n\nابزارها یا زبان های برنامه نویسی که ما بهشون عادت کردیم لزوما بهترین ابزار برای حل مسئله نیستن ولی میشه اینجوری فکر کرد که: \n>* مدت زمان برای یادگیری یه ابزار جدید\n * میزان استفاده اش\n * بهبود عملکرد\n* هزینه نگهداری  \n\nمولفه هایی هستن که تو انتخاب تکنولوژی موثر هستن\nبه نظر من برای یه مدیر سیستم لینوکسی که سال ها با bash و python  کار کرده \n\nlearning curve پاورشل اونقدر زیاد نیست که بهش وقت ندیم\n\nفاکتور دیگه ای که ممکنه استفاده از powershell رو جذاب کنه پشتیبانی خیلی خوبش از سرویس های ماکروسافت و azure هستش\n\nیعنی شما با یه اسکریپت چند خطی میتونید از سرویس های مختلفی که azure داره ریپورت بگیرین یا تقریبا هر کاری که نیاز به اتوماتیک سازی داره رو انجام بدین\n\nاطراف اکوسیستم powershell هم module های خوبی ساخته شده که خیلی کار نصب کردن یا تعامل با ویندوز رو راحت کرده که میتونید خیلی راحت اون ها رو [اینجا](https://www.powershellgallery.com/) پیدا و نصب کنید\n\nپاورشل مولتی پلتفرم و تحت مجوز MIT هستش و اون رو میتونید روی سیستم لینوکسی خودتون هم نصب کنید\n"
    },{
      "id":         "/how-do-i-use-vscode-for-debugging-an-application",
      "url":        "/how-do-i-use-vscode-for-debugging-an-application.html",
      "image":      "assets/article_images/vscode/vscode.svg",
      "title":      "من چجوری از vscode برای خطایابی نرم‌افزار استفاده میکنم ؟",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2022-09-02 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"من چجوری از vscode برای خطایابی نرم‌افزار استفاده میکنم ؟\"\ndate: 2022-09-02\ncategories: development\nimage: assets/article_images/vscode/vscode.svg\ntoc: true\n---\n\n\nمن از دوران [پیشدادیان](https://fa.wikipedia.org/wiki/%D9%BE%DB%8C%D8%B4%D8%AF%D8%A7%D8%AF%DB%8C%D8%A7%D9%86) طرفدار محیط های توسعه مثل intelij و pycahrm و... نبودم. نه به خاطر اینکه باور دارم نرم افزار های بدی هستن به خاطر اینکه مناسب نیاز من تو شغل DevOps/SRE نیستن و ممکنه نیاز های بقیه رو تو قسمت های دیگه مهندسی نرم افزار پوشش بدن.\n دلیل برجسته برگزیدن [vscode](https://code.visualstudio.com/) برای ادیتور اصلی که ازش استفاده میکنم برمیگرده به مصرف منابع خیلی کمتر نسبت به [IDE](https://en.wikipedia.org/wiki/Integrated_development_environment) و شخصی سازی و سادگی تو استفاده و پشتیبانی کردن زبان ها و ابزار های مختلف و متن باز بودن و جامعه کاربری بزرگی که پلاگین های کابردی رو براش توسعه میدن.\n\n### علت نوشتن این مقاله چیه ؟\n\nبه نظرم استفاده از ابزار مناسب تو جای مناسب به بهره وری خیلی کمک میکنه.\n\nو تو این دنیای نرم افزار ممکنه خیلی از ابزارها یا متودولوژی ها وجود داشته باشن که ما از وجودشون بی خبریم یا به تجربه و از همکارهای خودمون یادگرفتیم درحالی که میتونستیم خیلی زودتر در ابتدای شروع کارمون یاد بگیریم و بهتر بشیم.\n\n> چیدمان کیبرد های mac و linux و windows با هم متفاوته  برای مثال این سه یک کار مشابه رو در vscode یعنی اجرای command رو در vscode انجام میدن\n* MacOs: `command + shift + p`\n*  Windows: `Ctrl +shift + p`\n* Gnu/Linux: `Ctrl+ shift + p`\n\n\n### شخصی سازی vscode\n\nبرای باز کردن تنظیمات vscode کافیه که  `command + shift + p`  رو فشار بدین و گزینه `Preferences: Open Settings` (JSON) رو از منو انتخاب کنید به شکل تصویر پایین\n\n![](assets/article_images/vscode/opensetting.gif \"opensetting\")\n\n\nمن معمولا به انتهای فایل هایی که ویرایش میکنم یه خط اضافه میکنم این باعث میشه که اگه از یک نرم افزار ورژن کنترل مثل git برای blame کردن استفاده میکنید به خطا نیفتید.\n\n\n#### اضافه کردن خط به انتهای تمامی فایل های ویرایش شده\n\nتو فایلی که بالا بازکردیم این رو جهت اضافه شدن خط به انتهای همه فایل های ویرایش شدمون به صورت خودکار اضافه میکنیم\n```\n{\n    \"files.insertFinalNewline\": true\n}\n```\nچون فایل json هستش حواستون به این باشه که اگر key جدیدی اضافه میکنید حتما با کاما `,` اون ها رو از هم جدا کنید\n\n#### پاک کردن اسپیس های اضافی در انتهای خطوط\n\nتوصیف موضوع اندکی سخته برای فهمیدن چرایی اضافه کردن این خط به تنظیمات توصیه میکنم ویدئو پایین رو مشاهده کنید\n\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/jadCrCYKTO4\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n\n```\n{\n    \"files.trimTrailingWhitespace\": true\n}\n```\n####  دنبال نکردن سیمبولیک لینک ها\n\nمن معمولا برای پیدا کردن فایل ها تو vscode از `command + p` استفاده میکنم به این صورت که میبینید\n\n![](assets/article_images/vscode/findfile.gif \"findfile\")\n\nبرای اینکه symbolic link ها رو از سرچی که میکنم مجزا کنم این خط رو به کانفیگ اضافه میکنم\n```\n{\n    \"search.followSymlinks\": false\n}\n```\nعلت اینکه دوست ندارم [symbolic link](https://en.wikipedia.org/wiki/Symbolic_link) تو نتایج جست و جو نمایش داده بشه اینه که فایل اصلی تو دایرکتوری وجود داره و علتی نداره که دوست داشته باشم vscode هر دو رو نمایش بده و اگر تعداد این فایل ها زیاد باشه خیلی آزار دهنده میشه\n\n\n### خطایابی نرم افزار گولنگی به وسیله vscode\n\nما تو توسعه نرم افزار معمولا با دو مدل خطا روبه رو میشیم\n\n* خطای کامپایل\n* خطای اجرا\n\nکه هردو رو به وسیله ادیتور میشه سریع تر خطایابی کرد.\n\nبرای مثال اگر ما تو املا یا syntax برنامه خطایی داشته باشیم editor به سرعت میتونه به ما خطای ما رو نشون بده و از وجود یه مشکل ما رو با خبر کنه اما این میتونه درمورد خطاهای اجرا کمی پیچیده تر باشه.\nدر ادامه با مثالی که میزنم درمورد این دو خطا بیشتر صحبت میکنم\nاگر همه چیز به خوبی پیش رفته باشه و ما vscode رو روی سیستم خودمون نصب کرده باشیم کافیه مراحل زیر رو دنبال کنیم.\n\n> توجه کنید که من برای اجرای دستورهای فرمان از ترمینال لینوکس استفاده میکنم که تو محیط مک هم مشابه هستش ولی درمورد ویندوز کمی متفاوته پس پیشنهاد میکنم WSL2 رو روی ویندوز نصب کنید تا دستورات به صورت مشابه برای شما عمل کنه و کافیه این دستورات رو در Terminal ویندوز و روی wsl اجرا کنید\n\n```\nmkdir helloworld-vscode\ncd helloworld-vscode\ncode .\n```\nحالا برنامه خودمون رو به که به این صورت هستش تعریف میکنیم `main.go`\n\n```\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n)\n\nfunc main() {\n\n\twordPtr := flag.String(\"flavor\", \"vanilla\", \"select shot flavor\")\n\tnumbPtr := flag.Int(\"quantity\", 2, \"quantity of shots\")\n\tboolPtr := flag.Bool(\"cream\", false, \"decide if you want cream\")\n\n\tvar order string\n\tflag.StringVar(&order, \"order\", \"complete\", \"status of order\")\n\n\tflag.Parse()\n\n\tfmt.Println(\"flavor:\", *wordPtr)\n\tfmt.Println(\"quantity:\", *numbPtr)\n\tfmt.Println(\"cream:\", *boolPtr)\n\tfmt.Println(\"order:\", order)\n\tfmt.Println(\"tail:\", flag.Args())\n}\n```\n\n> توجه کنید که go  حتما باید روی سیستم عامل شما نصب شده باشه و مقادیر `GOPATH` و `GOROOT` در `environment variables` سیستم شما موجود باشه. برای نصب go  و ست کردن این مقادیر تو سیستم عامل من معمولا از [gvm](https://github.com/moovweb/gvm)  استفاده میکنم که نصب و نگهداری go رو آسون میکنه\n\nاگه همه چیز به خوبی پیش رفته باشه vscode از شما درخواست میکنه که میتونه plugin گولنگ رو نصب کنه که درواقع دیباگر golang هستش و شما این رو بپدیرید.\n\nدر این مرحله بعد از پایان نصب نیازمندی ها اگه شما `command + F5` رو فشار بدین دیباگر برنامه شما رو اجرا میکنه و خروجی باید شبیه به تصویر پایین در قسمت `DEBUG CONSOLE` باشه\n\n![](assets/article_images/vscode/simpledebug.gif \"simpledebug\")\n\n\n#### دیباگ با flag یا env\n\nدر اکثر مواقع برنامه ما نیازی به flag یا env خاصی برای اجرا نداره ولی در مواردی ما دوست داریم مقدایر متغیری رو به برنامه به وسیله `OS.args` پاس بدیم تا رفتار برنامه خودمون رو عوض کنیم\n\nبرای اضافه کردن چنین قابلیتی به debugger خودمون کافیه بعد از `command + shift +p` تایپ کنیم `open 'launch.json'` و این مقدایر رو به انتها تنظیمات اضافه کنیم تا `launch.json` به این صورت بشه\n\n```\n{\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"name\": \"Launch Package\",\n            \"type\": \"go\",\n            \"request\": \"launch\",\n            \"mode\": \"auto\",\n            \"program\": \"${fileDirname}\",\n            \"args\": [\"--cream\",\"--flavor\",\"orange\",\"flag1\"],\n            \"env\": {\n                \"TEST_VAR\": \"foo\"\n              }\n        }\n    ]\n}\n```\n\nحالا اگر برنامه رو اجرا کنیم  `command + F5` مقادیر باید به شکل تصویر زیر تغییر کرده باشه\n\n![](assets/article_images/vscode/argdebug.gif \"argdebug\")\n\n\n\n#### خطایابی اجرا به وسیله breakpoint\n\nگاهی وقت ها ما لازم داریم مقداری رو که یک متغیر در زمان اجرا گرفته رو قبل از خروجی مشاهده کنیم یا از رفتار یه فانکشن مطمعا نیستیم اینجا کافیه سر هر خطی که بهش مشکوکیم یه دایره قرمز بکشیم و نقطه ایست تعریف کنیم تا در زمان اجرا شدن دیباگر روی این نقاط متوقف بشه مثل تصویر زیر\n\n![](assets/article_images/vscode/breakpoint.gif \"breakpoint\")\n\n\nاما توجه کنید که این روش زمانی که ما [null pointer](https://www.geeksforgeeks.org/how-to-check-pointer-or-interface-is-nil-or-not-in-golang/)  داریم جواب نمیده چون قبل از رسیدن دیباگر به اون نقطه و گرفتن خطا فانکشن ما به ملکوت اعلی پیوسته پس دیباگر همه کارها منجمله ایرادات منطقی برنامه رو حل نمیکنه پس همیشه یادتون باشه خطاها رو به درستی مدیریت کنید.\n\n#### خطایابی کامپایل syntax\nگاهی وقت ها ما از یه پکیج استفاده میکنیم که تو `GOPATH` نصب نشده ادیتور میتونه به ما درباره این موضوع هشدار بده.\nیا یه متغیر رو تعریف کردیم ولی هیچ جا از اون استفاده نکردیم.\nو مثال های خیلی زیاد دیگه.\n\n\n### شورتکات هایی که برای ادیت فایل ازشون استفاده میکنم\n\n* وقتی بخوام چند تا لاین رو باهم ادیت کنم مثل تصویر زیر از `command + shift + alt` یا تو مک از `command + option + shift` استفاده میکنم\n![](assets/article_images/vscode/editlines.gif \"editlines\")\n\n* برای انتخاب تعدادی از کلمات مشابه مثل تصویر پایین از `command + d`\n![](assets/article_images/vscode/select.gif \"select\")\n\n* اگر دنبال کلمه خاصی بگردم `command + F`\n![](assets/article_images/vscode/find.gif \"find\")\n\n* اگه بخوام کلمه خاصی رو تو فایل ادیت کنم `command + H`\n![](assets/article_images/vscode/replace.gif \"replace\")\n\n\n### پلاگین های پیشنهادی\n\nبرای اینکه متوجه بشم چه commit ای تو چه PR ای به پروژه اضافه شده مثل تصویر زیر از پلاگین [Gillens](https://gitlens.amod.io/) استفاده میکنم که به همه نصبش رو پیشنهاد میکنم\n![](assets/article_images/vscode/gitlens.gif \"gitlens\")\n\n\n"
    },{
      "id":         "/tracing-a-misunderstanding-in-kubernetes",
      "url":        "/tracing-a-misunderstanding-in-kubernetes.html",
      "image":      "assets/article_images/kubernetes/yaml-engineers.jpeg",
      "title":      "ردیابی یه سو تفاهم کوبرنتیزی",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2022-08-25 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"ردیابی یه سو تفاهم کوبرنتیزی\"\ndate: 2022-08-25\ncategories: development\nimage: assets/article_images/kubernetes/yaml-engineers.jpeg\n---\n\nداستان از این قراره که این روزا من دارم روی یه [پروژه باحال](https://github.com/smartlyio/yggdrasil) برای تقسیم بار بین خوشه[^1] های مختلف کوبرنتیز[^2] کار میکنم.\n\n اگه از سرویس ابری گوگل استفاده میکنید این پروژه چیزی شبیه به [multi cluster ingress controller](https://cloud.google.com/kubernetes-engine/docs/concepts/multi-cluster-ingress) هستش اما تفاوت بزرگش اینه که متن بازه و محدود به هیچ سرویس دهنده خاصی نمیشه وهمه جا میشه ازش استفاده کرد.\n\nبه صورت کلی دو نوع مختلف از [global service loadbalancer](https://www.nginx.com/resources/glossary/global-server-load-balancing) وجود داره\ndns وhttp و هرکدوم هم مزایا و معایب خودشون رو دارن برای مثال\n\nپروژه [k8GB](https://www.k8gb.io/) که یه پروژه متن بازه از EDNS برای مدیریت کردن سرویس ها بین خوشه های مختلف استفاده میکنه و مزیتش اینه که با تعریف کردن CRD و اتصال EDNS به dns provider میشه به راحتی سرویس ها رو تحت subdomain های مختلف بین کلاستر های مختلف تقسیم بار کرد\n\nولی dns مشکلات خاص خودش رو هم داره مثل ttl dns که ممکنه توسط مشتری یا واسط تغییر کنه و باعث outage یا مشکلات ناخواسته اینچنینی بشه\n\n و اینکه dns هیچ درکی از http path نداره و نمیشه از یه dns به صورت هوشمندانه برای تقسیم بار استفاده کرد\nبرای مثال نمیشه\n```\nbehroozam.com/foo > cluster1\nbehroozam.com/bar > cluster2\n```\nفرستاد که باعث شد من پروژه [yggdrasil](https://github.com/smartlyio/yggdrasil) رو که http loadbalancer هستش رو بردارم و بهبود بدم چون علاوه بر اینکه http loadbalancer مفهوم FQDN رو متوجه میشه میتونه محتوای http packet رو باز کنه و بر اساس routing تصمیم بگیره که پکت رو کجا بفرسته.\n\n```\nif path is /foo use backend behroozam-cluster1\nif path is /bar use backend behroozam-cluster2\n```\n\n\n‍‍‍\n\nاین پروژه تمام [ingress resources](https://kubernetes.io/docs/concepts/services-networking/ingress/) هایی که تو خوشه های مختلف کوبرنتیز هست رو میگیره با همدیگه تجمیع میکنه و بر اساس اینکه چه `host` و یا `path` دارن اون هارو برای لودبالانسر envoy دسته بندی و پیکره بندی میکنه که به صورت اتوماتیک بر اساس وجود داشتن یا نداشتن ingress resources تو کلاستر های ما تقسیم بار رو انجام بده.\n\nبرای اینکه این کار انجام بشه ما باید یه مرحله اضافی رو علاوه بر گرفتن ingress resources ها از خوشه ها انجام بدیم چون متاسفانه کوبرنتیز هیچ [شاخصه منحصر به فردی](https://github.com/kubernetes/kubernetes/issues/44954) برای خوشه های ما نداره که مشخص کنه هر ingress resource ای به کدوم خوشه تعلق داره.\n\nاین مرحله اضافی گرفتن اطلاعات هرکدوم از [kubernetes node](https://kubernetes.io/docs/concepts/architecture/nodes/)  های ما هستش که ingress controller روی اون ها در حال اجرا هستش بر فرض اینکه ما برای دسترسی به [ingress controller](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) خودمون از NodePort استفاده کردیم.\n\n[NodePort](https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport) درواقع یکی از ServiceTypes  کوبرنتیز هستش که معمولا روی baremetal از اون استفاده میکنیم تا سرویس خودمون رو به وسیله DNAT توسط iptables به خارج از محیط ایزوله kubernetes نمایش بدیم.\n\n### شرح مشکل اما\n\nnode خوشه ای که قرار بود NodePort رو به من بده علاوه بر NodePort به `443`  و `80` هم پاسخ میداد و سرویس من به این صورت بود\n‍‍‍‍\n```\ningress-nginx NodePort 10.10.1.1 <none> 80:30332/TCP,443:30333/TCP 2y194d\n```\nدرواقع این node تنها باید به http request روی  پورت `30333` و `30332‍` پاسخ میداد ولی در کمال تعجب به `443` و `80` هم پاسخ میداد\n\nبرای فهم چرایی ماجرا به node ای که وظیفه میزبانی کردن ingress controller رو داشت ssh کردم\n\nابتدا تلاش کردم متوجه بشم چه پروسه ای روی پورت 80 گوش میده پس این کامند رو اجرا کردم\n\n```\nlsof -i tcp:80\n```\n\nPID متعلق به systemd-resolved میشد پس میشد حدس زد که این پروسه ربطی به اپلیکیشن های سیتمی نمیشد\nخروجی کامند\n\n```\nnginx 13902 systemd-resolve 11u IPv4 1835063227 0t0 TCP *:http (LISTEN)\n```\n\nبرای اینکه مطعا بشم هیچ لودبالانسری روی سیستم نیست که این command رو اجرا کرده باشه تایپ کردم `whereis nginx`\nالبته که این کامند `whereis` تنها درصورتی جواب برمیگردونه که executable تو مسیر path هایی که تو shell تعریف شده وجود داشته باشه ولی با تقریب بالایی حالا میدونستم که این process مربوط به یه کانتینر روی سیستم میشه\nاما برای پیدا کردن اینکه اینکه این PID متعلق به چه کانتینری هستش باید چیکار میکردم ؟\nبا کمی سرچ کردن به این گفت و گو تو [stackoverflow](https://stackoverflow.com/questions/24406743/coreos-get-docker-container-name-by-pid) رسیدم پس از این کامند استفاده کردم تا PID رو به کانتینر MAP کنم\n\n```\nPID=$(lsof -i tcp:80 | awk 'NR==2{print $2}'); sudo docker ps --no-trunc | grep $(cat /proc/$PID/cgroup | grep -oE '[0-9a-f]{64}' | head -1) | sed 's/^.* //'\n```\nنتیجه متعلق میشد به `k8s_nginx-ingress-controller_nginx-ingress-controller` پس میتونستم مطعما باشم چیزی که باش سروکار دارم مربوط به کوبرنتیز میشه نه چیزی خارج از اون پس برای مرحله بعد باید ingress controller deployment رو چک میکردم\nو اینجا بود که متوجه شدم deployment من از Host Ports استفاده میکنه یعنی مستقیما روی port های node گوش میده به این صورت\n\n```bash\nkubectl get ds nginx-ingress-controller -o yaml\n\n       ports:\n        - containerPort: 80\n          hostPort: 80\n          name: http\n          protocol: TCP\n        - containerPort: 443\n          hostPort: 443\n          name: https\n          protocol: TCP\n```\n\nبرای حل مشکل کافی بود فقط این خطوط رو از deployment خودم پاک میکردم\n\n[^1]: کلاستر\n[^2]: kubernetes\n"
    },{
      "id":         "/PREDICTABLE_INTERFACE_NAMES",
      "url":        "/predictable-interface-names.html",
      "image":      "assets/article_images/PREDICTABLE_INTERFACE_NAMES/systemd-light.png",
      "title":      " اینترفیس های حدس زدنی",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2022-08-09 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \" اینترفیس های حدس زدنی\"\ndate: 2022-08-09\ncategories: development\nimage: assets/article_images/PREDICTABLE_INTERFACE_NAMES/systemd-light.png\n---\n\nسخت تر از شرح ماجرا انتخاب یه اسم با مسما برای مقاله بود\n\n راستی این مقاله رو من به وسیله [md.behroozam.com](http://md.behroozam.com) نوشتم که یه markdown editor خیلی ساده است که زبان فارسی و rtl رو پشتیبانی میکنه از قابلیت های اضافی تری هم که نسبت به نسخه اصلی که فورکش کردم داره اینه که تمیز تر نوشته شده و پلاگین فوتر براش فعاله یعنی میتونید به راحتی توش فوتر اینشکلی[^1] اضافه کنید و بعدا احتمال داره قابلیت های دیگه [GFM](https://github.github.com/gfm/) که `markdown engine` گیتهاب هستش رو هم بهش اضافه کنم\n\n### شرح اتفاقی که افتاد ؟\n\nتو هفته گذشته وظیفه داشتم که مشکل race condition بین interface های مختلف رو تو زمان بوت شدن سیستم رفع کنم ولی قضیه از چه قرار بود\nما یه rule عه udev داشتیم به اسم `etc/udev/rules.d/70-persistent-net.rules/` که محتواش به این صورت بود\n\n```\n‍‍‍SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"<MAC address>\", ATTR{type}==\"1\", KERNEL==\"eth*\", NAME=\"eth0\"\n‍‍‍SUBSYSTEM==\"net\", ACTION==\"add\", DRIVERS==\"?*\", ATTR{address}==\"<MAC address>\", ATTR{type}==\"1\", KERNEL==\"eth*\", NAME=\"eth1\"\n\n```\nاین rule درواقع میگه که زمانی که event شناسایی سخت افزار interface با مختصات `*eth` از سمت کرنل اومد udev اسم این interface رو با MAC address مورد نظر به `eth0` تغییر بده و برای MAC address بعدی به `eth1`\n\nتو این مورد اگر ما دوتا network interface میداشتیم و پارامتری که به grub پاس داده بودیم شامل ‍`net.ifnames=0` میشد یعنی بدین صورت\n\n```\necho 'GRUB_CMDLINE_LINUX=\"net.ifnames=0\"' > /etc/default/grub\n```\nاتفاقی که میفته اینه که kernel به صورت default مقداری رو که به عنوان interface برمیگردونه به صورت legacy برمیگردونه با schema قدیمی eth*\nو اینجوری اگه مثلا من بخوام eth0 رو به eth0 یا eth0 رو به eth1 تغییر اسم بدم مشکل race condition اتفاق میفته چون قبلا این interface توسط لایه kernel تحویل داده شده و حالا ما تو لایه user-space تلاش میکنیم تغییرش بدیم تا بوت بشه\n\n### اما چرا اینکار رو انجام میدادیم ؟\n\nهمه چیز برمیگرده به نسخه v197 systemd که تصمیم بر این گرفته شد که به جای استفاده از interface name های legacy از Predictable Network Interface Names استفاده بشه به این صورت که بر اساس این استاندارد به جای استفاده از `*eth` از مقادیری که به آدرس کارت شبکه یا اسمش اشاره میکنه درواقع  `ID_NET_NAME_PATH` یا `ID_NET_NAME` و ... استفاده میشه\nبرای دیدن جزئیات اینکه systemd-udev بر چه اساسی این نام گذاری رو انجام میده میتونید [این داکیومنت رسمی](https://man7.org/linux/man-pages/man7/systemd.net-naming-scheme.7.html) رو یا [این تکه](https://github.com/systemd/systemd/blob/main/src/udev/udev-builtin-net_id.c) از کد رو بخونید تا دقیق تر متوجه بشید. اینجا هم یه مقاله رسمی از [systemd](https://systemd.io/PREDICTABLE_INTERFACE_NAMES/) که ماجرا رو به تفصیل شرح میده\n[این مقاله](https://wiki.debian.org/NetworkInterfaceNames) دبیان هم برای خوندن بیشتر توصیه میشه\n\n### چه راه حل هایی داریم ؟\n\nاین البته بسته به نیاز و شرایط شما از تنظیمات سیستم داره مثلا اگه جایی interface رو hard-code کرده باشین یا تنظیمات فایروال رو بر اساس interface name تنظیم کرده باشین لازم هستش که همواره مطمعا باشید که inerface name که تحویل میگیرید اسم مورد نظر رو داشته باشه\nبرای مثال اگر تنظیمات فایروایل به این صورت هستش\n```\niptables -t raw -A PREROUTING -i etch0 -j CT --zone newyork\n\n```\n>  ترکیب این راه حل ها باهمدیگه باعث میشه که هیچکدوم به درستی کار نکنند پس فقط یکی از این راه حل ها رو انتخاب کنید\n\nخب اینجا چند تا راه حل دارید\n\n#### راه حل اول\n مثل مثال بالا از `persistent-net.rules‍` استفاده کنید ولی `net.ifnames=0` رو از تنظیمات grub پاک کنید\n\n#### راه حل دوم و پیشنهادی من\n\n اینه که از systemd link استفاده کنید که روش مدرن تری برای rename کردن interface هست و میتونید مطعما باشید که درست کار میکنه\nبرای  مثال من میخوام یه interface به اسم `internet0` داشته باشم که ترافیک اینترنتی من رو حمل کنه و چون نمیخوام تنظیمات فایروالم رو عوض کنم یه `AlternativeName` به اون اضافه میکنم که درواقع همون eth0 هستش\n`AlternativeName` قابلیت جدیدی که به کرنل لینوکس اضافه شده تا بشه یه نام مستعار رو به interface های لینوکس اضافه کرد\n‍‍\n```\ncat > /etc/systemd/network/10-altname.link <<EOF\n[Match]\nMACAddress=YourMACAdress\n\n[Link]\nName=internet0\nAlternativeName=eth0\nAlternativeNamesPolicy=database onboard slot path\nEOF\n```\nو جهت خطایابی و رفع ایرادات احتمالی که ممکنه فایل link ما داشته باشه\n\n```\nudevadm control --log-level=debug\n\nudevadm trigger -c add /sys/class/net/internet0\n\njournalctl -xe -f -u systemd-udevd.service\n```\n\n#### راه حل سوم\n\nبه تنظیمات grub این تکه رو اضافه کنید ‍`net.ifnames=0` تا نام گذاری interface به شکل گذشته خودش یعنی `*eth` برگرده\n\n[^1]:  شرحی بر لینک بالا\n\n\n"
    },{
      "id":         "/web-application-system-design",
      "url":        "/web-application-system-design.html",
      "image":      "assets/article_images/system-design/header.webp",
      "title":      "مسیری که طی میشود تا به یک وبسایت برسیم",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2022-07-24 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"مسیری که طی میشود تا به یک وبسایت برسیم\"\ndate: 2022-07-24\ncategories: development\nimage: assets/article_images/system-design/header.webp\n---\n\nابتدا قرار بود این مقاله متنی باشه برای توضیح تقسیم بار در سیستم توزیع شده کوبرنتیز[^1] و چالش هایی که پیش روی ما میزاره.\nاما لازم دیدم قبل از اینکه به بحث اصلی بپردازم از جزئیات سیر و سفری که یک مشتری [^2] و تعاملش با کارساز[^3] صحبت کنم\nاین مقاله میتونه برای توسعه دهنده ها و مدیران سیستم و تمامی شاخه های زیرساخت و توسعه نرم افزار جذاب باشه.\n\n> نکته: برای اینکه مقاله خاک نخوره تا جایی که نوشتم رو منتشر میکنم و سعی میکنم که تو هفته های آینده بخش های دیگه رو اضافه کنم\nبخش های باقی مونده شامل\n* مقایسه ای بین الگوریتم های مختلف توزیع بار\n* مقایسه ای بین لودبالانسر های معروف مثل nginx و haproxy و envoy راهکارهای فعلی تقسیم بار تو کوبرنتیز که شامل ترافیک خروجی و ترافیک ورودی میشه\n* مقایسه رویکرد های مختلف برای توزیع بار بین multi-cluster\n\nچند تا چالش اساسی درمورد ساختار اینترنت و وب اپلیکیشن ها هستن که به عنوان یه مهندس سیستم تو حوزه زیرساخت همیشه چالش برانگیز و پر از جزئیات مهم هستن\nاین چالش ها شامل مقیاس پذیری یعنی اینکه سیستم ما چقدر گنجایش یا ظرفیت بزرگ شدن و به چه سرعتی رو داره\nچالش تاب آوری یعنی اینکه چقدر میتونه در مقابل خطاهای نرم افزاری یا از دسترس خارج شدن سخت افزار تحمل داشته باشه\nو چالش های دیگه ای که تو مقالات دیگه به تفصیل درموردشون صحبت شده\nولی تمرکز من اینجا بیشتر روی توزیع‌بارLoadBalacning تو سیستم های توزیع شده به خصوص Kubernetes هستش\n\nاولش بزارین یه مقدار درمورد اینکه چه فرایندی اتفاق میفته تا درخواست یه کاربر به دست کارساز ما برسه درنهایت پاسخ به سمت کاربر ارسال میشه صحبت کنیم\n\n\n## ایجاد یک درخواست HTTP\nمرحله اول درخواست D‌NS[^4] که کاربر به DNS  سروری که روی سیستم عاملش resolve.conf یا به صورت دیفالت روی شبکه محلیش [^5] تعبیه شده درخواستش رو ارسال میکنه این DNS server مثلا میتونه 8.8.8.8 یا 8.8.4.4 باشه برای مثال این نتیجه درخواست dns به وسیله ابزار [dig](https://linux.die.net/man/1/dig) به سمت behroozam.com\n\n```bash\ndig @8.8.8.8 behroozam.com +short\n188.114.97.1\n188.114.96.1\n```\n\n2- مرحله دوم ساختن یه http request[^6] هستش\nما قراردادهای ارتباطی دیگه ای مثل quic هم داریم ولی به خاطر اینکه HTTP روی بستر TCP و مدت خیلی زیادی که استاندارده از HTTP برای این مسیر رفت و برگشت درخواست و پاسخ استفاده میکنیم هرچند واقعا توصیه میکنم درمورد [quic](https://www.chromium.org/quic/) بخونید چون آینده حداقل ارتباط بین سرویس ها و مروگرهای مدرن به دلیل اینکه UDP خیلی قابل اتکا شده و ارتباطات سریعتر و بهتره شده به نظر من روی quic خواهد بود.\n\nبرای ساختن درخواست http من تصور میکنم که کاربر برای مثال از curl استفاده میکنه به این صورت\n```\ndomain=behroozam.com\nhost_ip=$(dig @8.8.8.8 +short -p 53 $domain | awk 'NR==1{print $0}')\ncurl -H \"Host: $domain\" $host_ip\n```\n\nتو این مرحله ما به اون DNS A record که ایپی github pages هست یه درخواست HTTP رو ارسال میکنیم تفاوت این قضیه با زمانی که به صورت عادی curl behroozam.com بکنیم تو این هستش که به صورت استاندارد ابزار curl میاد و fqdn رو توی هدر Host قرار میده ولی اینجا به دلیل آموزشی بودن مقاله من سعی میکنم همه چیز رو با جزئیاتش جلو برم و چیزی رو به استاندارد ها واگذار نکنم\n\nخب اگه اینجا رو بخوایم با مدل TCP/IP شرح بدیم تو لایه 4 یا application ما یه درخواست DNS ایجاد کردیم\n اگه علاقه‌مند هستین میتونید جزیات پیام DNS رو [اینجا](https://cabulous.medium.com/dns-message-how-to-read-query-and-response-message-cfebcb4fe817) مطالعه کنید. انواع و اقسام مختفلی از dns record ها  وجود داره و این پروتکول درواقع به یکی از مهم ترین پروتکول های اینترنت تبدیل شده پس دانش نسبت به مهم ترین record ها مثل CNMAE و A record الزامیه.\n\n تو لایه 3 که transport هستش ما به port 53 آیپی 8.8.8.8 به وسیله ابزارdig  پیام درخواست DNS  رو ارسال میکنیم\nتفاوت بین دو پرتکول udp و tcp رو میتونید  اینجا تو [این ویدئو بسیار خوب](https://www.youtube.com/watch?v=cr_FO50y1EI&ab_channel=4rahecomputer) به زبان فارسی ببینید.\n\nلایه ۲ و ۱ که لایه شبکه و لینک فیزیکی هستش یه مقداری جزئیات زیادی داره اگه علاقه‌مند هستین که بدونید اون وسط چه اتفاقی میفته که به سمت host_ip مسیریابی[^7] اتفاق میفته و پکت ارسال میشه و دریافت میشه توصیه میکنم دوره network+ رو یه مروری بکنید ولی به صورت خلاصه چون بازه ای‌پی host_ip تو بازه ipv4 های رجسیتر شده اینترنتی هستش ( به صورت عامه میگن ای‌پی ولید ولی این تعریف درستی نیست درواقع  public ip  تو استاندارد ICANN )\n سیستم عامل برای مسیر یابی درخواست ما رو به سمت default route ارسال میکنه این پکت های ip یه source ip دارن که مشخص میکنه که ارسال کننده این پیام کامپیوتر ما هستش و یه destination ip که درواقع host_ip هستش\nاین وسط تو اینترنت کلی این پکت ما میچرخه با پرتکول های مختلف مسیریابی و source nat  و destination nat تا درنهایت به دست کارساز میرسه\n\n 3- تو کارساز همه اون مراحلی که بالا برای ساختن یه http request انجام شد حالا به صورت معکوس اتفاق میفته یعنی از لایه 1 این بار به لایه 4\nبرای اینکه سناریو خیلی ساده نباشه من اینجا  معماری یه سیستم high available رو تصور میکنم که ما بین دوتا لودبالانسر keepalived داریم و این دو تا به عنوان A رکورد پشت dns server ما هستن و هرکدوم از این لودبالانسر ها به backend های یکسانی متصل میشه\n\nمابقی موارد درمورد سیستم دیزاین مثل اینکه کجا از cache یا key value store یا message broker یا sharded database استفاده میکنیم رو بعدا میشه تو مقالات جداگانه ای بهشون اشاره کرد\n\nبه هر صورت اولین ریکوئستی که به سمت سرور ما میاد غالبا HTTPS و با اکستنشن tls v1.3 هستش یعنی چه ؟\nیعنی اگه سه مرحله اولی که packet لایه فیزیکال به پکت ip ترجمه شد و بعد از اون نشست اولیه TCP یعنی SYN و SYN ACK و ACK بین مشتری client و کارساز server برقرار شد\nحالا یه مرحله جانبی اتفاق میفته که تو مدل TCP/IP معمولا بهش میگن لایه 3.5 یا تو مدل OSI بهش میگن presentation layer\nتو این مرحله اگه کارساز از ciphersuite که مشتری فرستاده پشتیبانی کنه و همه چیز بر وفق مراد باشه یعنی از نظر امنیتی کارساز ورژن tls و ciphersuit رو تایید کنه بین مشتری و کارساز یه key exchange اتفاق میفته که درنهایت به ساختن یه symmetric key منتهی میشه که برای ارتباط امن و رمزنگاری شده بین مشتری و کارساز استفاده میشه\nپیام اولیه ای که مشتری برای کارساز میفرسته clienthello هستش که شامل اطلاعاتی مثل SNI میشه\nاین SNI درواقع FQDN دامنه ای هستش که مشتری درخواست اتصال رو بهش داده\nعلتی که از SNI استفاده میشه اینه که بشه روی یه کارساز از چند domain مختلف پشتیبانی کرد یعنی پروتکول tls از SNI استفاده میکنه تا در جواب clienthello کلید domain که تو clienthello بوده رو برگردونه\nبرای خوندن جزئیات اینکه اینجا چه اتفاقی افتاد خوندن این مقاله رو حتما پیشنهاد میکنم چون این دانش درمورد خطایابی HTTPS خیلی میتونه به ما تو شرایط مختلف کمک کنه\n\nحالا سوال اینه که این مرحله 3.5 توسط چه نرم افزاری یا کجای سیستم عامل اتفاق میفته\nبزارین یکم شیرجه بزنیم تو مفاهیم شبکه و سیستم عامل\n\nوقتی یه پکت لایه دو یا فیزیکال به سمت کارساز ما میاد یعنی به فرض اگر ما با یه ethernet connection به یه switch متصل هستیم این پکت دنبال کارساز ما با MAC ادرسی میگرده که توی destination عه frame اون خورده\nاین پکت میاد تو کارت شبکه کارساز ما که destionation MAC رو داره\nچطوری ؟\nSwitch ما میاد و یه frame رو به همه دستگاه های روشن تو شبکه میفرسته به اصطلاح broadcast میکنه به اسم arp packet که وقتی دستگاه ما این پیام رو دریافت میکنه تو پاسخش ip address و MAC ادرس خودش رو برای switch میفرسته اینشکلی سویچ ما میفهمه که باید کجا پیامش رو ارسال کنه و درواقع ip رو به MAC مپ map میکنه.\n\nمن تصور میکنم کارساز ما اینجا یه کارساز گنو/لینوکسی هستش\n\nکارت شبکه کارساز frame تحویل گرفته شده رو تحویل kernel میده کرنل هم میاد اینو تحویل iptables تو لایه user-space میده\n\nتفاوت user-space و kernel space تو اینه که [kernel space](https://en.wikipedia.org/wiki/User_space_and_kernel_space) یه فضای virtual memory رزرو شده برای سیستم عامل هستش که اپلیکیشن های کاربردی تو لایه user-space حق دسترسی رو به اون ندارن و این kernel که اگه اپلیکیشی تو لایه user-space درخواستی برای دسترسی به سخت افزار داشته باشه رو میده یا نمیده\nولی به صورت کلی syscal ها یا پیام های سیستمی جهت مدیریت سخت افزار تو kernel space اتفاق میفته و مابقی چیزا مثل اپلیکیشن های کاربردی تو user-space\n\nمیرسیم به بحث بزرگ و البته خیلی مهم iptables\nدرواقع ما اگه یه فهم درستی از iptables داشته باشیم مابقی firewall ها و سیستم هایی که packet manipulation رو انجام میدن برای ما ساده میشه هرچند که تو یه ستون پنج خطی واقعا نمیشه به همه کارهایی که iptable انجام میده اشاره کرد ولی من به صورت کوتاه و مختصر یکی از کارایی که میشه انجام داد و نحوه پاسخ دادن iptables به اون رو شرح میدم\n\nتو این مرحله پکت دریافتی باید از هفت خوان رستم عه iptables عبور کنه اینجوری که iptables در مرحله اول پکت خامی رو که kernel تحویل گرفته رو تو prerouting برسی میکنه اگه با rule nat مطابقت داشت میفرسته برای forward chain در غیر این صورت برای input ارسال میکنه و اگر تو input chain هم rule ای جهت drop یا reject کردن packet نباشه برای user-space و اپلیکیشنی که روی اون port listern کرده ارسال میکنه تو دیاگرام پایین به صورت کامل میتونید فرایند هایی که اتفاق میفته رو مشاهده کنید\n\nمثال عملیش اینجوری میشه که اگه شما روی کارساز خودتون برای مثال این کامند رو اجرا کنید\n\n```\niptables-legacy -A INPUT -p tcp --dport 8000 -j REJECT\n\n```\nاگه  هر کلاینتی با هر source ip برای پورت 8000 یه درخواست http رو بفرسته پیامی رو دریافت نمیکنه با اینکه یه اپلیکیشن داره به پورت  8000 گوش میده.\nتفاوت این کامند با زمانی که DROP میکنیم پکت رو اینه که تو REJECT یه EMPTY RESPONSE به سمت کلاینت فرستاده میشه که tcp connection رو قطع میکنه ولی تو DROP کلاینت بخت برگشته هیچ جوابی رو دریافت نمیکنه و تا زمانی که tcp timeout نشده منتظر جواب باقی میمونه.\n\nحالا برگردیم دوباره به اون سوال بالا که چه کسی مسئول مرحله 3.5 یعنی لایه نشست هستش و این کار رو انجام میده\nتا اینجای کار دیدیم که frame لایه دو شبکه به packet تبدیل شد\nپکت راهش رو از میان iptables به سمت اپلیکیشن پیدا کرد و حالا اینجا اپلیکیشن که loadbalancer ما باشه محتوای پکت دریافتی رو تفسیر میکنه اگر که http باشه مستقیما پردازشش میکنه و اگر HTTPS باشه اول SNI رو چک میکنه و بعد ادامه ماجراهایی که تو ssl handshake و تبادل کلید نامتقارن و متقارن بالا دیدیم.\n\n[^1]: Kubernetes\n[^2]: client\n[^3]: server\n[^4]: Domain Name System\n[^5]: local network\n[^6]: Hypertext Transfer Protocol\n[^7]: routing\n"
    },{
      "id":         "/seek-a-normal-life",
      "url":        "/seek-a-normal-life.html",
      "image":      "assets/article_images/normal-life/normal-life.jpg",
      "title":      "زندگی نرمال",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2020-09-27 00:00:00 +0000",
      "tags":       [],
      "categories": ["philosophy"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"زندگی نرمال\"\ndate: 2020-09-27\ncategories: philosophy\nimage: assets/article_images/normal-life/normal-life.jpg\n---\n\n\n\nبه تازگی هشتگی توی تویتر فارسی به راه افتاده به اسم زندگی نرمال که به ویژگی های یک زندگی نرمال توی کشور های غربی اشاره میکنه و غالبا توسط ایرانی هایی که مهاجرت کردن زده میشه و با نگاه انتقادی به محدودیت ها و مشکلاتی هستش که ایرانی ها در ایران با اون رو به به رو هستن چند نمونه از این تویت هارو میتونید مشاهده کنید.\n\n<blockquote class=\"twitter-tweet\"><p lang=\"fa\" dir=\"rtl\">اینا خرید من از فروشگاه آلمانی lidl میباشد<br>دوتا بسته ۶تایی آب و نوشیدنی هم بود که تو عکسها نیست<br>صورتحساب ۶۵ یورو بعلاوه مبلغ فاند بطری ها که میشه حدود ٧٢ یورو <br>این پول میشه حقوق کمتر از ٣ساعت کار من با احتساب کسورات و یک و نیم ساعت ناخالص و ٧ساعت کار یه کارگر ساده<a href=\"https://twitter.com/hashtag/%D8%B2%D9%86%D8%AF%DA%AF%DB%8C_%D9%86%D8%B1%D9%85%D8%A7%D9%84?src=hash&amp;ref_src=twsrc%5Etfw\">#زندگی_نرمال</a> <a href=\"https://t.co/Go0D0nwCrX\">pic.twitter.com/Go0D0nwCrX</a></p>&mdash; Hamid (@daneshgary) <a href=\"https://twitter.com/daneshgary/status/1309865918869237760?ref_src=twsrc%5Etfw\">September 26, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n<blockquote class=\"twitter-tweet\"><p lang=\"fa\" dir=\"rtl\"><a href=\"https://twitter.com/hashtag/%D8%B2%D9%86%D8%AF%DA%AF%DB%8C_%D9%86%D8%B1%D9%85%D8%A7%D9%84?src=hash&amp;ref_src=twsrc%5Etfw\">#زندگی_نرمال</a> یعنی مجبور نباشی برای داشتن <a href=\"https://twitter.com/hashtag/%D8%B2%D9%86%D8%AF%DA%AF%DB%8C_%D9%86%D8%B1%D9%85%D8%A7%D9%84?src=hash&amp;ref_src=twsrc%5Etfw\">#زندگی_نرمال</a> مهاجرت کنی.</p>&mdash; ArianDrama (@ArianisDrama) <a href=\"https://twitter.com/ArianisDrama/status/1309424941293547520?ref_src=twsrc%5Etfw\">September 25, 2020</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n\n## اما زندگی نرمال واقعا چی هستش ؟\n\n\nساده ترین راه برای توصیف زندگی نرمال استفاده از [مدل هرم مازلو](https://fa.wikipedia.org/wiki/%D9%87%D8%B1%D9%85_%D8%B3%D9%84%D8%B3%D9%84%D9%87%E2%80%8C%D9%85%D8%B1%D8%A7%D8%AA%D8%A8_%D9%86%DB%8C%D8%A7%D8%B2%D9%87%D8%A7%DB%8C_%D9%85%D8%B2%D9%84%D9%88) یا نیازهای انسان برای توصیف اونچه انسان بهش نیاز داره و [اعلامیه جهانی حقوق بشر](https://fa.wikipedia.org/wiki/%D8%A7%D8%B9%D9%84%D8%A7%D9%85%DB%8C%D9%87_%D8%AC%D9%87%D8%A7%D9%86%DB%8C_%D8%AD%D9%82%D9%88%D9%82_%D8%A8%D8%B4%D8%B1) هستش.\n\n![هرم مازلو](assets/article_images/normal-life/Maslows-Hierarchy-of-Needs.jpg)\n\nتو هرم مازلو ابتدایی ترین نیاز های انسان خوراک پوشاک مسکن و تولید مثل و در سطوح بعدی نیازهایی مثل امنیت و تعلق داشتن و احترام و آزادی و درنهایت خودشکوفایی است\nاز اونجایی که مواد اعلامیه جهانی حقوق بشر از منظر نیاز های فیزیکی و فردی همپوشانی زیادی با مدل هرم مازلو داره میشه فقط به مواردی مثل حق زندگی و آزادی بیان و حق کار و انتخاب اشاره کرد البته توصیه میکنم همه مواد این اعلامیه رو به صورت کامل مطالعه کنید.\n\n## سوالی که ایجاد میشه اینه که بر اساس تعاریف بالا آیا ما در ایران زندگی نرمالی داریم ؟\n\nجواب خیر هستش ،‌ با وجود تنگانا های اقتصادی و اجتماعی و سیاسی که روز به روز بیشتر شده عملا ایرانیان از ابتدایی ترین حقوقشون محروم شدن\nیعنی تهیه خوراک پوشاک و مسکن و تولید مثل  برای اکثریت ایرانیان سخت و یا غیرممکن شده ( با توجه به [آمار رسمی](https://shahraranews.ir/0007aF) در خرداد ماه ۹۹ حدود ۷۰ درصد قشر کارگر زیر خط فقر زندگی میکنند به عبارتی ۱۵ میلیون انسان ایرانی از آذر ۹۸ زیر خط فقر زندگی میکنند )\n\nامنیت و احساس تعلق داشتن ارتباط مستقیمی با شرایط اقتصادی داره یعنی با سخت تر شدن شرایط اقتصادی بزهکاری و جرم هم افزایش پیدا میکنه و امنیت در جامعه کاهش پیدا میکنه و فرد احساس تعلق داشتن به کشوری رو که توش امنیتی نداره رو از دست میده. ( [افزایش سرقت ، موبایل قاپی و کلاه‌برداری](https://www.yjc.ir/00VBCq) )\n\nحس احترام و آزادی از قبول کردن سبک های زندگی مختلف و آزادی های فردی به وجود میاد. با توجه به قوانین تبعیض آمیز مثل حجاب اجباری که حدود ۵۰ درصد جامعه ایرانی رو یعنی زنان رو از حقوق اولیه خودشون محروم کرده و قوانین دیگه مثل حق طلاق و خروج از کشور و مابقی قوانین تبعیض آمیز کارنامه آزادی و احترام هم ابدا نمره قبولی نمیگیره.\n\nو در نهایت خودشکوفایی یعنی تلاش برای بهبود همه موارد بالا یعنی فرد و جامعه تلاش میکنه وضعیت خودش رو به سمت سعادت و بهروزی خودش ببره.\n\n## خودشکوفایی یا تغییر شرایط شدنیه ؟\n\nجواب این سوال به ریشه‌یابی مشکلات اقتصادی و اجتماعی و سیاسی که ایران امروز درگیرشونه برمیگرده.\nبزرگ ترین مشکل اقتصادی ایران تحریم و فساد سیستماتیک و ناکارآمدی که به ترتیب به دلیل سیاست خارجی و کلپتوکراسی و قدرت نهادهای انتصابی برمیگرده.\n\nسیاست خارجی ایران متاثر از دیدگاه بنیان‌گذاران سیستم سیاسی ایرانه و مربوط به دوران جنگ سرد میشه الگویی که میشه اونو تو کشور های عدم تعهد مشاهده کرد ، متاسفانه بعد از فروپاشی اتحاد جماهیر شوروی و تغییراتی که جهان به چشم خودش دید این سیاست ها تغییری نکرد ، اصولا جهان سیاست و روابط دیپلماتیک یه جهان پویا و بر اساس منافع کشور ها هستش اما تله بنیان گذار این اجازه رو به سیاست‌گذاران ما نداد تا بتونن الگوی مناسبی رو جهت ارتباط با جهانیان شکل بدن.\nاما تله بنیان گذار چیه ؟\nاصولا هر سیستمی مراحل مختلف رشد خودش رو داره، تولد ، رشد ، بلوغ و مرگ. وقتی سیستم به نقطه بلوغ میرسه برای رسیدن به مرحله بعدی نیازمند تغییراته و اگر نشه از ذهنیت بنیان‌گذاران سیستم عبور کرد سیستم درنهایت به نقطه مرگ میرسه.\n\nتوصیه میکنم برای بهتر فهمیدن تله بنیان‌گذار [این مقاله](http://iraneconomist.com/fa/news/41259/%D8%AA%D9%84%D9%87-%D8%A8%D9%86%DB%8C%D8%A7%D9%86%DA%AF%D8%B0%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AC%D9%88%D8%A7%D9%85%D8%B9-%DA%86%D9%87-%D9%85%DB%8C%E2%80%8C%DA%A9%D9%86%D8%AF) رو مطالعه کنید.\n\nدرمورد مشکلات اجتماعی میشه همون استدلال بالا رو به کار برد ، جامعه و فرهنگ عوض شده و دستوری هم نمیشه فرهنگ رو کنترل کرد. درواقع میشه گفت سبک زندگی و رواج موسیقی و هنر در ایران یک نوع تقابل یا هویت خواهی درمقابل ذهنیت و یا دیدگاهی بود که تمامی ویژگی های یک زندگی نرمال رو نکوهش میکرد و مرگ‌خواه و متافیزیک محور بود درحالی که نسل جوان و مدرن ایرانی دریچه هایی رو به دنیایی پیدا کرده بود که سوال هایی رو در ذهنش ایجاد میکرد. چرا ما باید اینگونه زندگی کنیم ؟\n\n## چرا ما باید اینگونه زندگی کنیم ؟\n\n<div id=\"14976894248\"><script type=\"text/JavaScript\" src=\"https://www.aparat.com/embed/Vmc8t?data[rnddiv]=14976894248&data[responsive]=yes\"></script></div>\n\n\nوقتی این سوال از وزیر امور خارجه جمهوری اسلامی ایران جواد ظریف پرسیده شد جواب ظریف دقیق و البته تامل برانگیز بود : ما خودمون انتخاب کردیم که جور دیگری زندگی کنیم.\n\nما البته مرید از نسل من یا ایرانیان سال ۹۹ نمیشه این تفسیر از ما مربوط به رفراندومی میشه که فروردین سال ۵۸ انجام شد  و تصویب قانون اساسی و هیچگاه دیگه تکرار نشد درحالی که اگر به کشور هایی مثل هند نگاه کنیم از زمان تاسیسشون بارها قانون اساسی تغییر کرده.\n\n## اما راه حل برون‌رفت از این شرایط چیه ؟\n\n\nبزارین یکم شخصیش کنم\nمن یه متخصص دواپس یا لینوکس هستم که سیستم های کامپیوتری رو تجزیه و تحلیل میکنم تا بتونم بهترین راه حل رو به سازمان ها بدم  ، درمورد توسعه و مسائل اینچنینی هم بزرگواران و متخصصان توسعه مثل دکتر رنانی  و سیاست مثل صادق زیبا کلام قلم فرسایی ها و مشاوره های زیادی دادن که هیچوقت شاید بهشون عمل نشده.\n\n* از زمانی که میتونستیم از تله‌بنیان‌گذار به سلامت عبور کنیم مدت ها گذشته\n\n* از زمانی که میشد دست به اصلاحات قانون اساسی زد هم همینطور\n\nاما ما زنده ایم و امید تنها داشته ما شاید در این شرایط برای به دست آوردن یک زندگی نرمال برای تمام ایرانیان است\nشاید امروز بزرگترین وظیفه ما به عنوان ایرانیان زنده نگه داشتن این باور و ایده است که ما حق یک زندگی نرمال رو داریم و این جنبشی که شکل گرفته و داره از انچه باید داشته باشیم میگه همون روزنه ای که راه حل برون رفت از این شرایطه.\n"
    },{
      "id":         "/social-paradigm-shift",
      "url":        "/social-paradigm-shift.html",
      "image":      "assets/article_images/social-paradigm-shift/change.png",
      "title":      "عصر فناوری: بیم و امید",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2020-07-25 00:00:00 +0000",
      "tags":       [],
      "categories": ["philosophy"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"عصر فناوری: بیم و امید\"\ndate: 2020-07-25\ncategories: philosophy\nimage: assets/article_images/social-paradigm-shift/change.png\n---\n\n\n\nسال ها هستش که [مطالب مسعود زمانی](http://www.masoudz.com/) رو که یکی از فیوچریست های مورد علاقه ام هستش رو دنبال میکنم و خوشبختانه چند سال قبل فرصت این رو داشتم که با مسعود عزیز تو [یکی از برنامه های رادیو‌بادیو](https://budio.ir/radio-budio-58/) درمورد تاثیرات تکنولوژی بر علوم پزشکی هم صحبت باشم.\n\nمطلبی که باعث شد این پست وبلاگ رو بنویسم اما برمیگرده به [آخرین پست وبلاگ مسعود زمانی](http://www.masoudz.com/%d8%b9%d8%b5%d8%b1%d9%81%d9%86%d8%a7%d9%88%d8%b1%db%8c%d8%8c%d9%be%d8%a7%db%8c%d8%a7%d9%86%db%8c-%d8%a8%d8%b1%d8%a7%db%8c-%d9%85%d8%aa%d9%85%d8%a7%db%8c%d8%b2%d9%87%d8%a7) درمورد اینکه چگونه تکنولوژی باعث شده که همه چیز تغییر کنه از ساخت اجتماعی ما که مبتنی بر کمبود منابع بوده و تعریف هویتی یکتا و خاص و این چطور میتونه برای بودن ما به عنوان انسان خطرناک باشه.\n\nالبته این موضوعات همواره به شکلی مورد علاقه من بوده ترکیبی از گذشته، حال و آینده که میتونید برای دنبال کردنش این مطالب رو زنجیر وار به همدیگه متصل کنید تا به یه درک تقریبا مشترک از موضوع برسیم.\n\n* در پست [آینده از نگاه من](http://behroozam.com/my-vision-for-the-future.html) از روباتیک و توسعه هوش مصنوعی گفتم که چگونه مفهوم کار رو متحول میکنه ، از تقسیم کار به عنوان شاکله ای که جوامع مدرن مارو ساخته تا مفهوم ثروت و بازار\n\n* در پست [هویت](http://behroozam.com/the-Identity.html) از این گفتم که چه چیزهایی هویت ما رو به عنوان انسان تعریف میکنه\n\n* در پست [هستی](http://behroozam.com/existence.html) از حس بودن و آزادی اراده گفتم از این که یافته های علم عصب شناسی چقدر میتونه هستی ما که همواره روی مفهومی به اسم خود سواره رو به مخاطره بندازه و به صورت کلی آزادی اراده رو زیر سوال ببره\n\n* در [پست ذهن درون خمره](http://behroozam.com/simulation.html) از مسئله ای که ذهن دکارت رو به خودش مشفول کرده بود یعنی شیطان نابکار یا ذهن درون خمره گفتم اینکه چقدر احتمال داره ما تو یه شبیه ساز کامپیوتری باشی و این حسی که درمورد وجود داشتن داریم صرفا توهمی بیش نباشه\n\n* در [پست هوش مصنوعی جان سرل و چند استدلال علیه ماتریالیسم](https://virgool.io/@b3hroozam/mind-il6udajbi1fx) از مسائلی گفتم که جان سرل به استدال به اون ها به وجود آمدن یه هوش مصنوعی واقعی رو نشدنی میدونه، از معروف ترین استدلال های جان سرل مثل اتاق چینی و ملت چین\n\n\nاما بریم به سراغ مطلب اصلی\n\n![ تصویری از شبکه اجتماعی و فرد به عنوان گره در این شبکه اجتماعی ](assets/article_images/social-paradigm-shift/network.jpg)\n\nدرمورد مسئله جامعه من اعقاد دارم که فراگیری تکنولوژی ارتباطات و خلق مفاهیمی مثل شبکه های اجتماعی ، شهروند-خبرنگار ، کنشکر اینترنتی باعث شده که جامعه ای که به شکل سنتی ساختار سلسه مراتبی داشت به سمتی حرکت کنه که این ساختار های بروکراتیک و خشک به سرعت جای خودشون رو به شبکه بدن ، منظورم از شبکه تبدیل شدن هرکدوم از افرادی که در شبکه فعالیت میکنن به یک گره فعال در شبکه است که میتونن بر اساس اهمیت و وزنی که در شبکه دارن تاثیر‌گذار باشن ، مثال متاخرش تاثیری که امیر تتلو به عنوان خواننده جنجالی و پرحاشیه روی فرهنگ جوانان داشته و تاثیر کمتر این مسئله روی اقشار دیگه دیگه صحبت کرد یعنی جامعه دیگه به شکلی نیستنش که همه موقع افطار ربنا شجریان گوش کنن و این هویت و ساختار به شکل کاملا رادیکالی دگرگون شده.\n\nاین مسئله به خودی خودش هزاران سال زندگی اجتماعی انسان ها رو که بر اساس سنت ها و هویت های ایستا بوده رو به هم زده ( تو پست [هویت](http://behroozam.com/the-Identity.html) از این گفتم که چقدر امروزه داشتن هویت ایستا میتونه برای بشریت خطرناک باشه و چرا خاورمیانه به دلیل این هویت ایستا همواره درگیر جنگه ) ، شاید خواننده زیرک سوال کنه که آیا تلوزیون و رادیو همچین تاثیری نداشتند ؟\n\nتلوزیون و رادیو اصولا شبکه هایی مبنی بر برادکست هستن یعنی یک رابطه یه طرفه ای برقرار هست میتونم بگم نسل اولیه شبکه های ارتباطیه که البته که تاثیر شگرفی روی مد و صنعت سرگرمی داشتن ولی داستان شبکه های اجتماعی و شکل‌گیری چیزی که با ذوق‌زدگی اسمش رو وب-۲ گذاشتیم یه تعامل دوطرفه توسط خلق کننده و بیننده است که تعامل مستقیم با اثر رو ایجاد کرده که این روزها با کامنت و لایک و دنبال کردن شناخته میشه و مشارکت بیشتری رو از همه طرفین ایجاب میکنه.\n\nبه اعتقاد من این مسئله چالش پست-مدرنی هستش که تا قبل از این بشریت هیچگاه باهاش مواجه نبوده\nنه در انقلاب صنعتی و شکل گیری کلان شهر ها نه در دنیای مدرن و ازخودبیگانگی که نسل بعد از جنگ جهانی دوم باهاش مواجه شد هیچکدوم این دگرگونی رو به این شکل تجربه نکردن.\nبه نظر من  ما انسان ها  برای توصیف پدیده ها یا مفاهیم از زبان استفاده میکنیم ، زبان هم یه تکنولوژی ارتباطی که با نشانه گذاری درک جمعی ما از مفاهیم سروکار داره برای مثال کلمه آب تداعی کننده مایع شفاف و کمرنگی که درصد زیادی از بدن ما انسان هارو تشکیل داده و ما برای زنده بودن بهش احتیاج داریم ولی کلمه نیهوپات که یه کلمه من‌درآوردی هست که الان من برای اشاره به لپتاپم اختراع کردم  احتمالا به جز شما خواننده و من نویسنده برای دیگران نامفهوم و بی ‌معنیه.\n\nما برای معنی دادن به این ساختار های جدید شروع به ساختن کلمات و جملاتی کردیم که تا قبل از زندگی شبکه ای ما وجود نداشتن برای مثال famous for being famous یعنی شناخته شدن به واسطه شناخته تر بودن توسط بقیه افراد ، این مفهوم به غیر از دنیایی که همه مارو به همدیگه متصل نمیکرد نمیتونست وجود داشته باشه برای مثال اگر شما اسم کیم کارداشیان رو نشنیدید به احتمال زیاد تا الان به اینترنت متصل نبودین و انلاین شدین که فقط پست من رو مطالعه کنید.\n\nآیا این مسئله ضرر هایی رو هم داره ؟\n\nبه نظرم قطعا داره ما تو انتخابات ریاست جمهوری ایالات متحده با مفهومی به اسم FakeNews آشنا شدیم که به معنی اخبار غلط سودهی شده و کانالیزه شده برای افراد در شبکه های اجتماعی بود تا روی انتخاب سیاسی که مستقیما تو زندگی روزمره اون ها تاثیر داره اثر بزاره\nبزارین بازهم مثال بزنم تو فیلم کمدی ایدئوکراسی شخصیت اول داستان بعد از سالها خواب‌مصنوعی بیدار میشه و جامعه امریکایی رو میبینه که به دلیل تمایل باروری کمتر افراد باهوش تبدیل به خراب آبادی شده که یه بازیگر فیلم های بزرگسال و کشتی گیر سابق به عنوان رئیس جمهور امریکا انتخاب شده.\nشباهت های بی بدیلی رو میشه بین کشتی‌گیر فیلم ایدئوکراسی و ترامپی که به عنوان یه حاجی‌بازاری شناخته شده برای ریاست جمهوری آمریکا انتخاب شده دید ،‌تصمیم گیری های بعضا خنده دار ترامپ در مسائل سیاسی ، اقتصادی ، اجتماعی و … این قدرت عجیب و البته غیر اخلاقی رو نشون میده که چطوری تکنولوژی و عدم راستی‌آزمایی میتونه سرنوشت یک ملت رو تغییر بده.\nشما هم تو زندگی روزمره خودتون هم احتمالا با این دست موارد برخورد داشتین ، برای مثال پدرتون از فواید خوردن چایی هنگام صبح براتون صحبت کرده و وقتی ازش پرسیدین منبع این مطلب کجاست گفته کانال تلگرامی سخنان دکتر سمیعی.\n\nاحتمالا زمان زیادی لازمه که اکثریت جامعه به این نتیجه برسه که هرچیزی رو روی اینترنت دید رو به عنوان فکت قبول نکنه ولی هنوز تا اون نقطه آرمانی فاصله داریم ، شاید لازمه که توی مدارس روی مهارت های راستی آزمایی و شناختی کودکان کار بشه تا تو بزرگ‌سالی شهروند های پرسشکری باشن تا وقتی مطلبی درمورد تخم‌گذاری خروس دیدن باور نکنند.\n\nسود چطور ؟\n\nتمدن زمانی بالنده میشه که مسیرهای ارتباطی وجود داشته باشه ، وقتی به بزرگ‌ترین تمدن های تاریخ نگاه میکنیم این تمدن ها ایزوله و جدای از بقیه تمدن های همجوار نبودن ، درواقع همواره در حال قرض دادن دست‌آورد های تمدنی خودشون به همدیگه بودن. تو جایی مثل خاورمیانه به دلایل جغرافیایی و فاصله های دور شهر ها از همدیگه این به کندی اتفاق می افتاد ولی در اروپا به دلیل نزدیکی شهر ها و فراوانی منابع مثل خاک و آب به سرعت و از اختراع ماشین چاپ گوتنبرگ سرعت به اشتراک گذاری این دست آورد ها چندین برابر شد تا به نقطه ای که امروز هست رسدیم.این مسئله رو زمانی میتونیم بهتر درک کنیم که وقتی مقاله ای در امریکا چاپ میشه ما به سرعت تو تهران به اون دسترسی داریم ، یا احتمالا مسعود عزیز اگر صد سال قبل میخواست که ما به مقاله اش دسترسی داشته باشیم باید نسخه ای از اون رو برای همگی ما ارسال میکرد\nدرواقع مهم‌ترین سودی که این چرخش در پارادایم ذهن ما انسان ها داره در دسترس کردن ناممکن ها برای ما هستش.\nکاتالیزور یا سرعت دهنده به روند تمدنی که ما انسان ها طی کردیم ، حالا که انتهای مسیر چه خواهد بود واقعا بی خبریم ، آیا بوتلودر موجودات هوشمندی خواهیم شد که جای مارو روی زمین میگیرن ؟ آیا زمستان اتمی رو رقم میزنیم که برای همیشه حیات انسان رو روی کره خاکی از بین میبره ؟ آیا با زیاده خواهی محیط زیست رو نابود میکنیم تا آز و طمع خودمون رو ارضا کنیم ؟\nهمه این ها نسخه هایی از جهان های دیگره یعنی آنچه ما به عنوان اما و اگر ها تو ذهن خودمون داریم.\nدر انتها به نظر من شاید بهتره این روزها به جای باور به مدل هایی که توصیف کننده تمام و کمال دنیای اطرافمون باشه اجازه بدیم این پیچیدگی ذاتی شبکه و توزیع شدگیش به شکل یه [مدل آشوبناک](https://en.wikipedia.org/wiki/Chaos_theory) تو ذهنمون جا بیفته تا از واهمه و ترسی که این ناشناخته بودنش برای ما ایجاد میکنه جلوگیری کنه.\n\nمن اعتقاد دارم آینده قشنگ تر از امروزه ولی باید نشست و دید\n"
    },{
      "id":         "/fidibo-anbox",
      "url":        "/fidibo-anbox.html",
      "image":      "assets/article_images/fidibo/Fidibo-logo.png",
      "title":      "اجرا کردن فیدیبو روی گنو/لینوکس",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2020-07-15 00:00:00 +0000",
      "tags":       [],
      "categories": ["featured"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"اجرا کردن فیدیبو روی گنو/لینوکس\"\ndate: 2020-07-15\ncategories: featured\nimage: assets/article_images/fidibo/Fidibo-logo.png\n---\n\n> آپدیت اردیبهشت ۱۴۰۳\n> anbox دیگه توسعه داده نمیشه و توسعه دهنده ابزارش داره روی پروژه [anbox cloud](https://anbox-cloud.io/) کار میکنه که یه ابزار غیرآزاده که به شرکت canonical تعلق داره.\n> راه حل جایگزین استفاده از [Waydroid](https://waydro.id/) است که از همون روش اجرا کردن اندروید روی کرنل لینوکس استفاده میکنه ولی استفاده از اون به سادگی anbox نیست. برای نصب و استفاده از فیدیبو روی لینوکس [مقاله جدیدم](/fidibo-waydroid) رو که درمورد Waydroid است رو میتونید مطالعه کنید.\n\nچند وقتی هستش که دارم کتاب طریق شاهان رو روی فیدیبو میخونم ، معمولا قبل از خواب و روی گوشی موبایلم ولی از اونجایی که داستان خیلی جذاب شد دلم میخواست از طریق لپتاپم بتونم مابقی داستان رو ادامه بدم و به ساعت قبل از خواب محدود نشه ولی یه مشکل بزرگ وجود داشت ، متاسفانه فیدیبو هنوز هیچ نسخه ای رو برای وب و دسکتاپ های لینوکسی عرضه نکرده پس باید یه روشی رو پیدا میکردم که بتونم اپلیکیشنی رو که فیدیبو برای ویندوز یا اندروید منتشر کرده رو روی دستگاهم که با سیستم عامل ubuntu 1804 نصب و اجرا کنم.\n\nاولین گزینه ای که به ذهنم رسید اجرا کردن اپلیکیشن رسمی ورژن مایکروسافت به وسیله Wine بود ولی متاسفانه با وجود نصب کردن تمامی پیش نیازهای ویندوزی به وسیله winetricks خروجی برنامه چیزی که انتظارش رو داشتم نبود و به درستی فونت هارو نمایش نمیداد. پس باید به فکر یه جایگزین میبودم پس رفتم سراغ راه حل دوم یعنی نصب اپلیکیشن اندروید.\n\nقبلا از genymotion یا نسخه رسمی مجازی ساز اندروید روی virtualbox استفاده کرده بودم و به نظرم سنگین و به درد نخور بودن ، پس با خودم گفتم از اونجایی که با kvm راحت تری یه سرچ کن ببین چیزی وجود داره که به android-x86 رسیدم ، بعد از نصب android-x86 به وسیله virt-manager که GUI عه qemu/kvm عه به این نتیجه رسیدم که خیر به دلیل cpu overload و مصرف منابع خیلی زیاد و کارایی کم این هم به درد ما نخواهد خورد.\n\nتقریبا داشتم از خواندن کتاب مورد علاقه ام روی لپتاپم ناامید میشدم که یادم اومد قبلا سلوشنی رو به اسم shashlik ( بله همون شیشلیک خودمون ) تست کرده بودم که میتونست برنامه های اندروید رو روی گنو/لینوکس اجرا کنه ولی پرفورمنس ضعیفی داشت وقتی به پروژه روی گیتهاب سر زدم سالها بودش که نگهداری نمیشد و کدها قدیمی شده بود\nپس دنبال جایگزینی برای shashlik کشتم که anbox رو پیدا کردم. anbox یه راه حلی هستش که میاد از قابلیت LXC یعنی کانتینر در سطح لینوکس برای ایزوله کردن اپلیکیشن ها تو usernamespace خودش استفاده میکنه و بحث رندرینگ گرافیکی اپلیکیشن ها و پردازش رو به وسیله کرنل لینوکس و بحث شبکه و دسترسی هارو به وسیله دیمنست خودش ردیف میکنه ، خداییش که راه حل خفنیه.\n\nاینجا میخوام مراحل نصب و راه اندازی anbox رو توضیح بدم هرچند همه این ها تو داکیومنت های خود پروژه هم به این آدرس هست ولی خب چون چند تا مرحله کوتاه بیشتر نیست میگم\n\nاگه مثل من ubuntu 1804 هستین و هنوز تصمیم به مهاجرت به ورژن های بالاتر رو نگرفتین باید دوتا از کرنل فیچرهایی که مربوط به اندروید هستن و تو ورژن های بعدی ابونتو به صورت پیشفرض وجود دارن رو نصب کنید\nیعنی ashmem و binder\n\nبه این صورت که terminal خودتون رو روی گنو/لینوکس خودتون باز میکنید و مینویسید\n\n```bash\nsudo apt install software-properties-common\nsudo add-apt-repository ppa:morphis/anbox-support\nsudo apt update\nsudo apt install linux-headers-generic anbox-modules-dkms\n```\n\nو بعدش باید این کرنل ماژول هارو به وسیله modprobe فعال کنید و سیستم رو ربیوت کنید تا لود بشن\n\n```bash\nsudo modprobe ashmem_linux\nsudo modprobe binder_linux\nreboot\n```\n\nمرحله بعد نصب خود anbox هستش که به راحتی توسط snap که به صورت پیشفرض روی توزیع های ابونتو وجود داره انجام میشه\n\n```bash\nsudo snap install --devmode --beta anbox\n```\n\nبرای نصب اپلیکیشن لازمه که قبلش adb tools رو نصب کرده باشید\n\n```bash\nsudo apt install android-tools-adb\n```\n\nحالا apk عه fidibo رو [از این آدرس](https://fidibo.com/) دانلود کنید و اینجوری نصبش کنید\n\n```bash\nadb install ~/Downloads/fidibo.7.8.9.apk\n```\n\nاگه همه چی به خوبی و خوشی پیش رفته باشه حالا میتونید فیدیبو رو با زدن\n\n```bash\nanbox.appmgr\n```\n\nتو لیست اپلیکیشن ها پیدا کنید و اجرا کنید\n\n![اینم نمایی از فول اسکرین برنامه فیدیبو روی گنو/لینوکس ](assets/article_images/fidibo/anbox.png)\n"
    },{
      "id":         "/despair",
      "url":        "/despair.html",
      "image":      "assets/article_images/despair/despair.jpg",
      "title":      "از دست دادن",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2020-06-07 00:00:00 +0000",
      "tags":       [],
      "categories": ["life"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"از دست دادن\"\ndate: 2020-06-07\ncategories: life\nimage: assets/article_images/despair/despair.jpg\n---\n در زمانه سخت و در زمانی که هیچ کورسوی امیدی وجود ندارد این تنها ثبت کردن و نوشتن است که میتواند به یاد بیاورد که هستم که بودم و که خواهم شد\n\nآبان ماه سال ۱۳۹۸  فاجعه را به چشمان خودم دیدم دیدم چگونه هرآنچه سرشت مارا به یکدیگر متصل میکرد از هم گسست و در دی ماه همان سال مرگ آرزو را دیدم\nچه بسیار اشک های ریخته شده در خلوت خودم به یاد پونه و آرش و تمام آن بی نام نشان های پاپتی که نصیبشان از همین زندگی کوتاه چیزی جر گلوله ای در میان جمجه نبود\nحال تیرماه ۱۳۹۹ است بعد از آوار غم و خشمی که سینه ام را میسوزاند و سوگواری و ترس هستی به من نهیب میزند ما که هستیم ؟ انسان بودن یعنی چه ؟\n\nآنگاه که نه جامعه ای باقی مانده نه آرمانی و نه آرزویی\nپرچم های افراشته بر روی جسد بینوایان\nدر وضعیت بی معنایی مطلق جایی که کورسوی امیدی نیز نمی‌تابد\nروزمره کم سو کم رمق و مردنی است\nشاید اگر روزهای به نسبت خوش‌تری را به چشم ندیده بودیم اینگونه این زوال به چشمانمان زشت و تیره نمی‌نمود\nاما دیده ایم و درد همین ترازویی است که در ذهنمان آنچه داریم و آنچه لیاقت داشتن آن را داریم را  به ما نهیب میزند.\n\nدرمورد خودم اما شبیه به زباله گرد هایی شده ام که به دنبال ته مانده غذا تا کمر به درون سطل زباله ها خم میشوند بلکه روزی خود را آنجا یافت کنند\nاخبار را ، تحلیل ها را ، کتاب ها را با چشمانی حریص و گرسنه میخوانم تا در میان آن خطوط مشکی و ممتد کورسویی از امید برای آنچه به آن عشق میورزم یعنی وطن و خانواده پیدا کنم دریغا که ته مانده غذا کفاف گرسنگی من را نمیدهد.\n\n با خودم تکرار میکنم:\n\n«همه چی درست میشه نگران نباش»\n\n «این تجربه ها سخت به دست اومده مطمئن باش وضع برای همیشه اینجوری نمیمونه»\n\n «میدونی حافظ میگه دائما یکسان نباشدحال دوران غم مخور»\n\n«تو این مسیر تمدنی که اومدیم جلو دیگه نمیشه به عقب برگشت شاید ما روزای خوشی رو تجربه نکردیم  ولی آینده وطنمون ایران قشنگه نسل های آینده آزادی رو تجربه میکنن و دیگه مردم کشورم برای یه زندگی خوب مجبور به ترک وطن نیستن مجبور به آواره شدن برای چیزای بدیهی که میتونستن تو کشور خودشون داشته باشن نمیشن»\n"
    },{
      "id":         "/invasion",
      "url":        "/invasion.html",
      "image":      "assets/article_images/invasion/invasion.jpg",
      "title":      "هجوم",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2018-02-22 00:00:00 +0000",
      "tags":       [],
      "categories": ["cinema"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"هجوم\"\ndate: 2018-02-22\ncategories: cinema\nimage: assets/article_images/invasion/invasion.jpg\n---\n\n\nپارسال با فیلم اژدها وارد میشود مانی حقیقی تعجب کردم که سینمای ایران هم میتونه خارج از چارچوب های همیشگی خودش عمیق تر یا ساختارشکنانه تر فکر کنه، ماهی و گربه هم بود ، ولی داستان ماهی و گربه جذابیت چندانی برای من نداشت حداقل باعث نمیشد که میخکوب پای فیلم بشینم و تا اخر چرخه هارو دنبال کنم چون تکه های مختلف و بکگراند های مختلف آدم ها برای من تو ماهی و گربه یه روایت جذاب رو برای من ایجاد نمیکرد ولی اژدها وارد میشود سوژه منسجم داشت پر از لایه های مخفی که نیاز به تفکر داشت و البته جادوی سینما و خارج شدنش از محیط شهری تهران.\n  تکرار فیلم های اجتماعی که این چند ساله انگار سینمای ما اقبال خیلی خوبی بهش نشون داده و تبدیل شده به ساختن فیلم های کم هزینه بفروش اعصاب خوردکن نفس من تماشاگری که دنبال سوژه جدید هستم رو گرفته. من سینما و ادبیات ژانری میپسندم ( قرار نیست محصولات فرهنگی تنها و تنها برای من ساخته بشه ولی به شخصه آثار فانتزی تولید شده دهه ۷۰ و اوایل دهه ۸۰ رو به مراتب با کیفیت تر از تولیدات الان میدونم که شاید سالها دوباره طول بکشه تا یه اثر پساآخرالزمانی مثل هجوم ساخته بشه).\nدست گذاشتن رو فیلم پساآخرلزمانی که نبرد آرماگدون و روایت مذهبی رسمی رو نشون نمیده حداقل تو ایران کار خطرناکی هستش، تصور کن فیلمی رو هم میبینی که اخلاقیات غالب جامعه رو نداره ( مفهوم قتل و ساده انگاریش توسط تمام افرادی که دخل فیلم هستن ، عشق یک پسر به همجنس خودش ، ول کردن خواهر زن بازپرس توسط شوهرش) همه این ها باعث میشه برای من تا اینجای کار فیلم شهرام مکری یه اثر متفاوت برای دیدن و تجربه سبک مورد علاقه ام تو سینمای ایران باشه، تو ذهن من دلیل تاریکی جهان نه مسائل نمادین هستش که مکری شاید خواسته القا بکنه نه مرز بین تاریکی و خارجش من تاریکی رو نتیجه تخریب محیط زیست توسط انسان میدونم و مرزی که بین فساد ایجاد شده و خارجش رو بی معنی میدونم چون نهایتا تمام دنیا به دلیل تخریب محیط زیست از بین میره ( تو یکی از دیالوک ها سامان میگه که قبلا خارج از حصار عن بود داخل گه ولی حالا فرقی ندارن )  و مکری این اجازه رو میده که من خارج از فیلم تخیلم رو بال و پر بدم و فکر کنم چه دلیلی باعث تاریکی شد ( البته از محدودیت های تکنولوژيکی سینمای ایران و بودجه محدود هم نمیشه گذشت ولی این هنر کارگردان هستش که چجوری میتونه فیلم رو با این محدودیت ها دربیاره).\nداستان فیلم البته پر از مسائلی هست که هیچوقت متوجه نمیشید چرا اتفاق افتادن یا چجوری تموم میشن ،  به همین دلیل من ژانر این فیلم مکری رو یه مجیکال رئالیسم پساآخرالزمانی میدونم هردوتا ژانر مورد علاقه من هستن و به هرکسی که ادبیات رو جدی دنبال میکنه دیدن فیلم رو پیشنهاد میکنم\n\n"
    },{
      "id":         "/vagrant",
      "url":        "/vagrant.html",
      "image":      "assets/article_images/vagrant/vagrant.png",
      "title":      "راه انداختن vagrant در سه سوت",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2018-02-17 00:00:00 +0000",
      "tags":       [],
      "categories": ["featured"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"راه انداختن vagrant در سه سوت\"\ndate: 2018-02-17\ncategories: featured\nimage: assets/article_images/vagrant/vagrant.png\n\n---\nبیاین برگردیم به ده سال قبل نه خبری از داکر بود نه معماری پردازنده ها جوری بود که بشه رو مجازی سازی مانور زیادی داد و مجازی سازی تو استفاده از vmware و virtualbox و kvm  تعریف میشد تازه اگر kvm رو فاکتور نگیریم که تا مدت ها اون هم مهجور بود .\n با اینکه هنوز مجازی سازی سنتی low level استفاده زیادی داره ولی سلوشن های کانتینر مثل lxc و lxd و docker خیلی پر طرفدار شده. شاید از خودتون بپرسین من چرا باید از vagrant استفاده کنم درحالی که داکر مدرن تر و کلی اپشن بیشتر میده و معماریش هم میکروسرویس و مدیریت منابع به آسونی انجام میشه ماونت پوینتم میتونه به اشتراک گذاری بشه و آپشن های خفن تر نتورکینگ داره .\n جواب رو میشه تو سه بخش خلاصه کرد .\n۱ -اساسا معماری کانتینر های داکر به دلیل ایزولیشن و انجام یه تسک هستش ( بعضی ها رعایت نمیکنن کلی سرویس میپاشن تو یه کانتینر و کلی لایه اضافه میکنن که حجم کانتینتر به شدت بالا میبره در نتیجه عملا فرق انچنانی با سرویس های سنتی نداره و یه مجازی سازی شبه سنتی که با داکرماشین مدیریت میشه ) . پس اگر میخواین دیتابیس و وب سرویس و کش سرور و ردیس تون رو یه ماشین مجازی باشه و نه چندین کانتینر بهترین راه استفاده از vagrant .\n2- داکر هنوز راه زیادی برای پشتیبانی از تمام پلتفرم ها داره . میدونیم که اکثر شرکت ها در بخش اینترپرایز یا از ورژن های قدیمی تر کرنل لیونکس استفاده میکنن یا از freebsd که قاعدتا از داکر پیشتبانی نمیکنند\n۳ – قطعا برای سیس ادمین های سنتی تر اداپت شدن با این همه حجم تغییراتی که در چند سال گذشته در زمینه مجازی سازی اتفاق افتاده سخت تره . Vagrant میتونه به سادگی این ترس از تغییر رو از بین ببره ( البته که چیزی جز یه کامندلاین برای مدیریت vm options نیست و ساختار فایل سیستم و    مدریت پردازش به کل با داکر فرق میکنه ولی خیلی بهتر از محیط گرافیکی )\n۴- برای توسعه دهنده هایی که مسلط به داکر ریجستری و داکر کامپوز نیستن فرایند دولوپ رو میتونه سریعتر  و از شلوغ کاری تو سیستم اصلی رو کمتر بکنه . هیچکی نمیخواد که بعد از پایان پروژه کلی پکیج بلااستفاده رو سیستمش داشته باشه\n\nتا اینجای کار یا vagrant به درد شما میخوره یا نمیخوره پس میریم سراغ تعریف vagrant که چی هستش و اپشن هایی که میده چیه و چه جور تو سه سوت سه تا اینستنس  centos 7 به همراه داکرانجین بیاریم بالا بدون درد و خونریزی تو وطن دائم التحریم ایران .\n\nVagrant چیه ؟\nوگرانت  ابزاری که برای ساخت ماشین مجازی و محیط توسعه به کار میره و تمرکزش روی اتوماتیک سازی فرایند ها هستش\n\n چه جوری یه ماشین مجازی رو تو سه سوت با وگرانت بالا بیاریم :\nاول نیاز به نصب وگرانت هستش که به سادگی میتونید از اینجا پکیج مناسب سیستم عامل خودتون رو دانلود کنید . یه دایرکتوری بسازید و واردش بشین\nتو قدم بعدی نیازهستش که یه باکس از پیش ساخته شده وگرانت به عنوان سیستم عامل خودتون انتخاب کنیدبرای مثال من باکس centos 7 رو دانلود کردم  ( این قسمت نیازمند دانلود ایمج سیستم عامل مذکور هستش )\n``` bash\nvagrant init centos/7\n```\nکامند init یه فایل Vagrantfile میسازه که توی اون تمامی تنظیمات ماشین مجازی ذخیره شده\nتو قدم بعدی کافی هستش که vagrant up بزنید تا ایمیج سیستم عامل دانلود بشه و سیستم آپ بشه .\nقدم بعدی vagrant ssh هستش که وارد سیستم بشین و پکیج های مورد علاقتون رو نصب کنید یا سیستم عامل کانفیگ کنید . توجه کنید یوزر vagrant دارای دسترسی sudoers هست\nدر آخر پس از پایان کار vagrant destroy که باعث میشه ایمیج به همراه متعلقاتش به فنا بره\nبرای دیدن اینکه چه ماشین مجازی های روی vagrant در حال اجرا هستن میتونید از کامند vagrant global-status  استفاده کنید .\n\nسناریو هایی هم البته وجود داره که بخواین از تنظیمات یا اتومیشن  خودتون استفاده کنید ورگنت از پلاگین های مختلف هم پشتیبانی میکنه برای مثال در اکثر پروژه هایی که مورد تحریم واقع شدیم باید از پراکسی برای دور زدن تحریم ها استفاده کنیم که پلاگین vagrant-proxyconf به صورت اتوماتیک تنظیمات پکیج منیجر و اکثر پکیج های پرکاربرد مثل docker رو تغییر ماده تا ترافیک پشت پراکسی منتقل بشه\n``` bash\nvagrant plugin install vagrant-proxyconf\n#in vagrant file\nconfig.proxy.http     = \"http://yourproxy:8080\"\nconfig.proxy.https    = \"http://yourproxy:8080\"\nconfig.proxy.no_proxy = \"localhost,127.0.0.1\"\n```\n\n\n مورد دیگه ای که درمورد وگرنت هست این هستش که میتونید به ماشین مجازی خودتون public یا private ایپی بدین . به این صورت که اگر پابلیک باشه تو اینترنت یا شبکه لوکالتون قابل دسترس هستش بسته به ip که میدین . دو مثال برای شبکه پابلیک و پرایوت میزنم\n\nپرایوت :\nزمانی که میخواین با dhcp به هرکدوم از هاست های vagrant خودتون ایپی بدین که لوکال ماشین مجازی باشه . یا برای تست میخواین تعداد زیادی ماشین مجازی بیارین بالا کافیه چند تا دایرکتوری بسازین تنظیمات رو روی dhcp بزارین توVagrantfile و آپ کنید\n``` bash\nVagrant.configure(\"2\") do |config|\n  config.vm.network \"private_network\", type: \"dhcp\"\nend\n```\nپابلیک :\nفرض میگیریم سابنت شبکه شما 192.168.10.0 هستش برای دیده شدن ماشین مجازیتون تو این شبکه کافیه در تنظیمات یه ایپی دستی ست کنید\n```bash\nVagrant.configure(\"2\") do |config|\nconfig.vm.network \"public_network\", ip: \"192.168.10.7\"\n```\nسناریو دیگه اتومیشن هستش تصور کنید حداقل ده تا سرور تستی میخواین راه اندازی کنید که هرکدوم نصب و کانفیگش قطعا زمان بر خواهد بود . چکار میکنید ؟\nخوشبختانه vagrant از  bash script و کلا قابلیت provision پشتیبانی میکنه پس دستتون برای این دست از فعالیت های اتومیشن باز هستش برای مثال میخواین داکر رو روی وگرانت نصب کنید ( virtualization inside virtualization 😂 😂 )\nمثالش اینجور میشه\nتو تنظیمات Vagrantfile اسکریپت رو معرفی میکنید\n``` bash\n config.vm.provision :shell, path: \"../rancher.sh\"\n```\nبعد تو دایرکتوری parent اسکریپت  rancher.sh رو میسازین به این صورت\n``` bash\n#! /bin/bash\nyum update -y\ncurl -fsSL https://get.docker.com/ | sh\nsudo systemctl enable docker.service\nsudo systemctl start docker\n```\n\nبسته به نیاز شما این سناریوها میتونه پیچیده تر باشه.\n اپشن های دیگه ای برای محدود کردن یا مشخص کردن تعداد هسته های cpu و ram و interface هست که در این مقاله جا نمیشد امیدوارم که این مقاله به شما کمک کنه که به سادگی و در سه سوت ماشین مجازی خودتون رو راه اندازی کنید\n\n\n\n"
    },{
      "id":         "/how-to-get-an-it-job",
      "url":        "/how-to-get-an-it-job.html",
      "image":      "assets/article_images/itjob/itjob.png",
      "title":      "چه شغل آی تی به درد من میخوره ؟",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2018-02-01 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"چه شغل آی تی به درد من میخوره ؟\"\ndate: 2018-02-01\ncategories: development\nimage: assets/article_images/itjob/itjob.png\n---\n\nقبلا درمورد [مسیر](http://behroozam.com/the-road-not-taken.html) گفته بودم که چگونه ساخته و منشعب میشن . در مورد مسیر کاری البته موضوع کمی متفاوت هستش و باید دقیق تر صحبت کرد.\nدرمورد صنعت آی تی و شغل هایی که در این زمینه هستش انواع و اقسام زبان های برنامه نویسی و کاربرد های متفاوتشون میشه ساعت ها صحبت کرد پس در ابتدا باید بدونین به چه حوزه ای گرایش دارید و در اون حوزه به چه زبان برنامه نویسی علاقه مند هستین . زبان های برنامه نویسی مدرن اغلب وام گرفته از خانواده C هستن و مفاهیم اغلب ثابت هستن .\nدرمورد این که چه حوزه ای مناسب شما هستش میشه توضیح خلاصه ای درمورد اینکه ترند های صنعت آی تی در حال حاضر چی هستن داد البته هیچ الزام و اجباری نیست که اگر یکی از این حوزه ها رو انتخاب کردید تغییر شغلی ندین و  بقیه شاخه ها رو امتحان نکنید . برای مثال همکاری داشتم که مدت ها شبکه کار میکرد و حتی مقام های کشوری در این زمینه داشت ولی یکباره شغلش رو رها کرد و گرافیست شد.\n\nحوزه های مختلف صنعت ای تی شامل چندین حوزه اصلی میشن :\n\n۱ - حوزه مدیریتی\n\n۲ - حوزه مالی\n\n۳ - حوزه زیرساخت\n\n۴ - حوزه توسعه\n\n۵ - حوزه پشتیبانی\n\n۶ - حوزه امنیت اطلاعات\n\nدر دومورد اول تخصصی ندارم و نمیتونم راهنمایی مناسبی رو به شما بدم در چهار مورد بعدی میشه مفصل تر صحبت کرد.\n\n۳ -۱  حوزه زیرساخت: شامل مباحثی مثل شبکه و فناوری اطلاعات و ارتباطات میشه. برای دوستانی که علاقه مند هستن در دیتاسنتر ها یا به زبان فارسی مراکزداده کار کنن تسلط بر خطایابی شبکه و مشکلاتی که ممکن هستش به وجود بیاد امر حیاتی هستش البته ترند های این صنعت شامل مباحثی مثل HA و امنیت اطلاعات و IaaS (زیرساخت به شکل سرویس ) یا در تعریف کلی پردازش ابری یا فضای ابری هستش. برای شروع تو این حوزه درک مفاهیم ابتدایی شبکه میتونه به شدت در مراحل بعدی کمک کننده باشه . برای دوستانی که به این مسیر علاقه مند هستند دوره های شبکه سیسکو رو پیشنهاد میدم که تقریبا تمام مسائل این حوزه رو پوشش میده .\n۳ -۲ حوزه دیگه زیرساخت مخابرات هستش مفاهیمی مثل شبکه های سلولی و gsm و سیگنال و پروتکول های روتینگ در حوزه بکبون میشه . متاسفانه دوره هایی در این سطح فقط توسط شرکت های چند ملیتی و توسط شرکت مخابرات و وندور ها برگزار میشه و داشتن مدرک مرتبط در زمینه مخابرات الزامی هستش.\n\nبقیه شغل هایی که با زیرساخت در تعامل مستقیم هستن میشه به شرکت های ٰVAS و CDN و VOD اشاره کرد\n\n\n۴ - حوزه توسعه به شدت وسیع خودش و به چندین بخش تقسیم میشه که هر کدوم از اون بخش ها هم خودشون به چندین بخش.\n\n+ توسعه نرم افزار\n\n+ توسعه سخت افزار\n\n+ طراحی گرافیک\n\n+ طراحی رابط کاربری و تجربه کاربری\n\nتوسعه نرم افزار خودش به چندین بخش زیر تقسیم میشه:\n\n+ طراحی و توسعه نرم افزار های مبتنی بر دسکتاپ\n\n+ طراحی و توسعه نرم افزار های مبتنی بر وب\n\n+ طراحی و توسعه نرم افزارهای مبتنی بر سرور\n\n\n+ طراحی و توسعه سیستم های اطلاعاتی\n\n+ طراحی و توسعه بازی های کامپیوتری\n\n+ تحلیل داده و بیگ دیتا ( دیتاساینس یا علم داده )\n\n۴-۱-۱ طراحی و توسعه نرم افزار های مبتنی بر دسکتاپ\n  با بالاتر رفتن سرعت اینترنت و هزینه پایینی که کاربران برای اشتراک ماهیانه در سرویس های انلاین پرداخت میکنن رونق گذشته رو نداره و جز در طراحی نرم افزار های سیستم اطلاعاتی مثل حسابداری و سیستم های مدیریت اطلاعات بیمارستانی و کارتابل شرکت ها استفاده چندانی نداره و نمیشه آینده پرباری رو براش متصور بود ولی کماکان تقاضا برای c# دولوپر زیاد هستش و اگر به این زبان و محیط توسعه ویژوال استودیو علاقه مند هستین حتما کاری مناسب خودتون در بازار پیدا میکنید.\n\n۴-۱-۲ طراحی و توسعه مبتنی بر وب\n\nچند سال قبل با توسعه شبکه های اجتماعی و نرم افزارهای مبتنی در گوشی های هوشمند از مرگ وب گفتند البته شوخی جالبی بود .  وب به سرعت در حال بهبود و گسترش و مدرن سازی معماری خودش هست . چه در طراحی چه در معماری زیرساخت و چه در در برنامه نویسی هر ساله تغییرات شگرفی اتفاق می افتند که سرویس ها رو برای تعداد بیشتری درخواست و دلنشین تر برای کاربران میکنند .\n\nطراحی و توسعه وب خودش به سه بخش تقسیم میشه\n\n+ front-end development\n\n+ back-end development\n\n+ DevOps\n\n تعداد  تکنولوژی هایی که در زمینه وب برای فول استک بودن در هر کدوم از زمینه ها نیازه به شدت بالا پس من از تصاویری که دوست عزیزمون [kamranahmedse](https://github.com/kamranahmedse/developer-roadmap)در گیتهاب خودش گذاشته استفاده میکنم تا بگم که از کجا شروع کنید و به کجا برسید\n\nالبته لازمه تمام این ها تسلط بر زبان تخصصی کامپیوتر یعنی انگلیسی هستش اگر در این زمینه وارد نیستین سعی کنید تنها داکیومنت های انگلیسی بخونید و با man page ها بیشتر سروکله بزنید.\n\nقبل از همه چی مسائل پایه ای هستن که لازمه در تمامی این تخصص ها بدونین که شامل http و version control system ها کامند های بسیک ترمینال میشه ( توصیه میکنم اگر از سیستم عامل ویندوز برای توسعه استفاده میکنید کنار بزارین و به سمت یکی از توزیع های گنو لینوکس بیاین برای شروع میتونین از این داکیومنت فرود استفاده کنید [لینوکس برای تازه کار ها](http://fzero.rubi.gd/plf/) )\n![basic](assets/article_images/itjob/start.png)\nدرمورد انتخاب اینکه کدوم یکی از مسیر هارو میرین میتونین تجربه گرا باشین و هرکدوم رو تست کنید تا ببینید کدوم یکی رو بیشتر دوست دارین یا اینکه از روحیات خودتون خبر دارین و میدونید کدوم یکی بیشتر به دردتون میخوره .\n\nFront-end developer با لایه نمایش داده سروکار دارن درواقع اطلاعاتی که black-end دولوپر ها تو لایه منطقی و ذخیره اطلاعات به اون ها از طریق api یا سشن میدن رو به کاربر از طریق وب نمایش میدن . کار دیگه front-end developer ها در ایران معمولا در کنار کد زدن طراحی و توسعه رابط کاربری هستش درسته که فرانت اند لزوما نباید این کار رو بکنن ولی آشنایی با ترندهای این صنعت میتونه کمک بزرگی تو کیفیت کارشون داشته باشه . شروع فرانت از نظر فنی شاید زیاد سخت نباشه و واسه دوستانی که تازه میخوان وارد وب بشن ولی تخصص توش قطعا ذوق سلیقه و تلاش زیادی رو میطلبه.\n![front-end](assets/article_images/itjob/front-end.png)\n\nback-end developer\nبا منطق برنامه های تحت وب سروکار دارن ، یه ضرب المثل هست که میگه بکند دولوپر خوب بیکار نمیمونه\n![back-end](assets/article_images/itjob/back-end.png)\n\n\nDevOps\nدرسته دواپس یه کانسپت هستش نه فرد یا شغل ولی فعلا به سیس ادمین هایی که کار اتوماتیک سازی فرایندها و مانتیتورینگ بر اساس متریک و QA رو تو سازمان های ای تی انجام میدن میگن دواپس. راستیتش دواپس طیف زیادی از ابزار ها و دانش هارو شامل میشه . میشه گفت زیرساخت و معماری سیستم و بکند و شبکه و امنیت اطلاعات و خطایابی و درواقع میشه گفت با تمامی سرویس ها و مشکلاتی که سازمان IT ممکنه باهاش روبه رو بشه .\nدواپس شدن قطعا نسبت به دو مورد دیگه بکند و فرانت اند زمان بیشتری رو برای یادگیری میطلبه و شاید چندین سال طول بکشه تا کسی به تمام مفاهیم این حوزه مسلط بشه ولی جذابیت ها و چالش ها و سطوح دسترسی بالاتری داره.\n![DevOps](assets/article_images/itjob/devops.png)\n\n۴-۱-۳ طراحی و توسعه نرم افزار های مبتنی بر سرور\n\nطراحی بکند زیرساخت پیام رسان های موبایلی تبلیغات اینترنتی و پوش نوتیفیکیشن و  به صورت کلی سرویس هایی به غیر از وب که لود به شدت بالایی دارن نیازمند درک عمیقی از پرفورمنس سیستم و جلوگیری از مواردی مثل رم لیک . درک پروتکول های اختصاصی که هرکدوم از این سرویس ها استفاده میکنن و البته توجه به این نکته که در این سطح سلوشن های اینترپرایز وجود دارن که ممکن هستش اوپن سورس یا نرم افزار آزاد  نباشن و برنامه نویس مجبور بشه از پایه سرویس رو بنویسه.\n\n۴-۱-۴ طراحی و توسعه سیستم های اطلاعاتی\n\nبازار ایران پر هستش از شرکت های قدیمی که برای مدت زیادی هستش که سیستم های مدیریت اطلاعات مالی و بیمارستانی و شرکت ها و دانشگاه ها تولید میکنند . نوشتن و برنامه نویسی سیستم های اطلاعاتی نیازمند تفکر و شناخت دقیق از سیستم ها هستش و صرفا کد زدن نیست. پس اگر تحلیل بالایی دارین و علاقه مند به کار تیمی هستید تحلیل و توسعه سیستم برای شما ساخته شده .\nدرسته که بازار اغلب به سمت C# گرایش داره ولی زبان برنامه نویسی در این حوزه چندان مهم نیست مهم درک و فهم درست از سیستم هستش که توصیه من این که کتاب های مهندسی نرم افزار در این حوزه خونده بشه .\nبرای مثال خوندن [کتاب روشهای نوین تحلیل و طراحی سیستم ها](http://niaze-danesh.com/%D8%B1%D9%88%D8%B4-%D9%87%D8%A7%DB%8C-%D9%86%D9%88%DB%8C%D9%86-%D8%AA%D8%AD%D9%84%DB%8C%D9%84-%D9%88-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D9%87%D8%A7)  پروفسور محمد حسین فاضل زرندی\nرو به همه علاقمندان این حوزه توصیه میکنم.\n آشنایی با متدهای مهندسی نرم افزار مثل اجایل و متد های تحلیل نرم افزار مثل ERD و سنتی تر مثل DFD خیلی میتونه تو پیدا کردن شغل مناسب در این زمینه به شما کمک کنه .\n\n۴-۱-۵ طراحی و توسعه بازی های کامپیوتری\nراستش این مبحث خیلی تخصصی هستش  و من دانشی در این زمینه ندارم خوشحال میشم دوستان کمک کنن و این سکشن هم برای ورود راحت تر دوستان به این حوزه آماده بشه\n\n\n\n۴-۱-۶ تحلیل داده و بیگ دیتا ( دیتاساینس یا علم داده )\nراستش این مبحث خیلی تخصصی هستش  و من دانشی در این زمینه ندارم خوشحال میشم دوستان کمک کنن و این سکشن هم برای ورود راحت تر دوستان به این حوزه آماده بشه\n۴-۳ گرافیک و طراحی و توسعه رابط کاربری\nراستش این مبحث خیلی تخصصی هستش  و من دانشی در این زمینه ندارم خوشحال میشم دوستان کمک کنن و این سکشن هم برای ورود راحت تر دوستان به این حوزه آماده بشه\n\n۴-۴  توسعه سخت افزار\nدر زمینه سخت افزار با رشد توسعه بردهای توسعه و معماری SoC و اینترنت اشیا آینده بسیار روشنی جلوی متخصص های این زمینه هستش. برای یادگیری و مسلط شدن در این حوزه توصیه من این هستش که پروژه هایی که روی بردهای آماده مثل raspberry pi اجرا شده توی خونه و به وسیله سنسور های مختلف أزمایش کنید. شرکت ها هم در ایران به این سمت رفتن و از فاز سنتی کابل سریال خارج شدن و بستر اینترنت و شبکه موبایل آماده هستش.\n\n\n۵ - حوزه پشتیبانی\nحوزه پشتیبانی شامل دو قسمت میشه:\n+ front office\n\n+ back office\n\nدر قسمت front office اوپراتورها به تماس تلفنی مشتری پاسخ میدن و در صورت وجود باگ یا مشکل فنی به back office انتقال میدن تا در لحظه مشکل برطرف بشه اگر مشکل مرتبط با operation باشه بچه های پشتیبانی وظیفه این رو دارن تا در سریع ترین شکل ممکن موضوع رو برطرف کنن و اغلب مجبور به وصله پینه زدن باگ هایی میشن که تیم دولوپمنت ایجاد میکنه . پس توی سازمان هایی که قرارداد های SLA سفت و سخت دارن تیم پشتیبانی نقش حیاتی داره .\nتو ایران متاسفانه به پشتیبانی به شکل درستی نگاه نمیشه و اغلب شرکت ها یا این واحد رو ندارن یا به شکل کار موقتی بهش نگاه میشه درحالی که پشتیبانی یکی از مهم ترین بخش های سازمان که میتونه فیدبک مشتریان و ایده های جالبی رو به سازمان تزریق کنه .\nتوصیه نمیکنم حداقل در ایران کسی به سمت پشتیبانی فنی بره\n\n۶ - حوزه امنیت اطلاعات\nکسی که امنیت اطلاعات کار میکنه اصولا نیازی به خوندن این مطب نداشته و به این بخش رسیده و کسی هم که میخواد کار بکنه باید متوجه باشه که امنیت اطلاعات یک شبه به وجود نمیاد درمورد تمامی موراد بالا یه مهندس امنیت اطلاعات علاوه بر درک صحیح از پرتکول های ارتباطی باید سطوح دسترسی و دردسترس بودن و یکپارچگی داده و جلوگیری از افزونگی  رو مد نظر خودش داشته باشه . یه مهندس امنیت در قدم اول یه محقق خوبه . روزی نیست که نفوذپذیری جدید کشف نشه یا امنیت یه پروتکول زیر سوال نره پس باید به روز باشه و مطالعات مستمر داشته باشه . کانفیگ فایروال و ips/ids مهندس امنیت نمیسازه حتی داشتن مدرک CEH هم نمیتونه باعث بشه یه فرد مهندس امنیت باشه .\nیادگیری  امنیت دیتاسنتر فیزیکی و غیرفیزیکی انواع روش های پن تست و نفوذپذیری. آشنایی با رمزنگاری میتونه شروع خوبی برای امنیت باشه ولی توجه کنید که این فیلد هیچوقت تموم نمیشه و همیشه دست بالای دست توش وجود داره\n"
    },{
      "id":         "/wishes",
      "url":        "/wishes.html",
      "image":      "assets/article_images/wishes/wishes.jpg",
      "title":      "آرزوها",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2018-01-17 00:00:00 +0000",
      "tags":       [],
      "categories": ["life"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"آرزوها\"\ndate: 2018-01-17\ncategories: life\nimage: assets/article_images/wishes/wishes.jpg\n---\n\nدرمورد به زبان آوردن آرزو ها دوتا دیدگاه وجود داره یه عده میگن که گفتن آرزوها باعث میشه که تشویق بشیم و بیشتر به سمتشون بریم یه عده هم البته میگن که به زبان آوردن خواسته ها باعث میشه که مغز احساس کنه اون هارو به دست اورده و بیخیال بشه .\n\nمن ولی دل رو به دریا میزنم و امیدوارم حداقل درمورد من موضوع دوم صادق نباشه ، جوون تر که بودم با خوندن خاطرات سفر با موتورسیکلت چگوارا عاشق سفر با موتورسیکلت شدم ولی هیچوقت فرصتش پیش نیومد یا به خاطر اینکه موتورسیکلت اصولا وسیله نقلیه پرخطری هست این آرزو برآورده نش. ولی بعضی شب ها که تا دیروقت سر کار هستم و به خونه میام وقتی میخوام سرم رو روی بالشت بزارم خودم رو تصور میکنم تو جاده که درحال رانندگی با موتورسیکلت هستم و حس میکنم قلبم تند تر میزنه.\n\n![تو ایران هارلی دیویدسون پیدا نمیشه من به باجاج اونجر هم راضی ام :} همینقدر قانع](assets/article_images/wishes/bajaj.jpg)\n\nآرزوی دیگه من یه خونه شیک وسط جنگل بود ، بله منم تو نوجوانی کتاب های استفنی میر رو میخوندم و واقعا عاشق خونه خانواده کالن بودم و هستم. من به وسایل مدرن علاقه دارم واقعا خونه های سنتی قدیمی رو نمیپسندم. خونه مورد علاثه من چندین بخش مهم داره مثل موسیقی ، کتاب ، تئاتر.\n موسیقی برام توی دیسک های ونیل و گرامافون تعریف شده شاید هم اگر تجهیزات موسیقی خوبی داشته باشم flac   گوش بدم کی میدونه.\nیه کتابخونه پر از کتاب هایی دوست دارم بخونم از سبک های مختلفی که دوست دارم مثل سایبرپانک استیم پانک اقتصادی سیاسی فانتزی های فانتزی مجیک اند سورد و مجیکال رئالیسم و …. .\nو یه تئاتر خانگی برای مواقعی که دوست دارم بشینم و انیمه ببینم ، درسته تو این فضا آدم باید فیلم های نئونویر ببینه ولی من نمیتونم خودم رو گول بزنم ، انیمه بهترین مدیا و خلاقانه ترین تصویری که بشر خلق کرده ( بشر ژاپتی مورد علاقه من ).\n![لش کردن تو این خونه و لذت بردن از تعطیلات چه صفایی میده](assets/article_images/wishes/cullen-house.jpg)\n\nآرزوهام زیاد بزرگ نیستن احتمالا زودتر از اونچیزی که فکر میکنم بهشون میرسم و هدف والای آنچنانی نیستن خیلی زمینی هستن . قرار هم نیست سازنده خفن ترین چیز یا مالک فلان چیز باشم . در نهایت فکر میکنم هدف اصلیم لذت بردن از زمان کوتاهی که در اختیار دارم.\n\n\n"
    },{
      "id":         "/nocturnes",
      "url":        "/nocturnes.html",
      "image":      "assets/article_images/nocturnes/nocturnes.jpg",
      "title":      "شبانه ها",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2017-12-25 00:00:00 +0000",
      "tags":       [],
      "categories": ["philosophy"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"شبانه ها\"\ndate: 2017-12-25\ncategories: philosophy\nimage: assets/article_images/nocturnes/nocturnes.jpg\n---\n\n\nبه درستی معنای زندگی را نمیدانم. رشک میبرم به انسان هایی که هنوز بعد معنوی زندگی خود را از دست نداده اند . سال هاست که  مرا به شکل ربات بی احساس میبینند خودم هم دیگر باورم شده است که خارج از این مکانیک کنش و برهم کنش ماده چیزی وجود ندارد. چه چیزی مرا به سمت این مسیر سوق داد کنجکاوی ذاتی بود یا عناد و دشمنی با جریان اصلی نمیدانم . در کودکی همواره به دنبال جواب چیستی هایی که درون ذهنم شکل میگرفت میگشتم . جهان با تمام بزرگیش مررا مات مبهوت میکرد و چه کسی بهتر از پدر و مادر و مربیان و آموزگارانم تا جواب سلسه چرایی های مرا بدهند اما همیشه جواب به بعد موکول شد . حالا ۲۳ ساله هستم نه کودکی خرده پا که بتوان گفت روزگاری بزرگ خواهی شد و خود جواب را پیدا خواهی کرد و نه آنقدر پخته و دنیا دیده که در مقابل هر رویداد و مسئله جوابی در چنته داشته باشم و که میداند جواب و سوال درست کدامند.\nدوست دارم باور کنم پس هر اتفاق اجتماعی اقتصاد نقشی ندارد یا فلسفه و منطق دلیل بافت اجتماعی و ساختار تمدنی ما نیست ، شاعرها و بیوشیمی به وجود آورنده عشق نیستند و اراده و اختیار به معنای واقعی کلمه وجود دارد. اما حقیقت چیزی نیست که بتوانم آن را مخفی کنم یا با سرگرم کردن خود منکر آن شوم ، افیون و می هم دوای درد نمیدانم اما به آینده خوشبین هستم روزگار نه چندان دوری خواهد آمد که انسان از خواب خرگوشی خود بیدار خواهد شد و آنجاست که در جعبه گربه شرودینگر گشوده خواهد شد و نسبیت به تاریخ خواهد پیوست.\n\n چیز هایی هم هست که طبق معمول نمیتوانم بگویم امیدوارم روزی بتوان گفت.\n\nپ.ن: شبانه ها نام کتابی از مجموعه داستان های کوتاه کازو ایشی‌گورو و نام قطعه ای زیبا از شوپن است\n"
    },{
      "id":         "/simulation",
      "url":        "/simulation.html",
      "image":      "assets/article_images/simulation/simulation.jpg",
      "title":      "ذهن درون خمره",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2017-12-02 00:00:00 +0000",
      "tags":       [],
      "categories": ["philosophy"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"ذهن درون خمره\"\ndate: 2017-12-02\ncategories: philosophy\nimage: assets/article_images/simulation/simulation.jpg\n---\n\nادبیات و علوم و مذهب به شدت وابسته به فلسفه هستن یعنی پایه این علوم ابتدا شکل گیری سوالات فلسفی درمورد چگونگی و چرایی وجود بوده ، یکی از مهم ترین مباحث فلسفی درمورد [ذهن](https://en.wikipedia.org/wiki/Philosophy_of_mind \"Philosophy_of_mind\") و واقعیت موضوع چیستی ذهن که در این مورد چند مثال معروف وجود داره که همه زیر شاخه های [شک فلسفی](https://fa.wikipedia.org/wiki/%D8%B4%DA%A9%E2%80%8C%DA%AF%D8%B1%D8%A7%DB%8C%DB%8C) به وجود ، قدیمی ترین این نظریات [مغز درون خمره](https://fa.wikipedia.org/wiki/%D9%85%D8%BA%D8%B2_%D8%AF%D8%B1_%D8%AE%D9%85%D8%B1%D9%87) هستش ، تصور کنید یک دانشمند دیوانه مغز شمارو از بدنتون جدا کرده و درون یک ظرف قرارداده و با مواد شیمیایی سعی داره حس واقعیت رو به شما القا کنه ، درواقع هیچ بدن فیزیکی وجود نداره و هرچه هست در مغز شما اتفاق میفته. نظریات جدید تر مثل جهان هولوگرافیک و نظریه شبیه سازی هم بسیار به مورد قبل شبیه هستن ، البته نظریه [جهان هولوگرافیک](https://fa.wikipedia.org/wiki/%D8%A7%D8%B5%D9%84_%D8%AA%D9%85%D8%A7%D9%85%E2%80%8C%D9%86%DA%AF%D8%A7%D8%B1%DB%8C) بیشتر روی برداشت های مختلف ما انسان ها از حقیقت استوار هستش ، داستان معروف [فیل و شهرکوران](https://fa.wikipedia.org/wiki/%D9%81%DB%8C%D9%84_%D9%88_%DA%A9%D9%88%D8%B1%D8%A7%D9%86) رو به یاد بیارید که در تاریکی هرکس به ظن خودش هرجای فیل رو که دست میزد یه برداشتی داشت درمورد جهان هولوگرافیک هم چون حقیقتی که ما میبینیم درواقع بازتاب یا هولوگرافیک اجسام و واقع هستش ما داریم بازتاب درونی خودمون از حقیقت رو مشاهده میکنیم ، نظریه مدرن تر و نزدیک تر به کار ما مهندسان کامپیوتر که البته در چند سال اخیر خیلی ملموس تر هم شده [نظریه شبیه سازی کامپیوتری](https://en.wikipedia.org/wiki/Simulation_hypothesis) هستش ، معتقدان به این نظریه با توجه به عمر کائنات و قدرت شبیه سازی ماشین های کامپیوتری این رو بیان میکنن که به احتمال زیاد ما حداقل در یک شبیه سازی قرار داریم ، اگر در بهترین حالت در چند شبیه سازی تودرتو نباشیم ، درمورد تودرتو بودن سرور های مجازی رو درنظر بگیرید که اغلب خودشون روی یک مجازی ساز قرار دارن ، اگر طرفدار بازی های سبک تایکون و سیمز و شهرسازی باشین با این مفهوم آشناتر هستین ، این حوزه البته به [ادبیات و فرهنگ عامه](https://en.wikipedia.org/wiki/Simulated_reality_in_fiction) هم راه پیدا کرده تصویر بالا که میبینید قسمتی از سریال [ریک و مورتی](https://en.wikipedia.org/wiki/Rick_and_Morty) هستش که در اون قسمت توسط موجودات فضایی دزدیده شدن و در یک شبیه سازی تودرتو قرار گرفتن تا اسرار دانشمند دیوانه داستان ریک رو برملا کنند . درمورد این که ما در یک شبیه سازی قرارداریم یا نه البته نظرات زیادی وجود داره ‘ [ایلان ماسک](https://en.wikipedia.org/wiki/Elon_Musk) به عنوان یکی از رهبران تکنولوژی جهان اعتقاد داره [یک در بیلیون احتمال داره که ما در یک شبیه سازی نباشیم](https://www.theverge.com/2016/6/2/11837874/elon-musk-says-odds-living-in-simulation) ، درواقع این رو میگه که به احتمال صفر حدی واقعیت و ماده که ما درک رو ازش داریم واقعی هست ، [نیک بوستروم](https://en.wikipedia.org/wiki/Nick_Bostrom) به عنوان یکی از فلاسفه مدرن که در این زمینه تحقیقات زیادی انجام داده در این مورد یک [تریلما](https://en.wikipedia.org/wiki/Trilemma) مطرح میکنه ، تریلما وضعیتی هستش که تو اون بین سه گزینه نامطلوب باید یکی انتخاب بشه یا بین سه گزینه مطلوب گزینه نامحتمل ، تو این تریلما سه گزینه مطرح شده ، اینکه احتمال اینکه انسان های فوق پیشرفته به مرحله بالاتر از توانایی های شبیه سازی دست پیدا کرده باشن نزدیک به صفر هستش ، یا نزدیک به صفر ، یا اینکه احتمال اینکه ما در یک شبیه سازی هستیم نزدیک به یک هستش .\n>> با وجود شواهد و قراین من گزینه سوم رو نزدیک به انچیزی که هست میبینم\n"
    },{
      "id":         "/existence",
      "url":        "/existence.html",
      "image":      "assets/article_images/existence/existence.jpg",
      "title":      "هستی",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2017-11-10 00:00:00 +0000",
      "tags":       [],
      "categories": ["life"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"هستی\"\ndate: 2017-11-10\ncategories: life\nimage: assets/article_images/existence/existence.jpg\n\n---\n>>تا زمانی که به سوال اصلی بشر یعنی چرایی وجود پاسخ نداده باشیم تمام تلاشمان برای پیشرفت تکنولوژی بیهوده است.\n\nدر طول تاریخ مسائلی که حل نشده باقی میمونن به عرصه فلسفی میرن تا در موقع مناسب با پیشرفت علم حل بشن همانند  مسئله ماهیت اجسام و روابط فیزیکی که بعد ها با تئوری ها و ازمایش های علمی اثبات شد . در تاریخ معاصر مهم ترین این مسائل در وحله اول علت وجود انسان یا به عبارت دیگه معنای زندگی هست متاسفانه این موضوع در تاریخ بشر ارتباط مستقیمی با وضع زندگی اقوام و یا اسطوره و وضعیت اقتصادی و فرهنگی داشته در واقع در جوامعی که همواره زندگی ناپایدار بوده میل به نوشخواری و در لحظه زندگی کردن هم وجود داشته و در جوامع مذهبی این دیدگاه با خدایان و بت و … پاسخ داده شده و بعد پس از جنگ جهانی دوم و پوچی که به علت مسائل انسانی و شقاوتی که انسان ها در مقابلع با هم نوع خود نشون دادن با اگزیستانسیالیم دوباره تعریف شد.\nحالا ما در ابتدای راه شناخت ذهن انسان و ساختن سیستم های هوشمندی هستیم که آرام ولی پیوسته در حال رشد هستن و به ما نمایی از آینده متصور میدهند.\nمسئله وجودی انسان ارتباط تنگاتنگی هم با فلسفه ذهن و زبان و آزادی اراده و اختیار و هوش مصنوعی دارد.\nالبته خبرهای خوبی هم به گوش نمیرسد گویا آزادی اراده توهمی بیش نیست {۱} و زبان انسانی با تمام وجود پیچیدگی هایش به دلیل سرعت پایین انتقال و یادگیری در مقابل ماشین حرفی برای گفتن ندارد و به تخمین ۵۰ درصدی در بیست سال اینده الگوریتم های کورتکس مغز هم کشف خواهند شد و ماشین هایی پدید خواهد آمد که به راحتی جایگاه انسان را اشغال خواهند کرد. حال سوال این است ایا علت وجودی بشر تنها بوتلودر بودن ماشین هایی بسیار سریع و بسیار هوشمند تر از خودش است ایا ما باید ساخت خدایان ماشینی را به تاخیر بیندازیم یا اینکه ان ها را در بافت های بیولوژيکی خودمان تلفیق کنیم .\nتا زمانی که به این سوالات پاسخ نداده ایم پیشرفت تکنولوژی نه تنها بیهوده بلکه ترسناک و مخرب خواهد بود .\n\n۱- فلاسفه قرن ۱۹ همانند شوپنهاور و نیچه به ذات وجودی انسان باور داشتند و البته بدون تغییر و می‌شد گفت که ان ها به اختیار به معنای انچه قوه تفکر برای انتخاب هست باور نداشتند در قرن بیستم فلاسفه اگزیستانسیال اراده ادمی را مقدم بر همه چیز پنداشتند یعنی انسان به دنیا می اید سرنوشت خود را رقم میزند و می میرد این جمله تاریخی سارتر که انسان محکوم به ازادی است را به یاد بیاورید ,  حالا گویا دوباره با داغ شدن مباحث ازادی اراده(free will ) در نوروساینس به گذشته و افکار جبرگرا بازمیگردیم , البته از نظر اجتماعی میتواند تاثیرات مثبتی همانند بازتعریف مفهوم جرم و طبقه اجتماعی را داشته باشد , البته در عصری که از آرمان ها به خاطر سود شخصی به راحتی عبور میکنیم برجسته شدن مسائلی از این دست هم ممکن است صرفا پوچ بودن زندگی آدمی را صرفا برجسته نماید\n"
    },{
      "id":         "/how-to-implement-ids-gui",
      "url":        "/how-to-implement-ids-gui.html",
      "image":      "assets/article_images/snort/snort.jpg",
      "title":      "نحوه نصب و راه اندازی مانتیورینگ اسنورت",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2017-05-01 00:00:00 +0000",
      "tags":       [],
      "categories": ["security"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"نحوه نصب و راه اندازی مانتیورینگ اسنورت\"\ndate: 2017-05-01\ncategories: security\nimage: assets/article_images/snort/snort.jpg\n\n\n---\nمعمولاً مدیران سرور ها توجه زیادی به معقوله امنیت دارن ولی پیاده‌سازی سرویسی که بتونه تهدیدات رو شناسایی کنه و قابل یادگیری باشه امر سخت و طاقت فرسایی هستش یکی از ابتدایی ترین معقوله ها در این زمینه تأیید دو مرحله برای SSH و یا محدود کردن IP هایی که دسترسی به ریموت دارند هست ولی دیگر سرویس ها آسیب‌پذیر باقی میمونه .\nدر این زمینه ابزار های Intrusion detection system یا به اختصار ids ها توسعه پیدا کردند که به صورت کلی شامل دو نوع host based یا HIDS و network based یا NIDS تقسیم‌بندی میشن.\nنوع  HOST based تنها برای مدیریت یکی از نود ها یا سیستم‌ها هستش یعنی تحلیل پکت ها و لاگ گیری انجام میشه ولی برای یک سیستم .\nنوع network based روی gateway تعبیه میشه و اقدام به تحلیل پکت ها و سیگنیچر حمله ها میکنه و در صورت حمله از وقوعش جلوگیری یا در صورت خرابکاری به مدیر سیستم اطلاع میده.\nمورد دیگه درمورد ids ها مدل های پیشگیری یا شناسایی خطرات احتمالی است که شامل دو مدل Signature-based و Anomaly-based میشه .\nمدلSignature-based با استفاده از الگوها و روش‌هایی که از حملات شناسایی شده اقدام به آنالیز رفتار سیستم و پکت‌ها میکنه از نقطه قوت های این مدل سرعت بالا منطقی بودن و عدم هشدار های کاذب هستش.\nمدل  Anomaly-based در اصل برای شناسایی حملاتی به وجود اومده که به zero-day attack معروف هستن در این حملات اصولاً از روش‌هایی استفاده میشه که ناشناخته هستند. در این روش رفتار نرمال سیستم برای مدتی مورد ارزیابی قرار میگیره و در صورت رفتاری خارج از عادت‌های سیستم اتفاق افتاد به سیس ادمین هشدار میده . از مشکلات این نوع سیستم‌ها  میتونه هشدارهای کاذب یا پیچیدگی در فهم باشه .\nیکی از ابزار هایی که در این زمینه تبدیل به یک استاندارد شده snort هست که NIDS محسوب میشه که از دو مود  Anomaly-based و Signature-based به خوبی پشتیبانی میکنه .\n\n###مهم: اگر که با شبکه و زیرساخت و سرویس های لینوکسی و قوائد nix و ruby و bundler و ruby on rails  آشنا نیستید این آموزش برای شما طراحی نشده\n\n###نکته: قصد داشتم نحوه نصب و کانفیگ snort رو هم آموزش بدم که دیدم در [این سایت](http://netamooz.net/snort-ids-installation-configuration/) آموزش داده پس به پیاده‌سازی یه وب اینترفیس و سیستم تحلیل لاگ بسنده میکنم . البته که سنترالایز کردن لاگ های snort میتونه حرکت خوبی باشه مثل استفاده از graylog ,elasticsearch ولی استفاده از ابزارهای مانیتورینگ امنیتی در محیط های کوچکتر میتونه مفیدتر باشه .\n\nمن از ابزار snorby برای این موضوع استفاده میکنم\n\nدر قدم اول روبی و gems رو بر روی سیستم نصب میکنیم\n```bash\nsudo apt-get install ruby-full\nor\nsudo yum install ruby ruby-devel\n```\n\nو گیت البته\n```bash\nsudo apt-get install git\nor\nsudo yum install git\n```\nسپس اقدام به clone کردن snorby میکنیم\n```bash\ngit clone https://github.com/Snorby/snorby\n```\n\nمراحل نصب\n```bash\ncd snorby\nbundle install\nbundle exec rake snorby:setup\nrails server -p 8888\n```\n\nتا اینجای کار اگه همه چیز به خوبی و خوشی پیش رفته باشه و در دپندنسی های پکیج های روبی به مشکلی برنخورده باشین ( انتظار میره که بلد باشین پیش نیاز ها رو رفع کنید ) باید بریم سراغ فرستادن لاگ های snort به سمت یکی از دیتابیس های مورد علاقمون که mysql(mariadb) یا postgres هست . متأسفانه از نسخه ۲.۹ به بعد فرستادن لاگ ها از طریق کانفیگ snort غیر فعال شده پس برای این کار نیاز به ابزار دیگه ای به اسم barnyard2 داریم . برای کانفیگ و نصب این ابزار کافیه\n```bash\nsudo autogen.sh\n```\nرو وارد کنیم تا فایل configure ساخته بشه سپس در سویچ های configure این خطوط اضافه\n```bash\n./configure --with-mysql –with-mysql-libraries=/usr/lib64/mysql\n```\n\nالبته توجه کنید که بنا به معماری سیستم شما این آدرس لایبرری میتونه متفاوت باشه که میتونید با\n```bash\nwhereis libmysqlclient\n```\nاین آدرس رو پیدا کنید در صورت حل شدن دپندنسی ها سراغ کانفیگ بریم\nحالا هر کجای سیستم شما که barnyard نصب شده به دنبال کانفیگش میگردیم :)))\nبعد از پیدا کردن کانفیگ توصیه ام این هستش که در پوشه تنظیمات snort کپی بشه که از آشفتگی های بعدی جلوگیری کنه برای مثال\n```bash\nsudo cp /user/local/lib/etc/barnyard2.conf /etc/snort/\n```\n\nحال نوبت اضافه کردن تغییرات به کانفیگ هستش توجه کنید که من از دیتابیس خود snorby جهت ذخیره سازی لاگ های استاندارد snort استفاده میکنم تحت فیلد alert در انتها کانفیگ قرار میدم\n\n```bash\nnano etc/snort/barnyard2\noutput database: alert, mysql, user=root password=???? dbname=snorby host=localhost\n```\n\nحال در صورت اجرایی بودن سرویس snortd میشه به راحتی لاگ های دریافتی رو در دیتابیس درج کرد\n```bash\nsudo /usr/local/bin/barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort\n```\nحال نوبت لاگین کردن به پنل snorby است که به صورت پیشفرض روی پورت ۳۰۰۰  اجرا می‌شود که من به دلیل درگیر بودن این پورت از سویچ -p استفاده میکنم\nنکته مهم : حتماً در صورت تست و نهایی شدن از یک وب سرور جهت اجرا کردن وب اپلیکیشن استفاده کنید\nنام کاربری و رمز پیشفرض به ترتیب : snorby@example.com و snorby هست که توصیه میکنم حتماً تعویض کنید\n\nوارد داشبود شدید مشاهده میکنید که لاگ در حال ذخیره شدن است .\n###برای دوستانی که با سرویس های لاگ منیجمنت و آنالیز آشنایی دارند توصیه میکنم از filebeat جهت ارسال لاگ هابه logstash استفاده کنند .\n"
    },{
      "id":         "/gammu-with-playsms",
      "url":        "/gammu-with-playsms.html",
      "image":      "assets/article_images/gammu/gammu.png",
      "title":      "آموزش راه اندازی درگاه پیام کوتاه",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2017-04-19 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"آموزش راه اندازی درگاه پیام کوتاه\"\ndate: 2017-04-19\ncategories: development\nimage: assets/article_images/gammu/gammu.png\n\n\n---\nشاید صحبت کردن از gsm  و تکنولوژی های نسل دومی تلفن همراه الان با وجود سرویس های مختلف پوش نوتیفیکیشن و پیام رسان های موبایلی مبتنی بر اینترنت و خدمات نسل سوم و چهارم یه جورایی خاطره بازی و منسوخ به نظر برسه ولی باید توجه کرد که با وجود سه بیلیون خط فعال gsm در دنیا و همچنین هزینه پایین پیاده سازی سلوشن های موبایلی میتونه در کسب کار های ما هم خیلی موثر باشه و البته این موضوع فراتر از ارسال مسیج های گروهی و تبلیغاتی هستش.\nمن به عنوان یه sysadmin تنبل این وسط حوصله مانیتورینگ رو ندارم و معمولا هم ایمیل هام رو چک نمیکنم.این تکنولوژی زمانی به کمک من اومد که به وسیله پایپلاین ها و ارسال خطاها به من به صورت اتوماتیک خیلی از کارها سروسامان گرفت البته با ترکیب و اندکی خلاقیت . توجه کنید که اینجا فقط میخوام از پیاده سازی یه smsgateway در سطح  سازمان های کوچک و متوسط بگم منتهی مزیتی که این سلوشن نسبت به شرکت های بزرگ ارائه دهنده خدمات مبتنی بر ارزش داره تست و پیاده سازی سرویس هاتون به سرعت agile برای استارتاپ هایی که نمیخوان هزینه زیادی رو انجام بدن ولی کیفیت براشون مهم هست. کاربرد دیگه ای که این سلوشن داره برای دستگاه های IOT هست که در مناطق دور افتاده برای مثال برای مقاصد محیط زیستی و پژوهشی استفاده میشه که امکان دسترسی به اینترنت مقدور نیست.\nصنعت سلامت همگانی public health هم میتونه به عنوان سامانه های اطلاعاتی برای انواع غربالگری ها و مقاصد پژوهشی از این سلوشن استفاده کنه.\nاین آموزش مناسب توسعه دهنده ها و مدیران سیستم سطح متوسط به بالا هستش\n\n\n##نحوه راه اندازی مودم gsm به همراه رابط کاربری playsms\nبرای راه اندازی playsms  نیازبه یک پایگاه داده mysql  و وب سرور ترجیهاآپاچی نیاز داریم.\nمراحل نصب playsms :\nابتدا بسته فشرده برنامه را از سایت playsms  دریافت میکنیم سپس استخراج و کپی کردن و اقدام به ساخت سیملینک میکنیم\n{% highlight bash %}\ntar  -zxf playsms-1.4.tar.gz -C /usr/local/src\nls -l usr/local/src\ncd usr/local/src/playsms-1.4\n{% endhighlight %}\n\nسپس تنظیمات برنامه را تغییر میدهیم. توجه داشته باشید که پیش نیاز این مرحله نصب و پیکره بندی mysql  میباشد به این منظور میتوان از myphpadmin نیز جهت ایجاد پایگاه داده و کاربران مجاز و تغییر privilege ها نیز استفاده نمود .\n{% highlight bash %}\nNano install.conf.dist\ncp install.conf.dist install.conf\n{% endhighlight %}\nبعد از ثبت تغییرات اقدام به نصب آن میکنیم\n{% highlight bash %}\nsudo ./install-playsms.sh\n{% endhighlight %}\nپس از نصب میتوانید برنامه را به بوت اضافه کنید\n{% highlight bash %}\n Sudo echo /usr/local/bin/playsmsd start > /etc/init.d/rc.local\n{% endhighlight %}\n\n\nسپس ابتدا اقدام به دانلود و نصب gammu  و gammu-smsd  مینمایم .\nبرای نصب gammu  و gammu-smsd  میتوان در صورت موجود بودن از پکیج منیجر استفاده نمود در غیر این صورت اقدام به نصب به صورت دست میکینم .\nدر صورت موجود بودن پکیج منیجر\n<code>\nSudo apt-get install gammu gammu-smsd\n</code>\nسپس یا متصل کردن پورت com یا usb  به دستگاه پرمیشن های دستگاه را ست میکنیم همانند\n{% highlight bash %}\nsudo chmod 777 /dev/ttyUSB0\n{% endhighlight %}\nدایکرکتوری را جهت دریافت SMS  میسازیم\n{% highlight bash %}\nmkdir -p /var/log/gammu /var/spool/gammu/{inbox,outbox,sent,error}\n{% endhighlight %}\n\nسپس به پوشه WWW/DATA دسترسی به نوشتار د پوشه gammu میدهیم\n{% highlight bash %}\nchown www-data:www-data -R /var/spool/gammu/*\n{% endhighlight %}\nحال تنظیمان پیشفرض gammu-smsd را دانلود کرده و تغییر میدهیم و در دایرکتوری /etc  کپی میکنیم\n{% highlight bash %}\nwget -c https://raw.githubusercontent.com/antonraharja/playSMS/master/contrib/gammu/linux/gammu-smsdrc\n cp gammu-smsdrc /etc/\n{% endhighlight %}\nتنطیمات پیشفرض را تغییر میدهیم\n{% highlight bash %}\nnano /etc/gammu-smsdrc\n{% endhighlight %}\nمیتوانید تنظیمات گوشی یا مودم gsm مورد نظر خودتون رو در [اینجا](https://wammu.eu/phones/) پیدا کنید\nدر قسمت device=/dev/ttyUSB0 را وارد کرده و در قسمت connection=at19200  را وارد میکنیم ( جهت خطایابی به مسیر لاگ توجه شود)\nمهم: برای اینکه تنظیمات توسط gammu هم مورد استفاده قرار کید اقدام به ایجاد سافت لینک سیمبولیک مینماییم\n{% highlight bash %}\nln -s /etc/gammu-smsdrc /etc/gammurc\n{% endhighlight %}\n\nبرای راه اندازی سرویس میتوان user=gammu  را به سیستم اضافه کرد ولی برای یکپارچگی بهتر است که در تنظیمات\n{% highlight bash %}\nnano /etc/init.d/gammu-smsd\n{% endhighlight %}\nجای user=gammu  با user=root عوض شود\nبرای شناسایی تنظیمات یکبار سرویس gammu-smsd را ری استارت میکنیم\n{% highlight bash %}\nSudo systemctl restart gammu-smsd.service\n{% endhighlight %}\nسپس برای شناسایی مودم  کامند زیر را وارد میکنیم\n{% highlight bash %}\ngammu -f /var/log/gammulog identify\n{% endhighlight %}\nعملیات پیکره بندی به پایان رسیده حال برای تست gammu دستور زیر را وارد میکنیم\n {% highlight bash %}\ngammu sendsms TEXT 0912*******  -unicode -text \"سلام دنیا\"\n{% endhighlight %}\n\nبه جای 0912 ادرس گیرنده را وارد نمایید\n\n##تنظیمات پنل playsms\nبرای مدیریت پیام های ارسالی و دریافتی وارد پنل میشویم\nادرس پیشفرض 127.0.0.1/playsms و رمز نام کاربری admin  میباشد\nحالا برای تنظیمات شناسایی gammu  توسط playsms به قسمت تنظیمات رفته و در قسمت manage gateway and smsc رویgammu  کلیک کرده و در قسمت spool folder  ادرس /var/spool/gammu را وارد میکنیم  و ذخیره سازی میکنیم . سپس به تنظیمات main رفته و در انجا default smscر را gammu  انتخاب میکنیم .\nپایان\n\n\n\n"
    },{
      "id":         "/my-vision-for-the-future",
      "url":        "/my-vision-for-the-future.html",
      "image":      "assets/article_images/future/future.jpg",
      "title":      "آینده از نگاه من",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2017-03-02 00:00:00 +0000",
      "tags":       [],
      "categories": ["Futurist"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"آینده از نگاه من\"\ndate: 2017-03-2\ncategories: Futurist\nimage: assets/article_images/future/future.jpg\n\n---\nچند روزی میشه که آینده بشر و رباتیک و هوش مصنوعی و واقعیت مجازی و فلسفه وجودی بشر ذهن من رو درگیر خودش کرده. تا اینکه دیشب مهدی بیگی عزیز که خیلی دیر وبلاگشم آپدیت میکنه این [پست وبلاگش](http://beygi.org/%D9%84%D8%B0%D8%AA-%D8%B4%DB%8C%D8%B1%DB%8C%D9%86-%D8%AC%D8%A7%D8%B1%D9%88-%D8%A8%D8%B1%D9%82%DB%8C-%D8%A8%D9%88%D8%AF%D9%86/) برام فرستاد.\nقسمتی از پست وبلاگ مهدی :\n>پس چرا ما اینچنین اصرار بر ادامهٔ حیات داریم؟ آیا در درونمان هنوز نپذیرفته ایم که فراتر از ربات نیستیم و قادر به انجام کاری مافوق چیزی که برای آن برنامه ریزی شده نخواهیم بود؟ و یا عامل دیگری اینچنین ما را مصر کرده بر بقا؟ شاید لذت زنده بودن جواب سوال باشد. یعنی با اینکه میدانیم هیچ کاره ایم در این سلسلهٔ تصمیمات زندگی باز دلخوشیم به زنده بودن. دلخوشیم به لذتی که به واسطهٔ تاثیر انواع مواد شیمیایی پس از در آغوش کشیدن یاری بر مغز روانه می‌شود. دلخوشیم به لذت خوردن به نگاه کردن و به نفس کشیدنی که گویی واقعا مفرح ذات است و با پذیرفتن این حقیقت میتوان توجیه کرد ما مردمانی را که با مشقت زندگی میگذرانیم و چنگ میزنیم به هرچیزی برای یک ثانیه بیشتر زنده بودن که اگر واقعا بپذیریم صوری بودن این خوشی ها را پایان خود را پذیرفته ایم.\n\nجواب من این شعر زیبا از حکیم عمر خیام نیشابوری بود :\n> خیام اگر ز باده مستی خوش باش\nبا ماهرخی اگر نشستی خوش باش\nچون عاقبت کار جهان نیستی است\nانگار که نیستی چو هستی خوش باش\n\nهمه این حرف‌ها از کجا نشأت میگیره ؟ از [تحقیقانی که روی بحث آزادی اراده انجام شده](https://en.wikipedia.org/wiki/Neuroscience_of_free_will). هیچ تصمیم تصادفی وجود نداره ما همه بر اساس محیط و متغییر هایی ثابت تصمیم میگیریم یعنی عملاً مغز قبل از اینکه اراده کنیم کاری رو انجام بدیم تصمیم خودش رو گرفته. برای مثال وقتی میخواهید برای رفع تشنگی لیوانی رو بلند کنید و آب بخورین فکر میکنید این تصمیم رو با آزادی اراده خودتون انجام دادید ولی درواقع مغز شما قبل از اینکه این تصمیم رو گرفته باشین این تصمیم رو گرفته. این جبر عظیم این محدودیت که تحت تأثیر شرایط و ژنتیک به وجود میاد عملاً زندگی رو بدون مفهوم رها میکنه . اگه تأثیر ژنتیک رو ۵۰ درصد و تأثیر محیط رو ۵۰ درصد بقیه بگیریم با توجه به یافته های روانشناسی که عمده شکل‌گیری شخصیت رو از ۲ تا ۶ سالگی میدونه و تثبیتش رو از ۲۱ تا ۲۶ سالگی و تازه بر اساس یافته هایی که روی دوقولوهای همسان و بچه‌های به سرپرستی گرفته شده میشه نتیجه گرفت اراده و اختیار توهمی بیش نیست.\n\nمیریم سر موضوع دوم اینکه رشد سریع علوم کامپیوتر و هوش مصنوعی باعث به وجود آمدن ماشین‌هایی (روبات ها و کامپیوتر)هایی میشه که بر اساس [پیش‌بینی ها](https://3feed.ir/you-will-lose-your-job-to-a-robot/) تا دودهه دیگه ۴۷ درصد مشاغلی رو که انسان‌ها بهشون مشغول کردن رو میگیرن . از شغل‌های ساده مثل کارگر بی مهارت تا مدیریت و حسابداری و … . شاید برنامه نویسان کامپیوتری یه نفس راحت بکشن و با خودشون بگن که ما کسانی هستیم که این سیستم هارو میسازیم و مدیریت میکنیم ولی خبر بد این هست که همین الان هم [سیستم‌هایی](http://www.darpa.mil/program/mining-and-understanding-software-enclaves) تولید شدن که کدنویسی انجام میدن و شاید در آینده نزدیک خیلی خیلی بهتر از انسان‌ها هم کد بزنند. در‌واقع کاری که برنامه نویس ها انجام میدن ترجمه دستور های زبانی و فکری انسان به زبان کامپیوتر هستش حالا اینکه راهنمای خیلی از این زبان‌های کامپیوتری روی اینترنت هستش و جواب اکثر سؤالات هم موجود هست و قطعاً کامپیوتر ها سرعت و دقت و وقت بیشتری برای پیدا کردن این منابع و بهتر کردن توانمندی‌های خودشون دارن.\n.هنرمندها که کارشون رو سرار خلاقیت میدونن با دیدن این نوشته تا الان پوزخندی زدن و احتمالاً فکر میکنن ما در این دنیای تکنولوژیک خودمون غرق هستیم ولی وادی هنر از این رشد عجیب غریب تکنولوژی در امان هستش درحالی که همین سال گذشته ابرکامپیوتر شرکت IBM به اسم watson تریلر سینمایی رو به تنهایی و بدون دخالت انسان برای فیلم morgan ساخت که میتونید اینجا مشاهده کنید :\n<div id=\"14884614106023135\"><script type=\"text/JavaScript\" src=\"https://www.aparat.com/embed/FsXuY?data[rnddiv]=14884614106023135&data[responsive]=yes\"></script></div>\n\nحالا با وجود این همه شواهد که قطعی بودن این آینده رو تضمین میکنه چه اتفاقاتی ممکنه رخ بده از چند منظر به این موضوع نگاه میکنم:\n\n+ سیاسی و اقتصادی: کشور های شمال صنعتی ( آمریکا و اروپا …) انحصار این ماشین‌ها رو در اختیار دارند و در کوتاه مدت با فروششون به کشور های جنوب و جهان سومی سود سرشاری رو کسب میکنن. ولی با وجود سیستم سیاسی و اقتصادی کاپیتالیستی این تنها کمپانی ها هستند که از این سود سرشار بهره‌میبرند و مردم بیکار میشن. دولت ها شروع به گرفتن مالیات های سنگین از کارخانه ها توضیعش بین مردم میکنند. اکثر شغل‌ها از بین رفته و این نسلی که نتونسته خودش رو با تغییرات هماهنگ کنه دچار مشکلات روحی و روانی بزرگی شده . شرکت های داروسازی اقدام به فروش داروهای ضدافسردگی میکنند و پوچی سرتاسر زندگی رو گرفته . طبقه های اجتماعی دستخوش تغییرات بزرگی میشن و شکاف بین طبقات از هر زمانی در طول تاریخ بیشتر خواهد شد  .\nدر بلند مدت این شرکت ها هستن که دولت هارو کنترل میکنن.دموکراسی در لفظ هم حتی معنی نخواهد داشت.از به وجود امدن آشوب ها یا نقاط حساس توسط سیستم‌های هوشمندی که سطح هیجانات رو به وسیله انواع سنسور ها و دوربین ها چک میکنن جلوگیری میشه. پرونده زندگی افراد به صورت کامل توسط دولت ها نگهداری و تجمیع میشه . از پرونده پزشکی تا حساب بانکی و تمام حساب‌های اینترنتی و فعالیت‌های روزمره.\n\n+ اجتماعی: جامعه‌ای وجود نخواهد داشت. سیستم بدون وجود افراد به حیات خودش ادامه میده . مازاد تولید کشور های صنعتی که به دلیل انقلاب تکنولوژیکی اتفاق افتاده صرف جنگ یا پروژه های نظامی میشه.مردم عادی به دلیل بیکاری دنبال سؤال اساسی و بنیادین انسان که در ابتدای نوشته مطرح کرده بودم میرن : فلسفه وجودی انسان چی هستش ؟ خیلی‌ها به پوچی میرسن و خودکشی میکنن. خیلی‌ها غرق در واقعیت مجازی میشن و واقعیت رو فراموش میکنن.\n\nراه حل‌ها چی هستش:\n\n1. سیستم توضیع ثروت و قدرت ناکارمد هستش و باید به سمت سیستم‌های غیرمتمرکز پیش رفت\n\n2. آموزش باید متحول بشه همین الان هم دیر هست . بیاین به مرز های علم نگاه کنیم چند سال طول میکشه که یه دانشجو بهشون برسه و با این سیستم آموزشی منسوخ چقدر از وقتش صرف این موضوع میشه . نکته دوم آینه که ماشین‌ها به سرعت عرصه کشف و بسط علم رو در حوزه های مختلف طی میکنن این وسط فقط رشته‌های میان رشته ای هستن که با تلفیق حوزه های مختلف و با خلاقیت میتونن در مقابل ماشین ارزش آفرین باشن. در بهترین حالت ۳۰ سال زمان لازمه تا فردی به این درجه از مهارت و دانش برسه که بتونه این مرز رو جا به جا کنه . آیا با وجود اون پوچی و سؤال فلسفی بنیادین آدم‌ها راغب به این موضوع هستن ؟ جواب در ابدیت خلاصه میشه\n\n3. چرا ابدیت . چون از ابتدا آرزوی بشریت بوده و در تمامی افسانه‌ها و کهن الگو هاش ریشه داره از افسانه سنگ کیمیا تا پشم زرین و آشیل روئین‌تن و در تمامی مذاهب از زندگی پس از مرگ و بهشت و جهنم. انسان همیشه آرزو داشته جاودانه باشه به دلیل ترس از مرگ و زمان محدود. و به نظر من بیشترین هزینه و تحقیقات در آینده صرف بالابردن طول عمر و کیفیت زندگی خواهد شد.\n\nموضوع سومی که در بحث بهش اشاره شد واقعیت مجازی هستش\n![تصور کنید روزی بشه که همه احساس ما درگیر بازی اسکایریم بشه](assets/article_images/future/skyrim.jpg)\n\nهمین الان بازی‌های نقش آفرینی کامپیوتری وجود دارند که وقت زیادی رو از بازی کننده میگیرند و در‌واقع فرد به جای کاراکتر امتیاز میگیره و از این موضوع لذت میبره . حالا شما به آینده فکر کنید وقتی که تمامی حواس وارد یک جهان مجازی میشه . احساس لامسه درد بویایی و بینایی همه این‌ها شبیه سازی میشه. در‌واقع جهانی بسیار زیبا‌تر و بهتر از جهان واقعی که میشه در نقش‌های مختلف ظاهر شد و بدون محدودیت هر کاری رو انجام داد. آزادی به معنای واقعی کلمه.\nدر قسمتی از انیمه ناروتو شخصیت منفی داستان اوچیها مادارا سعی کرد تکنیکی رو انجام بده که تمام انسان‌ها رو به خواب مصنوعی ببره و در این خواب مصنوعی به امیال و آرزوهاشون جامه‌ی عمل بپوشونه و از این طریق به صلح واقعی دست پیدا کنه.\nدر قسمتی از آینده اجتماعی فناوری به این قضیه اشاره کردم که مردم به خاطر ناکامی‌ها و بیکاری که روبات ها و شرکت های فناوری برای اون ها به ارمغان آورده امکان داره شروع کنن به غرق شدن در واقعیت مجازی که این مسئولیت و مشکلات اخلاقی زیادی رو به وجود میاره.\n\nراه حل چیه : به نظر من قوانین محدود کننده ای باید برای استفاده از دنیاهای مجازی در نظر گرفته بشه و از دسترسی دولت ها به این سیستم‌ها و کنترلشون جلوگیری بشه. برای مثال خودم چندین قانون رو در نظر گرفتم که اینجا بیان میکنم :\n\n+ قانون اول: فرد همواره باید بدونه که در یک دنیای مجازی هست\n+ قانون دوم : آسیب های فیزیکی و ذهنی در بازی نباید روی ذهن و فیزیک بازی کننده تأثیر بزاره\n+ قانون سوم:زمان بودن فرد در واقعیت مجازی نباید طوری باشه که باعث آسیب رسیدن به خودش یا بقیه انسان‌ها یا نسل بشر بشه.\n\nدر انتها خوشحال میشم که نظرات و دیدگاه‌های شما رو هم در این مورد بدونم\n"
    },{
      "id":         "/anime-world",
      "url":        "/anime-world.html",
      "image":      "assets/article_images/anime/anime.jpeg",
      "title":      "پرونده انیمه|قسمت اول:آشنایی با جهان انیمه",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2017-02-23 00:00:00 +0000",
      "tags":       [],
      "categories": ["anime"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"پرونده انیمه|قسمت اول:آشنایی با جهان انیمه\"\ndate: 2017-02-23\ncategories: anime\nimage: assets/article_images/anime/anime.jpeg\n\n---\n<p dir=\"rtl\" align=\"right\"><span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\"></span></span>|<span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">قسمت اول</span></span>:<span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">آشنایی با جهان انیمه</span></span></p>\n<p dir=\"rtl\" align=\"right\"><span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">نوشتن از انیمه مثل نوشتن درباره دنیاهای فانتزی <a href=\"https://fa.wikipedia.org/wiki/%D9%88%D8%A7%D8%B1%DA%A9%D8%B1%D9%81%D8%AA\">وارکرفت</a>، <a href=\"https://fa.wikipedia.org/wiki/%D9%87%D8%B1%DB%8C_%D9%BE%D8%A7%D8%AA%D8%B1\">هری پاتر </a>، <a href=\"https://fa.wikipedia.org/wiki/%D8%A7%D8%B1%D8%A8%D8%A7%D8%A8_%D8%AD%D9%84%D9%82%D9%87%E2%80%8C%D9%87%D8%A7\">ارباب حلقه‌ها</a> سخت هستش آدم درگیر ارجاعات و جزئیات زیادی میشه که گفتنشون ممکن هستش خواننده‌ای که با این سبک آشنا نیست رو گیج و در نهایت دلزده کنه و نگفتنشون هم مطلب رو ناقص و نیمه کاره رها کنه </span></span>. <span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">انیمه وابستگی شدیدی به<a href=\"https://en.wikipedia.org/wiki/Light_novel\"> لایت‌نول</a> و <a href=\"https://fa.wikipedia.org/wiki/%D9%85%D8%A7%D9%86%DA%AF%D8%A7\">مانگا</a> داره به همین دلیل اغلب پیچیدگی هایی رو شامل میشه که از ذهن <a href=\"https://fa.wikipedia.org/wiki/%D9%85%D8%A7%D9%86%DA%AF%D8%A7%DA%A9%D8%A7\">مانگاکا</a> ژاپنی نشأت میگیره</span></span>.</p>\n![یک نمونه مانگای کره ای (مانهوا)](assets/article_images/anime/manhwa.png)\n<p dir=\"rtl\" align=\"right\"><span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">انیمه اگر نگیم مهمترین کالای فرهنگی ژاپن هستش یکی از مهم‌ترین دلایلی هستش که عاشقان فرهنگ ژاپن در ابتدا جذب این فرهنگ شدند </span></span>. <span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">انیمه در‌واقع فرمی از انیمیشن هستش که به معمولاً آثار انیمیشن ژاپنی دوبعدی رو شامل میشه</span></span>. <span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">البته آثار سه بعدی هم که در ژاپن تولید میشه شامل این صنعت سرگرمی در ژاپن میشه ولی عمده محصولات معمولاً دوبعدی هستن </span></span>.</p>\n<p dir=\"rtl\" align=\"right\"><span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">انیمه رو در ایران معمولاً با آثار دهه ۷۰ میلادی مثل <a href=\"https://fa.wikipedia.org/wiki/%D9%87%D8%A7%DB%8C%D8%AF%DB%8C%D8%8C_%D8%AF%D8%AE%D8%AA%D8%B1_%D8%A2%D9%84%D9%BE\">هایدی دختر آلپ</a> و آثار کلاسیک ادبیات که تحت عنوان <a href=\"https://fa.wikipedia.org/wiki/%D8%AA%D8%A6%D8%A7%D8%AA%D8%B1_%D8%B4%D8%A7%D9%87%DA%A9%D8%A7%D8%B1_%D8%AC%D9%87%D8%A7%D9%86\">شاهکارهای ادبیات جهان</a> توسط <a href=\"https://en.wikipedia.org/wiki/Mushi_Production\">استودیو موشی پروداکشن</a> توسط تلوزیون فوجی پخش میشده در ایران میشناسن </span></span>. <span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">اثاری مثل خانواده اندرسون ،باخانمان،<a href=\"https://en.wikipedia.org/wiki/Anne_of_Green_Gables_%281979_TV_series%29\">آنه شرلی</a>،خانواده رابینسون،<a href=\"https://fa.wikipedia.org/wiki/%D9%84%D9%88%D8%B3%DB%8C_%D8%B1%D9%86%DA%AF%DB%8C%D9%86%E2%80%8C%DA%A9%D9%85%D8%A7%D9%86_%D8%AC%D9%86%D9%88%D8%A8\">مهاجران</a>،<a href=\"https://fa.wikipedia.org/wiki/%D8%A8%DA%86%D9%87%E2%80%8C%D9%87%D8%A7%DB%8C_%D8%A2%D9%84%D9%BE\">بچه های آلپ</a>،<a href=\"https://fa.wikipedia.org/wiki/%D9%88%DB%8C%DA%A9%DB%8C_%D9%88%D8%A7%DB%8C%DA%A9%DB%8C%D9%86%DA%AF\">ویکی وایکینگ</a>،و …</span></span>. <span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">حجم بالایی از آثاری که از صدا وسیما در دهه ۶۰ و ۷۰ شمسی به عنوان کارتون پخش شده </span></span>.</p>\n![جمعی از کاراکتر های دلنشین کودکی ما و اغلب انیمه ای](assets/article_images/anime/classic-anime.jpg)\n<p dir=\"rtl\" align=\"right\"><span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">در‌واقع آشنایی جامعه ایرانی با انیمه به مراتب زودتر از غرب اتفاق میفته باید از صدا و سیمای فرهیخته و اوانگارد اون زمان که انتخاب درست و به جایی رو کرده تشکر کرد </span></span>.</p>\n<p dir=\"rtl\" align=\"right\"><span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">در اواخر دهه ۷۰ و اوایل دهه ۸۰ میلادی با وجود رشد تکنولوژیک و پیشرفت سریع صنعت الکترونیکی ژاپن و فضای جنگ سرد و پرطرفدار شدن ژانر ادبیات اپرای فضایی و علمی تخیلی ژانری به وجود اومد به اسم <a href=\"https://fa.wikipedia.org/wiki/%D9%85%DA%A9%D8%A7_%28%D8%B3%D8%A8%DA%A9%29\">مِکا</a> که در ایران و غرب به وسیله تبدیل‌شوندگان به بینندگان معرفی شد از ویژگی‌های این سبک میشه به روبات های غولپیکر آهنی اشاره کرد که توسط انسان یا به وسیله هوش مصنوعی خودشون کنترل میشن </span></span>. <span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">این ژانر هنوز هم در ژاپن پرطرفدار هستش از انیمه های شاخص این سبک میشه <a href=\"https://fa.wikipedia.org/wiki/%DA%A9%D8%AF_%DA%AF%DB%8C%D8%A7%D8%B3\">کدگیاس</a> رو معرفی کرد </span></span>.\n![اپیتموس پرایم و دیالوگ معروفش: اتوبات ها تغییرشکل دهید :)))](assets/article_images/anime/transformers.jpg)\n</p>\n<p dir=\"rtl\" align=\"right\"><span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">دهه هشتاد میلادی رو میشه اوج هنرنمایی <a href=\"https://fa.wikipedia.org/wiki/%D8%A7%D8%B3%D8%AA%D9%88%D8%AF%DB%8C%D9%88_%D8%AC%DB%8C%D8%A8%D9%84%DB%8C\">استودیو جیبلی</a> و استاد هایو میازاکی دونست انیمه هایی که بیشترین تأثیر رو بر آینده صنعت انیمه گذاشتند مثل <a href=\"https://fa.wikipedia.org/wiki/%D9%84%D8%A7%D9%BE%D9%88%D8%AA%D8%A7_%D9%82%D9%84%D8%B9%D9%87%E2%80%8C%D8%A7%DB%8C_%D8%AF%D8%B1_%D8%A2%D8%B3%D9%85%D8%A7%D9%86\">لاپوتا قلعه‌ای در آسمان</a>،<a href=\"https://fa.wikipedia.org/wiki/%D9%85%D8%AF%D9%81%D9%86_%DA%A9%D8%B1%D9%85%E2%80%8C%D9%87%D8%A7%DB%8C_%D8%B4%D8%A8%E2%80%8C%D8%AA%D8%A7%D8%A8\">مزار کرم‌های شب‌تاب</a>،<a href=\"https://fa.wikipedia.org/wiki/%D8%B3%D8%B1%D9%88%DB%8C%D8%B3_%D8%AA%D8%AD%D9%88%DB%8C%D9%84_%DA%A9%DB%8C%DA%A9%DB%8C\">خدمات تحویل کیکی</a> و اثر تحسین شده <a href=\"https://fa.wikipedia.org/wiki/%D9%87%D9%85%D8%B3%D8%A7%DB%8C%D9%87_%D9%85%D9%86_%D8%AA%D9%88%D8%AA%D9%88%D8%B1%D9%88\">همسایه من توتورو</a></span></span>.</p>\n<p dir=\"rtl\" align=\"right\"><span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">از ویژگی‌های انیمه های دهه ۸۰ استودیو جیبلی میشه جذب همزمان مخاطب کم سن و سال و بزرگسال رو اسم برد</span></span>.</p>\n![نمایه ای از آثار پرطرفدار استودیو جیبلی](assets/article_images/anime/ghibli.jpg)\n<p dir=\"rtl\" align=\"right\"><span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">مهم‌ترین انیمیشنی که کاملاً حال و هوای سایبرپانک و پادآرمان‌شهری دهه ۸۰ ژاپن رو میتونه نشون بده انیمه <a href=\"https://en.wikipedia.org/wiki/Akira_%281988_film%29\">آکیرا</a> یکی از پرخرج ترین و بهترین انیمه های دوبعدی که وسیله دست نقاشی شده هستش. البته از نقش خرده فرهنگ موتورسواری <a href=\"https://en.wikipedia.org/wiki/B%C5%8Ds%C5%8Dzoku\">بوسوزوکو</a> در ژاپن هم که در دهه ۸۰ طرفداران خاص خودش رو داشت نمیشه غافل بود . </span></span></p>\n![پوستر فیلم اکیرا](assets/article_images/anime/akira.jpg)\n<p dir=\"rtl\" align=\"right\"><span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">و اما دهه نود و اوج گیری محبوبیت انیمه های ژاپنی و محبوب شدن ژانر هنرهای رزمی پخش سراسری انیمه در دنیا با <a href=\"https://fa.wikipedia.org/wiki/%D8%AF%DB%8C%D8%AC%DB%8C%D9%85%D9%88%D9%86\">دیجیمون</a> و<a href=\"https://en.wikipedia.org/wiki/Dragon_Ball_Z\"> دراگون‌بال زی</a> و <a href=\"https://fa.wikipedia.org/wiki/%D8%B3%DB%8C%D9%84%D9%88%D8%B1_%D9%85%D9%88%D9%86\">سیلورمون</a> باعث شکل‌گیری طرفداران سرسخت انیمه در دنیا میشه </span></span>. <span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">دهه نود اونقدر پربار هست که ترجیح میدم در مقاله کامل تری بهش بپردازم، همین بس که انیمه <a href=\"https://fa.wikipedia.org/wiki/%D8%A8%D8%B1%D8%B2%D8%B1%DA%A9\">برسرک</a> یکی از شاهکارهای انیمه محصول دهه ۹۰ میلادی هستش </span></span>.</p>\n![انیمه های خاطره انگیز برای متولدین دهه ۶۰ و ۷۰. درسته ؟](assets/article_images/anime/shonen.jpg)\n<p dir=\"rtl\" align=\"right\"><span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">قرن ۲۱ اما با رشد تکنولوژیکی صنعت کامپیوتر انیمه هم از این قافله عقب نمیمونه و اولین انیمه به اسم <a href=\"https://en.wikipedia.org/wiki/A.LI.CE\">آلیس</a> کاملاً با گرافیک کامپیوتری ساخته شده خلق میشه</span></span>. <span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">از دهه ابتدایی قرن ۲۱ در انیمه میشه به عنوان اوج‌گیری خرده‌فرهنگ <a href=\"https://fa.wikipedia.org/wiki/%D8%A7%D9%88%D8%AA%D8%A7%DA%A9%D9%88\">اوتاکو</a> اسم برد که به تفصیل در مقاله دیگری بهش پرداخته میشه</span></span>. <span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">اغلب آثار پرمخاطب و بلند دهه اول مثل <a href=\"https://fa.wikipedia.org/wiki/%D8%A8%D9%84%DB%8C%DA%86_%28%D9%85%D8%A7%D9%86%DA%AF%D8%A7%29\">بلیچ</a>،<a href=\"https://fa.wikipedia.org/wiki/%D9%86%D8%A7%D8%B1%D9%88%D8%AA%D9%88\">ناروتو</a>،<a href=\"https://fa.wikipedia.org/wiki/%D9%81%D8%B1%DB%8C_%D8%AA%DB%8C%D9%84\">فیری‌تیل</a>،… نسخه انیمه ای از مانگاهای پرطرفدار شونن رو تشکیل میدن البته ژانرهایی مثل تریلر </span></span>( <a href=\"https://fa.wikipedia.org/wiki/%D8%AF%D9%81%D8%AA%D8%B1_%D9%85%D8%B1%DA%AF\"><span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">دفتر مرگ </span></span></a>) <span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">و <a href=\"https://fa.wikipedia.org/wiki/%D8%A8%DB%8C%E2%80%8C%D8%B4%D9%88%D8%AC%D9%88\">بی شوجو </a></span></span>( <a href=\"https://en.wikipedia.org/wiki/Clannad_%28visual_novel%29\"><span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">کلند</span></span></a>) <span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">و <a href=\"https://fa.wikipedia.org/wiki/%D8%A8%DB%8C%E2%80%8C%D8%B4%D9%88%D9%86%D9%86\">بی شونن </a></span></span>(<a href=\"https://fa.wikipedia.org/wiki/%D9%85%DB%8C%D8%B2%D8%A8%D8%A7%D9%86_%D8%A8%D8%A7%D8%B4%DA%AF%D8%A7%D9%87_%D8%AF%D8%A8%DB%8C%D8%B1%D8%B3%D8%AA%D8%A7%D9%86_%D8%A7%D9%88%D8%B1%D8%A7%D9%86\"><span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">اوران های اسکول</span></span></a>) <span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">هم در جذب مخاطب تأثیر به سزایی رو داشتند</span></span>. <span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">البته میشه گفت انیمه هایی بر خلاف رویکرد غالب این صنعت هم در جذب مخاطب بی اثر نبوده</span></span>. <span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">آثار شاخص سینمایی مثل <a href=\"https://fa.wikipedia.org/wiki/%D9%BE%D8%A7%D9%BE%D8%B1%DB%8C%DA%A9%D8%A7_(%D9%81%DB%8C%D9%84%D9%85_%DB%B2%DB%B0%DB%B0%DB%B6)\">پابریکا</a> و <a href=\"https://fa.wikipedia.org/wiki/%D8%A8%D8%A7%D8%B2%DB%8C%DA%AF%D8%B1_%D9%87%D8%B2%D8%A7%D8%B1%D9%87\">بازیگر هزاره</a> و <a href=\"https://fa.wikipedia.org/wiki/%D9%BE%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D9%86%D8%AF%D9%87%E2%80%8C%D9%87%D8%A7%DB%8C_%D8%AA%D9%88%DA%A9%DB%8C%D9%88\">پدرخوانده های توکیو</a> اثر های شاخص و جدی و تحسین شده ساتوشی کن و انیمه هایی مثل <a href=\"https://fa.wikipedia.org/wiki/%D8%A7%D8%B1%DA%AF%D9%88_%D9%BE%D8%B1%D8%A7%DA%A9%D8%B3%DB%8C\">ارگو پراکسی</a>   در ژانر <a href=\"https://fa.wikipedia.org/wiki/%D8%A7%D8%AF%D8%A8%DB%8C%D8%A7%D8%AA_%D8%AF%D8%A7%D8%B3%D8%AA%D8%A7%D9%86%DB%8C_%D8%B1%D8%B3%D8%AA%D8%A7%D8%AE%DB%8C%D8%B2%DB%8C_%D9%88_%D9%BE%D8%B3%D8%A7%D8%B1%D8%B3%D8%AA%D8%A7%D8%AE%DB%8C%D8%B2%DB%8C\">پسا-آخرالزمانی</a> و <a href=\"https://fa.wikipedia.org/wiki/%D8%B3%D8%A7%D9%85%D9%88%D8%B1%D8%A7%DB%8C%DB%8C_%DA%86%D8%A7%D9%85%D9%BE%D9%84%D9%88\">سامورایی چمپلو</a> اثر<a href=\"https://en.wikipedia.org/wiki/Sh%C5%ABk%C5%8D_Murase\"> شوکو موراسه</a> و البته انیمه هایی در سبک <a href=\"https://en.wikipedia.org/wiki/Slice_of_life\">زندگی روزمره</a> مثل <a href=\"https://fa.wikipedia.org/wiki/%D9%85%D9%88%D8%B4%DB%8C%E2%80%8C%D8%B4%DB%8C\">موشیشی</a> و <a href=\"https://en.wikipedia.org/wiki/Natsume's_Book_of_Friends\">ناتسومه </a>همه و همه از آثار بلند و پرمخاطب این دهه قرار میگیرن</span></span>.</p>\n<p dir=\"rtl\" align=\"right\"><span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">دهه دوم رو میشه بازسازی دهه ۹۰ قلمداد کرد موضوعات سیاسی و اجتماعی در راس دغدغه انیمه های جدی قرار گرفته </span></span>. <span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">ژانر رمنس و شونن به قدرت خودش پابرجاهست ولی جایگزین مناسبی هنوز برای آثار پرمخاطبی مثل ناروتو و بلیچ وجود نداره</span></span>. <span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">اثر تحسین شده <a href=\"https://fa.wikipedia.org/wiki/%D8%AD%D9%85%D9%84%D9%87_%D8%A8%D9%87_%D8%AA%D8%A7%DB%8C%D8%AA%D8%A7%D9%86\">حمله به تایتان‌ها</a> هم توانست که برای مخاطبینی که هنوز نتوسته بودن با انیمه ارتباط برقرار کنن جذاب و تأثیرگذار باشه</span></span>. <span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">پخش آثار انیمه‌ای در غرب هم که در ابتدا دهه ۸۰ با ژانر مکا و <a href=\"https://fa.wikipedia.org/wiki/%D8%A7%D9%BE%D8%B1%D8%A7%DB%8C_%D9%81%D8%B6%D8%A7%DB%8C%DB%8C\">اسپیس اوپرا </a>شروع شده بود حالا با پخش آثار جدی تری مثل <a href=\"https://fa.wikipedia.org/wiki/%D8%B3%D8%A7%DB%8C%DA%A9%D9%88-%D9%BE%D8%A7%D8%B3\">سایکو</a></span></span>-<span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">پس ، <a href=\"https://en.wikipedia.org/wiki/Hunter_%C3%97_Hunter\">هانتر اکس هانتر</a> ، و <a href=\"https://fa.wikipedia.org/wiki/%D8%A7%D8%B3%D9%88%D8%B1%D8%AF_%D8%A2%D8%B1%D8%AA_%D8%A2%D9%86%D9%84%D8%A7%DB%8C%D9%86\">سورد آرت آنلاین</a> طرفداران بیشتری رو جذب خودش کرده</span></span>.</p>\n<p dir=\"rtl\" align=\"right\"><a href=\"http://www.fantasy.ir/news/?title=%D8%A7%D9%86%DB%8C%D9%85%D9%87\">خوندن مطالب سایت گمانه‌زن هم در مورد انیمه میتونه جذاب باشه .</a></p>\n<p dir=\"rtl\" align=\"right\"><span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">در مقالات بعدی به زیرسبک های انیمه ای ،فرهنگ انیمه و مانگا و تأثیرش بر صنعت بازی و مد و انیمه های مورد علاقه خودم اشاره میکنم</span></span>.</p>\n<p dir=\"rtl\" align=\"right\"><span style=\"font-family: DejaVu Sans;\"><span lang=\"fa-IR\">خوشحال میشم که ژانر ها و انیمه های مورد علاقه خودتون یا پیشنهادها و انتقاداتتون رو در نظرات پاسخ بدم </span></span></p>\n"
    },{
      "id":         "/the-Identity",
      "url":        "/the-identity.html",
      "image":      "assets/article_images/identity/identity1.jpg",
      "title":      "هویت:",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2017-01-06 00:00:00 +0000",
      "tags":       [],
      "categories": ["life"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"هویت:\"\ndate: 2017-01-06\ncategories: life\nimage: assets/article_images/identity/identity1.jpg\n\n---\nمن هویت رو مشخصه هایی میدونم که هر فردی به وسیله اون ها خودش رو به یک اجتماع متصل میدونه . برای مثال یک برنامه نویس عضوی از برنامه نویسان جهان هستش و این مشخصه میتونه خاص تر بشه مثل برنامه نویس های پایتون،روبی و… .\nبرگردیم به دوران کهن ، انسان‌ ذاتاً  موجودی اجتماعی هست و بدون قوم و قبیله زندگی کردن بسیار سخت می‌شد بخاطر همین هویت اغلب به وسیله رابطه‌های خویشاوندی تعریف میشد. بعدها با تعریف شدن ملل( در غرب با پیمان وستفالی ) این خصوصیت به جای قومیت جای خودش رو به ملیت ها داد و بعدتر در ابتدای قرن ۲۱ و انتهای قرن ۲۰ ام نظریه‌ای مطرح شد به اسم جهانی سازی یا گلوبالیزیشن که مفاد حرفش این بود،خرده فرهنگ‌ها و قومیت ها در لوای کمپانی های چند ملیتی و رسانه‌های مدرن محو میشن.\nولی امروز میبینیم که جهانی سازی عملاً شکست‌خورده، ملت‌ها در شرق یا تشکیل نشدن یا اصولاً به دلایل تفاوت‌های عمیق فکری و هویتی چند پاره شدند و عملاً مدرنیته در شرق ابزاری شد برای خواسته‌های پیشامدرن و سنتی.\nهویت به عنوان یک متغیر شناور که در لحظه تصمیم میگیره چگونه باشه تبدیل به هویتی ایستا و ابدی. شاید این ترس از دست دادن هویت برمیگرده به ذهن متافیزیکی انسان شرقی که همواره خواسته به ابدیت وصل باشه این نتیجه‌گیری وقتی ملموس‌تر میشه که متوجه میشیم در شرق اصولاً چیزی به اسم اگیزیستانسیالیسم و عقل‌گرایی مدت‌ها هستش که از جهان شرقی محو شده.\n\nمن به عنوان یک ایرانی لک‌زبان تلاش‌های خوبی رو می‌بینم که آغاز شده برای بالندگی و رشد و فرهنگ قومیت لک. ولی توامان نقدی رو دارم که ما لک‌زبان‌ ها به عنوان زبان فرهنگی غرب کشور نباید هویت خودمون رو بسته تعریف کنیم و دچار اشتباهی که ترک ها ،کرد ها ، عرب‌ها شدند نشیم . فاشیسم در بین این اقوام بیداد میکنه این‌ ها برای ساختن آرمان شهر که در ‌ذهن خود داشتن جنگی دائمی رو با هویت‌هایی به غیر خود به راه انداختند که عملاً خراب آباد رو به وجود آورد.فاشیسم ماشین جنگی توقف ناپذیری که هروقت شروع بشه چشم آدم هارو بر واقعیت‌ها میبنده. فاشیسم هویت خودش رو بسته تعریف میکنه یعنی از خودش سؤال نمیکند که  «الان میتوانم طور دیگری رفتار کنم؟» بلکه فاشیسم میگه «الان  باید اینگونه رفتار کنم».\nمثال واضح این حرف من کانال‌ها و سایت‌هایی هستند که روش پانکرد ها و پانترک ها رو پیش گرفتن و اصولاً فکرهای متفاوت رو قبول نمیکنن و روش تخریب دیگر اقوام و تاریخ رو در پیش گرفتن. در‌واقع هویت لکی آنتی تز نیست همانند بقیه هویت‌هایی که خودشون رو آنتی تز قومیت فارس معرفی میکنن بلکه لک ها سنتز  جامعه ایرانی هستن . با وجود اینکه تحقیق های نظری زیادی در این زمینه انجام نشده ولی خوشبختانه در بین روشن‌فکر های ما فاشیسم ریشه‌دار نیست.\nاستدلالی که میشه این هستش که اون ها به وسیله رفتار های خارج از عرف و ایجاد هزینه به خواسته‌های خودشون رسیدن که ابتدایی ترین اون ها آموزش به زبان مادری ولی تأثیر بلند مدت این حرکت‌ها برسی نمیشه بلکه دستاورد های کوتاه مدت دیده میشه . خشونت و عقب‌ماندگی که تفکرات فاشیستی تبلیغ میکنه دیده نمیشه ، ترس دائمی که از دست دادن هویت تبلیغ میشه دیده نمیشه.\nدر انتها شما رو دعوت میکنم به  خوندن شعر زیبای سپید لکی اثر اسد الله آزادبخت\n\n>وا(باد)\n\nئه گرد مه هیزَ مگرت(همراه من قیام میکرد)\n\nملیچک(گنجشک)\n\nدن ار دن ئه طورما(قله به قله به دنبال من)\n\nدربن شو نوویم(بی خیال شب بودم)\n\nهنامه مکرد(صدا می زدم)\n\nکوه\n\nدشت\n\nهناون کِلَ مکرد(برایم پژواک صدا میفرستاد)\n\nآینم(آینه ام)\n\nارا کَنی(برای چشمه)\n\nلاولاوه(لالایی)\n\nمکردی(میخواند)\n\nآسو(بلندی)\n\nجا ارپام نمنیای(پا را جا پای من نمی گذاشت)\n\nتنیا کتم(تنها افتادم)\n\nدیر هتین.......(دیرآمدی)\n\n\n"
    },{
      "id":         "/the-return-to-the-author",
      "url":        "/the-return-to-the-author.html",
      "image":      "assets/article_images/jamshid/jamshid.jpg",
      "title":      "مؤلف زنده است",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2016-12-09 00:00:00 +0000",
      "tags":       [],
      "categories": ["book"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"مؤلف زنده است\"\ndate: 2016-12-09\ncategories: book\nimage: assets/article_images/jamshid/jamshid.jpg\n\n---\nبا خودم قرار گذاشته بودم هر جمعه را به معرفی کتابی که در طول هفته خواندم بگذارم منتهی فکر نمیکنم روی من جواب بدهد, از این جنس اجبار هایی که آدم به خودش میگوید که فلانی حتماً باید این کار را در این بازه زمانی انجام میدادی ولی بعد چند بار پشت گوش انداختن دیگر انجام نمیدهی.  در‌واقع قرار بود که این نوشته معرفی کتاب باشه ولی حیف دیدم پیرامون حاشیه های مهم‌تر از متنش صحبت نکنم .\n\n>در اوایل سال ۱۹۷۹ که جمشید خان برای اولین بار دستگیر شد،هفده‌ساله بود. آن روزها بعثی ها در سرتاسر خاک عراق، بنای تعقیب و دستگیری و شکنجه چپ ها را گذاشته بودند… چپ هایی که کمی پیشتر، از هم‌پیمانان اصلی «انقلاب و رهبری» آن به‌شمار می‌آمدند.\n\nنقل قول بالا نقل قولی از کتاب «عمویم جمشیدخان مردی که باد همواره اورا با خود میبرد» نوشته بختیار علی نویسنده کردزبان هستش .\nنوشتن درباره کتاب عمویم جمشیدخان کار آسانی نیست به قول مترجم کتاب رضا کریم‌مجاور:\n>«جمشیدخان را باید بدون دیباچه خواند و به آن اندیشید و لذت برد…این چند سطر را هم نباید مینوشتم … و اکنون که نوشته‌ام ،شما دوستان آن را نخوانید!»\n\nداستان داستان سرگذشت روشنفکران قوم کرد است،روزی در مقام دانشجوی مبارز، روزی چریک ، روزی واعظ… جمشید خان میتواند سرگذشت زندگی بختیارعلی باشد جایی که در جوانی دستگیر می‌شود و به زندان بعثی ها در می‌آید و بعدها باد با خودش او را به آلمان میبرد.\nاین‌ها همه مقدمه‌ای بود برای اینکه بگویم مؤلف زنده است،جای جای کتاب به بختیار علی نویسنده کردی که آلامی از جنس انسان خاورمیانه‌ای دارد پیوند خورده، مسائلی همانند جنگ،پناهندگی،قاچاق انسان،سیاست مداران و عصرجدید.\nحال چرا میگویم مؤلف زنده است؟\n زیرا یکی از جنجال برانگیزترین مسائل معاصر در نقد حوزه ادبیات و تولید محتوا این است که آیا متن یا محتوا خوانش یکسانی دارد یا در ذهن خواننده تفسیر می‌شود و اصولاً دست بالاتر در نوشته را نویسنده دارا نیست و خواننده است که مشخص میکند که متن را چگونه تفسیر کند بدون شناخت هویت و شخصیت نویسنده.\n این دیدگاه اندکی ترسناک است مرا به یاد داستان‌های علمی تخیلی خصوصا جهانی که جرج ارول در ۱۹۸۴ به تصویر میکشد می‌اندازد که در آن طبقه فرودست جامعه اقدام به خواندن رمان‌های هرزه‌نگاری که توسط ماشین‌تحریر های خودکار نوشته شده‌اند میکند.\nبه نظر من نویسنده از مقام معنوی برخوردار نیست دارای فر ایزدی و جایگاه فراطبیعی یا دارای نبوغ و استعداد شگرف نیست ولی متن یا نوشته او در صورتی خواندنی می‌شود که تجربیات،دانش،تخیل خود را طوری به کار گیرد که امضای او پای اثرش باقی بماند.\n"
    },{
      "id":         "/from-good-content-to-good-society",
      "url":        "/from-good-content-to-good-society.html",
      "image":      "assets/article_images/knowledge/knowledge-sharing.jpg",
      "title":      "از محتوای خوب تا اجتماع خوب",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2016-11-18 00:00:00 +0000",
      "tags":       [],
      "categories": ["life"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"از محتوای خوب تا اجتماع خوب\"\ndate: 2016-11-18\ncategories: life\nimage: assets/article_images/knowledge/knowledge-sharing.jpg\n\n---\n\nبا دوستانم در مورد اینکه چرا آثار خوب و با‌ارزش مورد استقبال عوام قرار نمیگیرند صحبت میکردیم . کل مبحث پیرامون سه دیدگاه میچرخید.\n\n+ در حال حاضر  آثار زیادی تولید میشن و پخش راحت‌تر شده در نتیجه قاعدتاً سبد کارهای خوب هم زیادتر میشه هرچند که نسبت کارهای بد به خوب بیشتر باشه\n\n+ آثار عمیق و با محتوا از هنرمند/نویسنده های کمتر شناخته شده دیده و شنیده نمیشن و جامعه درگیر سانتی مانتالیسم هست\n\n\n+ و دیدگاه آخر خودم که معتقدم در نبود سیستمی که آثار خوب رو بر اساس علایق پیشنهاد بده خرده ای به خواننده شنونده و بیننده آثار نیست\n\nابتدا به بحث اول بپردازیم . مقاله‌ای در این مورد میخوندم که به نوشتار باید همانند کد نگاه کنیم یعنی در ابتدا چرکنویس داشته باشیم و این چرکنویس ها رو اصلاح کنیم تا به متن نهایی برسیم .\n در گذشته این دیدگاه وجود داشته که هنرمند یا نویسننده آثار دارای استعدادی ورای بقیه انسان هاست درنتیجه آثار بهتری تولید میشه.با توجه به عمومی شدن تحصیلات و البته اینترنت برای انتشار آثار و تغییرات فلسفی مهمی که در قرن ۱۸ تا ۲۰ اتفاق افتاد مثل عمومی شدن نسبیت گرایی در هنر و اخلاق  اون بتی که از هنرمند/نویسنده به عنوان فرد خاص یاد میشد از بین رفت .\n\nبحث دوم میتونه در‌واقع سؤالی برای بخش سوم باشه. آیا جهانفکر ( پارادایم فکری ) ما ایرانی‌ها متمایل به سانتی مانتالیسم هست؟ آیا جامعه سنتی و واپسگرایی داریم که در مواجه با ادبیات جدی و ژانری زاویه میگیره ؟\n\nبزارین روشن کنم جامعه ما درگیر سانتی مانتالیسم هست . حال سؤال اینه سانتی مانتالیسم چی هستش ؟\nدر جامعه‌ی اروپایی قرن ۱۸ که جامعه به سوی صنعتی شدن پیش میرفت و کاپیتالیسم تبدیل به ارزش شده بود ,جنس روابط از حالت سنتی به روابط صرفاً جنسی تغییر شکل داده بود و در این میان هنرمندان و نویسندگان سعی در تقدیس عشق و احیای روابط گذشته به وسیله هنر و نوستالژی داشتند . ولی در ادبیات جدید بیشتر معنی احساسات شدید و البته غیر عقلانی رو داره که مثال‌های عینی این قضیه رو میتونید در سوگواری خواننده مشهور «مرتضی پاشایی» و یا در ادبیات کشورمون با کتاب‌های پرفروش عاشقانه مثل ر.اکبری و فهمیه رحیمی و … ببینید.\n\nسؤال بعدی اینه که چرا سانتی مانتال هستیم؟\n مدت‌ها قبل کتاب با‌ارزش دکتر صادق زیباکلام به اسم «ما چگونه ما شدیم» رو میخوندم در فصل اول دلایل تاریخی عقب ماندگی ما ایرانی‌ها در بخش صحرانشینی عدم ثبات اجتماعی  این نکته مطرح شده بود که به دلیل موقعیت جغرافیایی و تاریخی ایران همواره در معرض تاراج و تاخت و تاز بیگانگان قرار داشته در نتیجه میشه برداشت کرد که مردم به سطحی‌ترین شکل ممکن غنای روحی خود را تأمین میکردند زیرا یک‌جا نشینی و تمدن در وضعیتی بدون ثبات معنا نمیافت .\nاگر یکم به قبل تر برگردیم میتونیم به طور واضح این تأثیر رو روی شاعرهای نامی خودمون ببینیم . برای مثال فردوسی عقل‌گرا در مقابل مولانای اشراقی . منکر ارزش‌های معنوی حضرت مولانا نیستم ولی شاعر ها و نویسنده‌ها ما به نوعی جهت دهنده افکار ما هستند به نوعی یونگ در  در نظریه رفتاری خودش در قسمت کهن الگو هایی که ناخودآگاه جمعی رو شکل میدن  به این موضوع اشاره میکنه که فرد تحت تأثیر ناخودآگاه جمعی رشد میکنه و بزرگ میشه .\n\nحال با وجود سانتی مانتالیسم چه کنیم؟\nمیتونیم مثل نویسنده‌های پاورقی های روزنامه که ادبیات مارو به سطح نازلی کشیدن برخورد کنیم و از این راه ارتزاق کنیم ,میتونیم موسیقی مصرفی بسازیم و در قبالش کنسرت بزاریم معروف بشیم و سود کسب کنیم.در حقیقت هنر رو از معنای واقعی خودش به سطح سرگرمی تقلیل بدیم.\nاین روی سخنم با نویسنده و دانشجو یا کسی هستش که محتوا تولید میکنه بود در قبال عام مردم نظر من این هستش که انسان مدرن با وجود دسترسی زیادی که به منابع اطلاعاتی داره به صورت خلاصه ( انفجار اطلاعات ) ولی فرصت کمی برای پیدا کردن محتوای غنی و ارزشمند داره . فردسودجوی ما این رو میتونه کسب و کار خودش کنه کما اینکه درحال تجاری شدن هست . روی من با مصلح اجتماعی کسی که این نوشتار رو دنبال کرده تا به این برسه چه کنیم که خوب بشنویم خوب ببینیم و در عمل خوب فکر کنیم . مردم مقصر نیستند کهن الگو ها به کنار زمان کم به کنار مشغولیات زندگی و … هم به کنار .\nالبته منکر نقش سلبی صدا وسیمای انحصاری هم نمیشه شد که یک نوع خاص فرهنگ یک نوع خاص موسیقی رو سالیان سال هست که سعی میکنه ترویج کنه . حالا با وجود کمرنگ شدن نقش صدا و سیما و پررنگ شدن نقش اینترنت چیزی که میتونه ذائقه شنونده/خواننده/بیننده ایرانی رو بهبود ببخشه یک سیستم هستش که منتقدین و مردم آثار خوب رو معرفی و دسته بندی کنن . این رو ما در کتاب با عنوان goodreads داریم در موسیقی با lastfm در نرم‌افزار با alternativeto.net و در انیمه با myannimelist داریم ولی این‌ها یک اکوسیستم رو تشکیل نمیدن . برای مثال منی که علاقه‌مند به نرم‌افزار آزاد هستم از موسیقی متال و انیمه لذت میبرم و آثار شاخصی رو در این زمینه‌ها میشناسم مجبورم برای معرفی هرکدوم از این‌ها از یک پلتفرم جداگانه استفاده کنم .\nحالا شما مخاطب فارسی زبان رو در نظر بگیرید که دسترسیش به این سایت‌ها محدود شده به لطف فیلترینگ و وقتی برای گشتن برای آثار خوب نداره , و اصولاً آشنا به  موسیقی/سینما/ادبیات/گیم/فرهنگ/خرده‌فرهنگ/فلسفه/معماری ملل دیگر نیست.\nکماکان باور دارم این رسالت بر دوش ما هستش که اگر محتوای خوبی رو میشناسیم معرفی کنیم و این رسالت زمانی کامل میشه که بتونیم پلتفرمی جامع برای معرفی آثار ارزشمند تهیه کنیم تا این عمل به سطح کوچکتر در شبکهه های اجتماعی و دورهمی های دوستانه تقلیل پیدا نکنه.\nبا توجه به ریشه‌یابی که در بالا از فضای سانتی مانتال ایران شد میتونم بگم که این کار سختی هستش ولی در یک مقیاس بزرگ‌تر اگر به تاریخ نگاه کنیم در بزنگاه ها اگر جامعه ما شناخت کافی  رو در مورد اندیشه‌ها و افکار و شیادینی که از جهل اون ها سواستفاده کردن میداشتند هیچ‌گاه درگیر مسائلی اینچنین نبودیم ولی چشم انداز آینده میتونه انگیزه‌ای باشه برای ایجاد تغییرات مثبت که وسیله دانش و شناخت اشتباه گذشتگان رو ما تکرار نکنیم.\n\n"
    },{
      "id":         "/thus-spoke-behrooz",
      "url":        "/thus-spoke-behrooz.html",
      "image":      "assets/article_images/behroozam/behroozam.jpg",
      "title":      "اینچنین گفت بهروز",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2016-10-21 00:00:00 +0000",
      "tags":       [],
      "categories": ["life"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"اینچنین گفت بهروز\"\ndate: 2016-10-21\ncategories: life\nimage: assets/article_images/behroozam/behroozam.jpg\n\n---\nاین روز ها یک طور عجیبی هستم , راستش را بخواهی یادم نمی‌آید از کی اینگونه عجیب بوده باشم . آینه را که الانه شده دوربین تلفن همراه را برمی‌دارم نگاهی به سر تا پای خود می‌اندازم گویی موجود عجیبی از آن ور وارد گوشی شذه و تصویرم را تغییر میدهد تا دیگر خود را نشناسم . بر سر آن پخمه ساده دل چه آمده ؟\nجوابی در خور پیدا نمیکنم , چه چیز باعث طوفانی شدن دریا می‌شود , نمیدانم. میدانم همواره زیسته ایم بدون اینکه بدانیم , هروقت هم خواستیم که بدانیم یا وقت تنگ بود یا اجل مهلت نداد به هر حال این روز ها حال عجیبی دارم , میتوانم برای روزها بشینم و بمانم در جای خودم تا طبیعت پوستم را خراش دهد و اعضای بدنم را آزوقه فصل بهار گل‌های وحشی کند . آنقدر مرگ راحت است که در سه حرف جاری می‌شود مگر غیر از این بود که جاری معنای زندگی بود. فراموش میکنم , تازگی ها باید کتابی را باز کنم به دنبال صفحه‌ای بگردم و جوابش را آنجا پیدا کنم, بارها می‌شود متنی تکراری را بخوانم و تازه در اواسط نوشته متوجه شوم که روزی آن را خوانده بودم , آیا کار موجودات ریز و نامرئی است که شبانه به ‌ذهن ما دستبرد میزنند و در نیمه شب‌های تابستان ضیافت برگزار میکنند , این را هم نمیدانم.\nمیتوانم روزها صبر کنم میتوانم برق خوشحالی چشمان کودکی که به آرزوی کوچک خود رسیده را آنگونه تکرار کنم گویی آن معجزه آن رویداد آنگونه که مینمایاند نیست .۲۱ سالگی بالاخره دارد خود را نشان میدهد یا تأثیر موهای سفیدی است که تازگی‌ها در کنار شقیقه ام خودنمایی میکند چقدر تأسف آور است که این را هم نمیدانم.\nروزگاری در آینه سبزه های تازه رشد کرده بر بالای لب های خود را تماشا میکردم با خود میگفتم بهروز حالا مردی شده‌ای میتوانی دنیای خودت را تغییر بدی , هرچه بزرگ‌تر شدم این دنیا درونی تر شد تا جایی که من و دنیای خودم یکی بودیم, از این کشف حیران بودم , گاهی قلک توخالی بودم که پسر بچه‌ای سنگی را در آن انداخته بود تا با تکان دادن آن احساس بی‌نیازی کند , که هروقت قلک را شکاند با دارایی ارزشمند خود مالک چیزی برای خودش باشد , دریغا که در این قلک چیزی به جز تکه سنگ نبود. گاهی سنگی آتشفشانی که در بستر رودخانه ای که به دریا منتهی میشد صیقل میخورد تا زوایای خود را از دست بدهد بلکه گوهری بشود ارزشمند.\n\nمن همه این‌ها بودم و نبودم .\nحال در انتهای نوشته قلم خود میراند و حوهره نوشته را مشخص میسازد و از جوهر کلامی میسازد که نه جاودانه خواهد شد نه قرار است اهمیتی داشته باشد .\nدر یک شب پاییزی بهروز اینچنین گفت\n"
    },{
      "id":         "/undeep-social",
      "url":        "/undeep-social.html",
      "image":      "assets/article_images/social/social.jpg",
      "title":      "اجتماع کم عمق",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2016-08-25 00:00:00 +0000",
      "tags":       [],
      "categories": ["life"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"اجتماع کم عمق\"\ndate: 2016-08-25\ncategories: life\nimage: assets/article_images/social/social.jpg\n\n---\nشبکه‌های اجتماعی به ذات خودشون بد نبودن و  باعث شدن دوست هایی با علاقه های خودمون پیدا کنیم و اپدیت باشیم ولی نکته اصلی این هستش که با کم فروِغ شدن فیسبوک و رونق گرفتن تویتر و تلگرام و شبکه‌های اجتماعی که تمرکزشون بر دستگاه‌های قابل حمل بود عملاً حاشیه و برگ مطالب که گاهی از اصل مطلب مهم‌تر هستش رو از یاد بردیم و عادت کردیم با ۱۴۰ کاراکتر و نه بیشتر منظور خودمون رو برسونیم . ولی از یاد نباید ببریم که ما شاعر رباعی یا مینیمال نیستیم ما متخصص و برنامه نویس و تولید کننده محتوا به زبان فارسی هستیم . متأسفانه اما الان به جای اپدیت وبلاگ هامون به گذاشتن لینک هایی از پروژه های مورد علاقمون در گیتهاب یا بقیه سورس ها در شبکه‌های اجتماعیمون عادت کردیم . برای مثال چند روز پیش به کامند هایی نیاز داشتم تا از یک پروژه قدیمی بیلد بگیرم با اینکه قبلاً پروژه رو انجام داده بودم ولی مجبور شدم دوباره برم و داکیومنت های سایت فریمورک رو دوباره مطالعه کنم و دستی مشکلات دپندنسی رو که بعد از آپدیت sdk به وجود آمده بود برطرف کنم ولی اگر همون موقع اقدام به نوشتن داکیومنت هایی در این وبلاگ کرده بودم هم به درد دیگران میخورد و هم خودم مجبور نبودم وقت بزارم و دوباره مطالعه کنم .\nنکته دیگه سایت‌هایی مثل stackoverflow هستن که عملاً مارو از فعالیت در انجمن‌های تخصصی فارسی بی‌نیاز کرده و روز به روز مارو به سمت زبان انگلیسی میبرن ولی ما در ایران زندگی میکنیم و باید به زبان فارسی فعالیت کنیم ولی اگر به این روش یادگیری که خوندن داکیومنت ها به زبان  انگلیسی هستش ادامه بدیم عملاً نسل های بعدی رو که نیاز دارند از ابتدا شروع به یادگیری کنن رو از دانش و تخصص خودمون محروم کردیم با اینکه زبان انگلیسی زبان بین‌المللی و تخصصی کار و رشته‌های ما هستش ولی نباید از یاد ببریم که روزگاری خود ما با خوندن مطالب وبلاگ های فارسی از ۱۳ یا ۱۴ سالگی علاقمند به مرتبط با فناوری اطلاعات شدیم .\nنکته سوم و آخر جهت گیری نظر های ما در شبکه‌های اجتماعی هستش شاید اگر دوسال پیش تویتی میکردم چیزی جز روزمره های خودم درمورد تجربه هام نبود ولی با ورود اکتیویست ها و فعالین به ظاهر دلسوز این فضا تغییر کرده و آدم ناخودآگاه در جوی قرار میگیره که نمیتونه خودش رو بیتفاوت به شاید نظرات اشتباه دیگرانی قرار بده که سعی دارند نظرات بقیه رو به خودشون منحرف کنند عامدانه یا غیر عمدی این فضا مسموم شده و باید کم کم بار خودمون رو ببندیم و به شبکه اجتماعی یا جایی مهاجرت کنیم که متخصصین به زبان فارسی فعالیت میکنند . با مطرح کردن این ایده در یک جمع دوستانه پیشنهاد ساخت شبکه اجتماعی غیرمتمرکزی بر روی پلتفرم GNU Social داده شده که امیدوار کننده هستش . شاید از این فضای تلگرامی و اینستاگرامی و تویتری اندکی دور شدیم .\nالبته نمیشه از یاد برد که تکنولوژی روی رفتار اجتماعی ما تأثیر گذاشته ولی با وجود موج تجمل گرایی و لوکس گرایی در جامعه ایرانی نمیشه زیاد به آینده پربار و با معنی زبان فارسی در این شبکه‌ها امیدوار بود .\n\n> پ.ن : مطلبی رو میخوندم در مورد اینکه این فرهنگ cute culture چقدر باعث شده که جوانان ما از فکر کردن و خوندن مطالب به دردبخورشون محروم بشن . واقعاً در این دوران مهم‌تر از دسترسی به اطلاعات دسترسی به اطلاعات خوب و هدایت شده هستش. باید دوباره وبلاگ هارو آتیش کنیم ما نسبت به نسل آینده وظیفه داریم.\n"
    },{
      "id":         "/what-is-diffrent-between-opensource-and-freesoftware",
      "url":        "/what-is-diffrent-between-opensource-and-freesoftware.html",
      "image":      "assets/article_images/foss/foss.png",
      "title":      "تفاوت نرم افزار آزاد و متن باز چیست ؟",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2015-11-19 00:00:00 +0000",
      "tags":       [],
      "categories": ["foss"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"تفاوت نرم افزار آزاد و متن باز چیست ؟\"\ndate: 2015-11-19\ncategories: foss\nimage: assets/article_images/foss/foss.png\n\n---\n\nدر چندین گفت و گوی اخیری که در مورد [مقاله ام داشتم](http://behroozam.com/zconf6.html) با استادان موضوعی که خیلی بحث میشد اصولاً تفاوت بین open source و freesoftware بود . اینجا در این مقاله با توجه به منابع معتبری که وجود داره سعی میکنم مرز باریک بین نرم‌افزار آزاد و متن باز رو مشخص  کنم\n\nابتدا از تعاریف شروع میکنیم  :\n\nنرم‌افزار آزاد چیست ؟\n\nتعریف بنیاد نرم‌افزارهای آزاد FSF و به طور خاص ریچارد استالمن بنیان گذار پروژه GNU به این صورت میباشد ( مستندات به زبان فارسی هم ترجمه شده و روی سایت gnu.org موجود میباشند )\n\n>“Free software” means software that respects users' freedom and community. Roughly, it means that the users have the freedom to run, copy, distribute, study, change and improve the software. Thus, “free software” is a matter of liberty, not price. To understand the concept, you should think of “free” as in “free speech,” not as in “free beer”. We sometimes call it “libre software” to show we do not mean it is gratis.(http://www.gnu.org/philosophy/free-sw.en.html)\n\nنرم‌افزار آزاد به این معنی است که به جامعه و آزادی کاربران احترام میگذارد . تقریباً به این معنی که که کاربران آزاد به اجرا  و کپی و انتشار و مطالعه و تغییر و بهبود نرم‌افزار هستند . نرم‌افزار آزاد به آزادی اهمیت میدهد نه قیمت ( به دلیل ماهیت تفسیر کلمه free در زبان انگلیسی ) . برای درک این مفهوم باید به آزادی همانند آزادی بیان فکر کنید نه آبجوی مجانی . ما بعضی اوقات آن را libre software مینامیم تا نشان دهیم منظورمان رایگان بودن نیست\n\n\n\n\nو چهار شرطی که باعث میشه یک نرم‌افزار آزاد باشه :\n>The freedom to run the program as you wish, for any purpose (freedom 0)\n\n>The freedom to study how the program works, and change it so it does your computing as you wish (freedom 1). Access to the source code is a precondition for this.\n\n>The freedom to redistribute copies so you can help your neighbor (freedom 2)\n\n>The freedom to distribute copies of your modified versions to others (freedom 3). By doing this you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this.\n\n\n+ آزادی برای اجرای برنامه برای هر منظوری (آزادی ۰)\n+ آزادی برای مطالعه و بررسی چگونگی عملکرد برنامه و تغییر آن برای نیاز خود (آزادی ۱). +دسترسی به کد منبع یک پیش‌شرط برای این آزادی می‌باشد.\n+ آزادی برای توزیع مجدد کپی‌هایی از آن، بنابراین شما می‌توانید به همسایگان خود کمک کنید (آزادی ۲).\n+ آزادی برای بهبود برنامه و انتشار این تغییرات برای عموم، بنابراین تمام جامعه از آن بهره +می‌برند (آزادی ۳). دسترسی به کد منبع یک پیش‌شرط برای این آزادی می‌باشد.\n\n\nو تعریف نرم‌افزار متن باز بر اساس تعریف بنیاد نرم‌افزار های متن باز به این صورت میباشد  ( متن انگلیسی به صورت کامل در منبع موجود میباشد https://opensource.org/osd-annotated )\n\nنرم‌افزار متن باز چیست ؟\n\nنرم‌افزار متن باز نه فقط به معنای دسترسی به کد منبع بلکه باید شرایط توزیع نرم‌افزار را به صورت زیر داشته باشد\n\n۱- آزادی در بازنشر\nلایسنس ( مجوز ) نباید از فروش یا قرض دادن نرم‌افزار به عنوان جزی از یک توزیع نرم افزاری مجتمع از چندین منبع جلوگیری نماید .\n\n۲ -کد منبع\n\nبرنامه باید شامل کد منبع همانند کدی که از روی آن کامپایل شده باشد\n\n۳- کارهای مشتق شده\n\nمجوز (لایسنس) باید اجازه تغییرات و مشتق شدن را بدهد و همچنین اجازه نشر آن را بر اساس لایسنس نرم افزاری اصلی را بدهد .\n\n>منطق : صرف توانایی خواندن کد منبع کافی نیست تا از از تکامل و بازخورد نرم‌افزار حمایت کند\n\n۴- یکپارچگی کد منبع و نویسنده\nمجوز میتواند از انتشار فرم تغییرشکل یافته برنامه جلوگیری نماید تنها زمانی که فایل‌های الصاقی ( patch files ) و کد منبع برای اهدافی در زمان ساخته شدن تغییر نمایند  .\n\n\n\n۴ – بدون تبعیض علیه افراد یا گروه‌ها\nمجوز نباید در مقابل هر فرد یا گروهی از افراد تبعیض قائل شود.\n\n۵- بدون هیچ تبعیضی علیه زمینه‌هایی از تلاش\n\nمجوز نباید از استفاده از نرم‌افزار در زمینه‌های مختلف جلوگیری نماید . همانند استفاده از یک نرم‌افزار مالی در اقتصاد یا ژنتیک .\n\n۷- توزیع مجوز\n\nحقوقی که به برنامه الصاق شده باید برای همه اجرا بشود\n\n۸ – مجوز نباید به صورت اختصاصی برای یک محصول باشد\n\n\nنتیجه‌گیری :\nفرق اساسی ما بین نرم‌افزار  آزاد و اوپن سورس وجود نداره تا زمانی که هردو یک هدف رو دنبال میکنن . تفاوت‌ها در اهمیت و نوع نگاه به زندگی .\nسادگی در تفسیر اوپن سورس و قوانین سفت و سخت در نرم‌افزار آزاد و همچنین لفظ آزادی که برداشت‌های متفاوتی داره باعث شده جامعه متخصصین به مفهوم اوپن سورس علاقه بیشتری داشته باشن  هرچند با نگاهی عمیق‌تر میشه فهمید قوانین چهار گانه نرم‌افزار آزاد تضمینی هستش که باعث میشه فرهنگ اشتراک گذاری دانش و علم در مقابل ثبت پتنت و کپی رایت زنده بمونه و فارغ از مسایل تجاری برای ساختن دنیایی بهتر استفاده بشه\n\n>ماشین ها انسان هارو کنترل میکنن و کد ها ماشین‌ها رو . چه کسی کد ها رو کنترل میکنه ؟\n-ریچارد استالمن\n"
    },{
      "id":         "/Colorless-Tsukuru-Tazaki-and-His-Years-of-Pilgrimage",
      "url":        "/colorless-tsukuru-tazaki-and-his-years-of-pilgrimage.html",
      "image":      "assets/article_images/tsukuru/tsukuru.jpg",
      "title":      "سوکورو تازاکی بی‌رنگ و سال‌های زیارتش ",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2015-11-19 00:00:00 +0000",
      "tags":       [],
      "categories": ["book"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"سوکورو تازاکی بی‌رنگ و سال‌های زیارتش \"\ndate: 2015-11-19\ncategories: book\nimage: assets/article_images/tsukuru/tsukuru.jpg\n\n---\n>> <h3> قسمتی از متن کتاب سوکورو تازاکی و سالهای زیارتش </h3>\n>سوکورو تازاکی در عمیق‌ترین نقطه جانش به درک رسید . درک اینکه هیچ قلبی صرفاً به واسطه هماهنگی با قلب دیگری وصل نیست . زخم است که قلب ها را عمیقاً به هم پیوند میدهد .\nپیوند درد با درد شکنندگی با شکنندگی . تا صدای ضجه بلند نشود سکوت معنا ندارد و تا خونی ریخته نشود عفو معنا ندارد و تا از دل ضایعه بزرگی گذر نکنی رضا و رضایت بی‌معنی است . هماهنگی واقعی در همین‌ها ریشه دارد\n\n\n\n  سوکورو تازاکی  فردی موفق و تحصیلکرده از طبقه متوسط رو به بالای جامعه که عاشق تماشا و ساختن ایستگاه های قطار است  ولی پشت این نقاب موفقیت فردی تنها است که ترسی عمیق از  گذشته ها و دلبستن دارد  اما باز شدن پای یک زن به زندگی او باعث می‌شود تا به گذشته بازگردد  به عمق فاجعه بزند و سعی کند تا بفهمد چرا روزگاری تمام دوستانش دیگر نخواستند او را ببینند\n\nسوکورو تازاکی داستان تصمیم ما انسان‌ها است . سرنوشتی که خود رقم میزنیم . گاهی یک سکوت طولانی مدت تبدیل به بغض می‌شود  بغض به نا امیدی و سپس خشم . رفتار سوکورو از جنس همان غرور و لجاجت احمقانه انسان‌ها نیست وقتی دوستانش دیگر نخواستند اورا ببینند وقتی هایدا ناگهان غیب شد فکر میکرد سرنوشت اوست که همواره کسانی که دوست دارد را از دست بدهد . این ضربه ها این زخم عمیق باعث می‌شود دیگر ریسک دل بستن به کسی را به خود ندهد ولی با ورود سارا به زندگیش او حالا انگیزه‌ای برای کشف واقعیت دارد تا از بن بستی که در آن افتاده رها شود .\n\nبه سبک سیاق کارهای موراکامی چیز هایی هم هست که هیچ‌گاه روشن نمیشود . برای مثال آن پیانیست جز که هاله دور آدم‌ها را میدید یا رفتن ناگهانی هایدا .دنیایی که موراکامی خلق میکند سرشار از دیالوگ هایی است که شمارا به فکر فرو خواهد برد . حس همزاد پنداری شگفتی از رمز و راز ها و تلفیق واقعیت و خیال  . حتی ممکن است گاهی به موراکامی رشک برید که چگونه میتواند چنین دیالوگ ها و افرادی را بسازد . سوکورو تازاکی بی‌رنگ شاید در پرونده موراکامی در مقایسه با دیگر رمان هایش مثل کافکا در کرانه و شکار گوسفند وحشی و 1q84 اثر شاخصی نباشد ولی کماکان اثر ارزشمندی در کارنامه موراکامی است .\n\n >پی نوشت : گاهی ما آدم‌ها مغزمون رو تبدیل به کشو هایی پر از موضوعات مجهول میکنیم . شاید میترسیم که به عمق فاجعه بزنیم . شاید میترسیم که هیولایی وحشتناک و بدتر در میان خاکستری اتفاقاتی که تبدیل به خاطره و خاطره هایی که تبدیل به تکه‌هایی پراکنده شدن وجود داشته باشه  . ولی زمانی باید همه این‌ها رو کنار بزاریم و بپرسیم چرا . چه بهتر که تلاش بکنیم و شکست بخوریم تا همواره حسرت این رو بکشیم که چرا روزی نپرسیدیم چرا ؟\n\n\n\n"
    },{
      "id":         "/healthcare-data-encryption",
      "url":        "/healthcare-data-encryption.html",
      "image":      "assets/article_images/encryption/encryption.jpeg",
      "title":      "رمزنگاری اطلاعات درمانی چیست؟",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2015-11-05 00:00:00 +0000",
      "tags":       [],
      "categories": ["security"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"رمزنگاری اطلاعات درمانی چیست؟\"\ndate: 2015-11-05\ncategories: security\nimage: assets/article_images/encryption/encryption.jpeg\n\n---\nوقتی در مورد امنیت سیستم‌های اطلاعاتی صحبت میکنیم منظورمان سه عنصر پایه امنیت اطلاعات یعنی\n\n+ محرمانگی (Confidentiality)\n\n\n+ یکپارچگی (Integrity)\n\n+  در دسترس بودن (Availability)\n\nمیباشد  .\nرمزگذاری اطلاعات با کاهش در دست بودن اطلاعات باعث افزایش محرمانگی می‌شود  و از طرفی میتواند باعث کاهش یا افزایش یکپارچگی شود .\n\nرمزگذاری اطلاعات در صنعت درمان به دلیل حجم بالایی از اطلاعات هویتی بیماران ( phi یا personal health information )  از اهمیت بالاتری برخوردار است .\n\nابتدا تعریف دقیق رمزگذاری میپردازیم :\n\n>در علم رمزنگاری رمزگذاری عبارت است از رمزگذاری پیام یا اطلاعات به صورتی که تنها گروه‌های مجاز به آن دسترسی داشته باشند [1]\n\nرمزنگاری مطالعه رمزگذاری و الگوریتم های رمزگذاری است . در‌واقع رمزنگاری تبدیل پیام از حالت قابل درک ( clear text) به حالت غیر قابل درک (cipher text ) و برعکس است . هدف از رمزگذاری تبدیل داده‌ها به حالتی است که استراق سمع کننده یا کسی که رمز را ندارد نتواند داده‌ها را بخواند . رمزگداری برای امن سازی ارتباطات است . رمزنگاری تکنیک مورد استفاده در رمزگذاری را تعریف میکند\n\nاز الگوریتم های معروف رمزنگاری میتوان md5 , SHA,RC4,RC5,Blowfish  را نام برد .\n\nحال به تعریف رمزنگاری اطلاعات درمانی میپردازیم :\n>رمزنگاری داده‌های بهداشتی شکلی از امنیت داده است که در آن سوابق الکترونیکی پزشکی ( EHR ) به اطلاعاتی مبدل می‌شوند که کاربر غیر مجاز قابل به خواندن یا درک آن نیست [2]\n\nبا توجه به لود بالای اطلاعات توسط مراکز درمانی این کار یعنی رمزنگاری باید به سرعت انجام بشود و از امنیت بالایی برخوردار باشد که شامل دو معقوله رمزنگاری ارتباطات و اطلاعات می‌شود\n\n![HITECH RULES](assets/article_images/encryption/vormetric-protects-ePHI-2015-0311.png \"Logo Title Text 1\")\n\nرمزنگاری ارتباطات : علاوه بر ایزوله بودن شبکه بیمارستان یا مرکز درمانی توسط VLAN و دیوارآتش به دلیل دوری فیزیکی تکنسین های فنی ریموت سرور امری معمول میباشد  در صورتی که در این ارتباط از روش نا امن همانند telnet استفاده شود که به سادگی قابل رمزگشایی است امنیت دستگاه‌ها متصل به شبکه ممکن مختل شود زیرا با استفاده از حمله MITM  به راحتی میتوان اقدام به تفسیر اطلاعات رد و بدل شده کرد .\nهمچنین استفاده از پرتکول ftp نیز برای جا به جایی فایل‌ها میتواند منجر به رخنه های امنیتی شود .\nدر هردو صورت استفاده از ssh و sftp میتواند به صورت قابل ملاحظه ای ریسک شنود ارتباط یا sniffing را به حداقل برساند .\n\nرمزنگاری داده :\nموردی که کمتر در مراکز درمانی به آن اهمیت داده می‌شود رمزنگاری داده است . در سال ۲۰۰۹ تنها دو ایالت آمریکا اقدام به رمزنگاری داده‌های درمانی خود پرداختند که تنها در زمان پنج ماهه ای که HITECH اقدام به فعالیت کرد در ایالت کالیفرنیا  حدود ۸۰۰ مورد نقض اطلاعات شخصی بیماران رخ داده بود .\nاین از نظر اهمیت دارد که بدون داشتن یک سیستم گزارش دهی و رمزنگاری حتی در صورت دسترسی غیرمجاز متوجه آن نخواهیم شد .\n\nبرای رمزگذاری file system لینوکس به صورت درون کار  توسط فرمت ext4 پشتیبانی می‌شود . در ویندوز تنها فرمت NTFS  توسط EFS  پشتیبانی می‌شود . که هرکدام دارای معایب و فواید مختص به خود هستند .\n\nاین مقاله در هفته‌های آینده به روز رسانی خواهد شد\n\nمنابع :\n1- \"What is Encryption? | EFF Surveillance Self-Defense Project.\" What is Encryption? | EFF Surveillance Self-Defense Project. Surveillance Self-Defense Project, n.d. Web. 03 Nov. 2014. <https://ssd.eff.org/en/module/what-encryption>.\n2- https://www.techopedia.com/definition/25054/health-care-data-encryption\n"
    },{
      "id":         "/zconf6",
      "url":        "/zconf6.html",
      "image":      "assets/article_images/zconf6/behrooz-hasanbeygi1.jpg",
      "title":      "زیکانف ",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2015-09-18 00:00:00 +0000",
      "tags":       [],
      "categories": ["zconf"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"زیکانف \"\ndate: 2015-09-18\ncategories: zconf\nimage: assets/article_images/zconf6/behrooz-hasanbeygi1.jpg\n\n---\n با تشکر از برگزار کننده های زیکانف یه ایونت خیلی خوب رو تو زنجان داشتیم .\nراستش به دلیل کمبود وقت در ارائه نتونستم خیلی از موراردی رو که میشد مطرح کنم رو مطرح کنم . امیدوارم که یه انگیزه و علاقه ای بین برنامه نویس های خوبی که داریم نسبت به فیلد مدیکال و نرم افزار آزاد و متن باز در این زمینه ایجاد کرده باشم  . حداقل در این مورد مطمعنا جواب جای دیگری پیدا نخواهد بود . در مقاله ام به تفصیل گفته ام که چرا نرم افزار آزاد و متن باز در حوزه سلامت ولی اینجا هم به نظرم بهتره این سوال رو مطرح کنم که چرا و جواب رو با توجه به حرکت هایی که در جهان انجام شده برسی کنیم :\n\n+ وزارت بهداشت جامایکا از سال ۲۰۱۱ از گنو هلث به عنوان HIS بیمارستان خود استفاده میکند . با توجه به رویکرد بهداشتی و درمانی در GNUhealth که به تفصیل در مقاله تاثیر نرم افزار آزاد و متن باز بر فناوری اطلاعات سلامت بیان شد میتوان گفت HIS جامایکا رویکرد بهتری درباره نگاه کردن به وضعیت سلامت بیماران نسبت به HIS های موجود در  ایران دارد :)\n\n+ در سال ۲۰۱۱ وزارت بهداشت برزیل اقدام به مهاجرت به سمت استفاده از توزیع ردهت لینوکس انجام داد . وزارت بهداشت برزیل این اقدام خود را به دلیل بالابردن امنیت و افزایش بهره وری و سرعت پردازش اطلاعات اعلام کرد .\n\n+ در سال ۲۰۱۲ ایالت اراگون اسپانیا اقدام به مهاجرت به سمت استفاده از گنو/لینوکس ردهت انجام داد . دلیل این اقدام را افزایش کارایی و بهبود زیر ساخت های فناوری اطلاعات در حوزه سلامت اعلام شد\n\n+ به عنوان یک سازمان پیشرو در زمینه فناوری اطلاعات سلامت NHS در کشور انگلستان اقدام به سرمایه گذاری کلانی روی پردازش بیگ دیتا انجام داده از این دست برنامه ها میتوان به استفاده از Riak و Riak 2 اشاره کرد که توسط شرکت basho توسعه پیدا میکنند\n\n+ بعد از مدتی با توجه به نیاز های درمانی محیط توسعه یکپارجه spine 2 که وظیفه مدیریت ارتباط بین کلاینت ها و بیماران و مراکز درمانی را بر عهده دارد نیز به صورت متن باز توسط NHS گسترش پیدا کرده این مفهوم از این نظر اهمیت دارد که به شدت روی یکپارچه کردن سرویس ها تمرکز دارد . ارتباط کلاینت ها بیماران و پردازش اطلاعات و ایجاد قوانین و مدیریت کردن سطوح دسترسی امنیت اطلاعات همه و همه به صورت یکپارچه درون یک محیط یکپارچه موجه انجام میشود\n\n\n\n[دریافت مقاله تاثیر نرم افزار آزاد و متن باز بر فناوری اطلاعات سلامت ]({{ site.url }}/book/effect-of-foss-on-healthcare.pdf)\n\n\n\n"
    },{
      "id":         "/the-road-not-taken",
      "url":        "/the-road-not-taken.html",
      "image":      "assets/article_images/matrix/matrix.jpg",
      "title":      "مسیر کم گذر",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2015-09-09 00:00:00 +0000",
      "tags":       [],
      "categories": ["life"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"مسیر کم گذر\"\ndate: 2015-09-09\ncategories: life\nimage: assets/article_images/matrix/matrix.jpg\n\n---\n\nگاهی اوقات به شیوه برخورد آدما با وقایع و مسائل فکر میکنم . یه عده رد میشن یه عده حل میکنن یه عده درون میارن پرداخت میکنن و یه با یه ملغمه از احساس و تشویش و عقل  سعی میکنن یه ذاویه متفاوت رو ببینن .\n بنا به تجربیاتی که داشتم هر کدوم از روش‌های بالا رو بنا به شرایط و آدم‌های مختلف مؤثر میدونم . یعنی برتری ذاتی بین سه روش وجود نداره . برخلاف پست قبلیم که هجوی بر شرایط احساسی و عقلانی جامعه بود اینجا میخوام از مسیر بگم .\n\nمن از نوع سوم هستم . نیازی نداره بگم که به عنوان یه انسان با اعتماد به نفس بالا مسیر خودم رو متفاوت میدونم و خب جار زدن این موضوع باعث شده اذیت بشم . آدم‌ها اصولاً تواضع ذاتی رو دوست دارن و اگه شما فاقد این تواضع باشید براتون بد خواهد شد .\nبه هر حال در مورد مسیر چند تا سؤال وجود داره . چجور به وجود میاد ؟    چجور منشعب میشه ؟ و چجور طی میشه\n\nمن فکر میکنم ( پس هستم ) مسیر از مقصود به وجود میاد و مقصود چیزی بالاتر از هدف هستش . انسان‌های معمولی برای مقصود عبارت عامیانه فاز رو به کار میبرند .\n مقصود آن ناخوداگاهی که پس هر اراده ای از ما وجود داره و ذاتی هستش . میل به کمال گرایی پیشرفت و بهترین بودن از همین مقصود میاد . هدف‌ها در طول همین مقصود به وجود میان به میتونن کوتاه مدت یا بلند مدت باشن ولی در نهایت به بکدیگر متصل هستن .\n جهان به همدیگه متصل هستش و هر تغییری جایی دیگه خودش رو نشون میده  و در تصمیم هایی که میگیرین حباب این مقصود رو دور خودتون معین تر میکنید .\n\nانشعاب چه زمانی رخ میده : من برخورد با  آدم هارو مهم‌ترین فاکتور زندگی میدونم . وقتی حباب مقصود معین میشه یعنی شما در مسیر قدم برمیدارید . در همون ابتدا که من فرضش رو مثلاً ۱۴ یا ۱۵ سالگی میزارم این شما نیستید که فکر میکنید . شما فقط فکر رو میپذیرین. بزارید مثال بزتم\n\nوقتی ۱۵ ساله بودم هر تفکری و اندیشه‌ای برام جذاب بود و  من رو حیرت زده میکرد . نه نقدی وجود داشت و نه فکری . فقط شیفتگی بود .\n\nولی برخورد با آدم‌ها دیدن تفاوت‌ها کسب کردن تجربه باعث محک زدن شما در عرصه عمل میشه و در بین راه چون مقصود شما فرق میکنه و دنیای شما رو اندیشه‌هایی دیگه شکل میده خود به خود جذب چیزهایی میشین که آدمایی از قماش شما دوست دارن و اینجوری هستش که جامعه هدف خودتون رو پیدا میکنید و اینجوری عمیق‌تر و عمیق‌تر میشین\n\nمسیر چگونه طی میشه :\n\n در ابتدای شکل‌گیری و مستقل شدن شما این فاز شما هستش که متغیر هست . خسرو در کتاب ادبیات دبیرستان رو فرض کنید . کشتی گیری که هم ورزش و هم درس رو دوست داشت ولی در ورطه اعتیاد افتاد چون مسیر پر از کوره راه‌های خطرناک و انتخاب های اشتباه است\n\n صحنه معروف ماتریکس رو برای انتخاب به یاد بیارین که نئو باید بین دو قرص آبی و قرمز یکی رو انتخاب کنه.این انتخاب های ما هستش که باعث میشه چگونه مسیر رو طی کنیم . گاهی مثل نئو بنیادی هست گاهی تصمیمات کوچکی در زندگی مثل اینکه این لینک وبسایت رو باز کنم یا فلان کتاب رو بخونم .\n\nدر مورد خوبی یا بدی مقصود های مختلف صحبت نمیکنم . پیش میاد مقصود کسی رسیدن به آرامش هست و هدف‌های خودش رو جوری میچینه که به این آرامش برسه ولی در بین راه مجبور میشه که تغییر کنه و این تغییر برای زنده ماندن در شرایط سختی که ناخواسته پیش میاد .\nحقیقت گاهی سخت و تلخ . بسیاری آدم‌ها ممکنه در مقابله با این حقیقت زندگی آرمان خودشون رو فراموش کنن . مخصوصاً افراد باهوش که آینده رو از تصمیمات حال میدونن پس رویه دیگری رو پیش میگیرن و البته موفق خواهند شد با معیار های موفقیت .\nجامعه شناس  و روانشناس ها رو مثال میزنم قشری که به خوبی از رذیلت های اخلاقی و اجتماعی خبر دارند ولی از اون ها به نفع خودشون استفاده نمیکنن و اگر استفاده کنن مطمعن باامعیار های موفقیت مثل پول و جایگاه اجتماعی پیشرفت خواهند کرد .\n\nدر انتهای مطلب میخوام توجتون رو به این شعر از رابرت فارست جلب کنم  . که ای کاش مطلب من به خوبی این شعر میتونست معانی رو برسونه ولی …\n\n>در مقام رهگذر مدت ها ایستادم\n>\n>تا در حد ممکن ببینم این دو در کجا منشعب می‌شوند\n>\n>آنگاه به راهی دیگر به همان زیبایی نگاه کردم\n>\n>و شاید بتوان گفت که این راه بهتر بود\n>\n>زیرا علف با پوشش سبزش منظره دلنشینی را به وجود آورده بود\n>\n>در آن صبح، برگها بطور یکنواخت بر روی هر دو مسیر آرام گرفته بودند\n>\n>که نشان می داد هنوز کسی بر روی آنها قدم نگذاشته است\n>\n>آه، من اولی را برای روزی دیگر نگاه داشتم\n>\n>گرچه می دانستم که چگونه یک راه به راهی دیگر منتهی می شود\n>\n>و تردید داشتم که می توانم از آن باز گردم\n>\n>من با آه و حسرت از این مطلب یاد خواهم کرد\n>\n>در جایی که قرنها و فرسنگها با اینجا فاصله دارد:\n>\n>دو جاده جنگلی از هم جدا می شدند، و من…\n>\n>من جاده ای را که کم گذر بود برگزیدم\n>\n>و تمام تفاوت ها ناشی از این انتخاب بود.\n"
    },{
      "id":         "/why-you-should-not-be-good",
      "url":        "/why-you-should-not-be-good.html",
      "image":      "assets/article_images/life/choice.jpg",
      "title":      "در ستایش بد بودن",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2015-09-03 00:00:00 +0000",
      "tags":       [],
      "categories": ["life"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"در ستایش بد بودن\"\ndate: 2015-09-03\ncategories: life\nimage: assets/article_images/life/choice.jpg\n\n---\n\nهمه ما چیز هایی رو در ناخودآگاه خودمون به عنوان خوب و بد داریم . تعالیم مذهبی و فرهنگ قومی و قبیله‌ای و داستان‌های حماسی و اساطیری آموزنده در مورد جوان مردی و بخشندگی و ایثارگری و …\nولی آیا برای زنده ماندن در دنیای واقعی این خوبی‌ها  خوب هستش  خب من میگم نه . اگه به دنبال رضایت و خوشحالی از روابط و خودتون هستین این ده نکته رو رعایت کنید\n\nیک\n\n>درک کردن با فهمیدن خیلی فرق میکنه .  تو دعوا ها حرفای منطقی نزنید  خب طرف داره باهات دعوا میکنه دلیل و مدرک نمیفهمه که\n\nدو\n\n>به شخصه میخوام جوری رفتار کنم که رفتار x منجر به رفتار y بشه ولی آدما اینجوری نیستن که یه طرفه بشه کنترلشون کرد با حرف و منطق\n\nسه\n\n>جنگ درونی با دشمن درونی اغلب منجر به شکست . پس با خودتون نجنگید ( ما که جنگیدیم به کجا رسیدیم ؟ )\n\nچهار\n\n>سعی نکنید با بقیه همزاد پنداری کنید . یا طرف رو تو پارادایم خودش تفسیر کنید . با معیار های جامعه با آدما رفتار کنید نه خودتون\n\nپنج\n\n>یا رومی روم باشید یا زنگی زنگ . زندگی جایی برای آدم هایی که سعی دارن تعادل برقرار کنن نیست\n\nشش\n\n>فکر نکنید . اگه فکر میکنید بیان نکنید . اگه بیان کردین جار نزنین . اگه جار زدین به فنا رفتین\n\nهفت\n\n>نبخشیدن بهتر از بخشیدن . اگر بخشیدین…. اشتباه دیگران رو ببخشین . اگه به خاطر کار اشتباه دیگران عذرخواهی میکنید به فنا رفتین\n\nهشت\n\n>زیاده خواه باشید . قناعت و به حق خود قانع بودن درد هیچکس دوا نکرده . مصرف گرا باشید و بیشتر از نیاز خودتون خرید کنید\n\nنه\n\n>در زنجیره نیاز های انسان . هنر و فلسفه و دانش در بالاترین قله هرم وجود . اول به فکر نیاز های ابتدایی خود باشید مثل پوشاک مسکن و نیاز های جنسی\n\nده\n\n>حتی اگه تو ذهنتون بازی ماریو در حال اجرا مرموز به نظر برسید . هیچگاه نزارین کسی از اهداف یا مقاصدتون خبردار بشه\n\n\n\nدر نهایت زندگی به سادگی تصمیم های دو دو تا چهار تا نیست . انسان‌های اهداف مختلفی رو دنبال میکنن و در این جامعه اغلب آدم‌ها هدفی مثل شمارو دنبال نمیکنن . شاید بیان نمیکنند ولی از شما و اهداف شما متنفر هستند. از فضای فکری شمایی که نشستی و داری این پست بلاگ من رو میخونی در نهایت آخرین صحبتم این هستش :\n\n>اعتماد یعنی خیانت\n"
    },{
      "id":         "/cordova-installation",
      "url":        "/cordova-installation.html",
      "image":      "assets/article_images/cordova/cordova-logo.png",
      "title":      "اپاچی کوردوا ",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2015-08-27 00:00:00 +0000",
      "tags":       [],
      "categories": ["development"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"اپاچی کوردوا \"\ndate: 2015-08-27\ncategories: development\nimage: assets/article_images/cordova/cordova-logo.png\n\n---\n\n\n\n\nمن برنامه نویس خوبی نیستم ( راستش بخوام بگم اصلاً برنامه نویس نیستم )  بخاطر همین معمولاً سعی میکنم با اسکریپت و کد ور برم تا با استرینگ و و متغیر و کانکارنسی و این حرفا . همون طور که میدونید زبان پیشفرض برنامه نویسی اندروید جاوا هستش البته به لطف NDK هم میشه از زبان‌های c و ++c تو پروژه استفاده کرد ولی کیه که همچین زحمتی به خودش بده . به هر حال گوگل داره روی جایگزین کردن این زبان با golang فکر میکنه که البته فکر خوبی هم هستش البته من ترجیح میدادم ruby باشه ولی خب همیشه همه چیز اونجوری پیش نمیره که ما میخوایم .\nداشتم میگفتم که با توجه به علاقه بی حد و حصر  به توسعه وب من بیشتر با پلتفرم های مختلف این قضیه کار میکنم یعنی وقتی پایتان کار میکنم معمولاً دور ور flask میچرخم چون ساده است . و اصلاً سمت django نمیرم . بخاطر همین تو توسعه اندروید هم ترجیح میدم بیشتر با خط فرمان و اسکریپت ور برم تا اینکه پشت Android Studio وقت طلف کنم .\n\nیه مشکلی که اکثر زبان‌های برنامه نویسی دارن این هستش که نمیشه بدون دستکاری کد منبع برنامه رو بین پلتفرم های مختلف جا به جا کرد . خب ابزار هایی به وجود اومدن که این کارو انجام بدن ولی تا حال حاضر به جز ++c استاندارد و golang من همچین قابلیت تو زبان‌های دیگه ندیدم .\nخب راه حل چیه . یه برنامه ننویس مثل من ترجیح میده از cordova استفاده کنه که یه برنامه توسعه یافته توسط آپاچی هستش تا وب اپلیکیشن های مارو که با html و جاوا اسکریپت نوشتیم بویلد کنه . البته پروژه های جانبی مثل phonegap و ionic هم در کنارش توسعه پیدا میکنه که اون ها هم جالب هستن ولی باز از هسته cordova استفاده میکنن .\n\nخب برای نصب cordova ما به چند چیز احتیاج داریم من فرض میزارم اینکه سیستم عامل شما لینوکس دبیان بیس هستش البته که میتونید همه این مراحل در توزیع‌های دیگه هم اجرا کنید\n\nدر ابتدا کافیه nodejs و npm رو دریافت کنید\n\n{% highlight bash %}\nsudo apt-get install nodejs npm\n{% endhighlight %}\nسپس بر اساس مستندات کوردوا کافیه در ترمینال این دستور رو وارد کنیم تا اخرین نسخه دانلود بشه\n{% highlight bash %}\nnpm install -g cordova\n{% endhighlight %}\nخب تا اینجای کار همه چیز به خوبی و خوشی انجام شده . قسمت بد ماجرا تحریم های ظالمانه گوگل علیه دولوپر های عزیزمون هستش . پس با یه تغییر ip که انجام میدین google sdk manager رو دریافت میکنید فقط به دلیل جلوگیری از ارور های بعدی لطفا اخرین نسخه android sdk platform tools و android sdk build tools بعلاوه android 22 و 23 رو دریافت کنید . به دلیل اینکه راه های زیادی برای دریافت sdk manager هست در این مورد زیاد توضیح نمیدم . فقط یادتون باشه همه چیز باید آپدیت باشه . بخاطر همین به یه اینترنت خوب نیاز دارید\nبعد از نصب sdk manager و مشتقاتش حالا نیاز که اون رو به PATH سیستم بشناسونیم . برای من که از zsh استفاده میکنم کافیه در قسمت  <code>/home/<user>/.zshrc</code> قرار بدین و برای bash که اکثر کاربرا استفاده میکنن کافیه در همین مسیر <code>.bashrc</code> این رو قرار بدین کافیه تایپ کنید\n{% highlight bash %}\nnano /home/username shoma/.bashrc\n{% endhighlight %}\nو سپس این هارو به اخرش اضافه میکنیم\n{% highlight bash %}\nexport PATH=$PATH:/home/<user>/Android/Sdk/tools\nexport PATH=$PATH:/home/<user>Android/Sdk/platform-tools\n{% endhighlight %}\nسپس کد <code>source /home/<user>/.bashrc</code> رو وارد کنید تا پروفایل شما ری استارت بشه\nالبته توجه کنید که sdk manager من در دایرکتوری Android/sdk قرار داره که احتمالا با شما متفاوت هستش پس ادرس خودتون باهاش عوض کنید\nسپس اقدام به نصب jdk میکنیم\n{% highlight bash %}\nsudo apt-get install openjdk-8-jdk\n{% endhighlight %}\nلازم هستش که java رو هم به سیستم شناسونده بشه پس با دستور\n{% highlight bash %}\nsudo gedit /etc/environment\n{% endhighlight %}\nو  قرار دادن این کد\n{% highlight bash %}\nJAVA_HOME=\"/usr/lib/jvm/java-8-openjdk-amd64\"\n{% endhighlight %}\nکه البته بازم بنا به معماری سیستم شما این ادرس میتونه متفاوت باشه . سپس کافیه کد <code>source /etc/environment</code> رو وارد کنید تا شناسونده بشه\nحالا اگه همه چیز خوب پیش رفته باشه باید با زدن همچین کد هایی برنامه سمپل hello کوردوا بویلد بشه\n{% highlight bash %}\ncordova create hello com.example.hello HelloWorld\ncd hello\ncordova platform add android\ncordova build android\n{% endhighlight %}\nاگر که بویلد شد خوب و اگر نشد ارور ها شامل دوتا ارور عمده میشه ارور اول exit code 2 هست که به خاطر اپدیت و نصب نبودن sdk manager و android target 22 هستش . ارور exit code 8 زمانی به وجود میاد که در سیستم 64 بیتی مفسر سیستم 32 نباشه که با وارد کردن دستور زیر در ترمینال حل میشه\n{% highlight bash %}\nsudo apt-get install lib32stdc++6\nsudo apt-get install lib32z1\n{% endhighlight %}\nبه دلیل کند بودن امولاتور اندروید من استفاده از genymotion رو به شدت توصیه میکنم\nمن عادت به نوشتن همچین متن های بلند نصب و توسعه ندارم . اگه سوالی داشتید میتونید از تویتر یا گیتهابم یا ایمیلم که توی قایل کانفیگ بلاگ هست اقدام کنید\n"
    },{
      "id":         "/how-many-users-use-default-password",
      "url":        "/how-many-users-use-default-password.html",
      "image":      "assets/article_images/modem/modem.jpg",
      "title":      "یکم امنیت ",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2015-07-29 00:00:00 +0000",
      "tags":       [],
      "categories": ["featured"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"یکم امنیت \"\ndate: 2015-07-29\ncategories: featured\nimage: assets/article_images/modem/modem.jpg\n\n\n---\n\n\nاون روز یه یهو به سرم زد ببینم چه تعدادی از کاربرایی که تو رنج ip من هستن از رمز پیشفرض مودمشون که من admin در نظر گرفتم استفاده میکنند .\nبرای شروع آخرین بویلد برنامه angry ip scanner رو از [اینجا](http://angryip.org/download/#linux \"angry ip scanner\") دانلود کردم .\n\nخب کامند ip addr ای پی که سویچ/روتر شما بهتون داده رو نشون میده برای پیدا کردن public ip میتونین از کامند\n\n{% highlight ruby %}\nwget http://ipecho.net/plain -O - -q ; echo\n{% endhighlight %}\nاستفاده کنید یا از سایت هایی که public ip استفاده کنید .\n\nتو قدم بعدی رنج ای پی که میخواین اسکن کنید رو مشخص کنید میتونین از  [این](\"http://www.subnet-calculator.com\" ) ابزار استفاده کنید .\n\nبعد از اینکه اسکن تمام شد کافیه از قسمت <code> tools >selection>alive host </code> ای پی ها رو انتخاب کنید و از قسمت <code>scan>export selection </code> تو یه فایل متنی ذخیرشون کنید\nدر قدم بعدی نیاز هستش که رمز admin رو روی تمامی live ip ها تست کنیم .\n\nبرای این کار از ابزار قدرتمند thc hydra استفاده میکنیم . که تو مخازن دبیان و ابونتو به راحتی\n<code> sudo apt-get install hydra </code>\nدر دسترسه .\n\nالبته میتونین به وسیله nmap قبلش یه چکی از ای پی ها بکنید\n\nبعد از نصب hydra کافیه یه نگاهی به صفحه منوالش بندازیم حالا خیلی راحت\n\n> hydra -l admin -p admin -v -M /home/yourname/hosts.txt http-head\n\nبعد از به دست اومدن نتیجه هم میتونید با spss یه امار درست حسابی تحویل بدین .\n\n نمیتونم آماری رو که به دست اوردم رو به دلایلی  منتشر کنم ولی وضعیت خوبی نبود . امیدوارم بقیه سرویس دهنده وضع بهتر باشه\n\nراستی\n\n> قبل از هر کاری فکر کنید . حتی کد زدن\n"
    },{
      "id":         "/young-man-stand-on-horizon",
      "url":        "/young-man-stand-on-horizon.html",
      "image":      "assets/article_images/shariati/shariati.jpg",
      "title":      "مرد جوانی که در افق قرار داشت ",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2015-07-27 00:00:00 +0000",
      "tags":       [],
      "categories": ["featured"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"مرد جوانی که در افق قرار داشت \"\ndate: 2015-07-27\ncategories: featured\nimage: assets/article_images/shariati/shariati.jpg\n\n\n---\n۱۶ سالم بود همه چیز تلخ بود . همه چیز نا امید کننده . نه امیدی برای تغییر وجود داشت نه خودم رو مرد تغییر اوضاع میدیدم . حتی یه وصیت نامه هم نوشته بودم که بعدتر ها پیدا شد و دستمایه خنده خانواده قرار گرفت .\nبه یاد اوردن این ها  از کجا شروع شد  خب یه خاطره ای از سوسن شریعتی دیدم که میگفتن پدر بزرگوارشون دکتر علی شریعتی یک بار در ۱۵ سالگی و یکبار در جوانی قصد خودکشی داشتن\nراستش اندیشه هم یه موهبت هستش هم یه عذاب که باعث میشه هیچوقت از زندگی همون طوری که بقیه لذت میبرند لذت نبری .\nراستش تا حدودی دوگانگی شریعتی رو درک میکنم . تو اون آشفته بازار اندیشه ها سعی میکرد مسیری رو پیدا کنه برای رسیدن به اتوپیا خودش اگرچه فرمول یکسانی برای همه وجود نداشت ولی با تمام وجودم مطمعا هستم برای رسیدن به حقیقت تلاش کرد.\nو اما دکتر شفیع کدکنی چه خوب میگه :\n>گه ملحد و گه دهری و کافر باشد،\nگه دشمن خلق و فتنه پرور باشد،\nباید بچشد عذاب تنهایی را،\nمردی که ز عصر خود فراتر باشد،\n"
    },{
      "id":         "/what-happen-to-us",
      "url":        "/what-happen-to-us.html",
      "image":      "assets/article_images/kapskhol/kapskhol.jpg",
      "title":      "ما را چه شده است ؟",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2015-07-27 00:00:00 +0000",
      "tags":       [],
      "categories": ["featured"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"ما را چه شده است ؟\"\ndate: 2015-07-27\ncategories: featured\nimage: assets/article_images/kapskhol/kapskhol.jpg\n\n---\nهمه چیز از اونجایی شروع شد که یکی از کاربران تویتر برای [قتل پزشک اردبیلی دکتر پیرزاده ](http://www.irna.ir/fa/News/81692430/)  نوشت\n\n<blockquote class=\"twitter-tweet\" lang=\"fa\"><p lang=\"fa\" dir=\"rtl\">7سال عمومی خونده&#10;4سال تخصص&#10;4سال فوق تخصص&#10;=15 سال!&#10;بعد شده فوق تخصص سرطان شناسی،&#10;اونوخت یه عده میخوان حقوقش با یه کارگر مساوی باشه!!&#10;<a href=\"https://twitter.com/hashtag/%D9%BE%DB%8C%D8%B1%D8%B2%D8%A7%D8%AF%D9%87?src=hash\">#پیرزاده</a></p>&mdash; سالار گوهر آگین (@inlovewithiran) <a href=\"https://twitter.com/inlovewithiran/status/624513076008718336\">جولای 24, 2015</a></blockquote>\n<script async src=\"//platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n\nکه خب برای من به عنوان یه انسان سخت بود شنیدن که خب چون کسی سال های بیشتری تحصیل کرده حقش هست که پول بیشتری دریافت کنه و البته کارگر ها به عنوان یکی از تاثیر گذار ترین مهره های اقتصادی جامعه که چرخ سازندگی رو میچرخونن با این دیدگاه هم کارشون از نظر اجتماعی و اقتصادی کم اهمیت نشون داده میشه .\nمنظور من چیزی نیست که در جامعه اتفاق میفته خب همه ما میدونیم جامعه به شدت طبقاتی پول پرست و مصرف گرایی داریم  منظور من این هستش که چرا یک فرایند غلط برای ارزش گذاری ها توسط   جامعه مقبول قشری میشه که خودشون رو تحصیل کرده میدونند . یعنی علم به کنار فرهنگ هم به کناری . آیا باید با واقعیتی مثل فساد کنار بیایم و در کنارش زندگی کنیم ؟\nدر هیچکدام از ادیان و مذاهب و در هیچ اخلاقی معیار برتری انسان هارو پول و مدرک دانشگاهی قرار ندادند چرا جامعه ما و مخصوصا قشر متخصص و البته جاوانانی که تازه وارد دانشگاه میشن معیار رو اشتباه میگیرن . بله اشتباه حتی در نسبیت گرا ترین ایده هم صرف پول پرستی و مادیات طلبی اشتباه\nبه یاد بیاریم که در وحله اول ما  انسان هستیم  و  چه خوب میگه سعدی خوش کلام که :\n\n>تو کز محنت دیگران بی غمی چه شاید که نامت نهند آدمی\n\n[پیرمرد کپس خول فروش / عکاس عباس عزیز پور ](http://goo.gl/GhmX4V)\n"
    },{
      "id":         "/what-is-hit",
      "url":        "/what-is-hit.html",
      "image":      "assets/article_images/podcast/podcast.jpg",
      "title":      "فناوری اطلاعات سلامت چیست",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2015-07-22 00:00:00 +0000",
      "tags":       [],
      "categories": ["featured"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"فناوری اطلاعات سلامت چیست\"\ndate: 2015-07-22\ncategories: featured\nimage: assets/article_images/podcast/podcast.jpg\n\n---\nراستش  همیشه اولین سوالی که در مورد رشته ام ازم پرسیده میشه اینه که رشته شما چی هستش برای اینکه کار خودم راحت کنم مختصری تو این پادکست در مورد اینکه رشته فناوری اطلاعات سلامت چی هستش توضیح میدم\n\n<iframe width=\"100%\" height=\"300\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/215822080&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;visual=true\"></iframe>\n\n\nاهنگ : the trooper- iron maden\n\n<a href=\"https://www.dropbox.com/s/r9u3uz24jtss5hv/hit-podcast.mp3?dl=0\"> دریافت پادکست از دراپ باکس</a>\n"
    },{
      "id":         "/iam-from-diffrent-generation",
      "url":        "/iam-from-diffrent-generation.html",
      "image":      "assets/article_images/palet/palet.jpg",
      "title":      "من از نسل دیگری هستم",
      "author":     "Behrouz Hasanbeygi",
      "date":       "2015-05-25 00:00:00 +0000",
      "tags":       [],
      "categories": ["featured"],
      "content":    "---\nlayout: post\ncomments: true\ntitle: \"من از نسل دیگری هستم\"\ndate: 2015-05-25\ncategories: featured\nimage: assets/article_images/palet/palet.jpg\n\n---\n\nمن از نسل دیگری هستم\n\nدکتر شریعتی در سخنرانی معروف خود  پدر و مادر ما متهم هستیم از نسلی میگوید که دغدغه های آن چیزی ورای جامعه سنتی آن زمان است و رسالت هم نسلان خود را  احیای ان چیزی که خود رفرمیست مذهبی نام میگذارد میداند . اگر به متولدین دهه ۳۰ و ۴۰ برگردیم اغلب آرمان های اینان را انقلاب رفع ظلم و نابرابری از بین بردن فاصله طبقاتی و کمک به فرودستان و قطع کردن دست استعمار از منابع و ثروت های این سروزمین است . متولدین دهه ۵۰ اما درگیر دار جنگ و مشکلات آن پدران و مادرانی آرمان خواه داشتند و در فضایی که تفکرات در جامعه هنوز بایکوت نشده بود سیر میکردند . نشریاتی مثل دانستنیها و کتاب های ارتور سی کلارک و ایزاک اسیموف در زمان خود بین این نسل طرفدار زیادی داشت  شاید از این نسل و نسل دهه ۴۰ بتوان به عنوان مدیران اجرایی کشور اسم برد . اما  اثرات جنگ و سرخوردگی های آن و کمبود ها در متولدین دهه ۶۰ ظهور میکند . نسلی عصیانگر که تحت تاثیر مطبوعات آن زمان که  دست به ایجاد جنبش های دانشجویی میزند اما به سرعت سرخورده مایوس میشود . مشکلات اجتماعی و بیکاری . مواد مخدر و الگو های اشتباه این نسل باعث میشود که از آن ها به عنوان نسل سوخته نام برده شود.\n\nو اما نسل من . ما از نسلی هستیم که نه دغدغه سیاسی دارد و نه آرمانی دارد . شعار های نسل های قبلی را شنیده و عمل نکرده  و بزرگ شده دست پدران و مادرانی است که میگویند سرت به کار خودت باشد . نسل من نسلی است که اندیشه را خوار و خفیف میداند به معمولی بودن خود افتخار میکند و الگو ها و آرمان های آن خواننده ها و شومن هایی هستند که یک شبه ره صد ساله پیموده اند. اگر در گذشته فخر فروشی و کشیدن رخ مال و پول زشت ناپسند بود اما هم نسلان من محبوب بودن را در ماشین شاسی بلند و حساب های بانکی آن چنانی میبینند .\nعلم و دانش و فرهنگ برای نسل من حکم کالای بی ارزشی را دارد که فقط برای بعضی ها خریدار دارد . اگر در نسل های گذشته علم آموزی روشی برای رسیدن به شغل مناسب بود و دانشگاه محلی برای آن بود امروز ولی با رشد قارچی شکل دانشگاه های خصوصی آزاد و پیام نور و کیفیت پایین دانشگاه های سراسری مدرک تنها گزینه مثبتی است برای ازدواج   به جز اندک رشته های علوم پزشکی مانند دندان پزشکی و داروسازی و پزشکی که باز هم علت محبوب بودن آن ها شغل تضمین شده ان میباشد\n"
    }]
