1
00:00:01,509 --> 00:00:02,829
19 למאי 2026. לפי רכבת ישראל,

2
00:00:02,839 --> 00:00:06,599
מנוע החיפוש ותכנון הנסיעה שלה כשל שלוש פעמים ברצף.

3
00:00:06,679 --> 00:00:07,300
לא בגלל

4
00:00:07,559 --> 00:00:08,390
תקלה פנימית,

5
00:00:08,399 --> 00:00:08,779
אלא

6
00:00:08,880 --> 00:00:12,159
עומסי תעבורה חריגים ושימושים חיצוניים לא מורשים.

7
00:00:12,710 --> 00:00:13,220
בין

8
00:00:13,359 --> 00:00:15,470
השימושים האלה היא מציינת גם אפליקציה קטנה,

9
00:00:15,479 --> 00:00:16,100
חינמית

10
00:00:16,239 --> 00:00:17,629
ובקוד פתוח בשם

11
00:00:17,799 --> 00:00:18,399
Better Rail.

12
00:00:18,819 --> 00:00:21,959
פחות משלושה חודשים אחר כך, מגיע מכתב התראה, עם

13
00:00:22,219 --> 00:00:24,209
ניסוח שכבר לא נשמע כמו

14
00:00:24,459 --> 00:00:25,819
שיחה בין צוותי פיתוח.

15
00:00:26,219 --> 00:00:29,340
רכבת ישראל טוענת לשימוש מסחרי בלתי מורשה,

16
00:00:29,780 --> 00:00:30,909
הפרת תנאי שימוש,

17
00:00:31,100 --> 00:00:32,430
גזל סוד מסחרי,

18
00:00:32,540 --> 00:00:33,619
חדירה לחומר מחשב,

19
00:00:33,700 --> 00:00:34,840
שיבוש פעולת מחשב

20
00:00:35,020 --> 00:00:38,290
והפעלת כלי תוכנה אוטומטיים. היא דורשת להפסיק

21
00:00:38,459 --> 00:00:39,580
כל גישה למערכות,

22
00:00:39,889 --> 00:00:40,860
למחוק את המידע,

23
00:00:41,169 --> 00:00:42,729
להסיר את האפליקציה מהחנויות

24
00:00:42,979 --> 00:00:44,900
ולמסור פירוט של הכלים,

25
00:00:45,139 --> 00:00:45,750
הממשקים,

26
00:00:45,779 --> 00:00:47,130
התדירות והרווחים.

27
00:00:47,419 --> 00:00:48,580
תוך 7 ימים.

28
00:00:48,930 --> 00:00:49,819
והנזק?

29
00:00:50,139 --> 00:00:52,869
לפי המכתב, מאות אלפי שקלים לפחות.

30
00:00:53,270 --> 00:00:54,869
בטר רייל משיבה: אין פרסומות,

31
00:00:54,950 --> 00:00:56,189
אין מוצר בתשלום,

32
00:00:56,229 --> 00:00:56,750
אין רווחים,

33
00:00:56,790 --> 00:00:57,580
אין פריצה,

34
00:00:57,759 --> 00:00:59,689
ויש בערך אלף משתמשים ביום מול

35
00:00:59,830 --> 00:01:02,590
מאות אלפים באפליקציה הרשמית של הרכבת.

36
00:01:02,669 --> 00:01:03,459
היא דורשת

37
00:01:03,659 --> 00:01:06,620
לראות את התחקירים ואת נתוני התעבורה

38
00:01:06,790 --> 00:01:12,029
שמקשרים אותה לקריסות, ומציתה גל תמיכה ברשתות החברתיות.

39
00:01:13,019 --> 00:01:14,569
מי צודק? אין לי מושג.

40
00:01:14,580 --> 00:01:18,370
אין לי את הלוגים של רכבת ישראל, של ספק הענן שלה או את

41
00:01:18,500 --> 00:01:19,769
התחקירים הפנימיים.

42
00:01:19,980 --> 00:01:20,489
בלי

43
00:01:20,620 --> 00:01:22,730
החומרים האלה קשה להוכיח

44
00:01:22,900 --> 00:01:25,050
שבטר רייל הפילה דבר. אבל

45
00:01:25,180 --> 00:01:27,010
יש לנו משהו אחר: חמש שנים

46
00:01:27,139 --> 00:01:29,370
של היסטוריית Git פתוחה לציבור, מעין

47
00:01:29,540 --> 00:01:31,610
ספר מבצעים של פרוייקט בטר רייל

48
00:01:31,769 --> 00:01:32,730
שמתאר

49
00:01:33,099 --> 00:01:35,099
כל שינוי. מי עשה את זה,

50
00:01:35,300 --> 00:01:36,610
מה, ולמה.

51
00:01:36,970 --> 00:01:40,449
וב-Git, בניגוד למכתב שהופץ בתקשורת,

52
00:01:40,699 --> 00:01:41,459
רואים את הכל.

53
00:01:41,970 --> 00:01:47,839
אני כאמור לא הולך להכריע מי צודק משפטית, רק לבנות מספר המבצעים הזה timeline

54
00:01:48,129 --> 00:01:50,089
ולהסתכל על המערכת מבחוץ.

55
00:01:51,290 --> 00:01:56,269
1 באפריל 2021. בטר רייל דוחפת לראשונה קוד ריאקט נייטיב -

56
00:01:56,300 --> 00:02:01,610
אפליקציית קיצור דרך לאייפון ואנדרויד, כזו שמרגישה נייטיב אבל

57
00:02:01,930 --> 00:02:04,650
נבנית עם טכנולוגיות web. בחירה

58
00:02:04,819 --> 00:02:06,209
הגיונית ותמימה,

59
00:02:06,500 --> 00:02:07,050
אבל מתאימה

60
00:02:07,194 --> 00:02:08,024
לרוח

61
00:02:08,264 --> 00:02:08,615
של 2021.

62
00:02:09,865 --> 00:02:10,505
החלטה

63
00:02:10,744 --> 00:02:14,255
ראשונה שאינה תמימה היא הקומיט ב-9 לאפריל 2021.

64
00:02:15,585 --> 00:02:19,164
המשתמש בוחר תחנת מוצא, יעד ושעה והאפליקציה קוראת

65
00:02:20,625 --> 00:02:22,945
ל-API שבו השתמש אתר רכבת ישראל.

66
00:02:23,479 --> 00:02:26,699
אני אעצור כאן לטובת מי שלא מתכנת. קודם כל ברוכים הבאים.

67
00:02:27,070 --> 00:02:29,619
API או Application Programming Interface

68
00:02:30,559 --> 00:02:35,059
היא הדרך של צדדים לתקשר ביניהם בצורה תכנותית. צד אחד מגדיר את הפעולות שניתן

69
00:02:35,270 --> 00:02:38,020
לבצע אצלו, את מבנה הנתונים הנדרש בכל בקשה,

70
00:02:38,210 --> 00:02:39,380
ומבנה הנתונים

71
00:02:39,630 --> 00:02:40,580
הצפוי בכל תשובה.

72
00:02:40,589 --> 00:02:41,220
למשל -

73
00:02:41,429 --> 00:02:44,570
GetRoutes עבור תחנות 3400 ו-3700

74
00:02:45,309 --> 00:02:47,500
(נניח: בית יהושוע ות"א מרכז)

75
00:02:49,089 --> 00:02:49,710
לתאריך ה-14/5.

76
00:02:50,520 --> 00:02:53,169
הפעולה הזו תחזיר לצד השני מערך של רכבות,

77
00:02:53,250 --> 00:02:54,000
זמני הגעה

78
00:02:54,160 --> 00:02:57,080
ונקודות עצירה, בצורה עקבית, ממוסמכת

79
00:02:57,330 --> 00:02:58,039
ומהירה

80
00:02:58,210 --> 00:03:00,050
שמתאימה לשימוש בקוד אחר.

81
00:03:00,809 --> 00:03:03,690
אמרנו שני צדדים, הם לא צריכים להיות צדדים שונים.

82
00:03:03,770 --> 00:03:04,679
רכבת ישראל

83
00:03:04,809 --> 00:03:07,330
חושפת API לשירותים שלה עצמה,

84
00:03:07,729 --> 00:03:08,869
אפליקציית המובייל,

85
00:03:08,889 --> 00:03:10,190
אתר rail.co.il,

86
00:03:10,289 --> 00:03:13,130
אולי אפילו לשלטים האלקטרונים בתחנה.

87
00:03:13,649 --> 00:03:14,009
שרת

88
00:03:14,410 --> 00:03:17,470
ה-API של הרכבת הופך להיות מקור האמת, ומחזיק במידע

89
00:03:17,710 --> 00:03:19,880
קריטי לתכנון הנסיעה

90
00:03:20,169 --> 00:03:21,179
של 100 עד 250

91
00:03:22,800 --> 00:03:23,490
אלף נוסעים ביום.

92
00:03:24,210 --> 00:03:25,770
בטר רייל מצאה את

93
00:03:26,490 --> 00:03:28,259
ה-API הזה, שלרוב מוגן במפתח או לוגין,

94
00:03:29,770 --> 00:03:31,919
ושלחה את המשתמשים להשתמש בו

95
00:03:32,130 --> 00:03:33,350
תחת המעטפת שלה.

96
00:03:33,649 --> 00:03:34,669
בסיס רע

97
00:03:34,809 --> 00:03:36,850
למוצר שרוצה לחיות שנים,

98
00:03:37,130 --> 00:03:38,289
שכן בלי הסכמה

99
00:03:38,729 --> 00:03:40,839
ובלי נעילה, שום דבר לא מונע מהרכבת

100
00:03:41,009 --> 00:03:42,440
להחליף משהו בשרת

101
00:03:42,630 --> 00:03:44,839
ולשבור כל צד שמסתמך עליו.

102
00:03:45,789 --> 00:03:49,910
ב-8 לאוקטובר 2021 בטר רייל מוסיפה תמיכה ב-Apple Watch.

103
00:03:50,339 --> 00:03:52,149
ב-18 לדצמבר 2021

104
00:03:53,149 --> 00:03:53,839
מתווסף

105
00:03:54,270 --> 00:03:56,139
ה-iOS Widget, אולי הפיצ׳ר האהוב עליי ביותר -

106
00:03:56,580 --> 00:03:58,500
דרך לראות את לוח הזמנים

107
00:03:58,669 --> 00:04:00,070
מבלי להיכנס לאפליקציה.

108
00:04:00,559 --> 00:04:02,509
בשלב הזה, כל הצרכנים

109
00:04:02,800 --> 00:04:06,070
של בטר רייל ממשיכים לקרוא לשרת הרכבת ישירות,

110
00:04:06,440 --> 00:04:08,889
אבל עושים את זה במגבלות ברורות:

111
00:04:09,039 --> 00:04:10,830
האפליקציה - קוראת לרכבת בכל

112
00:04:11,130 --> 00:04:15,309
חיפוש (אקטיבי) של משתמש ושומרת את התוצאה לשעתיים. היא

113
00:04:15,559 --> 00:04:17,839
לא מתשאלת כשהיא סגורה או ברקע.

114
00:04:18,559 --> 00:04:19,070
השעון -

115
00:04:19,200 --> 00:04:21,829
מתמקד במסלולים מועדפים ומבקש זמנים

116
00:04:22,010 --> 00:04:24,359
בכל פעם שמישהו פוזל ל-Apple Watch,

117
00:04:24,679 --> 00:04:26,700
כל עוד לא עברה שעה וחצי.

118
00:04:26,980 --> 00:04:29,269
והווידג׳ט - מבקש זמנים פעם ביום,

119
00:04:29,390 --> 00:04:29,920
לכל היום.

120
00:04:30,690 --> 00:04:31,540
בשלהי 2021 מדובר על 5-15 בקשות יומיות

121
00:04:35,209 --> 00:04:35,950
למשתמש.

122
00:04:36,489 --> 00:04:37,049
ספויילר -

123
00:04:37,549 --> 00:04:39,570
המספר הזה עומד לעלות.

124
00:04:40,089 --> 00:04:40,250
הרבה.

125
00:04:41,160 --> 00:04:43,559
לקח לרכבת שנתיים להחליף API.

126
00:04:43,600 --> 00:04:47,359
במרץ 2023 היא עוברת שרת או ספק ענן.

127
00:04:47,959 --> 00:04:49,390
הכתובת הישנה נעלמת

128
00:04:49,690 --> 00:04:52,630
ובמקומה מגיע API חדש מאחורי

129
00:04:52,760 --> 00:04:54,260
Azure API Management.

130
00:04:55,079 --> 00:04:57,660
מעכשיו, כל בקשה צריך לכלול Subscription-Key.

131
00:04:57,799 --> 00:04:59,429
מפתח זיהוי או מנוי.

132
00:05:00,640 --> 00:05:05,950
בטר רייל מסתגלת באותו יום, היא מחליפה את הקריאה הקודמת במשתנה

133
00:05:06,149 --> 00:05:07,359
RAIL_API_KEY

134
00:05:07,769 --> 00:05:08,600
ומבינה,

135
00:05:08,850 --> 00:05:11,959
זה עומד להיות ערך שיוחלף באופן תכוף,

136
00:05:12,200 --> 00:05:13,540
והמקום שלו -

137
00:05:13,859 --> 00:05:16,119
לא בקוד אלא במשתנה סביבה.

138
00:05:16,549 --> 00:05:18,799
שוב נעצור אם זה מעניין מישהו. ה-Git

139
00:05:18,950 --> 00:05:21,380
כולל את כל ההיסטוריה, ומאוד קשה

140
00:05:21,750 --> 00:05:23,089
לנקות אותה. מפתחות

141
00:05:23,269 --> 00:05:24,019
לא שמים בקוד,

142
00:05:24,070 --> 00:05:25,579
שמים במשתני סביבה

143
00:05:25,709 --> 00:05:27,100
זמניים או כספת,

144
00:05:27,309 --> 00:05:29,359
בצורה שלא נגישה למי שבא

145
00:05:29,549 --> 00:05:31,059
לחטט בקוד (כמוני),

146
00:05:31,170 --> 00:05:32,339
או לטפל בקוד,

147
00:05:32,679 --> 00:05:34,109
כולל סוכני קוד.

148
00:05:34,959 --> 00:05:36,989
זו נקודת מפנה עדינה.

149
00:05:37,000 --> 00:05:41,029
Better Rail עדיין לא פרצה חשבון ולא גנבה סיסמה פרטית.

150
00:05:41,040 --> 00:05:42,540
היא מצאה את המפתח הזה

151
00:05:42,760 --> 00:05:44,200
באתר הרכבת עצמו.

152
00:05:44,640 --> 00:05:45,309
אבל היא כבר

153
00:05:45,440 --> 00:05:46,709
לא דפדפן אנונימי.

154
00:05:47,119 --> 00:05:49,850
במשך יותר מ-3 שנים התעבורה שלה

155
00:05:50,000 --> 00:05:51,429
תיספר תחת מנוי

156
00:05:51,600 --> 00:05:52,880
שלא הונפק עבורה.

157
00:05:53,839 --> 00:05:56,829
הרכבת - עיוורת למי באמת הלקוח,

158
00:05:56,839 --> 00:05:57,799
ובטר רייל -

159
00:05:58,079 --> 00:06:01,079
היות ואין בנמצא תוכנית מפתחים,

160
00:06:01,559 --> 00:06:02,829
מתקשה לקבל

161
00:06:03,000 --> 00:06:04,000
מכסה משלה.

162
00:06:04,399 --> 00:06:08,029
שני הצדדים נכנסים למנהרה ארוכה

163
00:06:08,359 --> 00:06:09,000
וחשוכה.

164
00:06:10,059 --> 00:06:16,619
ב-28 לאפריל 2023 בטר רייל מתחיל בהכנות לפיצ׳ר Live Activities של iOS.

165
00:06:16,779 --> 00:06:17,890
הכוונה טובה -

166
00:06:18,100 --> 00:06:20,489
לדחוף למכשיר עדכונים בזמן אמת על

167
00:06:20,739 --> 00:06:21,700
שינויי לו"ז.

168
00:06:22,500 --> 00:06:23,329
הביצוע

169
00:06:23,619 --> 00:06:26,760
לא טוב - היות ולרכבת ישראל אין שירות push,

170
00:06:26,940 --> 00:06:29,049
צריך למשוך, pull, את

171
00:06:29,179 --> 00:06:30,000
השינויים האלה.

172
00:06:30,299 --> 00:06:31,220
ומאיפה נמשוך?

173
00:06:32,059 --> 00:06:32,890
מה-API של הרכבת.

174
00:06:32,984 --> 00:06:33,075
בתקופה של 16 יום

175
00:06:35,475 --> 00:06:37,625
בטר רייל דוחפת שינויים לפיצ׳ר

176
00:06:37,954 --> 00:06:39,464
שיגדיל את הקריאות

177
00:06:39,795 --> 00:06:40,674
בסדר גודל.

178
00:06:40,795 --> 00:06:41,225
עכשיו,

179
00:06:41,434 --> 00:06:43,825
כל פעם שעלית על רכבת,

180
00:06:44,024 --> 00:06:45,505
ובכל דקה משם,

181
00:06:45,674 --> 00:06:49,024
מתווספת קריאה לבדוק שינויים מול הרכבת,

182
00:06:49,195 --> 00:06:55,674
ואם הם קיימים הם נדחפים לבטר רייל כדי שהיא תוציא פוש שיעדכן את ה-Live Activity.

183
00:06:56,640 --> 00:07:02,980
יש פה עוד שינוי, עדין. בטר רייל תוסיף שניה אקראית לכל קריאה כדי לא לגרום לפקק,

184
00:07:03,230 --> 00:07:05,899
אבל זו לא שניה אקראית לכל מחזור אלא

185
00:07:06,029 --> 00:07:07,250
לכל משתמש.

186
00:07:07,500 --> 00:07:07,899
נראה

187
00:07:08,010 --> 00:07:10,579
שבטר רייל ניסתה לרכך את העומס,

188
00:07:10,709 --> 00:07:11,760
או לפחות הייתה

189
00:07:11,910 --> 00:07:13,869
מודעת למשמעויות שלו.

190
00:07:14,869 --> 00:07:18,940
ב-14 למאי 2023 היא מנסה להקטין את גודל הבקשה

191
00:07:19,230 --> 00:07:22,130
(אין טעם לבקש רכבות מלפני שעתיים), אבל

192
00:07:22,350 --> 00:07:24,170
מכפילה את מספר הקריאות -

193
00:07:24,799 --> 00:07:26,839
הפיצ׳ר של "התחלת נסיעה"

194
00:07:26,989 --> 00:07:28,570
קורא לרכבת

195
00:07:28,709 --> 00:07:30,339
במסלול נוסף, מקביל,

196
00:07:30,670 --> 00:07:33,209
ולא משתמש בקריאות שכבר בוצעו.

197
00:07:35,209 --> 00:07:37,500
אנחנו כבר על 120 קריאות יומיות למשתמש בערך.

198
00:07:38,700 --> 00:07:39,350
וכך

199
00:07:39,630 --> 00:07:40,429
בדיוק

200
00:07:40,609 --> 00:07:42,570
נבנות תקלות scale אמיתיות:

201
00:07:43,200 --> 00:07:46,709
לא באמצעות החלטה אחת גרועה, אלא צירוף

202
00:07:47,700 --> 00:07:50,480
של 5 קומיטים שאיש לא הכפיל זה בזו.

203
00:07:50,720 --> 00:07:52,829
אם יש 100 משתמשים פעילים,

204
00:07:52,839 --> 00:07:54,920
שתי בדיקות בדקה הן 200 חיפושים.

205
00:07:55,160 --> 00:07:56,179
אם יש אלף,

206
00:07:56,829 --> 00:07:57,100
אלה 2,000

207
00:07:57,200 --> 00:07:59,899
ואם כל חיפוש נכשל ומנסה שוב,

208
00:08:00,239 --> 00:08:03,440
אז זה 6,000 או 100 קריאות לשניה.

209
00:08:04,440 --> 00:08:10,890
ב-22 לאוגוסט 2023 יש כבר עדות ב-Git לכך שכשל בצד הרכבת משפיע

210
00:08:11,019 --> 00:08:11,859
על Better Rail.

211
00:08:12,260 --> 00:08:15,570
קומיט אחד מתקן crash בשרת שנגרם

212
00:08:15,670 --> 00:08:16,140
בזמן

213
00:08:17,299 --> 00:08:18,390
ש-API הרכבת קרס,

214
00:08:18,859 --> 00:08:19,779
קומיט אחר

215
00:08:20,579 --> 00:08:23,250
מקטין את מספר השאילתות המקביליות

216
00:08:23,540 --> 00:08:24,750
מ-20 ל-8.

217
00:08:25,649 --> 00:08:25,989
זה

218
00:08:26,179 --> 00:08:30,369
תיקון בריא ליציבות של Better Rail, אבל הוא מלמד שהמערכות כבר

219
00:08:30,540 --> 00:08:31,579
כרוכות זו בזו:

220
00:08:31,980 --> 00:08:33,659
השרת ברכבת משתעל,

221
00:08:33,679 --> 00:08:35,520
האפליקציה של בטר רייל קורסת,

222
00:08:35,659 --> 00:08:40,460
קמה מחדש ואז מסתערת כדי לשחזר את כל המשימות הפעילות.

223
00:08:42,070 --> 00:08:46,570
ב-30 לאוגוסט 2023 נוספים שני תיקונים לספריית axios.

224
00:08:47,169 --> 00:08:47,809
הראשון -

225
00:08:47,950 --> 00:08:50,030
כל כישלון מקבל ניסיון נוסף.

226
00:08:50,150 --> 00:08:50,549
כן,

227
00:08:50,950 --> 00:08:52,940
גם אם הוא סטטוס 500 (שאומר

228
00:08:53,150 --> 00:08:54,919
"בעיה בשרת"), גם ב-429

229
00:08:55,869 --> 00:08:57,929
(שהוא "אתה שולח יותר מדי")

230
00:08:59,640 --> 00:09:00,590
וגם ב-403 ("אינך מורשה").

231
00:09:01,320 --> 00:09:04,630
השני - exponential backoff או המתנה מעריכית.

232
00:09:04,880 --> 00:09:05,559
אם בטר

233
00:09:05,739 --> 00:09:09,270
רייל נכשלה, אז הקריאה הבאה תגיע עוד

234
00:09:09,780 --> 00:09:11,070
200 מילישניות ולא מיד,

235
00:09:11,239 --> 00:09:12,260
והבאות, עוד 400,

236
00:09:12,289 --> 00:09:12,840
800 ו-1,600 מילישניות. אבל

237
00:09:15,679 --> 00:09:16,760
בעולם האמיתי,

238
00:09:17,119 --> 00:09:20,099
זו לא החלטה של בטר רייל, זו החלטה של הרכבת.

239
00:09:20,320 --> 00:09:22,390
כל API אחראי להחזיר

240
00:09:23,080 --> 00:09:25,099
Retry-After שמוסיף בעצמו

241
00:09:25,270 --> 00:09:30,479
backoff משמעותי וגם jitter, כדי שלא כל הלקוחות יחזרו באותה אלפית שניה.

242
00:09:32,090 --> 00:09:35,400
בקוד של Better Rail לא הייתה כוונה לפגוע.

243
00:09:35,520 --> 00:09:37,710
הייתה הנחה שהמידע חשוב

244
00:09:37,880 --> 00:09:39,359
ולכן צריך לנסות שוב.

245
00:09:39,750 --> 00:09:43,460
אבל השרתים של הרכבת, ואני באמת לא יודע אם עלו להם

246
00:09:43,599 --> 00:09:44,780
מאות אלפי שקלים,

247
00:09:45,080 --> 00:09:46,239
לא מחייבים על כוונה,

248
00:09:46,520 --> 00:09:48,390
הם מחייבים על קריאות.

249
00:09:49,270 --> 00:09:51,460
ב-10 ליולי 2025

250
00:09:52,190 --> 00:09:57,799
היחסים מתערערים והופכים לתופסת בין חתול ועכבר. בטר רייל מוסיפה לשרת שלה

251
00:09:58,200 --> 00:09:59,380
PROXY_URL

252
00:09:59,609 --> 00:10:02,469
ומאפשרת בו חיבור לא מאובטח.

253
00:10:02,630 --> 00:10:03,440
ה-Proxy

254
00:10:03,640 --> 00:10:06,460
מאפשר לשרת שמתארח מחוץ לישראל

255
00:10:06,929 --> 00:10:09,679
לצאת דרך כתובת אחרת ולעבור

256
00:10:10,010 --> 00:10:11,169
מגבלה גאוגרפית.

257
00:10:11,530 --> 00:10:17,679
ביטול אימות TLS הוא כבר מחיר אבטחתי כבד - מהסוג שלוקחים ב-2 בלילה

258
00:10:17,840 --> 00:10:18,750
כי השירות

259
00:10:19,080 --> 00:10:19,799
הפסיק לעבוד.

260
00:10:20,690 --> 00:10:22,090
ה-16 ליולי 2025 הוא עוד יום

261
00:10:23,679 --> 00:10:25,719
שלם של כיבוי שריפות.

262
00:10:26,080 --> 00:10:29,929
ה-rate limiter מוסר זמנית ונוסף נתיב בשם headers, כדי

263
00:10:31,440 --> 00:10:33,830
לבדוק אילו כתובות רואה השרת.

264
00:10:34,369 --> 00:10:38,390
זה לא מוכיח מי חסם את מי או מדוע, אבל זה מתאים לצוות

265
00:10:38,760 --> 00:10:41,270
שמנסה להבין כיצד התעבורה שלו

266
00:10:41,599 --> 00:10:42,039
מזוהה.

267
00:10:42,960 --> 00:10:43,239
אגב

268
00:10:43,559 --> 00:10:49,590
גיט כולל גם commit messages או הערות של מפתחים, בעצם הדרך שלהם להסביר מה השתנה ולמה.

269
00:10:50,080 --> 00:10:52,469
מצחיק לקרוא חלק מההערות האלה,

270
00:10:52,659 --> 00:10:53,880
ולראות איך לחץ,

271
00:10:54,320 --> 00:10:55,989
מצב רוח או התרוממות

272
00:10:56,239 --> 00:10:57,099
מחלחלים אליהן.

273
00:10:58,429 --> 00:11:03,900
ב-9 לאוגוסט 2025 הפרוקסי מוכן ובטר רייל מעבירה דרכו בקשות לרכבת.

274
00:11:04,469 --> 00:11:07,460
יום לאחר מכן מופיע בריפו של האפליקציה

275
00:11:07,909 --> 00:11:10,349
קומיט בלי הרבה מקום לדמיון:

276
00:11:10,869 --> 00:11:11,619
Bypass

277
00:11:11,669 --> 00:11:14,390
Israel Railways API restrictions.

278
00:11:15,380 --> 00:11:19,570
ב-16 לאוגוסט 2025 ההתנהגות עוברת אוטומציה -

279
00:11:19,700 --> 00:11:21,770
האפליקציה תפנה לרכבת ישירות,

280
00:11:24,150 --> 00:11:25,489
ואם היא מקבלת 403 היא תעבור ל-Proxy

281
00:11:25,609 --> 00:11:26,450
ותנסה שוב.

282
00:11:27,250 --> 00:11:27,280
403

283
00:11:28,880 --> 00:11:30,640
אינה בעיה זמנית.

284
00:11:30,719 --> 00:11:32,390
היא החלטה של הרכבת

285
00:11:32,599 --> 00:11:33,919
לפסול את הבקשה.

286
00:11:34,599 --> 00:11:36,219
אפשר לטעון שההחלטה פסולה,

287
00:11:36,239 --> 00:11:38,440
לא מידתית או לא ראויה לגוף ציבורי,

288
00:11:38,520 --> 00:11:38,830
אבל

289
00:11:38,960 --> 00:11:40,580
אי אפשר לטעון שבטר רייל

290
00:11:40,799 --> 00:11:41,679
לא שמעה אותה.

291
00:11:41,919 --> 00:11:45,039
היא שמעה אותה ובחרה להיכנס מהצד.

292
00:11:46,049 --> 00:11:49,400
Better Rail השתמשה בזהות שלא הונפקה לה, עקפה

293
00:11:49,479 --> 00:11:50,809
מגבלה גאוגרפית,

294
00:11:50,820 --> 00:11:51,789
הפעילה fallback אחרי 403

295
00:11:52,840 --> 00:11:55,140
וריכזה תעבורה דרך proxy

296
00:11:55,320 --> 00:11:55,780
עם

297
00:11:55,919 --> 00:11:57,510
קאשינג מוטל בספק.

298
00:11:57,520 --> 00:11:58,349
בוא נניח

299
00:11:58,880 --> 00:12:00,859
שהרכבת היא ספרייה ציבורית -

300
00:12:01,280 --> 00:12:01,950
הספרים

301
00:12:02,070 --> 00:12:03,270
מיועדים לציבור,

302
00:12:03,280 --> 00:12:04,349
אבל זה לא מעניק לי

303
00:12:04,520 --> 00:12:07,010
זכות להשתמש בכרטיס של הספרנית,

304
00:12:07,320 --> 00:12:12,340
להיכנס דרך החלון או להפעיל רובוט שמצלם מדפים פעם בדקה.

305
00:12:13,159 --> 00:12:13,700
מצד שני,

306
00:12:13,950 --> 00:12:18,349
אם הספרייה היא היחידה שמחזיקה מידע חיוני והיא מסרבת להנפיק

307
00:12:18,559 --> 00:12:19,599
כרטיסים לקוראים,

308
00:12:20,000 --> 00:12:23,280
יש לה חלק לא קטן ביצירת שוק החלונות.

309
00:12:24,599 --> 00:12:25,179
ב-29 לספטמבר

310
00:12:27,900 --> 00:12:30,429
2025 ה-endpoint הישן נחסם ב-Cloudflare,

311
00:12:31,119 --> 00:12:33,469
שמאבטח את שרת הרכבת.

312
00:12:33,619 --> 00:12:37,349
בתוך שעות Better Rail משנה את הקריאה לרכבת מ-GET ל-POST,

313
00:12:37,640 --> 00:12:39,140
תוך שהיא מבריחה פנימה

314
00:12:39,320 --> 00:12:42,099
methodName כדי להמשיך לשרת את

315
00:12:42,320 --> 00:12:43,229
המשתמשים.

316
00:12:46,440 --> 00:12:49,669
ב-9 לאפריל 2026, בדיוק 40 יום לפני האירועים שרכבת ישראל תזכיר במכתב,

317
00:12:50,080 --> 00:12:53,640
בטר רייל מוסיפה עוד רענון למנגנון של React Query,

318
00:12:54,010 --> 00:12:57,690
אולי מכפיל העומס הגדול ביותר שנמצא בגיט,

319
00:12:58,159 --> 00:13:01,000
והוא מתואר עם אימוג׳י של באג.

320
00:13:01,369 --> 00:13:01,609
לא

321
00:13:01,770 --> 00:13:02,479
ברור

322
00:13:02,690 --> 00:13:03,320
כמה הוא ספציפית תרם לכשל

323
00:13:03,450 --> 00:13:09,679
הרכבת במאי, כי יש המון אימוג׳יס כאלה

324
00:13:09,890 --> 00:13:10,400
בריפו.

325
00:13:11,789 --> 00:13:18,140
ב-1 ליוני 2026 אנחנו עדים לעיצומו של מרוץ החימוש. ה-WAF של קלאודפלייר

326
00:13:18,390 --> 00:13:23,979
חוסם בקשות ל-searchTrain והשרת של בטר רייל, יחד עם האפליקציה,

327
00:13:24,150 --> 00:13:26,260
עוברים ל-searchTrainForMobile.

328
00:13:27,179 --> 00:13:28,619
בטר רייל מעצבת

329
00:13:28,859 --> 00:13:32,090
payload מלאכותי שכולל user agent של iPhone Safari,

330
00:13:32,289 --> 00:13:33,559
רזולציית מסך,

331
00:13:33,830 --> 00:13:36,380
כתובת IP ומיקום מומצאים.

332
00:13:36,789 --> 00:13:38,869
זו עדיין בקשת HTTP רגילה,

333
00:13:38,909 --> 00:13:39,979
אבל היא מעוצבת

334
00:13:40,229 --> 00:13:42,500
כדי להידמות ללקוח שהמערכת

335
00:13:42,989 --> 00:13:43,750
מצפה לקבל.

336
00:13:45,130 --> 00:13:49,049
ב-22 ליוני 2026 הרכבת יוצרת קשר רשמי.

337
00:13:49,570 --> 00:13:50,109
אין לי את

338
00:13:50,299 --> 00:13:52,770
כל התכתובת המקורית, ולכן לא ברור אם

339
00:13:53,030 --> 00:13:56,000
בטר רייל סולקה מיד או שניתן לה זמן חסד.

340
00:13:56,669 --> 00:13:57,979
מה שכן יש לי הוא Git.

341
00:14:00,400 --> 00:14:01,250
ב-27 ליוני 2026 נפתח

342
00:14:01,469 --> 00:14:05,750
PR מספר 28 בשרת ו-631 באפליקציה.

343
00:14:06,070 --> 00:14:09,750
בעוד ששני הצדדים מתדיינים על הטון בשיחה ההיא,

344
00:14:10,309 --> 00:14:12,789
הקוד מראה שחמישה ימים אחרי הפנייה

345
00:14:12,979 --> 00:14:14,429
התחיל מעבר מתואם

346
00:14:14,659 --> 00:14:15,539
וממשי

347
00:14:15,669 --> 00:14:17,460
אל מקורות מידע רשמיים

348
00:14:17,750 --> 00:14:18,770
במשרד התחבורה.

349
00:14:19,989 --> 00:14:21,340
המעבר הזה

350
00:14:21,510 --> 00:14:22,859
מסביר מה היה אפשר

351
00:14:23,150 --> 00:14:24,099
לעשות מלכתחילה.

352
00:14:24,349 --> 00:14:27,429
GTFS או General Transit Feed Specification

353
00:14:27,669 --> 00:14:30,739
הוא אוסף קבצים סטטיים שמתאר תחנות,

354
00:14:30,830 --> 00:14:31,299
קווים,

355
00:14:31,669 --> 00:14:34,619
נסיעות ולוחות זמנים לא רק לרכבת,

356
00:14:34,789 --> 00:14:36,590
אלא לכלל אמצעי התחבורה.

357
00:14:37,039 --> 00:14:40,780
זו גישה חינמית שמקבלים לאחר מילוי טופס

358
00:14:41,030 --> 00:14:41,950
במשרד התחבורה.

359
00:14:42,780 --> 00:14:45,729
בטר רייל מפשילה שרוול ומתחילה לעבוד.

360
00:14:45,739 --> 00:14:50,250
תוך כמה ימים היא טוענת את ה-Feed למסד נתונים משלה, פעם ביום, ומנטרת אירועים

361
00:14:50,460 --> 00:14:52,219
בזמן אמת בפרוטוקול SIRI.

362
00:14:52,260 --> 00:14:53,190
היא שומרת

363
00:14:53,539 --> 00:14:56,330
על מבנה המידע כדי לא לשבור אפליקציות ישנות

364
00:14:56,640 --> 00:15:00,369
ומצליחה להתגבר כמעט על כל החוסרים בזמן שיא.

365
00:15:00,760 --> 00:15:02,450
היא מכריזה שהתנתקה

366
00:15:02,710 --> 00:15:05,260
מרכבת ישראל בפוסט ברשת איקס.

367
00:15:06,419 --> 00:15:07,609
ב-16 ליולי 2026

368
00:15:08,700 --> 00:15:10,340
הפקקים חוזרים לשמפניה.

369
00:15:10,460 --> 00:15:11,090
בטר רייל

370
00:15:11,219 --> 00:15:12,799
מדווחת לרכבת על

371
00:15:13,020 --> 00:15:15,460
פערים משמעותיים במקורות הרשמיים.

372
00:15:15,989 --> 00:15:17,900
אין סימון רציפים או קרונות,

373
00:15:17,979 --> 00:15:22,099
אין עדכונים לעבודות שירות ותקלות, וזמני ההגעה -

374
00:15:22,179 --> 00:15:25,010
הלחם והחמאה של בטר רייל -

375
00:15:25,179 --> 00:15:25,979
פשוט שגויים.

376
00:15:26,820 --> 00:15:26,849
הרכבת,

377
00:15:28,409 --> 00:15:33,049
מודעת לחוסרים, דרשה להשתמש בערוץ רשמי.

378
00:15:33,059 --> 00:15:33,429
אבל

379
00:15:33,690 --> 00:15:34,869
הערוץ הרשמי

380
00:15:35,090 --> 00:15:37,809
לא החזיק את כל מה שהלקוח צריך.

381
00:15:38,090 --> 00:15:39,559
המפתח הלא רשמי

382
00:15:39,929 --> 00:15:42,320
גילה את הפער כי הוא לקוח בעצמו,

383
00:15:42,729 --> 00:15:44,840
וכשתיאר אותו לרכבת,

384
00:15:44,960 --> 00:15:45,809
במקום להודות,

385
00:15:45,849 --> 00:15:47,750
במקום לתת לו bug bounty

386
00:15:48,250 --> 00:15:50,289
נתנו לו מכתב לפני תביעה.

387
00:15:51,570 --> 00:15:54,940
ב-9 לאוגוסט 2026, אותו יום בו נשלח מכתב

388
00:15:54,940 --> 00:15:58,609
ההתראה, ה-Git מתעד את שני הצעדים האחרונים להתנתקות:

389
00:15:59,330 --> 00:16:02,169
הרציפים נלמדים מתצפיות SIRI במקום

390
00:16:02,369 --> 00:16:04,039
להימשך מרכבת ישראל,

391
00:16:04,250 --> 00:16:05,559
וה-proxy הישן

392
00:16:05,750 --> 00:16:07,719
יוצא מכלל שימוש. מאותו רגע,

393
00:16:07,979 --> 00:16:08,570
כל widget,

394
00:16:08,650 --> 00:16:09,159
כל קליינט,

395
00:16:09,169 --> 00:16:10,039
כל שעון

396
00:16:10,289 --> 00:16:11,679
ומכשיר טלפון,

397
00:16:11,890 --> 00:16:14,380
פונים לשרת Better Rail בלבד.

398
00:16:15,780 --> 00:16:19,289
אחרי 5 שנים של תלות, בטר רייל מנתקת את חבל הטבור.

399
00:16:21,359 --> 00:16:22,400
זה לא קרב על כסף.

400
00:16:22,440 --> 00:16:26,140
Better Rail החינמית קיבלה בכל פעילותה בערך 2,000 שקלים.

401
00:16:27,840 --> 00:16:29,090
זה בערך 5 שעות עבודה של

402
00:16:29,250 --> 00:16:31,250
המתכנת הבכיר שלה, למשך

403
00:16:31,830 --> 00:16:32,119
5 שנים,

404
00:16:32,200 --> 00:16:33,469
מיזם שעזר

405
00:16:33,760 --> 00:16:35,190
למאות ואלפים.

406
00:16:35,200 --> 00:16:36,030
זה קרב על

407
00:16:36,719 --> 00:16:37,320
שקיפות,

408
00:16:37,400 --> 00:16:40,599
לפחות זה מה שבטר רייל מנסה לקדם, והיא עושה את זה

409
00:16:41,619 --> 00:16:42,210
כי

410
00:16:42,460 --> 00:16:43,690
להקטין

411
00:16:43,979 --> 00:16:44,700
את

412
00:16:44,900 --> 00:16:47,169
הסיפור על הפעילות. כאילו לא היה בה

413
00:16:47,539 --> 00:16:48,210
דבר מיוחד.

414
00:16:48,219 --> 00:16:48,570
אבל,

415
00:16:48,950 --> 00:16:49,409
הקוד

416
00:16:49,570 --> 00:16:50,900
כן עשה דברים מיוחדים,

417
00:16:50,979 --> 00:16:52,119
תיארתי, אילו.

418
00:16:52,739 --> 00:16:59,679
אפשר לטעון שכל תגובה הייתה פרגמטית לחסימות שפגעו במשתמשים, או שהרכבת לא סיפקה חלופה,

419
00:17:00,059 --> 00:17:05,410
אבל אי אפשר לכווץ את הטענה לכך שאלו "אותן בקשות שהמשתמשים היו

420
00:17:05,579 --> 00:17:06,489
שולחים ממילא".

421
00:17:07,318 --> 00:17:10,519
האפליקציה הרשמית אולי גם מרעננת ומנסה שוב,

422
00:17:10,598 --> 00:17:12,188
אבל Better Rail עשתה את זה נכון

423
00:17:12,558 --> 00:17:14,628
רק בקומיטים האחרונים,

424
00:17:14,958 --> 00:17:16,598
ורק כשהכריחו אותה.

425
00:17:17,729 --> 00:17:22,118
הטיעון של רכבת ישראל חזק כשהוא מדבר על שרתים שנפלו,

426
00:17:22,448 --> 00:17:26,078
והוא נחלש כשהוא קופץ למונחים פליליים דרמטיים,

427
00:17:26,358 --> 00:17:28,239
ולדרישה למחוק

428
00:17:28,448 --> 00:17:31,548
מוצר שלם. מה רכבת ישראל הייתה יכולה לעשות?

429
00:17:32,009 --> 00:17:34,239
לעבוד עם הממשלה כדי להנגיש את

430
00:17:34,409 --> 00:17:36,399
GTFS ו-SIRI במלואם,

431
00:17:36,639 --> 00:17:37,869
ועד שזה יעשה -

432
00:17:38,048 --> 00:17:40,558
להנפיק למפתחים גישה נפרדת

433
00:17:40,668 --> 00:17:41,609
עם quota

434
00:17:41,769 --> 00:17:42,609
ו-dashboard.

435
00:17:43,689 --> 00:17:45,489
מה Better Rail הייתה יכולה לעשות?

436
00:17:46,050 --> 00:17:48,689
להעביר את כל הגישה לשרת מרכזי כבר ב-2023,

437
00:17:49,849 --> 00:17:51,599
לבצע deduplication ו-caching,

438
00:17:51,689 --> 00:17:52,439
להגדיר timeouts ו-concurrency נכונים,

439
00:17:53,969 --> 00:17:58,560
ולשמור telemtry שמראה בדיוק כמה תעבורה נשלחה,

440
00:17:58,770 --> 00:17:59,959
כדי שיהיה אפשר

441
00:18:00,410 --> 00:18:02,719
לטעון על קריסה במספרים

442
00:18:03,099 --> 00:18:03,969
ולא באמונה.

443
00:18:05,099 --> 00:18:10,849
מה שני הצדדים יכולים לעשות יחד נשמע כמעט מביך: לפתוח ערוץ טכני.

444
00:18:10,859 --> 00:18:12,119
לגשר על הפערים

445
00:18:12,260 --> 00:18:14,310
בפגישה משולשת עם משרד התחבורה

446
00:18:14,579 --> 00:18:16,500
ולהמשיך לשרת משתמשים.

447
00:18:16,739 --> 00:18:17,540
במקום זה,

448
00:18:17,859 --> 00:18:18,969
כל צד ענה

449
00:18:19,300 --> 00:18:21,609
לשני בכלי היחיד שהוא הכיר.

450
00:18:21,619 --> 00:18:22,380
הרכבת שלחה 403,

451
00:18:23,699 --> 00:18:25,140
בטר רייל ענתה בפרוקסי.

452
00:18:25,420 --> 00:18:26,500
הרכבת שמה WAF,

453
00:18:26,760 --> 00:18:28,380
בטר רייל התחפשה לאייפון.

454
00:18:29,180 --> 00:18:31,130
זו לא היתה תקשורת,

455
00:18:31,359 --> 00:18:32,420
והיא התפוצצה

456
00:18:32,849 --> 00:18:34,280
בצורה הכי גרועה

457
00:18:34,689 --> 00:18:35,130
שיש לרכבת.

458
00:18:36,199 --> 00:18:40,060
ועוד משהו ששני הצדדים יכלו לעשות, אנחנו חיים בתקופה

459
00:18:40,310 --> 00:18:40,939
מעולה

460
00:18:41,140 --> 00:18:42,060
שבה ניתן

461
00:18:42,209 --> 00:18:43,260
לנתח קוד

462
00:18:43,469 --> 00:18:44,579
ולשפר קוד

463
00:18:44,920 --> 00:18:47,780
מדי יום. להריץ את הריפו שלכם מדי פעם

464
00:18:47,910 --> 00:18:49,380
דרך קלוד ולשאול אותו,

465
00:18:49,630 --> 00:18:50,900
מה היית משפר -

466
00:18:51,150 --> 00:18:53,540
זה משהו שאפשר לעשות היום,

467
00:18:53,750 --> 00:18:54,729
ובכל יום,

468
00:18:54,900 --> 00:18:56,060
במיוחד שאתה

469
00:18:56,229 --> 00:18:57,900
פקוד על תשתיות לאומיות,

470
00:18:58,310 --> 00:19:02,510
וגם אם אתה בונה אפליקציה שמתפוצצת ממשתמשים.

471
00:19:03,959 --> 00:19:08,140
ואם מעניין אתכם ללמוד עוד על תשתיות וסקייל, דווקא בעידן של וייב-קודינג,

472
00:19:08,420 --> 00:19:11,329
אז יש לי קורס בכתובת shipreal.dev

473
00:19:11,819 --> 00:19:14,939
עד הפעם הבאה, תהיו טובים, ותמשיכו להיות סקרנים.

474
00:19:15,260 --> 00:19:15,739
יאללה ביי.
