نقشهٔ راه¶
آنچه عمداً ساخته نشده، و چرا. نقشهٔ راهی که فقط نیتها را فهرست کند فهرست آرزو است؛ این یکی بیشتر دربارهٔ تصمیمهاست.
عمداً به تعویق افتاده¶
پنل وب¶
هیچ چیزی ساخته نشده. APIای که رویش مینشست تمام است — احراز هویت، دفترها، تراکنشها، گزارشها، برنامهریزی — پس این پروژهٔ سمت کاربر است، نه سمت سرور.
به تعویق افتاده چون آدمهایی که از این استفاده میکنند در تلگراماند. پنل برای مواردی است که گفتگو واقعاً در آنها بد است: فهرست بلند تراکنش، گزارشی به شکل صفحهگسترده، مدیریت همزمان اعضای زیاد.
ایتا¶
ساخته نشده. Provider.EITAA در شمارش هست تا هویتها بتوانند به آن ارجاع
بدهند، و درخواستش از اجراکننده موقع بالا آمدن با «آداپتوری نیست» شکست میخورد،
بهجای AttributeError سه صفحه بعد.
API ربات ایتا از بقیه لاغرتر است، و سطح واقعی کارش در Mini App است — که آن هم پروژهای وب میکندش.
ارزش ساختن در گام بعد¶
بازنشانی رمز¶
ساخته نشده، چون مسیر ایمیلی وجود ندارد. جریان بازنشانی بدونش تیکت پشتیبانیای است که خودش را امکان جا زده. اول پیکربندی SMTP لازم دارد، و بعدش سرراست است.
توجه کن که حسابی با پیامرسان متصل، با فراموشی رمز بیرون قفل نمیشود: میتواند از داخل ربات رمز تازهای بگذارد. بازنشانی برای حسابی مهم است که از پیامرسانش دور افتاده، و دقیقاً همانی است که مسیر ایمیلی به کارش میآید.
آنچه از زمان نوشتن این صفحه انجام شده¶
وبهوک در محیط عملیاتی¶
ساخته شد و کار میکند. KASBBOOK_UPDATE_MODE=webhook تحویل بهروزرسانی را به
پروسهٔ API میبرد؛ پروسهٔ ربات موقع بالا آمدن وبهوک را ثبت میکند و از آن به
بعد فقط یادآور میفرستد. برگشتن هم همان تنظیم است.
پولینگ مزیت واقعیای نگه میدارد که ارزش گفتن دارد، و پیشفرض میماند: از پشت هر NATی بدون پورت ورودی کار میکند، و بهروزرسانیها را هنگام راهاندازی دوبارهٔ API از دست نمیدهد. حالت وبهوک این را با بازنگهنداشتن یک اتصال معامله میکند.
اولین چیزی که خرجش شد رازی در ژورنال بود — مسیر راز را حمل میکند، به nginx گفته شده بود لاگش نکند، و به لاگ دسترسی خود uvicorn گفته نشده بود. امنیت را ببین.
حذف حساب¶
ساخته شد. DELETE /auth/me با یک نقطهٔ پایانی پیشنمایش، فوری و برگشتناپذیر،
که تا وقتی دفتر مشترکی بیصاحب میماند رد میکند. در تاریخ این صفحه است نه در
آیندهاش، چون آن مدخلی که میگفت کلیدهای خارجی غیرممکنش میکنند اشتباه بود:
آنها محتاطش میکردند، نه غیرممکن.
چیزهای کوچکتر¶
| دورهٔ بودجه غیر از ماهانه | هر دو مقدار kind استفاده میشوند، اما بازه در BudgetService.status روی ماه جلالی سفتکد شده؛ ستون دورهای وجود ندارد. |
| خروجیهای غیر از CSV | حسابدار واقعی چیزی میخواهد که نرمافزار خودش وارد کند. |
در برنامه نیست¶
ورود دومرحلهای. مالک ردش کرد. ماشینآلات توکن ارزانش میکرد — یک جدول، یک گام در ورود، کدهای بازیابی — پس این تصمیم محصول است نه تصمیم هزینه، و میشود بدون اینکه لازم باشد اول چیزی خنثی شود دوباره سراغش رفت.
APIهای غیررسمی پیامرسانها. نه نقطهٔ پایانی مهندسیمعکوسشدهٔ وبکلاینت، نه ورود بهعنوان انسان با کد یکبارمصرف. ربات بهعنوان ربات پست میگذارد. هر چیز دیگری یک تغییر شرایط استفاده فاصله دارد تا همهٔ استقرارها را یکجا بخواباند.
نسخهٔ میزبانیشدهٔ چنداجارهای. این نرمافزار خودمیزبان است. ادارهکردن دفتر دیگران یعنی مسئولبودن در برابر پول دیگران، و آن محصول دیگری با تعهدات دیگری است.
بازنویسی دفتر برای «سادهتر» شدن. دفتر روزنامهٔ دوطرفه دلیل اثباتپذیری دفترهاست. فهرست یکطرفه کد کمتری میشد و بیصدا توانایی پاسخ به «اینها جور در میآید؟» را از دست میداد.
فهرست حساب قابلپیکربندی. شش حساب کمینهای است که یک دفتر لازم دارد. سیستمی که بگذارد مغازهدار خودش طراحی کند سیستمی است که میگذارد خرابش طراحی کند.
شکافهای شناختهشده¶
گفتهشده، نه پنهان:
- بله و روبیکا در برابر APIهای زندهٔ خودشان آزموده نشدهاند. بر اساس مستندات منتشرشده نوشته شدهاند و با همان مجموعهٔ انطباق تلگرام پوشش داده میشوند، با ترابری ساختگی. این شکلها و منطق را اثبات میکند؛ اثبات نمیکند که سر دیگر موافق است. اولین تماس با توکن واقعی ممکن است تنظیم بخواهد.
- حلقهٔ یادآور پیش از تأیید میفرستد. عمدی — یادآور تکراری بدتر از یادآور ازدسترفته است — اما یعنی شکست در تحویل، خلاصهٔ آن روز را هزینه میکند.
- محدودیت نرخ درونپروسه به ازای هر کارگر است. روی یک کارگر درست، روی چندتا غلط. ردیس درستش میکند و API موقع بالا آمدن نبودش را هشدار میدهد.
- جبران عقبماندگی قواعد تکرارشونده روی ۴۰۰ شلیک سقف دارد. قاعدهای که سالها عقب افتاده در یک اجرا کاملاً جبران نمیشود. در چند اجرا میشود، و سقف جلوی این را میگیرد که یک فراخوان یک بعدازظهر را صرف نوشتن تراکنش کند.