text:
Tôi đã xây dựng một ứng dụng lập kế hoạch-chuyến đi từ bài viết đầu tiên trong loạt bài này. Giờ khung làm việc Người điều khiển-Khung nhìn-Mô hình (Model-View-Controller (MVC)) cơ bản đó đang ở đây, ta sẵn sàng để hòa trộn với những kĩ thuật bên ngoài. Cụ thể, ta sẽ thêm một bản đồ. Tôi có thể nói, "Tôi đang đặt một chuyến đi từ Denver tới Raleigh, với những điểm dừng ở San Jose và Seattle dọc đường đi," nhưng một bản đồ sẽ giúp mô tả chuyến đi tốt hơn. Bạn có thể biết rằng Seattle và Raleigh ở những phía đối diện nhau của nước Mỹ, nhưng một bản đồ giúp bạn hình dung khoảng cách giữa hai thành phố này.
Cho bạn một ý tưởng ban đầu về ứng dụng gì sẽ làm ở phần cuối của bài viết
này, hãy vào trang http://maps.google.com và nhập mã IATA
DEN
trong hộp tìm kiếm. Bạn nên kết thúc ở Sân bay Quốc tế Denver, như được
biểu diễn trong Hình 1. (Biết thêm về những mã IATA, xem bài viết của tháng trước.)
Hình 1. Sân bay Denver, nhờ Các bản đồ của Google
Bên cạnh việc hiển thị các sân bay của Mỹ bạn tạo một bảng HTML, lập kế hoạch-chuyến đi cũng sẽ vẽ được các sân bay trên một bản đồ. Tôi sẽ sử dụng API Các bản đồ Google miễn phí trong bài viết này. Bạn có thể sử dụng API Các bản đồ Yahoo! miễn phí hoặc bất kỳ cái nào khác (xem Tài nguyên). Một khi bạn hiểu những điều cơ bản về bản đồ Web trực tuyến, bạn sẽ hiểu rằng các API khác nhau có thể hoán đổi cho nhau một cách hợp lí. Trước khi bạn có thể ánh xạ một phần của giải pháp, bạn cần hiểu làm thế nào để một chuỗi ba kí tự đơn giản như DEN biến đổi thành một điểm trên bản đồ
Mã địa lí
Khi bạn nhập DEN vào Các bản đồ Google, ứng dụng thực hiện một phép biến đổi nhỏ đằng sau. Bạn có thể nghĩ tới những địa phương về mặt địa chỉ đường phố như Đường 123 Main, nhưng các bản đồ Google cần một điểm vĩ độ/kinh độ để hiển thị nó trên bản đồ. Hơn nữa bắt buộc bạn cung cấp điểm vĩ độ/kinh độ của mình, nó dịch các địa chỉ người dùng có thể đọc được vào những vĩ độ/kinh độ thay cho bạn. Phép biến đổi này được gọi là mã địa lí (geocoding) (xem Tài nguyên).
Một phép biến đổi tương tự xảy ra khi bạn lướt Web. Về kỹ thuật, cách duy nhất để liên lạc với một máy chủ Web từ xa là địa chỉ IP của máy chủ cung cấp. May thay, bạn không cần nhập địa chỉ IP của mình. Bạn nhập một URL thân thiện vào trình duyệt Web của bạn, và nó thực hiện việc gọi máy chủ Hệ thống Tên Miền (Domain Name System (DNS)). Máy chủ DNS đổi URL thành địa chỉ IP tương ứng, và trình duyệt thực hiện kết nối HTTP tới máy chủ từ xa. Tất cả điều này là trong suốt với người dùng. DNS thực hiện Web vô cùng dễ dàng để sử dụng. Những trình sinh mã địa lí (geocoder) thực hiện việc tương tự cho các ứng dụng bản đồ dựa trên Web.
Tìm kiếm Web nhanh trên trình sinh mã địa kí miễn phí mang lại một số khả năng phù hợp với nhu cầu mã hóa địa lí của những người lập kế hoạch chuyến đi. Cả Google và Yahoo! cung cấp các dịch vụ mã địa lý như một phần tiêu chuẩn của các API của họ, nhưng với ứng dụng này, tôi sẽ sử dụng dịch vụ mã địa lý miễn phí được cung cấp trên geonames.org (xem Tài nguyên). RESTful API của nó cho phép tôi chỉ ra rằng tôi đang cung cấp một mã IATA thay vì một giới hạn tìm kiếm-văn bản chung chung. Tôi không có gì chống lại các cư dân của Ord, Ned., nhưng tôi quan tâm nhất là Sân bay Quốc tế Chicago O'Hare.
Nhập URL
http://ws.geonames.org/search?name_equals=den&fcode=airp&style=full
vào trình duyệt Web của bạn. Bạn nên xem XML trả về được trình bày trong
Ví dụ 1:
Ví dụ 1. XML trả về từ yêu cầu mã địa lý
<geonames style="FULL"> <totalResultsCount>1</totalResultsCount> <geoname> <name>Denver International Airport</name> <lat>39.8583188</lat> <lng>-104.6674674</lng> <geonameId>5419401</geonameId> <countryCode>US</countryCode> <countryName>United States</countryName> <fcl>S</fcl> <fcode>AIRP</fcode> <fclName>spot, building, farm</fclName> <fcodeName>airport</fcodeName> <population/> <alternateNames>DEN,KDEN</alternateNames> <elevation>1655</elevation> <continentCode>NA</continentCode> <adminCode1>CO</adminCode1> <adminName1>Colorado</adminName1> <adminCode2>031</adminCode2> <adminName2>Denver County</adminName2> <alternateName lang="iata">DEN</alternateName> <alternateName lang="icao">KDEN</alternateName> <timezone dstOffset="-6.0" gmtOffset="-7.0">America/Denver</timezone> </geoname> </geonames>
Tham số
name_equals trong URL bạn nhập vào là mã IATA cho sân
bay. Nó chỉ là một phần của URL mà cần bị thay đổi cho mỗi truy vấn.
fcode=airp chỉ ra rằng mã đặc trưng bạn đang tìm kiếm là một
sân bay. Tham số
style—
short,
medium,
long, hoặc
full— chỉ rõ tính đầy đủ của câu trả lời
XML.
Giờ đây bạn có một trình sinh mã địa lý, bước tiếp theo là tích hợp nó vào ứng dụng Grails của bạn. Để làm được như vậy, bạn cần một dịch vụ.
Những dịch vụ Grails
Bằng điểm này trong loạt bài Làm chủ Grails, bạn có một ý tưởng hay về
các phân lớp miền, các kiểm soát, và các Trang Máy chủ Groovy (GSP) tất cả
làm việc với nhau trong một kiểu tổ hợp như thế nào. Chúng làm cho các
thao tác cơ bản Tạo/Truy lục/Cập nhật/Xóa (Create/Retrieve/Update/Delete
(CRUD)) dễ dàng trên một kiểu dữ liệu đơn. Dịch vụ mã địa lý này vượt một
chút ra ngoài phạm vi của các phép biến đổi Ánh xạ Quan hệ Đối tượng
Grails (Grails Object Relational Mapping (GORM)) từ các bản ghi cơ sở dữ
liệu quan hệ tới POGOs (các đối tượng Groovy cũ đơn giản). Ngoài ra, dịch
vụ sẽ có thể được sử dụng bởi nhiều hơn một phương thức. Cả
save và
update sẽ cần mã địa lý mã IATA, như bạn
sẽ thấy ở một thời điểm. Grails cung cấp cho bạn một nơi để lưu trữ các
phương thức được sử dụng phổ biến mà vượt qua bất kỳ lớp miền đơn: các
dịch vụ.
Để tạo một dịch vụ Grails, gõ
grails create-service Geocoder
ở dòng lệnh. Xem grails-app/services/GeocoderService.groovy, được trình
bày ở Ví dụ 2, trong một bộ soạn thảo văn bản:
Ví dụ 2. Một dịch vụ Grails nhiều nhánh-ra
class GeocoderService { boolean transactional = true def serviceMethod() { } }
Trường
transactional được quan tâm nếu bạn đang thực hiện các
truy vấn cơ sở dữ liệu phức tạp trong cùng một phương thức. Nó gói mọi thứ
trong một giao dịch cơ sở dữ liệu đơn mà trả về nếu bất kỳ truy vấn nào
lỗi. Bởi vì trong ví dụ này bạn đang thực hiện gọi một dịch vụ Web từ xa,
bạn có thể thiết lập nó một cách an toàn là
false.
serviceMethod tên là một trình giữ chỗ mà có thể được thay đổi
thành cái gì đó hơn là mô tả. (Các dịch vụ có thể chứa nhiều phương thức
như bạn muốn.) Trong Ví dụ 3, tôi thay đổi tên thành
geocodeAirport:
Ví dụ 3. Phương thức dịch vụ trình sinh mã địa
lý
geocodeAirport()
class GeocoderService { boolean transactional = false // http://ws.geonames.org/search?name_equals=den&fcode=airp&style=full def geocodeAirport(String iata) { def base = "http://ws.geonames.org/search?" def qs = [] qs << "name_equals=" + URLEncoder.encode(iata) qs << "fcode=airp" qs << "style=full" def url = new URL(base + qs.join("&")) def connection = url.openConnection() def result = [:] if(connection.responseCode == 200){ def xml = connection.content.text def geonames = new XmlSlurper().parseText(xml) result.name = geonames.geoname.name as String result.lat = geonames.geoname.lat as String result.lng = geonames.geoname.lng as String result.state = geonames.geoname.adminCode1 as String result.country = geonames.geoname.countryCode as String } else{ log.error("GeocoderService.geocodeAirport FAILED") log.error(url) log.error(connection.responseCode) log.error(connection.responseMessage) } return result } }
Phần đầu của phương thức
geocodeAirport xây dựng URL và thực
hiện kết nối. Những phần tử chuỗi-truy vấn được tập hợp trong một
ArrayList và sau đó nối với nhau bởi dấu "và". Phần cuối của
phương thức phân tích kết quả XML sử dụng một
XmlSlurper
Groovy và lưu trữ các kết quả trong một bản đồ băm.
Các dịch vụ Groovy không thể truy cập một cách trực tiếp từ một URL. Nếu
bạn muốn kiểm tra phương thức dịch vụ mới này trong trình duyệt Web của
bạn, thêm một bao đóng đơn giản cho
AirportController, như
được trình bày trong Ví dụ 4:
Ví dụ 4. Cung cấp một URL cho một dịch vụ trong một bộ điều khiển.
import grails.converters.* class AirportController { def geocoderService def scaffold = Airport def geocode = { def result = geocoderService.geocodeAirport(params.iata) render result as JSON } ... }
Spring xen dịch vụ vào bộ điều khiển một cách tự động nếu bạn định nghĩa một biến thành viên với tên trùng với dịch vụ. (Với bí quyết để làm việc này, bạn phải thay đổi kí tự đầu tiên của tên dịch vụ từ chữ hoa thành chữ thường theo những quy ước đặt tên biến của Java.)
Để kiểm tra dịch vụ, nhập URL
http://localhost:9090/trip/airport/geocode?iata=den trong
trình duyệt Web của bạn. Bạn nên xem kết quả được thể hiện trong Ví dụ
5:
Ví dụ 5. Các kết quả của yêu cầu trình sinh mã địa lý
{"name":"Denver International Airport", "lat":"39.8583188", "lng":"-104.6674674", "state":"CO", "country":"US"}
Bao đóng
geocode trong
AirportController là chỉ
để cho bạn kiểm tra sự đúng đắn dịch vụ. Bạn có thể gỡ bỏ nó đi, hoặc bạn
có thể để nó lại cho các cuộc gọi Ajax tương lai có thể có. Bước tiếp theo
là hệ số lại cơ sở hạ tầng
Airport để tận dụng ưu điểm của
dịch vụ mã địa lý mới này.
Hòa trộn trong dịch vụ
Để bắt đầu, thêm các trường mới
lat và
lng vào
grails-app/domain/Airport.groovy, như được trình bày trong Ví dụ 6:
Ví dụ 6. Thêm các trường
lat và
lng vào
Airport POGO
class Airport{ static constraints = { name() iata(maxSize:3) city() state(maxSize:2) country() } String name String iata String city String state String country = "US" String lat String lng String toString(){ "${iata} - ${name}" } }
Gõ
grails generate-views Airport ở dấu nhắc lệnh để tạo các
tệp tin GSP. Chúng được gắn liên kết động ở thời gian chạy tới điểm này,
nhờ dòng
def scaffold = Airport trong
AirportController.groovy. Vì tôi muốn thực hiện vài thay đổi cho các khung
nhìn, tôi cần mã hóa thủ công.
Khi tạo một
Airport mới, tôi sẽ giới hạn các trường người
dùng-có thể soạn thảo là
iata và
city. Trường
iata là cần thiết cho truy vấn mã địa lý làm việc. Tôi để
city ở đây bởi vì tôi muốn cung cấp thông tin đó cho bản
thân. DEN thực sự là ở Denver, nhưng ORD (Chicago O'Hare) thì ở Rosemont,
Ill., và CVG (Cincinnati, sân bay Ohio) là ở Florence, Ky. Để hai trường
này trong create.gsp và xóa phần còn lại, do đó bây giờ create.gsp giống
như Ví dụ 7:
Ví dụ 7. Thay đổi create.gsp
<g:form action="save" method="post" >

 Iata:	  <input type="text" maxlength="3" id="iata" name="iata" value="${fieldValue(bean:airport,field:'iata')}"/>

 City:	  <input type="text" id="city" name="city" value="${fieldValue(bean:airport,field:'city')}"/>

 <input class="save" type="submit" value="Create" />
 </g:form>
Hình 2 thể hiện biểu mẫu kết quả:
Hình 2. Tạo biểu mẫu Airport
Biểu mẫu này được đưa tới bao đóng
save trong
AirportController. Thêm đoạn mã trong Ví dụ 8 vào bộ điều
khiển để thực hiện gọi tới
geocodeAirport trước khi
Airport mới được lưu lại:
Ví dụ 8. Thay đổi bao đóng
save
def save = { def results = geocoderService.geocodeAirport(params.iata) def airport = new Airport(params + results) if(!airport.hasErrors() && airport.save()) { flash.message = "Airport ${airport.id} created" redirect(action:show,id:airport.id) } else { render(view:'create',model:[airport:airport]) } }
Số lượng lớn phương thức là giống hệt những gì bạn thấy nếu bạn gõ
grails generate-controller Airport ở dấu nhắc lệnh. Sự khác
biệt duy nhất với bao đóng được sinh ra mặc định là hai dòng đầu tiên.
Dòng thứ nhất có
HashMap từ dịch vụ trình sinh mã địa lý.
Dòng thứ hai kết hợp
results
HashMap với
params
HashMap. (Vâng, việc hòa nhập hai
HashMaps trong Groovy đơn giản như việc thêm chúng với nhau.)
Nếu lưu trữ cơ sở dữ liệu hoàn thành, bạn được gửi một lần nữa tới hành động chỉ dẫn, không có thay đổi nào được yêu cầu cho show.gsp, như được trình bày trong Hình 3:
Hình 3. Thể hiện biểu mẫu Airport
Để hỗ trợ việc soạn thảo một
Airport, để lại các trường
iata và
city trong edit.gsp. Bạn có thể sao chép
và dán phần còn lại của các trường từ show.gsp để thực hiện chúng chỉ đọc.
(Hoặc nếu bạn đã đặt "sao chép và dán là hình thức thấp nhất của lập trình
hướng đối tượng" từ bài viết trước đó, bạn có thể giải nén các trường phổ biến vào
một mẫu riêng và hoàn trả nó trên cả show.gsp và edit.gsp.) Ví dụ 9 trình
bày thay đổi edit.gsp:
Ví dụ 9. Thay đổi edit.gsp
<g:form method="post" > <input type="hidden" name="id" value="${airport?.id}" />

 Iata:	  <input type="text" maxlength="3" id="iata" name="iata" value="${fieldValue(bean:airport,field:'iata')}"/>

 City:	  <input type="text" id="city" name="city" value="${fieldValue(bean:airport,field:'city')}"/>

 Name:	 ${airport.name}

 State:	 ${airport.state}

 Country:	 ${airport.country}

 Lat:	 ${airport.lat}

 Lng:	 ${airport.lng}

 <g:actionSubmit class="save" value="Update" />  <g:actionSubmit class="delete" onclick="return confirm('Are you sure?');" value="Delete" />
 </g:form>
Biểu mẫu kết quả được trình bày ở Hình 4:
Hình 4. Biểu mẫu soạn thảo Airport
Nhấn chuột vào nút Update gửi các giá trị biểu mẫu tới
bao đóng
update. Thêm dịch vụ gọi và bản đồ băm trộn vào mã
mặc định, như được trình bày trong Ví dụ 10:
Ví dụ 10. Thay đổi bao đóng
update
def update = { def airport = Airport.get( params.id ) if(airport) { def results = geocoderService.geocodeAirport(params.iata) airport.properties = params + results if(!airport.hasErrors() && airport.save()) { flash.message = "Airport ${params.id} updated" redirect(action:show,id:airport.id) } else { render(view:'edit',model:[airport:airport]) } } else { flash.message = "Airport not found with id ${params.id}" redirect(action:edit,id:params.id) } }
Tại thời điểm này, bạn đã tích hợp hoàn toàn mã địa lí vào ứng dụng của bạn cũng giống như Các bản đồ Google. Mất một chút thời gian để xem xét toàn bộ các vị trí trên ứng dụng của bạn mà bạn đang thu nhận các địa chỉ — các khách hàng, các nhân viên, các văn phòng từ xa, kho hàng, các địa phương bán lẻ, v.v.. Bằng việc thêm một cặp các trường để lưu trữ vĩ độ/kinh độ và trộn vào dịch vụ mã địa lí, bạn đang thiết lập cho bản thân mình những bản đồ dễ dàng để hiển thị các đối tượng — đó chính là những gì tôi sẽ làm tiếp theo.
Các bản đồ Google
Hầu hết mọi người đồng ý rằng Các bản đồ Google thiết lập chuẩn giúp dễ sử dụng hơn khi nó thành bản đồ Web. Một vài người nhận ra rằng việc dễ dùng này mở rộng cho việc nhúng một bản đồ Google vào trang Web của riêng bạn. Đưa tọa độ vĩ độ/kinh độ cho các điểm dữ liệu là phần bài tập khó nhất, và chúng ta sẵn sàng giải quyết vấn đề đó.
Để nhúng một Bản đồ Google vào ứng dụng Grails của bạn, điều trước tiên bạn cần làm là có một khóa API miễn phí. Trang đăng kí chi tiết các điều khoản sử dụng. Về cơ bản, Google cung cấp API cho bạn miễn phí với điều kiện ứng dụng của bạn cũng là miễn phí. Điều này có nghĩa là bạn không thể bảo vệ ứng dụng Các bản đồ Google của bạn bằng mật khẩu, tính phí cho việc truy cập vào nó, hoặc lưu trữ nó đằng sau tường lửa. (Shameless plug: My book GIS for Web Developers cho bạn tập các hướng dẫn từng bước cho việc xây dựng một ứng dụng giống Bản đồ Google sử dụng dữ liệu miễn phí và phần mềm nguồn mở; xem Tài nguyên. Điều này giải phóng bạn khỏi những hạn chế Google đặt trên API của bạn).
Khóa API được gắn với một URL và thư mục cụ thể. Gõ
http://localhost:9090/trip trên biểu mẫu và nhấn nút
Generate API Key. Trang xác nhận cho thấy khóa API
được sinh ra của bạn, nó liên quan đến URL, và một trang Web mẫu, như họ
nói, "để bạn bắt đầu trên con đường lập bản đồ"
Để kết hợp trang mẫu này vào ứng dụng Grails của bạn, tạo một tập tin có tên map.gsp trong thư mục grails-app/views/airport. Sao chép trang mẫu từ Google vào map.gsp. Ví dụ 11 cho thấy các nội dung của map.gsp:
Ví dụ 11. Một trang Web Bản đồ Google đơn giản
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">   <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>Google Maps JavaScript API Example</title>

Chú ý rằng khóa API của bạn được nhúng vào tập lệnh URL ở đầu trang. Trong
phương thức
load, bạn đang thể hiện một đối tượng
GMap2 mới. Đây là bản đồ mà xuất hiện ở
 với ID
của
map ở cuối của trang. Nếu bạn muốn bản đồ lớn hơn, điều
chỉnh độ rộng và chiều cao trong thuộc tính
style của
Cascading Style Sheets (CSS). Hiện nay bản đồ được tập trung vào Palo
Alto, Calif. ở mức độ phóng 13 (Mức 0 là mức thu nhỏ tất cả các trường
hợp. Khi các số tăng lên, bạn có khung nhìn các đường phố rõ hơn). Bạn sẽ
điều chỉnh các giá trị này chỉ trong một thời điểm. Trong khi chờ đợi,
thêm một bao đóng
map rỗng vào
AirlineController, như được trình bày ở Ví dụ 12:
Ví dụ 12. Thêm bao đóng
map
class AirportController { def map = {} ... }
Bây giờ vào địa chỉ http://localhost:9090/trip/airport/map trên trình duyệt của bạn. Bạn thấy Bản đồ Google được nhúng, nó trong giống như Hình 5:
Hình 5. Bản đồ Google đơn giản
Bây giờ quay lại map.gsp và ngắt các giá trị, như được biểu diễn trong Ví dụ 13:
Ví dụ 13. Điều chỉnh bản đồ cơ bản

800 x 400 điểm ảnh là tập kích thước tốt cho việc xem toàn bộ bản đồ nước
Mỹ. Ví dụ 13 điều chỉnh điểm trung tâm và mức độ phóng để bạn có thể xem
toàn bộ bản đồ. Bạn có thể thêm một số các điều khiển bản đồ khác.
GLargeMapControl và
GMapTypeControl trong Ví dụ
13 cho bạn các điều khiển thông thường dọc theo góc trái và trên phải của
bản đồ. Định kì nhấn nút Refresh của trình duyệt của bạn để xem những thay
đổi của bạn có hiệu lực khi bạn thực hiện xung quanh. Hình 6 phản ánh
những điều chỉnh đã thực hiện trong Ví dụ 13:
Hình 6. Bản đồ đã điều chỉnh
Bây giờ bản đồ của bạn là ở đây, bạn đã sẵn sàng để bắt đầu thêm các đánh dấu — push-pin cho mỗi sân bay của bạn. Trước khi tôi tự động hóa tiến trình, Ví dụ 14 thêm một đánh dấu đơn một cách thủ công:
Ví dụ 14. Thêm một đánh dấu vào bản đồ

Hàm
GMarker đưa ra điểm
GLatLng. Phương thức
bindInfoWindowHtml cung cấp đoạn mã HTML được hiển thị trên
cửa sổ Info khi người dùng nhấn vào đánh dấu. Điều cuối cùng của Ví dụ 14
thực hiện là thêm đánh dấu vào bản đồ sử dụng phương thức
addOverlay.
Hình 7 thể hiện bản đồ với đánh dấu đã thêm vào:
Hình 7. Bản đồ với đánh dấu
Vì bạn biết làm thế nào để thêm một điểm đơn, việc thêm một cách tự động
tất cả các điểm từ cơ sở dữ liệu yêu cầu hai thay đổi nhỏ. Thay đổi thứ
nhất để thực hiện bao đóng
map trong
AirportController trả về một danh sách các
Airport, như được trình bày ở Ví dụ 15:
Ví dụ 15. Trả về một danh sách các Airport
def map = { [airportList: Airport.list()] }
Tiếp theo, bạn cần lặp đi lặp lại danh sách các
Airport và
tạo các đánh dấu cho mỗi danh sách. Trong phần trước của loạt bài này, bạn
đã thấy thẻ
<g:each> được dùng để thêm các dòng vào một
bảng HTML. Ví dụ 16 sử dụng thẻ này để tạo các dòng JavaScript cần thiết
để hiển thị các
Airport trên bản đồ:
Ví dụ 16. Thêm các đánh dấu vào bản đồ

Hình 8 cho thấy bản đồ với tất cả các đánh dấu đã thêm vào một cách tự động:
Hình 8. Bản đồ với nhiều đánh dấu
Chuyến đi này của API Bản đồ Google chỉ vừa đủ để bạn thảo luận sơ qua bề
ngoài những thứ mà bạn có thể làm. Bạn có thể quyết định đề cập đến mô
hình sự kiện để thực hiện các lời gọi Ajax mà trả về dữ liệu JavaScript
Object Notation (JSON) khi các đánh dấu được nhấn. Bạn có thể sử dụng các
GPolyline để vẽ các chặng riêng của một chuyến đi trên bản
đồ. Các khả năng là vô tận. Để biết thêm thông tin, tài liệu trực tuyến
của Google là tuyệt vời. Bạn cũng có thể có một giới thiệu nhỏ về API từ
cuốn sách PDF của tôi Google Maps API (xem Tài nguyên).
Kết luận
Việc thêm các bản đồ vào ứng dụng Grails của bạn yêu cầu đưa vào ba thành phần.
Phần đầu tiên là mã địa lý dữ liệu của bạn. Ngoài ra có nhiều trình sinh mã địa lí miễn phí mà chuyển đổi các vị trí người dùng có thể đọc được thành các điểm vĩ độ/kinh độ. Gần như bất kì điều gì có thể được mã hóa địa lí: các địa chỉ đường phố, các thành phố, các hạt, các bang, các quốc gia, các mã vùng, các số điện thoại, các địa chỉ IP, và thậm chí các mã IATA cho các sân bay.
Một khi bạn tìm thấy trình sinh mã địa lí đúng cho công việc, tạo một dịch vụ Grails để đóng gói các dịch vụ Web từ xa gọi đến phương thức sử dụng lại. Những dịch vụ cho các phương thức này mà đi xa hơn các thao tác CRUD đơn giản trên đối tượng miền đơn. Những dịch vụ không liên quan đến URL mặc định, nhưng bạn có thể tạo một cách dễ dàng một bao đóng trong một bộ điều khiển để thực hiện địa chỉ hóa Web chúng.
Cuối cùng, tận dùng ưu điểm của API ánh xạ Web miễn phí chẳng hạn như Bản đồ Google để vẽ các điểm vĩ độ/kinh độ của bạn trên một bản đồ. Những dịch vụ miễn phí này thường đòi hỏi ứng dụng của bạn cũng được truy cập miễn phí. Nếu bạn muốn giữ bản đồ cá nhân của riêng bạn, hãy xem xét API nguồn mở chẳng hạn như OpenLayers, nó cung cấp kinh nghiệm người dùng giống như Bản đồ Google mà không có sự hạn chế sử dụng tương ứng (xem Tài nguyên). Bạn sẽ cần phải cung cấp các lớp bản đồ của riêng bạn, nhưng bạn sẽ có thể lưu trữ toàn bộ ứng dụng vào máy chủ của riêng bạn.
Trong bài viết tiếp theo, tôi sẽ nói về cách để thực hiện ứng dụng Grails của bạn trên mạng di động một cách thân thiện. Bạn sẽ biết làm thế nào để tối ưu các khung nhìn cho hiển thị iPhone. Tôi cũng sẽ giải thích việc gửi thông tin từ Grails qua thư điện tử mà xuất hiện như là một tin nhắn SMS trên điện thoại của bạn. Cho đến lúc đó, hãy vui vẻ với việc nắm vững Grails.
Tải về
Tài nguyên
Học tập
- Làm chủ Grails: Đọc thêm trong loạt bài này để thu được sự hiểu biết hơn về Grails và tất cả những gì mà bạn có thể làm với nó.
- Grails: Ghé thăm trang Web Grails.
- Grails Framework Reference Documentation (Tài liệu Tham khảo Khung làm việc Grails): Đưa bạn qua việc bắt đầu với Grails và xây dựng các ứng dụng Web với khung làm việc Grails.
- GeoNames: Dịch vụ mã địa lí GeoNames được dựa trên kiến trúc Representational State Transfer (REST)
- Google Maps API: Nhúng Các bản đồ Google vào các trang Web của bạn.
- Yahoo! Maps API: Nhúng các bản đồ Yahoo! vào trang Web của bạn và các ứng dụng màn hình nền.
- Geocoding (Mã địa lí): Nhập mã địa lí trên Wikipedia.
- GIS for Web Developers (GIS dành cho các Nhà phát triển Web) (Scott Davis, Pragmatic Programmers, 2007): Sách của Scott Davis giới thiệu về Hệ thống Thông tin Địa lí (Geographic Information Systems (GIS)) theo những từ ngữ đơn giản và thể hiện những hướng dẫn thực hành.
- The Google Maps API (Scott Davis, Pragmatic Programmers, 2006): Học làm thế nào để vẽ các bản đồ, thêm các diễn giải và các lộ trình, và mã hóa địa lí dữ liệu của bạn.
- OpenLayers API: OpenLayers là một thư viện JavaScript dành cho việc hiển thị dữ liệu bản đồ trên hầu hết các trình duyệt Web.
- Groovy Recipes (Scott Davis, Pragmatic Programmers, 2007): Biết thêm về Groovy và Grails trong cuốn sách mới nhất của Scott Davis.
- Practically Groovy: Chuỗi các developerWorks này được dành để khám phá tác dụng thực tế của Groovy và dạy cho bạn khi nào và như thế nào để áp dụng chúng một cách thành công.
- Groovy: Biết thêm về Groovy ở trang Web dự án.
- AboutGroovy.com: Keep up with the latest Groovy news and article links.
- Tủ sách kĩ thuật: Duyệt các cuốn sách về các chủ đề kĩ thuật này và khác.
- Khu công nghệ Java developerWorks: Tìm hàng trăm bài viết về mọi khía cạnh của lập trình Java.
Lấy sản phẩm và công nghệ
- Grails: Tải về các Grails mới nhất.
- OpenLayers: Tải về OpenLayers.
Thảo luận
- Kiểm tra các blog developerWorks và tham gia vào cộng đồng developerWorks.
Bình luận
-
Vùng dữ liệu trên developerWorks
Khám phá các bài viết xoay quanh lĩnh vực dữ liệu, Quản lý hệ thống thông tin
-
Vùng mã nguồn mở trên developerWorks
Xem các bài viết về HTML, CSS, JavaScript,...
-
Điện toán đám mây
Tìm hiểu về điện toán đám mây

markdown:
Tôi đã xây dựng một ứng dụng lập kế hoạch-chuyến đi từ
[bài viết đầu tiên](http://www.ibm.com/developerworks/vn/library/j-grails01158/index.html) trong loạt bài này. Giờ khung làm việc Người
điều khiển-Khung nhìn-Mô hình (Model-View-Controller (MVC)) cơ bản đó đang
ở đây, ta sẵn sàng để hòa trộn với những kĩ thuật bên ngoài. Cụ thể, ta sẽ
thêm một bản đồ. Tôi có thể nói, "Tôi đang đặt một chuyến đi từ Denver tới
Raleigh, với những điểm dừng ở San Jose và Seattle dọc đường đi," nhưng
một bản đồ sẽ giúp mô tả chuyến đi tốt hơn. Bạn có thể biết rằng Seattle
và Raleigh ở những phía đối diện nhau của nước Mỹ, nhưng một bản đồ giúp
bạn hình dung khoảng cách giữa hai thành phố này.
Cho bạn một ý tưởng ban đầu về ứng dụng gì sẽ làm ở phần cuối của bài viết
này, hãy vào trang http://maps.google.com và nhập mã IATA
DEN
trong hộp tìm kiếm. Bạn nên kết thúc ở Sân bay Quốc tế Denver, như được
biểu diễn trong Hình 1. (Biết thêm về những mã IATA, xem
[bài viết của tháng trước](http://www.ibm.com/developerworks/java/library/j-grails04158/index.html?S_TACT=105AGY75).)
##### Hình 1. Sân bay Denver, nhờ Các bản đồ của Google
![ Denver Airport, courtesy of Google Maps](den-googleMaps.jpg)
Bên cạnh việc hiển thị các sân bay của Mỹ bạn tạo một bảng HTML, lập kế
hoạch-chuyến đi cũng sẽ vẽ được các sân bay trên một bản đồ. Tôi sẽ sử
dụng API Các bản đồ Google miễn phí trong bài viết này. Bạn có thể sử dụng
API Các bản đồ Yahoo! miễn phí hoặc bất kỳ cái nào khác (xem
[Tài nguyên](#resources)). Một khi bạn hiểu những điều cơ bản
về bản đồ Web trực tuyến, bạn sẽ hiểu rằng các API khác nhau có thể hoán
đổi cho nhau một cách hợp lí. Trước khi bạn có thể ánh xạ một phần của
giải pháp, bạn cần hiểu làm thế nào để một chuỗi ba kí tự đơn giản như DEN
biến đổi thành một điểm trên bản đồ
## Mã địa lí
Khi bạn nhập DEN vào Các bản đồ Google, ứng dụng thực hiện một phép biến
đổi nhỏ đằng sau. Bạn có thể nghĩ tới những địa phương về mặt địa chỉ
đường phố như Đường 123 Main, nhưng các bản đồ Google cần một điểm vĩ
độ/kinh độ để hiển thị nó trên bản đồ. Hơn nữa bắt buộc bạn cung cấp điểm
vĩ độ/kinh độ của mình, nó dịch các địa chỉ người dùng có thể đọc được vào
những vĩ độ/kinh độ thay cho bạn. Phép biến đổi này được gọi là
*mã địa
lí (geocoding)* (xem [Tài nguyên](#resources)).
Một phép biến đổi tương tự xảy ra khi bạn lướt Web. Về kỹ thuật, cách duy nhất để liên lạc với một máy chủ Web từ xa là địa chỉ IP của máy chủ cung cấp. May thay, bạn không cần nhập địa chỉ IP của mình. Bạn nhập một URL thân thiện vào trình duyệt Web của bạn, và nó thực hiện việc gọi máy chủ Hệ thống Tên Miền (Domain Name System (DNS)). Máy chủ DNS đổi URL thành địa chỉ IP tương ứng, và trình duyệt thực hiện kết nối HTTP tới máy chủ từ xa. Tất cả điều này là trong suốt với người dùng. DNS thực hiện Web vô cùng dễ dàng để sử dụng. Những trình sinh mã địa lí (geocoder) thực hiện việc tương tự cho các ứng dụng bản đồ dựa trên Web.
Tìm kiếm Web nhanh trên
*trình sinh mã địa kí miễn phí* mang lại một
số khả năng phù hợp với nhu cầu mã hóa địa lí của những người lập kế hoạch
chuyến đi. Cả Google và Yahoo! cung cấp các dịch vụ mã địa lý như một phần
tiêu chuẩn của các API của họ, nhưng với ứng dụng này, tôi sẽ sử dụng dịch
vụ mã địa lý miễn phí được cung cấp trên geonames.org (xem [Tài nguyên](#resources)). RESTful API của nó cho phép tôi chỉ
ra rằng tôi đang cung cấp một mã IATA thay vì một giới hạn tìm kiếm-văn
bản chung chung. Tôi không có gì chống lại các cư dân của Ord, Ned., nhưng
tôi quan tâm nhất là Sân bay Quốc tế Chicago O'Hare.
Nhập URL
http://ws.geonames.org/search?name_equals=den&fcode=airp&style=full
vào trình duyệt Web của bạn. Bạn nên xem XML trả về được trình bày trong
Ví dụ 1:
##### Ví dụ 1. XML trả về từ yêu cầu mã địa lý
<geonames style="FULL"> <totalResultsCount>1</totalResultsCount> <geoname> <name>Denver International Airport</name> <lat>39.8583188</lat> <lng>-104.6674674</lng> <geonameId>5419401</geonameId> <countryCode>US</countryCode> <countryName>United States</countryName> <fcl>S</fcl> <fcode>AIRP</fcode> <fclName>spot, building, farm</fclName> <fcodeName>airport</fcodeName> <population/> <alternateNames>DEN,KDEN</alternateNames> <elevation>1655</elevation> <continentCode>NA</continentCode> <adminCode1>CO</adminCode1> <adminName1>Colorado</adminName1> <adminCode2>031</adminCode2> <adminName2>Denver County</adminName2> <alternateName lang="iata">DEN</alternateName> <alternateName lang="icao">KDEN</alternateName> <timezone dstOffset="-6.0" gmtOffset="-7.0">America/Denver</timezone> </geoname> </geonames>
Tham số
name_equals trong URL bạn nhập vào là mã IATA cho sân
bay. Nó chỉ là một phần của URL mà cần bị thay đổi cho mỗi truy vấn.
fcode=airp chỉ ra rằng mã đặc trưng bạn đang tìm kiếm là một
sân bay. Tham số
style—
short,
medium,
long, hoặc
full— chỉ rõ tính đầy đủ của câu trả lời
XML.
Giờ đây bạn có một trình sinh mã địa lý, bước tiếp theo là tích hợp nó vào
ứng dụng Grails của bạn. Để làm được như vậy, bạn cần một
*dịch
vụ*.
## Những dịch vụ Grails
Bằng điểm này
[trong loạt bài Làm chủ Grails](http://www.ibm.com/developerworks/vn/views/java/libraryview.jsp?search_by=Làm+chủ+Grails), bạn có một ý tưởng hay về
các phân lớp miền, các kiểm soát, và các Trang Máy chủ Groovy (GSP) tất cả
làm việc với nhau trong một kiểu tổ hợp như thế nào. Chúng làm cho các
thao tác cơ bản Tạo/Truy lục/Cập nhật/Xóa (Create/Retrieve/Update/Delete
(CRUD)) dễ dàng trên một kiểu dữ liệu đơn. Dịch vụ mã địa lý này vượt một
chút ra ngoài phạm vi của các phép biến đổi Ánh xạ Quan hệ Đối tượng
Grails (Grails Object Relational Mapping (GORM)) từ các bản ghi cơ sở dữ
liệu quan hệ tới POGOs (các đối tượng Groovy cũ đơn giản). Ngoài ra, dịch
vụ sẽ có thể được sử dụng bởi nhiều hơn một phương thức. Cả
savevà
updatesẽ cần mã địa lý mã IATA, như bạn sẽ thấy ở một thời điểm. Grails cung cấp cho bạn một nơi để lưu trữ các phương thức được sử dụng phổ biến mà vượt qua bất kỳ lớp miền đơn: các dịch vụ.
Để tạo một dịch vụ Grails, gõ
grails create-service Geocoder
ở dòng lệnh. Xem grails-app/services/GeocoderService.groovy, được trình
bày ở Ví dụ 2, trong một bộ soạn thảo văn bản:
##### Ví dụ 2. Một dịch vụ Grails nhiều nhánh-ra
class GeocoderService { boolean transactional = true def serviceMethod() { } }
Trường
transactional được quan tâm nếu bạn đang thực hiện các
truy vấn cơ sở dữ liệu phức tạp trong cùng một phương thức. Nó gói mọi thứ
trong một giao dịch cơ sở dữ liệu đơn mà trả về nếu bất kỳ truy vấn nào
lỗi. Bởi vì trong ví dụ này bạn đang thực hiện gọi một dịch vụ Web từ xa,
bạn có thể thiết lập nó một cách an toàn là
false.
serviceMethod tên là một trình giữ chỗ mà có thể được thay đổi
thành cái gì đó hơn là mô tả. (Các dịch vụ có thể chứa nhiều phương thức
như bạn muốn.) Trong Ví dụ 3, tôi thay đổi tên thành
geocodeAirport:
##### Ví dụ 3. Phương thức dịch vụ trình sinh mã địa
lý
geocodeAirport()
class GeocoderService { boolean transactional = false // http://ws.geonames.org/search?name_equals=den&fcode=airp&style=full def geocodeAirport(String iata) { def base = "http://ws.geonames.org/search?" def qs = [] qs << "name_equals=" + URLEncoder.encode(iata) qs << "fcode=airp" qs << "style=full" def url = new URL(base + qs.join("&")) def connection = url.openConnection() def result = [:] if(connection.responseCode == 200){ def xml = connection.content.text def geonames = new XmlSlurper().parseText(xml) result.name = geonames.geoname.name as String result.lat = geonames.geoname.lat as String result.lng = geonames.geoname.lng as String result.state = geonames.geoname.adminCode1 as String result.country = geonames.geoname.countryCode as String } else{ log.error("GeocoderService.geocodeAirport FAILED") log.error(url) log.error(connection.responseCode) log.error(connection.responseMessage) } return result } }
Phần đầu của phương thức
geocodeAirport xây dựng URL và thực
hiện kết nối. Những phần tử chuỗi-truy vấn được tập hợp trong một
ArrayList và sau đó nối với nhau bởi dấu "và". Phần cuối của
phương thức phân tích kết quả XML sử dụng một
XmlSlurper
Groovy và lưu trữ các kết quả trong một bản đồ băm.
Các dịch vụ Groovy không thể truy cập một cách trực tiếp từ một URL. Nếu
bạn muốn kiểm tra phương thức dịch vụ mới này trong trình duyệt Web của
bạn, thêm một bao đóng đơn giản cho
AirportController, như
được trình bày trong Ví dụ 4:
##### Ví dụ 4. Cung cấp một URL cho một dịch vụ trong một bộ điều khiển.
import grails.converters.* class AirportController { def geocoderService def scaffold = Airport def geocode = { def result = geocoderService.geocodeAirport(params.iata) render result as JSON } ... }
Spring xen dịch vụ vào bộ điều khiển một cách tự động nếu bạn định nghĩa một biến thành viên với tên trùng với dịch vụ. (Với bí quyết để làm việc này, bạn phải thay đổi kí tự đầu tiên của tên dịch vụ từ chữ hoa thành chữ thường theo những quy ước đặt tên biến của Java.)
Để kiểm tra dịch vụ, nhập URL
http://localhost:9090/trip/airport/geocode?iata=den trong
trình duyệt Web của bạn. Bạn nên xem kết quả được thể hiện trong Ví dụ
5:
##### Ví dụ 5. Các kết quả của yêu cầu trình sinh mã địa lý
{"name":"Denver International Airport", "lat":"39.8583188", "lng":"-104.6674674", "state":"CO", "country":"US"}
Bao đóng
geocode trong
AirportController là chỉ
để cho bạn kiểm tra sự đúng đắn dịch vụ. Bạn có thể gỡ bỏ nó đi, hoặc bạn
có thể để nó lại cho các cuộc gọi Ajax tương lai có thể có. Bước tiếp theo
là hệ số lại cơ sở hạ tầng
Airport để tận dụng ưu điểm của
dịch vụ mã địa lý mới này.
## Hòa trộn trong dịch vụ
Để bắt đầu, thêm các trường mới
lat và
lng vào
grails-app/domain/Airport.groovy, như được trình bày trong Ví dụ 6:
##### Ví dụ 6. Thêm các trường
lat và
lng vào
Airport POGO
class Airport{ static constraints = { name() iata(maxSize:3) city() state(maxSize:2) country() } String name String iata String city String state String country = "US" String lat String lng String toString(){ "${iata} - ${name}" } }
Gõ
grails generate-views Airport ở dấu nhắc lệnh để tạo các
tệp tin GSP. Chúng được gắn liên kết động ở thời gian chạy tới điểm này,
nhờ dòng
def scaffold = Airport trong
AirportController.groovy. Vì tôi muốn thực hiện vài thay đổi cho các khung
nhìn, tôi cần mã hóa thủ công.
Khi tạo một
Airport mới, tôi sẽ giới hạn các trường người
dùng-có thể soạn thảo là
iata và
city. Trường
iata là cần thiết cho truy vấn mã địa lý làm việc. Tôi để
city ở đây bởi vì tôi muốn cung cấp thông tin đó cho bản
thân. DEN thực sự là ở Denver, nhưng ORD (Chicago O'Hare) thì ở Rosemont,
Ill., và CVG (Cincinnati, sân bay Ohio) là ở Florence, Ky. Để hai trường
này trong create.gsp và xóa phần còn lại, do đó bây giờ create.gsp giống
như Ví dụ 7:
##### Ví dụ 7. Thay đổi create.gsp
<g:form action="save" method="post" >

 Iata:	  <input type="text" maxlength="3" id="iata" name="iata" value="${fieldValue(bean:airport,field:'iata')}"/>

 City:	  <input type="text" id="city" name="city" value="${fieldValue(bean:airport,field:'city')}"/>

 <input class="save" type="submit" value="Create" />
 </g:form>
Hình 2 thể hiện biểu mẫu kết quả:
##### Hình 2. Tạo biểu mẫu Airport
![ Tạo Airport](newAirport.jpg)
Biểu mẫu này được đưa tới bao đóng
save trong
AirportController. Thêm đoạn mã trong Ví dụ 8 vào bộ điều
khiển để thực hiện gọi tới
geocodeAirport trước khi
Airport mới được lưu lại:
##### Ví dụ 8. Thay đổi bao đóng
save
def save = { def results = geocoderService.geocodeAirport(params.iata) def airport = new Airport(params + results) if(!airport.hasErrors() && airport.save()) { flash.message = "Airport ${airport.id} created" redirect(action:show,id:airport.id) } else { render(view:'create',model:[airport:airport]) } }
Số lượng lớn phương thức là giống hệt những gì bạn thấy nếu bạn gõ
grails generate-controller Airport ở dấu nhắc lệnh. Sự khác
biệt duy nhất với bao đóng được sinh ra mặc định là hai dòng đầu tiên.
Dòng thứ nhất có
HashMap từ dịch vụ trình sinh mã địa lý.
Dòng thứ hai kết hợp
results
HashMap với
params
HashMap. (Vâng, việc hòa nhập hai
HashMaps trong Groovy đơn giản như việc thêm chúng với nhau.)
Nếu lưu trữ cơ sở dữ liệu hoàn thành, bạn được gửi một lần nữa tới hành động chỉ dẫn, không có thay đổi nào được yêu cầu cho show.gsp, như được trình bày trong Hình 3:
##### Hình 3. Thể hiện biểu mẫu Airport
![ Show Airport](showAirport.jpg)
Để hỗ trợ việc soạn thảo một
Airport, để lại các trường
iata và
city trong edit.gsp. Bạn có thể sao chép
và dán phần còn lại của các trường từ show.gsp để thực hiện chúng chỉ đọc.
(Hoặc nếu bạn đã đặt "sao chép và dán là hình thức thấp nhất của lập trình
hướng đối tượng" từ
[bài viết trước đó](http://www.ibm.com/developerworks/java/library/j-grails03118/index.html?S_TACT=105AGY75), bạn có thể giải nén các trường phổ biến vào
một mẫu riêng và hoàn trả nó trên cả show.gsp và edit.gsp.) Ví dụ 9 trình
bày thay đổi edit.gsp:
##### Ví dụ 9. Thay đổi edit.gsp
<g:form method="post" > <input type="hidden" name="id" value="${airport?.id}" />

 Iata:	  <input type="text" maxlength="3" id="iata" name="iata" value="${fieldValue(bean:airport,field:'iata')}"/>

 City:	  <input type="text" id="city" name="city" value="${fieldValue(bean:airport,field:'city')}"/>

 Name:	 ${airport.name}

 State:	 ${airport.state}

 Country:	 ${airport.country}

 Lat:	 ${airport.lat}

 Lng:	 ${airport.lng}

 <g:actionSubmit class="save" value="Update" />  <g:actionSubmit class="delete" onclick="return confirm('Are you sure?');" value="Delete" />
 </g:form>
Biểu mẫu kết quả được trình bày ở Hình 4:
##### Hình 4. Biểu mẫu soạn thảo Airport
![ Soạn thảo Airport](editAirport.jpg)
Nhấn chuột vào nút
**Update** gửi các giá trị biểu mẫu tới
bao đóng
update. Thêm dịch vụ gọi và bản đồ băm trộn vào mã
mặc định, như được trình bày trong Ví dụ 10:
##### Ví dụ 10. Thay đổi bao đóng
update
def update = { def airport = Airport.get( params.id ) if(airport) { def results = geocoderService.geocodeAirport(params.iata) airport.properties = params + results if(!airport.hasErrors() && airport.save()) { flash.message = "Airport ${params.id} updated" redirect(action:show,id:airport.id) } else { render(view:'edit',model:[airport:airport]) } } else { flash.message = "Airport not found with id ${params.id}" redirect(action:edit,id:params.id) } }
Tại thời điểm này, bạn đã tích hợp hoàn toàn mã địa lí vào ứng dụng của bạn cũng giống như Các bản đồ Google. Mất một chút thời gian để xem xét toàn bộ các vị trí trên ứng dụng của bạn mà bạn đang thu nhận các địa chỉ — các khách hàng, các nhân viên, các văn phòng từ xa, kho hàng, các địa phương bán lẻ, v.v.. Bằng việc thêm một cặp các trường để lưu trữ vĩ độ/kinh độ và trộn vào dịch vụ mã địa lí, bạn đang thiết lập cho bản thân mình những bản đồ dễ dàng để hiển thị các đối tượng — đó chính là những gì tôi sẽ làm tiếp theo.
## Các bản đồ Google
Hầu hết mọi người đồng ý rằng Các bản đồ Google thiết lập chuẩn giúp dễ sử dụng hơn khi nó thành bản đồ Web. Một vài người nhận ra rằng việc dễ dùng này mở rộng cho việc nhúng một bản đồ Google vào trang Web của riêng bạn. Đưa tọa độ vĩ độ/kinh độ cho các điểm dữ liệu là phần bài tập khó nhất, và chúng ta sẵn sàng giải quyết vấn đề đó.
Để nhúng một Bản đồ Google vào ứng dụng Grails của bạn, điều trước tiên
bạn cần làm là có một khóa API miễn phí. Trang đăng kí chi tiết các điều
khoản sử dụng. Về cơ bản, Google cung cấp API cho bạn miễn phí với điều
kiện ứng dụng của bạn cũng là miễn phí. Điều này có nghĩa là bạn không thể
bảo vệ ứng dụng Các bản đồ Google của bạn bằng mật khẩu, tính phí cho việc
truy cập vào nó, hoặc lưu trữ nó đằng sau tường lửa. (Shameless plug: My
book
*GIS for Web Developers* cho bạn tập các hướng dẫn từng bước
cho việc xây dựng một ứng dụng giống Bản đồ Google sử dụng dữ liệu miễn
phí và phần mềm nguồn mở; xem [Tài nguyên](#resources). Điều
này giải phóng bạn khỏi những hạn chế Google đặt trên API của bạn).
Khóa API được gắn với một URL và thư mục cụ thể. Gõ
http://localhost:9090/trip trên biểu mẫu và nhấn nút
**Generate API Key**. Trang xác nhận cho thấy khóa API
được sinh ra của bạn, nó liên quan đến URL, và một trang Web mẫu, như họ
nói, "để bạn bắt đầu trên con đường lập bản đồ"
Để kết hợp trang mẫu này vào ứng dụng Grails của bạn, tạo một tập tin có tên map.gsp trong thư mục grails-app/views/airport. Sao chép trang mẫu từ Google vào map.gsp. Ví dụ 11 cho thấy các nội dung của map.gsp:
##### Ví dụ 11. Một trang Web Bản đồ Google đơn giản
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">   <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>Google Maps JavaScript API Example</title>

Chú ý rằng khóa API của bạn được nhúng vào tập lệnh URL ở đầu trang. Trong
phương thức
load, bạn đang thể hiện một đối tượng
GMap2 mới. Đây là bản đồ mà xuất hiện ở
 với ID
của
map ở cuối của trang. Nếu bạn muốn bản đồ lớn hơn, điều
chỉnh độ rộng và chiều cao trong thuộc tính
style của
Cascading Style Sheets (CSS). Hiện nay bản đồ được tập trung vào Palo
Alto, Calif. ở mức độ phóng 13 (Mức 0 là mức thu nhỏ tất cả các trường
hợp. Khi các số tăng lên, bạn có khung nhìn các đường phố rõ hơn). Bạn sẽ
điều chỉnh các giá trị này chỉ trong một thời điểm. Trong khi chờ đợi,
thêm một bao đóng
map rỗng vào
AirlineController, như được trình bày ở Ví dụ 12:
##### Ví dụ 12. Thêm bao đóng
map
class AirportController { def map = {} ... }
Bây giờ vào địa chỉ http://localhost:9090/trip/airport/map trên trình duyệt của bạn. Bạn thấy Bản đồ Google được nhúng, nó trong giống như Hình 5:
##### Hình 5. Bản đồ Google đơn giản
![ Bản đồ Google đơn giản](simpleGoogleMap.jpg)
Bây giờ quay lại map.gsp và ngắt các giá trị, như được biểu diễn trong Ví dụ 13:
##### Ví dụ 13. Điều chỉnh bản đồ cơ bản

800 x 400 điểm ảnh là tập kích thước tốt cho việc xem toàn bộ bản đồ nước
Mỹ. Ví dụ 13 điều chỉnh điểm trung tâm và mức độ phóng để bạn có thể xem
toàn bộ bản đồ. Bạn có thể thêm một số các điều khiển bản đồ khác.
GLargeMapControl và
GMapTypeControl trong Ví dụ
13 cho bạn các điều khiển thông thường dọc theo góc trái và trên phải của
bản đồ. Định kì nhấn nút Refresh của trình duyệt của bạn để xem những thay
đổi của bạn có hiệu lực khi bạn thực hiện xung quanh. Hình 6 phản ánh
những điều chỉnh đã thực hiện trong Ví dụ 13:
##### Hình 6. Bản đồ đã điều chỉnh
![ Bản đồ đã điều chỉnh](simpleGoogleMap-2.jpg)
Bây giờ bản đồ của bạn là ở đây, bạn đã sẵn sàng để bắt đầu thêm các đánh dấu — push-pin cho mỗi sân bay của bạn. Trước khi tôi tự động hóa tiến trình, Ví dụ 14 thêm một đánh dấu đơn một cách thủ công:
##### Ví dụ 14. Thêm một đánh dấu vào bản đồ

Hàm
GMarker đưa ra điểm
GLatLng. Phương thức
bindInfoWindowHtml cung cấp đoạn mã HTML được hiển thị trên
cửa sổ Info khi người dùng nhấn vào đánh dấu. Điều cuối cùng của Ví dụ 14
thực hiện là thêm đánh dấu vào bản đồ sử dụng phương thức
addOverlay.
Hình 7 thể hiện bản đồ với đánh dấu đã thêm vào:
##### Hình 7. Bản đồ với đánh dấu
![ Bản đồ với đánh dấu](simpleGoogleMap-3.jpg)
Vì bạn biết làm thế nào để thêm một điểm đơn, việc thêm một cách tự động
tất cả các điểm từ cơ sở dữ liệu yêu cầu hai thay đổi nhỏ. Thay đổi thứ
nhất để thực hiện bao đóng
map trong
AirportController trả về một danh sách các
Airport, như được trình bày ở Ví dụ 15:
##### Ví dụ 15. Trả về một danh sách các Airport
def map = { [airportList: Airport.list()] }
Tiếp theo, bạn cần lặp đi lặp lại danh sách các
Airport và
tạo các đánh dấu cho mỗi danh sách. Trong phần trước của loạt bài này, bạn
đã thấy thẻ
<g:each> được dùng để thêm các dòng vào một
bảng HTML. Ví dụ 16 sử dụng thẻ này để tạo các dòng JavaScript cần thiết
để hiển thị các
Airport trên bản đồ:
##### Ví dụ 16. Thêm các đánh dấu vào bản đồ

Hình 8 cho thấy bản đồ với tất cả các đánh dấu đã thêm vào một cách tự động:
##### Hình 8. Bản đồ với nhiều đánh dấu
![ Bản đồ với nhiều đánh dấu](simpleGoogleMap-4.jpg)
Chuyến đi này của API Bản đồ Google chỉ vừa đủ để bạn thảo luận sơ qua bề
ngoài những thứ mà bạn có thể làm. Bạn có thể quyết định đề cập đến mô
hình sự kiện để thực hiện các lời gọi Ajax mà trả về dữ liệu JavaScript
Object Notation (JSON) khi các đánh dấu được nhấn. Bạn có thể sử dụng các
GPolyline để vẽ các chặng riêng của một chuyến đi trên bản
đồ. Các khả năng là vô tận. Để biết thêm thông tin, tài liệu trực tuyến
của Google là tuyệt vời. Bạn cũng có thể có một giới thiệu nhỏ về API từ
cuốn sách PDF của tôi
*Google Maps API* (xem [Tài nguyên](#resources)).
## Kết luận
Việc thêm các bản đồ vào ứng dụng Grails của bạn yêu cầu đưa vào ba thành phần.
Phần đầu tiên là mã địa lý dữ liệu của bạn. Ngoài ra có nhiều trình sinh mã địa lí miễn phí mà chuyển đổi các vị trí người dùng có thể đọc được thành các điểm vĩ độ/kinh độ. Gần như bất kì điều gì có thể được mã hóa địa lí: các địa chỉ đường phố, các thành phố, các hạt, các bang, các quốc gia, các mã vùng, các số điện thoại, các địa chỉ IP, và thậm chí các mã IATA cho các sân bay.
Một khi bạn tìm thấy trình sinh mã địa lí đúng cho công việc, tạo một dịch vụ Grails để đóng gói các dịch vụ Web từ xa gọi đến phương thức sử dụng lại. Những dịch vụ cho các phương thức này mà đi xa hơn các thao tác CRUD đơn giản trên đối tượng miền đơn. Những dịch vụ không liên quan đến URL mặc định, nhưng bạn có thể tạo một cách dễ dàng một bao đóng trong một bộ điều khiển để thực hiện địa chỉ hóa Web chúng.
Cuối cùng, tận dùng ưu điểm của API ánh xạ Web miễn phí chẳng hạn như Bản
đồ Google để vẽ các điểm vĩ độ/kinh độ của bạn trên một bản đồ. Những dịch
vụ miễn phí này thường đòi hỏi ứng dụng của bạn cũng được truy cập miễn
phí. Nếu bạn muốn giữ bản đồ cá nhân của riêng bạn, hãy xem xét API nguồn
mở chẳng hạn như OpenLayers, nó cung cấp kinh nghiệm người dùng giống như
Bản đồ Google mà không có sự hạn chế sử dụng tương ứng (xem
[Tài nguyên](#resources)). Bạn sẽ cần phải cung cấp các lớp
bản đồ của riêng bạn, nhưng bạn sẽ có thể lưu trữ toàn bộ ứng dụng vào máy
chủ của riêng bạn.
Trong bài viết tiếp theo, tôi sẽ nói về cách để thực hiện ứng dụng Grails của bạn trên mạng di động một cách thân thiện. Bạn sẽ biết làm thế nào để tối ưu các khung nhìn cho hiển thị iPhone. Tôi cũng sẽ giải thích việc gửi thông tin từ Grails qua thư điện tử mà xuất hiện như là một tin nhắn SMS trên điện thoại của bạn. Cho đến lúc đó, hãy vui vẻ với việc nắm vững Grails.
## Tải về
|Mô tả||Tên||Kích thước|
|Mã ví dụ|
## Tài nguyên
### Học tập
[: Đọc thêm trong loạt bài này để thu được sự hiểu biết hơn về Grails và tất cả những gì mà bạn có thể làm với nó.](http://www.ibm.com/developerworks/vn/views/java/libraryview.jsp?search_by=Làm+chủ+Grails) *Làm chủ Grails* [Grails](http://grails.codehaus.org/): Ghé thăm trang Web Grails. [Grails Framework Reference Documentation (Tài liệu Tham khảo Khung làm việc Grails)](http://grails.org/doc/1.0.x/): Đưa bạn qua việc bắt đầu với Grails và xây dựng các ứng dụng Web với khung làm việc Grails. [GeoNames](http://www.geonames.org/): Dịch vụ mã địa lí GeoNames được dựa trên kiến trúc Representational State Transfer (REST) [Google Maps API](http://code.google.com/apis/maps/): Nhúng Các bản đồ Google vào các trang Web của bạn. [Yahoo! Maps API](http://developer.yahoo.com/maps/): Nhúng các bản đồ Yahoo! vào trang Web của bạn và các ứng dụng màn hình nền. [Geocoding (Mã địa lí)](http://en.wikipedia.org/wiki/Geocoding): Nhập mã địa lí trên Wikipedia. [(Scott Davis, Pragmatic Programmers, 2007): Sách của Scott Davis giới thiệu về Hệ thống Thông tin Địa lí (Geographic Information Systems (GIS)) theo những từ ngữ đơn giản và thể hiện những hướng dẫn thực hành.](http://www.pragprog.com/titles/sdgis/gis-for-web-developers) *GIS for Web Developers (GIS dành cho các Nhà phát triển Web)* [(Scott Davis, Pragmatic Programmers, 2006): Học làm thế nào để vẽ các bản đồ, thêm các diễn giải và các lộ trình, và mã hóa địa lí dữ liệu của bạn.](http://www.pragprog.com/titles/sdgmapi2/google-maps-api-v2) *The Google Maps API* [OpenLayers API](http://openlayers.org/): OpenLayers là một thư viện JavaScript dành cho việc hiển thị dữ liệu bản đồ trên hầu hết các trình duyệt Web. [(Scott Davis, Pragmatic Programmers, 2007): Biết thêm về Groovy và Grails trong cuốn sách mới nhất của Scott Davis.](http://www.pragprog.com/titles/sdgrvr) *Groovy Recipes* [: Chuỗi các developerWorks này được dành để khám phá tác dụng thực tế của Groovy và dạy cho bạn khi nào và như thế nào để áp dụng chúng một cách thành công.](http://www.ibm.com/developerworks/views/java/libraryview.jsp?search_by=practically+groovy:&S_TACT=105AGY75) *Practically Groovy* [Groovy](http://groovy.codehaus.org/): Biết thêm về Groovy ở trang Web dự án. [AboutGroovy.com](http://aboutgroovy.com/): Keep up with the latest Groovy news and article links. [Tủ sách kĩ thuật](http://www.ibm.com/developerworks/apps/SendTo?bookstore=safari&S_TACT=105AGY75): Duyệt các cuốn sách về các chủ đề kĩ thuật này và khác. [Khu công nghệ Java developerWorks](http://www.ibm.com/developerworks/java?S_TACT=105AGY75): Tìm hàng trăm bài viết về mọi khía cạnh của lập trình Java.
### Lấy sản phẩm và công nghệ
[Grails](http://grails.codehaus.org/Download): Tải về các Grails mới nhất. [OpenLayers](http://openlayers.org/): Tải về OpenLayers.
### Thảo luận
- Kiểm tra
[các blog developerWorks](http://www.ibm.com/developerworks/blogs/?S_TACT=105AGY75)và tham gia vào cộng đồng [developerWorks](http://www.ibm.com/developerworks/community?S_TACT=105AGY75).
## Bình luận
[Vùng dữ liệu trên developerWorks](http://www.ibm.com/developerworks/vn/views/data/libraryview.jsp)
Khám phá các bài viết xoay quanh lĩnh vực dữ liệu, Quản lý hệ thống thông tin
[Vùng mã nguồn mở trên developerWorks](http://www.ibm.com/developerworks/vn/views/opensource/libraryview.jsp)
Xem các bài viết về HTML, CSS, JavaScript,...
[Điện toán đám mây](http://www.ibm.com/developerworks/vn/views/cloud/libraryview.jsp)
Tìm hiểu về điện toán đám mây

WARC-Type: response

Content-Type: application/http; msgtype=response

Content-Encoding: gzip

Connection: close

Vary: Accept-Encoding


text:
IDM 5.18 miễn phí
Internet Download Manager hỗ trợ nhiều proxy server, ftp và http protocols, firewalls, redirects, cookies, các thư mục trong quyền truy cập, các file MP3 audio và MPEG video, và một số lượng lớn các định dạng cho phép trong danh sách. Internet Download Manager tương thích liên tục với Microsoft Internet Explorer, Netscape, MSN Explorer, AOL, Opera, Mozilla, Mozilla Firefox, Mozilla Firebird, Avant Browser, MyIE2, và tất cả các trình duyệt phổ biến khác để thực thi tự động việc tải dữ liệu của bạn. Bạn cũng có thể kéo và thả file, hoặc sử dụng Internet Download Manager từ đường dẫn lệnh. Internet Download Manager có thể quay số modem vào 1 thời điểm định sẵn, tiến hành download dữ liệu mà bạn muốn, ngắt kết nối, hoặc tắt máy ngay khi hoàn thành công việc.
Những tính năng khác bao gồm hỗ trợ đa ngôn ngữ, xem trước file nén, danh mục download, lên lịch và thực hiện tải dữ liệu chuyên nghiệp, âm thanh báo hiệu cho các tác vụ hiện hành, hổ trợ HTTPS, queue processor, pipelining of ftp commands, trợ giúp và chỉ dẫn theo dạng html, nâng cao khả năng chống virus trên các dữ liệu tải về, lưu lượng dowload liên tiếp (hữu dụng cho các kết nối với 1 số dạng thức sử dụng băng thông truyền dữ liệu chung(FAP) như Direcway, Direct PC, Hughes, ..vv..), đường lệnh thông số kết nối, và nhiều tính năng nữa.
Những tính năng chính:
Hổ trợ mọi ứng dụng và trình duyệt phổ biến nhất! Internet Download Manager hổ trợ mọi phiên bản của tất cả các trình duyệt hiện nay, và có khả năng tương thích với các ứng dụng internet thuộc thế hệ thứ 3
Download chỉ với 1 cú bấm chuột duy nhất. Khi bạn nhấn chuột vào đường dẫn download trong trình duyệt, IDM sẽ tiến hành tải dữ liệu và tăng tốc công việc này. IDM hỗ trợ phương thức truyền dữ liệu HTTP, FTP và HTTPS.
Tốc độ tải. Internet Download Manager có thể tăng tốc độ download lên đến 5 lần times vì kỹ thuật phân chia nhỏ dữ liệu thông minh.
Phục hồi download. Internet Download Manager sẽ tiếp tục thực hiện công việc download đang còn dang dở mà bạn đã tạm dừng trước đó.
Trình cài đặt đơn giản. Chương trình cài đặt dễ dàng nhanh chóng sẽ tạo nên những thiết lập cần thiết cho bạn, đồng thời kiểm tra luôn điểm kết nối mạng của bạn để nhằm tránh khỏi những trục trặc trong cài đặt Internet Download Manager.
Hệ thống quét virus tự động. Tiện ích này giúp cho các dữ liệu tải về của bạn tránh khỏi những virus và trojan.
Tương thích trình duyệt chuyên nghiệp. Khi đã được kích hoạt, những tính năng của chương trình đã có thể được dùng để chọn và tải bất kí dữ liệu từ bất kì ứng dụng nào. Không 1 trình hỗ trợ download nào khác có được khả năng này.
Lên lịch tải. Internet Download Manager có thể kết nối internet vào 1 thời điểm định sẳn, tiến hành download dữ liệu mà bạn muốn, ngắt kết nối, hoặc tắt máy ngay khi hoàn thành công việc.
IDM hỗ trở nhiều dạng proxy server. Thí dụ như, IDM có thể làm việc với Microsoft ISA, và các FTP proxy server.
IDM hỗ trợ nhiều cổng truyền tải dữ liệu chính: Basic, Negotiate, NTLM, and Keberos. Do đó IDM có thể kết nối nhiều trạm máy chủ Internet và proxy khác nhau thông qua tên truy cập và mật mã.
Download tất cả dạng file. IDM có thể nhập tất cả đường dẫn download vào 1 trang hiện hành duy nhất. Với tính năng này nó thật dễ dàng để tải nhiều dữ liệu cùng lúc.
Giao diện có thể chỉnh sửa. Bạn có thể chọn thứ tự các nút bấm hoặc cột nào được xuất hiện trong cửa sổ chính của IDM.
Danh sách download. Internet Download Manager có thể được dùng để sắp xếp tự động các dự liệu download theo các mục đã được định nghĩa trước.
Tính năng cập nhật tự động. Cập nhật nhanh chóng để cài những phiên bản mới nhất của IDM và công việc này được tiến hành hằng tuần.
Giới hạn download. Tính năng này rất hữu dụng cho các kết nối với 1 số dạng thức sử dụng băng thông truyền dữ liệu chung(FAP) như Direcway, Direct PC, Hughes, ..vv..
Kéo và thả. Thật đơn giản, bạn chỉ cần kéo và thả link vào IDM, rồi kéo và thả file đã tải về hoàn tất ra khỏi Internet Download Manager.
IDM là chương trình đa ngôn ngữ. IDM được phiên dịch sang các thứ tiếng như: Ả Rập, Bosnia, Bungary, Trung Quốc, Croatia, Cộng hòa Séc, Đan Mạch, Hà Lan, Pháp, Đức, Hungary, Ý, Nhật, Macedonia, Ba Lan, Bồ Đào Nha, Romani, Nga, Slovekia, Tây Ban Nha, Thái Lan.
Download :
http://up.4share.vn/f/4d7f7b757f7e787a/IDM.5.18.Build.1.full.rar/123456
Link dự phòng: http://downloadidm.org/download/IDM.5.18.Build.1.full.rar
Không có nhận xét nào:
Đăng nhận xét

markdown:
**IDM 5.18 miễn phí** ![](http://liceknoil.files.wordpress.com/2008/06/idm51245.jpg)
Internet Download Manager hỗ trợ nhiều proxy server, ftp và http protocols, firewalls, redirects, cookies, các thư mục trong quyền truy cập, các file MP3 audio và MPEG video, và một số lượng lớn các định dạng cho phép trong danh sách. Internet Download Manager tương thích liên tục với Microsoft Internet Explorer, Netscape, MSN Explorer, AOL, Opera, Mozilla, Mozilla Firefox, Mozilla Firebird, Avant Browser, MyIE2, và tất cả các trình duyệt phổ biến khác để thực thi tự động việc tải dữ liệu của bạn. Bạn cũng có thể kéo và thả file, hoặc sử dụng Internet Download Manager từ đường dẫn lệnh. Internet Download Manager có thể quay số modem vào 1 thời điểm định sẵn, tiến hành download dữ liệu mà bạn muốn, ngắt kết nối, hoặc tắt máy ngay khi hoàn thành công việc.
Những tính năng khác bao gồm hỗ trợ đa ngôn ngữ, xem trước file nén, danh mục download, lên lịch và thực hiện tải dữ liệu chuyên nghiệp, âm thanh báo hiệu cho các tác vụ hiện hành, hổ trợ HTTPS, queue processor, pipelining of ftp commands, trợ giúp và chỉ dẫn theo dạng html, nâng cao khả năng chống virus trên các dữ liệu tải về, lưu lượng dowload liên tiếp (hữu dụng cho các kết nối với 1 số dạng thức sử dụng băng thông truyền dữ liệu chung(FAP) như Direcway, Direct PC, Hughes, ..vv..), đường lệnh thông số kết nối, và nhiều tính năng nữa.
Những tính năng chính:
Hổ trợ mọi ứng dụng và trình duyệt phổ biến nhất! Internet Download Manager hổ trợ mọi phiên bản của tất cả các trình duyệt hiện nay, và có khả năng tương thích với các ứng dụng internet thuộc thế hệ thứ 3
Download chỉ với 1 cú bấm chuột duy nhất. Khi bạn nhấn chuột vào đường dẫn download trong trình duyệt, IDM sẽ tiến hành tải dữ liệu và tăng tốc công việc này. IDM hỗ trợ phương thức truyền dữ liệu HTTP, FTP và HTTPS.
Tốc độ tải. Internet Download Manager có thể tăng tốc độ download lên đến 5 lần times vì kỹ thuật phân chia nhỏ dữ liệu thông minh.
Phục hồi download. Internet Download Manager sẽ tiếp tục thực hiện công việc download đang còn dang dở mà bạn đã tạm dừng trước đó.
Trình cài đặt đơn giản. Chương trình cài đặt dễ dàng nhanh chóng sẽ tạo nên những thiết lập cần thiết cho bạn, đồng thời kiểm tra luôn điểm kết nối mạng của bạn để nhằm tránh khỏi những trục trặc trong cài đặt Internet Download Manager.
Hệ thống quét virus tự động. Tiện ích này giúp cho các dữ liệu tải về của bạn tránh khỏi những virus và trojan.
Tương thích trình duyệt chuyên nghiệp. Khi đã được kích hoạt, những tính năng của chương trình đã có thể được dùng để chọn và tải bất kí dữ liệu từ bất kì ứng dụng nào. Không 1 trình hỗ trợ download nào khác có được khả năng này.
Lên lịch tải. Internet Download Manager có thể kết nối internet vào 1 thời điểm định sẳn, tiến hành download dữ liệu mà bạn muốn, ngắt kết nối, hoặc tắt máy ngay khi hoàn thành công việc.
IDM hỗ trở nhiều dạng proxy server. Thí dụ như, IDM có thể làm việc với Microsoft ISA, và các FTP proxy server.
IDM hỗ trợ nhiều cổng truyền tải dữ liệu chính: Basic, Negotiate, NTLM, and Keberos. Do đó IDM có thể kết nối nhiều trạm máy chủ Internet và proxy khác nhau thông qua tên truy cập và mật mã.
Download tất cả dạng file. IDM có thể nhập tất cả đường dẫn download vào 1 trang hiện hành duy nhất. Với tính năng này nó thật dễ dàng để tải nhiều dữ liệu cùng lúc.
Giao diện có thể chỉnh sửa. Bạn có thể chọn thứ tự các nút bấm hoặc cột nào được xuất hiện trong cửa sổ chính của IDM.
Danh sách download. Internet Download Manager có thể được dùng để sắp xếp tự động các dự liệu download theo các mục đã được định nghĩa trước.
Tính năng cập nhật tự động. Cập nhật nhanh chóng để cài những phiên bản mới nhất của IDM và công việc này được tiến hành hằng tuần.
Giới hạn download. Tính năng này rất hữu dụng cho các kết nối với 1 số dạng thức sử dụng băng thông truyền dữ liệu chung(FAP) như Direcway, Direct PC, Hughes, ..vv..
Kéo và thả. Thật đơn giản, bạn chỉ cần kéo và thả link vào IDM, rồi kéo và thả file đã tải về hoàn tất ra khỏi Internet Download Manager.
IDM là chương trình đa ngôn ngữ. IDM được phiên dịch sang các thứ tiếng như: Ả Rập, Bosnia, Bungary, Trung Quốc, Croatia, Cộng hòa Séc, Đan Mạch, Hà Lan, Pháp, Đức, Hungary, Ý, Nhật, Macedonia, Ba Lan, Bồ Đào Nha, Romani, Nga, Slovekia, Tây Ban Nha, Thái Lan.
**Download :**
http://up.4share.vn/f/4d7f7b757f7e787a/IDM.5.18.Build.1.full.rar/123456
Link dự phòng: http://downloadidm.org/download/IDM.5.18.Build.1.full.rar
## Không có nhận xét nào:
## Đăng nhận xét

WARC-Truncated: length

Content-Type: text/html; charset=UTF-8

Cache-Control: private, max-age=0

X-Content-Type-Options: nosniff

X-XSS-Protection: 1; mode=block

Server: GSE


text:
Chào
Khách
. Bạn có thể
đăng nhập
hoặc
đăng ký
.
Trang chủ diễn đàn
THU' VIEN
Trợ giúp
Tìm kiếm
Đăng nhập
Đăng ký
Lời Vàng:
"Lòng sáu chữ niệm không có ngớt, Thì nạn tai cũng thoát như không." Đức Thầy
NAM MÔ A DI ĐÀ PHẬT
«
THU' VIEN
«
PHẬT GIÁO HÒA HẢO
«
PHẬT GIÁO HÒA HẢO
«
SẤM GIẢNG GIÁO LÝ
«
Quyển 4: Giác Mê Tâm Kệ
« Trước
Tiếp »
Trang: [
1
]
Xuống
Gửi cho bạn bè
In
Tác_giả
Đề: Quyển 4: Giác Mê Tâm Kệ (Đọc 27137 lần)
admin
Administrator
Full Member
Offline
Bài viết: 187
Quyển 4: Giác Mê Tâm Kệ
«
vào lúc:
03/16/09 »
Click để xem hình
Download MP3
Lổi bị hát không được đã sửa 4/17/2010
Quyển IV: Giác Mê Tâm Kệ
Đây là quyển thứ tư mà Đức Thầy đã viết ngày 20 tháng 9 năm Kỹ Mão (1939)
tại Hòa Hảo (846 câu)
TRANG 1
Khai ngọn đuốc từ bi chí thiện,
Tìm con lành dắt lại Phật đường.
Thương dân hiền giáo đạo Nam phương,
Đặng chỉ ngõ làm lành lánh dữ.
Sách thánh đạo ghi trong Tam Tự,
Người mới sanh tánh thiện Trời dành.
Bởi lớn lên tập nhiễm lợi danh,
Nên tật xấu che mờ thiện tánh.
Thiếu giáo dục thiếu thêm đức hạnh,
Ta quyết lòng nhắc lại tánh xưa.
Mặc người đời gièm siểm ghét ưa,
Rừng kinh kệ ít người hay chữ.
Quá mắc mỏ bởi chưng Phạn ngữ,
Nên người đời khó kiếm cho ra,
Mõ chuông bày đọc tụng ó la,
Chớ hiếm kẻ tường thông nghĩa lý.
Dòm trước mắt thấy điều hồ mị,
Nên động tình bác ai dạy răn.
Réo những ai lợi dụng làm xằng,
Cho suy sụp chơn nhơn mù mịt.
Nào có khác mây đen phủ bít,
Rồi dắt nhau đến chỗ dại ngây.
Lấy tinh thần hiệp vén ngút mây,
Trong bổn đạo tự thân phải xử.
Xuống dương thế dạo trong lê thứ,
Thấy bá gia gặp lúc não nùng,
Cảnh trần gian nhiều nỗi lao lung,
Việc tu tỉnh ít người hiểu lý.
Trong bá tánh muốn nơi cao quí,
Hãy truy tầm huyền bí nơi cơ.
Từ sấm kinh cho đến thi thơ,
Trong chốn ấy nhiều nơi trọng yếu.
Tạo làm chi những trung với hiếu !
Ấy là người bổn phận phải trau.
Khuyên dương trần đừng nệ cần lao,
Cũng rán sửa rán trau nền đạo.
Tu đầu tóc không cần phải cạo,
Miễn cho rồi cái Đạo làm người.
Kể từ nay lỡ khóc lỡ cười,
Vì buồn bực thấy đời biến chuyển.
Các chư Phật từ đây lựa tuyển,
Coi ai là đức hạnh hiền từ.
TRANG 2
Lời sách xưa cận thủy tri ngư,
Cận sơn lãnh trần gian tri điểu.
Trong sấm giảng nếu ai không hiểu,
Tầm kệ nầy Ta chỉ nẻo đường.
Quyết dạy trần nên nói lời thường,
Cho sanh chúng đời nay dễ biết.
Trời dông gió sái mùa sái tiết,
Nắng cùng mưa cũng khác xưa rồi.
Khuyên dương gian bỏ các việc tồi,
Đặng lo liệu cho tròn phận sự,
Thấy trần thế hãy còn lưỡng lự,
Muốn tu mà còn hỡi chần chờ.
Việc thế gian như thể cuộc cờ,
Thắng với thối một hai nước tướng.
Nào Ai có gạt dân nói bướng,
Mà dương trần liệu lượng chánh tà.
Ta mến yêu những kẻ thiệt thà,
Nghe cơ giảng thiết tha lo liệu.
Học đạo lý như đờn trúng điệu,
Hòa bản rồi thì cứ làm theo.
Lũ Tam Bành trong bụng còn đeo,
Đoàn Lục Tặc ta mau sớm giết.
Mài gươm trí cho tinh cho khiết,
Dứt tâm trần kiếm chữ sắc không.
Đức Di Đà Phật Tổ ngóng trông,
Chờ dân chúng tìm nơi diệt khổ.
Theo Phật Giáo từ kim chí cổ,
Gốc ông cha ta cũng tu hành.
Mà ngày nay cứ mãi tranh giành,
Danh với lợi của tiền quyền tước.
Thấy trần thế ai ai cũng ước,
Đời sao không tới phứt cho rồi.
Nay khổ lao khó đứng khôn ngồi,
Lúc đói cơm buồn lòng ngơ ngẩn,
Làm ác đức nhiều điều quanh quẩn,
Như gà cồ ăn bẩn cối xay.
Thấy người hiền nói đắng nói cay,
Sau mới biết thân ai lao khổ.
Nhớ thuở trước oai linh Phật Tổ,
Phép thần thông trừ lũ Ma Vương.
Chốn rừng tòng ngồi chịu nắng sương,
Tìm đạo lý hiến cho trần thế.
TRANG 3
Hiệu Lão Sĩ ra đời thật tế,
Đem lời vàng dạy dỗ dương trần.
Khuyên chúng sanh khuya sớm chuyên cần,
Tìm nguồn cội diệt trừ tứ khổ.
Bịnh với tử từ kim chí cổ,
Sanh với già hai chữ hoài hoài.
Đức Thích Ca xưa ở lầu đài,
Nghiệm tứ khổ nên Ngài tầm Đạo.
Lo tu tỉnh mặc ai khinh ngạo,
Diệt Lục Căn đừng nhiễm Lục Trần.
Chữ Sắc Thinh chớ có hầu gần,
Hương với Vị xác trần nên lánh.
Chữ Xúc Pháp treo gương Hiền Thánh,
Tránh sáu đường cũng đặng về Thần.
Từ xưa nay dạy chỉ nhiều lần,
Mà lê thứ chẳng lo chẳng liệu.
Nhãn thấy sắc thường hay bận bịu,
Tai ưa nghe những điệu âm thinh.
Mắt với tai đều chọn đẹp xinh,
Còn lỗ mũi ưa mùi êm dịu.
Đồ thơm tho nó ưa nó chịu.
Chốn xạ hương hay lết lại gần.
Lưỡi ưa ngon là chuyện ân cần,
Đồ ngọt béo nó ưa nó mến.
Thân tham sướng muốn tiền của đến,
Đặng ăn xài cho cho phỉ tấm tình.
Ý thì lo sửa sắc soi hình,
Với chức phận cho cao cho quí.
Sáu đường ấy ở trong tâm ý,
Ta mau mau dứt nó cho rồi.
Nếu tỉnh tâm chẳng có mấy hồi,
Mượn trí đạo đuổi ra khỏi xác.
Dứt được nó ấy là giải thoát,
Thì xác trần mới khỏi đọa đày.
Cả tiếng kêu những kẻ trí tài,
Hãy yên lặng bình tâm suy nghĩ.
Tiên xử kỷ, hậu lại xử bỉ,
Bắt lỗi người phải xét lỗi mình.
Vậy mới là chánh trực công bình,
Nẻo chánh trực chí người quân tử.
Người biết đạo phải gìn ngôn ngữ,
Nói với ai chớ có sai lời.
TRANG 4
Trọng mẹ cha kính nể Phật Trời,
Đừng nhiều tiếng nghinh ngang mang lỗi.
Tánh ngay thẳng ta không dời đổi,
Dầu tan xương nát thịt chẳng màng.
Ta Khùng Điên nói đại nói càn,
Chẳng có sợ ai rầy ai mắng.
Trời còn lúc tối mưa sớm nắng,
Thì trần gian còn mãi khổ lao.
Ở trên đời kẻ thấp người cao,
Kẻ hiền hậu người thì gian ác.
Không quen biết mà cao tuổi tác,
Ta cũng nên kính trọng mới là.
Tâm từ bi sánh thể ngọc ngà,
Trong các báu khó bì tánh Thiện.
Phải xử thế chớ nên bày biện,
Miệng xảo ngôn thường kiện tấm thân.
Việc bán buôn phải giữ ngang cân,
Đừng tập tánh lận lường tráo đấu.
Các công cuộc của người tánh xấu,
Ta giữ gìn chớ có nhiễm vào.
Tâm Bần Tăng chẳng mến sắc màu,
Mến những kẻ biết vào đường chánh.
Ta dạy thế mượn lời Phật Thánh,
Nên truyền ban cho chúng sanh tường.
Tuy ngày nay chúng nó hùng cường,
Chừng phân định thì Ta cao quí.
Khuyên bổn đạo lập thân nuôi chí,
Đặng chờ ngày yết kiến Phật Trời.
Quá yêu dân cạn tỏ nhiều lời,
Cho trần hạ tìm trong lánh đục.
Chẳng chịu tu mãi còn lục thục,
Lo giàu nghèo lo cũng chẳng rành.
Ham công danh quên chữ sanh thành,
Mến phú quí quên câu dưỡng dục.
Rán kiếm chỗ tầm Tiên lánh tục,
Người ở đời phải được lòng trong.
Biển hồng trần sớm gội cho xong,
Ngày lập Hội mới mong trở lại.
Chữ bần tiện khuyên dân đừng nại,
Miễn cho ta trở lại ngay đàng.
Chữ vinh hoa giờ chớ có màng,
Bởi giả tạm của đời Ngươn hạ.
TRANG 5
Gắng công tu gặp nhiều phép lạ,
Của Thần Tiên trừ lũ hung đồ.
Nào lụa là, lãnh nhiễu, tố sô,
Chớ ham mến mà sau lao lý.
Ngày tiêu diệt từ năm Bính Tý,
Đến năm nay hao hớt đã nhiều.
Các ngoại bang đà nhuộm máu điều,
Sao trần thế không toan chẳng liệu.
Để đến việc dang lưng mà chịu,
Chớ Phật đâu cứu kịp cho người.
Khuyên chúng sanh bỏ tánh biếng lười,
Phải sốt sắng làm ăn cần thiết.
Nghèo với đói từ đây sẽ biết,
Hàng ngoại bang bố thiết ta hoài.
Nên bá gia hãy ráng miệt mài,
Dầu rách rưới cũng mau cần kiệm.
Lời Ta dạy hãy nên suy nghiệm,
Phải phá tan Ngũ Uẩn trong mình.
Chữ Tham trong ý muốn mặc tình,
Rán định tánh trừ cho nó tuyệt.
Chữ gây gổ là Sân hãy diệt,
Cho nó đừng thấp thoáng trong lòng.
Thêm chữ Si thiệt quá lòng dòng,
Nên tỉnh trí tìm nơi dụt tắt.
Chữ Nhơn Ngã thật là quá gắt,
Ta chớ nên phân biệt với người.
Dẹp năm tên được mới mừng cười,
Vô pháp tướng mới là thiệt tướng.
Người tu hành phải trừ nghiệp chướng,
Với bốn ma mới đặng an nhàn.
Tửu nhiễm vào thân thể bất an,
Sắc mến nó ngày kia lao khổ.
Ta nghiệm xét từ thời Bàn Cổ,
Có ai dùng mà đặng thành Tiên.
Mà đời nay theo nó liên miên,
Chữ tài của khổ riêng một kiếp.
Bị tội cướp nào ai có tiếp,
Mà đời nay nó cứ mãi làm.
Chữ khí hùng khuyên chớ có ham,
Mà lao lý tấm thân trần thế.
Kẻ nhứt dạ thường sanh bá kế,
Để gạt người làm thế cho mình.
Ngày sau nầy lắm nỗi tội hình,
Sao sanh chúng chẳng lo cải sửa.
TRANG 6
Bịnh ôn dịch thường hay ói mửa,
Mà dương trần chẳng chịu kiêng-dè.
Qua năm Dê đến lúc mùa hè,
Trong bá tánh biết ai hữu chí.
Ta chịu lịnh Tây Phương thọ ký,
Gìn Nghiệt Long đặng cứu dương-trần.
Nên ra đời dạy dỗ ân cần,
Khuyên bá tánh vạn dân liệu lấy.
Khổ với thảm ngày nay có mấy,
Sợ mai sau dòm thấy bay hồn.
Trừ tà gian còn thiện chỉ tồn,
Cảnh sông máu, núi xương tha thiết.
Trần với thế bây giờ nào biết,
Chừng nhìn xem hư thiệt mới tường.
Ta bây giờ tu niệm tầm thường,
Sau danh thể xạ hương khắp chốn.
Nhà giàu có xài không sợ tốn,
Phải để tiền cho kẻ nghèo nàn.
Lo ăn xài trà rượu xình-xoàng,
Chừng khổ não phàn nàn căn số.
Lời truyền sấm như bài toán đố,
Ai biết tầm thì đặng hưởng nhờ.
Ta khuyên tu dân cứ mãi ngờ,
Sợ gạt chúng kiếm xu kiếm cắc.
Bị ngoại quốc bán hàng quá gắt,
Nên dân ta chịu chữ cơ hàn.
Ta Khùng-Điên của cải chẳng màng,
Miễn lê thứ được câu hạnh phúc.
Cờ thế giới ngày nay gần thúc,
Nên Phật Tiên phải xuống hồng trần.
Chừng lao xao ác thú non Tần,
Thì Nam Quốc lương dân mới biết.
Nay dạy thế cậy cùng ngòi viết,
Với xác trần du thuyết ít hàng.
Ai nói chi Ta cũng chẳng màng,
Sao biết đặng dân đừng có tiếc.
Con phù-du hẫng hờ nào biết,
Thấy bóng đèn thì quyết chung vô.
Thảm thương thay chết héo chết khô,
Nhìn đèn nọ thấy mồ phù dũ.
Kệ khuyên trần đã mãn mùa thu,
Đeo danh lợi như con vật ấy.
TRANG 7
Giống xe cát biển đông thường thấy,
Tên dã tràng rất uổng công trình.
Khi nước ròng nhờ lúc bình minh,
Lúc nước lớn cát kia tan rã.
Trần phú quí thì trần thong thả,
Chớ còn Ta cứ khổ lao hoài.
Viết kệ cơ ra giảng ít bài,
Mặc lê thứ làm không tự ý.
Coi rồi phải nhận cho hiểu lý,
Câu huyền sâu của kẻ Khùng nầy.
Bởi chữ Khùng của Phật của Thầy,
Chứ chẳng phải của người lãng trí.
Mê với tỉnh nhận ra là lý,
Thấy dương trần ngủ mãi ngủ hoài.
Thức dậy mà tầm Đạo kiếm bài,
Để thi cử khỏi mang tiếng rớt.
Sách Khuyến Thiện miệng kêu không ngớt,
Mà nào ai có thức dậy tầm.
Ta nghĩ suy cũng bắt hỗ thầm,
Nên than thở cũng trần ít tiếng.
Tâm sáng suốt như đài nguyệt kiến,
Tánh trong như nước bích mùa xuân.
Nếu không tu chừng khổ cũng ưng,
Đừng có trách sao không chỉ bảo.
Từ nhỏ tuổi đến người trưởng lão,
Mắc trong vòng sanh tử luân hồi.
Xuống Diêm Đình thấy tội hỡi ôi !
Đó mới biết có nơi địa ngục.
Kỳ xả tội nay còn một lúc,
Sao chẳng tu đặng có hưởng nhờ.
Gặp giảng kinh trần cứ làm ngơ,
Trồng bông kiểng giống chi hưởng nấy.
Địa ngục cũng tại tâm làm quấy,
Về thiên đàng tâm ấy tạo ra.
Cái chữ Tâm mà Quỉ hay Ma,
Tiên hay Phật cũng là tại nó.
Tu với tỉnh biết làm chẳng khó,
Nếu lặng tâm tỏ ngộ Đạo mầu .
Cảnh dương gian muôn thảm ngàn sầu,
Ngó vạn vật đài lầu chẳng có,
Sông với núi trước kia mắt ngó,
Khi chết rồi thấy nó đặng nào.
Ai biết đường hãy sớm tẩu đào,
Kiếm đạo lý mà nhờ mà nhỏi.
Chịu cay đắng tu hành mới giỏi,
Ta thương đời len lỏi xuống trần.
TRANG 8
Đạo vô vi của Phật ân cần,
Nối theo chí Thích Ca ngày trước.
Câu phú quí Ngài không màng ước,
Chữ bồ đề như cội bá tòng.
Rán dưỡng nuôi chữ đó trong lòng,
Thì là được định chừng diệu quả.
Lời thuyết pháp chẳng vì nhơn ngã,
Người nào đâu có Phật tánh là.
Xem kệ nầy như ngọc như ngà,
Phải nảy nở như cơn mưa thuận.
Hạp mùa tiết giống kia bất luận,
Thảy mọc mầm trổ lá mới mầu.
Trông chúng sanh nghĩ tận đuôi đầu.
Về Cực Lạc mới là hết khổ.
Đạo với lý từ đây nhiều chỗ,
Phải lọc lừa cho kỹ mà nhờ.
Chọn nơi nào đạo chánh phượng thờ,
Thì mới được thân sau cao quí.
Nhìn Phật Giáo mà tìm cái lý,
Coi tại sao ta phải tu hành.
Vì yêu dân Ta kể ngọn ngành,
Khuyên lê thứ làm lành mà tránh.
Cảnh Niết Bàn là nơi cứu-cánh,
Về chốn ni xa lánh hồng trần.
Dầu không siêu cũng đặng về Thần,
Nhờ hai chữ trung quân ái quốc.
Chừng lập Hội biết ai còn mất,
Giờ chưa phân định được chánh tà.
Ta vì vưng sắc lịnh Ngọc Tòa,
Đền Linh Khứu Sơn trung chịu mạng.
Nền đạo đức ta bày quá cạn,
Mà dương gian còn gạn danh từ.
Làm cho Ta lỡ khóc lỡ cười,
Khóc là khóc cho người ngu muội.
Thấy Điên Khùng làm như sắt nguội,
Chẳng tranh đương nó lại khinh khi.
Ngó về Tây niệm chữ từ bi,
Cười trần thế mê si thái quá.
Tranh với luận đặng giành cơm cá,
Khuyến dụ người đặng kiếm bạc tiền.
Thấy chúng sanh ghét ngỏ ganh hiền,
Theo chế nhạo những người tu tỉnh.
Tu không tu cũng không mời thỉnh,
Mặc tình ai trọng-kỉnh hay chê.
Thương lê dân còn mãng say mê,
Chẳng tu tỉnh cho rành sương nắng.
TRANG 9
Thấy Ta lại nói cay nói đắng,
Đắng với cay Ta cũng chẳng màng.
Chừng trần gian kiến thấy phụng hoàng,
Sè cánh múa chào mừng Phật Thánh.
Thấy đạo lý chớ nào thấy tánh,
Còn ẩn nơi tim óc xác phàm.
Ai biết tri việc phải cứ làm,
Sau mới biết ai phàm ai Thánh.
Đức Lục Tổ ít ai dám sánh,
Người dốt mà nói pháp quá rành.
Lựa làm chi cao chữ học hành,
Biết tỏ ngộ ấy là gặp Đạo.
Việc cổ tích cần chi phải thạo,
Chuyện qua rồi kể lại làm gì.
Nếu ai mà biết chữ tu trì,
Tâm bình tịnh được thì phát huệ.
Ta yêu chúng viết ra Giảng Kệ,
Khuyên tăng đồ cùng các tín đồ.
Nghe cạn lời chớ có mơ hồ,
Tìm hiểu nghĩa làm theo đắc Đạo.
Trần với thế nó hay kiêu ngạo,
Các nhà sư hãy ráng sửa mình.
Nếu xuất gia ngũ giới rán gìn,
Tu chơn chánh mới không hổ tiếng.
Cả ngàn năm nhơn tâm xao xuyến,
Sao tu hoài chẳng thấy ai thành.
Bởi chữ tu liền với chữ hành,
Hành bất chánh người đời mới nói.
Bị tăng chúng quá ham chùa ngói,
Nên tới khuyên khắp chốn cùng làng.
Phật nào ham tượng cốt phết vàng,
Mà tăng tạo hao tiền bá tánh.
Việc giả dối từ nay nên lánh,
Bổn-đạo ôi! hãy ráng sửa mình.
Cuộc dạy đời Ta lắm công trình,
Làm chẳng trọn uổng thay một kiếp.
Lời chơn-chánh trần hay bỏ liếp,
Mãi lo làm húng hiếp người hiền.
Mà làm cho Ngọc Đế thảm phiền,
Muốn trừng trị trần gian thảm thiết.
Đức Phật Tổ tâm ngài nhứt quyết,
Tâu Ngọc Hoàng để Phật dạy trần.
Nên ra Kinh, Cơ Giảng nhiều lần,
Mà dương thế chẳng cần xét đến.
Xác trần tục như cây cạnh khến,
Làm hiền hoài ắt phải tiêu mòn.
TRANG 10
Đẽo với bào riết nó cũng tròn,
Đến chừng đó trông vào rất tốt.
Lũ giả dối thường hay thề thốt,
Nó chẳng kiêng Thần Thánh là gì.
Tâm kẻ hung làm chuyện cố lỳ,
Chẳng có sợ mang điều tội phước.
Ghét những kẻ tu hành bốc xước,
Miệng kêu gào chuyện phước bề ngoài.
Bước vào chùa thấy Phật lạy dài,
Ra khỏi cửa ra tay cấu xé.
Thấy quyền-quí nó hay dựa mé,
Đặng bợ bưng những kẻ hung sùng.
Ta thương đời nên nói chuyện cùng,
Chẳng có vị có dung kẻ quấy.
Cuộc sám hối vô chùa thường thấy,
Làm gian lừa biết mấy nhiêu lần.
Thấy dương gian lường gạt Thánh Thần,
Mà chua xót cho đời Ngươn Hạ.
Chữ tự hối nào ai có lạ,
Là ăn năn cải sửa tâm lành.
Phật chẳng qua dụng chữ tín thành,
Chớ đâu dụng hương, đăng, trà, quả.
Làm chay đám tạo nhiều xá-mã,
Bay về Tây nói những chuyện gì?
Thấy chúng tăng làm chuyện quái kỳ,
Ta khuyên mãi cũng không chịu bỏ.
Lời chơn chánh hình như nói xỏ,
Mà không không nào có biếm đời.
Thấy lạc lầm khuyên nhủ ít lời,
Chớ nào có ngạo chi tăng chúng.
Coi tâm kệ làm theo mới trúng,
Để lạc lầm lắm bớ tăng đồ !
Định tâm thần như mặt nước hồ,
Suy với nghĩ, nghĩ suy đường lối.
Muốn niệm Phật chẳng cần sớm tối,
Ghi vào lòng sáu chữ Di Đà.
Thì hiền lương quên mất điều tà,
Đặng hạnh phúc nhờ lòng cố gắng.
Việc đạo đức chẳng cần thối thắng,
Chũ tu hiền ngay thẳng lần hồi.
Thấy thiên cơ khó nỗi yên ngồi,
Thương lê thứ tới hồi khổ não.
Thầy lạc tớ không ai chỉ bảo,
Như vịt con dìu dắt nhờ gà.
Phải nghĩ suy cạn lẽ mới là,
Nay gặp gốc phải mau tìm gốc.
Để gặp Phật ngồi mà than khóc,
Gở làm sao hết rối mà về.
Mắt nhìn xem yêu quái bốn bề,
Bởi ác đức nên không ai cứu.
TRANG 11
Mang thủy ách hồi năm Đinh Sửu,
Đến năm nay tái lại một lần.
Khổ ách nầy đặng thức tỉnh trần,
Rằng thiên định tuồng đời sắp hạ.
Trẻ nhỏ tuổi đời nầy lăng mạ,
Bị văn minh cám dỗ loài người.
Kể từ rày cười một khóc mười,
Kẻo chúng nó dễ ngươi Phật Thánh.
Đạo Quỉ Vương thật nhiều chi nhánh,
Khuyên dương trần sớm tránh mới mầu.
Để ngày sau đến việc thảm sầu,
Rán nghe kỹ lời Ta mách trước.
Thuyền chúng nó thẳng buồm chạy lướt,
Lọt ngoài khơi mới hết hò khoan.
Tu mà ham cho được giàu sang,
Với quyền tước là tu dối thế.
Nhớ thuở trước vua Lương Võ Đế,
Tạo chùa chiền khắp nước tu hành.
Đến chừng sau ngạ tử Đài thành,
Phật bất cứu vì tâm còn ác.
Tu biết cách như đươn biết đát,
Đươn đát rành đặng dựa Xe Loan.
Ai biết nghe thì sớm liệu toan,
Để đến việc như người thất nghiệp.
Phải qui căn cùng nhau hội hiệp,
Rán mau chơn mới kịp Đạo mầu.
Sớm với chiều gắng chí nguyện cầu,
Thì sẽ được Tòa Chương dựa kế.
Chúng sanh thể như gà thất thế,
Phải nằm chờ tới nước bắt ra.
Thời kỳ nầy nhiều quỉ cùng ma,
Trời mở cửa Quỉ Vương xuống thế.
Nên Ta mới ra tay cứu tế,
Kẻo chúng sanh bịnh khổ quá chừng.
Sau Quỉ Vương đi đứng nửa lừng,
Thêm tên tuổi chúng sanh nó biết.
Làm đủ cách xuống lên tha thiết,
Ở ngoài đường nó biết tên mình.
Tin hay không thì cũng mặc tình,
Chớ Ta lắm công trình dạy dỗ.
Hồi thuở trước Thích Ca Phật Tổ,
Ngồi tham thiền bị nó ghẹo hoài.
Mà cũng không rúng động đặng Ngài,
Nên cố oán phá đời mãi mãi.
TRANG 12
Trong bổn đạo cùng là sư vãi,
Rán bền lòng cho được hiền từ.
Hết khổ lao thì đến vui cười,
Chừng đó mới phỉ tình nguyện ước.
Bọn gái mới ra đường tha thướt,
Bỏ hết trơn nề nếp ông cha.
Khác tánh tình người cổ nước Ta,
Nên phải chịu đớn đau đủ cách.
Trai với gái rán coi sử sách,
Đứng trung thần với kẻ tiết trinh.
Dọn bề trong mới gọi đẹp xinh,
Chớ mang lớp bề ngoài chẳng tốt.
Dạy chẳng đặng lòng như lửa đốt,
Khắp dương gian chưa đặng ba phần.
Kể từ đây Tiên ,Phật ,Thánh ,Thần,
Lo dạy dỗ dương trần chẳng xiết.
Đức Thượng Đế ngự đền Ngọc Khuyết,
Nhìn dương gian cũng luống thở dài.
Thấy chúng sanh trau trỉa mặt mài,
Chớ chẳng chịu trao tâm trỉa tánh.
Kẻ đói khó người sang hay lánh,
Bước lại gần chê lũ tanh hôi.
Cõi ta bà Ta thấy hỡi ôi !
Sầu bá tánh quá nên kiêu cách.
Người tàn tật đui cùi đói rách,
Ít có ai để mắt nhìn vào.
Chuộng những người dù võng sắc màu,
Cậu với mợ, ông, thầy, cô, bác.
Thị kẻ khó như rơm như rác,
Ta quá rầu đài các văn minh.
Mấy ai mà giữ dạ sắc đinh,
Theo Tông Tổ của mình thuở trước.
Đầu với tóc áo quần láng mướt,
Chữ lanh khôn của quỉ của ma.
Chớ nó không có giống người ta,
Ma với quỉ sanh người hung ác.
Lo tập luyện những câu đờn hát,
Chớ chẳng lo dạy dỗ ngu khờ.
Để cái tâm yên lặng như tờ,
Coi Ta nói câu nào bất chánh?
Rán bắt chước làm theo Phật Thánh,
Nếu thiệt người thì biết thương người.
Thấy kẻ khờ quê dốt ngạo cười,
Nào có lấy lời chi chỉ bảo.
Ta thương xót lo tần lo tảo,
Chẳng thấy ai rể thảo dâu hiền.
Làm cho người Thượng Cổ thêm phiền,
Rất đau xót cho nòi cho giống.
Biết chừng nào đươc qui nhứt thống,
Khắp hòan cầu dân biết thương nhau.
Nhắc ra thì dạ ngọc đớn đau,
Không nhắc đến biết đâu dân sửa.
Cơm được chín ta nhờ có lửa,
Dân được vui nhờ lúc khải hoàn.
Phật Như Lai cho phép Khùng troàn,
Cho bổn đạo khắp nơi đặng biết.
Ai chưởi mắng thì ta giả điếc,
Đợi cho người hết giận ta khuyên.
Chữ nhẫn hòa ta để đầu tiên,
Thì đâu có mang câu thù oán.
Việc hung ác hễ vừa thấp thoáng,
Chữ từ bi ta diệt nó liền.
Sự oán thù đáp lại chữ hiền,
Thì thù oán tiêu tan mất hết.
TRANG 13
Chữ bạn tác dầu cho đến chết,
Cũng keo sơn gắng chặt mới là.
Bước ra đường ăn nói thiệt thà,
Dù khôn khéo cũng là giả dại.
Nếu tranh dương ắt ta bị hại,
Thêm sa cơ lại bị xích xiềng.
Vì đời nay chúng nó dụng tiền,
Ít ai dụng chữ nhơn chữ nghĩa.
Theo học đạo mặc ai mai mỉa,
Ta cũng đừng gây gổ với người.
Được mấy điều thì đáng vàng mười,
Thiệt hiền đức có ai mắng chưởi.
Xưa đức Thánh luận bàn cái lưỡi,
Ngài nói rằng các việc tại mầy.
Thận với hòa hay ghét với rầy,
Cũng cái lưỡi làm thầy các việc.
Phải kiếm cách đặng ta trừ tuyệt,
Lấy tâm thần làm chủ mới mầu.
Cũng chẳng nên theo tánh võ hầu,
Thấy chẳng nói mà nhăng mà nhướng.
Hãy liệu sức chớ nên nói bướng,
Dầu việc chi liệu lượng mà làm.
Điên Khùng nầy chẳng có nói xàm.
Nói những chuyện từ bi bác ái.
Nếu bổn đạo còn ai làm sái,
Coi kệ này thì sửa lấy mình.
Ta không tranh mà cũng không kình,
Cho bá tánh gièm pha thỏa chí.
Ai làm phước in ra mà thí,
Thì được nhiều hạnh phúc sau này.
Chốn non xanh dạy dỗ cáo cầy,
Xuống trần thế ra tay dắt chúng.
Tới với Ta chớ đem đồ cúng,
Chỉ đem theo hai chữ thành lòng.
Chẳng có cần trà, quả, hương nồng,
Mong sanh chúng từ lòng hối ngộ.
Kẻ xa xuôi có lòng ái mộ,
Xem kệ này tu tỉnh tại nhà.
Ở ruộng đồng cũng niệm vậy mà,
Phật chẳng chấp chẳng nài thờ khắc.
Chay bốn bưã ấy là quy tắc,
Của kẻ Khùng chỉ dắt chúng sanh.
Con Phật thì chẳng có khôn lanh,
Đời văn vật khôn ma khôn quỉ.
Lo trang sức kim thời huê mỹ,
Rồi phụ phàng tục cổ nước nhà.
Trong tâm thì chứa chữ gian tà,
Chớ chẳng chứa tấm lòng bác ái.
Học chữ nghĩa cho thông cho thái,
Đặng xuê xang đài các xe tàu.
TRANG 14
Tiếng chào mừng cửa miệng làm màu,
Trong tâm ý mưu đồ đủ thế.
Ta còn mắc phiêu lưu dương thế,
Dạo Lục Châu đặng cứu bá gia.
Mặc tình ai xem kệ ngâm nga,
Hay sửa đổi tùy lòng hưu hỷ.
Thương sanh chúng tỏ bày quá kỹ,
Hỡi dương trần nên sớm quày đầu.
Đặng sau xem Phật pháp nhiệm mầu,
Với báu quý đài lầu tươi tốt.
Xác ta vốn là người quê dốt,
Nên mở mang chưa được mấy rành.
Khắp dương gian như sợi chỉ mành,
Mong bổn đạo tâm thành trở lại.
Dầu cực khổ thân này chẳng ngại,
Chẳng cần ai bái lạy khẩn cầu.
Bỏ dị đoan mới thấy Đạo mầu,
Bớt giả dối gặp người Thượng Cổ.
Gốc thuở trước của Tông của Tổ,
Đâu có bày dối mị như vầy.
Những sấm truyền xưa của Phật Thầy,
Dân rán kiếm mà truy thì biết.
Xưa để lại nhiều câu thảm thiết,
Mà nào ai có biết để lòng.
Chuyện thiên cơ nói rất não nồng,
Câu hữu lý bá tòng khó sánh.
Chốn tựu hội chớ nên léo hánh,
Vì lời xưa có dặn rạch ròi.
Dân chớ nên phụ bạc giống nòi,
Mà lao lý tấm thân vô ích.
Phải nhẫn nhục chờ người Cổ Tích,
Phật với Trời phân định cho ta.
Người xưa tuy ít chữ nôm na,
Chớ chơn chất người ta ngay thẳng.
Dạy bổn đạo lấy câu trung đẳng ,
Chẳng nói cao vì sắp rốt đời.
Đắng nam nhi ẩn nhẩn tùy thời,
Vậy mới gọi khôn ngoan hữu chí.
Ta ra sức viết câu huyền bí,
Chúng dân ôi! rán kiếm rán tầm.
Giống thú kia là loại sanh cầm,
Mà còn biết kiếm tầm đạo đức.
Thú vật biết tu hành náo nức,
Con người sao chẳng rứt hồng trần?
Việc tu hành phải vẹn nghĩa ân,
Kinh với Sấm chúng dân thường thấy.
Chữ Bát Chánh rõ ràng trong giấy,
Là chơn truyền của Đức Thích Ca.
Người tu hành cần phải tìm ra,
Cho dân biết mục đầu Chánh Kiến.
TRANG 15
Trí linh mẫn nhìn xem các chuyện,
Phải đừng cho lầm lạc nẻo tà.
Dầu việc người hay việc của ta,
Nên phán đóan cho tường cho tận.
Tội với phước xét coi nhiều bận,
Mới khỏi lầm tà kiến đem vào.
Chánh Tư Duy mục ấy thanh cao,
Hãy tưởng nhớ những điều đáng nhớ.
Trên cùng dưới dầu thầy hay tớ,
Cũng tưởng điều trung chánh mới mầu.
Việc vui say mèo mả đâu đâu,
Hãy dẹp gát nhớ câu Lục Tự.
Câu Chánh Nghiệp cũng là quá bự,
Dầu nghề chi làm việc ngay đường.
Ta đừng nên theo kẻ bất lương,
Học ngón xảo để lừa đồng loại.
Chánh Tinh Tấn dù thành hay bại,
Cứ một đường tín ngưỡng của mình.
Dầu cho ai phá rối đức tin,
Ta cũng cứ một đàng đi tới.
Mục Chánh mạng chúng sanh ơi hỡi,
Cho hồn linh cai quản châu thân.
Lấy chơn nhơn dẹp tánh phàm trần,
Mới có thể mong về Cực Lạc.
Câu Chánh ngữ lòng son ghi tạc,
Tiếng luận bàn ngay ngắn tỏ tường.
Nói những điều đức hạnh hiền lương,
Chớ thêm bớt mà mang tội lỗi.
Việc tráo chác ấy là nguồn cội,
Lời xảo ngôn do đó mà ra.
Kinh nghiệm rồi Ta mới diễn ca,
Câu Chánh niệm thiết tha nhiều nỗi.
Khi cầu nguyện đừng cho phạm lỗi,
Phải làm tròn các việc vẹn toàn.
Dân chớ nên làm bướng làm càn,
Trong lúc ấy niệm cho lấy có.
Mục Chánh Định thiệt là rất khó,
Giữ tấm lòng bất động như như.
Cho hồn linh yên lặng an cư,
Thì mới được huờn nguyên phản bổn.
Tà với chánh còn đương trà trộn,
Người muốn tu phải sớm lọc lừa.
Tứ diệu Đề ai có mến ưa,
Thì lão cũng kể sơ thêm nữa.
Chữ Tập Đề nay đà mở cửa,
Để đem vào khuôn khổ người hiền.
Rán cực lòng một bước đầu tiên,
Sau mới được làm nên Phật Thánh.
Về Thượng giái cõi Tiên mới bảnh,
Đến Diệt Đề trừ vật dục xưa.
TRANG 16
Cõi hồng trần các việc mến ưa,
Sự giả tạm ta nên rứt bỏ.
Muốn tâm tánh ngày kia sáng tỏ,
Thì Khổ Đề phải chịu nhọc nhành.
Lòng dục tu thì phải thiệt hành,
Chớ đừng có ham điều sung sướng.
Đức Phật Tổ nào đâu hẹp lượng,
Chịu nhọc nhằn mới rõ Đạo Đề.
Thấy một đàng thẳng bẳng mà mê,
Ôi chừng đó mới là mầu nhiệm.
Mùi đạo diệu chúng dân rán kiếm,
Trễ thời kỳ khó gặp đặng Ta .
Rồi hành luôn Bát Nhẫn mới là,
Thì muôn việc đều an bá tuế.
Chữ thứ nhứt Nhẫn Năng Xử Thế,
Là người hiền khó kiếm trên đời.
Lập thân danh tuần trải nơi nơi,
Chờ thời đại mới là khôn khéo.
Chữ Nhẫn giới trì tâm trong trẻo,
Khuyên dương trần giữ phận làm đầu.
Nhẫn Hương Lân cùng khắp đâu đâu,
Trên cùng dưới đều hòa ý hỉ.
Nhẫn Phụ Mẫu gọi trang hiền sĩ,
Phận xướng tùy chồng vợ nhịn nhau.
Nhịn xóm chòm cô bác mới cao,
Nhẫn Tâm nọ ngày ngày an lạc.
Nhịn tất cả những người tuổi tác,
Nhẫn Tánh lành yên tịnh dài lâu.
Giữ một lòng hiền hậu mới mầu,
Quanh năm cũng bảo toàn thân thể.
Chữ Nhẫn Đức kể ra luôn thể,
Thì trong đời vạn sự bình an.
Chữ Nhẫn Thành báu quí hiển vang,
Khắp bá tánh được câu hòa nhã.
Câu đạo đức bay mùi thơm lạ,
Muốn nếm thì phải rán sưu tầm.
Các Đạo tà mưu khéo âm thầm,
Dân rán tránh kẻo lâm mà khổ.
Chúng nó xuống khuyên răn nhiều chỗ,
Dùng phép mầu lòe mắt chúng sanh.
Ai ham linh theo nó tập tành,
Sa cạm bẫy khó mong sống sót.
Ta chẳng phải dùng lời chuốt ngót,
Mà làm cho dân chúng say mê.
Nẻo chánh tà biện luận nhiều bề,
Cho bá tánh tìm nơi cội gốc.
Lựa cho phải kèo xưa danh mộc,
Đừng để lầm thợ khéo sơn da.
Thì sau nầy đến lúc phong ba,
Giông gió lớn cột kèo khỏi gãy.
TRANG 17
Thấy sanh chúng nhiều người khờ dại,
Chẳng biết gìn phong hóa lễ nghi.
Nên ta đem đạo đức duy trì,
Gìn tục cổ để người chẳng rõ.
Còn chậm chạp Đạo mầu chưa tỏ,
Như rừng hoang mới dọn một đường.
Tớ với Thầy nào quản thân lươn,
Muốn cứu thế xá chi bùn trịn.
Thương quá sức nên ta bịn rịn,
Quyết độ đời cho đến chung thân.
Nếu thế gian còn chốn mê tân,
Thì Ta chẳng an vui Cực Lạc.
Dạy bổn đạo lấy lời chính xác,
Mà chẳng tu là bởi không ưa.
Chớ nước sâu mà bị gàu thưa,
Dân đông đảo lời truyền chẳng xiết.
Nên phải tạm mượn cây ngòi viết,
Đem Đạo mầu như hạn cho mưa.
Đăng tố trần tâm ý Người Xưa,
Chữ thậm thâm trong kinh Phật Giáo.
Nền chơn lý chúng chê rằng láo,
Mà nào Ta có lợi dụng ai.
Trong bá gia nhiều ít lòng chay,
Để giữ trọn trong nền Phật Pháp.
Gìn giới cấm sửa tâm ô tạp,
Niệm Phật thì phải dẹp lòng tà.
Nhớ từ bi hai chữ ngâm nga,
Dầu làm lụng cũng là trì chí.
Chờ Thiên Địa châu nhi phục thỉ,
Như đời xưa có gã Tử Phòng.
Xem thời cơ người đã rõ thông,
Dùng tôi thiểu mà an bá tánh.
Đời vật chất văn minh tranh cạnh,
Chữ lợi quyền giựt giết lẫn nhau.
Động lòng hiền chư Phật đớn đau,
Cho kinh sấm dạy răn trần thế.
Nhìn thấy chuyện gạo châu củi quế,
Nghèo bạc vàng đạo đức cũng nghèo.
Ta xuống trần nhằm lúc nạn eo,
Nên phải bị kẻ hung khinh bỉ.
Vì bác ái nên thân Cuồng Sĩ,
Phải chịu điều khổ hạnh sâu xa.
Mong cho đời gặp lúc khải ca,
Trong bốn biển thái bình mới toại.
Phật, Tiên, Thánh, lòng nhơn hà hải,
Những ước ao thế giới hòa bình.
Nên khuyên đời truyền bá sử kinh,
Cho sanh chúng sửa mình trong sạch.
Giàu đổi bạn khinh khi kẻ rách,
Là những câu trong sách Minh Tâm.
TRANG 18
Tánh kẻ sang đổi vợ nào lầm,
Thánh nhơn để nhiều câu hữu lý.
Có mấy kẻ ăn năn xét kỹ ?
Mãi ỷ tài chê bướng chê càng.
Thì ngày sau đừng có trách than,
Những tội lỗi của mình tạo lấy.
Bị háo thắng việc người không thấy,
Rồi mảng lo gièm siểm nhiều lời.
Vì vậy nên tình nghĩa xe lơi,
Đâu gần gũi mà tường diệu lý.
Trong Lục tỉnh ai là người trí,
Mau thức thời tìm Đạo nhiệm sâu.
Khuyên dân đừng chia rẽ áo bâu,
Phải hợp tác gieo trồng giống quí.
Coi rồi phải thân mình tự trị,
Chẳng độ xong Phật khó dắt dìu.
Thả thuyền Từ bến Giác nâng niu,
Kẻ hiểu Đạo mau mau bước xuống.
Việc trải qua như mây gió cuốn,
Nhìn cuộc đời ngày tháng thoi đưa.
Trời sáng ra kế lại thấy trưa,
Năm cũ đó rồi qua năm mới.
Mười hai tháng mà còn mau tới,
Thì tuồng đời cũng chóng đổi thay.
Chữ phù vân phú quí nay mai,
Luân với chuyển dời qua đổi lại.
Cõi Ta Bà mấy ai tồn tại,
Sống dư trăm như tuổi lão Bành.
Đời Hạ Ngươn hay chết tuổi xanh,
Như thuở trước Nhan Hồi còn trẻ.
Miễn cho được ngày hai cơm tẻ,
Buổi bần hàn đặng có tu thân.
Nhờ ơn Trời ban bố đức ân,
Xem chung cuộc Phong Thần tại thế.
Xử những kẻ hung hăng tồi tệ,
Thưởng những người trung nghĩa vẹn tòan.
Ra kệ này hai chữ bảo an,
Cho trần thế được tâm thanh tịnh.
Ngọc báu quí ẩn trong Nam đỉnh,
Muốn tìm kim đáy biển gắng công.
Thấy dân tình luống những ước mong,
Gặp giống tốt hãy mau cày cấy.
Ai có nói Ta là người quấy,
Ta cũng cam bụng chịu tiếng đời.
Tỏ ít câu cầu chúc cho đời,
Mong bá tánh vạn dân giải thoát.
Hòa Hảo, ngày 20 tháng 9 năm Kỷ mão (1939)
«
Sửa lần cuối: 06/01/11 gửi bởi admin
»
Logged
Biết làm sao gieo Đạo khắp đại đồng,
Đưa nhơn loại đi vào vòng hạnh phúc.
Trang: [
1
]
Lên
Gửi cho bạn bè
In
« Trước
Tiếp »
Portal Management Extension PortaMx™ v0.956
|
PortaMx © 2008-2009 by PortaMx corp.
NamMoADiDaPhat.Org
Powered by SMF - DzinerStudio - PortaMX
Powered by SMF 2.0 RC1
|
SMF © 2006, Simple Machines LLC

markdown:
**Lời Vàng:**"Lòng sáu chữ niệm không có ngớt, Thì nạn tai cũng thoát như không." Đức Thầy [NAM MÔ A DI ĐÀ PHẬT](http://nammoadidaphat.org/home/index.php?PHPSESSID=hvme4omc9gq5sdr7mgbsi2uuk5&)« [THU' VIEN](http://nammoadidaphat.org/home/index.php?PHPSESSID=hvme4omc9gq5sdr7mgbsi2uuk5&action=forum)« [PHẬT GIÁO HÒA HẢO](http://nammoadidaphat.org/home/index.php?PHPSESSID=hvme4omc9gq5sdr7mgbsi2uuk5&action=forum;#c1)« [PHẬT GIÁO HÒA HẢO](http://nammoadidaphat.org/home/index.php?PHPSESSID=hvme4omc9gq5sdr7mgbsi2uuk5&board=35.0)« [SẤM GIẢNG GIÁO LÝ](http://nammoadidaphat.org/home/index.php?PHPSESSID=hvme4omc9gq5sdr7mgbsi2uuk5&board=7.0)«
- Quyển 4: Giác Mê Tâm Kệ
|
|
[Portal Management Extension PortaMx™ v0.956](http://portamx.com)| [PortaMx © 2008-2009 by PortaMx corp.](http://portamx.com/?license)

Server: Apache

Pragma: no-cache

Cache-Control: private