วันพฤหัสบดีที่ 16 เมษายน พ.ศ. 2558

How to open MVC 2 or MVC 1 in Visual Studio 2013

Step 1: Right click on the project and click “Edit projectname.csproj”.
Step 2: In the opened file find the tag and from there delete the following GUID:
ASP.NET MVC 2: {F85E285D-A4E0-4152-9332-AB1D724D3325}
This actually works also for ASP.NET MVC 1 projects
ASP.NET MVC 1: {603c0e0b-db56-11dc-be95-000d561079b0}

Step 3: Save the file and reopen the solution in Visual Studio.


ref: http://dotnetdaily.net/tutorials/open-mvc-2-project-visual-studio-2012/

วันพุธที่ 11 มีนาคม พ.ศ. 2558

การเข้า Config EPC3825 หลังจากตั้งเป็น Bridge Mode

เจ้า Router รุ่น นี้ พอตั้งเป็น Bridge Mode แล้ว ก็เหมือนคอมเราต่อเน็ตโดยตรงเลยครับ ปัญหาคือ  ip 192.168.1.1 ที่เราใช้ Config ประจำไม่สามารถเข้าได้ละ  ก็ให้ไปใช้ IP 192.168.100.1 แทนนะครับ

วันพุธที่ 25 กุมภาพันธ์ พ.ศ. 2558

การติดตามเส้นทาง การเดินทางด้วย GPS และ Android

หากเราใช้ Android เราสามารถใช้ Location history ของ Google ได้ที่นี่ครับ แต่ต้องเปิด GPS ด้วยนะ ดูย้อนหลังได้ด้วย

https://maps.google.com/locationhistory/b/0

การแก้ไข 'java' is not recognized as an internal or external command

เนื่องจากการสั่งรันโปรแกรม ที่ต้องใช้ Java แต่ว่าไม่ได้ลง Java ไว้ในเครื่อง  ก็เลยไปหาโหลดมา  แต่ก็นั่นแหละ  เจอ Error นี้ขึ้นมาอีก  หลังจากลงแล้ว  เข้าใจว่า ต้องแก้เรื่อง Path แต่เลยมาบันทึกไว้ที่นี่ด้วยครับ

1.  อันดับแรก ไปที่ Control Panel > System and Security > System
2. จากนั้นไปที่ Advanced system settings ที่อยู่ทางด้านซ้าย
3. คลิปปุ่ม Environment Variables ใน Tab Advanced

หรือให้ง่ายกว่านั้นใช้
https://patheditor2.codeplex.com/

ให้เพิ่ม Folder bin ของจาวา เข้าไป  แล้วแต่เวอร์ชั่นที่ต้องการ ซึ่งหากเพิ่มแบบ Manual เองให้ระวังเครื่องหมายคั่นด้วยครับ หากใช้ Tool ก็ต้องให้สิทธิ์ Admin ถึงจะแก้ไขได้นะ  แต่ง่ายกว่าเยอะเลย

หลังจากแก้เสร็จแล้ว เราต้อง Restart เครื่องครับ

สามารถ ทดสอบได้ด้วย การรันคำสั่ง java  -version ดูครับ หลังจากที่ รีสตาร์ทเครื่องแล้ว

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

การติดตั้ง Geny Motion และการใช้งาน

เนื่องจากเคยใช้ Emulator Bluestack มาก่อน ซึ่งไม่เคยลงอะไรอย่างอื่นผ่านเลย และ Bluestack ก็ลงง่ายมาก เพียงแต่ว่า หลังๆ จะออกแนวสแปมซะเยอะ เช่นต้องลงแอพสปอนเซอร์ หรือทำงานบางอย่างไม่ได้อีก เลยลองหาตัวอื่นดู สุดท้าย มาตกอยู่ที่ตัวนี้ Geny Motion สืบเนื่องจากว่า เล่นเกม Dragon Ace แล้วไปพบในบอร์ด พูดถึงการลง Bluestack Andy และ Geny ซึ่งโดยส่วนตัว Andy เคยลงแล้วแต่ไม่ชอบ ส่วน Geny ไม่เคยลงผ่านเลย ติดตลอด จนกระทั่งด้วยความอยากเล่นเกมนี้ เลยทำได้จนได้ มาดูกันว่าทำอย่างไร
1. ไปที่เว็บ https://www.genymotion.com แล้วโหลด ตัวเวอร์ชั่นฟรี และเลือกโหลดแบบเต็ม (จะมีอีกแบบคือ ถ้ามี Virtual Box อยู่แล้ว ก็เลือกโหลดเฉพาะ Geny ได้)
2. หลังจากติดตั้งแล้ว ก็ให้เปิด Virtual Box ค้างไว้ และเปิด Geny Motion ขึ้นมา สำหรับวินโดส์ 8.1 ต้องให้แน่ใจว่า ไม่ได้ลง Hyper-V เอาไว้นะครับ เช็คได้จาก Turn Windows features on or off ใน Program and Features ของ Windows (เนื่องจากเป็น Developer ถ้าตัว Mobile SDK ของ Windows จะลงตัวนี้ให้มาอยู่แล้ว ถ้าจำเป็นต้องใช้ทำงาน ที่ทำกัน คือ ตั้ง Dual Boot คือ Boot นึงลง Hyper-V ไว้ อีก Boot จะไม่ได้ลง Hyper-V ครับ)
3. หลังจากนั้น ต้องทำการ Setting ค่า ของ Virtual Box และ Geny Motion กันก่อน เนื่องจากผมรัน ครั้งแรก (หลังจากแก้ปัญหา Virtual Box Start ไม่ได้เพราะติด Hyper-V) ก็ไม่สามารถ Start ได้ เพราะ มี Error แจ้งว่า Unable to create virtual device: Failed to attach disk. งงเลยทีนี้ หลังจากงมอยู่นาน ซึ่งบางคนบอกว่า ถ้ารันด้วย สิทธ์ของ แอดมิน จะแก้ปัญหาได้ แต่ลองแล้วก็ไม่เวิร์ค เลยคิดว่าน่าจะเป็นเพราะ Directoy ที่ใช้สร้างตัวเครื่อง ไม่น่าจะใช้ได้ เลยต้องไปตั้งค่า Directory ใหม่ ดังนี้

3.1 ในส่วนของ Geny Motion ตั้งค่าที่ Setting > VirtualBox > Virtual device settings เป็น Directory ที่เราสามารถเขียนได้ โดยไม่ต้องใช้สิทธ์แอดมิน สำหรับผมคือสร้างโฟลเดอร์ใหม่ใน Drice C แล้วสร้าง Sub folder แล้วเลือกเอาโฟลเดอร์นั้นครับ
3.2 ในส่วนของ VirtualBox นั้น ให้ไปที่ File > Preferences > General > Default Machine Folder อันนี้ ผมก็ตั้งไว้ที่เดียวกับ Geny Motion เมื่อกี้เลย แต่สร้าง Folder แยกกันสักหน่อย

4. การให้โปรแกรมทำงานได้นั้น อย่างแรก VirtualBox ต้องถูกเปิดก่อนเสมอ แล้วจึงค่อยเปิด Geny Motion นะครับ
5. หลังจากเปิดมาครั้งแรก เราจะยังไม่มี VM ใด ๆ Geny Motion จะให้สร้างเครื่องแรกนะครับ ส่วนตัว ผมเลือก Android 4.3 (ก่อนหน้านี้เลือกตัวอื่นแล้วไม่เวิร์คแฮะ เนื่องจากต้องการลง Google Play ด้วย) รุ่น Google Nexus 7 - 4.3 API 18 - 800x1280

ติดตั้งเสร็จแล้ว ให้ไปที่ รูปประแจทางขวามือ ตั้งค่าแรม เป็น 2048 MB ครับ จริง ๆแล้ว เพียงแค่นี้ ก็จะได้ Android Emulator ไว้เล่นแล้วล่ะนะ เวลาลงโปรแกรม ก็ลาก apk มาลงได้เลย

แต่ผมต้องการใช้ Google play เพื่อจะให้โปรแกรมอัพเดทตัวเองได้ด้วย เลยต้องทำต่อดังนี้
1. โหลดตัวโปรแกรม ARM Translation Installer v1.1 มาติดตั้ง ติดตั้งง่ายมาก คือโหลดมาแล้วลากมาวางใน Emu ได้เลย ARM Translation Installer v1.1 (Mirror
2. หลังจาก Flash เสร็จแล้ว ให้ปิดและเปิดใหม่ และโหลด Google play มาลง โหลดได้จากที่นี่ http://wiki.cyanogenmod.org/w/Google_Apps#Downloads สำหรับ Android 4.3 นั้นจะใช้ตัว 20130813 นะครับ ส่วน 4.2 นั้นจะใช้ 20130812 ครับ ส่วนเวอร์ชั่น 4.5 ผมลองแล้วไม่เวิร์ค เลยต้องมา 4.3 ครับ (ตอนนั้นนะ) 
3. เหมือนเดิม ก็ลาก Google app มาลงใน VM ก็จะทำการ Flash เหมือน Arm Translation จากนั้นรอจนเสร็จ ก็ปิดและเปิดใหม่อีกรอบครับ 4. จากนั้น จะมี App Google Play มาอยู่ในรายการ ก็คลิกเข้าไปตั้งค่า และก็จะใช้ Google Play ได้ตามปกติครับ

ref
http://forum.xda-developers.com/showthread.php?t=2528952

 ส่วนอันนี้เป็นวิธีแก้ปัญหา หากเจอ VMBox ฟ้องว่าไม่สามารถตั้งค่า DHCP ได้ ให้เอาออกแล้วตั้งค่าใหม่ ตามนี้ครับ

http://stackoverflow.com/questions/26552902/genymotion-virtual-box-cant-obtain-ip-correct-dhcp

http://stackoverflow.com/questions/18641423/not-able-to-start-genymotion-device

วันศุกร์ที่ 20 กุมภาพันธ์ พ.ศ. 2558

การเขียน MVC Codefirst Migration กับ Database ที่มีอยู่แล้ว ไม่ว่า Database นั้น จะสร้างด้วยวิธีไหน

สืบเนื่องจากย้ายโค้ดมาเขียนในโปรเจคใหม่ ทำให้ชื่อเปลี่ยน หลายอย่างเลยต้องเปลี่ยนด้วย ทีนี้ มีปัญหาต้องปรับปรุง Database เพิ่มเติม แต่ติดเมื่อใช้คำสั่ง Add-Migration จะเป็นการสร้าง Database ใหม่ทั้งหมดเลย ซึ่งไม่ใช่ ไม่สามารถไปรันได้ เพราะมี Database อยู่แล้ว เลยต้องทำดังนี้ 1. ใช้คำสั่ง Add-Migration InitialCreate -IgnoreChanges 2. Update-database เพื่อ Snapshort Database สถานะนี้ก่อน 3. จากนั้น ค่อยเพิ่ม Model หรือ Properties ที่ต้องการแล้วทำตามขั้นตอนปกติ ด้วยคำสั่ง Add-Migration ธรรมดา มีอีกวิธีหนึ่งก็คือ ใช้ วิธี add-migration แบบเดิม เพียงแต่ต้องไป Comment out Code ที่สร้างขึ้นมาเอง สำหรับตารางและความสัมพันธ์ที่สร้างไปแล้ว

วันศุกร์ที่ 12 ธันวาคม พ.ศ. 2557

การแก้ปัญหาหลังจากอัพเดท MVC แล้วเกิด Object reference not set to an instance of an object. โดย Microsoft.Owin.Security.Cookies.CookieAuthenticationProvider.Exception

ตรงจุดนี้ เราจะไม่สามารถรันหรือ Debug อะไรได้เลย  เนื่องจาก Error ตั้งแต่ Start เลย  ลองค้นดู
            
app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString("/Account/Login"),
                Provider = new CookieAuthenticationProvider
                {
                    // Enables the application to validate the security stamp when the user logs in.
                    // This is a security feature which is used when you change a password or add an external login to your account.  
                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                        validateInterval: TimeSpan.FromMinutes(30),
                        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)),

                        //**** This what I add ****//
                        OnException = context => {}
                }
            });

โดยการแสดงปัญหาจากตัว Authentication นั้น เอามาจากที่นี่

http://stackoverflow.com/questions/26327092/why-is-owin-throwing-a-null-exception-on-new-project

โดยเพิ่ม OnException เข้าไป จะพบกับ Error
Multiple object sets per type are not supported. The object
 sets 'ApplicationUsers' and 'Users' can both contain instances of type 
'CommandTracking.Models.User'.
แทน  ทีนี้ ลอง ค้นหาดูจะพบว่า ปัญหานี้ เกิดจาก ตัว Update ของ EntityFramework ที่เพิ่ม IDbset<TUser> Users ขึ้นมา ทำให้หากใน Project ของเรา มีตัว DbSet<ApplicationUser> เอาไว้ จะทำให้ เกิดการซ้ำซ้อนกันได้  แก้ไขโดย ลบ DbSet<ApplicationUser> ที่สร้างขึ้นเอง และ แก้ไขตัว db.<user> ที่เราใช้ ให้ไปใช้ db.Users แทน