Tuesday, January 31, 2012

Converting VS2010 Solution to VS2008

If you are working with VS 2010 (any Edition) and cannot open your 2010 solution on VS 2008 then just follow these 3 Steps:
 
For .sln:
 
1. Open the solution file in your favorite text editor (ex: notepad++).
2. Find the Following:
Microsoft Visual Studio Solution File, Format Version 11.00.
# Visual Studio 2010
Replace with:
Microsoft Visual Studio Solution File, Format Version 10.00. (I)
# Visual Studio 2008. (II, optinal)
 
For .csproj/vbproj:
 
1. Open project file in your favorite text editor (ex: notepad++).
2. Find the Following:
.
Replace with:
. (III)



---------------------------
Microsoft Visual Studio
---------------------------
Unable to read the project file 'XXX.csproj'. 
 
C:\Project path\XXX.csproj(89,11): The imported project "C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the  declaration is correct, and that the file exists on disk.

---------------------------

To fix this error just change the VS version(v10.0 to v9.0) in your .csproj/vbproj file, that's all.

Tuesday, January 17, 2012

Google Custom Search Engine


Google cung cấp công cụ giúp chúng ta tạo và nhúng kết quả tìm kiếm vào website một cách dễ dàng đó là  Google Custom Search Engine (CSE). Sử dụng công cụ này bạn sẽ không phải viết Form tìm kiếm trên trang web của bạn và cũng sẽ nhận được nhiều lợi ích từ google search
Có một điều khi bạn sử dụng Google Custom Search Engine là bạn không chạy thử được khi bạn đang xây dựng website vì dữ liệu trả về phải có trong cơ sở dữ liệu của google tức là web của bạn đã search được trên google và những bài mới cập nhật chưa được google cập nhật cũng sẽ không xuất hiện trong kết quả tìm kiếm.
Bài viết này tôi sẽ hướng dẫn bạn các bước để thực hiện sử dụng CSE của google để tạo chức năng tìm kiếm trên website của bạn.
Bạn cần đảm bảo là đã có một tài khoản gmail vì chúng ta sẽ sử dụng tài khoản gmail để đăng ký. Nếu chưa có bạn cần tạo cho mình 1 tài khoản gmail. Bạn truy cập http://www.google.com/cse/ Hoặc nếu thích dùng tiếng việt bạn truy cập http://www.google.com.vn/cse/ ở đât tôi sẽ dùng tiếng việt mô tả cho dễ. Tiếp theo chọn Tạo Công cụ Tìm kiếm Tuỳ chỉnh (Create a Custom Search Engine). Bạn được chuyển đến trang tiếp theo bạn đăng nhập với tài khoản gmail của bạn.
Bước tiếp theo bạn nhập các thông tin trong phần mô tả công cụ tìm kiếm của bạn. Ví dụ
- Tên (Tên công cụ tìm kiếm:): hmweb.com.vn Chia sẻ là niềm vui
- Mô tả: OTDH, Lập trình web với asp.net, C#, SQL server, jquery
- Ngôn ngữ: Tiếng Việt
- Trang web tìm kiếm: bạn có thể cấu hình để CSE tìm kiếm cụ thể ví dụ nếu bạn muốn chỉ tìm các trang aspx thì bạn điền nội dung: http://tenweb.com/*.aspx.  Nhưng tốt nhât ta nên chọn tìm kiếm tất cả các trang ta sẽ dùng: http://tenweb.com/*
- Phiên bạn: Bạn chọn phiên bản miễn phí
Nhấn Next. Tại đây bạn có thể chọn các tùy chọn cho kết quả tìm kiếm. Ta cứ chọn mặc định vì sau đó ta có thể thay đổi được. Google sẽ cung cấp cho bạn một id chính là id cse của bạn
Nhấn Next đến bước này bạn đã hoàn thành đăng ký. Google sẽ gửi mail cho bạn và cung cấp cho bạn đoạn mã html để nhúng vào trang web của bạn.
Giờ bạn chọn liên kết Giao diện để tiếp tục các thay đổi của bạn. Bạn thay đổi các thiết lập nếu bạn muốn. Ở hmweb tôi chọn tùy chọn lưu trữ là iframe: Cung cấp tuỳ chỉnh giới hạn và yêu cầu trang riêng biệt về các kết quả trên trang web của bạn.
Các tùy chọn khác bạn có thể tìm hiểu thêm. Bạn nhấn vào liên kết nhận mã để lấy code html đặt vào trang nơi muốn hiển thị form tìm kiếm. Chúng ta sẽ nhận được 2 đoạn code html. một dùng là Form tìm kiếm cái còn lại là code để hiển thị kết quả tìm kiếm. Copy code html form tìm kiếm vào nơi bạn muốn hiển thị



Bạn chú ý id của bạn sẽ khác. Bạn tạo trang hiển thị kết quả search_result.aspx. Và copy đoạn code hiển thị kết quả tìm kiếm
Trong Form trên bạn chú ý đến thuộc tính action="" của thẻ form chỉ định đến trang kết quả search_result.aspx.  Khi ta nhập từ khóa tại ô tìm kiếm thì sẽ postback đến trang search_result.aspx với url là:
search_result.aspx?cx=006309227296184785814:f9bcc86z5hm&cof=FORID%3A11&ie=UTF-8&q=Từ Khóa&sa=Search
Như vậy nếu bạn truy cập trực tiếp trang search_result với url với Từ Khóa cần tìm. Vậy ta sẽ tìm cách cải tiến form search.
Ta sẽ sửa lại để form tìm kiếm không còn phụ thuộc vào thuộc tính action nữa và code tại nơi muốn hiển thị textbox tìm kiếm sẽ như sau:
 
    
    
     
    
  
Giờ ta sẽ viết các hàm cho sự kiện onKeyPress và onclick như sau:
function URLEncode (clearString) {
  var output = '';
  var x = 0;
  clearString = clearString.toString();
  var regex = /(^[a-zA-Z0-9_.]*)/;
  while (x < clearString.length) {
    var match = regex.exec(clearString.substr(x));
    if (match != null && match.length > 1 && match[1] != '') {
     output += match[1];
      x += match[1].length;
    } else {
      if (clearString[x] == ' ')
        output += '+';
      else {
        var charCode = clearString.charCodeAt(x);
        var hexVal = charCode.toString(16);
        output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();
      }
      x++;
    }
  }
  return output;
}

function SubmitOnEnter(myfield, e)
{
 var keycode;
 if (window.event)
  keycode = window.event.keyCode;
 else if (e)
  keycode = e.which;
 else
  return true;
 if (keycode == 13)
 {
  SearchSite();
  return false;
 }
 else
  return true;
}
function SearchSite()
{
    document.location.href='search_result.aspx?cx=006309227296184785814:f9bcc86z5hm&cof=FORID%3A11&ie=UTF-8&q=' + URLEncode(document.getElementById('q').value) + '&sa=Search';
}

http://hmweb.com.vn

XAMPP in Ubutu x64

=================
# XAMPP is currently 32 bit only
#case `uname -m` in
# *_64)
# if /opt/lampp/bin/php -v > /dev/null 2>&1
# then
# :
# else
# $de && echo "XAMPP gibt es zur Zeit nur als 32-Bit Applikation. Bitte verwende eine 32-Bit Kompatibilitaetsbibliothek fuer Dein System."
# $de || echo "XAMPP is currently only availably as 32 bit application. Please use a 32 bit compatibility library for your system."
# exit
# fi
# ;;
#esac
================



XAMPP: Couldn't start MySQL!

Trying to run mysql on ubuntu 10.10 and give this vauge error "XAMPP: Couldn't start MySQL!"

Try this

1. Open a terminal.
2. run this command sudo chown -hR root /opt/lampp
3. then run this sudo chmod -R 777 /opt/lampp
4. Now Restart XAMPP sudo /opt/lampp/lampp restart

U are all set.

And if u r getting the follwing warning after restarting
"Warning: World-writable config file ‘/opt/lampp/etc/my.cnf’ is ignored"

1.Open terminal
2.Migrate to /opt/lampp/etc
3.run the command sudo chmod 755 my.cnf

Asp.net Google Maps tích hợp google maps trong ASP.NET với C#


Google cung cấp cho chúng ta dịch vụ miễn phí xem bản đồ trên trang web đó là Google Maps. Trong bài viết này tôi minh họa cách đơn giản để áp dụng vào việc chỉ dẫn đường đi hiển thị trên trang web khi cần. DEMO

Bạn thực hiện theo các bước dưới đây:
Bước 1: Dowload thư viện GMaps.dll tại http://googlemaps.subgurim.net/, giải nén và Add GMaps.dll vào thư mục Bin trong ứng dụng của bạn
Bước 2: Add GMaps.dll vào Toolbox trong VS của bạn (thực hiện bước này để bạn kéo thả khi lập trình cho dễ)
Chọn Tool Box -> Phải chuột vào General Tab -> chọn Add New Tab đặt tên Tab là GoogleMap -> Phải chuột vàoGoogleMap chọn Browse.. chọn đến nơi lưu GMaps.dll -> OK.
Bước 3: Thiết kế Form
Bước này minh họa thiết kế 1 Form đơn giản để người dùng nhập các thông tin cần search
Street
City
Country
Chú ý bạn cần đăng ký dùng assembly của Gmaps.dll bạn cần đăng ký dòng code sau trong trang aspx (Nếu bạn kéo thả từ Toolbox như hướng dẫn bước 2 thì dòng code này sẽ tự sinh cho bạn)
<%@ Register assembly="GMaps" namespace="Subgurim.Controles" tagprefix="cc1" %>
Với cc1:GMap bạn có thể thêm các thuộc tính như  enableContinuousZoom="true" cho phép zoom kết quả search, enableGoogleBar="true" - hiển thị GoogleBar, ...
Bước 4: Viết code. Khi người dùng nhập các thông tin rồi nhấn ShowMap khi đó Google Maps sẽ hiển thị thông tin, vị trí, đường đi của địa chỉ người dùng nhập (nếu có)
using System;
using System.Configuration;
using Subgurim.Controles;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        
    }
    protected void btnShowMap_Click(object sender, EventArgs e)
    {
        string fulladdress = string.Format("{0}.{1}.{2}", txtStreet.Text, txtCity.Text, txtCountry.Text);
        string skey = ConfigurationManager.AppSettings["googlemaps.subgurim.net"];
        GeoCode geocode;
        geocode = GMap1.getGeoCodeRequest(fulladdress);
        var glatlng = new Subgurim.Controles.GLatLng(geocode.Placemark.coordinates.lat, geocode.Placemark.coordinates.lng);
        GMap1.setCenter(glatlng, 16, Subgurim.Controles.GMapType.GTypes.Normal);
        var oMarker = new Subgurim.Controles.GMarker(glatlng);
        GMap1.addGMarker(oMarker);    
    }
}
Bước 5: Sửa web.config
Ở bước 4 khi viết code bạn dùng string skey = ConfigurationManager.AppSettings["googlemaps.subgurim.net"]; do đó bạn cần sửa trong web.config bằng cách thêm key="googlemaps.Subgurim.net" bên trong thẻ appSettings như sau.

    
Nếu ở bước 4 bạn gán luôn string skey=YourGoogleMapsAPIKeyHere thì bạn không cần thực hiện bước 5.
Chú ý nếu bạn dùng code như đã hướng dẫn ở trên thì khi bạn thực hiện trên localhost sẽ chạy bình thường nhưng nếu bạn đưa lên host sẽ báo lỗi "This web site needs a different Google Maps API key. A new key can be generated at http://code.google.com/apis/maps/signup.html".Vậy giá trị YourGoogleMapsAPIKeyHere được lấy từ đâu? bạn vào http://code.google.com/apis/maps/signup.html đăng nhập với tài khoản gmail và điền url website của bạn và nhấn Gennerate API Key để lấy Key và thay vào web.config ở bước 5

http://hmweb.com.vn