(English) Bug of the month: Array key!!! by

30
Mar
0

เตือนความจำเกี่ยวกับข้อผิดพลาดในช่วงที่ผ่านมา เรื่องที่เจอเยอะที่สุดก็อย่างที่หัวข้อบอกครับ
ด้วยความที่ง่ายใส่ key เข้าไปได้โดยไม่ต้องผ่านการเช็คของ editor ก่อให้เกิดบัคหลายๆ อย่างตามมาอย่างไม่คาดฝัน
ตัวอย่างเช่น
$each['type']==”armor” กับการวางพลาดเป็น $each['type'=="armor"] ก่อให้เกิดบัคที่ใส่เกราะยังไงก็ไม่ได้สักที
ก้อนข้อมูลที่อยู่ลึกลงไปหลายๆ ชั้นก็ก่อปัญหาได้เช่นกัน

วิธีป้องกันเบื้องต้น คือการใช้ object แทน และการ select เฉพาะ field ที่ใช้จริง แทนที่กับ select * เพื่อให้มีข้อมูลอ้างอิงไว้ดูผ่านใน code

วิธีติดตั้งปลั๊กอินของ OneSignal ไปยัง Unity by

29
Feb
1

เอกสารฉบับภาษาอังกฤษ วิธีการติดตั้งโดยบล๊อกนี้จะแนะนำให้เป็นภาษาไทยเข้าใจกันได้ง่ายขึ้น

  1. เริ่มด้วยโหลดปลั๊กอินตามลิงค์ 1.1
  2. ทำการ import package โดยเลือกจากเมนูด้านบน Assets เลือก Import Package เลือก Custom Package
  3. จะมีหน้าจอแสดงรายละเอียดของ package ให้กดปุ่ม import
  4. วางจุดสำหรับให้ OneSignal เริ่มทำงานโดยใช้คำสั่ง OneSignal.Init(“1st parameter”,’2nd parameter”,HandleNotificationFunction); โดยถ้ามี config สำหรับการจะเลือกรับหรือไม่ก็นำ if มาครอบบรรทัดนี้เอาไว้
  5. แก้พารามิเตอร์ของ init โดย 1st = OneSignal App Id, 2nd = Google Project number
  6. บล๊อกนี้จะแนะนำเพิ่มเติมสำหรับ android โดยให้แก้ไข AndroidManifest.xml ที่อยู่ใน Plugins/Android/OneSignalConfig
  7. แทนที่ ${manifestApplicationID} ด้วย Android package name ต้องไม่มี – ขั้นกลาง จะมีให้แก้อยู่สามที่
  8. นำ Icon ไปใส่ไว้ใน folder ต่างๆ ที่อยู่ภายใต้Assets\Plugins\Android\OneSignalConfig\res
  9. ให้ตั้งชื่อรูปหลักว่า ic_stat_onesignal_default และ ic_onesignal_large_icon_default สำหรับรูปใหญ่
  10. สามารถทดลองส่งข้อความจาก Server ได้ โดยแอปจะต้องถูกเปิด และถูกพักไว้อยู่ จึงจะแสดงการแจ้งเตือน

วิธีใช้งาน Helper และ View สำหรับสร้าง Table by

28
Jan
0

สำหรับการเขียนโปรแกรม Back-end บางทีก็ต้องชั่งน้ำหนักระหว่างภาษาว่าใช้ภาษาไหนมากกว่ากัน ซึ่งก็ขึ้นอยู่กับความถนัดของแต่ละคนด้วย
ตัวอย่างนี้แสดงให้เห็นวิธีใช้ Codeigniter helper และ View โดยเน้นไปทาง ฝั่ง CI มากกว่า HTML
$this->load->helper('html');
$this->load->helper('url');
$this->load->library('table');
$this->table->set_template(['table_open' => '<table border="1">"]);
$this->table->set_caption('News List');
$this->table->set_heading('Logo', 'Subject', 'Publish date');
foreach ($this->CI->db->get('news')->result_array() as $row) {
$this->table->add_row(empty($row['logo']) ? ' ' : img(base_url() . 'assets/images/default/news_logo/' . $row['logo']), $row['subject'], $row['publish_date']);
}
$data['news_list'] = $this->table->generate();
$this->load->view('master/news', $data);

อธิบายคำสั่งสำคัญได้ดังนี้ครับ

  • $this->table->set_template ใช้สำหรับกำหนดลักษณะของตารางโดยใส่ config ต่างๆ เป็น array ลงไป
  • $this->table->set_caption ใช้กำหนด caption ของตาราง ใส่ string ได้เลย
  • $this->table->set_heading ใช้กำหนดหัวข้อของแต่ละคอลัมน์ ใส่ string คั่นด้วยลูกน้ำไปเรื่อยๆ ได้เลย
  • $this->table->add_row เป็นการใส่ข้อมูลแต่ละแถว สามารถใช้วน loop ได้อย่างง่ายมาก
  • $this->table->generate คำสั่งสำหรับสร้าง html ตามที่ได้ตั้งค่าไว้ที่ด้านบนแล้ว

วิธีส่ง PHP Array ไปให้ List ใน C# by

29
Dec
0

ส่งท้ายปีด้วยวิธีการส่งข้อมูลจาก Server ไปหา Client แบบไม่ซับซ้อนมาก
โดยสามารถนำไปใช้ได้ทันที่ และสามารถสอดไส้ใส่ไปใน JSON แบบไม่ต้องใช้ JSONArray
PHP
return implode(',', array('a','b','c','d'));
ฝั่ง Server ส่งออกไปเป็นลูกน้ำ

C#
List<string> A = new List<string>(JSONNode.asString.Split(','));

เพียงฝั่งละบรรทัด ก็สามารถส่ง Array เล็กใหญ่ไปอย่างง่ายดายครับ

การสร้าง Script สำหรับตรวจสอบความผิดพลาดบน GameObject by

30
Nov
0

การ Debug ใน unity บ่อยครั้งที่เราไม่สามารถเช็คข้อมูล หรือหยุดการทำงานได้ทัน
พอใส่ Break point ก็เข้าไปดูใน hierarchy ไม่ได้ การสร้าง Script ไว้ใช้สำหรับตรวจจับถึงเป็นอีกทางเลือกหนึ่ง
ยกตัวอย่างการ ตรวจจับการเปลี่ยนแปลงของ position

เริ่มจากประกาศตัวแปรสำหรับเช็คการเปลี่ยนแปลงตำแหน่ง
Vector3 Current;

เริ่มเก็บค่าตั้งแต่การเริ่มเกม
void Awake ()
{
Current = transform.localPosition;
Debug.Log (Current.ToString ());
}

ทำการเช็คทุกเฟรมด้วย function update
void Update ()
{
if (transform.localPosition != Current) {
Current = transform.localPosition;
Debug.Log(Current.ToString());
Debug.Break();
}
}

การใส่ Debug.Break เป็นทางเลือก สำหรับตรวจเช็คภายใน hierarchy หรือจะใช้การ gameObject.getComponent อื่นๆ เอามาเช็ค
เมื่อสร้าง script เสร็จก็เอาไปเพิ่มใน game object ที่ต้องการตรวจสอบ ทำไว้หลายๆ ไฟล์เพื่อความสะดวกในการใช้งาน

 เราชนะรอบ 4 | ยืมเงิน 3000 ด่วน | แอพกู้เงิน | แอพเงินด่วน | สินเชื่อออนไลน์อนุมัติทันที | Site Map | กู้เงินก้อน | กระเป๋าตัง | thisshop และ ยืมเงินฉุกเฉิน 5000 ด่วน