آموزش مینی فریم ورک فلسک

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

کتاب آموزش فلسک

دو پاراگراف اول کتاب رو در ادامه می تونید بخونید.

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

فلسک، فریمورک توسعه برنامه های تحت وب برای زبان برنامه نویسی پایتون است. Ronacher Armin توسعه دهنده آن است که گروه علاقه مندان به پایتون با نام Pocco را نیز رهبری می کند. فلسک بر پایه ابزار WSGI Werkzeug و موتور نشانه گذاری Jinja٢ کار می کند که هر دو از پروژه های Ronacher هستند.

برای دانلود کتاب به پروژه متن باز آموزش فلسک بروید و فایل PDF رو برای خواندن آموزش و یا فایل TEX را برای ویرایش فایل لاتکس پروژه دانلود فرمایید.

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

گردآوری توسط ایده طلایی

زبان برنامه نویسی ارلنگ

ارلنگ چیست؟

اولش این رو بگم که ارلنگ یک زبان برنامه‌نویسی تابع‌گرا است.

اگه تا حالا با زبان‌های دستوری کار کرده باشین عباراتی مثل ++i ممکنه براتون عادی باشه اما در برنامه نویسی تابع‌گرا مجاز نیست. در واقع تغییر دادن مقدار یک متغیر شدیدا ممنوعه!‍‍‍ ممکنه عجیب و غریب به نظر بیاد ولی اگه کلاس ریاضی رو یادتون باشه چیزی که یادگرفتین این بود:‍‍‍‍‍‍

y = 2
x = y + 3
x = 2 + 3
x = 5

اگه اینو اضافه کنیم:

x = 5 + 1
x = x
∴ ۵ = ۶‍‍

گیج شدین؟! برنامه‌نویس‍‍ی تابع‌گرا این را به رسمیت میشناسه. اگه ما بگیم که x برابر است با ۵؛ منطقا نمتونیم مدعی باشیم برابر ۶ هم هست! و همچنین اینکه یک تابع با پارامتر یکسان همیشه یه چیز برمیگردونه:

x = add_two_to(3) = 5
∴ x = 5

خروجی توابع با پارمترهای یکسان همیشه یکی است و تغییر نمی‌کنه که به این اصل referential transparency میگیم. این اصل چیزیه که اجازه میده add_two_to(3) رو با ۵ جاگزین کنیم؛ در نتیجه ۳+۲ همیشه برابر با ۵ است. این به این معنی است که میتونیم چندین تابع رو به هم بچسبونیم تا یک مسئله پیچیده تر رو حل کنیم بدون اینکه مشکلی پیش بیاد. منطقی و تروتمیز. اینجوری نیست؟ مشکلی هست این وسط:

x = today() = 2018/10/22
-- یک روز صبر کنین --
x = today() = 2018/10/23
x = x
∴ ۲۰۱۸/۱۰/۲۲ = ۲۰۱۸/۱۰/۲۳

وای نه! معادله زیبای من! ناگهان همه چیز اشتباه میشه! چجوریه میشه وقتی که خروجی تابع من هر روز فرق می‌کنه؟

مشخصا مواردی وجود داره که خوبه referential transparency نقض بشه. ارلنگ رویکرد عملگرایی با برنامه نویسی تابع‌گرا داره: پیروی کنید از خالص ترین اصول( پرهیز کردن از تغییر دادن داده، referential transparency و غیره) اما وقتی به مسائل دنیای واقعی برخوردید این اصول رو نقض کنید .

الان ارلنگ رو تعریف میکنیم: ارلنگ یک زبان برنامه‌نویسی تابع‌گرا است، اما با تاکید بسیار زیاد روی همزمانی(concurrency) و قابلیت اطمینان بالا (high reliability). ارلنگ برای اینکه بتواند ده‌ها کار رو همزمان انجام بدهد از مدل بازیگر (actor model) بهره می‌برد و هر بازیگر یک فرایند (process) ماشین مجازی است. اگه شما یه بازیگر در جهان ارلنگ بودید، یک شخص تنهایی هستید که در یک اتاق تاریک بدون پنچره نشسته‌اید و منتظرین تا یک نامه‌ای رو از صندوق‌ پستی بگیرین. وقتی که نامه رو گرفتین، یک کار مشخصی میکنین: صورتحساب رو پرداخت میکنین وقتی که یک صورتحساب گرفتین؛ وقتی یه کارت تبربک گرفتین، یه نامه «تشکر» مینویسین و بی‌خیال نامه هایی میشین که درکی ازش ندارین.

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

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

وقتی ما ارلنگ رو تعریف میکردیم در سطح زبان بودیم ولی در یک معنای وسیعتر این همه اون چیزی نیست که وجود داره؛ ارلنگ یک محیط توسعه هم هست. کد به بایت‌کد ترجمه میشود و داخل ماشین مجازی اجرا می‌شود. بنابراین ارلنگ شبیه جاوا و بچه‌هاش همه جا میتونن اجرا بشن. توزیع استاندارد ارلنگ شامل ابزار‌های توسعه ( کامپایلر، دیباگر، پروفایلر و فریمورک تست)، فریمورک OTP، یک وب سرور،پایگاه داده mnesia؛ یک سیستم ذخیره سازی کلید-مقدار که میتونه خودشو روی چندین سرور توزیع کنه؛از تراکنش های چند سطحی پشتیبانی میکنه و اجازه میده بهتون هر نوع داده‌ی ارلنگ رو ذخیره کنین.

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

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

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

خیلی نوشابه نخورین!

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

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

بعدا با عمق بیشتری این مباحث رو پوشش میدیم اما در ذهنتون داشته باشین که برای حل یک مسئله کافی نیست به صورت تصادفی همزمانی رو ایجاد کنیم و کارها سریعتر انجام بشه. غمگین نشین؛ موقعیت‌هایی وجود داره که استفاده از صدها فرایند، هم ممکنه و هم مفیده؛ فقط همیشه این اتفاق نمی‌افته.

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

یه چیز دیگه هم هست که تو ذهنتون داشته باشین: در حالی که ارلنگ بعضی کارها رو خوب انجام میده، میشه همون نتیجه رو با یک زبان دیگه هم گرفت، برعکسش هم درسته؛ نیاز هست که هر مسئله‌ای درست ارزیابی بشه و متناسب با اون ابزارش هم انتخاب بشه. ارلنگ در بعضی زمینه‌ها آش دهن سوزی نیست، مخصوصا برای کارهایی مثل پردازش تصویر، درایور سیستم عامل و غیره و در برخی زمینه ها هم عالیه مثل نرم‌افزاهای بزرگ سروری (مثل صف، نگاشت-کاهش)، پیاده سازی پروتکل های سطح بالاتر، پیام‌رسان و غیره. موضوعات این وسط بستگی به شما داره. الزاما خودتون رو در ارلنگ به نرم‌افزار های سروری محدود نکنین. مواردی وجود داره که افراد کارهای غیرمنتظره و شگفت‌انگیزی هم انجام دادن، مثلا ربات IANO که توسط تیم UNICT درست شده و برای هوش مصنوعی این ربات از ارلنگ استفاده شده و در مسابقات یوروبات ۲۰۰۹ مدال نقره رو هم برنده شده. مثال دیگه‌ش Wings 3D هست، یک مدل کننده سه بعدی (نه رندرکننده) که متن بازه و با ارلنگ نوشته شده و بنابراین چند سکویی هم هست.

برای شروع چه چیزی نیاز دارین؟

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

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

apt-get install erlang # debain based linux
yum install erlang # redhat based linux

روز خوش یا هم شب بخیر!

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

گردآوری توسط ایده طلایی

ریفکتور کردن پروژه جنگو: جابجایی مدل ها

این نوشته رو روی مدیوم منتشر کرده بودم حالا تصمیم گرفتم روی ویرگول هم بنویسم.

Photo by Chris Ried on Unsplash

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

https://cdn-images-1.medium.com/max/800/1*ZXixptvL4rzkx3EDuj38xw.jpeg

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

توی مشکل من همچین مدل هایی وجود داشتن:

#app1 
class ChildModel(ParentModel):
  title = models.CharField(max_length=20)
class OtherModel(models.Model):
  relation = models.Foreinkey(ChildModel, on_delete=models.SET_NULL)
#app2
class ParentModel(models.Model):
  name = models.CharField(max_length=20) 

کاری که قرار بود انجام بشه جابجایی ParrentModel از app2 به app1 بود، روند اصلی این کار اینطوریه:

۱- تغییر اسم تیبل ParentModel به اپ مقصد، چون جنگو اسم تیبل هارو به این شکل ‘app1_childmodel’ نگه میداره پس وقتی اپ یه مدل عوض میشه باید اسم تیبل رو هم تغییر بدیم تا با ساختار جدید همخوانی داشته باشه

۲- نوشتن migration برای جابجایی ParentModel به app1

۳- اپدیت کردن foreignkeys و رابطه ها

۴- نوشتن migration برای پاک کردن ParentModel از app2

۵- جابجا کردن کد مدل

تغییر اسم تیبل

برای این کار باید از meta.db_table استفاده کنیم، به این صورت:

#app2
ParentModel(models.Model):
    #fields
    class Meta:
        db_table = "app1_parentmodel"

جابجا کردن ParrentModel به app1

این اون قسمتیه که یکمی تریکیه، باید تابعی بنویسیم که اونو با کامند RunPython اجرا کنیم و ParentModel رو به app1 ببره ولی مشکل اینجاست که چون ChildModel به ParentModel وابسته هست به خاطر ارث بری توی این مایگریشن اطلاعات کلاس پدر رو از دست میده و به این اررور میرسیم:

django.db.migrations.state.InvalidBasesError: Cannot resolve bases for []
This can happen if you are inheriting models from an app with migrations (e.g. contrib.auth)-

چیزی که فهمیدم این بود که اگر ChildModel رو از state اپ پاک کنیم و این تغییرات رو انجام بدیم بعد دوباره ChildModel رو برگردونیم بدون هیچ اروری migration ها اجرا میشن، الان میشه فهمید که پس اون foreignkey هم به همین مشکل میخوره چون که وقتی ChildModel حذف بشه(موقت)‌اون هم رفرنس رو از دست میده و احتمالاً حدس میزنید که اون فیلد رو هم از state پاک میکنم، حالا بریم ببینیم state چیه؟!

مدل های جنگو ساختار دیتابیس رو هم برای جنگو تعریف میکنه هم برای دیتابیس و به شما این اجازه رو میده که شما تو هر migration مشخص کنید که آیا این تغییرات باید روی دیتابیس هم انجام بشه یا نه این کارو با استفاده از SeprateDataBaseAndState انجام میدیم

این روشی هست که توی اون ChildModel و Foreignkey رو از State پاک میکنیم.

#app1 0001 migration
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
        ('app2','0001_renaming_the_table'),
    ]
state_operations = [
        migrations.RemoveField(
            model_name='othermodel',
            name='relation',
        ),
        migrations.DeleteModel('ChildModel'),
    ]
operations = [ migrations.SeparateDatabaseAndState(state_operations=state_operations)
    ]

توی این migration هیچ دیتایی از دست نمیره اما از نظر جنگو این مدل و فیلد پاک شدن.

حالا میتونیم migration رو برای جابجا کردن ParentModel به app1 بنویسیم

from django.db import migrations, models
def update_contentypes(apps, schema_editor):
    """
    Updates content types.
    We want to have the same content type id, when the model is moved.
    """
    ContentType = apps.get_model('contenttypes', 'ContentType')
    db_alias = schema_editor.connection.alias
# Move the ParentModel to app1
    qs = ContentType.objects.using(db_alias).filter(app_label='app2', model='parentmodel')
    qs.update(app_label='app1')
def update_contentypes_reverse(apps, schema_editor):
    """
    Reverts changes in content types.
    """
    ContentType = apps.get_model('contenttypes', 'ContentType')
    db_alias = schema_editor.connection.alias
# Move the TrackingAlert model to tracking
    qs = ContentType.objects.using(db_alias).filter(app_label='app1', model='parentmodel')
    qs.update(app_label='app2')
class Migration(migrations.Migration):
dependencies = [
        ('app1', '0001_delete_from_state'),
        ('app2', '0001_renaming_table'),
    ]
state_operations = [
        migrations.CreateModel(
            name='ParentModel',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                #all the other fields
            ],
        ),
    ]
database_operations = [
        migrations.RunPython(update_contentypes, update_contentypes_reverse),
    ]
operations = [
        migrations.SeparateDatabaseAndState(
            state_operations=state_operations,
            database_operations=database_operations
        ),
    ]

توی متد CreateModel حتماً باید مدل رو همونطوری که توی کد هست تعریف کنیم تا ناهماهنگی پیش نیاد.

اپدیت کردن ForeignKey ها و روابط

توی این حالتی که من بررسی کردم Foreignkey ای نداشتیم که به ParentModel اشاره کنه، ولی شما ممکنه داشته باشید پس راهشو توضیح میدم.

باید برای هر مدلی که دارای این فیلد ForeignKey به مدل ParentModel باشه یه مایگریشن درست کنیم و توی اون با AlterTable مکانی که ParentModel توش هست رو عوض کنیم مثل این:

from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
        ('app1', '0002_move_parent_model'),
        # other dependencies
    ]
state_operations = [
        migrations.AlterField(
            model_name='somemodel',
            name='theforeignkeyfield',
            field=models.ForeignKey(on_delete=models.deletion.CASCADE,
                                    to='app1.ParentModel'),
        ),
    ]
operations = [     migrations.SeparateDatabaseAndState(state_operations=state_operations)
    ]

بعد از اپدیت کردن ریلیشن ها آماده ایم که کد مدل رو جابجا کنیم(yay!)

نوشتن مایگریشن برای پاک کردن مدل ParentModel از app2

چرا این مرحله باید انجام بشه؟ چون گفتم که جنگو یه اطلاعات از ساختار دیتابیس شما داره که اون رو اعمال میکنه روی دیتابیس ما نمیخوایم که مدل توی دیتابیس تغییر بکنه(پاک بشه) ولی میخوایم جنگو فکر کنه این مدل از این اپ پاک شده و به app2 رفته پس این مایگریشن رو مینویسم:

class Migration(migrations.Migration):
dependencies = [
        ('app2', '0001_renaming_table'),
    ]
state_operations = [
        migrations.DeleteModel('ParentModel'),
    ]
operations = [
        migrations.SeparateDatabaseAndState(state_operations=state_operations)
    ]

این مرحله هم تموم شد میریم مرحله بعدی

جابجا کردن کد مدل

حالا کد مدل رو میبرم توی اون اپ و import هایی که داریم رو هم درست میکنیم.

بعد از این میتونیم اون فیلد و مدلی که اول کار یه جورایی به جنگو گفتیم که وجود ندارند رو دوباره برگردونیم که کار سختی نیست با CreateModel و Addfield و SeparateDatabaseAndState انجامش میدیم:

from django.db import migrations, models
import django
class Migration(migrations.Migration):
dependencies = [
        ('app1', '0002_move_parent_model'),
    ]
state_operations = [
        migrations.CreateModel(
            name='ChildModel',
            fields=[
                ('parentmodel_ptr',
                 models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True,
                                      primary_key=True, serialize=False, to='app1.ParentModel')),
                ('title',models.CharField(max_length=20,),
    ]
        bases=('app1.parentmodel',))
           migrations.AddField(
            model_name='othermodel',
            name='relation',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_Null), to='app1.ChildModel')
        ),
operations = [
migrations.SeparateDatabaseAndState(state_operations=state_operations)
    ]

و.. تموم شد. من این روش رو روی دیتابیس های SQlite و Psql تست کردم و به خوبی جواب داده اگر باز هم به مشکلی خوردید میتونید با من در ارتباط باشید.

امیدوارم مفید بوده باشه.

نوشته ریفکتور کردن پروژه جنگو: جابجایی مدل ها اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

خمیده کردن گوشه‌ی المان‌ها (Border Radius) در CSS

در CSS3 امکانی افزوده شده است که با استفاده از آن میتوانید گوشه ی المان های خودتان را بصورت گرد شده و خمیده شده داشته باشید. این خاصیت Border Radius در CSS نام دارد. در این آموزش یاد میگیریم که چطور میتوانیم با استفاده از سی اس اس (CSS) گوشه‌ی المان ها را خمیده یا گرد کنیم.

Border Radius در CSS

اگر میخواهید با خاصیت Border Radius در CSS بصورت کامل آشنا شوید، پینشهاد میکنم حتما فایل آموزشی زیر را مشاهده کنید.

https://www.aparat.com/v/C9En8

برای اینکه بتوانیم از Border Radius در CSS استفاده کنیم، نیاز هست که مرورگری داشته باشیم که از کدهای CSS3 پیشتیبانی کنند. اگر مرورگر شما یک مرورگر معروف و بروز باشد، از این قابلیت  کاملا پشتیبانی خواهد کرد.

Border Radius قابلیتی است که در آخرین نسخه CSS یعنی سی اس اس ۳ معرفی شده است و به شما کمک میکند که به راحتی گوشه المان هایتان را بصورت گرد شده داشته باشید.

برای استفاده از Border Radius در CSS کافی است که یک المان را در CSS انتخاب کنیم. برای مثال در تکه کد زیر، ما یک div با کلاس mydiv ساخته ایم و در CSS به آن طول و ارتفاع ۲۰۰ پیکسل و رنگ پس زمینه‌ی قرمز را داده‌ایم:

.mydiv{
    width:200px;
    height:200px;
    background-color: red;
}

الان میتوانیم از خصوصیت Border Radius در CSS استفاده کنیم. برای اینکار، تکه کد زیر را به کد CSS خود اضافه میکنیم:

border-radius: 10px

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

همین کار را دقیقا با عکس ها هم میتوانید انجام دهید. برای مثال اگر بخواهید یک تصویر داشته باشید که گوشه‌هایش گرد و خمیده باشد، Border Radius در CSS به کمک شما خواهد آمد. برای اینکار دوباره یک عکس را انتخاب میکنیم، آنرا با اسفتاده از تگ img وارد صفحه‌ی وب خود میکنیم و کد زیر را برای آن مینویسیم:

img{
    border-radius:  20px; 
}

با استفاده از این تکه کد، عکسی که در صفحه‌ی وب‌مان وارد کرده بودیم، با اسفتاده از Border Radius در CSS ، گوشه‌هایش به اندازی ۲۰ پیکسل خمیده میشود و به شکل زیر در می‌آید:

تبدیل یک المان یا عکس به دایره با Border Radius در CSS

شما میتوانید عکس ها یا المان های خودتان را با استفاده از Border Radius در CSS به شکل دایره تبدیل کنید. برای اینکار کافی است که ۲ کار را انجام دهید:

  1. مقدار width و height عکس یا المانی که میخواهید دایره شود را به یک میزان قرار دهید. مثلا هر دوی آ‌ن‌ها ۲۰۰ پیکسل باشد. تا عکس یا المان شما یک شکل مربع به خود بگیرد.
  2. سپس مقدار Border radius آن‌را برابر مقدار %۵۰ قرار دهید.

با استفاده از انجام این ۲ کار، المان یا عکس شما بصورت دایره‌ای شکل نمایش داده میشود:

در این مقاله درباره‌ی Border Radius در CSS صحبت کردیم. با استفاده از خصوصیت Border Radius در CSS میتوان کارهای خیلی جذاب و پیچیده‌ای نیز کرد که در مقالات آینده در یادیفای درباره‌ی آن‌ها صحبت خواهیم کرد.

منبع: یادیفای

نوشته خمیده کردن گوشه‌ی المان‌ها (Border Radius) در CSS اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

فواید یادگیری الگوریتم و ساختمان داده (درک علوم کامپیوتر)

شاید عمده افراد (خودمم جزو همین دسته بودم) در اولین برخوردشون با زبان های برنامه نویسی برن به سمت یادگیری ابزار هایی که زبان در اختیارشون میگذاره و در واقع شروع به بازی با خود زبان و انواع داده ها، I/O و … بکنن.

مثلا شروع میکنن برنامه های ساده مینویسن ، ورودی های ساده میگیرن و با یکم بازی با ورودی خروجی رو پرینت میکنن 🙂 و خلاصه از این دست کارها. اگر پیگیر هم باشند و کار رو رها نکنن بسته به شرایط شون (پشتکار، سن ، رشته ، دونستن زبان انگلیسی و تجربه برنامه نویسی …) میتونن تو یه بازه زمانی نسبتا خوب به حدی برسن تا با تواناییشون درآمد کسب کنن. البته لازم به ذکره که هدف افراد باهم متفاوته و اگر صرفا هدفتون کسب درآمد از برنامه نویسی باشه همین دانش کم کافیه ولی اگر دنبال اهداف آکادمیک هستین باید مسیر متفاوت رو طی کنید که در ادامه توضیح میدم.


به نظر من افرادی که میان به سمت این دنیا بزرگ و بی انتها دو دسته هستند:

۱-صرفا از این کار برای هدف اصلی دیگری استفاده میکنن.

۲-عاشق این کار هستند.

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

دسته دوم ولی مسیر متفاوتی خواهند داشت این افراد اگر خودشون از لحاظ دانش بروز نکنن و مطالعه نداشته باشند تو مدت کوتاهی از رده خارج میشن. پس باید حتما مطالعه رو در نظر داشته باشیم در هرجایگاهی که هستیم. (برای مثال: اگر کارمند بخش آی تی یه شرکت هستیم و کارمون دیتا بیسه به طور مداوم اطلاعات خودمون رو آپدیت کنیم و از تکنولوژی های جدید مطلع بشیم.) اما داستان به اینجا ختم نمیشه؛

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

همونطوری که ادسخر دیکسترای فقید – خالق الگوریتم دیکسترا- میگه:

“علوم کامپیوتر همون قدر درباره کامپیوتر هست که اخترشناسی درمورد تلکسوپ هست.”


نتیجه گیری:

۱- به دونستن زبان بسنده نکنیم و تمرکزمون روی حل مسئله باشه.

۲- دانش مون رو مدام آپدیت کنیم.

۳-ریاضی بخونیم و الگوریتم هارو درک کنیم.

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

گردآوری توسط ایده طلایی

چگونه برنامه نویس حرفه ای بشویم ؟

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

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

دو افسانه ای که مردم را از یادگیری یک مهارت یا حرفه، باز می دارد عبارتند از :

افسانه اول: مردم در چیزی مهارت دارند بخاطر اینکه آنها با استعداد هستند.

واقعیت:‌ مردم در چیزی مهارت دارند بخاطر اینکه آنها بسیار تمرین کرده اند.

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

برنامه نویس

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

آیا در وجودتان بخاطر اینکه شما به حد کافی با استعداد نیستید یا چون به راحتی نمی توانید کاری ( کدنویسی ) انجام دهید، شما را از انجام آن باز می دارد؟ آیا فکر می کنید زمان زیادی برای کسب مهارت مورد نظر صرف می کنید؟ آیا این زمان بسیار طولانی است ؟‌

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

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

در نهایت پاسخ به این سوال؛ آیا می دانید من چند ساله خواهم شد زمانیکه این مهارت را یاد بگیرم ؟ می تواند این باشد: همان سنی را خواهم داشت که اگر این مهارت را یاد نگیرم!

افسانه دوم درباره استعداد و انگیزه

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

حقیقت: افرادی که سخت کار می کنند دارای انضباط شخصی هستند.

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

حاضر شدن در تمرینات زمانیکه شما حس خوبی ندارید، کلید رشد در هر زمینه ای است. تمرین مداوم نام جادویی است که مردمان عادی را تبدیل به فرد خبره می کند. از آنجا که احساس های انسان بسیار ناپایدار هستند؛ (بعضی موقع ها خودمان را پر انرژی، خوشحال و زمانهایی نارحت و خسته حس می کنیم) پس ابلهانه خواهد بود که تصمیمات خودمان را برای تمرین کردن یا نکردن بر اساس آنها بگیریم. اگر تنها زمانهایی که حس خوبی داریم تمرین کنیم به اندازه کافی برای ایجاد رشد و تغییر تمرین نکرده ایم و ما را واقعا به جایی که مد نظر ماست ( برنامه نویس حرفه ای)‌ نخواهد رساند.

ایجاد عادت تمرین

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

متشکرم از زمانی که برای یادگیری صرف کردید.

نوشته چگونه برنامه نویس حرفه ای بشویم ؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

چگونه به یک هکر یا متخصص امنیت عالی تبدیل بشم

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

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

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

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

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

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

  • تست کننده امنیت اپلیکیشن‌های وب:‌ یاد بگیرین برنامه بنویسین تا توی این بحث از آدم‌هایی که فقط بلدن اپلیکیشن تست کنن فاصله بگیرین. درک از سیستم‌عامل و دیتابیس بهتون کمک خواهد کرد و همینطور دونستن چیزهایی مثل پی اچ پی، جاوااسکریپت، پایتون و جاوا. اگر بتونین شیوه کار چیزی رو درک کنین، شکستنش راحتتر خواهد بود. بعد از اون دنبال OWASP بگردین و مسیر رو پیدا خواهید کرد.
  • متخصص امنیت شبکه:‌ بهتره برای خودتون یک لابراتوار درست کنین که اجزای متفاوتی داشته باشه. مثلا استک لمپ (لینوکس، آپاچی، مای اسکوئل، پی اچ پی) همیشه شروع خوب و مرسومی است و بعد بررسی کنین که هر جزء از این استک چطوری امن می‌شه. درک اولیه‌تون که کامل شد می‌تونین برین سراغ PTES (استاندارد اجرای پن تست) و شیوه‌هایی که هکرها به شبکه‌ها حمله می‌کنن رو یادبگیرین و مطمئنا راحت کشف خواهید کرد که علیه هر متد باید چه کاری انجام بشه.
  • Compliance and Auditing: برای اینکار باید در مورد تکنولوژی‌های پایه‌ای و بیزنس مدل‌ها آگاهی کسب کنین. افرادی که در این سمت هستن، بیزنس و امنیت را درک می کنن و مطمئن می‌شون که کارکرد بیزنس بدون صدمه زدن به توان خلاقیت و سرعت، امن می‌شه. خوبه در مورد کسب و کارها بخوانید و با مدیرعامل‌ها و طراحان کسب و کار حرف بزنید و درک واقعی از جهان داشته باشین. در مورد شرکت‌های بزرگ تحقیق کنین و به مواردی که در Center for Internet Security به آن‌ها اشاره شده نگاه کنین. همچنین قواعدی مثل HIPAA، PCI-DDS، DISA STIG و ایزو ۲۷۰۰۱ و SOC2 رو بخوانید و فراموش نکنین که قراره سازمان بدون صدمه زدن به قابلیت‌ها و کارکردهاش‌، امن می‌شه.
  • رمزنگاری/تحلیل رمز: اگر می‌خواهید در این حوزه کار کنید خوبه در زمینه‌های ریاضی و رمزنگاری، تحصیلات آکادمیک داشته باشین و منابع علمی را دنبال کنین. یک رمزنگار ممکنه تو دانشگاه تدریس کنه یا روی الگوریتم ها کار کنه ولی کمتر شرکتی معمولی هست که یک رمزنگار استخدام کنه.
  • مشاور امنیت: کسی که به عنوان مشاور امنیت کار می‌کند، لازم است دانشی گسترده و درک خوبی از محیط‌های کاری و ساز و کار شرکت‌ها داشته باشه. برای این شغل نیاز دارین دانشی به روز از تکنولوژی‌های مورد استفاده شرکت ها و استانداردهای مورد استفاده آن‌ها داشته باشین و با Best Practiceها آشنا بشین. همچنین باید در مورد قوانین محدود کننده و نیازمندی‌های بالا دستی هم آگاه باشین تا بتونین بهترین مشاوره رو به مشتریانتون بدین. اینجا انتظار می ره شما با افق دید بسیار گسترده‌ و آگاهتون، نقاط مورد نیاز برای تقویت امنیت شرکت‌ها و در عین حال حفظ کارایی اونها و سازگاری‌‌شون با قوانین رو پیشنهاد بدین.
  • محقق آسیب‌پذیری‌ها:‌ این شغل به طور خاص نیاز داره که شما حداقل توی یک حوزه بسیار باسواد و با تجربه باشین و حداقل یک زبون برنامه نویسی، فریم ورک یا سیستم عامل رو به خوبی بدونین. بعد با این دانش روی بخش کوچیکی از یک محصول یا شرکت تمرکز می‌کنین و سعی می‌کنین مشکلاتش رو پیدا کنین. مثلا ممکنه شما در سی یا اسمبلی بهترین باشین و با سواد و دانش کامل روی یک شکل از پروتکل، بیاین و روی شیوه کار یک کتابخونه ارتباطی تمرکز کنین و اشکالاتش رو کشف کنین.
  • متخصص امنیت نرم‌افزار: معمولا مهندسان و معماران با تجربه نرم‌افزار بعد از مدتی به متخصصان امنیت هم تبدیل می‌شوند. باید حداقل در یک استک نرم افزاری متخصص باشید و بعد دانش امنیتی خود را برای امن‌تر کردن یک برنامه در آن استک متمرکز کنید. شاید هم وظیفه شما در این شغل، بهتر شدن امنیت کل یک سازمان یا پاسخ دادن به نیازهای امنیتی بقیه کارمندان و برنامه نویسان باشد.

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

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

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

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

مرتبط:
چگونه هکر شویم، ترجمه فارسی از یک هکر واقعی یعنی اریک ریموند

مرجع اصلی

نوشته چگونه به یک هکر یا متخصص امنیت عالی تبدیل بشم اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

تفاوت div و span در طراحی وب

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

https://www.aparat.com/v/VnwRZ

تفاوت div و span در طراحی وب

شاید برایتان سوال باشد که چه زمان هایی باید از تگ div و چه زمان هایی باید از تگ span  استفاده کنیم. در این بخش به بررسی این موضوع میپردازیم و میفهمیم که کاربرد و تفاوت div و span در دنیای طراحی وب چیست؟

تفاوت المان های inline و block

در دنیای طراحی وب ما با دو نوع از المان ها همیشه سر و کار داریم:

  1. المان های in-line
  2. المان های block

المان های in-line المان هایی هستند که اگر قبل و بعد از آن ها متنی قرار دهیم، تمام آن متن را در یک خط قرار میدهند. مثل تگ span.

اما المان های block به این صورت هستند که اگر قبل و بعد از آن‌ ها متنی قرار دهیم، آن محتوایی که بین آن تگ block نوشته شده است، برای ما در یک خط جدید آورده میشود. مثل تگ div, p, h1, h2 و… .

در تصویر زیر و همانطور در فیلم آموزشی بالا این موضوع بهتر توضیح داده شده است:

کاربرد تگ div

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

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

کاربرد تگ span

اما از تگ span زمانی استفاده میشود که بخواهیم به یک قسمت خاص از متن،‌ یک استایل خاص بدهیم.

برای مثال وقتی که بخواهیم در متن فوتر، اسم کسب و کارمان را با فونت و شکلی متفاوت داشته باشیم، میتوانیم از تگ span استفاده کنیم و نهایتا با دادن استایل های css به آن تگ span، ظاهری متفاوت را برای آن طراحی کنیم.

طراحی

منبع: یادیفای

نوشته تفاوت div و span در طراحی وب اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

تجربه یک شکست؛ اپلیکیشن “سفارش آنلاین غذای دیلیم”

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

در ابتدا مختصری درباره

کد نویسی رو از سال ۸۵ و با VB 6 شروع کردم. بعد از اون، یک سال بعد و همزمان با ورودم به دانشگاه، به VB.NET سویئج کردم و بعد از یک سال به #C سویئچ کردم. یکی از اشتباهاتم در این مورد شاخه به شاخه شدن‌های زیادم بود. به عنوان مثال گاهی صرفا از سر کنجکاوی‌ میرفتم سراغ یک زبان‌ برنامه نویسی و یا پایگاه داده، مثلا Lisp، و بعد از چند هفته ول‌شون میکردم. البته گاهی این چند هفته میشد چند ماه، مثلا Neo4j که در حدودا ۳ یا ۴ ماه روی یادگیری‌ش وقت گذاشتم! در سال‌های اخیر دیگه این شاخه به شاخه شدن‌های رو تعطیل کردم و تمرکزم رو گذاشتم روی Node.js و Android.

حالا بریم سر اصل قضیه!

استارت کار مرداد ۹۶ بود و شهریور ۹۷ هم کار رو، به علت کمبود بودجه و عدم استقبال و چند دلیل دیگه، تعطیل کردیم.

کد نویسی رو از اوایل مرداد ۹۶ شروع کردم. انتهای اسفند همون سال هم نسخه اول اپلیکیشن تموم شد و فروردین ۹۷ منتشر شد. البته یک سری وقفه‌هایی در این فاصله باعث شد تا نسخه اول برنامه با یکی دو ماه تاخیر تموم بشه که یک موردش کمر درد شدیدی بود که باعث شد یکی دو هفته تقریبا نتونم کاری انجام بدم. کل کد نویسی برنامه (بک‌اند [Node.js، MongoDB، Redis] و سمت موبایل [java] ) رو هم خودم به تنهایی انجام دادم و فقط یک نفر از دوستانم اواخر کار توی کارهای گرافیکی بهم کمک کرد. در ادامه به دو مورد از اشتباهاتی که در این مسیر مرتکب شدم اشاره میکنم.

اشتباهات :

عدم تست توسط کاربر واقعی قبل از انتشار اپلیکیشن

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

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

برای حل این مشکل به این صورت عمل کردم: اگر صاحب رستوران بعد از ۳ دقیقه سفارش رو نمیدید و یا رد/تایید نمی‌کرد، یک پیام صوتی به شماره موبایل ش فرستاده می‌شد، از طریق تماس تلفنی، و اعلام می‌کرد که شما سفارشی با شماره فاکتور {شماره فاکتور} دارید.تا زمانی هم که فرد به تماس جواب نمی‌داد ربات ول نمی‌کرد و پشت سر هم تماس می‌گرفت! 🙂 . این کار رو توسط رباتی که از پنل SMSای که قبلا خریده بودم انجام دادم. با این روش تقریبا مشکل ذکر شده حل شد.

حل شد، ولی بعد از چندین ماه!! در حالی که میشد این مشکل رو خیلی زودتر تشخیص داد و برطرف‌ش کرد.

راه‌حل : در متدولوژی‌های Agile روی این نکته تاکید شده و اونم این هست که بعد از پیاده سازی یک ویژگی سریعا اون رو به کاربر نهایی نشون بدید و نحوه تعامل فرد رو با اپلیکیشن‌تون رو به شکل دقیق برسی کنید.

پیاده سازی تمامی ویژگی‌های مدنظر در ورژن اول اپلیکیشن

یک اپلیکیشن که دو تا کار رو انجام میده، و اون دو تا کار رو به شکل خوبی انجام میده، خیلی خیلی بهتر از اپلیکیشنی هست که ۱۰ تا کار انجام میده ولی همه رو به شکل ناقص.

در ابتدا ممکنه ایده‌های زیادی به ذهن‌تون برسه که بخواهید همون اول کار اونها رو پیاده سازی کنید. این کار باعث مشکلات متعددی میشه که دو مورد از اونها رو ذکر میکنم:

  • سعی خواهید کرد تا تمامی اون ویژگی‌ها رو پیاده سازی کنید و بعد برنامه رو منتشر کنید که این کار باعث تاخیر در انتشار برنامه خواهد شد.
  • وای به روزی که توی سه چهار تا ویژگی که پیاده سازی کردید به صورت همزمانی باگی پیدا بشه و یا نیاز بشه که در دو یا سه مورد از ویژگی‌ها تغییراتی داده بشه!!! با توجه به اینکه با یک برنامه بزرگ با قسمت‌های به هم مرتبط طرف هستید تغییرات زمان بر خواهد بود و حتی ممکن است همین تغییرات باعث تولید باگ‌های بیشتر بشه!!!

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

#شکست #برنامه نویسی×و یا تجزیه و تحلیل‌شون کنم.

نوشته تجربه یک شکست؛ اپلیکیشن “سفارش آنلاین غذای دیلیم” اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

نکات مهم برای حفظ تمرکز در یادگیری برنامه‌نویسی

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

عدم تمرکز کافی

یک مطالعه از موسسه فناوری Georgia اینگونه بیان می‌کند که توسعه دهندگان نرم افزار پس از قطع شدن تمرکزشان، میانگین ۱۰ تا ۱۵ دقیقه زمان تا ادامه دادن دوباره به کارشان نیاز دارند. طبق مجله هفتگی New York Times، متوسط دقت و توجه یک فرد از سال ۲۰۰۰ به بعد از ۱۲ ثانیه به ۸ ثانیه کاهش یافته است. حواسپرتی‌ها در بهره‌وری عملکرد کار ما به شدت تاثیر گذارند. ما زمانی که تمرکز خود را از دست می‌دهیم، دو برابر اشتباهات معمولی را انجام می‌دهیم و احساس اضطراب و استرس خواهیم داشت. به برخی از عواملی که باعث از دست رفتن تمرکز می‌باشند می‌پردازیم:

  • فضای مجازی

رئیس تحقیقات در توییتر کانادا، Alyson Gausby، اینطور بیان می‌کند که: “ما در جهانی زندگی می‌کنیم که همه در هر جای دنیا از طریق فضای مجازی با یکدیگر در ارتباط هستند. زمانی که از صفحه شبکه اجتماعی خود خارج می‌شویم این حس به ما دست می‌دهد که دیگر به دنیا متصل نیستیم. این مهم‌ترین عامل برای از دست رفتن تمرکز شما در حین کار می‌شود.

  • سر و صدا

یکی دیگر از عواملی که تمرکز شمارو بهم می‌زند شلوغی و سر و صداهای اطراف شماست. سعی کنید در محیطی کار کنید که عوامل بیرونی مزاحم کار شما نشوند.

  • عدم استراحت کافی

بدن ما نیاز به مقدار کافی خواب برای انجام کارهایمان با کارایی بالا دارد. اغلب زمان‌ها کمبود خواب موجب سردرد می‌شود و وقتی سردرد را تجربه می‌کنیم، در کارمان ضعیف عمل می‌کنیم. دکتر Philip Gehrman‌، استاد روانپزشکی گروه روانپزشکی و عضو مرکز خواب Penn گفت: “مطالعات نشان می‌دهد که در طول زمان، افرادی که شش ساعت خواب را به جای هفت یا هشت ساعت جایگزین می‌کنند احساس می‌کنند که با محرومیت خواب خود راحت هستند و به آن عادت کرده‌اند. اما اگر شما در مورد چگونگی انجام آزمایش‌‌های سلامت ذهنی و عملکرد آنها نگاه کنید، روند کاری آنها رو به سراشیبی می‌‌باشد.

  • استرس

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

  • تغذیه نامناسب

درست مانند خواب، بدن ما به غذا نیاز دارد تا عملکرد بهتری در کارمان داشته باشیم. تغذیه ناسالم ارتباط مستقیم با روحیه کاری شما دارد.

جلوگیری از حواس‌پرتی

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

  • مدیریت استرس

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

  • غیر فعال کردن notification در شبکه‌های اجتماعی

“ابزار اجتماعی ما، پیشرفت برای یک جامعه مدرن نیست، بلکه یک چالش برای آن است.” – Clay Shirky، نویسنده کتاب Here Comes Everybody: The Power of Organizing without Organizations.

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

  • استراحت کافی

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

  • تغذیه سالم و ورزش

“نگه داشتن بدن سالم و مناسب، از طریق ورزش و تغذیه، کلید زندگی بهتر، نه تنها در خانه بلکه در کار است.” – David Vollmer‌، مدیر عامل Isolator Fitness.

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

کد‌نویسی راحت و آسان

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

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

نوشته نکات مهم برای حفظ تمرکز در یادگیری برنامه‌نویسی اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی