بوت استرپ چیست و چه کاربردی دارد؟ – راهنمای جامع Bootstrap
بوتاسترپ جزو آن دسته از واژههایی است که در حوزههای مختلفی وارد شده و از این رو معانی و تفسیرهای متفاوتی برای آن وجود دارد. اما به طور کلی منظور از بوتاسترپ فرایندی خود راهانداز است که بدون ورودی بیرونی عمل میکند. در فناوری رایانه از این اصطلاح (با اختصار بوت شدن) معمولاً برای اشاره به فرایند بارگذاری نرمافزار پایه در حافظه یک رایانه پس از روشن شدن آن، به خصوص در مورد سیستم عامل استفاده میشود. سپس سیستم عامل مسئولیت بارگذاری نرمافزارهای مورد نیاز را بر عهده میگیرد.
ریشهیابی اصطلاح بوتاسترپ
چکمهها (بوت) معمولاً یک حلقه (استرپ) یا دستگیره در بخش فوقانی خود دارند که به نام بوتاسترپ نامیده میشود و به فرد اجازه میدهد که با استفاده از انگشت یا وسیله دیگری بوتها را از زمین بردارد. اصطلاحی در قرن نوزدهم به خصوص در ایالاتمتحده رواج داشت که «کسی را به وسیله بوتاسترپ از روی زمین برداریم» و اشاره به کاری ناشدنی داشت. بدین ترتیب از بوتاسترپ به عنوان استعارهای برای بهبود دادن چیزی بدون کمک بیرونی استفاده میشود. که این معنی اخیر در قرن بیستم رواج بیشتری داشت.
با این حال بوتاسترپ در حوزههای مختلف معانی بسیار متفاوتی دارد که در ادامه برخی کاربردهای این اصطلاح را در رشتههای مختلف معرفی میکنیم:
- بوتاسترپ (فریمورک فرانت-اند): یک مجموعه از ابزارها برای ایجاد وبسایت و اپلیکیشنهای وب
- برنامه درسی بوتاسترپ: نوعی برنامه درسی است که در آن از برنامهنویسی رایانه برای آموزش جبر به دانش آموزان در سنین بین 12 تا 16 سال استفاده میشود.
- تأمین مالی بوتاسترپ: این واژه در حوزه کارآفرینی و استارتاپها کاربرد دارد و به معنی تأمین سرمایه استارتاپ از محل درآمدها یا منابع داخلی است.
- مدل بوتاسترپ: روشی ریاضی برای محدودسازی و حل مدلها در فیزیک ذرات
- بوتاسترپینگ (کامپایلر): فرایند نوشتن یک کامپایلر در آن زبان برنامهنویسی که قرار است آن را کامپایل کند.
- بوتاسترپینگ (الکترونیک): نوعی از مدار است که از فیدبک مثبت بهره میگیرد.
- بوتاسترپینگ (مالی): روشی برای ساخت یک منحنی بازدهی از قیمتهای محصولات coupon-bearing
- بوتاسترپینگ (حقوق): یکی از مقررات پیشین در دادگاههای کیفری فدرال
- بوتاسترپینگ (زبانشناسی): اصطلاحی که در فرایند یادگیری زبان استفاده میشود.
- بوتاسترپینگ (آمار): روشی که برای انتساب معیار صحت به تخمینهای نمونه آماری استفاده میشود.
کاربردهای بوتاسترپ
همان طور که اشاره کردیم اصطلاح بوتاسترپ گستره معنایی بسیار وسیعی دارد که بسته به رشتهای که مورد استفاده قرار میگیرد، متفاوت خواهد بود. در ادامه معنی این واژه در برخی حوزههای مهمتر را بررسی میکنیم.
بوتاسترپ در زمینه علوم محاسبات
بوتاسترپ در علوم رایانه در بخشهای بوت شدن رایانه، در زمینه توسعه نرمافزار، در کامپایلرها، نصابها، شبکههای همپوشان، پیشبینی رویدادهای گسسته و هوش مصنوعی/یادگیری ماشین کاربرد دارد.
بوت شدن رایانه
بوت شدن فرایندی است که در طی آن یک رایانه آغاز به کار میکند و به طور خاص به راهاندازی نرمافزارهای آن اشاره دارد. این فرایند شامل زنجیرهای از مراحل است که در طی آن یک برنامه کوچک و ساده بارگذاری میشود و سپس برنامههای بزرگتر و پیچیدهتر را در مرحله بعدی راهاندازی میکند. در این معنی رایانهها خود را به کمک بوتاسترپ (در معنی لغوی) بالا میکشند، یعنی خود را به کمک تلاشهای خودشان بهبود میبخشند. بوت شدن به معنی اجرای زنجیرهای رویدادها است که با اجرای رویههای مبتنی بر سختافزار آغاز میشود و سپس هدایت سیستم به فیرمویر و نرمافزاری که در حافظه اصلی بارگذاری شده است، سپرده میشود. بوت شدن غالباً شامل فرایندهایی مانند اجرای تست از خود (self-test)، بارگذاری تنظیمات پیکربندی، بارگذاری یک BIOS، رصدگرهای مقیم حافظه (resident monitors)، هایپرویزور، سیستم عامل یا نرمافزار کاربردی است.
اصطلاح رایانهای بوتاسترپ در دهه 1950 میلادی به عنوان یک استعاره مطرح شد. در آن زمان در رایانهها با فشردن دکمه بوتاسترپ، یک مدار سختافزاری، برنامه بوتاسترپ را از یک واحد ورودی میخواند. سپس رایانه برنامه بوتاسترپ را اجرا کرده و در ادامه دستورالعملهای بیشتری از برنامه را میتوانست بخواند. این یک فرایند خودبسنده بود که بدون کمک بیرونی و با استفاده از دستورالعملهایی که به صورت دستی وارد میشدند صورت میگرفت. این اصطلاح به عنوان یک اصطلاح رایانهای دست کم از سال 1953 مورد استفاده قرار میگیرد.
توسعه نرمافزار
بوتاسترپ میتواند به توسعه محیطهای متوالیاً پیچیدهتر و سریعتر برنامهنویسی نیز اشاره کند. سادهترین محیط احتمالاً یک ویرایشگر متنی بسیار ساده و یک برنامه اسمبلر خواهد بود. با استفاده از این ابزارها فرد میتواند ویرایشگر متنی پیچیدهتر و یک کامپایلر ساده برای زبان سطح بالاتر بنویسد و این فرایند همین طور ادامه مییابد تا این که میتوان یک IDE گرافیکی و زبان برنامهنویسی کاملاً سطح بالا ایجاد کرد.
از نظر تاریخی بوتاسترپ به تکنیکی ابتدایی برای توسعه برنامههای رایانهای نیز اشاره دارد که با استفاده از کامپایلر متقابل که توسط یک رایانه از قبل موجود اجرا میشد، جایگزین شده است. بوتاسترپ در زمینه توسعه برنامه در طی دهه 1950 میلادی آغاز شد، یعنی زمانی که هر برنامهای بر روی کاغذ و با استفاده از کد دهدهی یا در کد باینری به صورت بیت به بیت (1 و 0 ها) طراحی میشد. در این زمان هیچ زبان رایانهای سطح بالایی وجود نداشت، همچنین هیچ کامپایلر، اسمبلر و لینکر نیز موجود نبود. یک برنامه اسمبلر کوچک که چندین دستورالعمل را به کد باینری یا دهدهی تبدیل میکرد A1 نام داشت. این برنامه اسمبلر کوچک در ادامه در زبانی که اسمبلی نامیده میشد، بازنویسی شد؛ اما این بار افزونههایی داشت که امکان استفاده از برخی نمانیک ها (Mnemonic) را برای کدهای عملیاتهای پیچیدهتر فراهم میساخت.
این برنامه منبع اسمبلر در ادامه به وسیله نسخه اجرایی قبلی خود (A1) به کد دهدهی و باینری اسمبل شد تا A2 متولد شود. این چرخه ادامه یافت و بهبودهایی در این برنامه نیز حاصل شد تا این که کل مجموعه دستورالعملها کد شدند، آدرسهای برنچ به طور خودکار محاسبه شدند و مواد دیگر (مانند اسمبلی شرطی، ماکروها، اپتیمیزیشن ها و غیره) نیز تسهیل شدند. بدین ترتیب نخستین برنامه اسمبلی SOAP که اختصار عبارت برنامه اسمبلی اپتیمال نمادین (Symbolic Optimal Assembly Program) بود توسعه یافت. در ادامه کامپایلرها، لودرها و نرمافزارهای کاربردی به زبان اسمبلی کدنویسی شدند و فرایند بوتاسترپ با توسعه سیستمهای نرمافزاری پیچیده با استفاده از نرمافزارهای سادهتر ادامه یافت.
این اصطلاح از سوی داگ انگلبرت (Doug Engelbart) برای اشاره به اعتقادی استفاده شد که سازمانهای مختلف میتوانند با بهبود فرایندهایی که برای بهینهسازی استفاده میکنند، خود را بهبود بخشند.
کامپایلرها
توسعه کامپایلرها برای زبانهای جدید برنامهنویسی نخستین بار در یک زبان موجود توسعه یافت؛ اما پس از آن در یک زبان جدید نوشته شد و توسط خودش کامپایل شد که نماد دیگری از بوتاسترپ محسوب میشود. استفاده از یک زبان موجود برای بوتاسترپ کردن یک زبان جدید روشی برای حل پارادوکس علیت، «اول مرغ بود یا تخممرغ؟» است. در بخش انتهای این نوشته، فرایند تاریخی بوتاسترپ در کامپایلرها به تفصیل مورد بحث و بررسی قرار گرفته است.
نصابها
در طی نصب برنامههای کامپایلر برخی اوقات لازم است که برنامه نصب کننده یا نرمافزار مدیریت بستهها خودش بهروزرسانی شود. الگوی رایج برای انجام این کار استفاده از یک فایل بوتاسترپ کوچک (مثلاً setup.exe) است که نصاب را بهروزرسانی میکند و فرایند نصب واقعی را پس از بهروزرسانی آغاز میکند. برخی اوقات فایل بوتاسترپ کننده، خود پیشنیازهای دیگری که برای نرمافزار لازم است را در طی فرایند بوتاسترپ کردن نصب میکند.
شبکههای همپوشان
یک گره بوتاسترپ که به نام میزبان تلاقی (rendezvous host) نیز نامیده میشود گرهی در یک شبکه همپوشان است که اطلاعات پیکربندی اولیه را به گرههای اخیراً ملحق شده ارسال میکند به طوری که بتوانند به طور موفقیتآمیزی به شبکه همپوشان ملحق شوند.
شبیهسازی رویدادهای گسسته
نوعی از شبیهسازی رایانهای به نام «شبیهسازی رویداد گسسته» (discrete event simulation) وجود دارد که عملیاتهای یک سیستم را به صورت یک توالی زمانی از رویدادها نشان میدهد. مدل شبیهسازی از تکنیکی که بوتاسترپینگ نامیده میشود، استفاده کرده و نقاط دادهای اولیه را با استفاده از تولید کننده عدد شبه تصادفی برای زمانبندی مجموعه اولیه رویدادهای در انتظار بوتاسترپ میکند. این رویدادهای اولیه سپس رویدادهای دیگری را زمانبندی میکنند و در طی زمان رویکردهای زمانی رویدادها به وضعیت پایدار خود میرسد. رفتار بوتاسترپ هنگامی که رفتار وضعیت پایدار حاصل شود، کنار زده میشود.
هوش مصنوعی و یادگیری ماشین
بوتاسترپ تکنیکی است که برای بهبود مکرر عملکرد یک الگوریتم طبقهبندی استفاده میشود. هوش مصنوعی Seed، نوعی از هوش مصنوعی است که فرض میشود توانایی خود-بهینهسازی بازگشتی دارد. بدین ترتیب چنین سیستمی با استفاده از قابلیت خود-بهینهسازی میتواند به تدریج خود را بهبود بخشد و به طور بالقوه افزایشی نمایی در هوش داشته باشد. تاکنون یک چنین هوش مصنوعی شناخته نشده است؛ اما یکی از حوزههای فعال تحقیقاتی محسوب میشود.
هوش مصنوعی Seed بخش مهمی از برخی نظریهها در مورد تکینگی فناوری است. طرفداران این نظریه بر این باورند که توسعه هوش مصنوعی Seed، به سرعت موجب ظهور هوشهایی به مراتب قویتر (از طریق بوتاسترپ شدن) خواهد شد و از این رو عصر جدیدی آغاز خواهد شد.
آمار
بوتاسترپ تکنیکی برای نمونهسازی مجدد است که برای به دست آوردن تخمینهایی از آمارههای خلاصه استفاده میشود.
کسب و کار
بوتاسترپ در تجارت به معنی آغاز یک کسب و کار بدون کمک یا سرمایه بیرونی است. چنین استارتاپهایی هزینه توسعه شرکت خود را از طریق گردش نقدی درونی تأمین میکنند و هزینههای خود را به دقت کنترل میکنند. به طور کلی افراد برای آغاز کردن یک کسب و کار نوپا، مبلغ کمی از پول را برای فرایند بوتاسترپ کنار میگذارند. بوتاسترپ کردن میتواند به عنوان مکملی برای مدل اقتصادسنجی نیز استفاده شود.
زیستشناسی
ریچارد داوکینز در کتاب خود با عنوان «رودی از عدن» (River Out of Eden) از مفهوم بوتاسترپ در رایانه برای توضیح تمییز زیستشناختی سلولها استفاده کرده است: «سلولهای مختلف ترکیبهای متفاوتی از مواد شیمایی دریافت میکنند که باعث میشود ترکیبهای گوناگونی از ژنها فعال شوند و برخی ژنها تلاش کنند تا ژنهای دیگر را روشن یا خاموش کنند. بدین ترتیب بوتاسترپ ادامه مییابد تا این که مجموعه کاملی از انواع مختلفی از سلولها را به دست میآوریم.»
فیلوژنتیک
تحلیل بوتاسترپینگ روشی جهت داوری در مورد قدرت پشتیبانی برای کلادهایی روی درخت تبار زایی است. عددی که روی هر گره نوشته میشود نشاندهنده درصد درختان بوتاسترپی است که آن کلاد را در نقاط انتهایی شاخه نمایندگی میکنند.
حقوق
بوتاسترپ در حقوق به معنی جلوگیری از پذیرش شهادت سماعی در پروندههای کیفری است.
زبانشناسی
در زبانشناسی بوتاسترپ به معنی نظریهای در زمینه اکتساب زبان است.
فیزیک
نظریه کوانتوم: بوتاسترپ در نظریه کوانتوم به معنی یک معیار بسیار عمومی سازگاری برای تعیین شکل یک نظریه کوانتوم از روی برخی فرضیهها در مورد طیف ذرات یا اپراتورها است.
الکترونیک
بوتاسترپ شکلی از فیدبک مثبت در طراحی مدارهای آنالوگ محسوب میشود. همچنین در زمینه شبکههای برق میدانیم که یک شبکه توزیع توان تقریباً هرگز عامدانه قطع نمیشود. ژنراتورها و ایستگاههای برق در موارد لزوم آغاز به کار کرده و یا کار خود را خاتمه میدهند. یک ایستگاه برق معمولی برای این که بتواند برق تولید کند باید اول برق را دریافت کند. این برق از شبکه تأمین میشود و از این رو در مواردی که کل شبکه از کار بیفتد این ایستگاههای منفرد نمیتواند شروع به کار کنند.
بدین ترتیب برای آغاز به کار شبکه باید دست کم تعداد اندکی از ایستگاههای برق برحسب توان خودشان آغاز به کار کنند. در فرایندی که آغاز سیاه نامیده میشود، یک ایستگاه برق بدون تکیه بر توان بیرونی شروع به کار میکند. در غیاب برق در شبکه یک یا چند ایستگاه سیاه باید شبکه را بوتاسترپ کنند.
شبکههای تلفن همراه
در شبکههای تلفن همراه یک فانکشن سرور بوتاسترپ (BSF) عنصری مقدماتی است که کارکردهای مستقل کاربردی را برای احراز هویت متقابل تجهیزات کاربر و سرورهایی که برای هم ناشناس هستند فراهم میکند و بدین ترتیب مبادله کلیدهای سِشِن رمزی متعاقب را بوتاسترپ میکند. اصطلاح بوتاسترپ به فرایندی اشاره میکند که در آن ابتدا یک رابطه امن با دستگاه ناشناس قبلی ایجاد شده و سپس امکان نصب عناصر امنیتی (کلیدها) در دستگاه و BSF متعاقباً ایجاد میشود.
رسانه
منظور از بوتاسترپ در یک رسانه فرایندی است که از طریق آن یک داستان خبری عامدانه (اما به طور ساختگی) از طریق ژورنالیسم خود-ارجاع یا ارجاع به همتا ساخته میشود. ریشه این داستان در حلقه محدودی از سازندگان اصلی محتوای رسانهای است که غالباً آن داستان را درون همان سازمان مینویسند. سپس این داستان به صورت «منطق پذیرفته شده» به رسانههای عمومی گسترش مییابد و هدف از این کار آن است که این مسئله به صورت یک «مسئله پذیرفته شده» از سوی عموم خوانندگان و بینندگان قبول شود. ویژگی اصلی بوتاسترپ در رسانه این است که از آنجا که شواهد اندک و به سختی قابل اثباتی از بیرون برای پشتیبانی از آن استفاده میشود، ترجیح داده میشود که از استناد به داستانهای رسانههای دیگر استفاده شود یعنی «ژورنالیستهایی که با ژورنالیستهای دیگر مصاحبه میکنند.»
از آنجا که این کمپین به طور معمول از سوی حلقه محدودی از گزارشگران و کارشناسان در یک سازمان رسانهای آغاز میشود و برنامه مشخصی برای آن طراحی شده است، گفته میشود که «این کمپین از سوی بوتاسترپ (معنی لغوی) های خودش بالا کشیده میشود»
کاربرد بوتاسترپ در کامپایلرها
یکی از مهمترین حوزههایی که در علوم رایانه از مفهوم بوتاسترپ کمک گرفته، طراحی کامپایلرها است. منظور از بوتاسترپ در کامپایلرها، کامپایلری است که بتواند خودش را کامپایل کند. یعنی کامپایلر (یا اسمبلر) به یک زبان برنامهنویسی نوشته شده باشد که باید آن را کامپایل کند. نسخه اولیهای از چنین کامپایلری (کامپایلر بوتاسترپ) در زبان دیگری ایجاد میشود (که میتواند زبان اسمبلی باشد)؛ سپس نسخههای توسعه یافته بعدی از کامپایلر با استفاده از زیرمجموعه محدودی از آن زبان توسعه مییابند.
بسیاری از کامپایلرها در زبانهای برنامهنویسی مختلف بوتاسترپ شدهاند که فهرستی طولانی شامل زبانهای BASIC, ALGOL, C, D, Pascal, PL/I, Factor, Haskell, Modula-2, Oberon, OCaml, Common Lisp, Scheme, Go, Java, Rust, Python, Scala, Nim, Eiffel, و غیره را شامل میشود.
مزیتهای بوتاسترپ کردن کامپایلر
بوتاسترپ کردن یک کامپایلر مزیتهای زیر را دارد:
- یک تست کامل از زبانی که قصد کامپایل داریم، اجرا میکند که نوعی استفاده مجدد از محصولات تولیدی محسوب میشود.
- توسعهدهندگان کامپایلر و بخش گزارش باگ جامعه تنها باید زبانی که کامپایل میشود را بدانند.
- توسعه کامپایلر را میتوان در زبان سطح بالاتری از آن که قرار است کامپایل شود انجام داد.
- بهبود در بکاند کامپایلر نه تنها موجب بهبود برنامههای با هدف کلی میشود؛ بلکه خود کامپایلر را نیز بهینهسازی میکند.
- یک بررسی جامع سازگاری اجرا میشود، به طوری که تست میشود آیا میتواند کد خود را بازتولید کند.
توجه داشته باشید که در برخی از این نکات فرض شده است که کد زمان اجرای زبان برنامهنویسی نیز به همان زبان نوشته شده است.
مسئله مرغ و تخممرغ
اگر کسی بخواهد کامپایلری برای زبان x کامپایل کند (که به زبان x نوشته شده است) این مشکل پیش میآید که خود کامپایلر چگونه باید کامپایل شود. روشهای مختلفی در عمل برای حل این مشکل «مرغ و تخممرغ» استفاده شدهاند که برخی از آنها شامل موارد زیر هستند:
- پیادهسازی یک مفسر یا کامپایلر برای زبان x در زبان y. برای مثال نیکلاس ویرث (Niklaus Wirth) نخستین کامپایلر زبان پاسکال را به زبان فرترن نوشت.
- از قبل مفسر یا کامپایلر دیگری برای زبان x در زبان دیگری مانند y نوشته شده باشد. این طرحی است که غالباً بوتاسترپ میشود.
- نسخههای قبلی کامپایلر در زیرمجموعهای از زبان x نوشته شده باشند که برای کامپایلر دیگری موجود باشد. برای مثال برخی از فرامجموعههای جاوا، هسکل و نخستین کامپایلر فری پاسکال بوتاسترپ شده بودند.
- یک کامپایلر که از افزونههای زبان غیراستاندارد یا دیگر ویژگیهای زبان اصلی پشتیبانی میکند را بدون استفاده از آن افزونهها یا ویژگیها میتوان نوشت. بدین ترتیب امکان کامپایل کردن آن با کامپایلر دیگری که از همان زبان مبنا استفاده میکند؛ اما مجموعه متفاوتی از افزونهها و ویژگیها دارد، ممکن میشود. بخشهای اصلی کامپایلر ++C به نام clangt در زیرمجموعهای از زبان ++C نوشته شده است که آن را میتوان با استفاده از ++g و ++Microsoft Visul C کامپایل کرد. ویژگیهای پیشرفته با برخی افزونههای GCC نوشته شدهاند.
- کامپایلر زبان x از معماری دیگری که برای یک کامپایلر X دارد، به صورت متقابل کامپایل شود. کامپایلرهای C معمولاً بدین ترتیب به پلتفرمهای دیگر پورت میشوند. ضمناً این روش پس از بوتاسترپ اولیه برای فری پاسکال نیز استفاده شده است.
- کامپایلر در زبان x نوشته شود، سپس به صورت دستی آن را از منبع کامپایل کنیم (که به احتمال زیاد روش بهینهای نخواهد بود) و آن را روی کد اجرا کنیم تا یک کامپایلر بهینه به دست آوریم. دونالد نات از این روش برای سیستم برنامهنویسی WEB literate استفاده کرده است.
روش توزیع کامپایلرها در کد منبع شامل ارائه نسخه پرتابلی از بایتکد آن کامپایلر است، به طوری که بوتاسترپ به فرایند کامپایل کردن کامپایلر با خودش تبدیل میشود. نمودار T یک نمادگذاری است که برای اغلب این تکنیکهای بوتاسترپ کامپایلر استفاده میشود. در برخی موارد آسانترین راه برای واداشتن یک کامپایلر پیچیده به اجرای سیستمی که نرمافزاری روی آن وجود ندارد یا اندک است، شامل یک سری از اسمبلرها و کامپایلرهای پیچیدهتر است.
تاریخچه بوتاسترپ کردن کامپایلرها
اسمبلرها نخستین ابزارهای زبانی بودند که خودشان را بوتاسترپ میکردند. نخستین زبان سطح بالای برنامهنویسی که چنین بوتاسترپی را ارائه میداد ENLIAC در سال 1958 بود. نخستین زبانهایی که به طور گسترده از این روش استفاده کردند، زبان Algol از شرکت Burroughs B5000 در سال 1961 و زبان LISP در سال 1962 بودند.
هارت و لوین یک کامپایلر لیسپ را در دانشگاه MIT در سال 1962 نوشتند و آن را درون یک مفسر موجود لیسپ تست کردند. زمانی که آنها کامپایلر را تا نقطهای بهبود دادند که بتواند کد خود را کامپایل کند، تبدیل به یک کامپایلر بوتاسترپ شد.
این تکنیک تنها زمانی ممکن است که یک مفسر از قبل، در همان زمان یا زبان کاملاً مشابه که قرار است کامپایل شود، وجود داشته باشد.
سخن پایانی
به دلیل دغدغههای امنیتی در مورد حملههای اعتماد کردن به منبع اعتماد و حملههای مختلفی که در برابر اعتمادپذیری کدهای باینری صورت میگیرند، چندین پروژه در حال تلاش هستند تا نه تنها زحمت بوتاسترپ کردن از سورس را کم کنند؛ بلکه به همه افراد امکان تأیید کد منبع و کد قابل اجرای متناظر را ایجاد کنند. این تلاشها شامل پروژه ایجاد بیلد های قابل بوتاسترپ و پروژههای ایجاد بیلد های قابل بازتولید است.
اگر به این نوشته علاقهمند بودید، موارد زیر نیز احتمالاً مورد توجه شما واقع میشوند:
- آموزش بوت استرپ (Bootstrap) برای طراحی صفحات وب
- مجموعه آموزش های طراحی و برنامه نویسی وب
- آموزش طراحی قالب واکنشگرا (Responsive) با بوت استرپBootstrap) )
- روشهای بازنمونهگیری جکنایف و بوتاسترپ (Jackknife and Bootstrap) — به زبان ساده
- مجموعه آموزشهای اقتصادی و مالی
- ساخت فرم تماس بوتاسترپ (Bootstrap) به زبان ساده
- فرم لاگین بوتاسترپ با اعتبارسنجی PHP – به زبان ساده
==