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

Menu

مراحل و نکات ویزای بلند مدت دانمارک

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

این پست قرار نیست که راهنمایی دقیق باشه برای شما، بیشتر جنبه روشن شدن مسیر هست و ممکنه هر دفعه مراحل تغییر کنه. بهتره و باید الگو شما سایت رسمی دانمارک باشد یعنی سایت newtodenmark.dk

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

مراحل ثبت نام

  1. انتخاب نوع ویزا و ثبت نام در سایت newtodenmark.dk
  2. دریافت کد پیگیری از سایت، فرمت کد شما چیزی شبیه به XX-1234-YY هست و تمامی حروف بزرگ می باشد.
  3. پرداخت هزینه – برای پرداخت هزینه میتونی از گروه پرداخت ارز کمک بگیرید قیمت ها خیلی بهتر از سایت های پرداخت هست، لینک گروه ارز رو در آخر پست می زارم.
  4. ادامه مرحله ثبت نام در https://blanket.nyidanmark.dk ، این بخش رو میتونید توی مرحله ۱ از توی سایت ببینید.
  5. بعد از تکمیل مرحله ۴ باید فرم رو ذخیره کنید و پرینت هم داشته باشید.
  6. پرداخت هزینه های VFS بصورت آنلاین در سایت https://dys.um.dk/permit/
  7. شماره ای که در مرحله ۲ دریافت کردید باید در مرحله ۶ وارد کنید.
  8. جمع آوری مدارک لازم جهت VFS رو میتونید از این بخش ببینید. https://www.vfsglobal.com/Denmark/Iran/pdf/Denmark-Checklist-RESIDENCE-PERMIT.pdf
  9. پیدا کردن آدرس VFS توی گوگل مپ و بدون نوبت رفتن به مرکز. نیازی نیست نوبت بگیرید برای ویزای بلند مدت، بهتره ساعت ۸ صبح اونجا باشید چون روزی بیشتر از ۵ نفر برای ویزای بلند مدت قبول نمی کنند.
  10. تبریک به شما.

لینک گروه ارز https://t.me/joinchat/Fq8r3FDTHWrzcrMtRO7v_Q

نکات مهم

  • مدارک لازم برای VFS باید حتما A4 باشه.
  • کپی های مدارک نیازی به رنگی بودن نیست.
  • از پاسپورت همه صفحات کپی بگیرید، حتی از جلدش.
  • پاسپورت می تونه هر دو صفحه اش توی یک برگه A4 باشه، یعنی صفحه ۴ و ۵ توی یک برگه باشه.
  • حواستون باشه که باید امضا بدید و پاسپورتتون رو هم امضا کنید، تصمیم بگیرید که امضا ها یک شکل باشه.

زمان تحویل و تقریبی پاسپورت و ویزا

طبق تجربه ۳ الی ۷ روز بعد پاسپورت های شما قابل دریافت هست و میتونید برید VFS و تحویل بگیرید و بعد از یک هفته (حدودا) تماس میگیرند که با پاسپورت برید سفارت تا ویزاهاتون رو بزنن توی پاسپورتتون.

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

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

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

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

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

نصب برنامه

برای شروع شما باید برنامه 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 رو با همین دستور اجرا کردم و زمان زیر رو بدست آوردم

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

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

منبع