diff --git a/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md b/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md index 78e78cc6..745ca899 100644 --- a/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md +++ b/1-getting-started/lessons/3-sensors-and-actuators/pi-actuator.md @@ -85,7 +85,7 @@ Program the nightlight. > 💁 This code should be indented to the same level as the `print('Light level:', light)` line to be inside the while loop! - > 💁 When sending digital values to actuators, a 0 value is 0v, and a 1 value is the max voltage for the device. For the Raspberry Pi with Grove sensors and actuators, the 1 voltage is 3.3V. + > 💁 When sending digital values to actuators, a 0 value is 0V, and a 1 value is the max voltage for the device. For the Raspberry Pi with Grove sensors and actuators, the 1 voltage is 3.3V. 1. From the VS Code Terminal, run the following to run your Python app: diff --git a/1-getting-started/lessons/3-sensors-and-actuators/translations/pi-actuator.hi.md b/1-getting-started/lessons/3-sensors-and-actuators/translations/pi-actuator.hi.md index 55e747a0..73f52e2c 100644 --- a/1-getting-started/lessons/3-sensors-and-actuators/translations/pi-actuator.hi.md +++ b/1-getting-started/lessons/3-sensors-and-actuators/translations/pi-actuator.hi.md @@ -85,7 +85,7 @@ > 💁 इस कोड को `print('Light level:', light)` लाइन के समान स्तर पर इंडेंट किया जाना चाहिए, while loop के अंदर होना चाहिए! - > 💁 एक्ट्यूएटर्स को डिजिटल मान भेजते समय, 0 मान 0v होता है, और 1 मान डिवाइस के लिए अधिकतम वोल्टेज होता है। ग्रोव सेंसर और एक्चुएटर्स के साथ रास्पबेरी पाई के लिए, 1 वोल्टेज 3.3V है। + > 💁 एक्ट्यूएटर्स को डिजिटल मान भेजते समय, 0 मान 0V होता है, और 1 मान डिवाइस के लिए अधिकतम वोल्टेज होता है। ग्रोव सेंसर और एक्चुएटर्स के साथ रास्पबेरी पाई के लिए, 1 वोल्टेज 3.3V है। 1. वीएस कोड टर्मिनल से, अपना पायथन ऐप चलाने के लिए निम्नलिखित चलाएँ: diff --git a/1-getting-started/lessons/3-sensors-and-actuators/translations/pi-actuator.zh-cn.md b/1-getting-started/lessons/3-sensors-and-actuators/translations/pi-actuator.zh-cn.md index 24b8541e..98207602 100644 --- a/1-getting-started/lessons/3-sensors-and-actuators/translations/pi-actuator.zh-cn.md +++ b/1-getting-started/lessons/3-sensors-and-actuators/translations/pi-actuator.zh-cn.md @@ -1,50 +1,50 @@ # 开发一个夜灯 - 树莓派 -在这个部分的课程中,你会把一个LED加到树莓派上并使用它来创建一个夜灯。 +在这个部分的课程中,你会把一个 LED 加到树莓派上并使用它来创建一个夜灯。 ## 硬件 现在夜灯需要一个执行器。 -这个执行器是**LED**,一个[发光二极管](https://wikipedia.org/wiki/Light-emitting_diode),当电流通过它时会发光。这是一个有两个打开或者关闭状态的数字执行器,发送一个1值把灯打开,发送0把灯关闭。这个LED是一个外部Grove执行器,而且需要被连接到树莓派上的Grove基础扩展板。 +这个执行器是 **LED**,一个[发光二极管](https://wikipedia.org/wiki/Light-emitting_diode),当电流通过它时会发光。这是一个有两个打开或者关闭状态的数字执行器,发送一个 1 值把灯打开,发送 0 值把灯关闭。这个 LED 是一个外部 Grove 执行器,而且需要被连接到树莓派上的 Grove 基础扩展板。 这个夜灯的逻辑用伪代码表示是: ```output 检查光照等级。 -如果光照小于300 - 打开LED +如果光照小于 300 + 打开 LED 否则 - 关闭LED + 关闭 LED ``` -### 连接LED +### 连接 LED -Grove LED 作为一个模块出现,以及一系列可供你选择颜色的LED。 +Grove LED 作为一个模块出现,以及一系列可供你选择颜色的 LED。 -#### 任务 - 连接LED +#### 任务 - 连接 LED -连接LED。 +连接 LED。 ![一个grove LED](../../../../images/grove-led.png) -1. 选择你最喜欢的LED然后把引脚插到LED模块的两个洞里面。 +1. 选择你最喜欢的 LED 然后把引脚插到 LED 模块的两个洞里面。 - LED是发光二极管,而且二极管是只允许电流单个方向通过的电子设备。这意味LED需要被连接在正确的方向,不然就不会工作。 + LED 是发光二极管,而且二极管是只允许电流单个方向通过的电子设备。这意味 LED 需要被连接在正确的方向,不然就不会工作。 - LED引脚中的一个是正极引脚,另一个是负极引脚。LED不是完全的圆形,而且在一边是有些平的。这略平的一边是负极引脚。当你连接LED到这个模块的时候,需要确保圆形这边的引脚是连接到模块上外边标着 **+** 的插孔,而扁平的这边是连接到靠近模块中间的插孔。 + LED 引脚中的一个是正极引脚,另一个是负极引脚。LED 不是完全的圆形,而且在一边是有些平的。这略平的一边是负极引脚。当你连接 LED 到这个模块的时候,需要确保圆形这边的引脚是连接到模块上外边标着 **+** 的插孔,而扁平的这边是连接到靠近模块中间的插孔。 -1. LED模块有一个允许你控制亮度的旋转按钮,用一个小十字螺丝起子逆时针旋转它拧到头来完全打开它。 +1. LED 模块有一个允许你控制亮度的旋转按钮,用一个小十字螺丝起子逆时针旋转它拧到头来完全打开它。 -1. 把Grove线缆的一端插到LED模块的插孔中,这个只能从一个方向插入。 +1. 把 Grove 线缆的一端插到 LED 模块的插孔中,这个只能从一个方向插入。 -1. 在树莓派断电的情况下,把Grove线缆的另一端连接到树莓派上插着的Grove基础扩展板标着 **D5** 的数字插孔。这个插孔在靠近GPIO引脚的一排,左数第二个。 +1. 在树莓派断电的情况下,把 Grove 线缆的另一端连接到树莓派上插着的 Grove 基础扩展板标着 **D5** 的数字插孔。这个插孔在靠近 GPIO 引脚的一排,左数第二个。 ![连接到D5插孔的Grove LED](../../../../images/pi-led.png) ## 编写夜灯程序 -现在夜灯可以用Grove光照传感器和Grove LED来编码了。 +现在夜灯可以用 Grove 光照传感器和 Grove LED 来编码了。 ### 任务 - 编写夜灯程序 @@ -52,26 +52,26 @@ Grove LED 作为一个模块出现,以及一系列可供你选择颜色的LED 1. 打开树莓派并等待启动完成。 -1. 直接在树莓派上或者通过远程SSH扩展,打开你在这个作业上一部分创建的VS Code中的夜灯项目。 +1. 直接在树莓派上或者通过远程 SSH 扩展,打开你在这个作业上一部分创建的 VS Code 中的夜灯项目。 -1. 把下面的代码加到`app.py`文件中来导入一个需要的函数库。这一行需要加在文件顶部,在其他`import`代码行下面。 +1. 把下面的代码加到 `app.py` 文件中来导入一个需要的函数库。这一行需要加在文件顶部,在其他 `import` 代码行下面。 ```python from grove.grove_led import GroveLed ``` - `from grove.grove_led import GroveLed`语句从Grove Python函数库中导入了`GroveLED`。这个函数库中有和Grove LED交互的代码。 + `from grove.grove_led import GroveLed` 语句从 Grove Python 函数库中导入了 `GroveLED`。这个函数库中有和 Grove LED 交互的代码。 -1. 把下面的代码加到`light_sensor`声明之后来创建一个管理LED的类的实例: +1. 把下面的代码加到 `light_sensor` 声明之后来创建一个管理 LED 的类的实例: ```python led = GroveLed(5) ``` - `led = GroveLed(5)`这一行创建了一个连接到 **D5** 引脚的`GroveLED`类的实例,**D5** 也就是LED连接的那个数字Grove引脚。 + `led = GroveLed(5)` 这一行创建了一个连接到 **D5** 引脚的 `GroveLED` 类的实例,**D5** 也就是 LED 连接的那个数字 Grove 引脚。 - > 💁 所有的插孔都有唯一的引脚号,引脚0、2、4和6是模拟引脚,引脚5、16、18、22、24和26是数字引脚。 + > 💁 所有的插孔都有唯一的引脚号,引脚 0、2、4 和 6 是模拟引脚,引脚 5、16、18、22、24 和 26 是数字引脚。 -1. 在`while`循环中增加一个判断,在`time.sleep`之前来检查光照等级并控制LED打开或者关闭: +1. 在 `while` 循环中增加一个判断,在 `time.sleep` 之前来检查光照等级并控制 LED 打开或者关闭: ```python if light < 300: @@ -80,13 +80,13 @@ Grove LED 作为一个模块出现,以及一系列可供你选择颜色的LED led.off() ``` - 这块代码检查了`light`的值,如果小于300就调用`GroveLED`类的`on`方法,来发送一个数字值1到LED,把它点亮。如果`light`值大于或等于300,就调用`off`方法,发送一个数字值0给LED,把它关闭。 + 这块代码检查了 `light` 的值,如果小于 300 就调用 `GroveLED` 类的 `on` 方法,来发送一个数字值 1 到 LED,把它点亮。如果 `light` 值大于或等于 300,就调用 `off` 方法,发送一个数字值 0 给 LED,把它关闭。 - > 💁 这段代码需要放到while循环里面,缩进到和`print('Light level:', light)`行一个水平。 + > 💁 这段代码需要放到 while 循环里面,缩进到和 `print('Light level:', light)` 行一个水平。 - > 💁 当发送数字值到执行器的时候,0值就是0v,1值就是设备的最大电压。对于插着Grove传感器和执行器的树莓派而言,1的电压就是3.3V。 + > 💁 当发送数字值到执行器的时候,0 值就是 0V,1 值就是设备的最大电压。对于插着 Grove 传感器和执行器的树莓派而言,1 的电压就是 3.3V。 -1. 从VS Code终端,运行下面的命令来运行你的Python应用: +1. 从 VS Code 终端,运行下面的命令来运行你的 Python 应用: ```sh python3 app.py @@ -104,12 +104,12 @@ Grove LED 作为一个模块出现,以及一系列可供你选择颜色的LED Light level: 290 ``` -1. 遮挡和揭开光照传感器,会观察到光照等级等于300或更小时LED会点亮,如果光照等级比300大LED就会关闭。 +1. 遮挡和揭开光照传感器,会观察到光照等级等于 300 或更小时 LED 会点亮,如果光照等级比 300 大 LED 就会关闭。 - > 💁 如果LED没有点亮,确保它是正确方向连接的,而且旋转按钮是设置成全开的。 + > 💁 如果 LED 没有点亮,确保它是正确方向连接的,而且旋转按钮是设置成全开的。 ![连接到树莓派的LED随着光照等级改变点亮和关闭](../../../../images/pi-running-assignment-1-1.gif) -> 💁 你可以在[code-actuator/pi](../code-actuator/pi)文件夹里找到这份代码。 +> 💁 你可以在 [code-actuator/pi](../code-actuator/pi) 文件夹里找到这份代码。 😀 你的夜灯程序就成功了! diff --git a/1-getting-started/lessons/3-sensors-and-actuators/translations/pi-sensor.zh-cn.md b/1-getting-started/lessons/3-sensors-and-actuators/translations/pi-sensor.zh-cn.md index 12d85e52..4c808af2 100644 --- a/1-getting-started/lessons/3-sensors-and-actuators/translations/pi-sensor.zh-cn.md +++ b/1-getting-started/lessons/3-sensors-and-actuators/translations/pi-sensor.zh-cn.md @@ -4,13 +4,13 @@ ## 硬件 -这节课程的传感器是使用[光电二极管](https://wikipedia.org/wiki/Photodiode)来把光照转化为电子信号的光照传感器。这是一个发送从0到1,000整数值的模拟传感器,表示光照值的相对量而不对应任何比如[勒克斯(lux)](https://wikipedia.org/wiki/Lux)的标准计量单位。 +这节课程的传感器是使用[光电二极管](https://wikipedia.org/wiki/Photodiode)来把光照转化为电子信号的光照传感器。这是一个发送从 0 到 1,000 整数值的模拟传感器,表示光照值的相对量而不对应任何比如[勒克斯(lux)](https://wikipedia.org/wiki/Lux)的标准计量单位。 -这个光照传感器是一个外部Grove传感器,需要被连接到树莓派上的Grove基础扩展板。 +这个光照传感器是一个外部 Grove 传感器,需要被连接到树莓派上的 Grove 基础扩展板。 ### 连接光照传感器 -用来检测光照等级的Grove光照传感器需要被连接到树莓派上。 +用来检测光照等级的 Grove 光照传感器需要被连接到树莓派上。 #### 任务 - 连接光照传感器 @@ -18,15 +18,15 @@ ![一个 grove 光照传感器](../../../../images/grove-light-sensor.png) -1. 把Grove线缆的一端插到光照传感器模块的插孔中,这个只能从一个方向插入。 +1. 把 Grove 线缆的一端插到光照传感器模块的插孔中,这个只能从一个方向插入。 -1. 在树莓派断电的情况下,把Grove线缆的另一端连接到树莓派上插着的Grove基础扩展板标着 **A0** 的模拟插孔。这个插孔在靠近GPIO引脚的一排,右数第二个。 +1. 在树莓派断电的情况下,把 Grove 线缆的另一端连接到树莓派上插着的 Grove 基础扩展板标着 **A0** 的模拟插孔。这个插孔在靠近 GPIO 引脚的一排,右数第二个。 -![插在A0插孔的grove光照传感器](../../../../images/pi-light-sensor.png) +![插在 A0 插孔的 grove 光照传感器](../../../../images/pi-light-sensor.png) ## 编写光照传感器程序 -现在设备可以用Grove光照传感器来编码了。 +现在设备可以用 Grove 光照传感器来编码了。 ### 任务 - 编写光照传感器程序 @@ -34,30 +34,30 @@ 1. 打开树莓派并等待启动完成。 -1. 直接在树莓派上或者通过远程SSH扩展,打开你在这个作业上一部分创建的VS Code中的夜灯项目。 +1. 直接在树莓派上或者通过远程SSH扩展,打开你在这个作业上一部分创建的 VS Code 中的夜灯项目。 -1. 打开`app.py`文件并删除里面的所有代码。 +1. 打开 `app.py` 文件并删除里面的所有代码。 -1. 把下面的代码加到`app.py`文件中来导入一些需要的函数库: +1. 把下面的代码加到 `app.py` 文件中来导入一些需要的函数库: ```python import time from grove.grove_light_sensor_v1_2 import GroveLightSensor ``` - `import time`语句导入了`time`模块,在这个作业的后面会用到这个模块。 - - `from grove.grove_light_sensor_v1_2 import GroveLightSensor`语句从Grove Python函数库导入了 `GroveLightSensor`。这个函数库里有和Grove光照传感器交互的代码,在设置树莓派的时候就已经全局安装了。 + `import time` 语句导入了 `time` 模块,在这个作业的后面会用到这个模块。 + `from grove.grove_light_sensor_v1_2 import GroveLightSensor` 语句从 Grove Python 函数库导入了 `GroveLightSensor`。这个函数库里有和 Grove 光照传感器交互的代码,在设置树莓派的时候就已经全局安装了。 + 1. 在上面代码的后面增加下面的代码来创建一个管理光照传感器的类的实例: ```python light_sensor = GroveLightSensor(0) ``` - `light_sensor = GroveLightSensor(0)`这一行创建了一个连接到 **A0** 引脚的`GroveLightSensor`类的实例,**A0** 也就是光照传感器连接的那个引脚。 - -1. 在上面的代码后面增加一个无限循环代码来获取光照传感器数值并打印到终端: + `light_sensor = GroveLightSensor(0)` 这一行创建了一个连接到 **A0** 引脚的 `GroveLightSensor` 类的实例,**A0** 也就是光照传感器连接的那个引脚。 + +1. 在上面的代码后面增加一段无限循环代码,来获取光照传感器数值并打印到终端: ```python while True: @@ -65,15 +65,15 @@ print('Light level:', light) ``` - 使用`GroveLightSensor`类的`light`属性可以来获取 0-1023 的当前光照等级值,这个属性从引脚读取模拟量,然后这个值会被打印到终端。 - -1. 在`loop`的结尾增加一个1秒的短暂休眠,因为光照等级不需要一直不断地读取。一个休眠可以减少设备的能源消耗。 + 使用 `GroveLightSensor` 类的 `light` 属性可以来获取 0-1023 的当前光照等级值,这个属性从引脚读取模拟量,然后这个值会被打印到终端。 + +1. 在 `loop` 的结尾增加一个 1 秒的短暂休眠,因为光照等级不需要一直不断地读取。一个休眠可以减少设备的能源消耗。 ```python time.sleep(1) ``` - -1. 从VS Code终端,运行下面的命令来运行你的Python应用: + +1. 从 VS Code 终端,运行下面的命令来运行你的 Python 应用: ```sh python3 app.py @@ -91,6 +91,6 @@ Light level: 290 ``` -> 💁 你可以在[code-sensor/pi](../code-sensor/pi)文件夹找到这份代码。 +> 💁 你可以在 [code-sensor/pi](../code-sensor/pi) 文件夹找到这份代码。 -😀 给你的夜灯增加一个传感器程序就成功了! \ No newline at end of file +😀 给你的夜灯增加一个传感器程序就成功了! diff --git a/3-transport/lessons/3-visualize-location-data/translations/.dummy.md b/3-transport/lessons/3-visualize-location-data/translations/.dummy.md deleted file mode 100644 index 6e7db247..00000000 --- a/3-transport/lessons/3-visualize-location-data/translations/.dummy.md +++ /dev/null @@ -1,9 +0,0 @@ -# Dummy File - -This file acts as a placeholder for the `translations` folder.
-**Please remove this file after adding the first translation** - -For the instructions, follow the directives in the [translations guide](https://github.com/microsoft/IoT-For-Beginners/blob/main/TRANSLATIONS.md) . - -## THANK YOU -We truly appreciate your efforts! diff --git a/3-transport/lessons/3-visualize-location-data/translations/README.bn.md b/3-transport/lessons/3-visualize-location-data/translations/README.bn.md new file mode 100644 index 00000000..bc90168c --- /dev/null +++ b/3-transport/lessons/3-visualize-location-data/translations/README.bn.md @@ -0,0 +1,340 @@ +# লোকেশন ডেটা প্রদর্শন + +![A sketchnote overview of this lesson](../../../../sketchnotes/lesson-13.jpg) + +> স্কেচনোটটি তৈরী করেছেন [Nitya Narasimhan](https://github.com/nitya)। বড় সংস্করণে দেখার জন্য ছবিটিতে ক্লিক করতে হবে। + +## লেকচার-পূর্ববর্তী কুইজ + +[লেকচার-পূর্ববর্তী কুইজ](https://brave-island-0b7c7f50f.azurestaticapps.net/quiz/25) + +## সূচনা + +গত পাঠে আমরা শিখেছি কিভাবে সার্ভারবিহীন কোড ব্যবহার করে স্টোরেজ কন্টেইনারে ক্লাউডে সংরক্ষণ করতে আমাদেরকে সেন্সর থেকে জিপিএস ডেটা পেতে হয়। এখন আমরা দেখবো কিভাবে একটি Azure ম্যাপে সেই পয়েন্টগুলি দেখানো যায়। আমরা একটি ওয়েব পেজে একটি মানচিত্র তৈরি করতে শিখব, GeoJSON ডেটা ফরম্যাট এবং আমাদেরকে ম্যাপে ক্যাপচার করা সমস্ত জিপিএস পয়েন্ট প্লট করার জন্য এটি কীভাবে ব্যবহার করতে হবে তা শিখব। + +এই লেসনে আমরা দেখবোঃ + +* [ডেটা ভিস্যুয়ালাইজেশন কী ?](#ডেটা-ভিস্যুয়ালাইজেশন-কী) +* [ম্যাপ সার্ভিস](#ম্যাপ-সার্ভিস) +* [Azure Maps রিসোর্স তৈরী করা](#Azure-Maps-রিসোর্স-তৈরী-করা) +* [ওয়েব পেইজে ম্যাপ প্রদর্শন](#ওয়েব-পেইজে-ম্যাপ-প্রদর্শন) +* [GeoJSON ফরম্যাট](#geojson-ফরম্যাট) +* [GeoJSON দ্বারা ম্যাপে জিপিএস ডেটা প্লট করা](#GeoJSON-দ্বারা-ম্যাপে-জিপিএস-ডেটা-প্লট-করা) + +> 💁 এই লেসনে HTML এবং JavaScript এর ব্যবহার থাকবে। এই ল্যাংগুয়েজগুলো ব্যবহার করে ওয়েব ডেভলাপমেন্ট বিষয়ে আরো জানতে চাইলে [Web development for beginners](https://github.com/microsoft/Web-Dev-For-Beginners) কারিক্যুলাম দেখতে পারি। + +## ডেটা ভিস্যুয়ালাইজেশন কী + +ডেটা দৃশ্যায়ন বা ভিস্যুয়ালাইজেশন, নাম থেকেই বোঝা যায়, ডেটা ভিজুয়ালাইজ বা প্রদর্শন করা হয় এমন উপায়ে যা মানুষের পক্ষে বোঝা সহজ হয়। এটি সাধারণত চার্ট এবং গ্রাফের সাথে যুক্ত থাকে, মানুষকে কেবল তথ্য উপাত্তকে আরও ভালভাবে বুঝতে সাহায্য করার পাশাপাশি, তাদের প্রয়োজনীয় সিদ্ধান্ত নিতেও সাহায্য করে। + +একটি সহজ উদাহরণ নিই- শুরুর দিকের একটি প্রজেক্টে আমরা মাটির আর্দ্রতা সংগ্রহ করেছি । ১লা জুন ২০২১ -এর জন্য প্রতি ঘণ্টায় মাটির আর্দ্রতার তথ্যের একটি টেবিল নিম্নরূপ : + +| সময় | মান | +| ---------------- | ------: | +| 01/06/2021 00:00 | 257 | +| 01/06/2021 01:00 | 268 | +| 01/06/2021 02:00 | 295 | +| 01/06/2021 03:00 | 305 | +| 01/06/2021 04:00 | 325 | +| 01/06/2021 05:00 | 359 | +| 01/06/2021 06:00 | 398 | +| 01/06/2021 07:00 | 410 | +| 01/06/2021 08:00 | 429 | +| 01/06/2021 09:00 | 451 | +| 01/06/2021 10:00 | 460 | +| 01/06/2021 11:00 | 452 | +| 01/06/2021 12:00 | 420 | +| 01/06/2021 13:00 | 408 | +| 01/06/2021 14:00 | 431 | +| 01/06/2021 15:00 | 462 | +| 01/06/2021 16:00 | 432 | +| 01/06/2021 17:00 | 402 | +| 01/06/2021 18:00 | 387 | +| 01/06/2021 19:00 | 360 | +| 01/06/2021 20:00 | 358 | +| 01/06/2021 21:00 | 354 | +| 01/06/2021 22:00 | 356 | +| 01/06/2021 23:00 | 362 | + +একজন সাধারণ মানুষ হিসাবে, এই ডেটা বোঝা কঠিন হতে পারে। এটি কোন অর্থ ছাড়া সংখ্যার একটি প্রাচীর মাত্র। এই ডেটা ভিজ্যুয়ালাইজ করার প্রথম পদক্ষেপ হিসাবে, এটি একটি লাইন চার্টে প্লট করা যেতে পারে: + +![A line chart of the above data](../../../../images/chart-soil-moisture.png) + +এই লাইন চার্টটি আরো উন্নত করা যেতে পারে যদি আমরা মাটির আর্দ্রতার মান 450 হলে, স্বয়ংক্রিয় জল ব্যবস্থা চালু করা হয়েছিল এটি বোঝাতে একটি লাইন টেনে দিই। + +![A line chart of soil moisture with a line at 450](../../../../images/chart-soil-moisture-relay.png) + +এই চার্টটি খুব তাড়াতাড়ি দেখায় যে মাটির আর্দ্রতার মাত্রা কত ছিল এবং ঠিক কোন পয়েন্ট থেকে সেচ ব্যবস্থা চালু হয়েছিল। + +ডেটা ভিজ্যুয়ালাইজ করার জন্য চার্টই একমাত্র হাতিয়ার নয়। আইওটি ডিভাইসগুলি যেগুলি আবহাওয়া ট্র্যাক করে সেগুলিতে ওয়েব অ্যাপস বা মোবাইল অ্যাপ থাকতে পারে যা বিভিন্ন প্রতীক ব্যবহার করে আবহাওয়ার অবস্থা যেমন মেঘলা দিনের জন্য মেঘের প্রতীক, বৃষ্টির দিনের জন্য বৃষ্টির চিহ্ন ইত্যাদি। ডেটা ভিজ্যুয়ালাইজ করার অনেক উপায় আছে, কিছু বেশ সিরিয়াস, আবার কিছু অনেক মজার। + +✅ আমরা ডেটা ভিজ্যুয়ালাইজেশনের যেসব উপায় ইতোমধ্যে দেখেছি, সে সম্পর্কে চিন্তা করি। কোন পদ্ধতিগুলি সবচেয়ে পরিষ্কার এবং দ্রুততম সিদ্ধান্ত নেওয়ার সুযোগ দেয় ? + +ভালো ভিজ্যুয়ালাইজেশনগুলি মানুষকে দ্রুত সিদ্ধান্ত নিতে সহায়তা করে। উদাহরণস্বরূপ, শিল্প যন্ত্রপাতি থেকে সব ধরনের রিডিং স্ক্রিনে দেখানো হলে, এগুলো বিশ্লেষণ করা কঠিন। কিন্তু যদি আমরা যেকোন সমস্যাজনক পরিস্থিতিতে একটি লাল বাতি জ্বালাই, তাহলে একজন মানুষ সহজে সিদ্ধান্ত নিতে পারে। + +জিপিএস ডেটা নিয়ে কাজ করার সময় সবচেয়ে স্পষ্ট দৃশ্যায়ন হলো একটি মানচিত্রে ডেটা প্লট করা। উদাহরণস্বরূপ ডেলিভারি ট্রাক এর অবস্থাম দেখানো একটি মানচিত্র, একটি কারখানার শ্রমিকদের ট্রাক কখন আসবে তা দেখতে সাহায্য করতে পারে। যদি এই মানচিত্রটি তাদের বর্তমান অবস্থানে ট্রাকের শুধু ছবি দেখানোর পাশাপাশি ট্রাকের অন্যান্য তথ্য সম্পর্কে ধারণা দেয়, তাহলে প্লান্টের শ্রমিকরা সেই অনুযায়ী পরিকল্পনা করতে পারে। যদি তারা তাদের কারখানার কাছাকাছি একটি রেফ্রিজারেটেড ট্রাক দেখতে পায় তবে তারা দ্রুত প্রস্তুতি নিতে পারে। + +## ম্যাপ সার্ভিস + +মানচিত্র নিয়ে কাজ করা বেশ চিত্তাকর্ষক একটি কাজ। ম্যাপের জন্য অনেকগুলো সার্ভিস যেমন Bing মানচিত্র, লিফলেট, ওপেন স্ট্রিট মানচিত্র এবং গুগল মানচিত্র থেকে বেছে নেওয়া যায়। এই লেসনে আমরা [Azure Maps](https://azure.microsoft.com/services/azure-maps/?WT.mc_id=academic-17441-jabenn) নিয়ে আরো বিস্তারিত জানবো এবং কীভাবে ডেটা প্লট করা হবে তা শিখবো + +![The Azure Maps logo](../../../../images/azure-maps-logo.png) + +Azure ম্যাপ হলো ভূ-স্থানিক পরিষেবা এবং SDK- এর একটি সংগ্রহ যা ওয়েব এবং মোবাইল অ্যাপ্লিকেশনগুলিকে ভৌগলিক প্রেক্ষাপট সরবরাহ করতে নতুন ম্যাপিং ডেটা ব্যবহার করে। ডেভেলপারদের সুন্দর, ইন্টারেক্টিভ মানচিত্র তৈরির জন্য ট্যুল দেওয়া হয় যা সুপারিশকৃত ট্রাফিক রুট প্রদান, ট্রাফিক ঘটনা সম্পর্কে তথ্য প্রদান, অভ্যন্তরীণ নেভিগেশন, অনুসন্ধান ক্ষমতা, উচ্চতা তথ্য, আবহাওয়া পরিষেবা এবং আরও অনেক কিছু করতে পারে। + +✅ এখানে কিছু [কোড স্যাম্পল](https://docs.microsoft.com/samples/browse?WT.mc_id=academic-17441-jabenn&products=azure-maps) রয়েছে যা আমরা এক্সপেরিমেন্ট করে দেখতে পারি। + +আমরা বিভিন্নভাবে মানচিত্র প্রদর্শন করতে পারি, যেমনঃ ফাঁকা ক্যানভাস, টাইলস, স্যাটেলাইট ইমেজ, রাস্তা সহ স্যাটেলাইট ইমেজ, গ্রেস্কেল মানচিত্র, উচ্চতা দেখানোর জন্য ছায়াময় মানচিত্র, রাতের দৃশ্যের মানচিত্র এবং হাই-কনট্রাস্ট ইত্যাদি । [Azure Event Grid](https://azure.microsoft.com/services/event-grid/?WT.mc_id=academic-17441-jabenn) এর সাথে একীভূত করে আমরা আমাদের মানচিত্রে রিয়েল-টাইম আপডেট পেতে পারি। আমাদের মানচিত্রের আচরণ এবং ভিস্যুয়াল পরিবর্তন করতে পারি বিভিন্ন নিয়ন্ত্রণ যুক্ত করে, যেমনঃ pinch, drag এবং ক্লিক করার মতো অপারেশনের মাধ্যমে। মানচিত্রের রূপ পরিবর্তন করতে, আমরা বাবল, লাইন, বহুভুজ, হিটম্যাপ এবং আরও অনেক কিছু অন্তর্ভুক্ত করতে পারি। কোন মানচিত্রটি বাস্তবায়ন করবো তা আমাদের SDK এর পছন্দের উপর নির্ভর করে। + +[REST API](https://docs.microsoft.com/javascript/api/azure-maps-rest/?WT.mc_id=academic-17441-jabenn&view=azure-maps-typescript-latest) ব্যবহার করে আমরা Azure Maps APIs একসেস করতে পারি। এছাড়াও এটির [Web SDK](https://docs.microsoft.com/azure/azure-maps/how-to-use-map-control?WT.mc_id=academic-17441-jabenn) বা মোবাইলের জন্য [Android SDK](https://docs.microsoft.com/azure/azure-maps/how-to-use-android-map-control-library?WT.mc_id=academic-17441-jabenn&pivots=programming-language-java-android) আমরা কাজে লাগাতে পারি। + +এই পাঠে, আমরা একটি মানচিত্র আঁকতে এবং আমাদের সেন্সরের জিপিএস অবস্থানের পথ প্রদর্শন করতে ওয়েব SDK ব্যবহার করবো। + +## Azure Maps রিসোর্স তৈরী করা + +আমাদের প্রথম ধাপ হল একটি Azure Maps অ্যাকাউন্ট তৈরি করা। + +### কাজ - Azure Maps রিসোর্স তৈরী করা + +1. টার্মিনাল বা কমান্ড প্রম্পট থেকে নিম্নের কমান্ড রান করে `gps-sensor` রিসোর্স গ্রুপে Azure Maps রিসোর্স তৈরী করি। + + ```sh + az maps account create --name gps-sensor \ + --resource-group gps-sensor \ + --accept-tos \ + --sku S1 + ``` + + এটি Azure Maps রিসোর্স তৈরী করবে যার নাম `gps-sensor` । এক্ষেত্রে `S1` tier ব্যবহৃত হচ্ছে যা একটি paid tier যাতে অনেকগুলো ফীচার থাকে। + + > 💁 Azure Maps ব্যবহারের খরচ সম্পর্কে জানতে, [Azure Maps pricing page](https://azure.microsoft.com/pricing/details/azure-maps/?WT.mc_id=academic-17441-jabenn) পড়তে পারি। + +1. ম্যাপের জন্য API key প্রয়োজন। নীচের কমান্ড দিয়ে তা পাওয়া যাবেঃ + + ```sh + az maps account keys list --name gps-sensor \ + --resource-group gps-sensor \ + --output table + ``` + + এখানে `PrimaryKey` ভ্যালুটি কপি করে নিতে হবে। + +## ওয়েব পেইজে ম্যাপ প্রদর্শন + +এখন আমরা পরবর্তী পদক্ষেপ নিতে পারি যা হলো একটি ওয়েব পেজে মানচিত্র প্রদর্শন করা। ছোট ওয়েব অ্যাপের জন্য মাত্র একটি `html` ফাইল ব্যবহার করবো; তবে এক্ষেত্রে মনে রাখতে হবে যে একটি উত্পাদন শিল্প বা দলগত পরিবেশে, ওয়েব অ্যাপ্লিকেশনে সম্ভবত আরো কিছু চলমান অংশ থাকবে! + +### Task - ওয়েব পেইজে ম্যাপ প্রদর্শন + +1. এখন index.html নামে একটি ফাইল তৈরী করতে হবে লোকাল কম্পিউটারের কোন ফোল্ডারে । HTML মার্ক-আপ দিয়ে ম্যাপ স্থাপন করিঃ + + ```html + + + + + + +
+ + + ``` + + ম্যাপটি `myMap` `div` এ তৈরী হবে । পেইজের প্রস্থ এবং উচ্চতা ঠিক করার জন্য কিছু HTML স্টাইল ব্যবহার করলেই হবে। + + > 🎓`div` একটি ওয়েব পেজের একটি বিভাগ বা অংশ যেটিতে আমরা নাম এবং স্টাইল পরিবর্তন করতে পারি সহজেই । + +1. শুরুতেই `` ট্যাগের অধীনে একটি এক্সটার্নাল style sheet যুক্ত করতে হবে ম্যাপ সুন্দরভাবে প্রদর্শনের জন্য। এছাড়াও ম্যাপের ব্যবহার নিয়ন্ত্রণ করতে, একটি বাহ্যিক script ফাইল দরকার যা আমরা Web SDK থেকে পাব: + + ```html + + + ``` + + এই স্টাইল শীটে মানচিত্রটি কেমন দেখায় সেটির সেটিংস রয়েছে এবং স্ক্রিপ্ট ফাইলে মানচিত্র লোড করার কোড রয়েছে। এই কোড যোগ করার কাজটি C++ এ হেডার ফাইল বা পাইথন মডিউল ইম্পোর্ট করার অনুরূপ। + +1. এবার নিম্নের স্ক্রিপ্ট ব্লক যোগ করি + + ```javascript + + ``` + + এক্ষেত্রে `` এর পরিবর্তে API key ব্যবহার করতে হবে Azure Maps একাউন্টের। + + যদি আমরা `index.html` পেজটি ব্রাউজারে ওপেন করি, তাহলে আমরা ম্যাপ দেখতে পাব যা Seattle অঞ্চলে ফোকাস করে। + + ![A map showing Seattle, a city in Washington State, USA](../../../../images/map-image.png) + + ✅ মানচিত্র প্রদর্শন পরিবর্তন করতে জুম এবং কেন্দ্রের পরামিতিগুলি নিয়ে পরীক্ষা করি। আমরা অক্ষাংশ এবং দ্রাঘিমাংশের সাথে সম্পর্কিত বিভিন্ন স্থানাঙ্ক যোগ করে মানচিত্রে পরিবর্তন লক্ষ্য করতে পারবো। + +> 💁 Web apps নিয়ে কাজ করা ক্ষেত্রে একটি ভালো উপায় হলো [http-server](https://www.npmjs.com/package/http-server) কে লোকালি ইন্সটল করা। তবে আমাদেরকে [node.js](https://nodejs.org/) এবং [npm](https://www.npmjs.com/) ইন্সটল করতে হবে আগেই। এগুলো ইনস্টল হয়ে গেলে, `index.html` ফাইলে নেভিগেট করে, ` http-server` টাইপ করলে ওয়েব অ্যাপটি একটি স্থানীয় ওয়েব সার্ভারে খুলবে [http://127.0.0.1:8080/](http://127.0.0.1:8080/) । + +## GeoJSON ফরম্যাট + +এখন যেহেতু মানচিত্র প্রদর্শনের সাথে আমাদের ওয়েব অ্যাপটি রয়েছে, আমাদেরকে আমাদের স্টোরেজ অ্যাকাউন্ট থেকে জিপিএস ডেটা বের করতে হবে এবং এটি মানচিত্রের উপরে মার্কারের একটি স্তরে প্রদর্শন করতে হবে। আমরা এটি করার আগে, [GeoJSON](https://wikipedia.org/wiki/GeoJSON) ফর্ম্যাটটি দেখি যা Azure মানচিত্রের জন্য প্রয়োজনীয়। + +[GeoJSON](https://geojson.org/) হল একটি ওপেন স্ট্যান্ডার্ড JSON স্পেসিফিকেশন যা ভৌগোলিক-নির্দিষ্ট ডেটা হ্যান্ডেল করার জন্য ডিজাইন করা হয়েছে বিশেষ ফর্ম্যাটিং সহ। আমরা [geojson.io](https://geojson.io) ব্যবহার করে নমুনা ডেটা পরীক্ষা করে এটি সম্পর্কে জানতে পার্রি, যা GeoJSON ফাইলগুলি ডিবাগ করার জন্য একটি দরকারী ট্যুল। + +GeoJSON ডেটার একটি নমুনা ফাইলঃ + +```json +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -2.10237979888916, + 57.164918677004714 + ] + } + } + ] +} +``` + +একটি বিশেষ বৈশিষ্ট্য হল ডেটাকে একটি 'ফিচারকলেকশন' এর মধ্যে 'ফিচার' হিসেবে নেস্ট করা। সেই বস্তুর মধ্যে অক্ষাংশ এবং দ্রাঘিমাংশ নির্দেশকারী 'স্থানাঙ্ক' এর 'জ্যামিতি' পাওয়া যাবে। + +✅ GeoJSON তৈরি করার সময়, বস্তুর মধ্যে 'অক্ষাংশ' এবং 'দ্রাঘিমাংশ' এর ক্রমটির দিকে মনোযোগ দিতে হবে নয়তো মান অনুযায়ী অবস্থান যেখানে দেখা উচিত, সেখানে তা উপস্থাপিত হবে না! GeoJSON পয়েন্টের জন্য `lon,lat` এই ক্রমানুসারে ডেটা প্রদান করতে হয় , `lat,lon` ফরম্যাটে নয়। + +`জ্যামিতি` বিভিন্ন ধরনের হতে পারে, যেমন একক বিন্দু বা বহুভুজ। এই উদাহরণে, আমরা কাজ করছি বিন্দু নিয়ে যার দুটি স্থানাঙ্কঃ দ্রাঘিমাংশ এবং অক্ষাংশ রয়েছে। + +✅ Azure Maps সকল GeoJSON এবং এর সাথে অতিরিক্ত কিছু [উন্নত বৈশিষ্ট্য](https://docs.microsoft.com/azure/azure-maps/extend-geojson?WT.mc_id=academic-17441-jabenn) সাপোর্ট করে যেমনঃ বৃত্ত এবং অন্যান্য জ্যামিতিক গঠন আঁকার ক্ষমতা। + +## GeoJSON দ্বারা ম্যাপে জিপিএস ডেটা প্লট করা + +এখন আমরা আগের পাঠে যে স্টোরেজটি তৈরি করেছিলাম সেখান থেকে ডেটা গ্রহণ করার জন্য প্রস্তুত। এগুলো ব্লব স্টোরেজে বেশ কয়েকটি ফাইল হিসাবে সংরক্ষণ করা হয়েছে যাতে আমাদেরকে ফাইলগুলি পুনরুদ্ধার করতে হয় এবং সেগুলি বিশ্লেষণ করতে হবে যাতে Azure Maps সেই ডেটা ব্যবহার করতে পারে। + +### কাজ - ওয়েব পেজ থেকে একসেস করার জন্য স্টোরেজ কনফিগার করা + +আমরা যদি ডেটা আনতে আমাদের স্টোরেজে কল করি, তবে আমাদের ব্রাউজারের কনসোলে অনেক এরর দেখে অনেকেই অবাক হইয়ে যেতে পারে। এর কারণ হল এই স্টোরেজে [CORS](https://developer.mozilla.org/docs/Web/HTTP/CORS) এর জন্য আমাদেরকে পার্মিশন সেট করতে হবে যাতে বাইরের ওয়েব অ্যাপস থেকে ডেটা একসেস করা যায়। + +> 🎓 CORS এর পূর্ণরূপ হলো "Cross-Origin Resource Sharing" এবং সাধারণত নিরাপত্তাজনিত কারণে Azure এ এটি স্পষ্টভাবে সেট করা প্রয়োজন। যেসকল সাইটগুলিকে ডেটা একসেস করার অনুমতি দেয়ার প্রয়োজন নেই, তা আমরা এখান থেকে নিয়ন্ত্রণ করতে পারি। + +1. নিম্নের কমান্ড রান করে CORS চালু করি: + + ```sh + az storage cors add --methods GET \ + --origins "*" \ + --services b \ + --account-name \ + --account-key + ``` + + এখানে `` এর জায়গায় আমাদের ব্যবহৃত স্টোরেজটির নাম দিতে হবে এবং `` এর পরিবর্তে স্টোরেজ একাউন্টের key দিতে হবে। + + এই কমান্ড যেকোনো ওয়েবসাইটকে (ওয়াইল্ডকার্ড `*` চিহ্ন মানে হলো 'যেকোনো') আমাদের স্টোরেজ অ্যাকাউন্ট থেকে একটি *GET* অনুরোধ করার জন্য অনুমতি দেয়, অর্থাৎ ডেটা পাওয়ার সুযোগ করে দেয়। আর `--services b` মানে হলো শুধুমাত্র ব্লবগুলির জন্য এই সেটিং প্রয়োগ করা হচ্ছে। + +### কাজ - স্টোরেজ থেকে জিপিএস ডেটা লোড করা + +1. `init` ফাংশনের সবগুলো কনটেন্টকে নিম্নের কোড দিয়ে রিপ্লেস করে দিইঃ + + ```javascript + fetch("https://.blob.core.windows.net/gps-data/?restype=container&comp=list") + .then(response => response.text()) + .then(str => new window.DOMParser().parseFromString(str, "text/xml")) + .then(xml => { + let blobList = Array.from(xml.querySelectorAll("Url")); + blobList.forEach(async blobUrl => { + loadJSON(blobUrl.innerHTML) + }); + }) + .then( response => { + map = new atlas.Map('myMap', { + center: [-122.26473, 47.73444], + zoom: 14, + authOptions: { + authType: "subscriptionKey", + subscriptionKey: "", + + } + }); + map.events.add('ready', function () { + var source = new atlas.source.DataSource(); + map.sources.add(source); + map.layers.add(new atlas.layer.BubbleLayer(source)); + source.add(features); + }) + }) + ``` + + আর `` এর জায়গায় আমাদের ব্যবহৃত স্টোরেজের নামটি দিতে হবে আর `` এর পরিবর্তে API key দিতে হবে Azure Maps একাউন্ট এর । + + এখানে বেশ কিছু ঘটনা ঘটছে। প্রথমে, কোডটি আমাদের স্টোরেজ অ্যাকাউন্টের নাম ব্যবহার করে নির্মিত একটি ইউআরএল এন্ডপয়েন্ট ব্যবহার করে আমাদের ব্লব কন্টেইনার থেকে জিপিএস ডেটা নিয়ে আসে। এই ইউআরএল `gps-data` থেকে পুনরুদ্ধার করে, রিসোর্সের ধরন নির্দেশ করে একটি কন্টেইনার (`restype=container`) এবং সমস্ত ব্লব সম্পর্কে তথ্য তালিকাভুক্ত করে। এই তালিকাটি ব্লবগুলি নিজেরা রিটার্ন দেবে না, তবে প্রতিটি ব্লবের জন্য একটি URL রিটার্ন করবে যা ব্লব ডেটা লোড করতে ব্যবহার করা যেতে পারে। + + > 💁 এই ইউআরএলটি আমাদের ব্রাউজারে সমস্ত ব্লবের বিষদ বিবরণ দেখতে পারে। প্রতিটি আইটেমের একটি `Url` প্রপার্টি থাকবে, যার দ্বারা আমরা আমাদের ব্রাউজারেও ব্লবের বিষয়বস্তু দেখতে পারি। + + এই কোডটি তারপর প্রতিটি ব্লব লোড করে, একটি `loadJSON` ফাংশন কল করে, যা পরবর্তীতে তৈরি করা হবে। এটি তখন মানচিত্রের নিয়ন্ত্রণ তৈরি করে এবং `ready` ইভেন্টে কোড যোগ করে। ওয়েব পেজে মানচিত্র প্রদর্শিত হলে এই ইভেন্টকে কল করা হয়। + + প্রস্তুতকৃত ইভেন্টটি একটি Azure Maps ডেটা উৎস তৈরি করে - একটি কন্টেইনার যা GeoJSON ডেটা ধারণ করে যা পরে পপুলেটেড হবে। এই ডেটা সোর্সটি তখন একটি বাবল বা বুদবুদ স্তর তৈরি করতে ব্যবহৃত হয় - এটি GeoJSON এর প্রতিটি বিন্দুকে কেন্দ্র করে মানচিত্রে বৃত্তের একটি সেট তৈরী করে। + +1. `loadJSON` ফাংশনটি `init` ফাংশনের নীচে স্ক্রিপ্ট ব্লক হিসেবে যোগ করিঃ + + ```javascript + var map, features; + + function loadJSON(file) { + var xhr = new XMLHttpRequest(); + features = []; + xhr.onreadystatechange = function () { + if (xhr.readyState === XMLHttpRequest.DONE) { + if (xhr.status === 200) { + gps = JSON.parse(xhr.responseText) + features.push( + new atlas.data.Feature(new atlas.data.Point([parseFloat(gps.gps.lon), parseFloat(gps.gps.lat)])) + ) + } + } + }; + xhr.open("GET", file, true); + xhr.send(); + } + ``` + + এই ফাংশনটি ফেচ রুটিন দ্বারা কল করে, JSON ডেটার মাধ্যমে বিশ্লেষণ করা হয় এবং এটিকে জিওজেসন হিসাবে দ্রাঘিমাংশ এবং অক্ষাংশ স্থানাঙ্ক হিসাবে রূপান্তরিত করা হয়। + একবার বিশ্লেষণ করা হলে, ডেটা একটি জিওজেসন `ফিচার` এর অংশ হিসাবে সেট করা হয়। মানচিত্রটি চালু হবে এবং ডেটা প্লটিং এর পথে ছোট ছোট বাবল উপস্থিত হবেঃ + +1. ব্রাউজারে HTML পেইজটি লোড করি। এটি প্রথমে ম্যাপ লোড করবে, তারপর সকল জিপিএস ডেটা স্টোরেজ থেকে সংগ্রহ করে তা ম্যাপে প্লট করে দিবে। + + ![A map of Saint Edward State Park near Seattle, with circles showing a path around the edge of the park](../../../../images/map-path.png) + +> 💁 সকল কোড পাওয়া যাবে এখানে [code](./code) ফোল্ডারটিতে । + +--- + +## 🚀 চ্যালেঞ্জ + +একটি মানচিত্রে মার্কার হিসেবে স্ট্যাটিক ডেটা প্রদর্শন করতে পারাটা বেশ বড় একটি সাফল্য। টাইমস্ট্যাম্পড JSON ফাইল ব্যবহার করে অ্যানিমেশন যুক্ত করতে এবং সময়ের সাথে চিহ্নিতকারীদের পথ দেখানোর জন্য এই ওয়েব অ্যাপটির কী আরো উন্নয়ন ঘটানো যায়? মানচিত্রের মধ্যে অ্যানিমেশন ব্যবহারের [কিছু নমুনা](https://azuremapscodesamples.azurewebsites.net/) দেওয়া হল। + +## লেকচার-পরবর্তী কুইজ + +[লেকচার-পরবর্তী কুইজ](https://brave-island-0b7c7f50f.azurestaticapps.net/quiz/26) + +## রিভিউ এবং স্ব-অধ্যয়ন + +IoT ডিভাইস নিয়ে কাজ করার ক্ষেত্রে Azure Maps খুবই ভালো একটি ট্যুল। + +* [Azure Maps documentation নিয়ে Microsoft docs](https://docs.microsoft.com/azure/azure-maps/tutorial-iot-hub-maps?WT.mc_id=academic-17441-jabenn) থেকে পড়ে ইউজ কেইস গুলো আমরা দেখতে পারি। +* এছাড়াও Azure Maps নিয়ে আমাদের জ্ঞান আরো বাড়ানোর জন্য আমরা আমাদের জন্য [route finding app তৈরী করতে পারি Azure Maps self-guided learning module ব্যবহার করে](https://docs.microsoft.com/learn/modules/create-your-first-app-with-azure-maps/?WT.mc_id=academic-17441-jabenn) । + +## এসাইনমেন্ট + +[অ্যাপ ডেপ্লয় করা](assignment.bn.md) diff --git a/3-transport/lessons/3-visualize-location-data/translations/assignment.bn.md b/3-transport/lessons/3-visualize-location-data/translations/assignment.bn.md new file mode 100644 index 00000000..e2ed9527 --- /dev/null +++ b/3-transport/lessons/3-visualize-location-data/translations/assignment.bn.md @@ -0,0 +1,13 @@ +# অ্যাপ ডেপ্লয় করা + +## নির্দেশাবলী + +আমাদের অ্যাপটি ডেপ্লয় করার বেশ কয়েকটি উপায় রয়েছে যাতে আমরা এটি সারা বিশ্বের সাথে শেয়ার করতে পারি। গিটহাব পেইজ ব্যবহার করা বা কোন সার্ভিস প্রোভাইডার ব্যবহার করাও যায়। এটি করার একটি দুর্দান্ত উপায় হল Azure Static Web Apps ব্যবহার করা। এইক্ষেত্রে আমাদের ওয়েব অ্যাপ তৈরি করতে হবে এবং [এই নির্দেশাবলী](https://github.com/Azure/static-web-apps-cli) অনুসরণ করে অথবা [এই ভিডিওগুলি](https://www.youtube.com/watch?v=ADVGIXciYn8&list=PLlrxD0HtieHgMPeBaDQFx9yNuFxx6S1VG&index=3) দেখে এটিকে ক্লাউডে স্থাপন করা যায়। + +অ্যাজুর স্ট্যাটিক ওয়েব অ্যাপস ব্যবহার করার একটি সুবিধা হল যে আমরা পোর্টালে যেকোন API কী লুকিয়ে রাখতে পারি, তাই আমাদের সাবস্ক্রিপশন কী কে একটি ভেরিয়েবল হিসাবে রিফ্যাক্টর করার এবং ক্লাউডে সংরক্ষণ করার এই সুযোগটি নিতে পারবো আমরা। + +## এসাইনমেন্ট মূল্যায়ন মানদন্ড + +| ক্রাইটেরিয়া | দৃষ্টান্তমূলক (সর্বোত্তম) | পর্যাপ্ত (মাঝারি) | উন্নতি প্রয়োজন (নিম্নমান) | +| --------- | ------------------ | -------------- | -------------------- | +| |একটি কার্যকরী ওয়েব অ্যাপকে একটি GitHub রেপোতে উপস্থাপন করা হলো, যার সাবস্ক্রিপশন কী ক্লাউডে সংরক্ষিত থাকে এবং একটি ভেরিয়েবলের মাধ্যমে কল করা হয় | একটি কার্যকরী ওয়েব অ্যাপ একটি GitHub রেপোতে উপস্থাপন করা হলো, কিন্তু এর সাবস্ক্রিপশন কী ক্লাউডে সংরক্ষণ করা হয়নি | ওয়েব অ্যাপটিতে বাগ আছে বা সঠিকভাবে কাজ করছেনা | diff --git a/translations/README.bn.md b/translations/README.bn.md index 675f9d94..535547b4 100644 --- a/translations/README.bn.md +++ b/translations/README.bn.md @@ -87,7 +87,7 @@ | 10 | [ফার্ম](../2-farm) | উদ্ভিদের নিরাপত্তা নিশ্চিতকরণ | আইওটি তে নিরাপত্তা সম্পর্কে জানা এবং Key ও Certificate এর সাহায্যে আমাদের উদ্ভিদটিকে কীভাবে সুরক্ষিত রাখা যায় তা শেখা | [উদ্ভিদের নিরাপত্তা নিশ্চিতকরণ](../2-farm/lessons/6-keep-your-plant-secure/translations/README.bn.md) | | 11 | [পরিবহন](../3-transport) | লোকেশন ট্র্যাকিং | আইওটি ডিভাইসে জিপিএস লোকেশন ট্র্যাকিং শেখা | [লোকেশন ট্র্যাকিং](../3-transport/lessons/1-location-tracking/translations/README.bn.md) | | 12 | [পরিবহন](../3-transport) | লোকেশন ডেটা সংরক্ষণ | পরবর্তী সময়ে বিশ্লেষণ বা চিত্রভিত্তিক ডেটা প্রদর্শন (Visualization) এর জন্য আইওটি ডেটা কীভাবে স্টোর করা যায় তা জানা | [লোকেশন ডেটা সংরক্ষণ](../3-transport/lessons/2-store-location-data/translations/README.bn.md) | -| 13 | [পরিবহন](../3-transport) | Visualize location data |মানচিত্রে অবস্থানের ডেটা প্রদর্শন করা এবং মানচিত্রগুলি কীভাবে ২টি মাত্রায় বাস্তব ত্রিমাত্রিক বিশ্বের উপস্থাপন করে সে সম্পর্কে জ্ঞান অর্জন | [Visualize location data](../3-transport/lessons/3-visualize-location-data/README.md) | +| 13 | [পরিবহন](../3-transport) | লোকেশন ডেটা প্রদর্শন |মানচিত্রে অবস্থানের ডেটা প্রদর্শন করা এবং মানচিত্রগুলি কীভাবে ২টি মাত্রায় বাস্তব ত্রিমাত্রিক বিশ্বের উপস্থাপন করে সে সম্পর্কে জ্ঞান অর্জন | [লোকেশন ডেটা প্রদর্শন](../3-transport/lessons/3-visualize-location-data/translations/README.bn.md) | | 14 | [পরিবহন](../3-transport) | Geofences | Geofences সম্পর্কে জানা এবং কীভাবে এটি ব্যবহার করে সাপ্লাই চেইনের বিভিন্ন পর্যায়ের বাহনগুলো যখন গন্তব্যের কাছাকাছি পৌঁছায় তখন এলার্ট দেয়া যায় তা শেখা | [Geofences](../3-transport/lessons/4-geofences/README.md) | | 15 | [উৎপাদন](../4-manufacturing) | Train a fruit quality detector | ক্লাউডের ছবি শ্রেণিবদ্ধকরণ মডেলকে (Image Classifier) ফলের মান সনাক্ত করতে কীভাবে প্রশিক্ষিত করতে হবে সে সম্পর্কে জানা | [Train a fruit quality detector](../4-manufacturing/lessons/1-train-fruit-detector/README.md) | | 16 | [উৎপাদন](../4-manufacturing) | Check fruit quality from an IoT device | আইওটি ডিভাইসে ফলের গুণগত মান সনাক্তকারী ব্যবহার | [Check fruit quality from an IoT device](../4-manufacturing/lessons/2-check-fruit-from-device/README.md) |