● کلاینت دسکتاپ نسخه ۰٫۳٫۱۷

هاب تیم شما.
روی سرورهای خودتان.

گفتگو، رشته‌های موضوعی، تماس تصویری، اسناد مشترک و یک دستیار هوش مصنوعی — یک برنامه که تیم شما با ارائه‌دهنده‌ی هویت خودتان واردش می‌شود و روی سخت‌افزاری اجرا می‌شود که در اختیار خودتان است. نه صندلی‌ای برای خریدن، نه مستأجری جای دیگر.

۴٫۲ مگابایت · یک فایل، بدون نصب‌کننده. سایر پلتفرم‌ها

گفتگو · یک صبح در یک کانال

یک باگ که گزارش، ریشه‌یابی و مستند شد — بدون خارج شدن از برنامه

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

‎#release-2-4 — پلتفرم نورث‌ویند نمایش

# release-2-4

انتشار ۲٫۴٫۰ — تأیید استیجینگ تا پیش از پنجشنبه

9

استیجینگ روی 2.4.0-rc3 است. آپلودهای بالای حدود ۴۰ مگابایت در ۱۰۰٪ شکست می‌خورند — نوار پیشرفت کامل می‌شود، بعد سند هیچ‌وقت در پوشه ظاهر نمی‌شود.

تحویل شد

2 ۲ نفر واکنش دادند: در حال بررسی

کنجی تاناکا

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

لیلا حدادی

Power BI — گزارش‌های بزرگ از دیروز شکست می‌خورند.

ترجمه: Power BI — گزارش‌های بزرگ از دیروز شکست می‌خورند.

دنیل اوکورو

پیدایش کردم. client_max_body_size روی پراکسی استیجینگ هنوز 32m است. nginx بدنه‌ی POST را می‌بُرد، DRF بدنه‌ی کوتاه می‌بیند و پیش از آنکه ویوی ما اصلاً اجرا شود ۴۰۰ برمی‌گرداند — پس خطا در لاگ پراکسی است، نه لاگ ما. روی پروداکشن مقدارش 512m.

سوفیا فرارا

با یک PDF ۴۷ مگابایتی بازتولید شد. همان ۴۰۰، همان سکوت در لاگ برنامه.

دنیل اوکورو

همین حالا استیجینگ را وصله می‌کنم. اصلاً فقط استیجینگ را درگیر کرده بود.

مارتا کووالچیک

بیایید مقدار را در compose استقرار هم ثابت کنیم تا دو محیط دوباره از هم فاصله نگیرند.

انتشار ۲٫۴ — محدودیت‌های آپلود

آغاز توسط دنیل · ۶ دقیقه · اشتراک صفحه · پیکربندی nginx استیجینگ

در تماس به توافق رسیدیم: یک محدودیت، یک جا، ثابت‌شده در compose استقرار. در یادداشت انتشار پایین نوشته شد.

دیده شد

در حال نوشتن است

در حال پخش ۰ از ۰

حاصل آن صبح

گفتگو به چیزی ختم می‌شود که آدم‌ها می‌توانند بخوانند

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

پلتفرم › یادداشت‌های انتشار
v2.4.0 #release-2.4 #infrastructure

محدودیت‌های آپلود حالا یک جا زندگی می‌کنند

مارتا کووالچیک  ·  ۲ مرداد ۱۴۰۵

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

چه اتفاقی می‌افتاد

nginx بدنه‌ی درخواست را روی استیجینگ در ۳۲ مگابایت می‌بُرید. مرورگر ارسال را تمام می‌کرد، پس نوار پیشرفت به ۱۰۰٪ می‌رسید، اما جنگو بدنه‌ی کوتاه دریافت می‌کرد و پیش از اجرای ویوی آپلود آن را با ۴۰۰ رد می‌کرد. هیچ‌چیز به لاگ برنامه نمی‌رسید، و برای همین خطا انگار از ناکجا می‌آمد.

چه چیزی عوض شد

محدودیت از پیکربندی nginx مخصوص هر میزبان بیرون آمد و به فایل compose استقرار رفت، جایی که هر دو محیط یک مقدار را می‌خوانند. استیجینگ و پروداکشن حالا هر دو 512m هستند. دو سقف دیگر — ریختن جنگو روی دیسک، و محافظ ۵۰۰ مگابایتی سمت کلاینت در SDK — از قبل مستقل از محیط بودند و تغییری نکرده‌اند.

چه باید کرد

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

دستیار هوش مصنوعی

اول کار را انجام می‌دهد، بعد جواب می‌دهد

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

چرا گام‌ها مهم‌اند

دستیاری که فوری جواب می‌دهد یا دارد چیزی کلی به یاد می‌آورد یا از خودش می‌سازد. دستیاری که چهار ثانیه وقت می‌گذارد و به شما می‌گوید nginx.conf را خوانده، دستیاری است که می‌توانید راستی‌آزمایی‌اش کنید — و همین راستی‌آزمایی، مرز میان یک همکار مفید و یک غریبه‌ی مطمئن است.

  • ●ابزارهای خودش، روی داده‌ی شما. جستجوی پیام‌ها و محتوای هاب، خواندن فایل پیوست، گرفتن یک صفحه از طریق متاسرچ خودتان — هرکدام یک ورودی در یک رجیستری که مدیر سیستم اداره‌اش می‌کند، نه یک جعبه‌ی سیاه
  • ●انتخاب کنید چه کسی جواب بدهد. خودکار مسیردهی کنید یا یک عامل مشخص را نام ببرید. نقطه‌ی پایانی‌ای که شروع به خطا دادن کند، خودش از فهرست انتخاب بیرون می‌رود و وقتی سالم شد برمی‌گردد
  • ●دو حالت. حالت مشاوره‌ای راهنمایی می‌کند و توضیح می‌دهد. حالت سازنده واقعاً سایت، فهرست و صفحه می‌سازد — و تا انسانی نقشه را تأیید نکند چیزی ساخته نمی‌شود
  • ●به خاطر می‌سپارد، و شما می‌بینید چه چیزی را. یادداشت‌های بلندمدت به‌ازای هر فرد است، قابل دیدن، و همان فرد می‌تواند پاکشان کند
  • ●هرچه برایش بفرستید می‌خواند. PDF، Word و متن برای هر مدلی؛ تصویر برای مدل‌هایی که می‌بینند

جدا از گفتگو، در دسترس درون گفتگو

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

دستیار نمایش

دستیار

پاسخ از دل هاب شما

مشاوره‌ای خودکار
جای دیگری هم محدودیت آپلود تنظیم شده؟ استیجینگ همین الان یک فایل ۴۷ مگابایتی را برید.

در حال کار…

جستجوی پیام‌ها — client_max_body_size ۰٫۹ ث
جستجو در هاب — محدودیت آپلود ۱٫۴ ث
خواندن فایل پیوست — nginx.conf ۰٫۷ ث
انتظار برای پاسخ مدل ۲٫۳ ث

سه جا سقف آپلود را تعیین می‌کنند. deploy/nginx.conf سقف بدنه‌ی درخواست را تعیین می‌کند — 32m در بلوک استیجینگ، 512m در پروداکشن، و همین تفاوت است که به آن خورده‌اید. DATA_UPLOAD_MAX_MEMORY_SIZE در backend/settings.py فقط تعیین می‌کند جنگو از چه حجمی به بعد روی فایل موقت بنویسد، پس آپلود بزرگ را رد نمی‌کند. SDK هم هر چیز بالای ۵۰۰ مگابایت را سمت کلاینت پیش از شروع رد می‌کند. تنها مقدار nginx است که بین محیط‌ها فرق دارد.

deploy/nginx.conf‎#infra · ۱۵ بهمن

در حال پخش ۰ از ۰

تماس و اشتراک صفحه

ویدیویی که هرگز از شبکه‌ی شما بیرون نمی‌رود

تماس‌ها از یک SFU مبتنی بر mediasoup و یک سرور TURN مبتنی بر coturn عبور می‌کنند که خودتان کنار بقیه مستقرشان می‌کنید. رسانه را کانتینرهای خودتان بازپخش می‌کنند، پس تماس بین دو نفر در دفتر شما از ابر هیچ‌کس دیگری رد نمی‌شود.

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

پیامی که به فارسی نوشته شده، فارسی می‌ماند

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

dir="auto" — پیش‌فرض مرورگر

Power BI — گزارش‌های بزرگ از دیروز شکست می‌خورند.

از اولین کاراکتر قوی تصمیم می‌گیرد — همان P در «Power» — و کل جمله را چپ‌به‌راست می‌چیند. عبارت فارسی سمت اشتباه نام محصول می‌افتد و نقطه در انتهای اشتباه جمله.

خط اکثریت — کاری که ContentHub می‌کند

Power BI — گزارش‌های بزرگ از دیروز شکست می‌خورند.

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

این قاعده کجا اعمال می‌شود

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

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

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

باقی ماجرا

هرچه یک هاب تیمی لازم دارد، در یک استقرار

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

جستجویی که خودِ جمله را پیدا می‌کند

یک ایندکس Meilisearch روی هر پیامی که به آن دسترسی دارید — بخشنده نسبت به غلط تایپی، رتبه‌بندی‌شده، و محدود به کانال‌ها و گفتگوهای خودتان.

اعلان‌هایی که آدم‌ها روشن نگهشان می‌دارند

وب‌پوش در مرورگر و خلاصه‌ی ایمیلی از آنچه از دست داده‌اید، هر دو به دست یک کارگر پس‌زمینه. کلاینت دسکتاپ کارت‌های اعلان خودش را می‌کشد و Focus Assist ویندوز را رعایت می‌کند.

سند، صفحه و فهرست

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

دستیاری که واقعاً می‌تواند چیزها را پیدا کند

وسط پاسخ دادن ابزار صدا می‌زند — جستجوی پیام، خواندن سند، گرفتن یک صفحه از متاسرچ خودمیزبان خودتان — و هر گام را نشان می‌دهد. پیوست‌ها هم خوانده می‌شوند: PDF، Word و متن برای هر مدلی، تصویر برای آن‌هایی که می‌بینند.

ارائه‌دهنده‌ی هویت شما، نه ما

ورود از طریق OpenID Connect، پس حساب‌ها و عضویت گروه‌ها در همان دایرکتوری می‌مانند که از قبل اجرا می‌کنید. احراز هویت توکنی هم برای هر کار اسکریپتی هست.

حضور و وضعیت خواندن که صادق می‌مانند

نشانگر در حال نوشتن، حضور آنلاین و غایب، و رسید خواندن به‌ازای هر پیام، همه از همان WebSocketی می‌آیند که پیام‌ها می‌آیند، با پشتیبانی Redis.

خودمیزبانی

یک فایل compose، و هیچ‌چیزی که به خانه زنگ بزند

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

چه چیزی لازم دارید

  • ●یک میزبان با Docker و Docker Compose
  • ●یک گواهی TLS — مرورگر بدون آن دسترسی دوربین یا میکروفون نمی‌دهد
  • ●یک بازه‌ی پورت UDP باز برای رسانه‌ی تماس، به‌علاوه‌ی TURN روی ۳۴۷۸ و ۵۳۴۹
  • ●یک ارائه‌دهنده‌ی OpenID Connect اگر ورود یکپارچه می‌خواهید؛ به‌صورت آماده به Authentik وصل است

هیچ SaaSی در مسیر بحرانی نیست

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

زیرساخت شما

کلاینت‌ها

کلاینت دسکتاپ

Electron

مرورگر

React + Vite

لبه

پراکسی معکوس

nginx · TLS

برنامه

Django + Channels

ASGI · HTTP + WebSocket

کارگر پس‌زمینه

Celery + beat

وضعیت و جستجو

PostgreSQL

پیام، سند، کاربر

Redis

حضور · سوکت · صف

Meilisearch

ایندکس تمام‌متن

رسانه

mediasoup SFU

مسیریابی تماس

coturn

TURN / عبور از NAT

ورود از طریق ارائه‌دهنده‌ی OpenID Connect خودتان — حساب‌ها هرگز از دایرکتوری شما بیرون نمی‌روند.

دانلود

کلاینت دسکتاپ را بگیرید

یک برنامه‌ی واقعی به‌جای یک تب مرورگر، و برنامه‌ای کوچک: به‌جای حمل نسخه‌ی خودش از Chromium، از طریق رانتایم WebView2 که ویندوز از قبل دارد رندر می‌کند، پس کل دانلود ۴٫۲ مگابایت است. تک‌نمونه اجرا می‌شود، یک آیکون در سینی نگه می‌دارد، و به نصب‌کننده نیاز ندارد.

ویندوز

ویندوز ۱۰ و ۱۱ · ۶۴ بیتی

یک فایل ‎.exe ۴٫۲ مگابایتی — بدون نصب‌کننده، بدون دسترسی مدیر. از رانتایم WebView2 که روی ویندوز ۱۰ و ۱۱ هست استفاده می‌کند.

macOS

Apple silicon و Intel

همین حالا در CI بیلد می‌شود. امضا و نوتارایز نشده، پس هنوز منتشر نشده است.

در جریان

Linux

AppImage · x86-64

همین حالا در CI بیلد می‌شود، در انتظار یک انتشار تگ‌خورده.

در جریان

اندروید

گوشی و تبلت

برنامه‌ریزی‌شده. وب‌پوش و چیدمان واکنش‌گرا همین حالا در مرورگر موبایل کار می‌کنند.

برنامه‌ریزی‌شده

iOS

آیفون و آیپد

برنامه‌ریزی‌شده. فعلاً به‌صورت وب‌اپ روی صفحه‌ی خانه نصب می‌شود.

برنامه‌ریزی‌شده
نسخه‌ی ۰٫۳٫۱۷ — یک انتشار اولیه است که بی‌دلیل روی نسخه‌ی 0.x مانده است. به آدرس هابی وصل می‌شود که موقع ساخت بیلد تعیین شده؛ انتخاب هاب دلخواه از داخل برنامه در راه است، همراه با نشان‌های خوانده‌نشده و کارت‌های اعلان. انتشارها در GitHub.

بیلدها هنوز امضای کد ندارند، پس ویندوز بار اول یک هشدار SmartScreen نشان می‌دهد — گزینه‌ی More infoرا بزنید، بعد Run anyway.

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

دانلود یک نام فایل ثابت دارد، و MD5 آن کنارش منتشر می‌شود در /download/ContentHub-Native.exe.md5 — چیزی را که دانلود کرده‌اید بررسی کنید، یا برای دیدن بیلد جدید مرتب سر بزنید.