VPN خصوصی و اختصاصی سرور اختصاصی خود را نصب کنید – یادداشت های مهندس

Raspberry Pi به عنوان VPN سرور شخصی

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

HTTPS، در حالی که عالی برای حفاظت از خود گذرواژهها در یک وبسایت خاص محافظت میشوند تا از ترافیک بیشتر و تمام فعالیتهایتان در دستگاهتان محافظت نمیکنند (پشت صحنهها خیلی بیشتر است).

به عنوان مثال با تلفنهایتان، هنگامی که شما انتخاب بین استفاده از شبکه WiFi عمومی (اجازه می دهد در کار و یا فقط در یک دفتر بزرگ مانند WeWork می گویند) و با استفاده از داده های تلفن همراه خود را (که در مورد من نامحدود است، به لطف ورایزون!)، اساسا انتخاب بین اینکه آیا یا نه داده های ترافیک تلفن همراه خود را بین شما و حامل سلولی خود حفظ کنید یا این اطلاعات حساس را بین شما، حامل خود و یک دسته از بازیگران ناشناخته و ترافیک نگه دارید.

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

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

یک کاربر معمولی (ha، mortals!) به راحتی می توانید یک برنامه ماهانه از یک ارائه دهنده VPN را با یکی از جذاب ترین و جذاب ترین بخش بازاریابی خریداری کنید. متاسفانه این رویکرد هنوز یک بازیگر شخص ثالث را اضافه می کند که شما واقعا نمی توانید اعتماد داشته باشید، که هنوز از تمام فعالیت های آنلاین خود آگاه است. من به شدت ترجیح می دهم یک شرارت کمتر، فعالیت خود را تنها بین من و ISP من را حفظ کنید.

خوشبختانه ما یک مهندس نرم افزار هستیم و می توانیم سرور مجازی VPN خود را از ابتدا ساخت، که بسیار ساده تر از آنچه شما فکر می کنید

نصب و راه اندازی من:

  1. Raspberry Pi 3 مدل B مادربرد
  2. سامسونگ 32GB 95MB / s (U1) MicroSD EVO
  3. جعبه اسرعا برای Raspberry Pi 3 با فن خنک کننده و هیت سینک، 5V / منبع تغذیه 2.5A، میکرو USB با سوئیچ روشن / خاموش

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

سختافزار ما در حال حاضر گامهایی برای تبدیل Raspberry Pi به سرور اختصاصی VPN است (امید این مقاله موجب صرفه جویی در مقدار زیادی از جستجوی گوگل می شود):

ابتدا ما باید سیستم عامل Raspberry Pi (بر اساس دبیان، بنابراین شما می دانید apt-get است) بر روی آن MicroSD، برای بوت کردن ناز، کمی، سبز Raspberry Pi

  1. دانلود آن را از اینجا: https://www.raspberrypi.org/downloads/raspbian/ (اگر این اولین پروژه Raspberry Pi شما است، دانلود آن را با دسکتاپ،
    دسکتاپ RASPBIAN STRETCH فقط شگفت انگیز!)
  2. دریافت کننده اتچر از اینجا: https://etcher.io/
  3. رایت کنید که MicroSD

هنگامی که Raspberry Pi بالا می رود، آن را تنظیم کنید.

SSH غیر فعال شده است به طور پیش فرض ، شما باید آن را فعال کنید (کاملا ساده است، بر روی دسکتاپ به تنظیمات بروید و روی علامت SSH کلیک کنید، در خط فرمان انجام دهید sudo raspi-config).

  1. تغییر د رمز عبور خطا برای pi کاربر (نقطه امنیت!) که تمشک است.
  2. کاربران را به صورت لازم اضافه کنید.
  3. اطمینان حاصل کنید که Raspberry Pi یک IP ثابت از روتر شما دریافت می کند. 19659025] در تنظیمات روتر شما پورت انتقال تمام تراکنش UDP را به دستگاه Raspberry Pi پیکربندی کرده و از بعضی از پورت های دیگر از 1194 (نقطه امنیت!) استفاده کنید

حالا زمان تبدیل Raspberry Pi به سرور VPN

برای تلفن های موبایل فانتزی و ترسناک پیچیده است اما آن را ندارد (با تشکر از پروژه PiVPN!).

نگاهی به مستندات اینجا: https://github.com/pivpn/pivpn

Glance over the scripting here: https: // install .pivpn.io

هنگامی که شما تمام نگرانی های خود را رفع کردید و اطمینان دارید که خنک است، این دستور را روی Raspberry Pi اجرا کنید:

 curl -L https://install.pivpn.io | bash 

از این لحظه، آن را به همان اندازه ساده ویندوز قدیمی نصب شده در اواخر دهه 90 است: فقط نشستن، استراحت و پاسخ به تمام سوالات که بالا میآید.

یادداشت:

  1. اطمینان حاصل کنید که از پورت استفاده می کنید از روتر پیش فرض UDP forwarding
  2. یک سوال در مورد ارائه دهنده DNS وجود دارد، مراقب باشید در اینجا (نقطه امنیت!) همانطور که قبلا گفتم، من ترجیح می دهم شیطان کمتر، نگه داشتن ترافیک من بین من و ISP من، بنابراین سرور DNS های ISP خود را انتخاب کنید، سفارشی را انتخاب کنید، IP ها DNS خود را وارد کنید.
  3. من فکر می کنم که تمام گزینه های دیگر را به طور پیش فرض با استفاده از مقادیر پیشنهادی بگذارید (لطفا به من در این مورد مراجعه کنید! من دوست دارم بدانم اگر چیزی از دست رفته است!)

بم. تقریبا انجام شده است.

اکنون شما نیاز به اضافه کردن پروفایل های PiVPN (توصیه می شود که پروفایل جداگانه ای برای هر دستگاه برای کنترل بیشتر دانه اضافه کنید) از این دستور استفاده کنید:

 pivpn add 

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

این فایل فایل * .ovpn (یعنی PiVPN بر اساس OpenVPN) در ~ / ovpns / برای کاربر انتخاب شده شما ایجاد می کند، سپس:

  1. بر روی iPhone شما (من یک طرفدار اپل البته) دانلود برنامه OpenVPN از فروشگاه
  2. دریافت این *. ovpn فایل آنلاین به صورت خصوصی (نقطه امنیت! اطمینان حاصل کنید هیچ علامتی از این فایل در هر نقطه بعد وجود دارد، محلی را امتحان کنید وب سرور)، با سافاری تلفن همراه خود به آن دسترسی پیدا کنید و گزینه باز کردن با OpenVPN را انتخاب کنید.

انجام شد. همه چیز از این لحظه بسیار ساده است. VPN شخصی شخصی شما هم اکنون کار می کند

همان مکانی برای MacBooks: وارد کردن *. ovpn به مشتریان VPN بر روی کتابهای خود.

VPN در Rinat آیفون

یک چیز عالی علاوه بر حفظ حریم خصوصی

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

iOS OpenVPN به VPN خصوصی شما وصل شده است

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

شما خوش آمدید.

GDAX Pocket UI – یادداشت های مهندس

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

در اینجا من در حال حاضر GDAX Pocket UI:

GDAX Pocket UI

UDA Pocket GDAX یک پروژه منبع باز شما است می تواند در GitHub پیدا کند: https://github.com/rinchik/gdax-pocket-ui

اولین تکرار این پروژه محدود به حساب ها و معاملات Ethereum است، اما می تواند به راحتی برای استفاده در بیت کوین و سایر حساب های موجود در Cryptocurrency گسترش یابد در Coinbase و GDAX.

UI

در گوشه بالا سمت چپ یک قیمت قیمت گذاری شده است که نشان دهنده زمان واقعی تغییر قیمت Ethereum است:

آخرین قیمت اتریم

مجموع مانده حساب در گوشه بالا سمت راست :

مجموع حساب متعادل

سرصفحه حاوی نمودار ترسیم بصری برای نظارت بر نوسان قیمت در زمان واقعی (هنوز WIP):

قیمت تیکر گراف

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

اطلاعات حساب

با دکمه های عمل می توانید پ توری فروش / خرید سفارشات محدود. حد پیش فرض 1 روز است:

دکمه های عمل

بخش های فعال بخش به شما نشان می دهد تمام سفارش های فعال قرار داده شده برای حساب Ethereum خود را با توانایی لغو آن. سفارشات فروش در قرمز نمایش داده می شود و سبز خریداری می شود:

بخش سفارشات فعال

این پروژه ها به عنوان یک رابط کاربری کوچک برای API GDAX آغاز شد که به من اجازه می داد معاملات من را انجام دهد و نظم های من را نظارت کند و از آن زمان به یک نرم افزار مناسب با UI دلخواه

GDAX یک پلت فرم عالی است که یک API تجاری گسترده را فراهم می کند، اما یک نقص وجود دارد: خود GDAX تنها به استفاده از دسکتاپ محدود می شود. [فقط کاربران ثبت نام شده می توانند لینک ها را ببینند.]

Algorithmic Trading

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

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

GDAX Pocket UI

هنگام ایجاد این برنامه، هدف اصلی من امنیت و به عنوان محدود بودن مواجهه با جهان خارج بود. اگر نگاهی به بسته package.json بیاندازید، خواهید دید که میزان وابستگی های شخص ثالث بسیار محدود است، وقتی که طرف سرور بسیار کوچک است و فقط به عنوان یک پروکسی بین رابط کاربر و API GDAX عمل می کند، UI دارای وزن مخصوص توسعه است و از ابتدا با VanillaJS ساخته شده است (شما می توانید در مورد یکی از مقالات قبلی خود در مورد وانیلی مدرن در جهان جاوا اسکریپت بیشتر بخوانید) بدون وابستگی شخص ثالث صریح:

وابستگی UI Pocket UDA

همه HTML عناصر در این برنامه دوباره تعریف شده و با API های جدید مورد نیاز گسترش می یابند و با آنچه شما می توانید با آن تماس بگیرید قابلیت سفارشی مجازی DOM .

تنها وابستگی UI که برای ارتقاء در SVG سفارشی استفاده می شود نمودار تیکر و ارزش ذکر شده است https://socket.io/

هنگام کار بر روی UDP جیبی Pocket، حتی اگر این برنامه کوچک با VanillaJS نوشته شده است (حتی تماسهای AJAX)، این واقعا آن را دوست ندارد ، آن را مانند کار با زبان بالغ در یک ساختمان احساس می کند طرح ریخته شده:

GDAX Pocket UI Development

یادداشتهای امنیتی

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

قبل از اجرای این برنامه در حالت تولید، آن را با Gboxbox sandbox تست کنید: https://docs.gdax.com/#sandbox . [19659038] من نمی توانم به اندازه کافی استرس داشته باشم نباید این برنامه را در سرورها یا سرویس های قابل دسترسی عمومی میزبانی کند، آن را به صورت محلی میزبانی کند و از آن طریق تونل VPN امن دسترسی پیدا کند (شما می توانید دستورالعمل های دقیق در مورد نحوه راه اندازی VPN شخصی خود را پیدا کنید سرور در مقاله قبلی من) به عنوان آن را به طور مستقیم با امور مالی شخصی شما مرتبط است.

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

تجارت الگوریتمی با NodeJs – یادداشت های مهندس

با دسترسی ما به بازار سهام، تجارت الگوریتم (تجارت الگوریتم، تجارت سیاه و سفید و غیره) به نظر می رسد مانند یک پروژه جانبی بسیار جذاب، یک گزینه جذاب برای بالقوه افزایش ثروت ما و همچنین یک تمرین مغرضانه برای توسعه دهندگان احتمالا قبلا می دانید که بازارهای سهام ما و هر چیزی که مربوط به امور مالی است، به شدت تنظیم می شود، با بسیاری از گواهینامه ها و گواهینامه های لازم، که به نظر می رسد یک مبتدی است که نمی خواهد با آن مقابله کند. پس ما چه کار میکنیم؟ ما با ریسک بیشتری شروع می کنیم، اما برای گزینه های ما بیشتر به ما امکان می دهد: معاملات معکوس ارز. بازار های رمزنگاری مانند تنظیمات شدید نیست و سیستم عامل های تجاری مانند GDAX.com فرصتی عالی برای شروع و توسعه مدل های معاملاتی خود را ارائه می دهند. نقطه شروع برای شما و خلاقیت شما، ما بر اساس پایه راه اندازی بر اساس که شما می توانید شروع به ساخت پلت فرم معاملاتی الگوریتم خود را بسیار خود را.GDAX فراهم می کند API به خوبی مستند و همچنین یک بومی NodeJS مشتری. (شما می توانید مستندات API را در اینجا پیدا کنید: https://docs.gdax.com/) شروع به کار کنید. من فرض می کنم که خوانندگان در حال تجربه اولیه با جاوا اسکریپت و NodeJ ها هستند و شما یک حساب فعال با Coinbase و GdaxCreate دارید بسته تجاری: mkdir tradingcd tradingtouch index.jsnpm initAdd کتابخانه GDAX-NODE به عنوان وابستگی پروژه شما: npm install gdaxExcellent. حالا کد را امتحان کنید ما با استفاده از API عمومی شروع می کنیم که نیازی به داشتن یک حساب کاربری ثبت نشده است. می توانید ببینید که محصولات Gdax چگونه می توانیم تجارت کنیم: const GDAX = require ('gdax')؛
const publicClient = new GDAX.PublicClient ()؛ const callback = (خطا، پاسخ، داده) => {
اگر (خطا)
بازگشت console.dir (خطا)؛ return console.dir (data)؛
} publicClient.getProducts (callback)؛ شما یک خروجی شبیه به این دریافت خواهید کرد: محصولات Gdax این اطلاعات مفید برای شما است که از زمان به زمان چک کنید تا اطمینان حاصل کنید که سفارشات شما سطر بالا و پایین. دیگر روش مفید است که ما می توانیم با مشتری عمومی امتحان کنیم getCurrencies (): publicClient.getCurrencies (callback)؛ کدام این خروجی را تولید می کند: Gdax currenciesReally easy! درست؟ در حال حاضر اجازه می دهید به بخش سرگرم کننده بیشتری دست پیدا کنید: با حساب Gdax خود کار کنید. به https://www.gdax.com/settings/api بروید و یک کلید API ایجاد کنید، فقط برای بازی کردن و تست توصیه می کنم فقط مجوز READ را اعطا کنم به key.Now به index.js ما اجازه می دهد تا خودمان را تایید کنیم: const passPhrase = "yourPasssPhrase"؛ const apiKey = "yourAPIkey"؛ const base64secret = "somethingSomethingBase64 =="؛ const apiURI = 'https: //api.gdax .com '؛ const authenticatedClient = جدید GDAX.AuthenticatedClient (apiKey، base64secret، passPhrase، apiURI)؛ عالی است، حالا می توانیم شروع به کار با حساب ها کنیم و جادوهای برنامه نویسی پولمان را بازیابی کنیم. ببینیم حساب هایمان واقعا چه هستند: authenticatedClient. getAccounts (callback)؛ خروجی شبیه به این را دریافت خواهید کرد: Gdax AccountsThis یک روش ضروری است که به شما اجازه می دهد تا تعادل خود را در تمام حساب های خود بررسی کنید و اطلاعات حساب خود را بدست آورید. هنگامی که همه شناسه های حسابتان را می شناسید، می توانید هر حساب را به صورت جداگانه پرس و جو کنید، برای کنترل دقیق تر: const ACCOUNT_ETH = 'some super-long-account-id'؛ authenticatedClient.getAccount (ACCOUNT_ETH، callback)؛ خوب، همه این عالی است! و ما احتمالا قبلا در مورد استراتژی های معاملاتی فکر کرده ایم و اولین چیزی که شما در مورد آن می پرسید چگونه می توانید قیمت ارز فعلی را بدست آورید. این مشکل است. GDAX به طور فعال از رای گیری این اطلاعات (بمباران با درخواست ها)، اگر شما نظرسنجی شما را به احتمال زیاد به محدودیت های خود را محدود خواهد شد و یا حتی قفل شده است، بنابراین نگذارید. پس چگونه قیمت فعلی را بدست آورید؟ این کمی روی حیله و تزویر است، اما از corse، قابل انجام است. برای این منظور ما باید ارتباط سوکت با سرورهای خود را ایجاد کنیم و به تمام اطلاعاتی که از طریق آن می رویم را فیلتر کنیم و با کمک WebsocketClient آنها را فیلتر کنیم. یک محصول، اتریم را انتخاب می کنیم به عنوان مثال: const ETH_USD = 'ETH-USD'؛ const websocket = جدید GDAX.WebsocketClient ([ETH_USD])؛
const websocketCallback = (data) => console.dir (data)؛ websocket.on ('message '، websocketCallback)؛ خروجی بسیار سریع خواهد بود و به نظر می رسد چیزی شبیه به این: خروجی مشتری Websocket حالا چطور می توانیم قیمت اتریم فعلی را از این ناپایدار دریافت کنیم؟ ما شاهد سفارشهای زیادی هستیم، برخی از آنها فقط دریافت می شوند، برخی هنوز باز هستند. پس از گذراندن اسناد، روشن است که ما تنها به منظور پر کردن و / یا انجام دادن علاقه مند هستیم. معنی فروش فروش فقط بسته شد (در واقع اتفاق افتاده) و ما می توانیم از اطلاعات قیمت که با آن سفارش استفاده کردیم. تماس تلفنی اصلاح شده برای ردیابی قیمت های فعلی: const websocketCallback = (data) => {
if (! (data.type == = 'انجام' && data.reason === 'پر'))
بازگشت؛ console.dir (data)؛
} بام! اکنون همه چیز برای شروع منطق معاملاتی شما ایجاد شده است. شما حساب های خود دارید با تمام اطلاعات مورد نیاز و تعادل، و در حال حاضر شما حتی می توانید پیگیری تغییر قیمت اتریم. Okay. اجازه دهید بگوییم اول نسخه الگوریتم شما را نهایی کرده اید، چگونه ما در واقع تجارت می کنیم؟ const websocketCallback = (data) => {
if (! (data.type === 'done' && data.reason === ' پر کردن '))
بازگشت؛ تجزیه و تحلیل const = someBrilliantAnalyticalMethod (data)؛ اگر (analytics.buy)
return placeBuyOrder (analytics.buyDetails) if (analytics.sell)
return placeSellOrder (analytics.sellDetails)
} چگونه می توان خرید و فروش سفارشات را انجام دادیم؟ بسیار ساده، برگشت به مشتری تایید شده ما: function placeBuyOrder (buyDetails) {
const buyParams = {
'price': buyDetails.price،
'size': buyDetails.size،
'product_id': ETH_USD،
}؛ این […] خریداری شده است، خریداری شده است، خرید (فروش پارامترها، فراخوانی)؛
} function placeSellOrder (buyDetails) {
const sellParams = {
'price': buyDetails.price،
'size': buyDetails. اندازه،
'product_id': ETH_USD،
}؛ این توجه کنید که روش های خرید و فروش اعتباردهنده مشتری، شناسه سفارشاتی را که برای ذخیره چک برای انجام تحویل در آینده نیاز دارید ذخیره می کند. برای بررسی تمام سفارشات قرار داده شده: authenticatedClient.getOrders ( callback)؛ برای بررسی وضعیت یک سفارش فرد: authenticatedClient.getOrder (orderID، callback)؛ این همان است. بسیار آسان برای شروع. هشدار اصلی و منبع موفقیت شما در داخل someBrilliantAnalyticalMethod () ذکر شده است، که در کد بالا ذکر شده است که بعدا بسته به استراتژی انتخاب شده می تواند به دنیای واقعی سهام و اوراق قرضه معرفی شود. هر کس پیاده سازی متفاوت و منحصر به فرد داشته باشد، بنابراین به عنوان خوانده شده، تمرین، از دست دادن پول، لحن، تمرین و کامل دوباره. بهترین ضربه و قوی باد در پشت! به روز رسانی: برخی از قطعه کد در این مقاله از تاریخ است، برای تحولات و اصلاحات اخیر شما می توانید این پروژه را در Gighub دنبال کنید: https://github.com/rinchik/gdax-pocket-ui که در اینجا توضیح داده شده است: https://blog.rinatussenov.com/algorithmic-trading-with-nodejs -gdax-pocket-ui-150e227d0d6a

آیا نوع اجبار در جاوا اسکریپت یک چیز خوب است؟ – یادداشت های مهندس

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

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

بیایید نگاهی به کار نمونه، رویکرد سنتی و رویکرد با نوع اجبار

وظیفه

ما باید تغییر دینامیک عرض عناصر DOM در یک ظرف بسته به تعداد عناصر وجود دارد، تا اطمینان حاصل شود که آنها تمام عرض کانتینر را جمع می کنند.

حداکثر عناصر 3. اگر ما فقط 2 عنصر داشته باشیم، پس هر یک از آن ها نیاز به عرض 50٪، اگر ما 3 عنصر داشته باشیم، عرض هر عنصر باید 33٪ باشد. البته عنصر تک باید 100٪ عرض را داشته باشد.

ما می دانیم که عنصر توسط پرچم مربوط Boolean وجود دارد.

راه حل CSS زیبا ترین خواهد بود، درست است؟ اما به عنوان مثال، اجازه می دهد تا تصور کنید CSS در سال 1996 گیر کرده است.

رویکرد سنتی

این در مورد زشت است!

آنجا شما بروید:

 بولی  FIRST_ELEMENT؛ 
بولین SECOND_ELEMENT؛
بولی THIRD_ELEMENT؛

رشته عرض؛

// اگر تمام عناصر موجود باشد
اگر (FIRST_ELEMENT && SECOND_ELEMENT && THIRD_ELEMENT) {
width = '33٪ '؛
}

// اگر 2 عنصر موجود باشد
اگر (FIRST_ELEMENT && SECOND_ELEMENT &&! THIRD_ELEMENT) {
width = '50٪'؛
}

اگر (FIRST_ELEMENT &&! SECOND_ELEMENT && THIRD_ELEMENT) {
width = '50٪؛
}

if (! FIRST_ELEMENT && SECOND_ELEMENT && THIRD_ELEMENT) {
width = '50٪ '؛
}

// اگر تنها یک عنصر وجود داشته باشد
اگر (! FIRST_ELEMENT &&! SECOND_ELEMENT && THIRD_ELEMENT) {
width = '100٪'؛
}

اگر (FIRST_ELEMENT &&! SECOND_ELEMENT &&! THIRD_ELEMENT) {
width = '100٪'؛
}

if (! FIRST_ELEMENT && SECOND_ELEMENT &&! THIRD_ELEMENT) {
width = '100٪'؛
}

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

آیا می توانیم با رویکرد سنتی بهتر عمل کنیم؟ من هم اینچنین فکر میکنم. به طور پیش فرض و خلاص شدن از آخرین 3 شرایط:

 رشته  width = '100٪'؛ 

// اگر همه عناصر حضور داشته باشند
اگر (FIRST_ELEMENT && SECOND_ELEMENT && THIRD_ELEMENT) {
width = '33٪ '؛
}

// اگر 2 عنصر موجود باشد
if (FIRST_ELEMENT && SECOND_ELEMENT &&! THIRD_ELEMENT {19459019] width = '50٪ '؛
}

if (FIRST_ELEMENT &&! SECOND_ELEMENT && THIRD_ELEMENT) {
width = '50٪؛

اگر (! FIRST_ELEMENT && SECOND_ELEMENT && THIRD_ELEMENT) {
width = '50٪ '؛
}

این کد هنوز بوی خاصی دارد. ما می توانیم با «بهینه سازی» بیشتر، XOR بیتی را معرفی کنیم، منطق بیشتری اضافه کنیم، مقدار شرایط را کاهش دهیم. سوال این است: آیا قابل خواندن است؟ یا این یکی از آن چیزهایی است که شما را مجبور به نظر دادن برای نسل های آینده می کند تا بدانند که در واقع چه اتفاقی می افتد؟ هنوز هم به نظر می رسد بد است

اکنون اجازه می دهد یکی از ابزارهای موجود در جعبه ابزار ما را ببینید و ببینید که آیا آن را می تواند مفید باشد در اینجا: نوع کوک.

Type Coercion

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

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

تبدیل غلط به 0؛

تبدیل واقعی به 1؛ [19659041] این چگونگی آن در این مثال خاص مفید است:

 رشته  width = '100٪'؛ 
اینتر TOTAL_ELEMENTS = FIRST_ELEMENT + SECOND_ELEMENT + THIRD_ELEMENT؛

if TOTAL_ELEMENTS == 2) {
width = '50٪ '؛
}

if (TOTAL_ELEMENTS == 3) {
width = '33٪'؛
}

قابلیت خوانایی به طور قابل توجهی بهبود یافته است

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

بر خلاف قانون Betteridge از سرفصلها، این را نمی توان با کلمه "نه" پاسخ داد.