Category: Tips

Swift & Swift 2.0 Online learning resource

A collection for learning swift, just incase I’m lost them sometime later, btw, swift is on of my 2016 goal to be great at it.

Tutorial with project examples
https://www.hackingwithswift.com/

WKWebview Tips
https://github.com/ShingoFukuyama/WKWebViewTips

iBook, Swift 2.1 (Apple)

Raywenderlich (of course)
http://www.raywenderlich.com/category/swift

iPad no sound problem ?!?!

Be relax, grap a cup of tea/coffee and try the following solutions, I confident that 98% of no-sound problem will be gone. By the way, sorry for some dump question but those are things that can happen for everyone and me too.

# 1. the volume is locked by the software volume lock that most people aren’t aware of. You can access it by double tapping the home button and scrolling all the way to the left.
# 2. Device volume isn’t all the way down
# 3. Headphones aren’t plugged in
# 4. Make sure device not connect to the dock. Dock can prevent sound from playing.
# 5.. the system sound engine was crashed by another app. Refresh the sound engine by going into the system settings page. Under general, tap on Sounds and minimize and then maximize the volume bar.
# 6. App’s internal state is screwed up.. Restart the app by double tapping the home button for the task bar to show up.. then on the task bar, you’ll see all the apps running in the background. Hold down on an app icon for 1/2 second until a minus sign appears… tap minus sign to close the app permanently.. Then restart the app to refresh its state.
# 7. The device’s internal state is screwed up. Restart the device by holding down the home button and the power button for 10 seconds.
# 8 The app is corrupted thus crashing constantly.. Delete the app and re-download it.. You won’t get charged again..so don’t worry.
# 9 Soft Mute – if you set hardware lock button to lock orientation and then there is “Soft Mute” feature to be mute. Make sure the soft mute has not be set to turn off sound.

  • Double tap the home button
  • Swipe from left to right
  • Tap the speaker icon to the far left
  • It should show “Mute Off” below the play button
  • Listen to app sound once again

 

การทำงานกับเสียงใน iOS

หลังจากหาข้อสรุปมาช่วงนึง ก็ได้เวลาหาข้อมูลจริงๆ จัง จนพอได้ข้อสรุปที่ใช้เป็นแนวทางได้ จึงอยากเอามาแชร์ให้ทุกคน เผื่อจะได้ประหยัดเวลาในการเลือกใช้ api ต่างๆ ที่มีมาให้ (เยอะเหลือเกิน) ใน iOS

Objective-C (iOS)  working with audio:

  • OpenAL :  when you want a convenient, high-level interface for positioning sounds in a stereo field or when you need low latency playback.
  • Audio File Stream Services  :  to parse audio packets from a file or a network stream.
  • AVAudioPlayer class  :  For simple playback of single or multiple sounds
  • AVAudioRecorder class  :  For recording to a file
  • Voice Processing I/O unit  :  for audio chat
  • iPod Library Access  :  To play audio resources synced from a user’s iTunes library
  • Core Audio’s System Sound Services  :  When your sole audio need is to play alerts and user-interface sound effects.
  • Audio Queue Services  :  For other audio applications, including playback of streamed audio, precise synchronisation, and access to packets of incoming audio.

ข้อมูลเพิ่มเติม อ่านต่อได้ ที่นี่

Get system time and check time pass in Objective-C

Tips: เราสามารถเช็ค ระยะเวลาการประมวลผลของคำสั่งในแต่ละบรรทัด หรือบล็อคของคำสั่ง ได้ง่ายๆ ด้วยวิธี:

NSDate *startDate = [NSDate date];
….

// processing something here …

NSTimeInterval elapsedTimeInterval = [startDate timeIntervalSinceNow];
NSLog(@”>>>>>>>>>>>>>>>> = %f”, elapsedTimeInterval);

ผลลัพธ์ที่ได้เป็นหน่วยวินาที (ติดลบ)

Connect Camera is easy, turn it off is evil!!

To turn it on is so simple as document said but to turn it off after access need specific method. After google around I found this one solution:

video.attachCamera(null);
video.clear();
removeChild(_video);
camera = null;

ref: http://www.ninjabonsai.net/blog/?p=80

I test in an empty fla and it work like a charm. But when I test in my working project which do a lot more of connect and display video. I found that another important trick to do is below:

var cam:Camera = Camera.getCamera( id );
video.attachCamera(null);  // this need to set before the next line, always.
video.attachCamera(cam);

I know it weird but it work well for me.

หลุมพลาง Auto Scaling feature จาก corona

เคสนี้เรียกว่า “ขุดหลุมฝังตัวเอง” เกิดการแสดงขนาดภาพเพี้ยนในเกมส์ จากการพยายาม swap ภาพเองเมื่อ resolution ของ devices สูง

จากกำหนดการแสดงผลของ Application ไว้ที่ resolution ต่ำๆ เช่น 320×480 และทำการแสดงผลภาพบน retina display / ipad corona จะทำการปรับภาพเป็น dynamic scale โดยหากภาพที่ใช้การโหลดรูปแบบ newImageRect() จะได้รับการเปลี่ยนภาพให้โดยอัตโนมัติ เป็นชุด 2x แต่ภาพที่โหลดแบบ newImage() ต้องใส่ parameter เพื่อบังคับให้แสดงแบบไม่ dynamic scale เพิ่ม เมื่อทำการเปลี่ยนภาพเองผ่านโปรแกรม !!

ที่สำคัญ คือ simulator จะไม่แสดง error แต่เมื่อทดสอบใน devices จึงจะพบ…T T

Scale 9 Grid with Gradient work around!!

Today I’ve try to create a scale 9 shape with gradient fill in its shape and found that when create the scale 9 from IDE the gradient will not slice into scale 9 properly. So the result look like it is stretch. The work around that I found after googling for a while is use “Union” command to the out side border of the scale 9 by select menu “Modify/Objects/Union” and it work !! 🙂

การอ่านค่า flashvars จาก swf ที่ถูกโหลดเข้ามา

ปัญหาในการพยายามโหลดค่า flashvars จาก swf ที่ถูกโหลดเข้ามาภายใน swf อีกตัว เป็นปัญหาที่เรียกได้ว่าน่าปวดหัวไม่น้อยทีเดียว แต่จริงๆ แล้ววิธีแก้ปัญหานั้นไม่ยากครับ หลังจากที่ผมพยายามแก้ปัญหาและหาข้อมูลอยู่พักใหญ่ ในที่สุดก็ได้ข้อสรุป คือ

ที่ตัว Main นะครับ เวลาอ่านค่า flashvars จะใช้คำสั่ง

ในขณะที่ถ้าต้องการอ่านค่า flashvars จาก swf ที่ถูกโหลดเข้ามาจะต้องเปลี่ยนคำสั่งเป็น

การเรียกผ่านตัวแปร stage จะเป็นการเรียกไปยัง display container ของ swf ที่ถูกโหลดเข้ามานั่นเอง

และหากยังไม่ได้ ก็ยังมีอีกวิธี โดยการส่งค่าตัวแปรต่างๆ เข้าไปตอนโหลด swf อีกตัวนั่นเอง

var myRequest:URLRequest = new URLRequest(String(“/myPath.swf” + fVars));

ที่มา: http://ragona.com/blog/pass-flashvars-loaded-swf/

Today I want to add Hibernate feature to Vista?

And I can’t find it in the control panel / power management section. After google around then I found the solution.

To disable hibernation:
Click Start. Type “powercfg /hibernate off” and then Press Ctrl+Shift+Enter.
To enable hibernation:
Click Start. Type “powercfg /hibernate on” and then Press Ctrl+Shift+Enter.

A command prompt will appear and disappear. The program doesn’t give you any feedback anyway, so you’re not missing anything.
By press Ctrl+Shift+Enter is a shortcut to run a program as an Administrator.

ฟันธงโหลดภาษาไทยใน XML ด้วย AS3 จาก ServerSide

หัวข้อนี้ไม่เขียนภาษาไทยคงจะแปลก เพราะเกี่ยวกับการดึงข้อมูลภาษาไทย จากไฟล์ XML หรือจากการส่งข้อมูลจาก Server แบบ XML Format เรื่องของเรื่องคือ พอดีได้มีโอกาสต้องทำงานดึงข้อมูลภาษาไทยมาแสดงบนหน้าเว็บ ซึ่งเนื้องานที่ทำอยู่ทุกที ไม่ค่อยได้ใช้ภาษาไทยเท่าไหร่ สรุปคือ เกิดปัญหาขึ้น แสดงได้บ้าง ไม่ได้บ้าง มี random character แปลกๆ ต่อท้ายข้อมูลที่โหลดมาบ้้าง ทำให้เกิด XML not well-formed ฟ้องขึ้นมา (ตัวอย่าง well formed xml) สุดท้ายไ้ด้ความช่วยเหลือจาก katopz และ joke และทำให้แก้ปัญหาไปได้ จึงอยากเอามาแบ่งปัน เผื่อว่าจะช่วยลดเวลาในการแก้ปัญหาของท่านอื่นๆ ได้ต่อไป ดังนี้

1. ฝั่ง flash โหลด XML ตามปกติ แต่ห้ามใช้ System.useCodePage = true; ถ้ามีให้ comment ทิ้งไป เนื่องจากเราจะใช้การ encode ข้อมูลแบบ UTF-8 ซึ่งจะกำหนดมากจาก xml ที่โหลดเข้ามา หากกำหนดให้ใช้ System.useCodePage จะเป็นการบังคับให้แฟลชใช้การ encode ข้อมูลตาม System default ของเครื่องผู้ใช้ ซึ่งเมื่อส่งข้อมูลมาแบบ UTF-8 แน่นอนว่าภาษาไทยมันจะแสดงไม่ได้อย่างแน่นอน และการเตรียมการฝั่ง Flash จะจบเพียงแค่นี้ (จริงๆ)

ส่วนวิธีการอ่านข้อมูล XML ลองอ่านกระทู้ของน้องก่อ ดูนะครับ เขียนไว้ละเอียดดีครับ
ทำงานกับฐานข้อมูลแบบ Online ด้วย Flash และ PHP
Flash+XML ตอนที่ 1

2. ถัดมาส่วนที่เป็นเทคนิคสำคัญในการที่จะทำให้ส่งข้อมูลภาษาไทยสำเร็จ คือ ฝั่ง XML นี่เอง ที่สำคัญอย่างยิ่ง ดังนี้

2.1 ข้อมูลที่ส่งมาทั้งหมด ต้อง encode เป็นแบบ UTF-8 (วิธีแปลงไฟล์เพื่อทดสอบง่ายๆ คือ ใช้ notepad เปิด xml ไฟล์ก่อน หลังจากนั้นเลือก Save As และเลือก Encoding เป็น UTF-8 ก็จะได้ไฟล์ไว้ทดสอบ – credit: katopz)

2.2 ข้อมูลภาษาไทยทั้งหมด ควรที่จะเก็บอยู่ภายใน tag value ของ xml ไม่ใช่ attribute และครอบข้อมูลภาษาไทยทั้งหมดด้วย <![CDATA[ภาษาไทย]]]> (credit: katopz และ joke) เช่น

<xml>
<title><![CDATA[กรุงเทพมหานคร]]></title>
<link>http://www.bangkok.com</link>
</xml>

2.3 ใส่ header ของ XML Data ที่ส่งกลับมาเป็น <?xml version=”1.0″ encoding=”utf-8″ ?>

2.4 หากยังไม่ได้ ให้ตรวจสอบอีกครั้งว่าข้อมูลที่ส่งมา encode เป็น UTF-8

2.5 หากยังไม่ได้ ให้ตรวจสอบอีกครั้งว่าข้อมูลที่ส่งมา encode เป็น UTF-8 และไม่ได้ encode ซ้ำซ้อนเพราะจะทำให้ข้อมูลผิดพลาดได้

2.6 หากยังไม่ได้ ทดสอบด้วยไฟล์ที่ได้มากจาก notepad และ encode ด้วย UTF-8

ถ้าทำตามข้างบนทั้งหมด ผมมั่นใจว่าน่าจะได้อย่างแน่นอนครับ และขอบคุณ katopz และ joke อีกครั้งสำหรับเทคนิคดีๆ ครับ