קטגוריה: asterisk

סיכום שנה – 2015

כרגע כפי שניתן לראות, הבלוג שלי כמעט ולא זוכה לעדכון, וזאת בשל כך ששנת 2015 הייתה שנה מאוד עמוסה ומאתגרת עבורי מבחינה מקצועית.

לצערי לא אוכל לדבר בהרחבה על הרבה מהדברים שהתבצעו, לפחות בינתיים, אך אני מקווה כי שנה מהיום כבר אוכל לחשוף את העיסוקים השונים.

ב2014 "זכיתי" באלימות, ניסיון סחיטה לאחר אלימות הזו, ואז גם מימוש הסחיטה בפועל, כאשר מישהו לא רצה לסדר דברים אצלו ברשת, והחליט שאלימות זו הדרך לפתור דברים.

אך הרבה לפני כן, התחלתי לבצע פרויקטים שהגיעו לאט לאט למשהו גדול יותר, שב 2015 מצאתי את עצמי שקוע רק בהם, ולמעשה גם כרגע אני עדיין עסוק באותם הפרויקטים.

הגעתי למשל למצב שבו אני יושב עם אנשי מתג של חברת תקשורת מוכרת בישראל, והם צוחקים עלי שאני ילד, כי אני "רק" תשע שנים בתחום התקשורת. כאשר אני התחלתי (ועדיין אפילו לא מתקרב לחיתולים)  ללמוד קצת על SS7 ו SIGTAN עבור אחד הפרויקטים.

פרויקט של גוף ממשלתי שהשורשים שלו נטעו בסוף 2012, הגיע למצב של פיילוט ב2015, שעכשיו ב2016 כנראה שיכנס להיות בכל הארץ אצל אותו גוף ממשלתי.

מספר פרויקטים נוספים גם הם נמצאים בשימוש של מספר גופים בארץ שלהם משתמשים רבים התחיל ב2015 ועכשיו מתחיל להתרחב לשימוש גדול עוד יותר.

התחלתי לבצע הרבה ניתוח של דרישות ומימושים קיימים בשביל לשפר אותם וחלקם אפילו לשכתב, ואפילו ליצור סוג של roadmap לפרויקטים שונים, דבר שהתגלה כאתגר מאוד מעניין, אך עדיין אני מוצא כי כתיבת קוד מהנה הרבה יותר מאשר תחזוקה או תכנון ללא מימוש שלי של אותו התכנון.

דברים נוספים שהתחילו ב2013, התפתחו יותר ב2015, כאשר אני מקווה שעד 2017 אוכל כבר להציג ולדבר עליהם בחופשיות יותר, היות והם הולכים לשנות מספר גישות שאנחנו מכירים כיום, במידה ויישארו בכיוון שנכנס כרגע, והיו כמובן משוחררים בקוד פתוח.

בכלל, חשוב לי להדגיש כי כל הדברים האלו מבוססי קוד פתוח שהיה קל מאוד להכניס אותם לפרויקטים האלו, משהו שלפני רק שלוש שלא לדבר על חמש שנים, היה על סף בלתי אפשרי. עכשיו זה אפילו כמעט מתבקש וכבר לא סוג של מילה גסה.

יש אצלי למה לחכות, ואנסה לעדכן יותר את הבלוג תוך כדי.

האקינג לראוטר, או איך להפוך ראוטר לקוד פתוח

לפני מספר שנים, רכשתי מדורון OpenMoko, ועשיתי עליו מספר פעולות האקינג די נחמדות בשביל לשלוט בטלפון כמו שאני רוצה, או למעשה במודם סלולרי, ושאר הרכיבים, כולל כתיבה של מספר תוכנות ממש קטנות לעצמי, רק כהוכחת יכולת ולא מעבר.

מאז לא היו לי אתגרים באמת מעניינים בנושא ההאקינג של מכשירים, עד שרכשתי את WDR4300 של TP-Link והחלטתי שאני לא אוהב את הרעיון שאין לי שליטה על הראוטר שלי.

גיליתי שאני מוגבל, היות ובמדינת ישראל יש הגבלת תדרים על ידי משרד הביטחון (ולא משרד התקשורת) – WTF ?!
אז בגלל זה אני למשל לא הייתי יכול לעדכן את הראוטר לגרסה חדשה יותר של TP-Link, כי אין להם הורדה של גרסה "ישראלית" המגבילה תדרים (מצטער אבל זה הזוי).

אז התקנתי openwrt, ופתאום נזכרתי לטובה במוקו, אשר דרש ממני קצת האקינג בשביל לגרום לו לעבוד.
מצאתי את עצמי ב7 בערב עד 1 לפנות בוקר מתאים אותו לצרכים שלי.

זה כיף להיכנס למכשיר דרך telnet ולהתחיל להגדיר את הפצת הלינוקס כפי שאתה רוצה. וזה עוד יותר כיף, כשמערכת החבילות זהה למוקו 🙂 .
אחרי שאתה מגדיר סיסמה ל root, ה telnet מתבטל, ואתה חייב לעבוד עם ssh, שגם עברה מספר שיפצורים על ידי.

אני קיבלתי את הראוטר עם חומרה v1.7, שזה השיפצור האחרון של tplink (נכון לכתיבת הפוסט הזה) בנושא החומרה, ונראה שהכל עובד מהקופסא, אחרי שאפשרתי מספר דברים 🙂

זו פעם ראשונה שאני עובד עם אחד מפרוייקטי wrt, ואת האמת, אני נהנה מכל שניה, עם המשחקים האלו, אבל בסופו של דבר, אם הראוטר לא עובד ועושה את העבודה, הוא לא שווה הרבה.

אבל כאן הוא עושה בדיוק מה שאני רוצה, כמו שאני רוצה, בלי שמתערבים לי בו.
המטרה של הראוטר להחליף את הראוטר שבזק מספקים, היות ואם אגיד שהוא זבל, אתן לזבל שם רע.

הראוטר של בזק מנתק את ה wifi כל כמה זמן לכמה שניות. כלומר את המכשירים המחוברים אליו.
מדפסת הרשת שלי, משום מה לא עובדת כמו שצריך עם הראוטר הזה, אבל הכי גרוע זה ה TR-069 שיש בראוטר ואני לא יכול לבטל אותו, הוא סוג של back-door  לכל הראוטרים האלו, המאפשרים לבזק לבצע provision מרחוק, אבל מסכנים את הראוטר לחלוטין.

אז אחרי הרבה התלבטויות, הגיע הזמן פשוט לעבוד עם ראוטר טוב ואיכותי במקום, שאני יכול להחליט עליו כל דבר שרק ארצה, וכמובן שזה מה ש open-wrt מאפשר לי.

אני יכול לבצע אפילו התקנת freeswitch עליו, מגרסת הפיתוח (משום מה), שלא לדבר על אסטריסק, או yate.
התקנה של מרכזיה כדוגמת freeswitch למשל, מאפשרת אם מתבצעת נכון, להעביר את הכוח לסוג של DMZ, שמוגן מתקיפות למינהן, אבל כן מסוגל לבצע שיחות.
אך אין לי כוונה להתקין מרכזיה כלשהי על הראוטר.
אם זה לא מספיק, אני יכול גם להתקין את Kamailio מסדרת שלוש וסדרת ארבע, מה שאומר שאני גם יכול לקבל SIP Proxy שאני יכול לתכנת כפי שאני רוצה, אך גם כאן, זה לא יהיה מה שאעשה.

פשוט כיף הכוח שאתה מקבל חזרה לציוד שאתה רוכש לעצמך, ואמנם אינני אוהב שיש ריבוי חוקים, למעט חוקים שנועדו לאזן את החיים, אך לדעתי חוק אשר מחייב כל יצרן חומרה בסגנון ראוטרים, טלפונים וכיוב', לאפשר לבצע מה שרוצים על החומרה עצמה, יעשה רק טוב.

בכל מקרה, אני מאוד נהנה 🙂

יצאה גרסת 1.4.4 של FreeSwitch

במידה ואינכם מכירים, אז Freeswitch הוא פרוייקט קוד פתוח (MPL) הממש מרכזיית טלפניה.
הפרוייקט ניסה ללמוד את כל הבעיות שיש באסטריסק בניסיון להימנע מלבצע אותם, ולדעתי גם הצליח בכך.
למעשה הוא החל את דרכו לאחר פרישת כמה ממפתחי אסטריסק לכיוון חדש לגמרי.

המרכזייה בנויה מיחידת בסיס (core) ואוסף מודולים שונים, אשר מספקים לה תכונות שונות, בהתאם לצורת השימוש.
למשל, במידה ומעוניינים ליצור call centre, אז יש מודול לכך, ובמידה ורוצים ליצור ivr בצורה פשוטה, גם לכך יש מודול. אפילו חדרי ועידה מקבלים תכונות רבות יותר מאשר אלו של אסטריסק.
כל ההגדרות כולל ה diallplan נעשות באמצעות קבצי xml, אבל אפילו תוכניות החיוג זה למעשה מודול חיצוני. כאשר מעוניינים בכך, ניתן לצאת לשפות תכנות חיצוניות (גם כמודול), כדוגמת lua (שנתמכת הכי טוב), פרל (לא מתועדת מספיק), פיתון ואפילו ג'אווה סקריפט (יש תמיכה ב v8 ו SpiderMonkey, כאשר האחרון נמצא בשלב deprecated).
בנוסף, יש מימוש של event sockets – אחת הדרכים לשלוט במרכזיה, ולקבל אירועים ממנה, על ידי שימוש בפרוטוקולי תקשורת, כדוגמת TCP. ואלו מאפשרים חיבור של שפות נוספות, כדוגמת Go.
בנוסף, יש גם ספרייה שממשת את rayo – תת פרוטוקול xmpp אשר מאפשר גם שליטה דומה ל event sockets.

אז מדוע אני מציין דווקא את הגרסה הזו על פני כל הגרסאות הקודמות ? ובכן, זו הגרסה הראשונה של סדרת 1.4, אשר נחשבת לגרסה יציבה, ולא גרסת Beta. כלומר זו גרסה רשמית יציבה ראשונה של העץ 1.4.

עץ 1.4 הביא איתו המון חידושים ושיפורי ביצועים, בהם בראש ובראשונה תמיכה מלאה בתקני webrtc ו websockets, אשר מניסיון שלי, טובים יותר מהתמיכה שיש באסטריסק. נכון לכתיבת שורות אלו, כרום ביטל את התמיכה ב SDES, דבר שמקשה על התמיכה ב webrtc של אסטריסק ללא בנייה אישית שלו, בעוד שFreeSwitch תומך ב dtls-srtp ללא בעיה מהקופסא.

בעוד שהפצת הלינוקס העיקרית של אסטריסק מבוססת red-hat (בדגש על centos), החל מגרסה 1.4, דביאן היא ההפצה הרשמית של Freeswitch.
במידה ואתם עדיין על centos5, אז יש סיכוי כי אולי תתקלו בבעיות בעת השדרוג.

כרגע עץ 1.2, אשר נחשב ליציב, עבר להיות גרסת LTS, אשר מקבלת רק עדכוני אבטחה, ותיקוני באגים גורליים, אך לא מעבר.

את היכולות (הלא מלאה או מעודכנת) של Freeswitch, ניתן למצא בדף הבא בוויקי של הפרוייקט.
למעשה הוויקי של הפרוייקט, הוא התעוד עצמו של הפרויקט, והוא בנוי בצורה מאוד טובה ונוחה, ולרוב מתועד כמו שצריך.
למעשה אם משווים אותו לאסטריסק, אז לאסטריסק אין תעוד בכלל בוויקי של הפרוייקט, למעט הAPI עצמו, אך כמעט ללא הסברים ודוגמאות, וזאת בניגוד ל Freeswitch.
הוויקי של הפרוייקט כרגע בתהליכי מעבר ל Jira, התעוד החדש יושב כאן. אבל חשוב להבין כי היות ויש כרגע מעבר (איטי), כרגע יש מעט בלאגן בנושא, אך גם הוא בלאגן מתועד (בתוך דף הוויקי הספציפי שעבר).

העניין החשוב באמת הוא, ש FreeSwitch מספקת את האפשרות לקבל מרכזייה יציבה, שמשתמת יחסית במעט משאבים (תלוי באופן השימוש), עם המון יכולות.
היא יכולה להיות למעשה מרכזייה ברמת class 4 ולא רק class 5 בניגוד לאסטריסק למשל. ועץ 1.4 מבטיח כניסה לעולמות חדשים.

כאשר בודקים את המרכזיה, אם אתם מגיעים מעולם האסטריסק, יש לזכור כי היא דורשת שיטת חשיבה לגמרי שונה, וככזו ללכת בדרך האסטריסק בתפיסה תסבך אתכם מאוד ותקשה לבצע דברים.

הבנה של bindaddr באסטריסק

לקוח פנה אלי עם בעיה. מסתבר כי SIP הפסיק להגיב לו.
נכנסתי למכונה, וגיליתי כי אסטריסק לא האזין בכלל על פורט 5060. ניסיתי לשנות את הפורט למשהו אחר, ולראות אולי זו הבעיה, וכל ניסיון לשנות את הפורט העלה חרס. הוא כן ניסה לבצע את הפעולה אבל נכשל.
הוא לא דיווח שום בעיה למה, אבל כאשר אסטריסק ניסה לתקשר בפרוטוקול SIP הוא דיווח חזרה את ההודעה הבאה:

Serious Network Trouble; __sip_xmit returns error for pkt data

בד"כ במצב כזה, החשד הוא שמשהו אחר תופס את הפורט, אז הרצתי בדיקה של netstat ואפילו lsof, וכלום, הפורט פנוי.
הרצתי netcat כשרת, והוא הצליח ללא בעיה לבצע bind על הפורט הזה.

הבעיה היא, שהלקוח עובד עם elastix שמבוססת על freepbx, וזו מתערבת בקבצי ההגדרות, ויוצרת עוד קבצי הגדרות חדשים עבורך להוספה, ולא ניתן לשנות קבצי הגדרות ידנית, כי היא דורסת אותם, אלא אם אלו קבצי "‎‎_custom.conf"
לאחר המון שעות מחקר, החלטתי לגשת לקבצים שנוצרים אוטומטית, וגיליתי כי bindaddr הצביע על כתובת IP שאומנם חוקית ברשת של המרכזיה, אבל היא לא שייכת למכונה.

כאן צריך להיכנס ולהבין בעצם את אסטריסק יותר לעומק.
במצב רגיל, כאשר פותחים socket ניתן להגיד לו להאזין לכתובת ip מסויימת, במקום להאזין להכל.
אבל באסטריסק ביצוע bind הוא מעט שונה בתפיסה שלו.
באסטריסק, הכתובת ip היא כתובת שקשורה לניתוב. היא אומרת לאסטריסק מאיפה התקשורת תגיע ולאן היא צריכה ללכת. לא ברמה של כתובת שרת, אלא ברמה של כרטיס רשת. כך שאם כתובת הip אינה שייכת לnetwork device, אסטריסק אינו יכול "להינעל" על אותה כתובת ip, שכן זו בעצם היכולת שלו לבצע bind על כרטיס רשת ולכן הוא אינו יכול להאזין לדברים.

יוצאת הדופן באסטריסק, היא בעצם הכתובת של 0.0.0.0 אשר אומרת לו שמכל מקום יכולה להגיע תקשורת, מעבר לכך, כתובת ה ip חייבת להיות פיזית שייכת למרכזייה.

עם אותו לקוח, הסתבר כי הוא התקין תוסף ל FreePBX שמאפשר לו בצורה גרפית להגדיר את הכתובת, דבר שמוגדר בקובץ שנוצר אוטומטית, ולי אין יכולת להתערב בתוכן שלו בלי שזה ידרס.
הוא הגדיר את הכתובת החיצונית של הרשת שלו (כאשר הוא מאחורי nat), ולא את כתובת המרכזיה עצמה, וכאשר העברתי את זה ל 0.0.0.0 הבעיה נפתרה לה, לאחר שלוש שעות של מחקר להבין מדוע אסטריסק לא ביצע bind לכתובת.

FreeSwitch או אסטריסק ?

הקדמה

מזה כשנה שאני מתעסק ממש לעומק עם FreeSwitch ומוצא את עצמי מאוד מעריך את הכלי הזה.
התחלתי להיכנס אליו בעקבות מספר בעיות ממש קשות עם אסטריסק שנתקלתי בהם עבור מערכות שפיתחתי, וחיפשתי מערכת אחרת שתוכל לעמוד טוב יותר בדרישות שלי.

החלטתי לסכם קצת יותר לעומק את המצב הקיים כיום כפי שאני לפחות מבין אותו, ובעיקר מה שלמדתי עד עכשיו.
המטרה היא לא להתנגח בכלים שונים, אלא לנסות ולהכיר לעומק יותר את הכלים בשימוש ובמה להשתמש במצבים שונים.

להמשיך לקרוא

פרצת אבטחה חמורה בFreePBX 2.10.0 / Elastix 2.2.0

גרסת FreePBX 2.10.0 וגרסת Elastix 2.2.0‏ ואולי גם גרסאות ישנות יותר, מכילות בעיית אבטחה בה ניתן בצורה מרוחקת להריץ קוד על השרת כמשתמש root, ובכך לחדור למכונה.

הבעיה מתרחשת בעקבות בעיית Cross Site Scripting אשר כותבת ללא פילטר מסויים לקובץ את התוכן ששמים ב URL. חשוב מאוד לעדכן את המערכת לגרסה האחרונה ביותר אשר מתקנת את הבעיה.

מידע מלא על הבעיה ניתן למצוא בבלוג הבא, ובדיווח לרשימת התפוצה של Full Disclosure . כמו כן, ניתן למצוא קוד לניצול הפרצה.

freeswitch

הרבה מאוד אנשים למדו להכיר את השם Asterisk וההקשר שלו לטלפוניה, בדגש על מרכזיית טלפון לעסקים (ישנם סוגים שונים של מרכזיות, אנחנו מדברים כאן תמיד על מרכזייה לעסקים).

Asterisk היא מערכת סה"כ נחמדה, מבית היוצר של חברת Digium והיא משוחררת ברובה כקוד פתוח.

אך לעולם הקוד הפתוח (והתכנה החופשית במקרה הזה) יש עוד מרכזיות להציע, אחת מהן נקראת FreeSwitch. הבעיה העיקרית של המרכזייה הזו היא בכך שאין מאחוריה חברה כלשהי, אלא ארגון ללא מטרות רווח (ע"ע מוזילה כדוגמה לארגון שכזה), וגם זה עד כמה שאני מבין, נכנס רק לאחרונה.

מדוע זו בעיה (עוד לפני כל הצגה אחרת שלי) ? ובכן חברות כדוגמת מיקרוסופט, סאן, אורקל ואחרות הצליחו "למכור" לרוב השוק את העובדה שרק אם תבחר מוצר שיש מאחוריו חברה, הוא "שווה" משהו, כי זה אומר שיש למשל "גב" מאחוריו. ושהפרויקט לא ישנה כיוון בפתאומיות וכו'… זה לא מפריע לאותן חברות גם לזרוק טכנולוגיות שלמות שלהן שהן רק לפני 3 חודשים עדיין מכרו בשיא השיווק ללקוחות שלהן, העיקר המכירה של אותו הרגע, ולשנות כיוון כאילו היו לפני הקרחון שהטביע את הטיטניק, גם כאשר אין זה באמת המצב.

אז אם נשארתם לקרוא על המרכזיה, אז הנה מידע קצת טכני (אם כי אני מנסה לעשות אותו לא מורכב): להמשיך לקרוא

ניהול פרוייקטי תכנה

השבוע לקוח שינה לי פרוייקט, והעביר אותי ליצור לו פרוייקט חדש. בעוד שההערכה הגסה שלי היתה כשבוע וחצי עד שבועיים, לקח לי למעט באג אחד בודד כיום, כ3 ימי פיתוח, אשר 2 מהם פיתוח פיזי, ואחד לתיקוני באגים.

הערכתי הערכה מופרזת בטח את הפרוייקט אתם בטח חושבים, אז זהו שלא. להמשיך לקרוא

Adhearsion

אחת הסיבות שאני עובד עם שפת רובי, היא לא רק בזכות השפה המדהימה (לדעתי), אלא גם בזכות הכלים שמתכנתי רובי מצליחים להביא לעולם, אשר פתאום כולם מנסים ליצור להם חיקוי, לפחות לחלק גדול מאותם כלים. כלומר יש משהו אשר מעודד הרבה מאוד את היצירתיות בשפה, יותר מהרבה שפות אחרות לדעתי.

אחד הכלים המדהימים שנכתבו נקרא Adhearsion. הכלי הזה הוא בעצם framework לפיתוח מערכות טלפוניה, ואני משתמש בו כבר מספר שנים לפתח אפליקציות שונות.

תפיסת העולם של ה framework מחולקת למספר גישות. הגישה הראשונה אומרת שאנחנו מקבלים כלים אשר עוזרים לנו להתמקד במשימה מולינו, במקום בהוספת עוד פונקציות שונות שרק איתן באמת ניצור את התוכנה, כמו שמרבית הframework אשר יצא לי לעבוד איתם עד שגיליתי אותו.

עוד דבר שמאוד מיוחד בו, הוא בכך שלא רק שהוא קוד פתוח, אלא הוא בנוי לקבל תוספות (plugins). זה יכול להיות "hard coded" בפרוייקט שלנו, וזה יכול להיות אפילו ruby gem,אשר אנחנו רק אומרים לו שאנחנו רוצים להשתמש בה. כך שאפשר תמיד להוסיף כלים שיהיו גנריים ויתאימו לכל האפליקציות שלנו אם הם חסרים לנו.

אתם בטח חושבים שאני מדבר רק על פיתוח לאסטריסק, אבל היעד של הכלי הזה הוא לאפשר לפתח מערכות בכל המרכזיות אשר משוחררות בקוד פתוח, כדוגמת FreeSwitch ו Yate.

ועוד פרט קטן, גם אני מידי פעם מצליח לתרום משהו לפרוייקט, כדוגמת תיקוני באגים, הוספת תעוד, וכרגע אני עובד אפילו על מספר תוספות שתוכלו להשתמש בהם גם אתם בעת הפיתוח.

אם אתם זקוקים לסיוע בעבודה עם ה framework המדהים הזה, אז עכשיו אתם יודעים כי יש לכם גם כתובת ישראלית לשאלת שאלות, ואשמח לסייע לכם. ואם החברה שלכם משתמשת בה, תמיד אפשר ליצור קשר עם אתר העסק.

סקייפ לאסטריסק – הסוף

סקייפ לאסטריסק הוא תוסף עבור אסטריסק אשר מפותח על ידי דיג'יום ובשיתוף פעולה של חברת סקייפ. התוסף מאפשר לאסטריסק להיות "לקוח" ברשת סקייפ ולהצליח להכניס ולהוציא שיחות בפרוטוקול של סקייפ, ובנוסף להוציא שיחות טלפון רגילות באמצעות Skye-Out.
דיג'יום הודיעו כי חברת סקייפ לא מחדשת את ההסכם עם החברה עבור Skype For Asterisk, ולכן לא ניתן יהיה לרכוש או להפעיל את החיבור החל מה26 ליולי השנה.

מי שכבר רכש או ירכוש עד התאריך הזה, יקבל תמיכה של שנתיים במוצר ולאחר מכן לא יוכל להמשיך לעבוד איתו.

לא ברור אם אי החידוש הוא כתוצאה מרכישת החברה על ידי מיקרוסופט או לא.

ביי ביי אסטריסק 1.4/1.6 שלום 1.8

אחד הדברים שנראה השבוע ושבוע הבא הוא שגרסאות של אסטריסק 1.4 ו1.6 יוצאות ממחזור התמיכה שלהן לגבי תיקון באגים וכו'.

למעשה אנחנו נראה כי תצא עוד גרסה אחת לכל הסדרות האלו, אבל זה יהיה הסוף.

הסיבה היא שאסטריסק 1.4 היתה גרסת Long Term Service או LTS בקיצור שהוחלפה על ידי גרסה 1.8, וסדרות 1.6, ובכן הן היו יותר ניסויים מאשר גרסה שצריך להשתמש בה. אז לפי הטבלה של דיג'יום, הם צריכים לסיים את החיים שלהם השבוע הזה והשבוע הבא, ויש להסתמך רק על 1.8 מכאן והלאה.

לעוד מידע תוכלו לגשת למאמר הבא.

הבנת אבטחת מידע בנוגע ל SIP

לאחרונה גוברת המודעות לצורך לאבטח מערכות מבוססות VoIP ו SIP בפרט, בייחוד אחרי שמקבלים מכה קשה בארנק לאחר גניבת שיחות. אותם אנשים פונים אלי, היות והעסק שלי מתמחה בעבודה מול המרכזייה החכמה – אסטריסק, בשביל למצוא מענה כלשהו לבעיה זו.

הבעיה היא אבל שאנשים מצד אחד רוצים להגן על המערכת, אבל מצד שני לא רוצים לעשות שום שינוי בעבודה שלהם. כלומר הם רוצים שהכל ישאר כמו שהוא רק שפתאום במטה של קסם בעיית גנבת השיחות תעלם להם כלא היתה.

אז צרך להבין שאי אפשר לאכול את העוגה ולהשאיר אותה שלמה. כלומר לא ניתן לאבטח מערכת שהיא חשופה לגמרי ברשת ! צריך להבין כי יש צעדים שונים שצריך לנקוט בהם בשביל לקבל את האפקט, וזה אומר בין הייתר כי אופן השימוש שלכם במערכת צריך להשתנות מקצה אחד לשני.

נתחיל מהסוף. SIP הוא פרוטוקול Voice Over IP אשר אומר כי הוא מעביר מידע אודות השיחה וההתנהלות שלה מצד אחד לצד שני, אבל הוא לא אחראי למה שקורה בשיחה, אלא רק למידע שמנסה ליצור את השיחה ומה מתרחש בשיחה. כלומר הוא מעביר אותות שונים אודות השיחה בלבד (משהו בסגנון של צליל חיוג, תפוס, לא זמין וכו' לאנשים הפחות טכניים שקוראים את הפוסט).

הבעיה היא ש SIP חשוף לגמרי בעולם, כלומר המבנה שלו הוא clear text אשר גלוי לכל מאזין ומקשיב.  המתחכמים יגידו עכשיו שאם הוא היה בינארי אז הכל היה תקין, אבל התשובה היא "אז זהו שלא". הבעיה היא שהוא חשוף בעולם ולא בזה שהוא גלוי. כלומר גם מידע בינארי אפשר להשתמש ולשנות, הרי יש לפחות עוד צד אחד שצריך לפרש את המידע, ולכן המידע הבינארי עדיין צריך להיות בר פירוש, ואז עדיין אפשר לגנוב שיחות באותה מידה.

אז איך כן אפשר להגן על SIP ?

דבר ראשון תעשו סיסמה חזקה ומיוחדת לשלוחה שלכם.

בנוסף, תשימו את ה SIP שלכם בפורט לא רשמי, וזה יפחית את כמות הסורקים האוטומטיים נגדכם, אבל עדיין לא מגן עליכם מפני גניבה כלשהי.

מAsterisk גרסה 1.8, אפשר להשתמש במנהרת SSL להצפנה, אבל זה תלוי גם בתמיכה של הטלפוני SIP בצד השני, ואם הם תומכים בגישה הזו. אבל זה לא פותר את בעיית הגניבה, אלא רק את בעיית "אדם באמצע" (Man In the middle), אשר לא יוכל להאזין למה שקורה, אבל כן לנסות ליצור שיחות בעצמו ולהתחבר בעצמו.

עוד דרך היא לעבוד עם VPN מאובטח. הבעיה היא ש iPhone ללא פריצה אינו מסוגל לעשות דבר כזה למעט SSL VPN של חברת fortigate (אשמח לגלות שאפל מאשרים ליותר vpn מאובטחים לעבוד על הצעצוע שלהם), וAndroid דורש גישת root להתקנה של מרבית ה VPN כדוגמת openvpn, כך שצריך אנשים טכניים בשביל לגרום לדברים לעבוד, ומשתמש "פשוט" שלא רוצה להבין טכנולוגיה ולא רוצה לשנות את דרכיו ורק רוצה שהכל יעבוד בשבילו לא יכול לקבל כלום.

עוד דרך, אשר לא תמנע Man In the Middle אבל תגן על המרכזייה שלכם מגניבת שיחות היא שימוש בכתובת IP קבועה. אז מה עושים אנשים עם כתובת מ DHCP או מבית קפה ? ובכן תמצאו מקום טוב יותר להיות בו, או שתעבדו עם VPN, כל כך "פשוט".

עוד דרך נוספת, היא להשתמש במערכות אשר חוסמות ניסיונות מרובים להתחבר למרכזייה מכתובות או מקבוצה של כתובות אל המארכזייה ללא הצלחה לאורך זמן מסויים.

יש בישראל ובעולם חברות המציעות לנטר לכם את התעבורה במרכזייה ולהגיד לכם שווקטור התקפה מסויים פוגע לכם במרכזייה.
אני אישית מאמין ששינוי מנהגי העבודה שלכם והבנת הבעיות ואיך להימנע מהם יעזרו יותר, מאשר לגלות בדיעבד או אפילו בזמן אמת שכרגע מישהו מנסה לתקוף אותכם, ואם אתם לא מכנים לשנות את גישת העבודה שלכם, ובכן הכיס שלכם יכאב כאשר תדרשו לשלם את התוצאה, והאשמה היא שלכם ולא של מי שמנסה לאבטח לכם את המערכת.

בעיית Stack Overflow ב Asterisk עם SIP

שוחרר היום Advisory של חברת Digium אודות Stack Overflow במימוש של SIP במרכזיית Asterisk.

גלישת חוץ אם אתם לא יודעים, היא בעיה בה ניתן לשתול קוד אשר ירוץ על ידי דגלי המעבד, על ידי בריחה מגבולות הזיכרון שהוקצו למשתנה כלשהו, היות ואין בדיקה האם האורך של התוכן גדול יותר מהתוכן המותן להשתמש בו.

במקרה הזה, הבעיה היא במימוש ה URI אשר יוצרים עבור SIP. כך  ניתן באמצעות שימוש ב CallerID לעקוף את גבול ולהריץ קוד "זדוני".

כיצד אפשר להתגונן ? ובכן אם אתם יכולים לשדרג את הגרסה של המרכזייה לאחת מהגרסאות הבאות:

  • 1.4.38.1
  • 1.4.39.1
  • 1.6.1.21
  • 1.6.2.15.1
  • 1.6.2.16.1
  • 1.8.1.2
  • 1.8.2.1

אם לא ניתן לשדרג, אז הנה טריק בנושא:

exten => s,1,Set(CALLERID(num)=${CALLERID(num):0:40})
exten => s,n,Set(CALLERID(name)=${CALLERID(name):0:40})

ובכל זאת מומלץ לשדרג כאשר ניתן את המרכזייה.

הגנה על מערכות VoIP

כמו שכתבתי בעבר בDigital Whisper, יש הרבה דרכים להגן על המרכזייה של הארגון שלכם, או המרכזייה כאפליקציה בארגון.

הבעיה היא שהרבה ארגונים משאירים את המרכזייה פתוחה לעולם ממגוון סיבות שונות, כאשר חלק מהן זה חוסר ידע, חלק זה המחשבה ש"לי זה לא יקרה", יש מנהלים ואנשי מכירות שרוצים גישה ישירה מכל מקום אל המרכזייה, יש חברות שהאנשים מבוזרים במקומות שונים עוד הרבה סיבות. אך כל עוד הם לא נתונים להתקפה, אין להם את ההבנה של הרעיון למה צריך להגן על המערכות שלהם, ולפעמים מתעלמים מהבקשות השונות להגן על המערכת.

הנה כמה דברים שאתם חייבים להבין על אבטחת מידע בכל מה שנוגע למרכזייה שלכם בנקודות:

  • טלפוניה (ללא קשר לסוג המערכת) רגישה להתקפות כדוגמת Man In The Middle – כלומר מחשב באמצע התעבורה באיזשהו צד יכול לעשות נזק לשיחה או רק להאזין לה בברירת מחדל.
  • טלפוניה רגישה להתקפות כדוגמת DoS – כלומר מניעת שירות. זה יכול להיות מניתוקים רבים של כל בקשה ליצירת שיחה, זה יכול להיות הרבה התקשרויות מעבר למה שהקו או המרכזייה מסוגלים לטפל, זה יכול להיות עוד הרבה דברים שימנעו שימוש בטלפון אצלכם בארגון.
  • ניתוב לא נכון יכול לעלות לארגון הרבה כסף. נגיד שיחות לחו"ל, שיחות למספרים "אסורים" (שעולים הרבה כסף) וכו' יכולים לגרום לכם להיות קורבנות של גניבת שיחות.
  • מתן גישה לכל דורש למרכזייה אומר שאפשר לעשות כל מה שרוצים בה.

אז איך מגנים על המרכזייה ? ובכן אתם יכולים לקרוא את המאמר הקצת טכני שלי שקישרתי למעלה, או להתחיל לנקוט בצעדים הבאים (להתחלה):

  1. כל התקשורת מ ואל המרכזייה מתבצעת רק מהרשת המקומית של הארגון.
  2. כל תקשורת יוצאת ונכנסת חייבת להיכנס דרך VPN מוצפן.
  3. ספקי SIP או VoIP חיצוניים צריכים להיות מאושרים לגשת למרכזייה ברמת ה IP שלהם ורק לפורטים הספציפיים שהם עבור SIP: פורט 5060 ועבור תעבורת המידע של RTP ו SDP בטווח של 10,000 עד 20,000 פורטים. שיטת התקשורת היא UDP.
  4. בתוך הארגון אפשרו למרכזייה להיות ברשת משל עצמה (VLAN) ותגבילו גישה רק לMac Address ידוע של טלפונים מורשים בנוסף לכתובות IP סטטיות מוקצות מראש עבור כל טלפון וטלפון.

צעדים אלו כהתחלה יספקו עבורכם יכולות להגן טוב יותר על המרכזייה בארגון. חשוב להבין שאלו לא כל הצעדים שצריך לנקוט בהם, אבל אם תנקטו בהם, אתם חוסכים לעצמכם הרבה כאב ראש, ועוד יותר: הרבה מאוד כסף.

כמו כן, תוכלו למצוא עוד יעוץ בנושא אצלי בעסק.

תכנות ללא בדיקות

בד"כ אנחנו רואים תכנות כדבר אבסולוטי, כלומר מצב מסויים יתקיים או לא יתקיים וכאשר הוא מתקיים יש כמה סיבות מוגדרות וכאשר הוא לא מתקיים יש כמה סיבות מוגדרות, ולכן אפשר להערך תמיד לאותם המצבים. ולהשאיר את הגורם האנושי לאנשי QA שיבדקו מצבים שאולי לא חשבנו עליהם.

הבעיה היא שלמרות שב90 אחוז מסוגי הפיתוח הקיימים בעולם, המצב הזה נכון, יש בערך 10 אחוז (שגם הם מתחלקים בניהם) אשר הכלל הזה לא תקף אליהם, ומרבית הפיתוח שלי למשל נמצא ב10% האלו.

למי שאינו יודע, ההתמחות שלי היא פיתוח אפליקציות עבור מרכזיית ה Asterisk. המרכזייה היא מרכזיית קוד פתוח, מאוד גמישה אשר מאפשרת לי ליצור לה הרחבות אשר אינן קיימות בברירת מחדל. ההרחבות יכולות להיות ממש הרחבות למרכזייה, או שימוש בשפת המרכזייה ושפות תכנות נוספות בשביל להתמודד עם המרכזייה על כל דבר שנדרש. לכן המרכזייה, למרות שבמקור נכתבה להיות מרכזייה משרדית, היא נחשבת יותר לפלטפורמה עבור טלפוניה ולא רק מרכזייה במובן ה"רגיל" של המילה, שזה לרכז ו"להחליט" מה קורה ואיך בכל מצב. להמשיך לקרוא

FreePBX != Asterisk וטלפון ספציפי לא מייצג את יכולות המרכזייה !

אחד הדברים המעצבנים ביותר שאני חווה הרבה מאוד הוא שאנשים לוקחים משהו מסויים והופכים אותו לכלל שלא יכול להשתנות, גם אם הכלל שהם לקחו הוא דווקא היוצא מן הכלל.

זה קורה לי עם ניסיון להסביר כי פריימוורק מסויים הוא לא השפה עצמה, וזה קורה לי עם אסטריסק ו FreePBX.

FreePBX הוא סוג של פרייוורק היושב על אסטריסק ומשתלט על כל חלקה טובה בשביל לתת גישה כמו שהוא חושב שצריך לספק, ואם זה לא גרוע מספיק, אז הוא גם מספיק נפוץ בשביל שהשיטה שהוא עושה דברים נחשבת לצורה של מה שאסטריסק בעצם מסוגל לעשות.

כלומר אם FreePBX החליט ששיחה שלא נענתה תתנתק (כדוגמא), אז כולם יחשבו שאסטריסק לא מסוגל לטפל בשיחה שאין לה מענה, למרות שזה לא המצב.

למשל השבוע תקפו אותי על כך שאסטריסק לא תומך בלהעביר שיחות אל שלוחה אחרת כאשר שלוחה זו נמצאת בשיחה. בגלל שהוא לא מסוגל לעשות את זה, אז השיחה מתנתקת. ניסיתי להסביר לאותו אדם "טכני" כי מדובר בהתנהגות תקינה לפעולה שנקראת Blind Transfer היות וכמו שהשם מרמז, אסטריסק פשוט מעביר את השיחה הלאה. יש לו עוד דרכים להעביר שיחות כמובן, אבל כשאתה בוחר בכלי הלא מתאים, מדוע אתה מגיע בטענות אל המרכזייה במקום להשתמש בכלי המתאים ?

באסטריסק יש הרבה דרכים להעביר שיחות מערוץ אחד לשני (זה מה שפעולת Transfer עושה בסופו של דבר), אבל אם בחרת בגישה מסויימת שהיא לא מתאימה לך, מדוע אתה מתעקש להתלונן במקום לשנות את השיטה ? למשל אני יכול לכתוב תוכנית באמצעות AMI אשר תבדוק האם ערוץ מסויים למעלה או לא, ובהתאם לזה תעביר לערוץ ערוץ אחר. אני יכול להשתמש בשיטות ה"רגילות" של אסטריסק להעברה, או להשתמש בfeature codes להגדיר בדיוק את זה. הרעיון ש"כל מרכזייה לא מאפשרת להעביר שיחה אם שלוחה תפוסה" היא גישה שגויה מהיסוד שלה, היות ושאר המרכזיות לא ניתנות לתכנות. אסטריסק היא סוג של פריימוורק משל עצמו עבור ניהול שיחות טלפון במשרד (בגלל זה המרכזייה מוגדרת כ PBX בניגוד למרכזיות אשר לא נועדו להיות במשרד).

זו הסיבה שהיא גם מסובכת מאוד לאדם הפשוט לתכנות. בגלל שהיא לא מוצר שלם, אלא בסיס למוצר, אותו ניתן לתכנת כמעט ב100%. אם לא מעוניינים לעבוד עם FreePBX (או Elastix אשר משתמשת בו), זה בסדר. יש עוד סביבות שונות, אבל בין זה לבין לתקוף מוצר כי לא מבינים אותו המרחק הוא עצום.

אני מטיף כל כך הרבה שנם שצריך ללמוד כלים ומה השימוש שלהם, אבל משום מה רוב האנשים אינם מוכנים בכלל להגיע למצב הזה. הם רק רוצים שזה "יעבוד". הרי גם ווינדוז לא באמת "רק עובד", גם הוא דורש התקנה והגדרות תואמות בשביל שהוא "רק יעבוד". והוא נחשב לידידותי משום מה (לא בעיני), אז מה נגיד על כלי שנבנה מראש להיות מותאם אישית ?

אבטחת מידע באסטריסק (ובכלל במערכות VoIP)

ניר סמיונוביץ' מנכ"ל חברת GreenfieldTech התראיין לאבי ויס מ The com על אבטחת מידע בכל הנוגע לאסטריסק ושירותי VoIP. ניר מדבר על אסטריסק היות וזו המרכזייה איתה הוא מתעסק קרוב לעשור, אך מרבית הדברים שהוא כתב, דווקא תקפים לכל מערכות הטלפוניה בכלל, ה VoIP בפרט, לינוקס ומערכות מחשב בכלל, כמו שניסיתי להציג במאמר ב Digital Whispers .

אינני הולך להיכנס למה שנאמר בכתבה, בלי דבר ראשון להגיד בצורה גלויה כי אני מכיר את ניר, ושמח להגיד שהוא חבר, ואני מאמין לכך שהרבה מהדברים באמת הוצאו מהקשרם בזכות הכירותי עם ניר מזה מספר שנים. להמשיך לקרוא

איכות מול מחיר

אחת הבעיות הקשות במדינת ישראל מבחינת עסקים היא שקהל העסקים חושב לטווח הקרוב מידי באמצעות הכיס בלבד ללא חזון של 5 ואפילו לפעמים 10 שנים קדימה (גם בתחום המדיני, את האמת ולא רק העסקי). יש בשוק החופשי בישראל הרבה עסקים אשר מעוניינים לשלם כל פעם מחדש 100 ש"ח על מכשיר מסויים 100 פעמים בגלל שהמכשיר מתקלקל וכבר אין אחריות, מאשר לקנות בפעם אחת מכשיר איכותי וטוב ב$200. אז כן, $200 קצת יותר יקר מ 100 ש"ח, אבל לקנות 100 פעמים את אותו מכשיר במקום פעם אחת, עולה הרבה יותר. למעשה 100 פעמים לקנות מחדש מכשיר מסויים שעולה 100 ש"ח יגרום לכם להשקיע 10,000 ש"ח סה"כ, בעוד ש$200 יגרום לכם להוציא (לפחות בזמן כתיבת פוסט זה) רק 760 ש"ח. אז אולי ההוצעה של ה10,000 ש"ח תהיה ב5 שנים, אבל תארו לכם שבמקום לשלם את הסכום הזה ב5 שנים, תשלמו רק 760 ש"ח פעם אחת ? יותר מזה, מה עם זמן העבודה שירד עד שתקבלו תחליף ? למעשה יש תשלום של למעלה מ10,000 ש"ח אחרי ה5 שנים במבט שהוא יותר ממוקד כאשר מחשיבים את הפגיעה בעבודה עצמה ואת המחיר של זה.

התאור כאן נותן רק תחושה קטנה של הבעיה אבל הבעיה הזו הרבה יותר חמורה ממה שהיא נשמעת. למשל כאשר הרבה אתרי אינטרנט נפרצים כי לוקחים אנשים פחות מקצועיים לבצע את העבודה, המחיר בצורה מיידית קופץ לשמים בעקבות החדירה. כי לא רק שצריך לסתום את הפרצות, אלא צריך בהמון מקרים להתקין מחדש את כל המערכות שניזוקו כי קשה לדעת במה השתמשו התוקפים בשביל לפרוץ, או מה היקף השינויים שלהם בתוך השרת לאחר שהם חדרו.

למשל כאשר אני מנסה למכור מרכזיות אסטריסק (העלות היא החומרה והעבודה שלי בלבד), אנשים לא רוצים לשלם הרבה כסף כי אפשר ללכת לחנות "רגילה" ולקנות מרכזייה באיזה 500-900 ש"ח במקום ב $1000. ההבדל הוא שהמרכזיות ב900 ש"ח אינן גמישות בכלל, ומותאמות למצב הנוכחי שלך בלבד. כל שינוי הכי קטן מהמצב הזה, והכסף שלך מתחיל לנזול בלי הפסקה, דבר שאצלי לא קורה. העסקים אינם חושבים קדימה כאשר מדובר במרכזייה, למרות שמרכזייה זה לא כלי שמחליפים אחת לחצי שנה, אלא כלי שאמור להיות שם לשנים, אז צריך לתכנן קדימה בקשר לגידול ולשינוי צורות עבודה (נגיד מחר מקימים call center של 5 אנשי מכירות דבר שלא היה לפני חצי שנה בכלל על הפרק, אבל יש צורך פתאומי לזה אחרי שהמנכ"ל ו3 משקיעים החליטו בכך ושכנעו את כל הוועד של החברה להקים את זה), מה קורה עם המרכזיות ה"זולות" האלו אז ? אז פתאום המרכזייה כבר לא מתאימה וצריך לקנות מרכזייה חדשה, רק הפעם במקום 900 ש"ח צריך לרכוש מרכזייה "זולה" ב$2000. אם היו משקיעים באסטריסק למשל, שמראש קצת יקרה יותר, ההשקעה היתה "חד פעמית" (למעט דברים ספציפיים). היות והמחיר הולך על חומרה אמינה וטובה, בעוד שהתוכנה מאפשרת לכם להתרחב עד שכמות הזיכרון RAM, מקום הדיסק הקשיח והמעבד של המרכזייה אינם מספיקים יותר לעבודה שלכם, אבל אם לקחתם אנשים כמוני, או עשיתם מחקר לבד ובחרתם בחומרה לטווח ארוך זה לא יקרה מאוד מהר.

לפעמים מחיר גבוה בהתחלה הוא גבוה רק בהתחלה, ובטווח היחסית קצר מחזיר את עצמו כאשר המחיר הזול הופך להיות יקר פתאום.

בעיית אבטחה לוגית באסטריסק

התגלתה לאחרונה בעיית אבטחה מאוד מעניינת באסטריסק. בניגוד לבעיות "רגילות" של קוד, כאן מדובר בבעיה של לוגיקה אשר יכולה לגרום לבעיה מאוד קשה.

הבעיה היא מאוד פשוטה לתאור, ומאוד לא פשוטה לפתרון.

במידה ויש לי בתכנית החיוג דבר כזה:

exten => _X.,n,Dial(SIP/${EXTEN})

אז אני יכול להזריק למשתנה EXTEN ערכים שאני רוצה שהוא יכיל, לדוגמא (איך זה יראה אחרי תרגום המשתנה):

exten => _X.,n,Dial(SIP/123@context&SIP/0123456789@anothercontext&DAHADI/g1/03123456789@anothercontext)

ואז במקום שהתכנית תחייג רק ל 123 בפרוטוקול SIP היא תחייג גם ל SIP עם המספר 123456789 וגם תצא לכרטיס טלפוניה בקבוצה 1 עם המספר 03123456789 ובכך הזרקנו עוד מספרים לחיוג.

אבל זה לא הכול, אפשר להזריק כל דבר שרוצים, כך שאפשר לתת הרשאות או הגדרות ל Dial אשר המשתמש הרגיל לא צריך לבצע.

אז למה לא פשוט לטפל בבעיה ? ובכן במידה ויש לנו אורך מספרים קבוע שאנחנו רוצים לחייג אז אין בעיה. במידה ואנחנו רוצים להרשות רק למספרים ספציפיים לחייג, גם אין בעיה. אבל כאשר צריכים יותר גמישות מזה, נגיד ב SIP חיוג ל"מספרים" שהם אותיות, או תוכנית חיוג ללא תלות בפרוטוקול התקשורת, אז מתחילים הבעיות.

כמו כן, לא בכל מדינה/סוג שירות יש אורך קבוע של ספרות. יש ארצות בהם האורך משתנה, ולכן אי אפשר לתת מענה הולם, לבעיה.

לדעתי (ולדעת מוצא הבעיה), אסטריסק צריך תווי Patterns גם לתווים מורשים, או רק למספרים מכאן והלאה ובכך ניתן יהיה להגדיר במקום נקודה (שאומרת כל ה"מספר" מכאן והלאה) יהיה אפשר להגיד חוקים ברורים בהם רק כאשר התווים המורשים באמת יעברו בעוד שהאחרים לא.

יש כמה דרכים כרגע להתמודד כבר עכשיו עם הבעיה, כדוגמת השימוש ב FILTER כמומלץ בפוסט שאליו קישרתי למעלה שלדעתי האישית הפתרון הטוב והקל ביותר לביצוע בשלב זה.

ההודעה המקורית ברשימת הדיוור.

מידע על אסטריסק

הבלוג הנוסף שפרסמתי על אסטריסק נועד בעיקר להיות בלוג לעסק שלי.

מידי פעם אני אצור פוסטים שאני חושב שיעניינו גם את האנשים הקוראים את Planet ואקשר אותם כאן לבלוג זה.

כתבתי פוסט בעקבות בקשה של ניצן על מידע (בעיקר כללי) אודות אסטריסק שאולי יעניין גם אתכם, אז במידה ואתם לא קוראים את הבלוג החדש שלי, אתם עדיין מוזמנים להנות ממה שכתבתי בכתובת הבאה.

בלוג שלי לאסטריסק

פתחתי בלוג מיוחד עבור אסטריסק באתר של Asterisk.org.il, ואתם מוזמנם לגלוש גם אליו במידה ואתם מעוניינים לקרוא קצת על אסטריסק.

כתובת הבלוג היא:

http://linesip.blogs.asterisk.org.il

הבלוגים של קהילת אסטריסק בישראל

האתר Asterisk.org.il המנוהל ע"י ניר סימיוניביץ', פתח מערכת בלוגים לכל האנשים המעוניינים לכתוב בלוגים אודות Asterisk בישראל.

המערכת בלוגים מבוססת WordPress MU לניהול של משתמשים מרובים.

במידה ואתם רוצים לכתוב על ניסונכם ועבודתכם עם Asterisk, זה המקום הכי טוב להתחיל.

לקוח לא מרוצה ?!

לאחרונה אני נתקל בבעיה מאוד מוזרה עם לקוח.

יש לי לקוח שמכרתי לו לפני חודשיים שעון נוכחות מעל מרכזיית אסטריסק. השעון נוכחות בגדול מאוד מזהה את המספר טלפון שלך (כלומר אם מותר להתחבר אל המרכזייה עם המספר טלפון -> כלומר חובה שתהיה שיחה מזוהה), מאפשר להזין תעודת זהות, מיקום ופעולה של או כניסה או יציאה. כאשר כל הפעולה מסתיימת, המערכת שולחת את המידע לתוכנה של הלקוח באמצעות SOAP.

זה ממש בגדול בלי להיכנס להרבה פרטים מה שהשעון נוכחות שלי עושה. לאחרונה נוצר מצב ממש מוזר. עם השעון נוכחות הזה.

אם נוריד כרגע בעיות שיש עם אחת מספקיות ה DID בארץ שיוצרות בעיות משל עצמן (שליחת codec לא נכון למרות שאסטריסק אמר להם שהוא יודע להתעסק עם codec אחר לגמרי למשל), הלקוח לא מרוצה מהתוצר, אבל אני לא מצליח להבין למה. להמשיך לקרוא

מי מפחד מהקוד הפתוח ?

רובכם יודעים שאני מנסה להיות עצמאי וליצור פתרונות מעל Asterisk.

למי שלא יודע, Asterisk היא מרכזיית טלפוניה הכתובה בשפת C ומשוחררת ב GPL. החברה שמפתחת (בעיקר) את Asterisk היא חברה בשם Digium.

עד כאן סביר להניח שאני לא מחדש שום דבר כמעט לאף אחד.

בישראל (אני לא יודע לגבי שאר העולם), יש הרבה חברות ועסקים הבוחרים ב Asterisk רק בגלל המחיר (קוד פתוח -> "חינם"). כמובן שהם בטוחים שזו הסיבה היחידה להשתמש בAsterisk ולא במרכזייה אחרת.

כאשר מדובר בחברות המספקות את התמיכה ב Asterisk, אנחנו נתקלים בהרבה פתרונות מעניינם, אשר חלקם משנים או מוסיפים לקוד הAsterisk דברים, אך כאשר מגיעה הנקודה לשחרר את הקוד, פתאום זה הופך להיות סוד מסחרי.

הרי לקחת את ה CDR של השיחה, להוסיף לו שדות פרטיים וכו', זה דבר שכל מי שמכיר Asterisk ברמת תכנות יכול לעשות. ליצור ממשק לזה ? תנו לי רבע יום עבודה ותקבלו לוג מוכן ומעוצב בתור דף HTML.

תמיכה לכך שהמרכזייה תדבר בעברית תקנית ? למה לתרום שכולם יהנו, אם אפשר לגבות על זה מחיר מופקע ?!

אז גם את זה עשינו (ניר ואנוכי התחלנו בגיור אסטריסק והקוד נמצא חזרה ב svn, כאשר שנינו הקדשנו יום עבודה שלם בשביל הקוד הפתוח). אני לא מבין למה כולם חושבים שהם יכולים לחלוב את הקוד הפתוח וכאשר מגיע הזמן להחזיר חזרה, אז פתאום "סוד מסחרי" או תירוץ זה או אחר נכנס בתור תירוץ.

הקוד הפתוח הוא לא נגד מכירת הקוד, אלא הוא בכך שהקוד יהיה זמין לכולם ! הרי כשאתם קונים פטיש, אתם לא רואים מישהו מגן על הפטיש, רק יש מיתוג טוב יותר של חברה זו או אחרת למוצרים בשביל שתבחרו בהם…

כיצד להתקין מרכזיית Asterisk על לינוקס

נתקלתי במאמר הבא שמסביר ומראה כמה פשוט להתקין מרכזיית אסטריסק על גבי לינוקס (במקרה הזה אובונטו).

לפני שתקראו אותו (במידה ותרצו כמובן), כמה נקודות חשובות שמקריאה מהירה של המאמר לא נאמר שם (אבל יכול להיות שסתם פיספסתי כי לא התעמקתי בכתוב):

  1. כאשר מתקינים שרת שהתפקיד שלו לבצע משהו ספציפי, רצוי שכמה שפחות דברים יותקנו עליו בשביל שה"אנרגייה" תלך לכיוון הדברים שכן רוצים שהשרת יעשה, כך שמערכת גרפית בד"כ מיותרת לחלוטין, וכן 3/4 מהדברים שמותקנים בדרך קבע על הפצת Desktop. זו הסיבה שלדעתי צריך להעדיף דביאן על פני אובונטו לשרתים.
  2. חייבים לוודא שהחומרה שלכם נתמכת כמו שצריך ע"י הגרעין של לינוקס,
  3. במידה ותרצו תמיכה ב PRI/FXO יש לוודא שהכרטיסים שלכם נתמכים ע"י zaptel. במידה וקניתם חומרה ממקור לא ידוע, אז יש סיכוי שהם לא יתמכו.

ישנם עוד נקודות, אבל אלו הדברים החשובים באמת שיש לשים לב אליהם. בהצלחה !

אסטריסק 1.2 מול 1.4

יש לי תוכנת click2call שכתבתי קרוב לשנתיים. באותו הזמן גרסת 1.2 של אסטריסק היתה פעילה, בעוד שגרסה 1.4 עוד לא יצאה אפילו (היא עדיין היתה בבטא).

החודש התקנתי שרת חמישי ללקוח שלי עם אותה מערכת, רק הפעם הלכתי על גרסה 1.4. כל תת גרסה של Asterisk (כלומר 0, 2, 4 ו6) מכילים שינויים מאוד גדולים לכל דבר. מהמבנה של ה cli בהם רשימת הפקודות משנה את המיקום שלה (דווקא הדרך הזו נראת יותר טוב ממה שזה נשמע, הם מאחדים חוקים של איך למצוא פקודות, במקום שכל מודול יספק מסלול שונה לפקודות), דרך ה Manager וכמובן ה Dailplan.

הבעיה התחילה כאשר ניסיתי להשתמש ב Dailplan של מערכת ה Click2Call שכתבתי עם גרסת 1.4. איך שניסיתי להוציא שיחה, הוא הגיע לי מייד ל DeadAGI בלי להגיע בכלל לDail. בהתחלה לא הבנתי מה קרה, ניסיתי לקרוא לוגים שונים, קראתי את המסך של אסטריסק. ועל פניו שום דבר לא נראה בעייתי.

ואז התחלתי לשים לב לDumpChan ול NoOp שהכנסתי במקור ל Dailplan בעקבות בעיות שהיו לי עם PRI של חברת HOT. אחת מהתוספות שהכנסתי ל NoOp היתה TIMESTAMP על כל פעולה שאני עושה בDailplan, ובעצם ראיתי שהTIMESTAMP לא חוזר. אז עכשיו הלכתי להסתכל על התיעוד של המשתנים, והסתבר שהמשתנה {TIMESTAMP}$ מוגדר כ deprecated. עכשיו התחלתי לבדוק עוד כמה פקודות, שראיתי כי הן לא מתבצעות, וגיליתי פקודה שב1.4 כבר לא בשימוש, למרות שב 1.2 היא לא סומנה כ Deprecated כאשר עבדתי על ה dailplan.
אחרי שבדקתי את כל הפקודות בהם אני משתמש, הצלחתי לגרום לתוכנית שלי לחזור ולעבוד, 30 דקות אחרי שהתחלתי את הנושא.

עוד שבת של התעללות עצמית

אני לא יודע אם זה המשקה הנוסף שהזמנתי אתמול (למעשה היום לפנות בוקר) בפאב (לשם שינוי לא נהגתי, אז יכולתי להזמין אלכוהול), או שאני ממש נהנה מזה בתת מודע שלי, אבל כמו שסיפרתי לפני שבוע, אני מתכנת בC ספרייה לאסטריסק. וכמו שאתם בטוח יודעים, אני וC לא אוהבים אחד את השני, והגעתי להבנה (שאני בטוח שאנשים ינסו להסביר לי שאני טועה), כי מי שמתכנת בשפה הזו, בטח השתבש לו משהו בראש, או לפחות עדיין לא מבין את הבדיחה…

C מסובכת יתר על המידה, ולא בגלל שהיא "טובה" יותר, הרי כל מה שאתם מסוגלים להפיק מהשפה הזו, אני מסוגל להפיק משפות עם אותם יכולות low level, אבל שלא דורשות ממני את כמות האנרגייה המטורפת לעשות דברים כל כך "פשוטים", מה שאומר שבד"כ אתם סתם מבזבזים את הזמן שלכם בפיתוח, שיכולתם להשקיע בתיקון באגים, והוספת תוכנות חדשות…

כרגע אני כבר שבוע שני (לפחות שבת שנייה) שמנסה לגרום ל inotify לעבוד. לוקח לי כל כך הרבה זמן וארנגיה לעשות משהו כל כך פשוט, שזה פשוט לא הגיוני. אני חושב שהסיבה לזה, היא שאני פשוט לא חושב בשפה הזו, מה שאומר שקשה לי לתכנן את עצמי כמו שצריך, עוד מבלי לדבר על זה שאני מטריד את שלומי פיש בשאלות לגבי שפת C כמו איך משתמשים בערך של המצביע (היי אני לא זוכר איך עושים דברים כאלו, כי בד"כ אין לי צורך לזכור לעשות דברים כאלו בתחביר דמוי C, בכלל אני מזכיר לכם שפרמטר בתור מצביע זה hack להחזיר ערך לפי כתובת, כי C לא תומכת בדבר כזה).

אז אל תתאגו, את הספרייה אני אשחרר ב GPL/LGPL (עוד לא החלטתי) ואין לי כוונה לבקש לכלול את הספרייה בתור חלק מ אסטריסק עצמו…

והכי חשוב, אני לא רוצה לפגוע באף אחד, גם אם אתם מוצאים את C בתור השפה הכי טובה עבורכם.

כשחייבים להשתמש בשפת תכנות ספציפית

אני מנסה לבנות מודול עבור Asterisk, ומה לעשות, מארק מאוד אוהב את שפת C כמו שהוא אמר לנו לפני קצת יתר משנה, אז הוא כתב את המרכזייה בשפת C.

כרגע כמה אנשים אומרים "נו הוא עוד פעם מתחיל, מה הוא לא מבין שהעולם מדבר ב C ?"

אז הנה קוד שכתבתי בשביל לעשות כמה נסיונות עם inotify:
להמשיך לקרוא

Asterisk 1.6

חברת Digium שחררהלפני יומיים גרסת בדיקה לAsterisk בגרסה 1.6.

הגרסה החדשה מציגה הרבה תיקונים והרבה תוספות לגרסה 1.4, אשר טעימה קטנה מהם פרסמתי היום באתר הישראלי Asterisk.org.il.

חידושים שניתן למצוא הם:

    ניסיון לזיהוי קולי (משהו מתנדב לגרום לו לזהות עברית ?),

    הרחבות ושינויים ל תוכנית החיוג,

    תוספות AEL (שפה דמויית C אשר ניתן ליצור בה תוכניות חיוג גמישות יותר ללא שימוש ב AGI),

    תמיכה בשפת LUA שניתן להשתמש בה במקום AEL.

    תוספות למוזיקת ההמתנה

    שינויים לחדר הדיונים MeetMe

    שיפורים לתמיכה ב IAX וSIP.

    שיפור של תמיכה בתורים

והרשימה כמובן ממשיכה ואתם יכולים לקרוא אותה כאן.

אני מקווה כי גם התוספות של העברית וכמה מהשינויים של צפריר (נראה שהאתר שלו לא פעילף או לפחות לי יש בעיה לפתוח אותו) גם הם יכנסו לגרסה 1.6 היציבה.

ככה לא בונים פרוייקט

ישנו פרוייקט וותיק בשם Asterisk2Billing. הפרוייקט נותן יכולת לתת לי למכור ללקוחות Trunks (אני מחפש מילה עברית במקום) למשל של SIP ו IAX2 (בעוד שהחדק [? נכון לא נשמע טוב ?] גם נותן אפשרות לצאת באמצעות zap, קרי – קו טלפון "רגיל" כדוגמת FXO או PRI).

הפרוייקט כמובן הוא קוד פתוח, וכתוב בעיקר בPHP וAGI. הבעיה שלו שהוא מפוצץ מצד אחד בהרבה אפשרויות שבד"כ לא מעניינות את כולם, ומצד שני, יש מחסור בדברים שדווקא יש בהם צורך.

אז אני רואה מה תגידו, "זה קוד פתוח, כנס לקוד ותשנה בהתאם". יודעים מה ? לא רק שזה לא כזה פשוט, זה גם לא כידאי.

זה מתחיל בדברים ה"קטנים" כדוגמת פונקצית הסניטציה
וממשיך בזה שהקוד מבוזר ומשוכפל בכמה וכמה ספריות, ולי אישית לקח קרוב לשבועיים ללמוד איך ומה לחפש בשביל למצוא, ועדיין רב הנסתר מהגלוי.

אז עם כל הכבוד לקוד פתוח, ככה לא בונים פרוייקט.

יש לכם הודעה חדשה אחת

ניר ואני ביצענו אתמול במרתון עברות (מלשון עברית) של Asterisk, כך שידבר בצורה תקנית. התחלנו אתמול באחת בצהריים, ואני הפסקתי בשמונה בערב, גם בשביל לעשות עוד כמה עבודות בAsterisk שהייתי חייב.

עבר זמן רב מאז שכתבתי בשפת C דברים רציניים, אבל הצלחתי להשתלט על העניינים.

את ההקלטות, תורם לנו אדם יקר בשם נועם אבירם, שבמידה ואתם לא מכירים אותו, אז הוא הקול מאחורי הרבה תשדירים, IVR וגם שידורי טלויזיה.

את מה שעשינו אתמול, נמשיך לפתח, ובהמשך תוכלו למצוא בסופו של דבר בגרסה הרשמית של Asterisk.

אז כנראה שבקרוב, תוכלו להנות ממרכזייה אמריקאית דוברת עברית תקנית, שנעשתה תחת רישיון של קוד פתוח.

עושר ויושר

טלפון: "עידו ?"
אני: "כן"
טלפון: "שלום, הבנתי שאתה מתעסק עם Asterisk זה נכון ?"
אני: "כן, אני מתעסק בזה בתור עצמאי כיום."

טלפון: "יפה, אני משתמש במרכזייה, ואני מעוניין להקליט שיחות, עכשיו אמרו לי שזה מאוד מסובך לגרום לכל צד להיות מסונכרן בשיחה"
אני: "לא ממש, אתה לא מתעסק בסנכרון, זו רמה נמוכה מידי"
טלפון: "אוקי, אני מעוניין להזמין מערכת …."

כמה דברים שאני לא מבין… אנשים רוצים להרוויח כל כך הרבה כסף, שהם מוכנים לשקר או לנפח כל דבר, ושוכחים שכל מידע שאתה נותן ניתן לבדוק. לא יותר קל פשוט להגיד את האמת ?!
גם אם מחר תפסידו קצת בגלל היושר שלכם, בטווח הרחוק אתם רק תרוויחו, אז יאללה מספיק !

כאשר שפת התכנות מהירה מידי למערכת

לפני כמה חודשים ניסיתי לכתוב מערכת של Progressive Dialer למערכת Asterisk. המערכת התממשקה עם מערכת click2call שבניתי, ובעצם היתה אמורה להוציא שיחה לנציג וללקוח כאשר הנציג מתפנה.

המערכות עצמן היו כתובות בין היתר גם בג'אווה. הבעיה היתה, שגם השרת click2call וגם השרת של הprogressive dialer שניהם היו מהירים מידי מול התגובות (Signals) של Asterisk. בעיה זו גרמה בין היתר לכמה התנהגויות ממש לא צפויות לרעה.
להמשיך לקרוא

מתי לא לבחור מערכת קוד סגור

יש לי לקוח שכמעט כל התקשורת בנינו נעשת כאשר שנינו מאחורי מחשב. אז במקום לקבל עלות גבוהה של שיחות בטלפון הסלולרי, הוא ביקש ממני לעבוד עם Skype.

אם אתם בטעות לא יודעים מהו Skype, אני חייב לציין כי אתם לא באמת מפסידים הרבה. הסיבה היא כזו: התוכנה היא תוכנה קניינית וגם הפרוטוקול בו היא משתמשת הוא פנימי של החברה ולא פתוח כלפי אחרים (אלא אם עושים הינדוס לאחור).

בכל מקרה, אני עובד עם קובונטו 7.04 בסביבת 64 סיביות. Skype מגיע רק ב32 סיביות דבר שגורם לכך שצריך לשחק קצת עם המערכת בשביל לגרום לו לעבוד, כל עוד כל החבילות שזקוקה התוכנה קיימות. זו ד"א הסיבה שאני לא יכול לשדרג לגרסה חדשה יותר של סקייפ הדורשת ספריות אשר אין להם גרסת הספריות איתם אני יכול להשתמש.

בכל מקרה, אתמול היתה "תקלה". משום מה התוכנה החליטה שהיא לא יכולה לעובד עם המקרופון שלי. כמובן שהלקוח האשים את הלינוקס. אז ניסיתי עם כמה תוכנות אחרות לדבר עם המקרופון והצלחתי להקליט את עצמי, אבל Skype עדיין טוענת שיש תקלה עם המיקרופון, ולי אין מה לעשות בנידון.

למי שאינו יודע, יש פתרונות טובים יותר כדוגמת Asterisk אשר יתן לי את היכולת לדבר ב VoIP. הפתרון גם דורש Softphone – כלומר טלפון תוכנה. הכול מגיע עם רשיונות קוד פתוח.
אני חושב שSkype הוכיחה פעם נוספת כי לא ניתן באמת לסמוך על השירות שהיא נותנת כאשר מדובר בעולם העסקי, והגיע הזמן לעבור לשירותים טובים יותר מזה.

VON 2007 ישראל

ביום ראשון הקרוב ה14 לחודש יתקיים בקרית שדה התעופה אשר מוכרת לנו גם בשם Airport city אירוע בין לאומי לתקשורת וטלפוניה הנקרא VON.

בVON מציגים טכנולוגיות VoIP למינהם בנוסף להרצאות וכו'..

כמו בכל שנה, גם השנה ג'ף פולבר ישתתף בכנס.

מי שאינו מכיר את ג'ף, מוזמן לקרוא עליו.

סיכום יום כיפור

יום שישי התחיל רע. בערך מהצהריים, משהו כמו שעתיים אחרי שHOT דיברו איתי ורצו לדעת מה אני חושב על השירות שלהם, היתה נפילה בתקשורת האינטרנט. וככה מ12 בצהריים בערך ועד 4 אחה"צ לא היה לי חיבור אינטרנט. בזמן לאחר מכן, שוב הבעייה חזרה וגם הפעם זה היה עניין של שעות, עד היום בסביבות 3 וחצי אחה"צ.
דבר זה די הסיר ממני את היכולת לתקן באגים שמצאתי בביצוע ה AGI שעשיתי. היות והאתר voip-info.org שהוא המקור למידע היחיד לא היה זמין מן הסתם. וככה במקום שהיום lnet תהיה עם ביצוע די נחמד של AGI, וביצוע שאני ממש לא אוהב של FastAGI, נשארתי די תקוע, ורק באגים של בעיות שלא דרשו דוקומנטציה נפתרו.

אז ניגשתי בנתיים לנסות את הספרייה sndfile, בשביל ללמוד כיצד עובדים איתה. הבעיה היא שמהר מאוד גיליתי כי התרגום שיש לFPC מאוד ישן, ומרבית הפקודות API כבר לא קיימות יותר בספרייה. ככה מצאתי את עצמי מוריד (כאשר האינטרנט חזר לכמה דקות) היום את הקוד מקור של הספרייה עם הגרסה הכי מעודכנת, ובערך ב5 אחה"צ התחלתי לבצע binding מ0 לספרייה. בערך ב10 בערב סיימתי, ושלחתי את הספרייה לאנשים הטובים של FPC, בשביל שיעדכנו את הספרייה החדשה.

כמה דברים בקשר לספרייה הזו. דבר ראשון אני רוצה להודות למני (שמאוד אוהב את ++C, ואהב לציין את העובדה שב++C זה טיפה יותר טוב) ולאורי על העזרה בתרגום ג'יבריש שאנשים קוראים לו שפת C לשפה שגם בני אדם מבינים (טוב רק חלק קטן, לא היה ברור, אבל בכל זאת).

דבר שני, אני רוצה להודות ליוצר הספרייה שגרם לי ביום כיפור להרגיש הרבה יותר חזק באמונה שלי.

האמונה היא כמובן, שפסקל פשוט עדיפה על פני C. הרי אני מצליח לעשות את אותם הדברים, רק בצורה הרבה יותר קריאה, נעימה וקלה לתחזוקה. דבר שדי מראה כי ההרגשה

שחוסר קריאות = יותר עצמה

זה שטויות.

במהלך הבוקר, גיליתי התנהגות מוזרה לLazarus, אשר מהר מאוד התגלתה כבאג (אחרי ששאלתי על ההתנהגות הזו ברשימת התפוצה). הספקתי לשלוח דוגמא איך לשחזר את הבעייה, ושלוש דקות אחרי זה התנתק לי החיבור לרשת עד 3 וחצי אחה"צ היום. כאשר חזרתי למחשב (בסביבות 4) גיליתי דוא"ל המספר לי כי זהו באג והוא כבר תוקן, ואני יכול למצוא את התיקון בSVN. מייד עדכנתי את הקבצים, והידרתי מחדש את Lazarus, ובאמת גיליתי כי הבעייה נפתרה. תודה Mattias :).

כמו כן, היה לי גם שיחה מאוד "ארוכה" עם המפתח דביאן הקורה לעצמו "ליאור קפלן". כשאר ניסיתי להבין לעומק כיצד ממקור אחד אני יכול ליצור כמה חבילות, הוא מייד שלח אותי לספריות של קובי זמיר: hocr ו libhdate 🙂 תודה ליאור…

הדבר הבא, נשמע כמו התחלה של בדיחה, ואם לא יצא מזה כלום, אז אולי זו באמת תהיה התוצאה: ברזילאי, סלובקי וישראלי מדברים על ליצור משחק … אלפרדו רוצה ליצור משחק. יש לו חבר שהציע לו לכתוב את המשחק ב ++C, כי זו השפה שרוב המשחקים בנויים בה. אז הוא שאל אותי לדעתי. ובכן עניתי לו שאם הוא מעוניין בעזרה, אני לא הבן אדם המתאים כאשר מדובר ב++C. אז היות והוא ממש לא יודע ולו דבר אחד ב++C, אבל יודע קצת דלפי (למרות שהוא משום מה מעדיף פיתון על כל דבר אחר בעולם), הוא החליט ללכת על FPC, בייחוד אחרי שהראתי לו כי SDL קיים גם לפסקל מונחה עצמים 🙂 העניין הוא שפרט לאיזה משהו מטופש שעשיתי פעם עם SDL, אין לי באמת ידע איך לעבוד איתו (למרות שזה לא כזה מסובך כמו שאני זוכר מלפני כמה שנים טובות), אז פניתי לאלס, אשר כתב משחק ממש נחמד עם FPC וSDL שיעזור, והוא הסכים. מה שיוצר את הבדיחה למעלה 🙂 עכשיו רק צריך למצוא זמן פנוי (ואין), ואולי אצליח גם לעזור לו…

כמו כן, ביומיים האחרונים הספקתי לשמוע הרבה מוזיקה, כאשר התכנון המקורי היה לעדכן כאן את הבלוג בסגנונות מוזיקה (של להקות וזמרים ז"א) שעדיין לא הוספתי, אבל כאמור HOT לא אהבו את הרעיון.

פיתוח מהיר וקל

לפני יומיים התקנתי (גם אני) את FPC 2.2.0. וכרגיל בניתי אחרי עדכון עוד גרסה של Lazarus ישירות מה svn. גרסת ה QT4 שאני לאחרונה ערכתי עליה ניסויים עדיין רחוקה מלספק לי כלי נורמלי לפיתוח (ואני באמת מצר על כך).
אז החלטתי לנסות אחרי התעלמות רבת החודשים, שוב את GTK 2 בלזרוס. חשוב לי להזכיר כי יום לפני שחרור FPC 2.2.0 ניסיתי את גרסת GKT2 של לזרוס שקרסה בזמן עליית הIDE.
אבל פתאום על אותה גרסת SVN לתדהמתי Lazarus פשוט עובדת. ועובדת די טוב יחסית לגרסה לא יציבה ולא מושלמת (וכן היא עדיין מכילה הרבה באגים).
עכשיו הצלחתי להשלים את משימת פיתוח ה FastAGI שלי (שנכון לזמן כתיבת הבלוג, נשאר לי רק להתחיל לשלוח פקודות ולקבל את התשובה חזרה). פשוט מדהים.
Lazarus, GTK2, Hebrew

לדעתי כיום Lazarus היא הסביבת פיתוח הכי מהירה ופשוטה לפתח תוכנות תחת GTK2. היות ו Lazarus "מכילה" גם את Glade וגם את הרעיון של pyGTK בייחד, זה עניין של דקות בודדות עד שתהיה לך סביבת GTK פשוטה וגרפית עם הקוד שאתה רוצה. פשוט מדהים.

שנה טובה

שהשנה הבאה אלינו לטובה, תהיה שנה פתוחה יותר, מתוקשרת יותר (בעזרת Asterisk כמובן) ומוצלחת .

שבשנה הזו נשתמש בכלים פתוחים טובים יותר, ושנתקרב לתיקון באג #1 של אובונטו בעוד כמה צעדים.

שבעברית לא יהיו שגיאות, שהקהילה תגדל, ובכלל שהקוד הפתוח יהיה הבחירה לכל סוג של קהל.

ובקיצור שתהיה שנה טובה מתוקה ומלאה כרימון.

[gv data="m4B6o_rxePM"][/gv]

ניהול קוד בלינוקס

לאחרונה יצא לי לכתוב ספריות עבודה עבור Asterisk כדוגמת ביצוע AGI ו FastAGI גם בשבילי וגם בשביל להחזיר חזרה לקהילה.

בשביל לממש את FastAGI החלטתי שבמקום לכתוב קוד ליצירה ועבודה עם Sockets בעצמי, להשתמש בספרייה קיימת. העניין הוא שזו הפעם הראשונה שבאמת השתמשתי בספרייה הזו, למרות שאני מכיר אותה ואת המפתח שלה כבר כמה שנים טובות.

העניין הוא שלקח לי קצת זמן ללמוד איך לעבוד עם הספרייה ואת החשיבה (הבאמת יפה ומושקעת) שמסתתרת מאחורי הספרייה, ובעזרת המפתח, ועם הרבה ניסוי וטעיה (מלשון טעות) הצלחתי ליצור משהו שעובד. רק אז, קלטתי משהו על הספרייה שלא הבנתי לפני כן, ופתאום ראיתי שהקוד שלי דומה יותר מידי לג'אווה, עם כמה מחלקות שאם הייתי מתכנת בג'אווה הן היו במקום, אבל היות ואני עובד בשפה נורמלית – Object Pascal אני לא זקוק להן. ואני יכול לקצר את החלוקה הזו למחלקה אחת, שתכיל בדיוק מה שצריך. הסיבה לכך היא הצורה שספריית השקעים עובדת, אשר מסייעת לכך שאני לא צריך לנהל בעצמי רשימות של חיבורים, ובקשות, וכי הספרייה עצמה מנהלת אותה. כך שהניסיון שלי ליצירת Iterators בעצם היה עודף קוד ללא צורך אמיתי.

עוד תחביר שנעשה בו שימוש, דבר שאף עוזר לנושא מעל, הינו השימוש בתחביר "class of" אשר אינו קיים בשום שפת תכנות מונחת עצמים אחרת שאני מכיר, דבר שגם הקל עלי מאוד.

אבל כרגע אני צריך לקחת קוד קיים ולהעביר אותו מ2 מחלקות קיימות למחלקה אחת (מרבית הקוד, אבל לא את כולו), אבל בשביל להצליח לעשות את המשימה, אני זקוק להשתמש בעורכי הטקסט הרגילים בלינוקס, אשר גורמים לי לקפוץ בין הרבה שורות וכו'… דבר שגורם לך לפספס הרבה דברים, ולבעיות. העניין הוא שvim למרות שהתאמתי לו את הצביעה לתחביר המתקדם של פסקל, עדיין חסרים לו כמה מילים שמורות (וזה עוד בלי לדבר על תחביר חדש יותר כדוגמת התחביר של Generics אשר אין לי מושג כרגע כיצד להוסיף ל vim). ואחרי שבוע כמעט של שגיאות ממש מטופשות (וחזרה לקוד של לפני הניסיון לשינויים), אני מחפש צורה טובה יותר לנהל את הקוד שלי, כולל אפשרות ממש טובה לצביעה של קוד פסקל מונחה עצמים מתקדם של FPC. וגם האפשרות לפצל קובץ ליותר ממקום אחד כמו שvim נותן, ושיהיה מהיר ויציב.

האם אתם מכירים עורך טקסט (ולא סביבת עבודה משולבת) בלינוקס היכול לענות על הדרישות המסובכות שלי ?

נא להכיר Asterisk מרכזייה מעולם הקוד הפתוח

ב8 חודשים האחרונים אני עובד בחברה אשר מתעסקת עם מרכזיות כאשר המרכזייה היא כמובן Asterisk – מרכזיית קוד פתוח אשר יודעת לחבר בין עולם הטלפוניה ה"רגיל" לבין עולם הקול מעל האינטרנט או בשם הנכון -> VoIP.

אני אנסה ללמד אנשים קצת על מרכזיית הקוד הפתוח Asterisk ונתחיל בכמה נתונים יבשים:

את המרכזייה פיתח אדם בשם מארק ספנסר, אשר היה לי בינואר הכבוד להיפגש עימו, וכיום החברה העיקרית מאוחורי המרכזיה הינה חברה מסחרית של מארק בשם Digium. המודל העיסקי של Digium אינו תלוי בקוד המרכזייה הפתוח, אלא בפתרונות סביב הקוד הפתוח, כדוגמת עוד תוספות למרכזייה תמורת תשלום, כרטיסי חומרה, מתאמים, מפצלים ועוד הרבה חומרה שהידע שלי עדיין לא הושלם בנושא.

להלן עוד כמה נקודות מעניינות:
ישנה חברה ישראלית שגם יוצרת חומרה עבור אסטריסק בשם Xorcome אשר שני אנשי קוד פתוח ישראלים נמצאים שם:

  1. צפריר כהן
  2. דיאגו יסטרובני

המפיצים בישראל של חברת Digium הינה החברה בה אני מסיים בחודש זה את עבודתי בשם Atelis.

ישנם עוד גופים וחברות, כמו יבואני חברת Sanguma (עוד חברה שמפתחת חומרה עבור Asterisk), אך מספיק לעשות פרסומות (אלא אם החברות ישלמו לי לעשות זאת קריצה)

המרכזייה כיום נמצאת בהרבה בתי עסק בישראל ובעולם. כל משרד מהקטן ביותר לגדול ביותר יכול לעבוד עם המרכזייה.

פרוייקט קוד פתוח ישראלי שנוצר יכול לתת אפשרות גם לבצע סינכרון בין כמה שרתי Asterisk ובעצם להגדיל את התמיכה של המרכזייה בכל סניף וסניף לניהול אחד. לפרוייקט ד"א ניתן השם BioCluster והמפתח העיקרי שלו הינו מני ליבנה.

עד כאן הנתונים, בפעם הבאה נלמד טיפה יותר לעומק אודות המרכזייה צוחק