از اینجا شروع کنید؛ نقشه راهی برای توسعه دهنده های وب شامل بک اند، فرانت اند و دواپس

یکی از سوال های دائمی اینه که «از کجا شروع کنم» یا «تا اینجا اومدم حالا کجا برم». جواب این سوال نیاز به یک نقشه داره؛ یک نقشه راه!

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

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

برای دیدن عکسهای بزرگتر، روی عکسها کلیک کنید




منبع در گیت هاب

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

امروز یک رپوزیتوری دیدم که واقعا حیفه بهتون معرفی نکنم: kleampa/not-paid. بهتون این جاوااسکریپت رو می ده:

(function(){
    /* change these variables as you wish */
    var due_date = new Date('2017-02-27');
    var days_deadline = 60;
    /* stop changing here */
    
    var current_date = new Date();
    var utc1 = Date.UTC(due_date.getFullYear(), due_date.getMonth(), due_date.getDate());
    var utc2 = Date.UTC(current_date.getFullYear(), current_date.getMonth(), current_date.getDate());
    var days = Math.floor((utc2 - utc1) / (1000 * 60 * 60 * 24));
    
    if(days > 0) {
        var days_late = days_deadline-days;
        var opacity = (days_late*100/days_deadline)/100;
            opacity = (opacity < 0) ? 0 : opacity;
            opacity = (opacity > 1) ? 1 : opacity;
        if(opacity >= 0 && opacity <= 1) {
            document.getElementsByTagName("BODY")[0].style.opacity = opacity;
        }
        
    }
    
})()

که کافیه بعد از تنظیم دو تا متغیربالاییش به اسم not-paid.js ذخیرش کنین و تو بخش صداش بزنین. حالا یک میزان opacity به body اضافه می شه و هر روز که بگذره بیشتر می شه و سایت رو کم رنگ و کم رنگ تر می کنه تا بالاخره بعد از گذشتن مهلت مقرر (مثلا ۶۰ روز) سایت مشتری کاملا محو بشه (:

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

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

آپدیت ها

  • عرفان در کامنت ها فورک خودش که تاریخ شمسی می پذیره رو گذاشته.
  • سعید هم در ایمیل تذکر داده که «با توجه به ماده ۷۳۸ قانون در نظر داشته باش و هشدار بده که این کار به معنی ممانعت از دسترسی افراد مجاز به اطلاعاتشون هست! و این یعنی ۱ سال زندان و ۲ میلیون هم جریمه» است. منم تو متن تذکر دادم که این مطلب برای فان است و در قوانین ایران بهتره هیچ شوخی این شکلی نکنین. آدم هایی می شناسم که سر چیزهای خیلی خیلی کوچیکتر دردسرهای بسیار عجیبی متحمل شدن در قوانین عجیب ما

مقدمه ای بر اینکه برنامه هایی با رابط گرافیکی، چطور نوشته می شن: کیوت + پایتون

خیلی زیاد از من می پرسن که چطوری توی لینوکس یا توی پایتون باید برنامه ای نوشت که گویی (پنجره و دگمه و کلیک و ..) داشته باشه. جواب در دنیای آزاد تقریبا همیشه همینه: هر طوری که دوست دارین (: در واقع راه های زیادی هست برای تولید یک برنامه با رابط گرافیکی و انتخاب با شماست. یکی از این انتخاب ها فریم ورک Qt است که کیوت تلفظ می شه. مزایای کیوت که باعث می شه من در صورت لزوم سراغش برم اینها است:

  • در تمام سیستم عامل های مرسوم کار میکنه
  • با اکثر زبان های مرسوم می شه درستش کرد
  • قشنگه و کارا
  • سر راست است و راحت
  • منابع منظم و زیادی داره و خوب هم آپدیت می شه

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

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

ویدئو در سه قسمت کوتاه ضبط شده ولی خیلی چیزها ناگفته مونده. مهمترین مبحث که باید بریم سراغش (شاید در ویدئوی چهارم)، مالتی ترد کردن سیستم است ولی راستش یه چیز جالب به ذهنم رسید که بعضی کارها رو نکردم: سورس رو بذارم روی گیت هاب که اگر کسی خواست چیزی بهش اضافه کنه و پول ریکوئست بفرسته (: در ایشوها نوشته ام که چه تغییراتی می تونین بدین و یک هشتگ «باگ_اولی» هم معرفی کردم که انتظار می ره باگ های بسیار آسون باشه برای کسانی که می خوان اولین باگشون رو اصلاح کنن. رپوزیتوری خواندن و پروسس تاریخچه دیجی کالا به شکل اپ دسکتاپ با کیوت و پاینون اینجاست. کسی چه می دونه.. شاید یه زمانی دست و پای باحالتری درآورد و مثلا نمودار داشت و تاریخه و …

و دو نکته آخر:

  1. این رو گذاشته ام در درک برنامه نویسی. دلیلش اینه که می تونین نگاه کنین ببینین مفهوم کلی نوشتن یک برنامه در محیط گرافیکی چیه. لازم نیست کل جزییات قابل درک باشن
  2. یادم رفته بود ویدئوی اول رو ادیت کنم و اطلاعاتی مثل شماره ملی و تلفنم توش بود. یکی از دوستان تذکر داد و ادیت کردم و دوباره آپلود.

توزیع پنجاه نسخه رایگان از «کتاب مدیریت محصول چابک با اسکرام اثر رومن پیچلر» برای دنبال کننده‌ها

آپدیت: فرصت شرکت در این قرعه کشی تموم شد. نتایج قرعه کشی در سایت پارسکدرز

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

و خبر خوب؟ تیم پارسکدرز تصمیم گرفته ۵۰ جلد از این کتاب رو به رایگان بین مخاطب‌های جادی.نت نوزیع کنه (: اگر شما هم می خواین توی این قرعه کشی شرکت کنین کافیه بعد از فالو کردن من و گفتن به دویست تا از دوستاتون و تگ کردن و ریتوییت و چاپ و نصب در میدون شهر و. … این فرم آنلاین رو پر کنین و خب معلومه که بخش فالو و تگ و اینها شوخی بود (:

سعی می کنم هفته آینده یکشنبه قرعه کشی رو انجام بدم و برنده های خوش شانس ما از بین دنبال کننده‌های وبلاگ، توییتر، اینستاگرام و جاهای دیگه مشخص بشن (:

توضیح اینکه چرا در خیلی زبان‌های کامپیوتری، 9999999999999999.0 – 9999999999999998.0 = 2

دیروز توییت کردم که در اکثر زبان های برنامه نویسی این محاسبه جوابش اینه:

9999999999999999.0 - 9999999999999998.0 = 2

عجیبه؟ بله. غیر منطقی است؟ اصلا. توی این ویدئو در مورد مساله اعداد اعشاری در کامپیوتر توضیح می دم و با هم می بینیم که چرا بعضی وقت ها محاسباتمون عجیب غریب از آب در میان.

انرژی بخشه اگر مخاطب های خوب کانال آپارات و یوتوب رو عضو بشن و ویدئوها رو دنبال کنن.

توضیح ویدئویی آسیب پذیری پالیسی کیت CVE-2018-19788

خبر عجیب و بامزه اینه که یک مشکل امنیتی توی پالیسی کیت لینوکس پیدا شده. کار پالیسی کیت اینه که پروسه‌های نیازمند دسترسی رو به پروسه‌های بدون نیاز به دسترسی وصل کنه. در نتیجه مثلا وقتی شما دستور systemctl رو در بسیاری از لینوکس های جدید اجرا می‌کنید، پالیسی کیت اگر لازم باشه پسورد شما رو می گیره و به سیستم‌دی می‌گه که شما دسترسی لازم رو دارین. حالا مشکل چیه؟ پالیسی کیت برای بررسی دسترسی ها از اعداد صحیح (int) استفاده می کنه و اگر کسی با UID بالاتر از ماکزیمم عدد صحیح اون سیستم درخواست بده، …. قاطی می کنه و بهش دسترسی می ده!

فکر کردم باحاله این رو توی ویدئو نشون بدم و نتیجه اش شده این ویدئو:

که خب روی یوتوب، تلگرام و آپارات هم هست.

پروسه و برنامه تقسیم پول اینفلوئنسربازی بین فالوئرها با معکوس کردن احتمال کسانی که چند بار ثبت نام کردن

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

۱. آیا من از این طریق فالوئر جمع می کنم؟

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

۲. آیا بهتر نبود به خیریه بدیم؟

احتمالا چرا. شاید سری بعد اینکار رو بکنیم.

۳. ایا بهتر نبود کالا بدیم؟

اگر می شد خوب بود ولی مشکلاتی داشت. مثلا اگر می گفتم بن کتاب است بعد من باید از طرف برنده براش کتاب می خریدم پست می کردم. یا اگر می گفتم کوپن فلان جا است طرف باید حتما فلان جا عضو می شد. اینطوری ساده تر بود هرچند که خب ذات دادن پول نقد کمتر از چیزهای دیگه باحاله. در عوض طرف حق انتخاب داره (:

۴. بهتر نبود خرج جادی.نت و رادیوگیک و… بشه؟

نه. جادی.نت و رادیوگیک و هیچ چیز دیگه من در وضعیتی نیست که بشه با پول بهترش کرد (: من هر چی لازم دارم،‌ دارم و سعی می کنم ایده ام این نباشه که کارهام رو می شه با پول بیشتر بهتر کرد.


اما حدود ۴۰۰۰ نفر فرم رو پر کردن:

طبق قرار باید ۶ نفر رو به شکل رندم از بین این آدم‌ها انتخاب کنیم. اول فرم گوگل رو توی یک فایل متنی ذخیره کردم. یک ستون حاوی همه اسم ها. اسم فایل هست all.txt و می خوام پیدا کنم که اسامی تکراری چند بار تکرار شدن.

sort all.txt| uniq -c | sort -n | awk '{$1=$1};1' > counted.txt

این دستور بهمون یک فایل جدید می ده که تعدادی که هر نفر اسمش رو نوشته جلوی اسمش اومده. مثلا اینطوری:

      4 Kyarash_bordbar
      5 توییتر
      6 Mary_am_j 
     16 Kayvan_mrz
     16 اینستاگرام

اینها نفرات آخر هستن که اسمشون رو بیشتر از یکبار نوشتن. بعضی ها چیزهای بامزه نوشتن مثلا نوشتن توییتر یا انیتساگرام یا «جادی بردار برای خودت» یا «جادی بده به خیریه» و .. (: همه رو شرکت می دیم. منطقی است که شانس کسانی که یک یا دو بار اسم نوشتن مساوی باشه (تا فالو کردن در دو جا به نفع آدم ها تموم نشه) ولی کسانی که بیشتر از یک بار اسم نوشتن رو باید چیکار کنیم؟ بذارین ببینم کلا دفعات تکرار، چیا هستن:

sort all.txt| uniq -c | sort -n | awk '{$1=$1};1' | cut -f1 -d' ' | uniq 
1
2
3
4
5
6
16

یک و دو که منطقی است. ولی کسانی که ۳ تا ۶ و حتی ۱۶ بار اسم نوشتن رو چیکار کنیم؟ اینها سعی کردن شانس خودشون رو زیاد کنن پس بهتره ما شانسشون رو کم کنیم (: ایده من اینه که کسی که ۱۶ بار ثبت نام کرده یک شانزدهم بقیه شانس برنده شدن داشته باشه. اول کوچکترین مضرب مشترک این اعداد رو پیدا می کنیم:

def BMM(i, nums):
    for n in nums:
        if i%n:
            return False
    return True

i = 1
nums = [1, 2, 3, 4, 5, 6, 16]
while not BMM(i, nums):
    i += 1
print (i)

240

یعنی ما باید هر اسم رو اگر یک یا دو بار تکرار شده بود ۲۴۰ بار تکرار کنیم، اگر ۳ بار نوشته شده بود ۷۰ بار، اگر هم ۱۶ بار نوشته شده بود فقط ۱۵ بار (: شانس رو معکوس کردیم که خیلی حال می ده. بذارین برنامه اش رو بنویسیم:

import re

f = open ('/tmp/counted.txt')
o = open ('/tmp/go.txt', 'w')

for line in f:
    num, name = re.findall ('(\d+) (.*)\n', line)[0]
    if num == '2':
        num = 1
    for i in range(0, 240/int(num)):
        o.write(name+'\n')

حالا ما یک فایل داریم که اگر توش کسی ۱۶ بار ثبت نام کرده، اسمش ۱۵ بار اومده، اگر کسی یک یا دو بار ثبت نام کرده اسمش ۲۴۰ بار اومده! شانس ها معکوس شد. حالا وقت قرعه کشی است:

import random
lines = open('/tmp/go.txt').read().splitlines()
myline =random.choice(lines)
print(myline)

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

برنامه نویسی از که آموختی؟ از برنامه نویسان بد! قسمت دوم

یک روش خوب یاد گرفتن برنامه نویسی خوب، بررسی ضد الگوها/AntiPatterns است. اساتید، نمونه‌های بدی که می‌بینن رو منتشر می کن تا بقیه ببینن که چه روشی اشتباهه و از روش روش خوب رو درک کنن. این مجموعه نمونه های بد برنامه نویسی رو من مدت‌ها پیش دیدم و همیشه گذاشته بودم در موردشون بنویسم.. که ظاهرا رسید به الان. به قول خودمون «ادب از که آموختی از بی ادبان». این قسمت دوم از یک مجموعه دو قسمتی است.

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

کامنت اضافی هم چیز بدیه! اینجا بحث زیاده. بعضی ها فیگور «کد کامنت است» میان و بعضی ها برای هر خط کد۱۰ خط کامنت می نویسن. بهتره شما منطقی باشین و معتدل. اشکالی اصلی کد رو این ببینین که برای یک نفر حرفه ای، توضیحات دو تا می شه: کامنت و کد! اگر کامنت شما داره کد رو توضیح می ده، احتمالا کامنت خوبی نیست. کامنت باید اشاره به فلسفه کلی اون بخش بکنه یا مرجعش یا توضیحی از طرف برنامه نویس. بعضی ها می گن کامنت ها باید الگوریتم و دلایل رو توضیح بدن نه روش رو. اگر کد شما بدون کامنت، ناخوانا است یعنی کد بدی نوشتین. اگر قراره جلوی متغیر، توضیح بدین محتواش چیه، بهتره اسم متغیر رو به اون محتوا تغییر بدین. بدترین حالت وقتی است که کد با کامنت نخونه. به هرحال بحث زیاده. مواظب باشین که بین نوشتن کد لابلای صدها خط کامنت و ادعای «کد برای برنامه نویس خوب کامنته» جای معقولی بایستین.

عملیات پیچیده رو نباید در if انجام بدین. من اخیرا در این مورد یه تذکر گرفتم و کدم رو اصلاح کردم. بهتره بخش های مختلف رو قبلا حساب کنین و در متغیرهایی با اسم های خوب بنویسین و بعد یک ایف خوانا بنویسین که «اگر فلان و بهمان». تنها استثناء وقتی است که بخواین با && در ایف، جلوی اجرای شدن قسمت دوم در صورت اشتباه بودن قسمت اول رو بگیرین.

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