แสดงบทความที่มีป้ายกำกับ Android แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ Android แสดงบทความทั้งหมด

วันพฤหัสบดีที่ 6 กรกฎาคม พ.ศ. 2560

วิธีการ Parse JSON ขนาดใหญ่ใน Android

วิธีการ Parse JSON ขนาดใหญ่ใน Android

ยามเช้าในวันที่อากาศไม่ค่อยจะสดใสวันหนึ่ง ผมได้รับแจ้งจาก User ผู้ใช้งานแอป miimai ว่าเกิดปัญหาในการใช้งานบางอย่างขึ้น และได้ Report ข้อผิดพลาดมาให้ผมเรียบร้อยแล้ว ผมก็เลยรีบไปเปิดดูข้อมูลในทันใดและพบว่าเป็น OutOfMemoryError ตอนที่เห็นทีแรกยังค่อยข้างงงอยู่บ้างว่ามันเป็นไปได้ยังไง ปกติแล้วแอปแทบจะไม่ใช้ Memory เลยด้วยซ้ำ
ผมค่อยๆ ไล่ดูบรรทัดที่เกิดปัญหาและพบว่ามันมาจากบรรทัดนี้

1
new JSONObject(resposeStr)
Constructor ของ JSON จะทำการรับข้อมูล JSON ที่อยู่ในรูปของ String (ผมแปลงเป็น String ก่อนที่จะส่งข้อมูลมา) มาแปลงให้อยู่ในรูปของ Object แบบ JSON ซึ่งดูผ่านๆ ก็ไม่ได้มีปัญหาอะไรตรงไหน
ปัญหาที่ผมเจอมันอยู่ตรงที่ว่า เครื่องของ User เป็นเครื่องเก่าและ Memory ต่ำพอสมควร ประกอบกับข้อมูลที่ผมส่งไปเป็นข้อมูลหนังสือประมาณ 20,000 กว่าเล่ม (รวมๆ แล้วก็หลาย MB อยู่) ซึ่งการแปลง String ให้เป็น Object นี้จะแปลง String ทั้งหมดเลย และใช้ Memory สูงมาก (หลายคนบอกว่าน่าจะประมาณ 3–5 เท่าของขนาดเดิม)
โอเคครับ รับทราบปัญหากันเป็นที่เรียบร้อยแล้ว คำถามถัดไปที่ควรจะถามคือ จะแก้ยังไงดี
ผมลองหาข้อมูลดู ก็มีบางคนบอกว่า จริงๆ แล้ว JSON Protocol เนี่ยไม่ควรนำมาใช้ในการส่งข้อมูลจำนวนมากๆ (เพราะมัน Parse แล้ว Memory บวมอย่างที่เห็น) ควรจะใช้วิธีการอื่นมากกว่า
ซึ่งก็ดูมีเหตุผลนะ แต่ในเมื่อแอปมันออกแบบมาแบบนี้แล้ว ถ้าแก้ทีนี่ยาวเลยนะ มีวิธีไหนมั้ยที่ยังใช้ JSON อยู่ แต่ไม่ให้มันใช้หน่วยความจำเกินแบบนี้อีก ซึ่งพอลองหาๆ ไปก็เจอว่าวิธีการคือค่อยๆ Parse ทีละส่วน (หลายที่เรียกมันว่า Streaming) มันก็จะลดการใช้หน่วยความจำจำนวนมากในคราวเดียวได้ โดยไลบลาลีที่สามารถนำมาใช้ได้ก็อย่างเช่น Jackson และ GSON
ด้วยอคติส่วนตัว ผมจึงลองเลือก GSON มาใช้อย่างไม่มีเหตุผลใดๆ
วิธีการใช้หลักๆ ก็คือเราต้องเขียนให้มัน Parse ข้อมูลเอาเองว่าจะมีข้อมูลอะไรยังไงบ้าง เช่นสมมติว่าข้อมูลของผมเป็นหนังสือหลายๆ เล่มแล้วกัน
?
1
2
3
4
5
6
7
8
9
10
11
[
  {
    id: 20,
    name: "Dragon Ball",
    author: "TORIYAMA Akira"
  },
  {
    ...
  },
  ...
]
ก็ให้สร้างฟังก์ชันสำหรับ Parse ตัวข้อมูลหนังสือขึ้นมาก่อน โดยมีพารามิเตอร์เป็น JsonReader
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public Book readBook(JsonReader reader) throws IOException {
    Book book = new Book();
 
    reader.beginObject();
    while (reader.hasNext()) {
        String name = reader.nextName();
        switch (name) {
            case "id":
                book.setId(reader.nextInt()); break;
            case "name":
                book.setName(reader.nextString()); break;
            case "author":
                book.setAuthor(reader.nextString()); break;
            default:
                reader.skipValue();
        }
    }
    reader.endObject();
    return book;
}
ฟังก์ชันนี้ก็จะมีหน้าที่สำหรับ Parse ข้อมูลหนังสือแต่ละเล่มโดยเฉพาะ จากนั้นก็สร้างอีกฟังก์ชันสำหรับ Parse ข้อมูลอาร์เรย์ของหนังสือ
?
1
2
3
4
5
6
7
8
9
10
11
public List<book> readBookArray(JsonReader reader) throws  IOException {
    List<book> books = new ArrayList<>();
 
    reader.beginArray();
    while (reader.hasNext()) {
        books.add(readBook(reader));
    }
    reader.endArray();
    return books;
}
</book></book>
อารมณ์ก็ง่ายๆ ประมาณนี้แหละครับ เหลือแค่แปลง String ให้เป็น JsonReader แล้วก็ส่งเข้ามาเท่านั้นเอง
1
2
InputStream stream = new ByteArrayInputStream(response.getBytes(Charset.forName("UTF-8")));
JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
เท่านี้ก็เป็นอันเรียบร้อยครับ ผมก็เลยลองเทสดูด้วยว่ามันใช้ Memory ต่างกันจริงๆ รึเปล่า เริ่มจากวิธีแรก
วิธีนี้คือใช้ JSONObject แบบตรงๆ เลย ถ้าดูก็จะเห็นว่ามันกิน Memory เยอะอยู่แป๊ปเดียวก็จริง แต่ก็เพียงพอให้ Error แล้วครับ ช่วงพีคสุดคือกินไป 50 กว่าๆ MB
ทีนี้ผมลองใช้ GSON แล้ว Parse แบบเองดู
กินสูงสุดเหลือแค่ 30 กว่า MB เอง ใช้ได้เลยแฮะ
ถ้าอยากลองใช้กันดู ก็ไปดูรายละเอียดที่ https://github.com/google/gson เลยนะครับ น่าจะละเอียดกว่าผมอธิบายแน่ๆ

วันจันทร์ที่ 27 กุมภาพันธ์ พ.ศ. 2560

วิธีรัน Project Android ผ่าน AVD หรือ Emulator (Android - Eclipse - Emulator)

Run Project Android บน Eclipse ผ่าน AVD หรือ Emulator หลังจากได้สร้าง Project ของ Android ผ่านโปรแกรม Eclipse เรียบร้อยแล้ว ต่อไปเราจะมาทำการ Config โปรแกรม Eclipse เพื่อให้นำโปรแกรมที่เราเขียนไว้นั้น แสดงผลบน AVD หรือ Emulator

ติดตั้ง AVD - Android Virtual Device Manager จำลอง OS ของ Android (Emulator)


สร้างโปรเจค Android Create New Project บนโปรแกรม Eclipse (Android Project)



วิธีการรัน Android บน AVD หรือ Emulator

เปิดโปรแกรมที่ได้สร้างไว้เรียบร้อยแล้ว

Android Eclipse Run AVD Emulator

โปรเจคที่ได้สร้างไว้เรียบร้อย สามารถอ่านได้ที่หัวข้อ Create New Android Project

Android Eclipse Run AVD Emulator

ไปที่เมนู Run -> Configurations...

Android Eclipse Run AVD Emulator

หรือคลิกข้าง ๆ เครื่องหมาย Run ดังรูป

Android Eclipse Run AVD Emulator

จะแสดงหน้าจอของ Run Configurations ให้คลิกที่ New ดังภาพลูกศรบอก

Android Eclipse Run AVD Emulator

ภายใต้ Tab ชื่อ Android สร้างชื่อ Project Name และก็ลือก Project Name ดังภาพ

Android Eclipse Run AVD Emulator

เลือก Project Name ปัจจุบันคือ HelloWorld

Android Eclipse Run AVD Emulator

ภายใต้ Tab ของ Target ให้เลือกรุ่นและ Version ของ Android Emualtor และก็คลิกที่ Run

Android Eclipse Run AVD Emulator

ในครั้งแรกอาจจะโหลดนานนิดหนึ่ง เพราะตัว Emulator กำลัง Boot เข้าหน้าจอ OS หลัก

Android Eclipse Run AVD Emulator

หลังจากโหลดเรียบร้อยแล้วการใช้งาน Emulator ก็เหมือนกับหน้าจอของ SmartPhone ทั่ว ๆ ไป คือจะต้อง Slide เพื่อปลดล็อก โดย Android จะมีค่า Default คือการกดแล้ว Slide ไปทางขวา

Android Eclipse Run AVD Emulator

หลังจากปลดล็อกแล้วโปรแรมก็จะแสดงหน้าจอโปรแกรมที่เราได้เขียนไว้

สำหรับหัวข้อนี้จะเป็นเพียงการเขียนโปรแกรมง่าย ๆ เท่านั้น สำหรับหัวข้อถัดไป จะเป็นการเขียนโปรแกรมให้มีความสามารถมากกว่าเดิม เช่นการรับข้อมูลจกา User และการตอบสนอง User

สร้างโปรเจค Android Create New Project บนโปรแกรม Eclipse (Android Project)

Android Create New Project บนโปรแกรม Eclipse หลังจากทีได้ติดตั้งโปรแกรม สำหรับการพัฒนา Android บนโปรแกรม Eclipse เรียบร้อยแล้ว หัวข้อนี้เราจะทดสอบการสร้าง หรือ Create New Android Project บนโปรแกรม Eclipse แบบง่าย ๆ ทำความเข้าใจกับโครงสร้างพื้นว่าประกอบด้วยไฟล์ และขั้นตอนใดบ้าง

รู้จักกับ Android คืออะไร ? จะเขียนโปรแกรมบนแอนดรอยด์จะต้องติดตั้ง Software อะไรบ้าง ?



เปิดโปรแกรม Eclipse

Eclipse Create New Android Project

เลือกเมนู File -> New -> Android Application Proejct

Eclipse Create New Android Project

กำหนด Application Name , Project name , Package Name และก็ Build SDK : ให้เลือก Version ของ Android แนะนำให้เลือก ที่ได้ทำการติดตั้ง Emulator ไว้ (ติดตั้ง Android AVD Emulator)

Eclipse Create New Android Project

ขั้นตอนนี้จะเป็นการสร้าง Icons ของ App สามารถปรับแต่งได้ตามความต้องการ หรือจะกำหนดเป็นค่า Default ไปก่อนก็ได้ โดยให้คลิก Next เพื่อไปยังขั้นตอนถัดไปได้เลย

Eclipse Create New Android Project

เลือก Create BlankActivity และ Next เพื่อไยังขั้นตอนถัดไป (Activity คืออะไร จะได้อธิบายในขั้นตอนถัดไป)

Eclipse Create New Android Project

กำหนดชื่อ Activity ถ้าไม่ต้องการแก้ไข สามารกำหนดเป็นค่า Default และเลือก Finish

Eclipse Create New Android Project

กรณีที่แจ้งดังภาพให้ทำการ Install และ Upgrade ให้เรียบร้อยก่อน

Eclipse Create New Android Project

เลือก Accept และ Install

Eclipse Create New Android Project

กำลัง Install

Eclipse Create New Android Project

เลือก Finish


หน้าจอหลักของ Project
ในการพัฒนาโปรแกรม Android ด้วยโปรแกรม Eclipse นั้น สามารถพัฒนาผ่าน UI ที่เป็น GUI ได้เช่นเดียวกัน ซึ่งจะช่วยให้การเขียนโปรแกรมนั้นง่ายและสะดวกยิ่งขึ้น และในการสร้างโปรเจคแต่ล่ะครั้งตัวโปรแกรม Eclipse จะทำการ include library ที่เป็นค่า Default และจำเป็นต่อการพัฒนาโปรแกรมนั้นหลายตัว แต่ที่ใช้และเราจะต้องสนใจในขั้นตอนนี้ให้ดูแค่ 2 ตัวคือ

- MainActivity.java
- activity_main.xml


โดยชื่อไฟล์อาจจะขึ้นอยู่กับขั้นตอนการสร้าง Project (ดูได้จากขั้นตอนก่อนหน้านี้)

คำอธิบาย activity_main.xml กับ MainActivity.java

- activity_main.xml จัดเก็บไว้ที่ /res/layout/ คือจะเก็บ resource ที่เป็น User Interface ที่ได้จากการออกแบบหน้าจอต่าง ๆ โดยเมื่อเราทำการลาก Widgets หรือ Element ต่าง ๆ เข้าไปใน Interface ก็จะมีการสร้าง Tag ต่าง ที่เป็น Widgets หรือ Element ที่อยู่ในรูปแบบ XML ลงในไฟล์นี้ เช่น

activity_main.xml
01.<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
03.android:layout_width="match_parent"
04.android:layout_height="match_parent" >
05. 
06.<TextView
07.android:id="@+id/textView1"
08.android:layout_width="wrap_content"
09.android:layout_height="wrap_content"
10.android:layout_centerHorizontal="true"
11.android:layout_centerVertical="true"
12.android:padding="@dimen/padding_medium"
13.android:text="@string/hello_world"
14.tools:context=".MainActivity" />
15. 
16.</RelativeLayout>


โดยในการสร้าง Project แต่ล่ะครั้งจะต้องมีไฟล์ทีเป็น Activity อย่างน้อย 1 ตัว และใน Project หนึ่ง ๆ สามารถมีได้หลาย Activity ขึ้นอยู่กับว่าโปรแกรมจะแยกหน้าจอการทำงานเป็นแบบใดบ้าง

- MainActivity.java จัดเก็บไว้ที่ /src/com/helloworld/ มีหน้าที่ควบคุมการทำงานของไฟล์ที่เป็น activity_main.xml ซึ่งถ้าจะเข้าใจง่าย ๆ คือ จัดเก็บ Event การทำงาน ต่าง ๆ ของ Widgets หรือ Element ที่อยู่ใน activity_main.xml

MainActivity.java
01.package com.helloworld;
02. 
03.import android.os.Bundle;
04.import android.app.Activity;
05.import android.view.Menu;
06. 
07.public class MainActivity extends Activity {
08. 
09.@Override
10.public void onCreate(Bundle savedInstanceState) {
11.super.onCreate(savedInstanceState);
12.setContentView(R.layout.activity_main);
13.}
14. 
15.@Override
16.public boolean onCreateOptionsMenu(Menu menu) {
17.getMenuInflater().inflate(R.menu.activity_main, menu);
18.return true;
19.}
20. 
21. 
22.}


คำอธิบายเบื้องต้น
1.@Override
2.public void onCreate(Bundle savedInstanceState) {
3.super.onCreate(savedInstanceState);
4.setContentView(R.layout.activity_main);
5.}


Event onCreate คือมีการโหลดข้อมูลแรกสุดจะเห็นว่ามีการโหลด layout ของ activity_main ซึ่งก็เป็น activity_main.xml นั้นเอง

Eclipse Create New Android Project

คำอธิบายหน้าจอ
1. Package ที่เป็น Activity ของไฟล์ java
2. Package ที่เป็น Activity ของไฟล์ xml
3. Palette เป็น Toolbox หรือ Widgets/Element ต่าง ๆ จะนำไปใช้ใน Android Activity Form
4. เป็น Android XML Layout Activity หน้าจอของโปรแกรมที่ต้องการ Design ตัวนี้เป็น activity_main.xml คือสามารถเขียนได้จากมุมมองของ XML หรือ Graphic Layout ก็ได้
5. Outline คือ รายการ ของ Widgets หรือ Element ที่อยู่ใน Android Activity Form

Eclipse Create New Android Project

การเปิดปิดไฟล์ สามารถคลิกได้ที่เครื่องหมาย กากบาต X

Eclipse Create New Android Project

กรณีที่ไฟล์ต่าง ๆ ถูกปิดไปหมดก็สามารถเรียกขึ้นมาใหม่ได้เช่นเดียวกัน

Eclipse Create New Android Project

การเปิดไฟล์ที่เป็น .java

Eclipse Create New Android Project

การเปิดไฟล์ที่เป็น activity ของ xml

Eclipse Create New Android Project

สามารถสลับการทำงานระหว่างที่เป็น Graphical Layout หรือ XML ได้ ดังรูป


ทดสอยการเรียกใช้ Toolbox และการสร้าง Element

Eclipse Create New Android Project

ทดสอบการลาก Element ลงใน Android Activity XML Layout ในตัวอย่างจะลาก Plan Text ลงใน Form

สังเกตุว่าเมื่อมีการลาก Element ที่มีชื่อว่า Plan Text ลงใน Android Activity Form ในส่วนของ Outline จะมีการสร้างรายการ Element แสดงไว้ด้วย

Eclipse Create New Android Project

กรณีที่มีการสร้าง Element ลงใน Activity Form ต่าง ๆ ถ้ามี Warning หรือ Error จะต้องทำการแก้ไขให้เรียบร้อย ในตัวอย่างจะมี Warning ชื่อว่า

This text field does not specify and inputType or a hine


มุมมองของ XML

Eclipse Create New Android Project

กรณีที่ Element มี Error หรือ Warning ในส่วนของ XML ก็จะมีการแจ้งข้อผิดพลาดด้วย


Eclipse Create New Android Project

สำหรับการแก้ไขขึ้นอยู่กับ Error หรือ Warning Message ว่าอะไร ซึ่งในตัวอย่างน่าจะหมายถึง Plan Text ไม่มีการกำหนด inputType

ให้คลิกขวาที่ Element เลือก Show In -> Properties ดังรูป


Eclipse Create New Android Project

หรือสามารถเลือกจาก Properties ที่อยู่ข้างล่าง

Eclipse Create New Android Project

กำหนด Input Type ให้เป็น text

Eclipse Create New Android Project

ลองใส่ข้อความให้กับ Plan Text ในที่นี้จะลองใส่คำว่า "Welcome to My App"

Eclipse Create New Android Project

จากนั้นให้ไปที่เมนู Proejct เลือก Clean

Eclipse Create New Android Project

ยืนยันการ Clear ข้อผิดพลาดต่าง ๆ ที่ได้เกิดขึ้นหลังจากมีการแก้ไขข้อผิดพลาดแล้ว

Eclipse Create New Android Project

กลับมายังหน้าจอก็ไม่มี Warning หรือ Error แล้ว (กรณีที่ยังไม่หาย ลองปิดหน้าจอ Activity ของ XML และเปิดขึ้นมาใหม่)

สำหรับพื้นฐานกับหน้าจอของ Android กับโปรแกรม Eclipse พื้นฐานทั่วไปก็มีอยู่เท่านี้ สำหรับหัวข้อถัดไปจะเป็นการ รันโปรแกรม Android ผ่าน Emulator

วิธีรัน Project Android ผ่าน AVD หรือ Emulator (Android - Eclipse - Emulator)




เพิ่มเติม 1
จากหน้าจอจะมี Warning ที่เป็น Package Explorer ว่า

Code
The import android.support.v4.app.NavUtils is never used
The import android.view.MenuItem is never used


ให้แก้ไขตามนี้

The import android.support.v4.app.NavUtils is never used

The import android.support.v4.app.NavUtils is never used




เพิ่มเติม 2
จากหน้าจอจะมี Warning ใน Element ว่า

Code
[I18N] Hardcoded string Welcome to My App, should use @string resource


ให้แก้ไขตามนี้

Hardcoded string Welcome to My App, should use @string resource

Hardcoded string 'xxx', should use @string resource - Android Eclipse

ตอนที่ 5 : ติดตั้ง AVD - Android Virtual Device Manager จำลอง OS ของ Android (Emulator)

Install ติดตั้ง AVD หรือ Android Virtual Device Manager เป็น Emulator สำหรับใช้ในการรันโปรแกรมที่เขียนด้วย Android โดยตัว Emulator จะจำลอง Virtual OS ของ Android ใน Version ต่าง ๆ มาไว้บนเครื่อง PC ของเรา และเราสามารถใช้ Emulator ของ Android นี้ในการทดสอบโปรแกรม หรือรันโปรแกรมต่าง ๆ ที่ได้ ใน Emulator ของ Android สามารถติดตั้งมาพร้อมกับ Package ของ Android SDK และสามารถเรียกใช้งานได้ในทันที

Install ติดตั้ง Android SDK และการปรับแต่ง Eclipse สำหรับการเขียนโปรแกรมด้วย Android



Android AVD - Android Virtual Device Manager (Emulator)

หน้าจอตัวอย่างของ Emulator สำหรับพัฒนาโปรแกรมบน Android


การปรับแต่ง AVD - Android Virtual Device Manager (Emulator)
ในการปรับแต่ง AVD หรือ Emulator สามารถเรียกได้จากโฟเดอร์ที่ได้ทำการติดตั้ง Android SDK ที่ได้จากขั้นตอนก่อนหน้านี้

C:\Android\android-sdk\AVD Manager.exe


หรือจะเรียกจากโปรแกรม Eclipse โดยคลิกที่ Open the Android Virtual Device Manager

Android AVD - Android Virtual Device Manager (Emulator)

คลิกที่ Open the Android Virtual Device Manager ดังภาพ

Android AVD - Android Virtual Device Manager (Emulator)

กรณีที่ Error นี้ Location of the Android SDK has not been set up in the preferences ให้แก้ปัญหาตามนี้

Android AVD - Android Virtual Device Manager (Emulator)

ให้ไปที่เมนู Windows -> Preferences

Android AVD - Android Virtual Device Manager (Emulator)

ตรงที่เป็น SDK Location ให้กำหนด Path ที่เราได้ติดตั้ง Android ซึ่งในที่นี้คือ C:\Android\android-sdk\

Android AVD - Android Virtual Device Manager (Emulator)

หน้าจอของ Android Virtual Device Manager ให้คลิกที่ New เพื่อสร้าง Emulator ขึ้นมาใหม่

Android AVD - Android Virtual Device Manager (Emulator)

ในช่องแรกให้กำหนดรุ่นของ AVD และใน ช่องที่สองจะเป็น Version หรือรุ่นของ Android OS และกำหนดค่าอื่น ๆ ดังภาพ จากนั้นก็ให้คลิกที่ Create AVD

Android AVD - Android Virtual Device Manager (Emulator)

จะได้ AVD หรือ Emulator ของ Android ขึ้นมาดังภาพ ให้หทดสอบโดยคลิกที่ Start

Android AVD - Android Virtual Device Manager (Emulator)

คลิกที่ Launch

Android AVD - Android Virtual Device Manager (Emulator)

กำลังโหลด Emulator for AVD

Android AVD - Android Virtual Device Manager (Emulator)

หน้าจอ AVD Emulator ของ Android อันนี้กำลังโหลด OS อยู่
Android AVD - Android Virtual Device Manager (Emulator)

หลังจากโหลดเสร็จสิ้น ก็จะปรากฏหน้าจอดังรูป สามารถทำการคลิกเพื่อทดสอบอื่น ๆ ได้ อันนี้จะลองเปิด Browser ดู

Android AVD - Android Virtual Device Manager (Emulator)

ทดสอบเล่นเน็ตโดยเข้า http://m.thaicreate.com ดู หรือสามารถทดสอบส่วนอื่น ๆ ได้เช่นเดียวกัน




ติดตั้ง AVD หรือ Emulator รุ่นอื่น ๆ

Android AVD - Android Virtual Device Manager (Emulator)

ให้คลิกที่ New เพื่อสร้าง AVD ขึ้นมาใหม่

Android AVD - Android Virtual Device Manager (Emulator)

กำหนดค่าเช่นเดิม เลือกรุ่นของ OS ของ Android ด้วย

Android AVD - Android Virtual Device Manager (Emulator)

ลอง Start ดู

Android AVD - Android Virtual Device Manager (Emulator)

คลิกที่ Launch

Android AVD - Android Virtual Device Manager (Emulator)

กำลังโหลด

Android AVD - Android Virtual Device Manager (Emulator)

กำลังโหลด

Android AVD - Android Virtual Device Manager (Emulator)

ทดสอบการเล่น App

Android AVD - Android Virtual Device Manager (Emulator)

เปิด Web Browser

Android AVD - Android Virtual Device Manager (Emulator)

ทดสอบ Browser หรือจะทดสอบสอบส่วนอื่น ๆ ได้เช่นเดียวกัน

Laravel

  Laravel Framework คือ PHP Framework ตัวหนึ่งที่ถูกออกแบบมาเพื่อพัฒนาเว็บแอพพลิเคชั่นต่างๆ ในรูปแบบ MVC (Model Views Controller) ซึ่งมีการแ...