Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

StarCalendar

426 views

Published on

این پروژه سال‌ها پیش با هدف برآورده کردن تمام انتظارات یک کاربر ایرانی گنو/لینوکس از یک تقویم شروع شده و اکنون پس از ۸ سال توسعهٔ مستمر، به بخش اعظم این هدف دست یافته است. در اینجا پس از مختصری از تاریخچهٔ توسعه، به امکانات فعلی و نیازهای مرتفع‌شده می‌پردازیم. سپس با مقدمه‌ای بر لزوم وجود SaaSهای آزاد، مشکلات موجود و راهکارهای در دست اجرا را بیان می‌کنیم.

Published in: Software
  • Be the first to comment

  • Be the first to like this

StarCalendar

  1. 1. StarCalendar github.com/ilius/starcal saeed.gnu@gmail.com twitter.com/saeedgnu ۱
  2. 2. ‫پروژه‬ ‫اهداف‬ ‫شخصی‬ ‫نیاز‬ :‫اولیه‬ ‫هدف‬ ‫تقویم‬ ‫یک‬ ‫از‬ ‫گنو/لینوکس‬ ‫ایرانی‬ ‫کاربر‬ ‫یک‬ ‫انتظارات‬ ‫ه‬‫ه‬ ‫هم‬ ‫کردن‬ ‫برآورده‬ :‫نهایی‬ ‫هدف‬ (‫شده‬ ‫یافته‬ ‫)دست‬ ‫فرعی‬ ‫اهداف‬ ● ‫انگلیسی‬ ‫و‬ ‫فارسی‬ ‫از‬ ‫کامل‬ ‫پشتیبانی‬ ‫و‬ ‫بودن‬ ‫چندزبانه‬ ● (...‫قمری‬ ،‫میلدی‬ ،‫)جللی‬ ‫تقویم‬ ‫مختلف‬ ‫انواع‬ ‫از‬ ‫موازی‬ ‫و‬ ‫همزمان‬ ‫پشتیبانی‬ ● ‫دسکتاپ‬ ‫گرافیکی‬ ‫محیطهای‬ ‫تمام‬ ‫و‬ ‫گنو/لینوکس‬ ‫های‬‫توزیع‬ ‫تمام‬ ‫در‬ ‫اجرا‬ ‫قابلیت‬ ● ‫مختلف‬ ‫های‬‫سلیقه‬ ‫و‬ ‫نیازها‬ ‫اساس‬ ‫بر‬ ‫سازی‬‫شخصی‬ ‫قابلیت‬ ۲
  3. 3. ‫توسعه‬ ‫ه‬‫ه‬ ‫تاریخچ‬ ۳
  4. 4. ‫برنامه‬ ‫خطهای‬ ‫تعداد‬ ۴ git
  5. 5. ‫نهان‬ ‫و‬ ‫آشکار‬ ‫های‬‫قابلیت‬ ● ‫ه‬‫ه‬ ‫پنجر‬ ‫طریق‬ ‫از‬ ‫العاده‬‫فوق‬ ‫سازی‬‫شخصی‬ ‫و‬ ‫تنظیم‬ ‫سازی‬‫شخصی‬ ‫ه‬‫ه‬ ‫پنجر‬ ‫و‬ ‫ترجیحات‬ ● ‫رویداد‬ ‫انواع‬ ‫تعریف‬ ‫قابلیت‬ ‫و‬ ‫رویدادها‬ ‫کامل‬ ‫مدیریت‬ ● ‫تعاملی‬ ‫و‬ ‫پیوسته‬ ،‫واقعی‬ ‫زمان‬ ‫خط‬ ۵
  6. 6. ‫اصلی‬ ‫ه‬‫ه‬ ‫پنجر‬ ۶
  7. 7. ‫عمومی‬ - ‫ترجیحات‬ Double-Click ‫کردن‬ ‫فعال/غیرفعال‬ ‫برای‬ ‫اوبونتو‬ ‫در‬ ‫فقط‬ ‫شود‬‫می‬ ‫داده‬ ‫نشان‬ (‫)عمودی‬ ‫جابجایی‬ ‫برای‬ ‫شده‬ ‫انتخاب‬ ‫سطر‬ ۷
  8. 8. ‫ظاهر‬ - ‫ترجیحات‬ Bad UX, huh? I know ‫انتخاب‬ ‫قابلیت‬Theme‫شد‬ ‫خواهد‬ ‫اضافه‬ ‫آینده‬ ‫در‬ ‫اساس‬ ‫)بر‬Gtk3( Drag & Drop Colors ۸
  9. 9. ‫ها‬‫افزونه‬ - ‫ترجیحات‬ ‫کردن‬ ‫فعال/غیرفعال‬‫جابجایی‬ ‫برای‬ ‫شده‬ ‫انتخاب‬ ‫سطر‬ ۹
  10. 10. ‫شرعی‬ ‫اوقات‬ - ‫ها‬‫افزونه‬ - ‫ترجیحات‬ ۱۰
  11. 11. ‫پیشرفته‬ - ‫ترجیحات‬ ۱۱
  12. 12. ‫سازی‬‫شخصی‬ ۱۲
  13. 13. ‫سازی‬‫شخصی‬ ● ‫کردن‬ ‫جابجا‬widget‫یا‬ ‫افقی‬ ‫)بصورت‬ ‫ها‬ ‫پایین‬ ‫و‬ ‫بال‬ ‫های‬‫دکمه‬ ‫روی‬ ‫بر‬ ‫کلیک‬ ‫با‬ (‫عمومی‬ ● ‫هر‬ ‫به‬ ‫مربوط‬ ‫های‬‫گزینه‬ ‫نمایش‬widget‫کلیک‬ ‫با‬ ‫آن‬ ‫روی‬ ‫بر‬ ● ‫اصلی‬ ‫ه‬‫ه‬ ‫پنجر‬ ‫در‬ ‫آنی‬ ‫بصورت‬ ‫تغییرات‬ ‫اعمال‬ (‫ندارد‬ ‫وجود‬ ‫تائید‬ ‫یا‬ ‫اعمال‬ ‫ه‬‫ه‬ ‫)دکم‬ ۱۳
  14. 14. ‫رویدادها‬ ‫مدیریت‬ ● ‫اصطل ح‬ ‫)معادل‬ ‫رویدادها‬ ‫گروه‬Calendar(‫گوگل‬ ‫تقویم‬ ‫در‬ ● ‫رویداد‬ –‫کار‬ –‫روزانه‬ ‫یادداشت‬ –‫روز‬‫تمام‬ ‫کار‬ –‫هفتگی‬ ‫رویداد‬ –‫ماهیانه‬ ‫رویداد‬ –‫سالیانه‬ ‫رویداد‬ –/ ‫رویداد‬ ‫ه‬‫ه‬ ‫قاعد‬ ‫تعدادی‬ ‫شامل‬ :‫دلخواه‬ ‫رویداد‬Event Rule ● ۲۲‫هستند‬ ‫دیگر‬ ‫بعضی‬ ‫نیاز‬‫پیش‬ ‫بعضی‬ ‫که‬ ،‫قاعده‬ ‫نوع‬ ● ،‫مدت‬ ،‫پایان‬ ،‫شروع‬ ،‫تاریخ‬ ،‫سال‬ ‫در‬ ‫هفته‬ ‫ه‬‫ه‬ ‫شمار‬ ،‫هفته‬ ‫روز‬ ،‫ماه‬ ‫در‬ ‫روز‬ ،‫ماه‬ ،‫سال‬ ... ‫روز‬ ‫در‬ ‫زمانی‬ ‫ه‬‫ه‬ ‫باز‬۱۴
  15. 15. iCalendar was Registered in 1998 by Microsoft as RFC 2445. Used by Google calendar, Evolution, Korganizer, Apple calendar and almost every other calendar program ● Unorganized and confusing design ● Impossible to fully implement in both back-end and front-end (GUI) ● "Recurring and repeating meetings still have a bit of mystery and ambiguity associated with them. Resulting in no true interoperability between the current calendaring and scheduling vendors.", Wikipedia Why didn't I use iCalendar? ۱۵
  16. 16. ● “Not compatible with some non-Gregorian calendars like Islamic and Hebrew calendars”, Wikipedia ● Libraries, applications and services implementing iCalendar do not support Jalali calendar For more information: http://en.wikipedia.org/wiki/ICalendar Why didn't I use iCalendar? ۱۶
  17. 17. So... I decided to design my own standard ● All event rules and event types are implemented from scratch, with Python ● Full and equal support for Jalali, Gregorian and others ● Flexible, organized and extendable design ● Store revision history of events (with git-like object storage design) ● No database on client (desktop) ● Use JSON and BSON file formats – Faster than XML, designed to be read/write by machine, not by human – JSON is plain-text (ASCII or UTF-8), editable by human – BSON = Binary JSON, used by MongoDB ۱۷
  18. 18. ● Super-Fast Occurrence Search (by time) – I have 10,000 events in the last 10 years – Maximum 10 events per day – Give me all the events in this one day range, right now! (avg < 0.01 s) – Logarithmic (Sublinear) time: O(query_time) ~ ln(events_count) ● Small index size (in-memory) ● Fast index generating ● Data Scructure: Event Search Tree – Invented by myself, a combination of: ● Red-Black Binary Search Tree ● Binary Heap (one for each tree node) ● Dictionary (Hash Table) – 400 lines of code ۱۸ A little of the algorithm
  19. 19. ‫رویدادها‬ ‫مدیریت‬ ۱۹
  20. 20. ‫رویدادها‬ ‫مدیریت‬ ۲۰
  21. 21. ‫رویدادها‬ ‫مدیریت‬ ‫سال‬ ‫از‬۲۰۰۶‫گرفته‬ ‫جشن‬ ‫سپتامبر‬ ‫شنبه‬ ‫سومین‬ ‫در‬ ‫افزار‬‫نرم‬ ‫آزادی‬ ‫روز‬ ‫تا‬ ‫شد‬ ‫گرفته‬ ‫تصمیم‬ ،‫بعد‬ ‫به‬ .‫شود‬(‫افزار‬‫نرم‬ ‫آزادی‬ ‫روز‬ :‫پدیا‬‫ویکی‬ :‫)منبع‬ ۲۱
  22. 22. ‫پیوسته‬ ‫و‬ ‫واقعی‬ ‫زمان‬ ‫خط‬ ● ) ‫مقیاس‬ ‫تغییر‬ ‫قابلیت‬zoom / scale‫سال‬ ‫هزار‬ ‫چند‬ ‫تا‬ ‫ثانیه‬ ‫چند‬ ‫از‬ ( ● ‫و‬ ‫محاسبه‬render(‫گراف‬ ‫آمیزی‬‫رنگ‬ ‫الگوریتم‬ ‫)با‬ ‫سریع‬ ‫و‬ ‫هوشمند‬ ،‫پویا‬ ‫بصورت‬ ‫رویدادها‬ ‫کردن‬ ● :‫تعاملی‬ ‫رابط‬‫با‬ ‫رویداد‬ ‫ویرایش‬ ‫و‬ ‫جابجایی‬ ،‫رویداد‬ ‫کلیک‬‫راست‬ ‫منوی‬Drag‫کلیدهای‬ ،‫کردن‬ ،‫چپ‬ ،‫راست‬Home‫منها‬ ‫و‬ ‫علوه‬‫به‬ ،‫فاصله‬ / ۲۲
  23. 23. ‫برنامه‬ ‫نقص‬ ‫مهمترین‬ ۲۳
  24. 24. ‫برنامه‬ ‫نقص‬ ‫مهمترین‬ Online ServiceSync data via ۲۴
  25. 25. Free SaaS - The missing piece SaaS = Software as a Service ● Google Calendar ● Google Drive / Docs ● Spotify / SoundCloud ● Online Dictionaries ۲۵
  26. 26. ● ‫این‬ ‫سرور‬ ‫سمت‬ ‫افزار‬‫نرم‬SaaS‫است‬ ‫نشده‬ ‫منتشر‬ ‫ا‬‫ا‬ ‫عموم‬ ‫ها‬ ● ...‫و‬ ‫خانوادگی‬ ،‫سازمانی‬ ،‫شخصی‬ ‫سرور‬ ‫در‬ ‫افزارها‬‫نرم‬ ‫این‬ ‫اجرای‬ ‫امکان‬ ‫ندارد‬ ‫وجود‬ ● ‫ا‬‫ا‬ ‫)عموم‬ ‫تجاری‬ ‫های‬‫شرکت‬ ‫اختیار‬ ‫در‬ ‫را‬ ‫خود‬ ‫شخصی‬ ‫اطلعات‬ ‫تمام‬ ‫باید‬ ‫بگذاریم‬ (‫خارجی‬ ● ‫آورد‬‫نمی‬ ‫همراه‬ ‫به‬ ‫ما‬ ‫برای‬ ‫را‬ ‫کامل‬ ‫آزادی‬ ،‫کلینت‬ ‫افزار‬‫نرم‬ ‫بودن‬ ‫آزاد‬ Free SaaS - The missing piece ۲۶
  27. 27. StarCalendar Event Service ‫بودن‬ ‫بسته‬ ‫همچنین‬ ‫و‬ ،‫شد‬ ‫گفته‬ ‫بال‬ ‫در‬ ‫که‬ ‫دلیلی‬ ‫تمام‬ ‫دلیل‬ ‫به‬ ‫سرویس‬Google API‫روی‬ ‫بر‬IP‫از‬ ‫پشتیبانی‬ ‫نبود‬ ‫و‬ ،‫ایران‬ ‫های‬ ‫نظیر‬ ‫هایی‬‫سرویس‬ ‫در‬ ‫جللی‬ ‫تقویم‬Google Calendar‫تصمیم‬ ‫کنم‬ ‫شروع‬ ‫را‬ ‫جدیدی‬ ‫ه‬‫ه‬ ‫پروژ‬ ‫که‬ ‫گرفتم‬ https://github.com/ilius/starcal-server Initial commit: 2016-08-07 ۲۷
  28. 28. StarCalendar Event Service ● Language: (Google's) Go! ● Database: MongoDB ● HTTP(S) + JSON ● RESTful API (I try to!) ● License: Affero GPL ● www.gnu.org/licenses/why-affero-gpl.fa.html ۲۸
  29. 29. StarCalendar Event Service starcalendar.net (Redirects to Github for now) ‫ندارند‬ ‫شخصی‬ ‫سرور‬ ‫که‬ ‫کاربرانی‬ ‫برای‬ ‫ندارند‬ ‫را‬ ‫سرویس‬ ‫این‬ ‫اندازی‬‫راه‬ ‫توان/فرصت‬ ‫یا‬ (: ‫دارند‬ ‫اعتماد‬ ‫ما‬ ‫به‬ ‫اما‬ ۲۹
  30. 30. StarCalendar Event Service ● Local Event Group (Dekstop) ● [x] Account: select from list ● Remote Group ● Select from remote groups, or ● Create new remote group ● Sync Interval (seconds) ● [x] Pull [x] Push ● [ ] Remove Local Events ● [ ] Remove Remote Events ۳۰
  31. 31. StarCalendar Event Service Done Register User POST /user/register/ Done Set User Full Name PUT /user/full-name/ Done Unset User Full Name DELETE /user/full-name/ Done Set User Default Group Id PUT /user/default-group-id/ Done Unset User Default Group Id DELETE /user/default-group-id/ Done Get Group List GET /event/groups/ Done Add Group POST /event/groups/ Done Update Group PUT Done Get Group GET Todo Delete Group DELETE Done Get Group Event List GET Todo Get Group Events Full Data GET Doing Get Group's Modified Events GET Todo Get Group's Moved Events GET Todo Import Event Groups POST Todo Import Events into Group POST /event/groups/{groupId}/ /event/groups/{groupId}/ /event/groups/{groupId}/ /event/groups/{groupId}/events/ /event/groups/{groupId}/events-full/ /event/groups/{groupId}/modified-events/{dateTime}/ /event/groups/{groupId}/moved-events/{dateTime}/ /event/groups/import/ /event/groups/{groupId}/import/ ۳۱
  32. 32. StarCalendar Event Service Done Copy Event POST Doing Add Event POST Doing Get Event Info GET Doing Update Event Data PUT Todo Delete Event DELETE Todo Update Event Invitees PUT Todo Change Owner of Event (Disown) PUT Todo Move Event PUT Todo Unset Group DELETE Todo Get Event History GET Todo Change Type of Event PUT Todo Patch Event Data PATCH Todo Export All Events and Groups GET Todo Request to Join Event POST Todo Leave Event POST Todo Export Event to ICS GET Unplanned Get Occurrences of Events in Group GET Unplanned Get Occurrences of Event GET /event/copy/ /event/{eventType}/ /event/{eventType}/{eventId}/ /event/{eventType}/{eventId}/ /event/{eventType}/{eventId}/ /event/{eventType}/{eventId}/access/ /event/{eventType}/{eventId}/owner/ /event/{eventType}/{eventId}/group/ /event/{eventType}/{eventId}/group/ /event/{eventType}/{eventId}/revisions/ /event/{eventType}/{eventId}/type/ /event/{eventType}/{eventId}/ /event/export/ /event/{eventType}/{eventId}/join/ /event/{eventType}/{eventId}/leave/ /event/{eventType}/{eventId}/ics/ /occur/groups/{groupId}/{startDateTime}-{endDateTime}/ /occur/{eventType}/{eventId}/{startDateTime}-{endDateTime}/ ۳۲
  33. 33. Want to Help? We need package mantainers for Ubuntu, Debian, openSUSE, Fedora, ArchLinux, and even Windows For donations, visit: paaz.ir/hamiha/product/starcalendar Thank you! ۳۳
  34. 34. :‫فارسی‬ ‫انتشار‬ ‫نکات‬ ‫و‬ ‫اخبار‬ ‫برای‬ saeedgnu.blog.ir ‫قابلیت‬ ‫درخواست‬ ،‫باگ‬ ‫گزارش‬ ‫برای‬ :‫سوالت‬ ‫پرسیدن‬ ‫یا‬ github.com/ilius/starcal/issues ۳۴

×