سجاد ایوبی | برنامه نویسی، بلاک چین و دفاع از آزادی بیان

Menu

ترفند یا هک ساده برای برنامه ایرانسل من (گردونه شانس)

ایرانسل من (اپلیکیشن ایرانسل) یه بخشی داره که با زدن دکمه اش براتون بصورت شانسی یه جایزه در نظر میگیره که تقریبا در ۹۰ درصد مواقع هیچ چیزی نصیب شما نمیشه.

برای انجام این بازی باید شما هر روز اپلیکیشن رو باز کنید و روی جایزه بزنید و منتظر باشید که شاید برنده بشید و این سیستم فقط روزی یکبار قابل انجام هست. (بیشتر خواستند که این یه تشویقی باشه برای سر زدن به برنامه ایرانسل من)

ولی خب یه برنامه نویس باید کاری که اگه قراره دستی انجام بشه بیش از دو سه بار رو اتوماتیک کنه. پس توی آموزش زیر من روش اتوماتیک کردن این پروسس رو براتون میگم که از پروکسی کردن گوشی و مشاهده تمام دستورات ارسالی توسط گوشی هست که بعدا بفهمیم که روش کار این قرعه کشی چطوریه.

نصب برنامه

برای شروع شما باید برنامه https://mitmproxy.org رو نصب کنید و اجرا کنید.

اجرای ترفند

توی تنظیمات گوشی وارد قسمت proxy بشید و ip سیستمتون رو وارد کنید. من در اینجا آدرس ip رو وارد گوشی کردم

مرحله بعدی اجرای برنامه ایرانسل من هست و تک تک خروجی ها رو مشاهده کنید. توی این بخش ما میبینم که بیشتر دستورات به API ایرانسل هست.

خب آدرس گردونه شانس ما مشخص شده

https://my.irancell.ir/myirancellapi/game/getgameoffer?language=fa

فقط کافیه که ما یک دستور GET با HEADER مشخص شده هر روز توی یک ساعت مشخص ارسال کنیم به این آدرس. مثلا cronjob میتونی کمک کنه به ما.

برای اجرای این کار این دستور رو توی یک فایل ذخیره کنید

import requests

def get_my_reward():
    requests.get(
        "https://my.irancell.ir/myirancellapi/game/getgameoffer",
        headers={
            "Authorization": "JWT {YOUR_TOKEN}"
        }
    )

if __name__ == "__main__":
    get_my_reward()

و بعد توی crontab میتونید این فایل رو روزی یکبار فراخوانی کنید:

۰ ۱ * * * /usr/bin/python3 /home/user/irancell-reward.py >> ~/cron.log 2>&1

بررسی مزایا و معایب remote developer بودن

امروز من متوجه شدم که حساب paypal من محدود شده و خب متاسفانه حقوق یکماه من تا ۱۸۰ روز میمونه تا برسه به دستم (تازه اگه بشه) و خب هیچ کاری هم از دستم برنمیاد که درستش کنم.

در کل گفتم که نکاتی که توی این تجربه دردناک بدست آوردم رو براتون بگم چون واقعا کسی نیست که توضیحات زیادی داشته باشه برای گفتن.

نکات:

  • ترجیحا paypal نباشه (من نمیتونستم و شرکتی که کار میکنم مجبور بودم که باشه)
  • همیشه یه پروکسی خوب و ثابت داشته باشید. (VPS هایی که الان بفروش میرسه تقریبا همشون توسط یه شخص ایرانی توی خارج کشور ارایه میشه و اگه لاگین کنید توی پی پل اکانت شما محدود میشه قویا)
  • تراکنش بیش از ۱۰۰۰ دلار نداشته باشه تا اکانت شما زیاد زیر نظر نره.
  • برای بار اول اگه پولی اومد و خرج کردید یکم زمان می بره و نگران چیزی نباشید به حساب گیرنده می رسه.
  • بعد از حدود یکسال پی پل از شما میخاد که مدارکتون رو تایید کنید.
  • قبل از تایید مدارک حتما حساب رو خالی کنید.

تایید مدارک پی پل

توی تایید مدارک بهتره که از پاسپورت خودتون استفاده کنید و اگه اکانتتون از پاسپورت کسی دیگه استفاده شده حتما حتما موقع ویرایش و تغییر پاسپورت نکات رو رعایت کنید.

  • اسمتون رو خوب بدون هیچ نشونه ای تغییر بدید
  • شماره پاسپورت رو حسابی تغییر بدید (یک عدد تغییر کافی نیست)
  • کیفیت عکس رو کاهش بدید.

علت لیمیت شدن اکانت پی پل من:

خب دقیقا مشخص نیست و من دلیلی واضح نگرفتم برای لیمیت شدن من.

من تا جایی که میدونم توی ویرایش پاسپورت فیک اسمم رو خوب انجام دادم ولی شاید توی بخش شماره پاسپورت کوتاهی کردم و فقط یک شماره تغییر دادم.

سخن آخر:

کار ریموت بخصوص برای شرکت های خارجی و درآمد ارزی شاید جالب و خوب باشه ولی بدترین بخشش همیشه استرس نقد کردن اون هست و اینکه ترس داشته باشی که حسابت یه موقع لیمیت یا بسته نشه.

پس بهتره حساب پی پل خودتون رو با پاسپورت خودتون و ملیت خودتون باز کنید که از شر یکسری موارد راحت بشد

خوبی های یه برنامه نویسی که ریموت کار میکنه چیه؟

۱. خب اول اینکه استرس رسیدن به سرکار و یا دیر رسیدن رو ندارید
۲. مدیریت زمان کارکردنتون کاملا به خودتون بستگی داره
۳. وقت برای کار کردن زیاد هست و هر ساعتی می تونید کار کنید

معایب برنامه نویسی که ریموت کار میکنه؟

  • میتونم بگم بزرگترین بخش کار ارسال حقوق شما هست. اگه حقوقتون از کشور دیگه ای میاد دردسر نقد کردن و اینکه تغییرات ارز رو دارید.
  • تنبلی و عقب موندن از اجتماع و درجا زدن در یادگیری
  • از دست دادن کار با تیم برنامه نویس
  • کاهش سرعت یادگیری (توی یک تیم سرعت و کیفیت یادگیری خیلی بیشتره)

ORM برای اتصال به API

فرض کنید که یک API/Restful دارید قراره یک سایت رو به این api متصل کنید و قراره که با express.js و react این پروژه رو انجام بدید. دو راه حل عموما میتونید پیش بگیرید، یکی اینکه دیتاهای api رو سمت کاربر لود کنید یا از طریق express.js اطلاعات رو گرفته و به کاربر نمایش بدید.
این آموزش راه حل دوم رو پوشش میده و با استفاده از کتابخونه YAK یک ORM رو شبیه سازی کنید.

بعد از نصب پکیج npm install yak-orm  بعنوان مثال قرار هست که todo لیست هامون رو، دریافت کنیم و api ما این شکلی هست:

 

برای ساخت model، قدم اول، باید api رو وارد کنیم.

و بعد تعریف کردن مدلمون

نکته ای که باید توجه کنید اینه که ابجکی که از api ارسال شده رو باید توی attrs بهش دسترسی پیدا کنید.

برای ساخت یک todo جدید کافیه متد save رو استفاده کنید و اگه id رو هم اضافه کنم به payload، بصورت اتوماتیک درخواست PATCH ارسال میشه که برای ویرایش todo میشه استفاده کرد.

حالا اگه یک endpoint خاصی داشته باشیم چی؟ مثلا قراره نظرات پست شماره یک رو بگیریم

برای اطلاعات بیشتر میتونی به گیتهاب پروژه برید و مثال های مختلف رو ببنید.

الگوی تطابقی با استفاده از daggy

** بروز رسانی **

جهت تکمیل این بخش ویدیویی درست کردم که میتونید از لینک های زیر مشاهده کنید
یوتیوب: https://www.youtube.com/watch?v=3RjCiSnSN0s

آپارات: https://www.aparat.com/v/tncIU

 

 

توی این پست قراره در مورد استفاده از pattern match و کتابخونه daggy رو یاد بگیریم و چطور میشه توی پروژه‌ هایی مثل react و react-native از اون استفاده کرد.

مشکل if ها

این تیکه کد خب همه ما قبلا باهاش مواجه شدیم:

این همه دستور تو یه رندر اصلا جالب نیست.

 

راه حل: pattern matching

توی جاوا اسکریپ بصورت استاندارد چیزی تعریف نشده و خب ما مجبور هستیم از کتابخونه هایی مثل daggy استفاده کنیم.

نمونه کد استفاده از daggy

با این روش ما چند تا چیز جدید رو بدست آوردیم:

  1. کدی کم باگ تری داریم
  2. استفاده مجدد ساده تر از کدها
  3. خوانایی راحت تر کد و ساده کردن زندگی دیگران

روش استفاده در مثالی از دنیای واقعی

خب فرض کنیم که شما پروژه خودتون رو با با دستور create-react-app ساختید و کتابخونه daggy رو با دستور yarn add daggy نصب کردید.

خب قرار ما یک لیستی رو از api دریافت کنیم و خب باید این لیست از دیتا رو با type تعریف کنیم.

فرض کنید که لیستی که از api ارسال میشه این شکلیه:

برای تعریف type ما باید اول بخش بندی کنیم لیستمون رو.

مثلا آبجکت اول این آرایه رو یک Item در نظر میگیرم و بعد مجموعه همه این item ها رو یک page در نظر میگیریم.

نکته بعد این هست که توی taggedSum ما باید حالت های مختلف type رو تعریف کنیم. مثلا اگه حالت اولیه بود و هنوز دستوری ارسال نشده، یاموقعی که خروجی از api داشتیم و غیره رو تعریف میکنیم.

مرحله بعد استفاده از این تایپ های تعریف شده است

نیاز به توضیح نداره که کد ما چقدر قشنگ تر شده و از شر اون همه شرط راحت شدیم.

حالا وقته شبیه سازی اینه که ما مثلا دستور رو به api ارسال کردیم و منتظر نتیجه ای هستیم

حالا اگه از redux استفاده میکنید کافیه این رو توی ریداکستون قرار بدید.

کدهای این پست رو توی گیتهاب میتونید مشاهده کنید.

قالب وردپرس ۷ کیلوبایتی

تا حالا توی قالب های وردپرس چرخ زدید؟ قالب های جذاب با افکت های عجیبشون دنیای خودشون رو قشنگ‌تر کردند. ولی این داستان رو باید از جنبه دیگه ای هم دید، با داشتن این همه چیزای زرق و برقدار، قطعا پردازش زیادی نیازه و خب قطعا باعث مصرف برق بیشتر و در نهایت CO2 بیشتری میره توی کره زمین. خبر خوب اینه که یک آدم باحال تصمیم گرفت که توی این زمنیه دست بکار بشه و یک قالب کم حجم رو بسازه که کمک کنه سایت ورد پرسی شما سریعتر و با آلایندگی کمتری لود بشه.

منم تصمیم گرفتم که این قالب رو برای وبلاگ خودم نصب کنم و خیلی هم لذت بردم از این کارم.

بروزرسانی زیرپوستی با code-push

پیشگفتار:

مشکلی که برای بروزرسانی اپ های موبایل وجود داره اینه که ما باید هر سری یک نسخه apk یا ipa رو بسازیم و بعد یک ورژن جدید تعریف کنیم و در نهایت بعد از یه مدت کوتاه نسخه بروز شده اپ ما در اختیار کاربران قرار میگیره. مشکل اینجا اینه که باید کلی زمان بگذره تا نسخه جدید منتشر بشه و به دست کاربر برسه.

ولی خب وقتی که اپ موبایلی که با react-native نوشته شده، میتونه با code-push ترکیب بشه و مراحل بروز رسانی اپ موبایلتون رو خیلی سریعتر کنید، بدون نیاز به قرار دادن نسخه جدید در فروشگاه اپ موبایل.

روش کار code-push

این ابزار که ساخت مایکروسافت هست کدهای جاوا اسکریپت و عکس های اپ شما رو توی سرورهای خودش ذخیره میکنه و هربار که اپ موبایل اجرا میشه با سرور چک میشه که تغییری اگه ایجاد شده فایل های جدید و دانلود میکنه و بعد توی اجرای بعدی اپ آپدیت جدید اعمال شده.
توجه داشته باشید که تغییرات عمده و اضافه کردن پلاگین های جدید به AppDelegate.m/MainActivity.java باید نسخه آپدیت شده اش رو انتشار بدید و از این طریق امکانپذیر نیست.

نصب code-push-cli

۱- ثبت نام

 

۲- اضافه کردن اپ به اکانت

 

** توجه کنید که بعد از این دستورات یک deployment key بهتون میده که باید به هم تیمی هاتون بدید (من هنوز نفهمیدم که چطوری میشه دوباره این کد رو چک کرد)

اضافه کردن code-push به اپ

۱- نصب ابزار

۲- لینک کردن

** در این مرحله از شما deployment key پرسیده میشه که توی مرحله قبلی باید اون ها رو داشته باشید و اینجا وارد کنید.

۳- اضافه کردن به اپ

** باید شما یک نسخه apk یا ipa از اپ منتشر کنید تا بتونید از code-push استفاده کنید.

۴- ایجاد تغییرات و ارسال کد جدید
** شما میتونید یه تغییر کوچیک توی دکمه یا متنی یا فرمی ایجاد کنید و بعد دستور زیر رو وارد کنید.

۵- دیباگ کردن

برای اعمال تغییرات یکبار باید اپ بسته و باز بشه.

کدپوش و expo ابزار های مشابه هست و بسته به میل خودتون میتونید هر کدوم رو استفاده کنید.
امکانات زیادی داره این ابزار که میتونید توی گیتهاب مشاهده کنید و این مقاله بیشتر جهت آشنایی بود.

یک برنامه نویس خلاق و خوب چه شکلیه؟

مقدمه

همه داستان از اینجا شروع شد که یه روز واقعا هیچ کاری نموده بود انجام بدم، من از رییس خواستم که یک تسکی بهم بده ولی با گفتن یک جمله، خیلی ناراحتم کرد (ناراحتی من بیشتر بخاطر تلخ بودن حقیقت بود). گفت: باید یک شخص خلاق باشی و کمی خلاق باش و قرار نیست که همیشه من بهت یک کار محول کنم.

من تا قبل از اون فکر میکردم که آدم خلاقی هستم و خیلی نیروی خوبی هستم، اینکه کارها رو زودتر از موعد تحویل میدم، کدهام رو تست شده و بدون باگ یا حداقل کمترین باگ تحویل میدم.

ولی باید صادق باشیم، همه آدم ها میتونن این کار رو انجام بدند و این شکلی باشند، در کل برنامه نویس خلاقی نبودم و بیشتر یک برنامه نویس حرف گوش کن بودم که کارهایی که بهش داده می شه رو خیلی خوب انجام میداد.

 

برنامه نویس معمولی

کسایی که کدهای توی گیتهاب، stackoverflow و غیره رو با تغییراتی در پروژه خودشون قرار می دن و در آخر کاری رو که بهشون واگذار شده بود رو سر وقت تحویل می دند.

 

:صادقانه بگم که من هنوز توی گروه معمولی هستم و در حال تغییر و حرکت به سوی خلاق شدن هستم هرچند کار سختیه ولی غیر ممکن نیست.


برنامه نویس خلاق

 

بعد به فکر افتادم که چطور میشه خلاق بود، اصلا تعریف برنامه نویس خلاق چیه. از چند برنامه نویس خوب پرسیدم که خلاقیت یعنی چی و حتی رفتار یکی از برنامه نویس های خلاق رو دنبال کردم و به نتایج زیر رسیدم و خب هنوز در حال یادگیری بیشتر هم هستم در این زمینه.

 

خلاق ها توی ساعت کاری:

موقع انجام دادن وظیفه شون اگه خارج از حیطه وظیفه شون باگی یا کدی که خراب باشه رو درست میکنند و نمی ترسند از تغییر دادن اون کد.

هیچ وقت بیکار نیستند و همیشه کاری هست برای انجام دادن، برای مثال اونها درصورت نداشتن کار، مشغول Code refactoring یا افزایش Code coverage هستند.

 

خلاق ها موقع وقت آزادشون:

 

دائم مشغول یادگیری زبان، تکنولوژی و یا سرویس های جدیدی هستند که میتونه به پروژه شون کمک کنه و کارها رو ساده تر کنه.

مثلا توی آخر هفته اش زبان جدیدی که می تونه توی پروژه استفاده بشه رو یاد میگیره و یک نمونه نمایشی هم ارائه میده، اگر هم تایید نشد چیزی از دست نمیده و در اصل هم زبان جدیدی یا گرفته و هم باعث شده که هم تیمی ها بدونن کسی هست که علاقه مند به پیشرفت همه هست.

حرف آخر

هنوز این لیست خلاق بودن در حال تغییر هست و نمیشه یک قانون مشخص براش نوشت و دنبال کرد همون طور که مشخصه باید خلاق بود ولی چیزی که در بین همه خلاق ها مشترک هست پرسشگری بودن هست و باید همیشه کنجکاو بود و سوال پرسید.

من آدم با استعدادی نیستم، من فقط بسیار کنجکاو هستم – انشتین

دنیای وب دچار تحول شده و بدنبال افراد خلاق هست پس باید خلاق بود و خلاقیت یاد گرفتنی هست و چیزی ذاتی نیست.

نظر شما چیه در مورد برنامه نویس خلاق؟

Flake8 چی هست و چرا باید استفاده کرد؟

ابزارهای زیادی هست که با استفاده از اونها ما تبدیل بشیم به یک برنامه نویس بهتر. ابزارهایی که در استفاده های روزمره به کمک زیادی میکنه که یکی از اون ابزار linting هست که تقریبا همه زبان های برنامه نویسی برای خودشون یکی دارند.

linting دقیقا یعنی چه؟

به برنامه ای که کد ما رو آنالیز میکنه و خطاهای احتمالی رو پیدا میکنه، Linting نامیده میشه.

اولین برنامه ای که این کار رو کرد Lint بود و توی زبان C کار میکرد.

Linting آیا جزو واجبات هست؟

خب تقریبا میشه گفت آره، استفاده از اونا باعث میشه که

  • می تونیم syntax error، بد بون شکل ظاهری، غلط املایی ها و غیره رو بفهمیم
  • صرفه جویی در وقت
  • باعث میشه بازبینی کدهامون (review) راحت تر باشه برای هم تیمی هامون (بخاطر یک شکل بودن کدها)
  • سادگی استفاده
  • سادگی در راه اندازی اولیه
flake8 چی هست؟

خب یکی از ابزارهای linting در پایتون هست و توی کاروانرو ما از اون استفاده میکنیم.

نصب flake8 و روش استفاده

برای نصب کافیه با توجه به ورژن پایتونی که دارید نصب رو انجام بدید

برای استفاده از اون هم کافیه فقط توی ترمینالتون دستور زیر رو وارد کنید

یکی از امکانات خیلی باحال تر flake8 اینه که شما میتونید فقط یک خطای خاص رو توی یک فایل یا فولدر بررسی کنید.

فرض کنید که میخواهیم بررسی کنیم که آیا خط طولانی توی یک فولدر وجود داره یا نه

تنظیمات flake8 برای ادیتورها:
ترکیب flake8 و git

فرض کنید که پروژه ای دارید فایل های زیادی داره و وقت و حوصله ویرایش فایلهای قدیمی رو ندارید ولی تصمیم دارید از این ابزار برای فایل های جدید استفاده کنید و یا شاید شما دوست داشته باشید که flake8 رو به Continuous integration اضافه کنید و از این به بعد همه باید از این ابزار استفاده کنند.

این کد کاری که انجام میده اینه که اول که فایل های جدید یا تغییر پیدا کرده رو از گیت میگیره و linting رو روی اونا انجام میده و اگه خطا داشته باشه نمایش میده.
شما کافیه این دستور shell رو هر بار قبل از کامیت کردن یا قبل از deploy کردن کدتون اجرا کنید.

شمارش در مدل

چطوری میشه تعداد سطرهای مدلمون رو شمرد؟

خب خیلی ساده با استفاده از:

خب این دستور درسته جواب میده ولی بعد از اجرای دستور زیر دقیقا این اتفاق می افته:

برای تست من جدول customers رو با همین دستور اجرا کردم و زمان زیر رو بدست آوردم

شاید زمان زیادی نباشه ولی خیلی بهتر هست که دستور رو بشکل زیر استفاده کنیم:

بعد از اجرای این دستور زمان اجرا خیلی جالب میشه.

منبع

معرفی سرویس جستجوی Aloglia

جستجو هوشمند و سریع با  Aloglia

مدتی بود که محصولات جدیدی که به فروشگاه اضافه می‌شد، در جستجوی سایت نمایش داده نمی‌شد، پس در صدد بر اومدم ببینم مشکل از چی می‌تونه باشه، تا اینکه رسیدم به این که فروشگاه ما ازAlgolia استفاده می کنه و خب باعث شد از این سرویس باحال بیشتر بدونم.

روش کار Algolia:

روش کارکرد Algolia به این صورت هست که شما باید اطلاعاتی رو که مایل هستید در اون جستجو بشه باید  با استفاده از  RESTful JSON API به اکانت Algolia خودتون ارسال کنید. بعد از ارسال اطلاعات کافیه در سایت یا اپ خودتون با api ها اطلاعات رو با سرعتی بسیار عالی جستجو کنید.

یکی از علت های سریع بودن Algolia در استفاده از CDN های مختلفی هست که در مکان های مختلف دنیا قرار داده است.

مزیت Algolia به نسبت Elastic Search:

در وبلاگ Algolia  می‌تونید مقایسه این دو سیستم جستجو رو بخونید، من چند تا از نتیجه های تست رو برای شما قرار دادم .

algolia-performance

 

برای چه زبان‌هایی API Client داره:

algolia-apis

 

و البته ناگفته نمونه که  پلاگین‌هایی هم برای ورد پرس، مجنتو داره!

سایت مستندات Algolia

استفاده Algolia در لاراول:

کافیه که شما پکیج رسمی رو با composer نصب کنید

بعد از نصب به service provider اضافه ش کنید:

و بعد دستور زیر رو با php artisan اجرا کنید که فایل های این پکیج کپی بشه در کانفیگ‌هامون:

حالا config/algolia.php رو باز کنید و تنظیمات api key رو انجام بدید.

 

تا اینجا پکیج لاراول Algolia نصب شده و آماده به کار هست کافیه که Algolia رو در مدلی که می خواهید اطلاعات اون مدل قابل جستجو باشه استفاده کنید. توی مثال زیر مدل Contact رو برای جستجوی Algolia آماده کردیم

 

تمامی کاری که باید انجام بدید همین دو خط اضافه کردن به مدلتون هست، حالا شما هر رکورد جدید به مدل اضافه کنید، به  Algolia  اضافه میشه، طبعا برای حذف، حذف میشه و برای ویرایش هم به روز میشه.

این پکیج بطور خودکار اسم مدل رو به عنوان اندیس یا index در نظر می گیره و در اکانت شما، اطلاعات مدل رو ارسال میکنه.

algolia-index-recds

خب تا اینجا اطلاعات ذخیره شد ولی برای جستجو در اطلاعات می تونید از کتابخونه جاوا اسکریپتی رسمی هم استفاده کنید که کلی آموزش داره و هر کسی می تونه استفاده کنه.

عملکرد algolia در ۲۴ ساعت گذشته (سرویس Starter )و زمان های پاسخ :

algolia-data-reports

در این پست من سعی کردم یک آشنایی جزیی با  Algolia  داشته باشیم و خیلی مطالب بیشتری میشه گفت، چیزی که بیشتر از هر چیزی من رو مجذوب خودش کرده بود api خیلی عالی  Algolia  بود. حتما برای جنبه فان هم شده با این سرویس کار کنید.