10 สิงหาคม 2556

Silverlight *.ClientConfig แก้ไขโดยไม่ต้องแก้ code build - deploy ใหม่

Silverlight *.ClientConfig ใน IIS

เป็นไฟล์ xml ไว้กำหนดค่าต่างๆ รวมทั้ง server IP address ของ wcf web services สำหรับติดต่อฐานข้อมูล
แต่พอเราเอาไป deploy ใน IIS แล้วจะเห็นแต่ไฟล์ /ClientBin/{app.name}.xap 

Solution

ที่จริงแล้วไฟล์ .xap มันคือ zip package นี่เอง

1. เปิดหาไฟล์ /ClientBin/{app.name}.xap เปลี่ยนนามสกุล (file extension) เป็น .zip 

2. extract ด้วยโปรแกรมจัดการ zip (7zip, winrar, peazip) ก็จะเห็นไฟล์ *.dll และ *.ClientConfig แล้ว

3. edit แก้ไขค่าในไฟล์ .clientconfig เสร็จแล้ว save 

4. zip กลับเข้าไปใหม่ (.zip format) แล้วเปลี่ยน file extension to .xap เหมือนเดิม

ปล. ไม่ต้อง restart IIS แต่ในฝั่ง client ต้อง delete browser cache ด้วยเพราะ xap จะถูก cached

7 สิงหาคม 2556

Visual Studio เปลี่ยน MVC web application ให้เป็น Class Library ด้วย ProjectTypeGuids

วันนี้วุ่นวายกับการสร้าง web app ใน visual studio

เปลี่ยนโปรเจค MVC web application ให้เป็น Class Library
เปลี่ยน asp.net web site ต้องเปลี่ยนเป็น web application

VS รู้ได้ยังไงว่า project เราเป็น library, mvc หรือ web app ธรรมดา มันอยู่ในไฟล์ *.csproj นี่เอง


tag ProjectTypeGuids เป็นตัวบอกชนิดของโปรเจคใน VS แกะมาจาก registry path

HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\10.0_Config\Projects
ถ้าลง visual studio สำหรับทุก users จะอยู่ใน HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\Projects

หรือตามหา google ก็จะได้ลิสมาบางอัน
Windows (C#)           {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
Windows (VB.NET)       {F184B08F-C81C-45F6-A57F-5ABD9991F28F}
Windows (Visual C++)   {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}
Web Application        {349C5851-65DF-11DA-9384-00065B846F21}
Web Site               {E24C65DC-7377-472B-9ABA-BC803B73C61A}
WCF                    {3D9AD99F-2412-4246-B90B-4EAA41C64699}
WPF                    {60DC8134-EBA5-43B8-BCC9-BB4BC16C2548}
XNA (Windows)          {6D335F3A-9D43-41b4-9D22-F6F17C4BE596}
XNA (XBox)             {2DF5C3F4-5A5F-47a9-8E94-23B4456F55E2}
XNA (Zune)             {D399B71A-8929-442a-A9AC-8BEC78BB2433}
Silverlight            {A1591282-1198-4647-A2B1-27E5FF5F6F3B}
ASP.NET MVC            {F85E285D-A4E0-4152-9332-AB1D724D3325}
ASP.NET MVC 4          {E3E379DF-F4C6-4180-9B81-6769533ABE47}
Test                   {3AC096D0-A1C2-E12C-1390-A8335801FDAB}
Solution Folder        {2150E333-8FDC-42A3-9474-1A3956D46DE8}      
อยากแก้โปรเจคเราให้เป็น Type ไหนก็ใส่ Guid เข้าไปเลย ยกเว้น Class Library จะไม่มี ProjectTypeGuids ลบ tag นี้ทิ้งไป csproj เราก็จะกลายเป็น Library ธรรมดาทันที

29 เมษายน 2555

jquery plugin สำหรับใช้ barcode scaner กับ web application HTML form input

วันนี้เจอปัญหาของ web application ตัวนึงซึ่งมี form รับ input เป็น Serial Barcode

ปกติอุปกรณ์ barcode scanner ทั่วไปจะแสกน serial เหมือน keyboard แล้วตามด้วยการกด "Enter" key stroke

ปัญหา 

ใน HTML web form

ถ้าพิมพ์อะไรในช่อง input  นี้แล้วกด Enter จะเป็นการ submit form นั้นทันที ถ้าในฟอร์มเราต้องกรอก input ข้อมูลอื่นด้วยหลายช่อง ทันทีที่แสกนบาร์โค้ดเสร็จจะเหมือนกด submit ทันทีทั้งที่ยังกรอกข้อมูลช่องอื่นไม่ครบ

Solved

แก้ด้วยการเขียน jquery plugin ป้องกัน form submit เวลาที่ยิงสแกน barcode

(function($){
    $.fn.acceptBarcode = function(barcodeClass){
        var canSubmit = false;

        this.submit(function(e){
            //e.preventDefault();
            return canSubmit;
        });

        this.find('input.' + barcodeClass).each(function(){
            console.log('accept barcode for ' + $(this).attr('name'))

            $(this).bind('keyup', function(e){
                var code = (e.keyCode? e.keyCode : e.which);
                if(code == 13){ // Enter key pressed.
                    canSubmit = false;
                    console.log('serial enter detected - disable form.submit()');
                }
            })

            $(this).bind('focus', function(){
                canSubmit = false;
                console.log('serial input focus - disable form.submit()');
            })

            $(this).bind('blur', function(){
                canSubmit = true;
                console.log('serial input blur - enable form.submit()');
            });
        });
    };
})(jQuery);



วิธีใช้งาน..
<input class="barcode" type="text" 
$(document).ready(function(){
    $('form').acceptBarcode('barcode');
});

11 เมษายน 2555

เขียน Python webapp ด้วย Django+Google App Engine+Cloud SQL - part2 deploy

series content :


django settings.py  ติดต่อฐานข้อมูล Cloud SQL


DATABASES = {
   'default': {
       'ENGINE': 'google.appengine.ext.django.backends.rdbms',
       'INSTANCE': 'project-id:instance1',
       'NAME': 'my_database_name',
   }
}

ตั้งค่า INSTANCE และชื่อฐานข้อมูลตามที่สร้างไว้ใน https://code.google.com/apis/console


ตอนนี้เราอยากทดลองติดต่อฐานข้อมูล Cloud ให้ได้ก่อน โดยยังไม่ต้องเขียน models เอง วิธีง่ายสุดเปิดใช้ django.contrib.admin กับ auth (ระบบ login) ที่มากับ django นี่ล่ะ

10 เมษายน 2555

เขียน Python webapp ด้วย Django+Google App Engine+Cloud SQL -part0 สมัครใช้ API

series content :

Update June, 2012

ตอนนี้ Google ประกาศเก็บเงินค่าใช้บริการ Cloud SQL แล้ว
Dear Cloud SQL previewer
As was previously announced, from June 12th 2012 use of the Google Cloud SQL service will be charged.
To continue using your Cloud SQL instances after June 12th 2012, you will need to enable billing for your projects before then by signing in to the Google APIs console and clicking the Billing tab. Once billing is enabled you can choose (or change) the billing plan for your instances from the Cloud SQL tab. Your instances will not be available after June 12th 2012 if you do not enable billing beforehand.
ตั้งแต่วันที่ 12 มิย. 55 ถ้าอยากจะใช้งาน Cloud SQL ต้องเปิด Billing Service มี  Pricing Package คิดตามการใช้งานจริง ถ้าทดลองใช้งานแบบ Per Use Billing Plan จะถูกกว่า

วิธีการสมัครใช้งาน Google Cloud SQL Limited Preview

ตอนนี้ Google เปิดให้ใช้งาน  Cloud SQL  สำหรับ developer ที่สนใจทดสอบเท่านั้น ยังไม่ได้เปิดใช้ 100% ขั้นตอนการสมัครใช้เวลาพอสมควร อธิบายวิธีการสมัครไว้หน่อย

เข้าไปที่หน้า https://code.google.com/apis/console ถ้ายังไม่เคยใช้งานก็ใช้ Gmail Account login

เปิดไปที่แทป Services มองหา Google Cloud SQL



กด Request access.. link ไปที่หน้าฟอร์มสมัครใช้งาน .. (Google Cloud SQL Limited Preview Signup)

9 เมษายน 2555

เขียน Python webapp ด้วย Django+Google App Engine+Cloud SQL - part1 การติดตั้ง SDK

series content :


ก่อนหน้านี้เคยใช้ django non-rel deploy ใน Google App Engine ตอนนั้นยังไม่รองรับ relational database มีแต่ datastore เป็น nosql 

ปัจจุบัน appengine SDK มี builtins: - django_wsgi มาให้พร้อมใช้งาน เลยอยากลองทำ prove concept  Google Cloud SQL ดูซะหน่อย

การติดตั้ง Google App Engine SDK + Django ใน Development Server



Prerequisition : สมัครใช้งาน Google Cloud SQL - Sign up for Limited Preview (estimate time: 7-10 days)

Download / Runtime version ที่ GAE รองรับ (updated 04/2012)

9 กุมภาพันธ์ 2555

ปัญหาขนาด database log file .ldf โตไม่หยุด MSSQL server

file .ldf  เป็นไฟล์ที่แยกเก็บบันทึก transaction  ของไฟล์ฐานข้อมูล (.mdf file) และจำเป็นต้องใช้งานคู่กัน  ถ้าหาก transaction log ไม่สมบูรณ์หรือเราจัดการผิดวิธี sql server จะเรียกใช้งาน database ก้อนนั้นไม่ได้เลย

สาเหตุที่ไฟล์ .LDF ขนาดใหญ่ขึ้นไม่หยุด

ปกติค่า default ของฐานข้อมูลใน SQL server จะอยู่ใน full recovery mode แปลว่าถ้าเราไม่ทำอะไรซักอย่างกับ database ก้อนนี้ ขนาดของไฟล์ .ldf ก็จะโตขึ้นเรื่อยๆ ทุกวันจนฮาร์ดดิสเต็มในที่สุด

ในการติดตั้ง SQL Server ไม่ได้มี options นี้ให้เราเลือก admin หลายคนกด next >> ไปไม่โดยไม่สนใจบางทีก็คิดไปเองว่า การติดตั้ง database ลงในเซอฟเวอร์เป็นหน้าที่ของผู้พ้ฒนาโปรแกรมน่าจะรู้เรื่องมั้ง (พลาดแล้ว..)

วิธีแก้ปัญหาขนาดไฟล์ .LDF


1. ตั้งค่า recovery model ของ database เป็น simple เพื่อให้ database หยุดขยายขนาด log แบบไม่มี limit
  • ใช้ SQL Server Management Studio  login เข้าไปจัดการเซอฟเวอร์ฐานข้อมูล
  • ใน Object Explorer browse ไปที่ไฟล์ database ที่ต้องการ Right click > Properties > Options เลือก Rocovery model : Simple