<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های نیما</title>
        <link>https://virgool.io/feed/@iw4p</link>
        <description>اومدم چند کلمه ای بنویسم زود برم. گیت‌هابم Github.com/iw4p</description>
        <language>fa</language>
        <pubDate>2026-04-15 09:46:06</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/12155/avatar/JqXUEQ.jpeg?height=120&amp;width=120</url>
            <title>نیما</title>
            <link>https://virgool.io/@iw4p</link>
        </image>

                    <item>
                <title>دانلود از تورنت با ۳ خط پایتون</title>
                <link>https://virgool.io/@iw4p/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D8%A7%D8%B2-%D8%AA%D9%88%D8%B1%D9%86%D8%AA-%D8%A8%D8%A7-%DB%B3-%D8%AE%D8%B7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-fhch6kpnx362</link>
                <description>سلام. خیلی وقت بود توی ویرگول چیزی ننوشته بودم D:چند وقت پیش دنبال یه راهی میگشتم که بتونم توی پایتون از تورنت دانلود کنم. بر فرض من یک فایل تورنت دارم یا اصلا یه مگنت لینک پیدا کردم میخوام در سریع ترین حالت ممکن دانلودش کنم، بدون دانلود اپ خاصی یا browserیی مثل brave که داخل خودش به شکل built-in تورنت دانلودر داره.یکم گشتم چیز خیلی سر راست و خوبی پیدا نکردم، تصمیم گرفتم یه نسخه ی wrap شده از libtorrent رو به شکل لایبرری با پایتون پیاده سازی کنم.نهایتا توی یکی دو روز جمع شد و به همون سهولت و آسونی ای که مدنظرم بود رسیدم.خب بریم سراغ طریقه ی استفاده کردن ازش.اول از همه پایتون رو نصب داشته باشید، بعد با پکیج منیجر پایتون یعنی pip باید پکیج torrentp رو نصب کنید.pip install torrentpبعدش باید تصمیم بگیرید که توی لپ تاپتون میخواید دانلودش کنید، یا داخل جایی مثل گوگل کولب (Google Colab) که بهتون رم و دیسک اختصاص میده و ... (If you know, you know)میمونه ۳ خط پایتونfrom torrentp import TorrentDownloader
torrent_file = TorrentDownloader(&#039;magnet link or path of file.torrent&#039;, &#039;.&#039;)
torrent_file.start_download()نتیجه؟ دانلود ۵۰۰ مگ توی ۳ دقیقه بدون درد و خون ریزی!https://colab.research.google.com/
داخل این عکس از 
torrent_downloader
استفاده شده که توی اپدیت جدید تبدیل به
TorrentDownloader 
شدهراستی کد رو توی گیت هاب گذاشتم، خوشحال میشم Star بدید! یا فالوم کنید D:لینک پروژه: https://github.com/iw4p/torrentpراستی سعید توضیحات بیشتری رو درمورد Mount کردن گوگل درایو به گوگل کولب داده، حتما از اینجا بخونید.</description>
                <category>نیما</category>
                <author>نیما</author>
                <pubDate>Fri, 05 Aug 2022 16:22:35 +0430</pubDate>
            </item>
                    <item>
                <title>من و Deno</title>
                <link>https://virgool.io/@iw4p/%D9%85%D9%86-%D9%88-deno-tuz94nublgme</link>
                <description>این دفعه میم نذاشتماول از همه بگم اول اسم این بچه دنو بوده، و بعد به خاطر شباهت‌ش به دایناسور گفتن بگید دینو و چشم ما هم میگیم دینو :)))بعد از خبر ریلیز ورژن یک Deno امروز فرصت کردم یکم باهاش کار کنم.البته من زیاد توی این موارد سررشته ای ندارم ولی خب زیاد تفاوتی سینتکسی خیلی عجیبی با NodeJS نداشت داستان اینه که Deno از ابتدا و از Scratch ساخته شده و به هیچ عنوان فورکی از نود جی اس به حساب نمیرهپکیج‌ها به شکل decentralized (مثل Golang) ایمپورت میشن برای نمونهimport {
dayOfYear,
currentDayOfYear,
} from &amp;quothttps://deno.land/std/datetime/mod.ts&amp;quot
console.log(dayOfYear(new Date(&amp;quot2020-02-21&amp;quot)));
console.log(currentDayOfYear())برای یه تست ساده میتونید با کامند زیر توی ترمینال مهمون یه خوش‌آمد گویی از طرف دینو باشید:deno run https://deno.land/std/examples/welcome.tsنحوه‌ی نصب هم خیلی ساده هست که توی سایت خود Deno بهش اشاره شده.جالبه بدونید دینو با زبان Rust نوشته شده (حالا چرا راست؟ چرا چپ نه ایح ایح)راست هم توسط موزیلا در حدود سال ۲۰۱۵ نسخه‌ی پایدارش ریلیز شد.حالا خیلی ها معتقدند که دوران نود جی اس سر اومده و دینو قراره جاشو بگیره، من با جمله‌ی دوم بیشتر موافقم ولی نود جی اس قرار نیست جای خاصی بره از نظر من.بهتون پیشنهاد میکنم چند خط Deno کد بزنید و اگه دوست داشتید این کرش کورس رو ببینید.دینو همچنین برعکس نود جی اس وقتی لازم باشه مثلا به نتورک دسترسی داشته باشه یا چیزی رو بخواد read یا write بکنه حتما لازم داره فلگ هاش توی کامند مشخص شنمثلا شما نمیتونی به راحتی که توی نود جی اس Express ران میکردی اینجا هم به اون شکل سرور ران کنی و لازمه توی کامندت از فلگ --allow-netاستفاده کنین یا مثلا برای Read و Write--allow-read--allow-writeبه این شکل:deno run --allow-net --allow-read https://deno.land/std/http/file_server.tsو حتی میتونید به جای run از کامند install استفاده کنید و تا هروقت که هرجای سیستم کامندfile_serverرو ران کردید براتون یه فایل‌سرور ران کنه توی اون دایرکتوریجاهایی که راجع به دینو خوندم و اطلاعات خوبی بهم دادن:https://www.codegram.com/blog/first-thoughts-about-deno/https://www.codegram.com/blog/rust-for-js-developers/</description>
                <category>نیما</category>
                <author>نیما</author>
                <pubDate>Thu, 21 May 2020 17:29:41 +0430</pubDate>
            </item>
                    <item>
                <title>پروسه ساین اپلیکیشن iOS</title>
                <link>https://virgool.io/farasib/%D9%BE%D8%B1%D9%88%D8%B3%D9%87-%D8%B3%D8%A7%DB%8C%D9%86-%D8%A7%D9%BE%D9%84%DB%8C%DA%A9%DB%8C%D8%B4%D9%86-ios-cp1fgpz0u1z3</link>
                <description>این دفعه میم نذاشتممن معمولا از ویرگول برای یادداشت‌های خودم استفاده میکنم یه جورایی و این هم یه یادداشته :)) از بس که حافظه‌ام ضعیفه :)) پس احتمال ۹۹ درصد به دردتون نمیخوره.اگه بخوام بگم mobileprovision و p12 یه جورایی حیاتی‌تر از entitlement هستن.ما با یک private key و public key سر و کار داریمprivate key میشه گفت signature عه که اپلیکیشن unsigned ایی که داریم باهاش sign میشه.public key یه جورایی signature checker محسوب میشه و باهاش اپلیکیشن verify میشه.خب این دوتا key از کجا میان؟ چی هستن اصلا؟وقتی شما CSR میکنی به اپل (که Public Key هم شاملش هست)، اطلاعات شخصی و ... ساین میشه توسط Private Key، بعد اپل از Public key توی CSR استفاده میکنه تا بفهمه CSR ایی که میاد از سمت تو هست یا نه (قبل از این که certificate رو براتون صادر کنه که شامل Public Key هست)حالا از اپل دوتا کادوی ناقابل داریم:یک فایل certificate که شامل Public Key عهو Private Keyحالا فایل p12 اینجا وارد عمل میشه و Private Key رو به همراه Certificate تبدیل به یه بسته میکنه و به یه فایل تبدیلشون میکنه.حالا وقتی اپلیکیشن ساین میشه فایل P12 از اپلیکیشن جدا میشه.چون Private key فقط برای ساین کردن اپلیکیشن هاست، درحالی که Certificate اومده embed شده توی اپلیکیشن که حالا به کمک Public key دیوایس میتونه تشخیص بده اپلیکیشن معتبره یا نه.حالا نقش Provision profile چیه؟ این یه جورایی Permission policy عه که اجازه میده دستگاه های خاصی، اپلیکیشن های خاصی رو اجرا کنن و دو نوع داره: Ad hoc و AppStoreتوی اد هاک این پروفایل اجازه میده اپتو به تستر بدی و و گارانتی میشه که فقط و فقط شخص تعیین شده میتونه اپ رو verify و ران کنه. یعنی حتی اگه اپ به بیرون درز کنه و به اصطلاح Leak شه نمیتونه با اون امضا و پروفایل روی دیوایس دیگه ای ران شه.پروفایل شامل چیه؟ پروفایل برای کار کردن دو تا چیز لازمه که داشته باشه:App IDاپلیکیشن آیدی همون باندل  هست که اپ ها رو از هم جدا و تفکیک میکنه و معمولا ریورس یه دامین هست مثل com.x.yDevice IDدیوایس آیدی همون UDID هست که یک چیزی مثل سریال نامبر دیوایس شماست که دیوایس شما رو از بقیه تفکیک میکنهبا این دوتا اطلاعات پروفایل کارش راه میفته و میتونه اجازه بده که چه دیوایس هایی با چه اپ هایی کار کنن.فایل Entitlements هم چیز سختی نیست، یک  Plist عه که میتونی با مشخص کردن پراپرتی‌هاش فیچر های اپلیکیشن‌ رو تعیین کنی</description>
                <category>نیما</category>
                <author>نیما</author>
                <pubDate>Tue, 24 Mar 2020 17:37:31 +0430</pubDate>
            </item>
                    <item>
                <title>ریوریس سرچ reverse-i-search (Ctrl + R) رو فراموش کن</title>
                <link>https://virgool.io/@iw4p/%D8%B1%DB%8C%D9%88%D8%B1%DB%8C%D8%B3-%D8%B3%D8%B1%DA%86-reverse-i-search-ctrl-r-%D8%B1%D8%A7-%D9%81%D8%B1%D8%A7%D9%85%D9%88%D8%B4-%DA%A9%D9%86-qscgsdch8zvg</link>
                <description>ویرگول رو با میم آغاز میکنیم قربتا الی اللهانتخاب عنوان مناسب و قابل فهم برای این ویرگول از کل نوشتن این متن بیشتر وقت برد.خب سریع بریم سر اصل مطلب.اگه از ZSH استفاده کرده باشید، میدونید که وقتی توی ترمینال یک کامند رو مینویسید (بر فرض cd) و بعد از کلید های بالا پایین (همون Arrow keys) استفاده میکنید، به شما دستورات قبلی رو نشون میده ولی با این تفاوت که تمام دستوراتی که با cd شروع شدن رو به شما نشون میده.ولی در حالت کلی وقتی این کار رو روی ترمینال استفاده کنید به شما دستورات قبلی رو نشون میده که به ترتیب زدید و اصلا ربطی به cd ندارند.دوستان لینوکسی برای این کار معمولا از کلید های ترکیبی (Ctrl + R) استفاده میکنن، بد نیست ولی خب این که شما با استفاده از کلید های جهت دار کامند های مرتبط رو بالا پایین کنید و بین‌شون بگردید قطعا حس راحتی بیشتری به شما میده.پیاده‌سازی این کار زیاد سخت نیست.با استفاده از یکی از فایل های زیر میتونید این قضیه رو پیاده کنید:~/.bashrc~/.inputrcروش اولبا استفاده از فایل اول باید به شکل زیر عمل کنید:لازم هست که فایل bashrc رو باز کنید و تغییرات رو داخلش اعمال کنید.gedit ~/.bashrcبهش دو خط زیر رو اضافه کنیدbind &#039;&amp;quot\e[A&amp;quot: history-search-backward&#039;
bind &#039;&amp;quot\e[B&amp;quot: history-search-forward&#039;فایل رو ذخیره کنید و ببندید. دستور زیر رو اجرا کنید:source ~/.bashrcروش دومبا استفاده از فایل دوم باید به شکل زیر عمل کنید:این دستور رو داخل ترمینال اجرا کنیدcp /etc/inputrc ~/.inputrcفایل inputrc رو با دستور زیر ویرایش کنیدgedit ~/.inputrcاین خطوط رو به فایل اضافه کنید&amp;quot\e[A&amp;quot: history-search-backward
&amp;quot\e[B&amp;quot: history-search-forwardمنابعمثل همیشه منابع، همون چیزی که متاسفانه اکثر ایرانی‌‌ها از ذکر کردن‌اش میترسنHow to configure up arrow to search the history?incremental history searching with .inputrc ?In bash, how do I bind a function key to a command?</description>
                <category>نیما</category>
                <author>نیما</author>
                <pubDate>Tue, 05 Nov 2019 13:25:13 +0330</pubDate>
            </item>
                    <item>
                <title>ساخت توییک حالت روح برای واتس‌اپ‌ [iOS]</title>
                <link>https://virgool.io/@iw4p/%D8%B3%D8%A7%D8%AE%D8%AA-%D8%AA%D9%88%DB%8C%DB%8C%DA%A9-%D8%AD%D8%A7%D9%84%D8%AA-%D8%B1%D9%88%D8%AD-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%88%D8%A7%D8%AA%D8%B3%D8%A7%D9%BE-ios-tyn1fvninjrd</link>
                <description>از قدیم روایت بوده که کار خودتون رو با میم شروع کنید. سطح آموزش: متوسطپیش‌نیاز ها: دستگاه JailBreak شده، آشنایی با Tweak و ابزار های اولیه مثل Theos و قطعا اگه ویندوز دارید فکر نکنم بتونید کاری از پیش ببرید.یکم راجع به خودمبه عنوان یک نوب ۲ ساله در زمینه‌ی جیلبریک با تجربه‌ی خیلی کمی که در این زمینه دارم گفتم اینجا جای خوبیه برای اینکه تجربه‌هام رو توش ثبت کنم و با توجه به این حافظه‌ی داغونی که دارم، هر موقع نیاز داشتم برگردم و بخونم و همچنین شاید به درد دیگران هم بخوره.** این توییک رو حدودا اوایل فروردین ۹۸ نوشتم و خب اسکرین‌شات از ترمینال و نتایج ندارم قرار بدم و دیگه هم حوصله‌ی دوباره طی کردن این پروسه رو ندارم، سعی میکنم شبیه ترین چیز های ممکن به نتایج رو براتون قرار بدم. **قراره توی این ویرگول نحوه و پروسه‌ی ساخت یکی از توییک هام رو براتون توضیح بدم.چکیدهاولین توییک (Tweak) نسبتا رسمی بود و یکم هم استقبال شد و به مزاج بعضی ها خفن اومد وظیفه‌ش این بود که میتونست وقتی شما مسیج شخصی رو در واتس‌اپ seen میکنید، تیک آبی نخوره، همون ابتدا خیلی ها حمله کردن که این چه توییکیه؟ خود واتس‌اپ همچین قابلیتی داره، خب آره داشت ولی فرقش این بود که اگه از خود اپ گزینه‌ی Read receipt رو غیر فعال میکردید، باعث میشد شما نتونید بفهمید شخص مقابل هم مسیج شما رو دیده یا نه؟ یعنی عملا شما دیگه تیک آبی نمیدیدید ولی این توییک فقط قرار بود برای دیگران رو نشون بده و برای شما رو مخفی کنه. (احتمالا باید چندبار این جمله رو بخونید تا درک کنید چون خودم چندبار خوندمش تا بفهمم چی نوشتم)ایده اجرایی به شکل سنتی بود که از طریق disassembler و Reveal و از این قبیل برنامه‌ها بود که خداروشکر iOS دولووپر های ایرانی توی این زمینه ‌خدا هستن و بهش نمی‌پردازم.ایده دوم استفاده از ابزاری به اسم Frida بود که باهاش آشنا شدم و اتفاقا یکی از دوستان هم قبلا شبیه به همین توییک رو پیاده کرده بود ولی خب من بازم مینویسمش.مقدمات اولیهمثل روال عادی شما قطعا به ابزار Theos نیاز داریدو البته این دفعه Fridaکمی مقدمه چینی بیشتر و توضیحات اضافه‌ترتوییک (Tweak) خب میشه گفت یک لایبرری داینامیکه که میتونید چیزی که مد نظرتون هست رو به اپلیکیشن مورد نظرتون تزریق کنید تا تغییرات رو بنا به خواسته‌ی خودتون اعمال کنید.نصب Theos: اگه آشنا نیستید یا لازمه که داکیومنتش رو مطالع کنید میتونید از اینجا بهش دسترسی پیدا کنید.نصب Frida: داکیومنت نسبتا خوبی داره و کار رو راه میندازه که میتونید از اینجا به نحوه نصب و استفاده‌ش پی ببرید.یک مرحله‌ی دیگهلازمه شما ابزار Frida رو توی دیسوایس جیل شدتون هم داشته باشید که میتونید با رفتن به Cydia و اضافه کردن https://build.frida.re به مخازن قبلی، این ابزار رو هم روی گوشی نصب و ران کنید. توضیحات کامل توی Frida نوشته شده.لازمه که متودی که دنباش هستیم رو پیدا کنیم، خب نحوه‌ی کار به چه شکل هست؟اینجا Frida وارد عمل میشه، لازمه توی ترمینال دستور frida-ps -U | grep -i whatsapp رو بنویسید و ps به معنای نشون دادن پروسس های فعلی که در حال ران شدن هستند هست و -U هم بع منظور این هست که دیوایس شما با USB به مک‌‌/‌لپ‌تاپ شما متصله (پس وصل کنید)خروجی چیزی شبیه به عکس زیر خواهد بود:قسمت مهم برای ما PID هست که خب برای هر کسی متفاوته، دنبال PID واتس‌‌اپ میگردیم و میبینیم (بر فرض) PIDش برابر ۱۴۳۲ هست.سراغ کامند بعدی میریم یعنی: frida-trace -U -m &quot;-[* *Receipt*]&quot;حالا اگه داکیومنت رو خوب نخونده باشید براتون این سوال پیش میاد که frida trace چیه و از کجا اومد؟وقتی استفاده میشه و به کار میاد که بخوایم متود ها رو چاپ کنیم (وقتی که صدا زده میشن) و در قسمت بعدی یک فیلتر براش نوشتیم که فقط اون هایی رو چاپ کن که مرتبط باشن و توشون از receipt استفاده شدهخروجی چیزی شبیه به این خواهد شد: 54599 ms  -[WAChatViewController enqueueMessagesForSendingReadReceipts:0x1d0a41080]
 54662 ms  -[XMPPConnection sendReadReceiptsForMessagesIfNeeded:0x1d085d2b0]
 54662 ms    | -[WAMessage needsSendReadReceipt]
 54662 ms    | -[WAMessage needsSendReadReceipt]
 54662 ms    | -[WAMessage needsSendReadReceipt]
 54662 ms    | -[WAMessage needsSendReadReceipt]
 54662 ms    | -[WAMessage needsSendReadReceipt]
 54662 ms    | -[WAMessage needsSendReadReceipt]
 54662 ms    | -[WAMessage needsSendReadReceipt]
 54663 ms    | -[XMPPMultiReceipt addReceiptId:0x1d1243300 edit:0x0]
 54663 ms  -[ XMPPConnectionMain sendReadReceiptsForMessagesIfNeeded:0x1d0a41080]
 54663 ms    | -[WAMessage needsSendReadReceipt]
 54663 ms    | -[WAMessage needsSendReadReceipt]
 54663 ms    | -[WAMessage needsSendReadReceipt]
 54663 ms    | -[WAMessage needsSendReadReceipt]
 54663 ms    | -[WAMessage needsSendReadReceipt]
 54663 ms    | -[WAMessage needsSendReadReceipt]
 54663 ms    | -[WAMessage needsSendReadReceipt]و خب اگه یکم دقت بالایی داشته باشیم و انگلیسیمون نسبتا خوب باشه میتونیم بفهمیم چیز یکه دنبال هستیم  [XMPPConnectionMain sendReadReceiptsForMessagesIfNeeded]خواهد بود، اگه نه هم حدس و آزمایش کردن متود هایی که بهش مشکوک هستید هیجان خاصی داره و میتونید با تست کردن متود های مختلف به نتایج خیلی جالبی برسید.نوبت هوک کردن میرسه با Theos یک قالب توییک میسازید به کمک دستور  $ frida-ps -Uai میتونید باندل اپ رو به دست بیارید (کلی راه دیگه هم هست ولی خب این دم دست تره) خروجی شبیه به نتیجه‌ی زیر خواهد بود: $ frida-ps -Uai
  PID        Name                          Identifier 
   ---           ------                            ---------------
  1432    whatsapp         net.whatsapp.WhatsAppداخل فایل Tweak.xm چی بنویسیم؟ابتدا باید به  XMPPConnectionMain هوک بزنیم و sendReadReceiptsForMessagesIfNeeded رو خالی کال کنیم. یعنی چیزی به شکل زیر: %hook XMPPConnectionMain 
 
 - (void) sendReadReceiptsForMessagesIfNeeded:(id)arg { 

   }
    %end شاید موفق نباشید و خب لازمه که چندبار تلاش کنید و از Alert استفاده کنید تا مطمن بشید که اصلا کار میکنه؟ یا مشکل از چیز دیگه‌ایه. سورس کد رو با Alert رو توی خط بعدی لینک میدم و کافیه از کامنت در بیاریدش.توییک رو اینجا قرار دادم.سعی کردم خلاصه و مفید توضیح بدم و بیشتر داکیومنت ها رو به پای خودتون بذارم، همچنین دلیلی نداشت خوبو مفید توضیح بدم، چون شک دارم حتی ۱۰ نفر هم این آموزش به دردشون بخوره و ازش استفاده بکنن، بیشتر برای اینکه جایی ثبتش کنم نوشتمش.تا حد امکان به سوالات و مشکلات احتمالی دوستان پاسخ داده میشه، موفق باشیدلینک ردیت این توییک: Reddit سورس این توییک برای علاقمندان: Githubسورس دیگه برای مطالعه و تمرین پریمیوم سازی اپلیکیشن های پولی:‌ Github لینک Repo سیدیا ی شخصی خودم برای نصب این و چند توییک دیگه: Nimk.ir/repoو در آخر امیدوارم روزی اون‌قدر انگیزه‌ی کافی داشته بشم تا چیزی که علاقه دارم رو ادامه بدم و خدمتی به بقیه بکنم، نه اینکه به دلیل مسایل پیش پا افتاده بیخیال همه چیز بشم. موفق باشید.</description>
                <category>نیما</category>
                <author>نیما</author>
                <pubDate>Sun, 16 Jun 2019 00:41:03 +0430</pubDate>
            </item>
                    <item>
                <title>چگونه به کاربر گیت‌هاب پیام بفرستیم؟</title>
                <link>https://virgool.io/@iw4p/%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%A8%D9%87-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1-%DA%AF%DB%8C%D8%AA%D9%87%D8%A7%D8%A8-%D9%BE%DB%8C%D8%A7%D9%85-%D8%A8%D9%81%D8%B1%D8%B3%D8%AA%DB%8C%D9%85-brr68u3afvco</link>
                <description>Memes, Memes EveryWhere.خیلی وقت بود این مشکل رو داشتم که نمیتونستم با کاربران گیت‌هاب ارتباط برقرار کنم و اگه ایمیل یا لینک توییتر نمیذاشتن واقعا دردسر بود که آیدیشونو سرچ کنم تا بلکه توی جایی بتونم ایمیلشونو گیر بیارم و مسیج بدم بهشون.امروز بعد مدت ها گفتم بهتره سرچ بزنم بلکه راه بهتری باشه برای ارتباط برقرار کردن با این دسته از کاربران گم‌نام.راه ساده‌ای وجود داره برای اینکه ایمیل کاربر مورد نظرتون رو پیدا کنید و از طریق ایمیل باهاش ارتباط برقرار کنید که برام جالب بود و به اشتراک گذاشتنش شاید بتونه بهتون کمک شایانی بکنه. (شایان چیه دیگه؟)به لطف API گیت‌هاب شما میتونید این کار رو انجام بدید. حالا به چه شکل؟https://api.github.com/users/username/events/public کافیه این URL رو به خاطر بسپارید (دروغ گفتم نمیشه، بوک‌مارک کنید). آیدی کاربر مورد نظرتون رو جای username بذارید و با یک Ctrl + F (یا شاید Cmd + F) ساده دنبال email بگردید.خب تبریک میگم شما موفق شدید. حالا شما میتونید بعد از هک کردن گیت‌هاب و ایمیل کاربرانش به دنبال هک گوگل و َنسا (ناسا اشتباهه) برید.</description>
                <category>نیما</category>
                <author>نیما</author>
                <pubDate>Mon, 01 Apr 2019 00:56:54 +0430</pubDate>
            </item>
                    <item>
                <title>گیف یا جیف؟ مسئله این است</title>
                <link>https://virgool.io/coderlife/%DA%AF%DB%8C%D9%81-%DB%8C%D8%A7-%D8%AC%DB%8C%D9%81-%D9%85%D8%B3%D8%A6%D9%84%D9%87-%D8%A7%DB%8C%D9%86-%D8%A7%D8%B3%D8%AA-n7xt0qxrcnfv</link>
                <description>Memes... memes everywhereاز دعوای اسپیس یا تب که بگذریم موضوع بعدی که برای من خیلی جذابه تلفظ صحیح GIF هست.GIF مخفف سه کلمه‌ی Graphic Interchange Format هست که دقیقا از اینجاست که دعوا شروع میشهدعوا اینطوری شروع میشه که عده‌ی ای میگن چون Graphic به حالت Hard G (یا همون گاف خودمون) خونده میشه پس تلفظ صحیح گیف هست درحالی که عده‌ای معتقدند که تلفظ درست به حالت Soft G (یا همون جیم خودمون) هست که جیف خونده میشه.جالب تر اینکه هر گروه هم دلایل و اثبات های خودشون رو دارن که به برخی از اون‌ها میخوام اشاره کنم.طرفداران گیف:کلمه‌ی Gift (که به معنای کادو هست) نزدیک ترین کلمه به GIF هست و فقط T نداره بنابر این گیف درسته.تلفظ کلمات تک‌سیلابه (فکر کنم میشه یک‌بخشی) که با G شروع میشن معمولا Hard G تلفظ میشن.مثل Girl, Git, Go, Guy, Gun, Gum و ...اگه GIF به صورت جیف تلفظ میشه پس چرا کره‌ی بادام زمینی JIF از اسم GIF استفاده نکرده؟و ...طرفداران جیف:همونطوری که GIF مخفف Graphical Interchange Format هست و GPS هم مخفف Global Position System بنابر این اگه به GIF میگی گیف پس به GPS هم بگو گی‌پی‌اس.تلفظ Giraffe که کلمه‌ی نسبتا نزدیکی به GIF هست به صورت Soft G تلفظ میشه.سازنده‌ی GIF یعنی آقای Steve Wilhite اعلام کرده که تلفظ اسم بچه‌ی من جیف هست. و ...دلایل خیلی بیشتری وجود داره برای اثبات اینکه کدوم تلفظ درسته و میتونید با یک سرچ همشون رو مطالعه کنید و تصمیم خودتون رو بگیرید.همچنین دیکشنری آکسفورد هر دو تلفظ رو به رسمیت میشناسه ولی خب آقای Steve Wilhite معتقده که اونا اشتباه میکنن. ( منم همینطور ((: )خیلی سعی کردم جانب‌دارانه ننویسم و امیدوارم موفق شده باشم ولی من توی دسته‌ی جیف هستم :)))بالاخره درست نیست کسی اسم دختر یا پسرشو بذاره x و بقیه y صداش کنن.راستی نظر شما چیه؟ با کدوم موافقید؟ عادت کردید کدوم رو تلفظ کنید؟ خوشحال میشم نظرتون رو بدونم.برای علاقمندان‌:An Honor for the Creator of the GIFHow To ReallyPronounce GIFThe creator of the GIF says It is Pronounced JIF. He Is Wrong</description>
                <category>نیما</category>
                <author>نیما</author>
                <pubDate>Mon, 04 Mar 2019 12:43:36 +0330</pubDate>
            </item>
                    <item>
                <title>پیدا کردن دوست و همکار جدید در گیت هاب</title>
                <link>https://virgool.io/@iw4p/%D9%BE%DB%8C%D8%AF%D8%A7-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AF%D9%88%D8%B3%D8%AA-%D9%88-%D9%87%D9%85%DA%A9%D8%A7%D8%B1-%D8%AC%D8%AF%DB%8C%D8%AF-%D8%AF%D8%B1-%DA%AF%DB%8C%D8%AA-%D9%87%D8%A7%D8%A8-dlaujmijcrs8</link>
                <description>“Words are memes that can be pronounced.”  ― Daniel C. Dennettlove همیشه دنبال این بودم یک‌سری دوست فعال و هم سطح خودم رو توی گیت‌هاب دنبال کنم ولی گیت‌هاب هیچ فیلتری نداره که بشه تنظیم کرد طرف اهل کجا باشه یا میانگین فالوراش چقدر باشه و ...البته این روش برای کسانی که دنبال دولووپر برای شرکت و استارت‌آپ هم میگردن جواب میده.به همین خاطر یکم جستجو کردم و نتیجه کار که تا حدودی رضایت بخش بود رو اینجا براتون مینویسم.ما از همون سرچ‌باری که برای جستجو استفاده میکنید، استفاده میکنیم، فقط با این تفاوت که اینجا قراره نتیجه، کاربر های گیت‌هاب باشن نه مخزن‌های گیت‌هاب.سه پارامتر برای سرچ کردن و از فیلتر رد کردن کاربران داریم که به شکل زیر هست:LanguageLocationFollowersحالا فکر کنم چندتا مثال بهتر باشه تا توضیحات طولانی و بیهوده.من دنبال کاربری هستم که پایتون کار کنه، ایرانی باشه و فالوراش بیشتر از ۹۰ تا باشه: language:Python location:Iran followers:&gt;90من دنبال همکاری هستم که PHP کار کنه، افغانستانی باشه و فالوراش بین ۵ تا ۱۰ تا باشه:  language:php location:Afghanistan followers:5..10من دنبال دوستی هستم که سوئیفت کار کنه، ایرانی باشه و فالوراش بیشتر از کمتر از ۳۰ تا باشه: language:Swift location:Iran followers:&lt;30نتیجه جستجواگه شما راه‌حل دیگه‌ای یا تجربه خاصی در این موارد دارید خوشحال میشم بخونم :)</description>
                <category>نیما</category>
                <author>نیما</author>
                <pubDate>Sun, 10 Feb 2019 14:57:54 +0330</pubDate>
            </item>
                    <item>
                <title>استفاده از CloudFlare برای دامنه ir در GitHub Pages</title>
                <link>https://virgool.io/@iw4p/%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-cloudflare-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AF%D8%A7%D9%85%D9%86%D9%87-ir-%D8%AF%D8%B1-github-pages-kgbapylr5czv</link>
                <description>دکتر جکیل یا مستر هاید؟بعد از اینکه با jekyll آشنا شدم سریع دنبال راه‌ حل استفاده از دامنه ir روی وبلاگی که توی گیت‌هاب ساخته بودم گشتم.منابع خیلی کم و نسبتا ناقص بودن، به خاطر همین به خودم قول دادم وقتی که موفق شدم حتما مراحلی که رفتم رو ی جایی برای همه بنویسم.متاسفانه ایرنیک بهتون قابلیت های کمی رو ارائه میکنه و به نظرم نوعی ضعف برای یک سرویس ایرانی هست که البته عادت داریم‌ :))بنابراین برای تنظیم A, AAAA و CNAME شما مجبورید از سرویس های دیگه کمک بگیرید. من از CloudFlare استفاده کردم و مراحل کار به این شکل هست که شما وب‌سایت/بلاگ خودتون رو با GitHub Pages لانچ کردید و لازم دارید که دامنه‌ی ir که با قیمت ارزونی خریدید و هیچ قابلیتی به جز تنظیم DNS رو نداره رو ی جوری ازش بهره ببرید !در ابتدا شما باید یک فایل به اسم CNAME به مخزنتون اضافه کنید و این فایل باید به username.github.io اشاره داشته باشه. یعنی من داخل فایل CNAME ام دامنه ir رو اضافه کردم.نمونه مخزن گیت‌هاب برای این کار و چک کردن فایل CNAME برای اطمینان بیشتر از نحوه کار  [github.com/iw4p]اینجا نوبت به ثبت‌نام/لاگین کردن توی CloudFlare میرسه که داشبورد ساده‌ای داره. بعد از اینکه لاگین کردید کافیه Add site رو کلیک کنید و آدرس سایت خودتون رو وارد کنید. (برای مثال test.ir)بعد از وارد کردن آدرس و کمی صبر CloudFlare بهتون میگه که در حال حاضر DNS شما چیز دیگه‌ای هست و لازمه که DNS ات رو به اون چیزی که من میگم تغییر بدی، شما هم وارد ایرنیک میشید و از قابلیت طلایی و فوق‌العاده‌ی ایرنیک که اسمش تنظیمات سامانهٔ نام دامنه (DNS) هست استفاده میکنید و اون DNS هایی که از CloudFlare گرفتید رو اینجا وارد میکنید.نمونه DNS که CloudFlare به من داد، که شاید با مال شما تفاوت داشته باشهتغییرات DNS زمان میبره و از اونجایی که شما دارید از سرویس ایرانی استفاده میکنید این تغییرات به اندازه‌ی خوردن ی قهوه یا چای زمان نمیبره، بهتره چند ساعت دیگه امتحان کنید یا حتی برید بخوابید و فردا نتیجه رو ببینید.بعد از اینکه از خواب بیدار شدید لازم هست که وارد داشبود CloudFlare بشید و طبق عکس زیر این رکورد ها رو اضافه کنید.داشبورد CloudFlare منشاید بپرسید اون مقادیر و آی‌پی هایی که توی عکس هست از کجا اومده؟لیست آی‌پی هایی که میتونید برای رکورد A استفاده کنید رو میتونید از اینجا ببینید.و باز هم احتمالا باید صبر کنید ولی شاید به اندازه یک قهوه یا چای خوردن !تقریبا اینجا کار تمومه و دامنه‌ی ir شما به لطف CloudFlare میتونه وب‌سایتی/وبلاگی که شما به کمک گیت‌هاب عزیز درست کردید رو نمایش بده.اگه علاقمند بودید که راجع به jekyll بیشتر بدونید و یا کار کردن باهاش رو تجربه کنید میتونید از نوشته‌های کامل مهدی صادقی عزیز در این باره استفاده کنید یا اگه دوست داشتید میتونم ویرگول بعدیم رو براتون راجع به ساخت یک سایت به کمک گیت‌هاب و jekyll بنویسم. نظرات شما قطعا در این باره تاثیر گذار خواهد بود.همچنین این لینک‌ها هم ممکنه توضیحات جامع‌تر و کامل‌تری ارائه کرده باشن و به کمکتون بیان: https://mehdix.ir/jekyll-structure.html در آخر بهتون پیشنهاد میکنم رمان مورد غیرعادی دکتر جکیل و آقای هاید رو بخونید یا حداقل فیلمش رو ببینید ! </description>
                <category>نیما</category>
                <author>نیما</author>
                <pubDate>Fri, 01 Feb 2019 18:11:31 +0330</pubDate>
            </item>
                    <item>
                <title>ماندن یا رفتن؟</title>
                <link>https://virgool.io/@iw4p/%D9%85%D8%A7%D9%86%D8%AF%D9%86-%DB%8C%D8%A7-%D8%B1%D9%81%D8%AA%D9%86-nspjkgyj67r1</link>
                <description> عاقبت موندن همیشه توی این دو راهی بودم که بمونم یا برم، ریشه کنم یا به هنگام پاییز بریزم، حداقل برای من الان زندگیم چیزی شبیه برزخ شده؛ حتی تکلیفم با خودم مشخص نیست.(چند کلمه را حذف میکند)راجع به رفتن به یک جای دور و رویایی حرف نمیزنم، همین کار ها و فعالیت های روزانه منظورم بود، اصلا مثال خوبش همین ویرگول، نمیدونم بیخیالش بشم و برای همیشه برم یا بمونم هر از گاهی چیزی بنویسم، کاش میدونستم کجا موندن خوبه و کجا رفتن و حتی بعضی جاها چیزی میانِ این دو..(برای سومین بار سه خط بالا را پاک کرده و دوباره با وسواس خاصی مینویسد)خیلی وقته که از زمین و زمان گلایه دارم ولی تا میام بنویسمشون پشیمون میشم یا مینویسم و توئیت نکرده پاکشون میکنم.(حدود 5-6 خط از درد و دل هایش را پاک میکند)همین الان هم هزار بار با خودم کلنجار رفتم تا همین چند خط رو بنویسم، بیشتر متنی که نوشته بودم رو همین الان پاک کردم. شاید همین چند خط رو هم همین الان پاکش کنم، (در این قسمت هم چند جمله گم شده است) نه بذار تا پاکشون نکردم منتشرش کنم، حداقل اینجا کسی منو نمیشناسه ...(به فکر این است که به هنگام زدن دکمه ی انتشار نوشته از این نوشته پشیمان خواهد شد و باید سریع آن را پاک کند...)</description>
                <category>نیما</category>
                <author>نیما</author>
                <pubDate>Sat, 13 Oct 2018 23:57:35 +0330</pubDate>
            </item>
                    <item>
                <title>بیا دو خط به زبان Swift کد بزنیم</title>
                <link>https://virgool.io/@iw4p/%D8%A8%DB%8C%D8%A7-%D8%AF%D9%88-%D8%AE%D8%B7-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-swift-%DA%A9%D8%AF-%D8%A8%D8%B2%D9%86%DB%8C%D9%85-j5yewyt82u6a</link>
                <description>سوئیفت از زبان‌هایی مثل #Objective-C، Rust، Haskell، Ruby، Python، C و بسیاری دیگر الهام گرفته‌شدهصرفا قرار نیست امروز کل سوئیفت (یا سویفت) رو یاد بگیرید و همه‌ی سینتکس ها رو باهم بررسی کنیم ولی بد نیست ی تجربه کمی از کار با سوئیفت تو زندگیتون داشته باشید.من وارد توضیحات و پیدایش سوئیفت و این صحبت ها نمیشم و میسپرم به خودتون که اگه علاقه دارید برید دنبالش چون هدف ما اینجا فقط کد زدن و کار عملی هستش! ولی در این حد بدونید که زبان جدیدی هست که کمپانی اپل سال 2014 جایگزین Objective-C کرده و برنامه نویس‌ها و توسعه دهندگان جدیدا ازش برای توسعه iOS  و TvOS  و MacOS و WatchOS استفاده میکنن. اول از همه ما در سوئیفت شاهد Constants  و Variables هستیم که خیلی ساده هست، وقتی شما Constant که به معنی ثابت هست رو تعریف کنید امکان تغییر مقدار رو دیگه ندارید و فقط Variable که به معنی متغیر هست این امکان رو داره ! یک مثال الان همه چیز رو روشن میکنهvar x = 5
let y = 10 به راحتی دو مقدار رو تعریف کردیم که از جنس Int هستن و لزومی نداره شما مشخص کنید که Int هست یا Double یا String ... ولی اگه لازم باشه این قابلیت رو داره که مشخص کنید، نگران نباشید :))خب دیگه باید کد بزنیم کافیه یک کامپایلر سوئیفت رو سرچ بزنید و طبق میل و سلیقه خودتون یکیشون رو انتخاب کنید یا به پیشنهاد من واسه‌ی شروع از این لینک استفاده کنید.خب حالا میخوایم ببینیم واقعا Variable و Constant فرق دارن یا سوویفت داره ما رو سر کار میذاره؟برای مقدار دهی دوباره و تغییر مقدار کافیه بدون var و let اون تکه کد رو تکرار کنیم چون یکبار تعریف شده و مقدار جدید رو بهش اعلام کنیممن تصمیم میگیرم x رو به 50 تغییر بدم و y رو 100 کنم، یعنی به این شکل x = 50
y = 100خب قبل اینکه Run کنیم چک کنیم ببینیم کد هامون شبیه هم هست یا نه؟ راستی باید اعداد رو print کنیم تا خروجی بگیریم که پرینت هم داستان خاصی نداره، پس کد کامل به شکل زیر میشه var x = 5
 let y = 10
 x = 50
 y = 100
print(x+y)خب قطعا منتظر ارور هستیم و ارور میگیریم که میگه یا y رو مقدارش رو تغییر نده و بیخیالش شو یا از نوع var تعریفش بکن و خیال همه رو راحت کنکه ارور دقیقا همین رو به صورت انگلیسی ازتون میخواد  Swift:: Error: cannot assign to value: &#039;y&#039; is a &#039;let&#039; constant 
 note: change &#039;let&#039; to &#039;var&#039; to make it mutable خب مشخصه راه حل چیه فقط باید let رو تبدیل به var کردیکم بریم با print کار کنیم جذاب تر بشه کد زدنمونمثل سی شارپ و خیلی زبان های دیگه شما میتونید دوتا جمله رو با + بهم متصل کنید و جملات هم داخل دوتا &quot; قرار میگیرن، این زیر میخوایم چند مدل Hello World چاپ کنیم ببینیم داستان از چه قرارهprint(&quot;Hello World&quot;)    //output: Hello World
//=================================
 var x = &quot;Hello&quot; 
 var y = &quot;World&quot; 
//=================================
print(x+y)    //output: HelloWorld
print(x + &quot; &quot; + y)    //output: Hello world
 //================================= 
 print(&quot;\(x) \(y)&quot;)    //output: Hello worldاگه همین خط ها رو تست کنید دقیقا خروجی که رو به روش نوشته شده رو میگیرید، اگه جایی رو متوجه نشدید میتونید با جستجو راجع‌بهش مطالعه کنید یا در بخش نظرات بنویسید تا کمکتون میکنمبد نیست تلاش کنید چالش زیر رو انجام بدید تا دو خط بیشتر کد زده باشید و دستاتون حسابی به کد آلوده شه سعی کنید اسمتون رو در متغیر name و نام خانوادگی رو در متغیر family تعریف کنید و با تابع پرینت ازش به همراه یک Hello چاپ بگیرید.بر فرض اگر اسم من Nim  و فامیلی من Nimak هست خروجی به شکل !Hello Nim Nimak باشه.سعی کنید با دو عدد 8 و 4، 4 عمل اصلی ریاضی (ضرب جمع تقسیم منها) رو انجام بدید و چهار بار به کمک تابع print جداگانه چاپ کنید.سعی کنید چالش دوم رو تنها و تنها فقط به کمک یک تابع پرینت انجام بدید.خب فکر کنم برای امروز کافی باشه، امیدوارم تنبل نباشید، لب تاب رو روشن کنید و این چالش ها رو که شاید 10 خط هم نشه انجام بدید، البته اگه مثل من خیلی خسته هستین توی گوشی هم میشه کد زد ولی یکم سختهپیشاپیش از دوستانی که حرفه‌ای هستن هم عذر خواهی میکنم، خلاصه یکی باید هوای تازه وارد ها رو داشته باشه !ممنون میشم نظراتتون رو بدونم و اگه دوست داشتید همین روند رو چه در این زبان یا در زبان های دیگه ادامه بدم تا با چند زبان مختلف یک آشنایی ریزی داشته باشید </description>
                <category>نیما</category>
                <author>نیما</author>
                <pubDate>Thu, 05 Jul 2018 16:07:15 +0430</pubDate>
            </item>
                    <item>
                <title>یکم دستت رو به کد زدن آلوده کن</title>
                <link>https://virgool.io/@iw4p/%DB%8C%DA%A9%D9%85-%D8%AF%D8%B3%D8%AA%D8%AA-%D8%B1%D9%88-%D8%A8%D9%87-%DA%A9%D8%AF-%D8%B2%D8%AF%D9%86-%D8%A2%D9%84%D9%88%D8%AF%D9%87-%DA%A9%D9%86-rervgbwbaget</link>
                <description>کم کم برنامه نویسی و کد نوشتن داره توی سنین کم در جهان فراگیر میشه و احساس میکنم این کشور و محل زندگی من هستش که اکثرا از کامپیوتر، فقط ویندوز عوض کردن و برنامه های آفیس رو از آدم انتظار دارن و ملاک کامپیوتر بلد بودن یک شخص میشه چند تا فرمول نوشتن توی اکسل !آخه هرجا میرم و میفهمن یکم چیزی بلدم سریع میگن مهندس بیا این نامه اداری رو واسه ما تایپ کن قربون دستت این آپدیت ویندوز 10 رو از کجا خاموش کنم؟ پدرمو درآوردهمهندس کی وقت میکنی بیای ویندوزمونو عوض کنی؟راستی مودم رو هم سر راه داری میای کانفیگ کناین روز ها توی مدارس کشور های دیگه زبان های ساده ای مثل Swift رو دارن جدیدا آموزش میدن که حسابی جای بحث داره ولی جالب این هست که سال گذشته (96-97) اولین سالی بود که کتاب مبانی علم رایانه رو در پایه یازدهم (سوم دبیرستان سابق) در رشته ریاضی برداشتند و زمین شناسی به جاش قرار دادند ! همین روزا که جهان داره به سمت هوش مصنوعی میره و گوگل میاد داپلکس (google duplex) رو رونمایی میکنه و کسی که زنگ میزنه میز رزرو کنه متوجه نمیشه داره با یک ربات صحبت میکنه نشون میده خیلی داریم عقب میفتیم.به نظرم شروع کن به جستجو و توی پلتفرمی که بهش علاقه داری شروع کن فعالیت کردن یا حداقل به پیشنهاد من، دوره پایتون یک مرد بزرگ، یعنی جادی رو ببین که توی GoToClass.ir رایگان قرار داده.حتی اگه علاقه هم نداری بد نیست توی عمرت چند خط کد زده باشی و فردا وقتی پیر شدی برای نوه هات تعریف کنی که آره توی جوانی کد میزدیم ولی حیف که تحریم دست و بالمون رو بسته بود و به جایی نرسیدیم :))اگه مبتدی هم نیستی که چه بهتر، شروع کن به تقویت زبان انگلیسیت و دیدن دوره ها با زبان انگلیسی که هم جامع تر هست و هم به لطف نداشتن قانون کپی رایت میتونی بدون هزینه با یکم جستجو دانلود کنی و لذت ببری !تابستون هم که هست، چی از این بهتر؟ چرا شروع نمیکنی؟</description>
                <category>نیما</category>
                <author>نیما</author>
                <pubDate>Wed, 04 Jul 2018 19:13:23 +0430</pubDate>
            </item>
            </channel>
</rss>