האינטרנט של ה"דברים" – IoT , Azure ואני

9 בפברואר 2015

תגיות: , ,
תגובה אחת

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

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

עולם ה- IOT מעניין אותכם? בואו לראות את הדברים שהוצגו כאן הלכה למעשה!

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

אז מה זה בעצם IoT?

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

ניקח לצורך דוגמא את פרויקט ה IoT הפרטי שלי (כמובן שרק לאחרונה קראתי לו IoT J). במקרה שלי, מדובר ביכולת להפעיל התקני חשמל כגון תאורה, תריסים, דוד חשמלי וכו' באמצעות אפליקציה בטלפון הסלולרי, וכן לנטר את הפעילות של ההתקנים השונים באמצעות שירות ענני. רשת החשמל החכמה אצלי בבית מתקשרת באמצעות פרוטוקול הנקרא Instabus. זהו פרוטוקול סטנדרטי מבוסס מעבר חבילות על רשת דו-גידית, פרוטוקול המזכיר את הפרוטוקול התעשייתי Can bus. על מנת לשלוט על ההתקנים מרשת האינטרנט, בניתי שרת מקומי המשמש כדלת אל העולם החיצון. כאשר אני רוצה להדליק את האור בסלון, הפנייה מהמכשיר הסלולרי שלי מגיעה אל שרת ה Gateway, שיודע לבצע קריאה בפרוטוקול ה Instabus אל כתובת ה Instabus של התקן הקצה – האקטואטור שמדליק את האור.

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

· הרבה התקני קצה שונים

· שרת Gateway מקומי

· אוסף של שירותים שונים שרצים בענן ומאפשרים:

o ניהול רישום של התקני קצה

o יכולת של שירותי ענן לספק שירות בפרוטוקולים מגוונים

o יכולת לאסוף מידע רב בקצבים גבוהים – Event Hub, Big Data, Storage

o יכולת ניתוח מהירה של זרם מידע והפקת מידע בזמן אמת – Stream Analytics

o יכולת ניתוח על מידע רב שנאסף – Big Data, Map-Reduce, Machine Learning

התקני קצה

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

1. Arduino

2. Raspberry Pi

3. Intel Galileo & Edison

4. Tessel

5. Netduino

6. Spark Photon & Core

ברוב המקרים מדובר על התקנים מבוססי מערכת על צ'יפ (SoC), מבוססי מעבדי ARM 8 ביט, אולם חלק מההתקנים החדשים יותר מכילים מעבד 32 ביט עם זיכרון רחב יותר כגון האינטל גלילאו 2 שמבוסס על מעבד Quark™ בטכנולוגית פנטיום.

משפחת הארדואינו, חומרה בקוד פתוח, קיימת כבר מעל עשר שנים והיא משמשת לפיתוח התקנים אלקטרונים פשוטים לחובבים או כבסיס לאב טיפוס. ניתן להשתמש בכרטיסים שונים בעלי חיבוריות אטרנט, או בכרטיס חזק יותר, הארדואינו יון, כרטיס המכיל שני מעבדים – אחד משמש את הארדואינו ואילו השני מריץ גרסת לינוקס מותאמת. המעבדים מדברים ביניהם על מנת להעביר אינפורמציה בין העולם האמיתי והענן. לארדואינו יון יש יכולות אטרנט ו WiFi. בניגוד ליון שנחשב יקר יחסית, ניתן לייצר התקן קטן וזול (פחות מחמישה דולרים) ע"י שימוש בארדואינו ננו, או ארדואינו פרו מיני עם רכיב WiFi ESP8266 העולה פחות משלושה דולרים ומאפשר תקשורת סריאלית מעל WiFi. כמובן שרכיב כזה דורש Local Gateway בהשוואה לארדואינו יון שיכול לדבר ישירות עם הענן. קוד שרץ על הארדואינו מפותח בגרסה פשוטה של C/C++, בדרך כלל על סביבת הפיתוח של ארדואינו, אך ניתן להשתמש גם בתוסף ל Visual Studio שמאפשר אפילו לדבג את האפליקציה שרצה על ההתקן.

image

image

image

 

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

הרספברי פיי, הוא יותר מחשב מאשר התקן, הוא מריץ גרסת לינוקס ומאפשר להפעיל ולקרוא מידע מסנסורים דיגיטלים. הוא עובד במתח של 3.3 וולט, בניגוד לרוב ההתקנים האחרים שעובדים במתח של 5V. הרספברי מתחבר לעכבר, מקלדת, מסך באמצעות HDMI, ולאחר התקנה פשוטה מכיל את כל הדרוש לפתח בפיטון או Scratch. ניתן לפתח גם ב ++C, ובאמצעות הספרייה: Wiring Pi ניתן להשתמש בקוד של ארדואינו. לרספברי פיי יש חיבור אטרנט וניתן לחבר בצורה פשוטה WiFi דרך USB. לאחרונה יצאה גרסה שניה של הרספברי אשר כנראה תוכל להריץ גם גרסה של Windows 10.

image

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

image

הטסל הוא התקן המריץ Node.JS. ההתקן מאפשר חיבור של סנסורים בשיטה שמזכירה לגו. לטסל יש יכולת WiFi מובנת.

image

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

image

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

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

לדוגמא הקוד הנ"ל מהבהב נורת לד המחוברת אל רגל 13 של הארדואינו (שזה גם הלד שנמצא קבוע על לוח הבקר) בכל פעם שחיישן תנועה המחובר אל רגל 12 מזהה תנועה:

23

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

דוגמא: להפוך את המקרר שלנו למקרר חכם

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

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

clip_image002

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

הלוח מקבל מתח של 5 וולט ממקור מתח יציב המסוגל לספק מספיק הספק עבור המשקל ועבור התקשורת האלחוטית. חיבור USB פשוט מהמחשב אינו מספק מספיק הספק J. ה ESP 8266 הוא רכיב Wi-Fi מאוד זול, עלותו פחות משלושה דולר. הוא מעביר תקשורת טורית מעל רשת ה Wi-Fi. הוא מחובר ל Rx ו Tx של הארדואינו. הרכיב פועל במתח של 3.3 וולט ולכן נעזרתי בשתי דיודות להוריד את המתח מחמש וולט לשלוש וחצי וולט בערך (מפל המתח על כל דיודה הוא כ 0.7 וולט). למרות שה ESP 8266 עובד במתח נמוך, הארדואינו ננו מסוגל לקרוא את התקשורת הסריאלית ולהתנהג כראוי. רגש המשקל הוא מוט מתכת עם חור כפול במרכזו ומקום להברגת משטח השקילה. מוט המתכת משנה את המתח הנופל עליו, כאשר מונח עליו משקל. מכיוון ששינוי המתח הוא במיקרו וולטים בודדים, אנחנו נעזרים ברכיב ה HX711, ממיר אות אנלוגי נמוך לאות דיגיטלי. על מנת לקרוא את המידע אנחנו משתמשים בספריה שניתן להוריד מכאן. למי שמעוניין להשתמש ב Netduino ולכתוב קוד ב C#, המרתי את הספרייה ל C# וניתן להוריד את הקוד שלי מכאן.

והינה הקוד שרץ על הארדואינו ומעביר את המידע:

: #include "HX711.h"

   2:

   3: #define SSID "alonet"

   4: #define PASS "XXXXXX" // The local gateway WiFi password

   5: #define DST_IP "192.168.0.192"

   6:

   7: int ledPin = 13; // select the pin for the LED

   8: HX711 scale(12, 11);

   9:

  10: void blink(int times, bool isGood = true)

  11: {

  12:    int led = 13;

  13:    int d = isGood ? 100 : 300;

  14:    for (int i = 0; i < times; ++i)

  15:    {

  16:      digitalWrite(led, HIGH);

  17:      delay(d);

  18:      digitalWrite(led, LOW);

  19:      delay(d);

  20:    }

  21: }

  22:

  23:  void setup()

  24:  {

  25:    // Open serial communications and wait for port to open:

  26:    pinMode(13, OUTPUT);

  27:    scale.set_scale(2280.f); // this value is obtained by calibrating the scale

  28:    scale.tare();            // reset the scale to 0

  29:

  30:    blink(5);

  31:

  32:    Serial.begin(115200);

  33:    Serial.setTimeout(5000);

  34:

  35:    //test if the module is ready

  36:    Serial.println("AT+RST");

  37:    delay(3000);

  38:

  39:    //connect to the wifi

  40:    boolean connected=false;

  41:    for(int i=0;i<50;i++)

  42:    {

  43:      if(connectWiFi())

  44:      {

  45:        connected = true;

  46:        break;

  47:      }

  48:      blink(3, false);

  49:    }

  50:    if (!connected)

  51:    {

  52:      blink(100, false);

  53:        while(1)

  54:          ;

  55:    }

  56:    delay(5000);

  57:    blink(5);

  58:    Serial.println("AT+CIPMUX=0");

  59:  }

  60:

  61:

  62: void loop()

  63: {

  64:

  65:   String cmd = "AT+CIPSTART=\"TCP\",\"";

  66:   cmd += DST_IP;

  67:   cmd += "\",5000";

  68:   Serial.println(cmd);

  69:

  70:  if(Serial.find("Error"))

  71:  {

  72:    blink(3, false);

  73:    delay(250);

  74:    return;

  75:  }

  76:  scale.power_up();

  77:  double sensorValue = scale.get_units(10);

  78:  scale.power_down();  // put the ADC in sleep mode

  79:

  80:  cmd = String("\"Weight: ") + String(sensorValue) + "\"\r\n";

  81:  Serial.print("AT+CIPSEND=");

  82:  Serial.println(cmd.length());

  83:  delay(250);

  84:  Serial.print(cmd);

  85:

  86:  delay(2500);

  87: }

  88:

  89:   boolean connectWiFi()

  90:  {

  91:    Serial.println("AT+CWMODE=1");

  92:    String cmd="AT+CWJAP=\"";

  93:    cmd+=SSID;

  94:    cmd+="\",\"";

  95:    cmd+=PASS;

  96:    cmd+="\"";

  97:    Serial.println(cmd);

  98:    delay(2000);

  99:    if(Serial.find("OK"))

 100:    {

 101:      blink(3);

 102:      return true;

 103:    }

 104:    else

 105:    {

 106:      blink(5, false);

 107:      delay(250);

 108:      return false;

 109:    }

 110:  }

להלן קוד שרת פשוט אשר רץ על ה Local Gateway וקורא את המידע:

1: using System;

2: using System.IO;

3: using System.Net;

4: using System.Net.Sockets;

5: using System.Threading.Tasks;

6:

7: namespace IoTWiFiServer

8: {

9:     class Program

0:     {

1:         private static void Main(string[] args)

2:         {

3:             var server = new TcpListener(IPAddress.Any, 5000);

4:             server.Start();

5:

6:             while (true)

7:             {

8:                 try

9:                 {

0:                     var client = server.AcceptTcpClient();

1:                     var localEndPoint = (IPEndPoint)client.Client.LocalEndPoint;

2:                     var address = localEndPoint.Address + ":" + localEndPoint.Port;

3:                     Console.WriteLine("Client connected: " + address);

4:                     ServeClient(client).ContinueWith(

5:                      t=>Console.WriteLine(

          "Finish communication: Connection closed: " + address));

6:                 }

7:                 catch (Exception exp)

8:                 {

9:                     var color = Console.ForegroundColor;

0:                     Console.ForegroundColor = ConsoleColor.DarkRed;

1:                     Console.WriteLine("Error from client: " + exp.Message);

2:                     Console.ForegroundColor = color;

3:                 }

4:

5:             }

6:         }

7:

8:         private static async Task ServeClient(TcpClient client)

9:         {

0:             await Task.Yield();

1:             using (var stream = client.GetStream())

2:             {

3:                 var reader = new StreamReader(stream);

4:                 var writer = new StreamWriter(stream);

5:

6:                 while (client.Connected)

7:                 {

8:                     while (!reader.EndOfStream)

9:                     {

0:                         var data = reader.ReadLine();

1:                         Console.WriteLine("Data: " + data);

2:                     }

3:

4:                     writer.Write("OK");

5:                     writer.Write("From: " + Environment.MachineName);

6:                     writer.Flush();

7:                 }

8:             }

9:             await Task.Delay(500);

0:         }

1:     }

2: }

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

image

Azure ו- IOIT

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

image

בשלב הראשון אנחנו צריכים לאסוף את המידע. זה יכול להתבצע ע"י תקשורת ישירה ומאובטחת מהתקן הקצה את אל הענן, או דרך שער מקומי (Local Gateway). במידה וההתקן "יודע" לתקשר מול Web Service – דהינו שימוש ב REST, ניתן לייצר אפליקציית Web API שתשמש את אותו התקן. במידה וההתקן מסוגל להריץ קוד צד לקוח של Azure Event Hub, ניתן לקרוא ישירות אל ה Event Hub ללא צורך בשער גישה מקומי.

שירות ה Azure Event Hub מוגדר כשרות אשר מסוגל לקבל מידע טלמטריה בקצב גדול מהתקנים, אפליקציות ואתרים. השרות מסוגל לטפל במיליוני אירועים בשנייה, המידע המתקבל יכול לעבור טרנספורמציה ואז ניתן לבצע ניתוח ראשוני עליו, או לשמרו לצורך ניתוח משני מעמיק יותר. על מנת לתקשר עם ה Event Hub על הלקוח להשתמש בקריאת HTTP Post או בפרוטוקול AMQP, שהינו פרוטוקול פתוח. כמובן שאז'ור מספק לנו ספרייה נוחה לתקשר עם השרות מקוד דוט נט, אולם די פשוט להשתמש בכל שפת תכנות באמצעות פניית ה REST. ניתן לראות כאן דוגמת קוד מלאה.

image

לאחר שאספנו את המידע אנחנו יכולים לבצע אנליזה ראשונית באמצעות שירות Azure Stream Analytics, שהוא שרות CEP – Complex Event Processing. אנליזה ראשונה יכולה להציג שינויים חדים במידע, ביצוע אגרגציה, פילטור, או חיפוש של מידע מסוים שדורש תגובה מהירה. על מנת לעבוד עם Stream Analytics, אנחנו צריכים לייצר Job, ולחבר אותו אל ה Event Hub. את המוצא עלינו לחבר אל היעד של המידע המעובד, לדוגמא טבלה על SQL Azure. מה שמחבר בין זרם המידע בכניסה לתוצאה ביציאה היא שאילתה שכתובה בשפת דמוית SQL – Azure Stream Analytics Query Language:

SELECT DateAdd(second,-5,System.TimeStamp) as WinStartTime, system.TimeStamp as WinEndTime, DeviceId, Avg(Temperature) as AvgTemperature, Count(*) as EventCount

FROM input

GROUP BY TumblingWindow(second, 5), DeviceId

כאן תוכלו לקרוא ולעקוב אחר דוגמת הקוד מלאה.

 

על מנת לבצע ניתוח מעמיק יותר של המידע, עלינו להשתמש בשירותי ניתוח מידע מתקדמים כגון Azure HDInsight שירות ה"הדופ" – Map-Reduce של אז'ור וכן Azure Machine Learning, שירות אשר "לומד" את זרם המידע ומריץ עליו אלגוריתמים המפיקים החלטות או אפילו חוזים את העתיד (Decisions & Predictions).

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

סיכום

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

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

עולם ה- IOT מעניין אותכם? בואו לראות את הדברים שהוצגו כאן הלכה למעשה!

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

להרשמה: http://bit.ly/IoTCloudweb

 

 

Alon Fliss 2הפוסט נכתב על ידי אלון פליס, ארכיטקט תוכנה ראשי CodeValue, MVP & MRD מטעם מיקרוסופט העולמית. מוכר ומוביל דעה בקיהליית התוכנה הבינלאומית. מרצה בכנסים בינלאומיים רבים וכן בכנסים בארץ. בעל ניסיון של למעלה מ – 20 שניה בתחום הפיתוח במגוון רחב של עולמות ושפות.

חברת CodeValue מובילה בשירותי תוכנה וביצוע פרויקטים, באמצעות בניית הגשר בין טכנולוגיות חדשניות וצרכים עסקיים ספציפיים, תוך הענקת חוויית משתמש ברמה הגבוהה ביותר. חברת CodeValue מבצעת בהצלחה פרויקטיי פיתוח תוכנה במגוון פלטפורמות ומספקת ייעוץ תוכנה ופיתוח המותאם לצרכי הלקוח.. חברת CodeValue מתמקדת במספר נושאים מרכזיים בעולם התוכנה, ביניהם ALM ו DevOps, מחשוב ענן, עולם ההתקנים הניידים, מענה אחוד וכולל לשווקי ה-UI/UX, פיתוח מערכות מידע ועוד. החברה מונה מעל 90 עובדים בהם מומחי טכנולוגיה בעלי ניסיון רב, הנחשבים מובילים בתחומם ומוכרים כסמכות מקצועית.

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

תגובה אחת

  1. Avi Siboni23 במרץ 2015 ב 16:16

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

    הגב