Menu

Friday, July 31, 2020

[Android - Espresso] ความแตกต่างระหว่าง Espresso และ UI Automator Testing Framework
[Android - Espresso] What is Different between Espresso and UI Automator Testing Framework

Espresso และ UI Automator ทั้ง 2 ตัวเป็น Testing framework สำหรับ Android เพื่อใช้ทดสอบ User Interface (UI) เหมือนกัน

สิ่งที่แตกต่างกัน คือ ความสามารถในการทดสอบ Application

  • Espresso มีความสามารถในการทำ action ได้เหมือนกับที่เราทำกับ application ของเรา รวมถึงการตรวจสอบค่าของ component ต่างๆ  จึงเหมาะสำหรับการทดสอบ UI ของ application ที่เราเขียนขึ้นมาเอง แต่มีข้อจำกัด คือ ไม่สามารถจำลองการกระทำบน Application อื่นหรือ system ได้ 
  • UI Automator มีความสามารถในการทำ action ได้เหมือนกับที่เราทำกับ device ของเรา จึงเหมาะสำหรับการทดสอบ UI ที่มีการใช้งานข้ามไปมาระหว่าง system และ application อื่น แต่มีข้อจำกัดคือ ไม่เหมาะกับการตรวจสอบค่าของ component 
หมายเหตุ เราสามารถใช้ Espresso และ UI Automator ร่วมกันในการเขียนเทสได้ 

[Android - Espresso] โปรแกรมใน Android SDK ที่จำเป็นต้องใช้ในการเขียนเทสด้วย Espresso Framework
[Android - Espresso] Necessary Programs in Android SDK that Use to Write Test in Espresso Framework

โปรแกรมใน Android SDK ที่จำเป็นต้องใช้ในการเขียนเทส ประกอบด้วยโปรแกรมดังนี้
  • Android Debug Bridge (adb) เป็น command-line tool ที่ช่วยให้เราสามารถติดต่อสื่อสารกับอุปกรณ์ของเราได้ เช่น การรันคำสั่ง การติดตั้งแอพ เป็นต้น
    • Path ของ adb อยู่ที่ {android_sdk}/platform-tools/adb
    • คำสั่งที่ใช้บ่อยมีดังนี้
      • คำสั่งสำหรับแสดงรายการ devices ที่ connect อยู่กับเครื่องของเรา
        adb devices
      • คำสั่งสำหรับ map port จาก devices ที่ connect อยู่กับเครื่องของเรา
        adb reverse tcp:8081 tcp:8081
  • UI Automator viewer (uiautomatorviewer) เป็นเครื่องมือที่ช่วยสแกนและวิเคราะห์ UI component ที่แสดงอยู่บนหน้าจอ Device เราสามารถใช้เครื่องมือนี้ในการตรวจสอบ layout และ properties ของ component ที่เราต้องการได้
    • Path ของ uiautomatorviewer อยู่ที่ {android_sdk}/tools/bin/uiautomatorviewer
หมายเหตุ {android_sdk} บน Windows จะอยู่ที่ C:/Users/{username}/AppData/Local/Android/Sdk/
ตัวอย่างเช่น
C:\Users\puthipong\AppData\Local\Android\Sdk\platform-tools
C:\Users\puthipong\AppData\Local\Android\Sdk\tools\bin

Thursday, July 30, 2020

[Ubuntu] การสร้างพื้นที่ Virtual Memory บน Ubuntu
[Ubuntu] How to Create Virtual Memory on Ubuntu

Virtual memory เป็นหน่วยความจำบน Harddisk ที่ถูกใช้เสมือนว่าเป็น RAM โดยทำหน้าที่เก็บข้อมูลที่เป็น inactive page จาก RAM ในกรณีที่หน่วยความจำ RAM เต็ม

Swap เป็น Virtual memory บน Ubuntu

พื้นที่สำหรับ Swap นี้เป็นได้ทั้ง swap partition หรือ swap file โดยทั่วไปเมื่อรันบน Virtual machine จะไม่มี swap partition ให้ใช้งาน จึงเหลือเพียงทางเลือกเดียวคือ swap file

ขั้นตอนการสร้าง swap file เป็นดังนี้
  1. สร้างไฟล์พร้อมกำหนดขนาดพื้นที่ของไฟล์ตามขนาดที่ต้องการ
    sudo fallocate -l 1G /swapfile
    
  2. เปลี่ยน permission ของไฟล์ให้ root มีสิทธิ์ในการอ่านแและเขียนเท่านั้น
    sudo chmod 600 /swapfile
    
  3. กำหนดให้ใช้ไฟล์ข้างต้นเป็นพื้นที่สำหรับ Swap
    sudo mkswap /swapfile
    
  4. เปิดใช้งาน swap file
    sudo swapon /swapfile
    

Tuesday, July 7, 2020

[AWS - S3] การกำหนดนโยบาย เพื่อบล็อกการเข้าถึง S3 bucket ที่ไม่ได้มาจาก HTTP Referer ที่กำหนด
[AWS - S3] S3 Bucket Policy: Restricting Access to a Specific HTTP Referer

ในมุมกลับกันจากบทความเรื่อง [AWS - S3] การกำหนดนโยบาย เพื่ออนุญาตให้เข้าถึงไฟล์ใน S3 bucket ด้วย HTTP Referrer ที่กำหนด เราสามารถใช้ HTTP Referrer นี้ในบล็อกการเข้าถึงข้อมูลใน S3 ได้เช่นกัน

การบล็อกไม่ให้เข้าถึงข้อมูล หากไม่ได้เรียกมาจาก Referrer ที่ระบุ เราสามารถกำหนด bucket policy ของ S3 ดังนี้
{
    "Version": "2012-10-17",
    "Id": "http referer policy example",
    "Statement": [
        {
            "Sid": "Block get requests originating from other than www.example.com and example.com.",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::examplebucket/*",
            "Condition": {
                "StringNotLike": {
                    "aws:Referer": [                        
                         "http://www.example.com/*",
                         "http://example.com/*"

                    ]
                }
            }
        }
    ]
}
หมายเหตุ เราสามารถกำหนด policy ข้างต้น ร่วมกับการใช้ Presigned URL เพื่อเพิ่มความปลอดภัยของข้อมูลใน S3 ได้

[AWS - S3] การกำหนดนโยบาย เพื่ออนุญาตให้เข้าถึงไฟล์ใน S3 bucket ด้วย HTTP Referrer ที่กำหนด
[AWS - S3] S3 Bucket Policy: Allowing Access to a Specific HTTP Referrer

โดยปกติแล้ว เราจะไม่อนุญาตให้เรียกข้อมูลใน S3 แบบ public ซึ่งใครจะเรียกก็ได้!!! เพื่อป้องกันการรั่วไหลของข้อมูล

อย่างไรก็ตาม การใช้งานบางอย่างจำเป็นต้องเรียกใช้ข้อมูลใน S3 แบบ public เนื่องจากไม่สามารถสร้าง Presigned URL ได้

วิธีเพิ่มความปลอดภัยของข้อมูลสำหรับกรณีนี้ คือ เพิ่มการตรวจสอบค่า HTTP Referrer ที่เรียกมายัง S3 เพื่อกำหนดสิทธิ์การเข้าถึงไฟล์ใน bucket

หมายเหตุ HTTP Referrer เป็นค่าอ้างอิงของ domain ที่ส่งคำร้องมายัง server