BikeControl (SwiftControl)
Use Zwift Click, Zwift Play, Shimano Di2, or any Bluetooth controller with MyWhoosh, Rouvy, Zwift, and more. Free to try on iOS, Android, Windows, and macOS.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗אתר נגיש ומודרני שמציג בזמן אמת את המידע מאתר איגוד הניווט הישראלי. אין באתר נתונים שמורים: הכול נקרא מאתר האיגוד.
#event/<id>, קישור שאפשר לשתף):
#ranking) – ליגת ניווט רגלי (כולל ליגת מאוץ – הקטגוריות שמסתיימות ב-S, בקבוצה משלהן ברשימת הקטגוריות ועם תג "ליגת מאוץ") וניווט רכוב, לפי עונה וקטגוריה, מעמוד הדירוג של האיגוד. גרף עמודות של הדירוג המשוקלל, כל עמודה מחולקת לפי אירועים: מקטע בצבע האירוע לכל תוצאה שנספרה (לפי סדר העונה, מקרא צבעים מעל), חלק מקווקו לתוספת מקדם הגיל, ותוצאות שלא נספרו כעיגולים חלולים אחרי העמודה. ריחוף על מקטע – האירוע, הנקודות והמקום בו; ריחוף על אירוע במקרא (או על מקטע) מבליט אותו בכל העמודות. האנשים שלי מודגשים במסגרת ובכוכב. מתחרה שעוד אין לו מספיק תוצאות (פחות מ־N) מסומן בתג "2/4 תוצאות" ובמשבצות מקווקוות ריקות לתוצאות החסרות, ותוצאה מעל 1000 נקודות מסומנת ב־★ (גם בטבלה המלאה). בעונות שבהן הניקוד הוא מתוך 100 (הניקוד הגבוה ביותר בדירוג עד 200) הסף הוא 100. מעל הגרף כרטיס לכל אחד מהאנשים שלי – מקום מתוך כמה, נקודות, והפער מהראשון ומהמקום שמעליו. מתחתיו כרטיס תובנות: לכל אחד מהאנשים שלי – התוצאה הטובה ביותר (ומקומו בה), כמה פעמים היה מעל חציון המתחרים, התוצאה שלא נספרה ובכמה, וכמה תוצאות יש לו מתוך N; בעונה הנוכחית בלבד גם "מה הלאה" – איזו תוצאה בתחרות הבאה תעלה אותו מקום / למקום הראשון ואם מי שמתחת יכול לעקוף (בהנחה ששאר המתחרים לא משתפרים). לכל ליגה – המוביל והפער (או מרוץ צמוד), מספר התחרויות והמשתתפים, התחרות עם הניקוד הנמוך והגבוה ביותר, הכי הרבה ניצחונות, הכי הרבה תוצאות מעל 1000 (או 100), והמועדון החזק בעשירייה. עונה שאינה האחרונה ברשימה נחשבת עונה שהסתיימה. בנייד שתי תובנות לאדם עד "עוד תובנות". הבחירה למעלה: ניווט יער / מאוץ / אופניים – יער ומאוץ הם הליגה הרגלית: דף של קטגוריה מציג לפעמים גם טבלת "ליגת מאוץ" לצד הליגה – ביער היא מוסתרת ובמאוץ רק היא מוצגת (כולל בכרטיסים ובתובנות); קטגוריות שמסתיימות ב-S, וקטגוריות שנמצאה בהן טבלת מאוץ, מוצעות תחת מאוץ. ליגת המאוץ קיימת החל מעונת 2022-2023: בעונות קודמות הכפתור מושבת, ומעבר לעונה כזו במאוץ עובר לניווט יער. כשיש אנשים שלי ברשימה ארוכה מוצגים הראשונים והסביבה שלהם (אפשר לעבור ל"כולם"), ומתחת טבלה מלאה. הבחירה נשמרת בדפדפן. מיקום אחרי כל תחרות: גרף מיקומים (1 למעלה) – המיקום בדירוג כפי שהיה אחרי כל תחרות, בהנחה שהתחרויות התקיימו לפי סדר הטבלה (N התוצאות הטובות עד אותה תחרות, כפול מקדם הגיל); האנשים שלי (או שלושת הראשונים) בצבע עם שם ומיקום בסוף הקו, שאר העשירייה בקווים אפורים, ריחוף על נקודה – מקום ונקודות. פירוט לפי תחרות: עמודה לכל תחרות בעונה (הראשונה מימין), בצבע של אותו אירוע בעמודות הדירוג; האנשים שלי מובחנים בצורה (עיגול, ריבוע, מעוין), קו מקווקו ב־1000 נקודות (או 100) ו־★ מעל נקודה שעברה אותו – כל המתחרים כנקודות אפורות, חציון השדה כקו, והאנשים שלי (עד שלושה בצבעים שונים; בלעדיהם – שלושת הראשונים) כנקודות גדולות: מלאה = נספרה בדירוג (מ־N הטובות), חלולה = לא נספרה. ריחוף/הקשה: נקודות, מקום בתחרות ואם נספרה. קטגוריות שהאנשים שלי נמצאו בהן מסומנות ב־★ ונזכרות.#results/<אירוע>/<קובץ>) – קובצי התוצאות והניתוח שמצורפים לאירוע (קובצי HTML ב-cdn.nivut.org.il) נפתחים אצלנו במקום בקובץ הגולמי: לשונית לכל מסלול/קטגוריה (★ כשהאנשים שלי בה; כשיש קטגוריות D ו-H, מתג קטן נשים / גברים / כללי ומתחתיו רק הכפתורים של הקבוצה – של הקטגוריה המוצגת כברירת מחדל; בנייד שורה אחת שגוללים), טבלת תוצאות עם חיפוש והאנשים שלי מודגשים, ובקבצים עם זמני ביניים – גרף פערים בסגנון SplitsBrowser עם שתי תצורות (הבחירה נשמרת): "מול המהיר בכל מקטע" – קו הייחוס הוא סכום הזמנים המהירים בכל מקטע, כך שהמהיר במקטע מצויר בו כקו שטוח; "מול המנצח" – המנצח הוא הקו השטוח ( עד 6 מתחרים, ברירת מחדל: האנשים שלי והמנצח) וטבלת זמני מקטעים עם דירוג בכל מקטע. פורמטים: SI-Droid Results ו-Split times, ניתוח זמני ביניים מוטה (עמודה לכל מתחרה), PDF תוצאות שהומר ל-HTML (pdf2htmlEX), וגם קובץ PDF עצמו – קורא טקסט PDF קטן בלי תלויות (lib/pdftext.js: פענוח Flate, מיפוי ToUnicode ומיקום התאים), העברית מוחזרת לסדר קריאה ושם האירוע והתאריך נלקחים מכותרת העמוד. בריחוף על נקודה בגרף: טבלת השוואה – זמן, מקום ופער כלליים עד הנקודה, וזמן, מקום ופער במקטע. בטבלת המקטעים שתי שורות לכל מתחרה: כללי ומקטע (זמן · פער · מקום). המקום הכללי נספר רק מול מסיימים תקינים. ניתוח מקטעים (מקופל, ובשורת הסיכום שלו: המקטעים הקשים, מי היה הכי מהיר בהכי הרבה מקטעים ובאילו מקטעים האנשים שלי היו הכי מהירים): לכל מקטע שלושת המהירים, זמן ממוצע (בלי זמנים בלתי אפשריים – טעויות מדידה), חציון, בכמה המהיר הקדים את החציון, כמה עם זמן, כמה פספסו את הנקודה, ובקובצי LapCombat גם זמן הטעות הממוצע; מעל הטבלה מספר המתחרים, המסיימים והפסולים לפי סוג. המקטעים הקשים (⚠, עם הסבר ליד כל אחד): בקובצי LapCombat – זמן הטעות הממוצע הגבוה ביותר; בשאר – היחס הגבוה ביותר בין החציון לזמן המהיר ("החציון פי 2.2 מהזמן המהיר"). בקובצי ניתוח LapCombat נקראים גם מדד המהירות (Leg speed index) וזמן הטעות (Leg mistake time) בכל מקטע, וסיכומים (ממוצע, מהירות שיוט, סה״כ טעויות, יחס טעויות וזמן אידיאלי): הם מוצגים בטבלת הריחוף, ובטבלת המקטעים אפשר לבחור כמה נתונים יחד – זמן כללי, זמן מקטע, מדד מהירות וזמן טעות (שורה לכל נתון אצל כל מתחרה, הבחירה נשמרת), עם צבע לפי רמה, מקום במקטע ועמודת סיכום. קובץ שלא מזוהה – קישור לקובץ המקורי. השרת קורא קבצים רק מאתרי האיגוד (api/resultfile). קבוצת קבצים באותו שם עם קטגוריות שונות (למשל LapCombat-Long, LapCombat-MediumA…) מוצגת כשורה אחת "LapCombat · 8 קטגוריות" שפותחת עמוד עם כפתור לכל קטגוריה (הבחירה האחרונה נזכרת); קובץ שאנחנו קוראים מוצג בצפייה שלנו, וניתוח חיצוני (LapCombat וכדומה) מוטמע בעמוד עם כפתור לפתיחה בחלון חדש. בגרף מסומנים מראש האנשים שלי (בצבעים הראשונים) והמנצח./Club/{מספר}, למשל images/clubs/modiin.jpg) ונשמר במטמון ליום. בגיבוי: הלוגו שבדף האירוע, טבלת לוגואים ידועים, club-logos/club{מספר}.png, ובסוף האות הראשונה של שם המועדון.nivut_club. אירועי המועדון מסומנים "⚑ המועדון שלי", ובחיפוש יש "רק אירועים של המועדון שלי".nivut_disc לשנה, וחלה על הניווטים הקרובים, הרשימה והתוכנית השנתית.| עמוד באתר האיגוד | מה נקרא ממנו | מצב |
|---|---|---|
| דף הבית | אירועים מפורסמים, שטחים סגורים, חדשות | מפענח לפי המבנה האמיתי ✅ |
דף אירוע (/{id}/Info) | כל פרטי האירוע | מפענח לפי המבנה האמיתי ✅ |
פורום (/forums/) | נושאים, הודעות ותגובות | מפענח לפי המבנה האמיתי ✅ |
results/ranking.aspx | דירוג הליגות לפי עונה וקטגוריה (בחירה בתפריטי Telerik מדומה בשרת) | מפענח לפי המבנה האמיתי; החלפת עונה/קטגוריה טרם נבדקה מול האתר החי ⚠️ |
calendar.aspx | לוח האירועים המלא | עמודות תאריך / יום / שם-מקום / תאור / מועדון / סוג ארוע; שם האירוע = המקום + התיאור, והתיאור קובע "אליפות" ו"אירוע סגור". נבדק מול עמוד שמור ✓ |
רשימת משתתפים (/{id}/Start, ובגיבוי הכפתור בדף האירוע) | שמות, מועדון, קטגוריה (מעמודה או מכותרת קבוצה), מסלול, שעת זינוק | פענוח לפי כותרות הטבלה, טרם נבדק מול העמוד האמיתי ⚠️ |
דפדפן ──► api/*.js (Vercel) ──► nivut.org.il
│ lib/nivut.js: הורדה, פענוח קידוד (UTF-8 / windows-1255), חילוץ ומיזוג
└► /api/events /api/event?id= /api/participants?id= /api/forum /api/news /api/links /api/ranking?league=&season=&category= (מטמון 10 דק')
דפדפן לא יכול לקרוא ישירות מ-nivut.org.il מדומיין אחר (CORS), לכן יש שרת Node קטן שמשמש כמתווך.
אם אתר האיגוד לא זמין, מוצג המידע האחרון שנקרא, עם הודעה על כך.
/api/event מקבל רק מזהה מספרי של אירוע, כך שהשרת אינו פרוקסי פתוח.
נדרש Node 18 ומעלה, ללא תלויות.
npm start # http://localhost:8080
npm run inspect # בדיקה מול האתר החי: מה נקרא מכל עמוד
npm test # בדיקות יחידה למפענחים
| משתנה סביבה | ברירת מחדל |
|---|---|
PORT | 8080 |
NIVUT_BASE | https://nivut.org.il/ |
NIVUT_FORUM_URL | {NIVUT_BASE}forums/ |
CACHE_SECONDS | 600 |
הפרויקט מוכן ל-Vercel, ללא שלב build:
public/ – האתר (HTML, CSS ו-JS).api/*.js – פונקציות serverless: /api/events, /api/event, /api/forum, /api/news, /api/links.vercel.json – תיקיית הפלט public וזמן ריצה מרבי של 30 שניות לפונקציה.s-maxage=600), ובמשך יום מוגשת הגרסה הקודמת בזמן הרענון. כך אתר האיגוד לא מקבל עומס.חיבור חד-פעמי: ב-vercel.com/new מייבאים את המאגר liorhal/nivut.org מ-GitHub ולוחצים Deploy, בלי לשנות הגדרות.
מכאן כל push לענף הראשי מתפרסם אוטומטית, וכל ענף אחר מקבל כתובת Preview.
npm start מריץ מקומית את אותן פונקציות בדיוק.
קבצי test/fixtures משחזרים את מבנה ה-HTML האמיתי של דף הבית, דף אירוע והפורום, עם שמות לדוגמה.