text:
'Ticking-off' Huntercombe
Ngày 21 tháng 9 năm 2011
Robin Hiseman
Nhà thiết kế
EGD có thể cảm ơn mẹ chồng tôi để có cơ hội để trải nghiệm Huntercombe. Cô ấy không ghé thăm chúng tôi rất thường xuyên, nhưng vào một ngày cuối tuần không lâu trước sự hiện diện của cô có nghĩa là tôi đã có thể ăn cắp đi cho điều đó quý giá nhất của kinh nghiệm, một hoàng hôn trò chơi chủ nhật. Không phải là thành viên của một câu lạc bộ quanh những bộ phận này, tôi đã nhìn vào trả một khoản phí màu xanh lá cây ở đâu đó. Sự lựa chọn rõ ràng là theo dõi pay-and-play địa phương. Hoàn toàn phù hợp và giá cả hợp lí, nhưng cũng được unfulfilling. Cằn nhằn tại tâm trí của tôi đã được thực tế là cho đêm trên 20 năm, tôi đã có nghĩa là để đánh dấu Huntercombe ra khỏi danh sách của tôi về lượt phải. Kể từ khi lái xe qua nó vào năm 1992 với các đồng nghiệp cũ của tôi ở Hawtree trên đường đi chơi Billingbear Park, bổ sung nhiều lần nhắc nhở lịch sự của bức ảnh mang tính biểu tượng tại sân golf thiết kế kinh thánh Fred Hawtree của, lịch sử Willie viên Junior khóa học này đã vĩnh viễn trên radar của tôi, nhưng chưa bao giờ hoàn toàn xuất hiện trong tầm nhìn của tôi chơi golf. Cuối cùng, đây là một cơ hội để giải quyết thiếu sót này. Đó là một buổi chiều đáng yêu và ủng hộ đã khẳng định khóa học sẽ mất lệ phí xanh của tôi, vì vậy trong vòng 50 phút của nhóm ra khỏi đường lái xe, tôi đã phát bóng nó lên trên mệnh kỳ quặc 3 mở. 5 phút sau, sau khi tục 3 putt những gì tôi thông báo là, tôi đã tốt trên con đường của tôi. Đó là một lựa chọn tốt. Huntercombe là tuyệt vời.
Hiếm khi có tôi đã chơi một khóa học mà đã được như vậy liên quan đến cho mỗi shot duy nhất. Luôn luôn có một quyết định được thực hiện; một nguy cơ được đánh giá; một sự lựa chọn như thế nào để chơi trò bắn tiếp theo. Đứng đầu nó đi là một tập hợp của một số các bề mặt đặt thú vị nhất từng được hình thành. Đây là một thiết kế mà vẫn chủ yếu bị ảnh hưởng kể từ khi Willie viên Junior đặt khóa học trong 1900-1901 ở khoảng thời gian tương tự như ông đã thiết kế Sunningdale. Hơn một thế kỷ sau đó tất nhiên vẫn là một kinh nghiệm quyến rũ cho các tay golf hiện đại. Tất cả điều này trên một khóa học đặt ra trên địa hình khiêm tốn trên một trang web nhỏ gọn. Có rất nhiều các kiến trúc sư sân golf hiện đại có thể học hỏi từ những nghiên cứu của một khóa học như thế này, đặc biệt nhất đó là những gì về thiết kế đã đưa ra khóa học kháng cáo để chịu đựng mà nó đã vẫn chủ yếu bảo quản cho 110 năm?
Với điều này trong tâm trí tôi quay trở lại văn phòng thiết kế nội soi vào ngày hôm sau và đề nghị chúng tôi cố gắng sắp xếp một chuyến đi nghiên cứu để Huntercombe. Nói chung, nhận được nhiều hơn hai người trong cùng một vị trí cùng một lúc là một nhiệm vụ tương tự như mèo chăn gia súc, nhưng lần này và có thể khuyến khích bởi viễn cảnh của một vòng phong nha của sân golf, năm người chúng tôi đã có thể cam kết thực hiện chuyến đi. Tôi đã thực hiện các thoả thuận thông qua vui tính và rất hữu ích thư ký Huntercombe, Nick Jenkins và trong vòng một vài tuần, chúng tôi đã ra khỏi cửa đầu một buổi chiều và đi lên vào Chilterns. Nick đã rất vui lòng sắp xếp cho khóa học quản lý Neil McCarthy-Primett để đi cùng với chúng tôi trên một tour đi bộ của khóa học trước khi trò chơi của chúng tôi. Neil đã ở Huntercombe trong nhiều năm và như vậy đã có thể điền vào chúng tôi với rất nhiều thông tin để bổ sung nghiên cứu riêng của chúng tôi bố trí. Đây là lần đầu tiên mà một trong hai Jeremy Ross, Dave hay Alex từng thấy khóa học và tôi nghĩ tôi một cách an toàn có thể viết thay mặt họ rằng tất cả họ đều hoàn toàn ấn tượng với những gì họ nhìn thấy.
Đối với tôi đó là sự phức tạp của thiết kế mà đặt nó ngoài. Ở khắp mọi nơi bạn nhìn có bướu, va chạm, hố và hốc. Thường thì những mối nguy hiểm phải được đạt trên tại một số điểm trên hành trình từ tee xanh lá cây. Những lần khác, họ ghen bảo vệ hai cánh. Không bao giờ họ có thể bị bỏ qua. Đại gia còn thường sẽ phải giữ các trình điều khiển trong túi phải hy sinh thời gian cho chính xác, mà có lẽ là lý do chính tại sao nó vẫn là một thiết kế có liên quan đến ngày nay. Tính toàn vẹn và độ dài của các mũi chích ngừa tiếp cận đã được bảo quản bằng sự cần thiết phải giữ bóng ra khỏi các mối nguy hiểm khốc liệt từ điểm phát bóng. Nó chắc chắn có rốt hình sự, phù hợp với thời gian nó đã được hình thành. Đó không phải là điều xấu. Neil kể lại thực tế là câu lạc bộ đã có để định tuyến lại fairway thứ 6 đi từ một đường song song và như thế nào, khi làm như vậy, ông đã bị cưỡng bức, nhiều để hối tiếc của mình, để điền vào một trong những thăm thẳm. Đây là một câu lạc bộ biết và tôn vinh giá trị của thiết kế khóa học của mình. Một số màu xanh là các phần bảo tàng cổ điển. 8 là ví dụ giới thiệu rõ ràng. Một bốn tầng chân khổng lồ màu xanh lá cây tách thành hai khu vực riêng biệt, với tầng trên hẹp sau đó dốc đi vào mặt sau của màu xanh lá cây. Kiểm tra bồi thường bảo hiểm của bạn nếu bạn đã bao giờ cố gắng để làm điều đó trong những ngày này! Có lẽ nhược điểm duy nhất với cách thức khóa học đã phát triển là nó bây giờ quá nghẹn ngào với cây cối và bụi nhỏ con. Những cây mẫu là đẹp nhưng clag thực dân dày ở giữa làm cho nó khá tối, tất nhiên kèm theo ở những nơi. Vào cuối ngày, mặt trời bùng nổ ngoạn mục qua nặng, bầu trời u ám, nhưng những tia nắng không bao giờ có một cơ hội để làm sáng tỏ những luồng.
Chúng tôi làm tròn ngày với một cặp nhanh của 2 quả bóng. Jeremy phủi Dave (so với tỷ lệ cược) và Alex và tôi chia sẻ một trận đấu giảm một nửa cạnh tranh cao hơn. Huntercombe là một niềm vui và một chuyến thăm rất cần thiết cho bất cứ ai có quan tâm đến thiết kế sân golf. Bất kỳ kiến trúc sư có thể tái tạo sự hấp dẫn lâu dài của Huntercombe trong các thiết kế của họ là vào một chiến thắng. Tôi chắc chắn rằng tất cả chúng tôi đã có một số ý tưởng trong tủ khóa của chúng tôi là kết quả của chuyến đi của chúng tôi. Hy vọng rằng, nhiều chuyến đi nghiên cứu EGD sẽ làm theo. Tôi muốn đưa họ đến Painswick. Bây giờ sẽ là một cái mở mắt!
Ảnh trên: Khóa học quản lý Neil McCarthy-Primett (trái) giải thích chiến lược của lỗ 18 đến Dave và Alex.
Ảnh trên: mounding Alpinised và nhiên liệu bao quanh màu xanh lá cây của 3 mệnh lỗ thứ 7 dài.
Đẹp báo cáo, Robin. Tôi yêu nơi đó, đó là một bảo tàng của đầu thế kỷ 20 sân, nhưng đáng chú ý liên quan ngày hôm nay. Bốn xanh đầu tiên là không có gì thiếu tuyệt vời! Bạn có quyền về các đại gia còn lại trình điều khiển trong túi; Philip G ném bom ba bàn là ra khỏi tee cả ngày, vượt ra ngoài bóng tee thảm hại của chúng tôi. Tôi đưa ra nhận định tương tự như bạn về cây, nhưng các thành viên nghĩ rằng có rất nhiều trong các hành lang rộng.
Bình luận của Bill McBride - ngày 22 tháng chín năm 2011

markdown:
#
['Ticking-off' Huntercombe](http://www.egd.com/blog?p=1081>lang=vi) ![ Robin Hiseman](http://www.egd.com/blog/wp-content/images/robin-hiseman.png)
![ Robin Hiseman](http://www.egd.com/blog/wp-content/images/robin-hiseman.png)
Ngày 21 tháng 9 năm 2011
[Robin Hiseman](http://www.egd.com/blog?cat=12>lang=vi)
Nhà thiết kế
EGD có thể cảm ơn mẹ chồng tôi để có cơ hội để trải nghiệm Huntercombe. Cô ấy không ghé thăm chúng tôi rất thường xuyên, nhưng vào một ngày cuối tuần không lâu trước sự hiện diện của cô có nghĩa là tôi đã có thể ăn cắp đi cho điều đó quý giá nhất của kinh nghiệm, một hoàng hôn trò chơi chủ nhật. Không phải là thành viên của một câu lạc bộ quanh những bộ phận này, tôi đã nhìn vào trả một khoản phí màu xanh lá cây ở đâu đó. Sự lựa chọn rõ ràng là theo dõi pay-and-play địa phương. Hoàn toàn phù hợp và giá cả hợp lí, nhưng cũng được unfulfilling. Cằn nhằn tại tâm trí của tôi đã được thực tế là cho đêm trên 20 năm, tôi đã có nghĩa là để đánh dấu Huntercombe ra khỏi danh sách của tôi về lượt phải. Kể từ khi lái xe qua nó vào năm 1992 với các đồng nghiệp cũ của tôi ở Hawtree trên đường đi chơi Billingbear Park, bổ sung nhiều lần nhắc nhở lịch sự của bức ảnh mang tính biểu tượng tại sân golf thiết kế kinh thánh Fred Hawtree của, lịch sử Willie viên Junior khóa học này đã vĩnh viễn trên radar của tôi, nhưng chưa bao giờ hoàn toàn xuất hiện trong tầm nhìn của tôi chơi golf. Cuối cùng, đây là một cơ hội để giải quyết thiếu sót này. Đó là một buổi chiều đáng yêu và ủng hộ đã khẳng định khóa học sẽ mất lệ phí xanh của tôi, vì vậy trong vòng 50 phút của nhóm ra khỏi đường lái xe, tôi đã phát bóng nó lên trên mệnh kỳ quặc 3 mở. 5 phút sau, sau khi tục 3 putt những gì tôi thông báo là, tôi đã tốt trên con đường của tôi. Đó là một lựa chọn tốt. Huntercombe là tuyệt vời.
Hiếm khi có tôi đã chơi một khóa học mà đã được như vậy liên quan đến cho mỗi shot duy nhất. Luôn luôn có một quyết định được thực hiện; một nguy cơ được đánh giá; một sự lựa chọn như thế nào để chơi trò bắn tiếp theo. Đứng đầu nó đi là một tập hợp của một số các bề mặt đặt thú vị nhất từng được hình thành. Đây là một thiết kế mà vẫn chủ yếu bị ảnh hưởng kể từ khi Willie viên Junior đặt khóa học trong 1900-1901 ở khoảng thời gian tương tự như ông đã thiết kế Sunningdale. Hơn một thế kỷ sau đó tất nhiên vẫn là một kinh nghiệm quyến rũ cho các tay golf hiện đại. Tất cả điều này trên một khóa học đặt ra trên địa hình khiêm tốn trên một trang web nhỏ gọn. Có rất nhiều các kiến trúc sư sân golf hiện đại có thể học hỏi từ những nghiên cứu của một khóa học như thế này, đặc biệt nhất đó là những gì về thiết kế đã đưa ra khóa học kháng cáo để chịu đựng mà nó đã vẫn chủ yếu bảo quản cho 110 năm?
Với điều này trong tâm trí tôi quay trở lại văn phòng thiết kế nội soi vào ngày hôm sau và đề nghị chúng tôi cố gắng sắp xếp một chuyến đi nghiên cứu để Huntercombe. Nói chung, nhận được nhiều hơn hai người trong cùng một vị trí cùng một lúc là một nhiệm vụ tương tự như mèo chăn gia súc, nhưng lần này và có thể khuyến khích bởi viễn cảnh của một vòng phong nha của sân golf, năm người chúng tôi đã có thể cam kết thực hiện chuyến đi. Tôi đã thực hiện các thoả thuận thông qua vui tính và rất hữu ích thư ký Huntercombe, Nick Jenkins và trong vòng một vài tuần, chúng tôi đã ra khỏi cửa đầu một buổi chiều và đi lên vào Chilterns. Nick đã rất vui lòng sắp xếp cho khóa học quản lý Neil McCarthy-Primett để đi cùng với chúng tôi trên một tour đi bộ của khóa học trước khi trò chơi của chúng tôi. Neil đã ở Huntercombe trong nhiều năm và như vậy đã có thể điền vào chúng tôi với rất nhiều thông tin để bổ sung nghiên cứu riêng của chúng tôi bố trí. Đây là lần đầu tiên mà một trong hai Jeremy Ross, Dave hay Alex từng thấy khóa học và tôi nghĩ tôi một cách an toàn có thể viết thay mặt họ rằng tất cả họ đều hoàn toàn ấn tượng với những gì họ nhìn thấy.
Đối với tôi đó là sự phức tạp của thiết kế mà đặt nó ngoài. Ở khắp mọi nơi bạn nhìn có bướu, va chạm, hố và hốc. Thường thì những mối nguy hiểm phải được đạt trên tại một số điểm trên hành trình từ tee xanh lá cây. Những lần khác, họ ghen bảo vệ hai cánh. Không bao giờ họ có thể bị bỏ qua. Đại gia còn thường sẽ phải giữ các trình điều khiển trong túi phải hy sinh thời gian cho chính xác, mà có lẽ là lý do chính tại sao nó vẫn là một thiết kế có liên quan đến ngày nay. Tính toàn vẹn và độ dài của các mũi chích ngừa tiếp cận đã được bảo quản bằng sự cần thiết phải giữ bóng ra khỏi các mối nguy hiểm khốc liệt từ điểm phát bóng. Nó chắc chắn có rốt hình sự, phù hợp với thời gian nó đã được hình thành. Đó không phải là điều xấu. Neil kể lại thực tế là câu lạc bộ đã có để định tuyến lại fairway thứ 6 đi từ một đường song song và như thế nào, khi làm như vậy, ông đã bị cưỡng bức, nhiều để hối tiếc của mình, để điền vào một trong những thăm thẳm. Đây là một câu lạc bộ biết và tôn vinh giá trị của thiết kế khóa học của mình. Một số màu xanh là các phần bảo tàng cổ điển. 8 là ví dụ giới thiệu rõ ràng. Một bốn tầng chân khổng lồ màu xanh lá cây tách thành hai khu vực riêng biệt, với tầng trên hẹp sau đó dốc đi vào mặt sau của màu xanh lá cây. Kiểm tra bồi thường bảo hiểm của bạn nếu bạn đã bao giờ cố gắng để làm điều đó trong những ngày này! Có lẽ nhược điểm duy nhất với cách thức khóa học đã phát triển là nó bây giờ quá nghẹn ngào với cây cối và bụi nhỏ con. Những cây mẫu là đẹp nhưng clag thực dân dày ở giữa làm cho nó khá tối, tất nhiên kèm theo ở những nơi. Vào cuối ngày, mặt trời bùng nổ ngoạn mục qua nặng, bầu trời u ám, nhưng những tia nắng không bao giờ có một cơ hội để làm sáng tỏ những luồng.
Chúng tôi làm tròn ngày với một cặp nhanh của 2 quả bóng. Jeremy phủi Dave (so với tỷ lệ cược) và Alex và tôi chia sẻ một trận đấu giảm một nửa cạnh tranh cao hơn. Huntercombe là một niềm vui và một chuyến thăm rất cần thiết cho bất cứ ai có quan tâm đến thiết kế sân golf. Bất kỳ kiến trúc sư có thể tái tạo sự hấp dẫn lâu dài của Huntercombe trong các thiết kế của họ là vào một chiến thắng. Tôi chắc chắn rằng tất cả chúng tôi đã có một số ý tưởng trong tủ khóa của chúng tôi là kết quả của chuyến đi của chúng tôi. Hy vọng rằng, nhiều chuyến đi nghiên cứu EGD sẽ làm theo. Tôi muốn đưa họ đến Painswick. Bây giờ sẽ là một cái mở mắt!
![Quản lý khóa học Neil McCarthy-Primett (trái) giải thích chiến lược của lỗ 18 đến Dave và Alex.](/blog/wp-content/uploads/2011/09/huntercombe01.jpg)
Ảnh trên: Khóa học quản lý Neil McCarthy-Primett (trái) giải thích chiến lược của lỗ 18 đến Dave và Alex.
![Mounding Alpinised và nhiên liệu bao quanh màu xanh lá cây của 3 mệnh lỗ thứ 7 dài.](/blog/wp-content/uploads/2011/09/huntercombe02.jpg)
Ảnh trên: mounding Alpinised và nhiên liệu bao quanh màu xanh lá cây của 3 mệnh lỗ thứ 7 dài.
Đẹp báo cáo, Robin. Tôi yêu nơi đó, đó là một bảo tàng của đầu thế kỷ 20 sân, nhưng đáng chú ý liên quan ngày hôm nay. Bốn xanh đầu tiên là không có gì thiếu tuyệt vời! Bạn có quyền về các đại gia còn lại trình điều khiển trong túi; Philip G ném bom ba bàn là ra khỏi tee cả ngày, vượt ra ngoài bóng tee thảm hại của chúng tôi. Tôi đưa ra nhận định tương tự như bạn về cây, nhưng các thành viên nghĩ rằng có rất nhiều trong các hành lang rộng.
Bình luận của Bill McBride - ngày 22 tháng chín năm 2011


text:
Đăng ký
|
Đăng nhập
DEAL TỔNG HỢP
CHỢ VOUCHER
THỜI TRANG
MẸ VÀ BÉ
KỸ THUẬT SỐ
SÁCH TRUYỆN
ẨM THỰC
CHIA SẺ
ĐIỂM ĐẾN
Thời trang Nam
Thời trang Nữ
Phụ kiện
Nước hoa - Mỹ phẩm
Giầy dép - Túi xách
Thời trang khác
Chân váy thanh lý, giá rẻ. hàng chất...^^
TpHCM
-
35k
Điện thoại : 0199 23 77 193
YH: xich_lo_cho_oto
Mình chỉ online trong giờ làm việc, nên nếu bạn nào có nhu cầu thì nhắn tin hoặc call trực tiếp cho mình nhé
- Hàng mua rồi miễn đổi hoặc trả lại nhé
- Mình không giữ order, ai đến trước thì lấy trước hen.
- Không trả lời những tin nhắn trả giá nhé ( Hàng tuy mặc rồi,nhưng mình giữ đồ rất kỹ nên vẫn rất mới )
- Ship thì 10-20k nhé, khi giao hàng nhưng không lấy, các bạn vui lòng trả tiền Ship 25k hen.
- MÌnh sẽ freeship cho các bạn ở các trung tâm như: Big C Tô Hiến Thành, Tòa nhà SaiGon Centre, Công viên Lê Thị Riêng
- Những sản phẩm nào đã bán thì mình sẽ delete đi nhé.
Có gì các bạn cứ trao đổi yahoo với mình nhé
A25- Chân váy tầng, mới 99%->70k
A15- Chân váy xếp, vải chất, màu vàng chanh, hàng mới, bên ngoài nhìn màu rất đẹp, không hiểu sao chụp hình hơi dìm hàng em nó một chút->70k
A16-Chân váy bằng thun,hàng xuất khâu, vải chất, có quần đùi mặc phía bên trong, mới 100%-> 50k
A17- Chân váy chữ A, mới 90%-> 50k
A18- Chân váy jean -> 40k
A19- Váy jean-> 55k
A20- Chân váy công sở, mới 100%, mua về nhưng mặc lần nào ->55k
A21- Chân váy caro, chữ A-> 50k
A22-Chân váy kaki, chất->70k
A23- Chân váy jean ->50K
Bị rớt mất một cái nút nhé:
A24- Chân váy bí hoa, mới 98%->50k
Có thể kết hợp với áo ba lỗ :
chuotbach
-
26.10.2012
|
Xem:
739
Ghi nhớ
Bạn nên tìm hiểu kỹ sản phẩm, thông tin người bán trước khi thanh toán. Xem thêm thông tin
tại đây
.
Có
2
bàn luận
Sắp xếp:
Theo thứ tự
|
Mới trả lời
meoconngocxit
A15 size j vậy b ? dài bao nhiu ?
09.12.2012
·
Bàn luận
1
bàn luận
chuotbach
A15 size M bạn nhé, màu vàng chanh, váy mới đến 95%, vì mình mua về chưa một lần mặc
10.12.2012
Đăng nhập
hoặc
đăng ký
để bàn luận
Combo món ăn Hàn Quốc + 1 phần nước
45.000đ
43%
cungmua.com
@chuotbach
Tỉnh/thành
Tham gia
:
20.10.2012
Chưa cập nhật
Cùng người bán
Thanh lý hàng đẹp, giá rẻ đây..^^ ( Không đổi đồ)
40k
Cần thanh lý mấy em giầy xuất khẩu...
50k
Tổng hợp áo Blazer, áo khoác...ĐỒNG GIÁ 70K, NEW >95% ( TOPIC KHÔNG ĐỔI ĐỒ)
70K
Fix mạnh tay..đồng giá 35k,..Hàng đẹp giá rẻ, mại dzooooo..._TOPIC KHÔNG ĐỔi ĐỒ NHÉ ^^
35k
Cùng danh mục
Đồng giá 40k - Hàng đẹp !
40k
2hand :* thanh lí hoặc change
áo khoác thanh lý
NEW UP (16/9) Đồng giá 50k giá rẻ
50000
BÁN HOẶC ĐỔI CHO HẾT LẸ..LẸ
30K
Change nào- Trả dc bán lun
Thanh lý 20-50k
Sale nhanh - New 100% .Change + 50k
100k
Trả giá được bán hết nha ^^ chỉ từ 30k -> 70k
NEW UP! CẦN TIỀN FIX MẠNH <3
15000
Xem thêm
Tham khảo ý kiến
Chia sẻ ăn uống
Chia sẻ du lịch
Chia sẻ sản phẩm
Dịch vụ Groupon
Săn deal hot
Giới thiệu khuyến mãi
Về Giamua
Qui chế hoạt động
Công ty Cổ phần Dịch Vụ Trực Tuyến Ánh Dương
Office: 114 Đường số 2 Cư xá Đô Thành, P.4, Q.3, Tp.HCM
Hotline: 0913 911 833
Giamua không trực tiếp bán hàng
Giấy phép MXH số 83/GXN - TTĐT
© Giamua 2010 - 2013
Deal tổng hợp
Chợ voucher
Chợ thời trang
Chia sẻ
Điểm đến
Kay.vn

WARC-Type: response

Content-Type: application/http; msgtype=response

Connection: close

X-Powered-By: UrlRewriter.NET 2.0.0

Cache-Control: private

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


text:
Mở đầu
Hầu hết công việc đáng chú ý về phát triển phần mềm hiện nay xảy ra ở một trong hai thái cực: các máy chủ điện toán đám mây khổng lồ và các thiết bị di động nhỏ bé. Các lĩnh vực này giải quyết các vấn đề khác nhau đáng kể và do đó hỗ trợ các công cụ khác nhau, một cách tương ứng. Việc phát triển cho máy chủ thường sử dụng các ngôn ngữ kịch bản lệnh để kết hợp chặt chẽ các thành phần khác nhau với nhau và hoàn thành các nhiệm vụ tự động hóa tinh vi, trong khi việc phát triển cho di động lại tập trung vào các khả năng và các nhu cầu cụ thể của một thiết bị và người dùng cụ thể.
Tuy nhiên, hai thái cực này lại dùng chung một ngôn ngữ phổ biến là: Java™. Dù là Android hay khung công tác Spring, nhiều trong số các công nghệ phổ biến nhất hiện nay đã chấp nhận một ngôn ngữ được cả thế giới biết đến và hỗ trợ. Ngôn ngữ phổ biến này có thể dẫn đến một số tác động lẫn nhau đáng ngạc nhiên giữa các lĩnh vực mà bạn có xu hướng nghĩ là khác biệt. Lập trình Java mở cửa cho nhiều tùy chọn xuyên qua nhiều nền tảng, như dễ dàng gửi lên mã máy chủ cho một thiết bị Android hay liên kết các thành phần hiện có vào trong các khả năng của nền tảng được thiết kế riêng.
Bài viết này tìm hiểu Ruboto, một dự án bắc cầu qua khe hở giữa các ngôn ngữ tạo kịch bản lệnh và Android. Bạn sẽ tìm hiểu về Ruby và Android, cách chúng có thể liên kết với nhau trong máy ảo Dalvik, cách xây dựng và triển khai các kịch bản lệnh riêng của bạn và làm thế nào mà công nghệ này có tiềm năng tăng năng suất cho lập trình viên và tính linh hoạt của ứng dụng .
Kiến thức nền tảng Ruby
Nhiều ngôn ngữ tạo kịch bản lệnh cạnh tranh nhau giành cảm tình của của các lập trình viên, nhưng Ruby hiện đang giữ một vị trí mạnh mẽ. Nổi tiếng nhất là nó hỗ trợ khung công tác Web Rails, nhưng nhiều nhà phát triển cũng ngưỡng mộ Ruby về sự kết hợp của sự ngắn gọn và trang nhã. Một ngôn ngữ tạo kịch bản lệnh hướng đối tượng có nhiều tính năng hiện đại như định kiểu "vịt" (duck typing-định kiểu vịt nghĩa là một đối tượng được xác định bởi nó có thể làm gì chứ không phải bởi nó là gì) và siêu lập trình (metaprogramming), Ruby đủ mạnh để hỗ trợ các kiến trúc phức tạp và cũng đủ đơn giản để thực hiện nhiệm vụ đặc biệt.
Ruby có một số hương vị, bao gồm cả JRuby phổ biến. JRuby là một trình thông dịch Ruby đầy đủ được viết bằng ngôn ngữ Java và có thể chạy trong một máy ảo Java (JVM). Không giống như Ruby chính thức, JRuby cho phép bạn gọi các kịch bản lệnh Ruby từ bên trong mã Java, cũng như gọi các API Java từ bên trong các kịch bản lệnh Ruby của bạn.
Kiến thức nền tảng về Android
Android đã được Open Handset Alliance phát triển, nhưng nó thường được coi là một dự án Google. Hiện nay, Android được trang bị cho khoảng một phần tư trong số tất cả các điện thoại thông minh mới và thị phần của nó vẫn tiếp tục tăng.
Ở bên trong, Android chạy trên một nhân Linux sửa đổi. Hầu hết các ứng dụng chạy trong máy ảo Dalvik (VM), một máy ảo tùy chỉnh mà Google đã thiết kế từ nền tảng trở lên để có hiệu năng tối ưu trên các thiết bị di động. Bạn có thể tìm hiểu thêm về Dalvik trong phần Tài nguyên.
Một điểm mà nhiều nhà phát triển Android mới không nhận thấy là mã nguồn Java do họ viết ra không chạy như mã byte Java. Thay vào đó, bộ công cụ Android chuyển đổi mã byte Java thành mã byte Dalvik. Những tệp được chuyển đổi này, có phần mở rộng .dex, được đóng gói trong ứng dụng mà bạn triển khai lên thiết bị. Vào lúc thiết bị chạy chương trình của bạn, không có mã byte nào của Java còn lại.
Android + Ruby = Ruboto
Charles Nutter, một thành viên của nhóm JRuby, đã hiểu rằng: vì chuỗi công cụ (toolchain) Android chuyển đổi mã Java đã biên dịch thành các tệp Dalvik và vì JRuby đã có một trình thông dịch Ruby bằng mã byte Java đã biên dịch, nên ông sẽ có thể chạy Ruby trên Android. Trong một thời gian ngắn đáng kinh ngạc, ông đã thực hiện nhiệm vụ này và Ruboto được sinh ra. Nhờ những nỗ lực của một số nhà phát triển khác, Ruboto đã trở thành một dự án năng động đang phát triển ngày càng hấp dẫn với các nhà phát triển Android cũng như Ruby.
Hiện nay, Ruboto có hai hương vị: ruboto-irb và ruboto-core. ruboto-irb là một trình vỏ (shell) Ruby tương tác chạy trên Android. Dự án này cho phép bạn chạy kịch bản lệnh Ruby tùy ý, các kịch bản lệnh này cũng có thể truy cập các API Android. Công cụ này có thể rất có ích cho các nhà phát triển, những người muốn chạy kiểm thử hoặc thực hiện các nhiệm vụ trên thiết bị của họ, nhưng có lẽ không thích hợp để viết các ứng dụng mà bạn sẽ phân phối sau này.
Ngược lại, ruboto-core cung cấp một khung công tác cho phép bạn tạo các dự án Ruboto riêng của bạn. Khi sử dụng ruboto-core, bạn có thể bổ sung thêm sự hỗ trợ kịch bản lệnh mạnh mẽ và linh hoạt cho dự án của bạn, trong khi vẫn duy trì quyền truy cập vào các API Android. Hình 1 cho thấy quá trình xây dựng bởi ruboto-core: các tệp nguồn Java được tạo tự động và các kịch bản lệnh Ruby được viết-tùy chỉnh được đóng gói lại với nhau thành một APK Android sẽ chạy trên thiết bị.
Hình 1. Xây dựng một ứng dụng Ruboto
Phần còn lại của bài viết này tập trung vào việc tạo một dự án dựa trên Ruboto tùy chỉnh. Ruboto vẫn còn là phần mềm sơ khởi; lúc viết bài này, số phiên bản của nó là 0.0.2. Nó tiếp tục phát triển nhanh chóng và có thể hoạt động hơi khác đi một chút lúc bạn đọc bài viết này. Nếu bạn gặp vấn đề trong khi đang chạy bất kỳ lệnh nào dưới đây, hãy xem phần Tài nguyên để có được các thông tin cập nhật nhất về Ruboto và Android.
Tạo kịch bản lệnh SMS
Kết hợp Ruby và Android với nhau cho phép bạn tạo các kịch bản lệnh đơn giản có thể truy cập các chức năng mạnh mẽ của Android. Bạn sẽ viết một kịch bản lệnh Ruboto cho phép những người dùng đặt hàng hải sản từ một dịch vụ giao hàng. Ứng dụng đơn giản này tận dụng những thế mạnh của mỗi nền tảng. Về phía Android, bạn sẽ có một cách đơn giản để tạo một tin nhắn SMS có chứa đơn hàng của bạn; ứng dụng này đặt các đơn hàng thậm chí không cần một máy chủ. Về phía Ruby, bạn sẽ sử dụng lại một thư viện xử lý ngôn ngữ hiện có, để tiêu chuẩn hóa các đơn hàng của bạn thành một định dạng dễ đọc.
Bắt đầu
Để xây dựng và triển khai các kịch bản lệnh Ruby trên Android cần có một số thành phần. Bạn có thể đã có một số trong các thành phần này được cài đặt; nếu đã có rồi, thì bạn có thể sử dụng những công cụ hiện có đó.
Vì cả Android lẫn Ruby là đa nền tảng, nên bạn có thể chạy Ruboto trên Linux®, Mac OS X, hay Windows®. Bạn sẽ sử dụng dòng lệnh trong suốt bài viết này.
Nếu bạn sử dụng
cygwin cho Windows, bạn có thể
gặp phải các vấn đề trong khi chạy các lệnh JRuby nào đó. Để cho an toàn,
hãy gắn với shell CMD Windows tiêu chuẩn nếu bạn đang chạy Windows.
Java
Bạn sẽ cần một JDK (Java Development Kit – Bộ dụng cụ phát triển Java) đang hoạt động trên hộp phát triển của bạn. Để kiểm tra xem một bộ dụng cụ phát triển Java đã được cài đặt chưa, hãy nhập lệnh sau đây:
$ javac -version
Lệnh này sẽ tìm thấy một phiên bản của JDK, nếu bạn đã thiết lập. Nếu không, hãy cài đặt phiên bản mới nhất của JDK theo liên kết trong phần Tài nguyên. Sau khi cài đặt, hãy thêm thư mục bin của JDK vào PATH (đường dẫn) của bạn và lặp lại lệnh ở trên.
Ant
Android đi kèm với phiên bản Ant riêng của nó, nhưng Ruboto cũng sẽ cần truy cập Ant từ kịch bản lệnh riêng của mình. Nếu bạn chưa cài đặt một phiên bản độc lập của Ant, hãy tải nó về từ liên kết trong phần Tài nguyên và giải nén vào thư mục bất kỳ. Một lần nữa, hãy thêm thư mục bin của nó vào PATH của bạn. Hãy chắc chắn rằng bạn có thể chạy lệnh Ant.
Android
Chuyển đến trang Web của nhà phát triển Android và cài đặt Android SDK cho
hệ điều hành của bạn (xem Tài nguyên). Sau khi đã
cài đặt Android SDK, hãy chạy lệnh
android nằm
trong thư mục tools (các công cụ) của Android. Lệnh này khởi chạy trình
quản lý này SDK, như trong Hình 2. Bạn sẽ muốn cài đặt các gói sau, được
liệt kê trong các gói có sẵn (Available).
- SDK cho nền tảng Android 2.2, API 8.
- Các công cụ SDK của Android, bản sửa đổi 8.
- Các công cụ-nền tảng SDK Android, bản sửa đổi 1.
Hình 2. SDK Android và trình quản lý AVD
Tạo một ảnh Android để phát triển bằng cách mở phần các thiết bị ảo của SDK Android và trình quản lý AVD. Nhìn vào Hình 3, hãy tạo một thiết bị ảo có tên Froyo nhằm đến Android 2.2 - API mức 8. Bạn có thể tạo một Thẻ nhớ SD ảo nếu bạn muốn.
Hình 3. Tạo một trình mô phỏng thiết bị
Các ứng dụng ruboto sẽ chạy trên thiết bị của bạn, nhưng việc phát triển sẽ dễ dàng hơn nhiều nếu bạn có quyền viết vào các thư mục tùy ý, trong đó yêu cầu hoặc sử dụng trình phỏng theo thiết bị hoặc thiết bị gốc. Phần còn lại của bài viết này tập trung vào sử dụng trình phỏng theo thiết bị. Sau khi bạn kết thúc dự án này, nó sẽ chạy tốt như nhau trên một thiết bị Android đang chạy phiên bản phần mềm 2.2 hoặc mới hơn.
Bổ sung thêm các thư mục các công cụ-nền tảng (platform-tools) và các công cụ (tools) của Android vào đường dẫn PATH của bạn. Bây giờ bạn có thể chạy các lệnh trong Liệt kê 1 từ dấu nhắc của bạn.
Liệt kê 1. Chạy các lệnh từ dấu nhắc của bạn
$ aapt version $ adb --version
JRuby
JRuby cung cấp một bản cài đặt dễ dàng đến không ngờ. Chỉ cần tới http://jruby.org/getting-started và làm theo các hướng dẫn. Nếu cần thiết, hãy thêm thư mục bin của JRuby vào đường dẫn (PATH) của bạn. Hãy kiểm tra xem việc cài đặt đã thành công chưa bằng cách gõ lệnh sau:
$ jruby -v
Vì Ruboto được lưu trữ trên một máy chủ bảo mật, nên bạn sẽ cần phải cài đặt gem JRuby-openssl (gem là chương trình dùng để quản lý các thư viện cho Ruby) để tải nó. Bạn có thể thực hiện việc này bằng lệnh sau:
$ gem install jruby-openssl
Bạn cũng sẽ muốn cài đặt rake (Ruby make), là tương đương của make hay ant dành cho Ruby. Hãy gõ lệnh sau đây:
$ gem install rake
Cuối cùng, đến lúc để cài đặt chính Ruboto. Ruboto được đóng gói như một gem, vì vậy việc cài đặt rất dễ dàng. Hãy nhập lệnh sau đây:
$ gem install ruboto-core
Tạo dự án Ruboto
Ruboto sẽ tạo ra một dự án Android từ đầu cho bạn, nó đảm bảo rằng bản kê của bạn được thiết lập đúng, các kịch bản lệnh được đặt đúng chỗ trong bộ sưu tập đúng và bạn có quyền truy cập vào các thư viện cần thiết. Bạn nên dùng cách tiếp cận này hơn là cố gắng tự tạo nó cho mình hoặc sửa đổi một dự án Android hiện tại.
Để tạo dự án, hãy dịch chuyển tới một thư mục dự án, sau đó gõ như sau:
$ ruboto gen app --package us.cirion.ruboto.demo --path fishmonger
--name Fishmonger --target android-8 --activity Fishmonger
Lệnh này làm những việc sau:
gen appra lệnh cho Ruboto tạo một dự án Android mới từ đầu.
--packagecung cấp tên gói Android duy nhất.
--pathra lệnh cho Ruboto lưu trữ dự án đó ở đâu; đây phải là một tên thư mục mới.
--namexác định tên ứng dụng mà người dùng nhìn thấy; tên này không cần phải là duy nhất.
--targetxác định phiên bản Android nào để biên dịch lại dự án. Lúc viết bài này, bạn phải sử dụng
android-8. Một đối số tùy chọn là
--min_sdk, khai báo rằng ứng dụng của bạn có thể chạy trên các phiên bản Android trước đó; tạm thời bây giờ hãy bỏ qua điều này.
--activitylà một đối số tùy chọn để ra lệnh cho Ruboto tạo ra một hoạt động Android mới và khởi tạo nó.
Bạn có thể tìm hiểu các nội dung của thư mục fishmonger (người bán cá).
Ruboto đã tự động tạo ra tất cả các tệp Android cần thiết để xây dựng và
chạy một Hoạt động cơ bản. Vì ứng dụng sẽ gửi các tin nhắn SMS, nên bạn
cần phải thực hiện một sự thay đổi trong tệp AndroidManifest.xml. Chèn thẻ
sau như là phần tử con đầu tiên của phần tử
<manifest> trong tệp đó:
<uses-permission android:name="android.permission.SEND_SMS" />
Nếu bạn bỏ qua sự quyền hạn này, bạn sẽ vẫn còn có thể xây dựng và nạp kịch bản lệnh của bạn, nhưng bạn sẽ nhận được một lỗi thời gian chạy khi ứng dụng của bạn cố gắng gửi đi một tin nhắn SMS.
Chạy dự án mặc định
Đặc biệt, Ruboto tạo ra một Activity (hoạt động) và một kịch bản lệnh sẽ cài đặt và chạy trên thiết bị hoặc trình mô phỏng thiết bị. Nếu trình mô phỏng thiết bị của bạn vẫn còn chưa chạy, bạn có thể khởi chạy nó bằng các lệnh sau đây:
$ emulator -avd Froyo
Chờ cho trình mô phỏng thiết bị kết thúc khởi động và đi tới màn hình chủ.
Để đảm bảo tất cả các tệp Ruboto được xây dựng và triển khai đúng cách,
cd vào thư mục fishmonger và chạy các lệnh
sau:
$ rake install
Nếu bạn gặp một lỗi, hãy thử chạy lệnh này một lần nữa; đôi khi mất kết nối trong quá trình xây dựng. Việc xây dựng ban đầu phải mất một lúc, nhưng sau đó các cập nhật xảy ra nhanh hơn. Sau khi việc cài đặt hoàn thành, hãy tìm kiếm biểu tượng có nhãn Fishmonger trong trình mô phỏng thiết bị của bạn. Khởi chạy nó và chờ đợi. Lúc viết bài này, máy Ruboto phải mất một thời gian để nạp. Cuối cùng, bạn sẽ thấy một màn hình tương tự với hiển thị của Hình 4.
Hình 4. Hoạt động Ruboto theo khuôn mẫu
Tùy chỉnh dự án
Bây giờ, chúng ta hãy thiết lập ứng dụng Fishmonger (Người bán cá). Trước tiên, bạn nên thêm sự hỗ trợ ngôn ngữ riêng. Ruby có một gem tuyệt vời gọi là linguistics (ngôn ngữ học), cung cấp nhiều khả năng về ngôn ngữ - tiếng Anh. Lúc viết bài viết, Ruboto không xử lý cấu trúc thư mục lồng nhau của thư viện ngôn ngữ học, do đó để thay thế, hãy tải về tệp nén ngôn ngữ học của bài viết này và giải nén các nội dung vào thư mục fishmonger\assets\scripts (xem phần Tải về để có một liên kết). Đây là gem ngôn ngữ học có sẵn, được sửa đổi để san bằng cấu trúc thư mục. Trong tương lai, bạn có thể chỉ cần gói gem với kịch bản lệnh ruboto của bạn.
Viết kịch bản lệnh
Bây giờ bạn đã sẵn sàng cho phần chính của dự án. Khung công tác Ruboto xử lý tất cả các mã Java và cơ sở hạ tầng Android, vì vậy toàn bộ công việc của bạn có thể diễn ra trong tệp fishmonger.rb. Xoá bỏ các nội dung mặc định của tệp này. Bạn sẽ bắt đầu bằng cách thêm văn bản có trong Liệt kê 2.
Liệt kê 2. Các phụ thuộc của kịch bản lệnh
require 'ruboto.rb' require 'linguistics' include Linguistics::EN import "android.telephony.SmsManager" ruboto_import_widgets :Button, :EditText, :LinearLayout, \ :RadioGroup, :RadioButton, :TextView
Hai dòng đầu tiên nạp các thư viện ruboto và ngôn ngữ học. Lệnh include (bao gồm) sẽ làm cho ngữ pháp tiếng tiếng Anh có sẵn trong mô đun của bạn.
Câu lệnh nhập khẩu đầu tiên trông quen thuộc với những người dùng JRuby: bạn đang bổ sung thêm sự hỗ trợ cho lớp khác. Lưu ý rằng trong trường hợp này, bạn thực sự đang sử dụng lớp Dalvik của Android, không phải là một phần của thư viện Java chuẩn. Ruboto sẽ sử dụng phản chiếu trong thời gian chạy để nạp lớp này và tạo nó có sẵn cho bạn.
Phương thức
ruboto_import_widgets hoạt động
tương tự. Tại đây, bạn đang bổ sung thêm một số widget (tiện ích) giao
diện người dùng riêng của Android. Các widget này thường được sử dụng
trong các hoạt động Android và Ruboto bổ sung thêm một số phương thức
thuận tiện cho phép bạn cấu hình dễ dàng giao diện người dùng.
Tiếp theo, xác định phương thức
handle_create
của kịch bản lệnh, như trong Liệt kê 3.
Liệt kê 3. Cấu hình màn hình
$activity.handle_create do |bundle| setTitle 'Freddy\'s Fresh Fish' setup_content do linear_layout :orientation => LinearLayout::VERTICAL do text_view :text => "What would you like to order?" @group = radio_group do radio_button :text => "Tuna", :id => 0 radio_button :text => "Trout", :id=> 1 radio_button :text => "Salmon", :id => 2 radio_button :text => "Crab", :id => 3 radio_button :text => "Lobster", :id => 4 end @quantity = edit_text :hint => "Quantity" button :text => "Place Order" end end
Phương thức
handle_create được gọi khi người
dùng khởi chạy ứng dụng. Trong Android, đây là nơi bạn xử lý thiết lập cần
thiết. Các ứng dụng Android chuẩn thường sử dụng XML để định nghĩa cách bố
trí, còn trong Ruboto, bạn sẽ tạo kịch bản lệnh cho nó để thay thế.
Một lần nữa, tận dụng lợi thế của các chức năng của Ruboto cung cấp một cầu
nối giữa kịch bản lệnh của bạn và Android. Bất kể nền của bạn là Ruby hay
Android, bạn sẽ có thể xem những gì đang diễn ra trong
setup_content. Bạn đang tạo một cách bố trí
định hướng thẳng đứng, sắp xếp một số các widget chồng lên nhau. Cách bố
trí này bao gồm văn bản, các nút tròn để chọn loại cá đặt mua, một trường
văn bản có thể chỉnh sửa dùng để nhập số lượng và một nút để đặt hàng. Bạn
có thể sử dụng cú pháp Ruby để cấu hình các widget của bạn, thay vì cú
pháp Java dài dòng hơn thường được sử dụng trong Android
Việc thiết lập thuộc tính
id cho mỗi
radio_button cần phải nỗ lực hơn; nó cung cấp
cho bạn một cách dễ dàng để tìm kiếm nút nào được chọn sau này.
Android sẽ tự động xử lý tất cả tương tác người dùng với các nút tròn và trường văn bản có thể chỉnh sửa. Phần duy nhất còn lại phải xác định là xử lý nút Place Order (Đặt hàng), như trong Liệt kê 4.
Liệt kê 4. Đặt hàng
handle_click do |view| if view.text == "Place Order" count = @quantity.text food = @group.child_at(@group.checked_radio_button_id).\ text.downcase order = Linguistics::EN::plural(food,count) SmsManager.default.send_text_message("4155551234", \ nil, "Please send #{count} #{order}", nil, nil) finish end end end
Nếu bạn đã từng viết các ứng dụng Android, bạn sẽ nhận thấy rằng bạn đang
sử dụng một mô hình khác để xử lý sự lựa chọn. Các nhà phát triển Android
có xu hướng viết các trình xử lý nhấn nút duy nhất cho mỗi mục lựa chọn.
Tuy nhiên, trong Ruboto, sẽ dễ dàng hơn nếu tạo ra một trình xử lý nhấn
nút trên toàn cục cho
Activity của bạn và kiểm
tra xem mục nào được người dùng nhấn vào trong Hoạt động đó.
Bạn trích ra số lượng và loại cá mà người dùng chọn. Nếu họ chưa nhấn vào
một nút tròn, thì Ruboto sẽ xử lý nội bộ các lỗi thời gian chạy một cách
trang nhã. Trái lại, bạn sẽ chuyển văn bản cho thư viện ngôn ngữ học và
yêu cầu nó tạo hình thái danh từ thích hợp cho bạn. Thư viện này có thể xử
lý các quy tắc khác nhau của danh từ số nhiều, do đó nó sẽ tạo ra các giá
trị ví dụ như
1 salmon,
2 salmon,
1 crab,
2 crabs, và v.v. Nó thậm chí còn nhận ra các số
được viết ra, do đó nó cũng sẽ tạo ra những cụm từ như
one lobster,
three lobsters, và v.v. Đây là hành vi rất ấn
tượng cho một dòng mã và cho thấy sức mạnh của việc sử dụng các kịch bản
lệnh hiện có để dễ dàng bổ sung thêm các khả năng cho ứng dụng của
bạn.
Tương tự như vậy, việc gửi tin nhắn SMS chỉ đòi hỏi một dòng lệnh gọi một
phương thức tiện lợi của Android. Ruboto cho phép bạn sử dụng cú pháp
kiểu-Ruby để gọi phương thức này; mã Java tương đương sẽ là
SmsManager.getDefault().sendTextMessage(). Bạn
cung cấp số điện thoại của người nhận và văn bản để gửi đi và chuyển
nil (không) cho các tham số tùy chọn. Nếu bạn
đang chạy trên thiết bị và muốn thực sự gửi một tin nhắn SMS, hãy thay thế
một số điện thoại hợp lệ. Nếu bạn muốn kiểm thử trong trình phỏng theo
thiết bị, bạn có thể thay thế bằng số cổng của trình mô phỏng thiết bị, ví
dụ, dãy số "5554."
Chạy kịch bản lệnh
Một trong những khía cạnh mạnh mẽ nhất của Ruboto là bạn có thể thay đổi chức năng bằng cách chỉ cần nạp một kịch bản lệnh đã cập nhật. Mặc dù bạn đã hoàn toàn thay đổi những gì ứng dụng này làm, bạn không cần phải xây dựng lại ứng dụng hoặc nạp lại APK. Thay vào đó, chỉ cần gõ vào dòng lệnh như sau:
$ rake update_scripts
Lệnh này sẽ sao chép các kịch bản lệnh ngôn ngữ học và kịch bản lệnh fishmonger mới của bạn vào một trình phỏng theo thiết bị hay một thiết bị đính kèm. Khi bạn khởi chạy lại ứng dụng đó, bạn sẽ thấy màn hình mới của bạn, như trong Hình 5.
Hình 5. Trang đặt hàng Android
Nếu bạn đang chạy một thiết bị không phải gốc hoặc thực hiện bất kỳ các
thay đổi nào cho các tệp Java hoặc bản kê Android, bạn có thể nạp bản cập
nhật bằng cách gõ lệnh cài đặt
rake một lần
nữa. Lưu ý rằng ngay cả các thiết bị không phải gốc cũng có thể cập nhật
các kịch bản lệnh của chúng trong lúc đang hoạt động; ví dụ, bạn có thể
tải về các kịch bản lệnh mới từ Internet hoặc tạo chúng trong thời gian
chạy. Sự hạn chế của phần mềm cơ sở chỉ áp dụng cho việc đẩy các tệp qua
kết nối USB của bạn.
Hãy tiếp tục và chạy thử ứng dụng này. Sau khi bạn thực hiện một sự lựa chọn hợp lệ và nhấn nút đặt hàng, màn hình sẽ tự động đóng lại. Nếu bạn sử dụng một địa chỉ người nhận hợp lệ, họ sẽ thấy ngay thông điệp của bạn đến. Hình 6 cho thấy danh sách các đơn hàng mới nhất của người bán cá rất bận rộn.
Hình 6. Các đơn đặt hàng được tiêu chuẩn hóa từ kịch bản lệnh Ruboto
Kết luận
Ruboto vẫn đang còn là những nỗ lực bước đầu, nhưng ngay cả trong trạng thái hiện tại của mình nó vẫn cung cấp một cách rất linh hoạt và hữu ích để viết và phân phối phần mềm Android. Thành công của Ruboto là kết quả từ những thế mạnh của JRuby và Android: JRuby đã thực hiện công việc khó khăn là viết một trình thông dịch Ruby đầy đủ bằng ngôn ngữ Java và bộ các công cụ lập trình Dalvik của Android cung cấp một cách chuyển đổi ấn tượng từ mã byte Java chuẩn sang mã byte Dalvik tùy chỉnh của nó.
Như bạn đã thấy, các kịch bản lệnh Ruboto có thể rất ngắn, trong khi cung cấp nhiều khả năng mạnh mẽ từ cả Ruby lẫn Android. Khả năng để trộn lẫn và làm khớp các kịch bản lệnh của Ruby, cú pháp Ruby và Java và các API Android cung cấp cho bạn nhiều tùy chọn để tăng năng suất.
Ruboto là một cầu nối hấp dẫn cho các nhà phát triển trên cả hai phía của đường phân chia khách/chủ. Các nhà phát triển Android sẽ đánh giá các sức mạnh phản chiếu của nó, cung cấp cho họ năng lực để cập nhật đáng kể các khả năng của ứng dụng trong lúc đang hoạt động. Các nhà phát triển Ruby đã có được một cách hầu như không có khó khăn gì để mang các tri thức chuyên môn kịch bản lệnh của họ vào nền tảng di động và có thể sử dụng mã Ruby hiện có để tạo các ứng dụng mới. Cả hai phe vẫn đang theo dõi với mối quan tâm sâu sắc khi dự án này hoàn thiện hơn.
Các tải về
Tài nguyên
Học tập
- Tìm hiểu thêm về JRuby.
- Xem video vào/ra (I/O) xuất sắc của Google trên Máy ảo Dalvik và mã byte Dalvik.
- Truy cập vào thông tin dự án ruboto-core.
- Tìm hiểu về ruboto-irb, dự án cùng loại cung cấp một trình thông dịch ruby tương tác.
- Để biết một cách tiếp cận thay thế cho Ruby trên Android, hãy tìm hiểu Mirah và Garrett. Chúng biên dịch các kịch bản lệnh Ruby theo ngôn ngữ Java (và từ đó đến Dalvik), chứ không phải thông dịch các kịch bản lệnh Ruby trong thời gian chạy. Cách tiếp cận này dẫn đến việc thực hiện nhanh hơn nhưng phải trả giá bằng tính linh hoạt của siêu lập trình (metaprogramming) trong thời gian chạy.
- "Giới thiệu về phát triển Android" (developerWorks, 05.2009) cung cấp cho bạn một bài mở đầu về nền tảng Android và giải thích cách mã hóa một ứng dụng Android cơ bản.
- "Nối mạng với Android" (developerWorks, 06.2009) khám phá những khả năng nối mạng của Android.
- "Làm việc với XML trên Android" (developerWorks, 06.2009) giải thích các tùy chọn khác nhau để làm việc với XML trên Android và cách sử dụng chúng để xây dựng các ứng dụng Android riêng của bạn.
- Dưới Mái che của các ứng dụng Web được thiết kế riêng cho Android: Tìm hiểu về các ứng dụng lai trong Android.
- Thiết kế và phát triển di động của Brian Fling từ O'Reilly Media thảo luận về các hướng dẫn thực hành, các tiêu chuẩn, các kỹ thuật và các cách làm thực tế tốt nhất để xây dựng các sản phẩm di động.
- Nhận tài liệu Android SDK.
- Open Handset Alliance là nhà tài trợ của Android.
- Vùng phát triển phát triển Webcủa developerWorks chuyên về các bài viết trình bày các giải pháp dựa trên Web khác nhau.
Lấy sản phẩm và công nghệ
- Tải về Android SDK, truy cập tài liệu tham khảo API và nhận được những tin tức mới nhất về Android từ trang Web chính thức của các nhà phát triển Android. Phiên bản 1.5 và mới hơn sẽ hoạt động.
- Android là nguồn mở, có nghĩa là bạn có thể nhận được mã nguồn của nó từ Dự án nguồn mở Android.
- Nhận bản cập nhật 21 của JDK 6.
- Tải về Ant.
- Đổi mới dự án phát triển tiếp theo của bạn bằng phần mềm dùng thử của IBM, có sẵn để tải xuống hoặc trên đĩa DVD.
Thảo luận
- Thảo luận Ruboto với nhóm phát triển và những người chấp nhận ngay từ buổi đầu khác.
- Tạo hồ sơ developerWorks của bạn hôm nay và thiết lập một danh sách theo dõi về phát triển ứng dụng Web di động. Hãy kết nối và duy trì kết nối với cộng đồng developerWorks.
- Tìm các thành viên khác của developerWorks quan tâm đến phát triển Web.
- Chia sẻ những gì bạn biết: Tham gia một trong những nhóm developerWorks tập trung vào các chủ đề Web của chúng tôi.
- Roland Barcia bàn về Web 2.0 và phần mềm trung gian trong blog của mình.
- Theo các danh sách liên kết về các chủ đề được chia sẻ của các thành viên WebdeveloperWorks.
- Để nhận được câu trả lời nhanh chóng: Hãy truy cập vào diễn đàn các ứng dụng Web 2.0.
- Để nhận được câu trả lời nhanh chóng: Hãy truy cập vào diễn đàn Ajax.
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:
## Mở đầu
Hầu hết công việc đáng chú ý về phát triển phần mềm hiện nay xảy ra ở một trong hai thái cực: các máy chủ điện toán đám mây khổng lồ và các thiết bị di động nhỏ bé. Các lĩnh vực này giải quyết các vấn đề khác nhau đáng kể và do đó hỗ trợ các công cụ khác nhau, một cách tương ứng. Việc phát triển cho máy chủ thường sử dụng các ngôn ngữ kịch bản lệnh để kết hợp chặt chẽ các thành phần khác nhau với nhau và hoàn thành các nhiệm vụ tự động hóa tinh vi, trong khi việc phát triển cho di động lại tập trung vào các khả năng và các nhu cầu cụ thể của một thiết bị và người dùng cụ thể.
Tuy nhiên, hai thái cực này lại dùng chung một ngôn ngữ phổ biến là: Java™. Dù là Android hay khung công tác Spring, nhiều trong số các công nghệ phổ biến nhất hiện nay đã chấp nhận một ngôn ngữ được cả thế giới biết đến và hỗ trợ. Ngôn ngữ phổ biến này có thể dẫn đến một số tác động lẫn nhau đáng ngạc nhiên giữa các lĩnh vực mà bạn có xu hướng nghĩ là khác biệt. Lập trình Java mở cửa cho nhiều tùy chọn xuyên qua nhiều nền tảng, như dễ dàng gửi lên mã máy chủ cho một thiết bị Android hay liên kết các thành phần hiện có vào trong các khả năng của nền tảng được thiết kế riêng.
Bài viết này tìm hiểu Ruboto, một dự án bắc cầu qua khe hở giữa các ngôn ngữ tạo kịch bản lệnh và Android. Bạn sẽ tìm hiểu về Ruby và Android, cách chúng có thể liên kết với nhau trong máy ảo Dalvik, cách xây dựng và triển khai các kịch bản lệnh riêng của bạn và làm thế nào mà công nghệ này có tiềm năng tăng năng suất cho lập trình viên và tính linh hoạt của ứng dụng .
## Kiến thức nền tảng Ruby
Nhiều ngôn ngữ tạo kịch bản lệnh cạnh tranh nhau giành cảm tình của của các lập trình viên, nhưng Ruby hiện đang giữ một vị trí mạnh mẽ. Nổi tiếng nhất là nó hỗ trợ khung công tác Web Rails, nhưng nhiều nhà phát triển cũng ngưỡng mộ Ruby về sự kết hợp của sự ngắn gọn và trang nhã. Một ngôn ngữ tạo kịch bản lệnh hướng đối tượng có nhiều tính năng hiện đại như định kiểu "vịt" (duck typing-định kiểu vịt nghĩa là một đối tượng được xác định bởi nó có thể làm gì chứ không phải bởi nó là gì) và siêu lập trình (metaprogramming), Ruby đủ mạnh để hỗ trợ các kiến trúc phức tạp và cũng đủ đơn giản để thực hiện nhiệm vụ đặc biệt.
Ruby có một số hương vị, bao gồm cả JRuby phổ biến. JRuby là một trình thông dịch Ruby đầy đủ được viết bằng ngôn ngữ Java và có thể chạy trong một máy ảo Java (JVM). Không giống như Ruby chính thức, JRuby cho phép bạn gọi các kịch bản lệnh Ruby từ bên trong mã Java, cũng như gọi các API Java từ bên trong các kịch bản lệnh Ruby của bạn.
## Kiến thức nền tảng về Android
Android đã được Open Handset Alliance phát triển, nhưng nó thường được coi là một dự án Google. Hiện nay, Android được trang bị cho khoảng một phần tư trong số tất cả các điện thoại thông minh mới và thị phần của nó vẫn tiếp tục tăng.
Ở bên trong, Android chạy trên một nhân Linux sửa đổi. Hầu hết các ứng dụng
chạy trong máy ảo Dalvik (VM), một máy ảo tùy chỉnh mà Google đã thiết kế
từ nền tảng trở lên để có hiệu năng tối ưu trên các thiết bị di động. Bạn
có thể tìm hiểu thêm về Dalvik trong phần
[Tài
nguyên](#resources).
Một điểm mà nhiều nhà phát triển Android mới không nhận thấy là mã nguồn Java do họ viết ra không chạy như mã byte Java. Thay vào đó, bộ công cụ Android chuyển đổi mã byte Java thành mã byte Dalvik. Những tệp được chuyển đổi này, có phần mở rộng .dex, được đóng gói trong ứng dụng mà bạn triển khai lên thiết bị. Vào lúc thiết bị chạy chương trình của bạn, không có mã byte nào của Java còn lại.
## Android + Ruby = Ruboto
Charles Nutter, một thành viên của nhóm JRuby, đã hiểu rằng: vì chuỗi công cụ (toolchain) Android chuyển đổi mã Java đã biên dịch thành các tệp Dalvik và vì JRuby đã có một trình thông dịch Ruby bằng mã byte Java đã biên dịch, nên ông sẽ có thể chạy Ruby trên Android. Trong một thời gian ngắn đáng kinh ngạc, ông đã thực hiện nhiệm vụ này và Ruboto được sinh ra. Nhờ những nỗ lực của một số nhà phát triển khác, Ruboto đã trở thành một dự án năng động đang phát triển ngày càng hấp dẫn với các nhà phát triển Android cũng như Ruby.
Hiện nay, Ruboto có hai hương vị: ruboto-irb và ruboto-core. ruboto-irb là một trình vỏ (shell) Ruby tương tác chạy trên Android. Dự án này cho phép bạn chạy kịch bản lệnh Ruby tùy ý, các kịch bản lệnh này cũng có thể truy cập các API Android. Công cụ này có thể rất có ích cho các nhà phát triển, những người muốn chạy kiểm thử hoặc thực hiện các nhiệm vụ trên thiết bị của họ, nhưng có lẽ không thích hợp để viết các ứng dụng mà bạn sẽ phân phối sau này.
Ngược lại, ruboto-core cung cấp một khung công tác cho phép bạn tạo các dự án Ruboto riêng của bạn. Khi sử dụng ruboto-core, bạn có thể bổ sung thêm sự hỗ trợ kịch bản lệnh mạnh mẽ và linh hoạt cho dự án của bạn, trong khi vẫn duy trì quyền truy cập vào các API Android. Hình 1 cho thấy quá trình xây dựng bởi ruboto-core: các tệp nguồn Java được tạo tự động và các kịch bản lệnh Ruby được viết-tùy chỉnh được đóng gói lại với nhau thành một APK Android sẽ chạy trên thiết bị.
##### Hình 1. Xây dựng một ứng dụng Ruboto
![ Biểu đồ tiến trình cho thấy dòng chảy từ các tệp Java Ruboto Java đến APK.](fig01.gif)
Phần còn lại của bài viết này tập trung vào việc tạo một dự án dựa trên
Ruboto tùy chỉnh. Ruboto vẫn còn là phần mềm sơ khởi; lúc viết bài này, số
phiên bản của nó là 0.0.2. Nó tiếp tục phát triển nhanh chóng và có thể
hoạt động hơi khác đi một chút lúc bạn đọc bài viết này. Nếu bạn gặp vấn
đề trong khi đang chạy bất kỳ lệnh nào dưới đây, hãy xem phần
[Tài nguyên](#resources) để có được các thông tin cập nhật
nhất về Ruboto và Android.
## Tạo kịch bản lệnh SMS
Kết hợp Ruby và Android với nhau cho phép bạn tạo các kịch bản lệnh đơn giản có thể truy cập các chức năng mạnh mẽ của Android. Bạn sẽ viết một kịch bản lệnh Ruboto cho phép những người dùng đặt hàng hải sản từ một dịch vụ giao hàng. Ứng dụng đơn giản này tận dụng những thế mạnh của mỗi nền tảng. Về phía Android, bạn sẽ có một cách đơn giản để tạo một tin nhắn SMS có chứa đơn hàng của bạn; ứng dụng này đặt các đơn hàng thậm chí không cần một máy chủ. Về phía Ruby, bạn sẽ sử dụng lại một thư viện xử lý ngôn ngữ hiện có, để tiêu chuẩn hóa các đơn hàng của bạn thành một định dạng dễ đọc.
## Bắt đầu
Để xây dựng và triển khai các kịch bản lệnh Ruby trên Android cần có một số thành phần. Bạn có thể đã có một số trong các thành phần này được cài đặt; nếu đã có rồi, thì bạn có thể sử dụng những công cụ hiện có đó.
Vì cả Android lẫn Ruby là đa nền tảng, nên bạn có thể chạy Ruboto trên Linux®, Mac OS X, hay Windows®. Bạn sẽ sử dụng dòng lệnh trong suốt bài viết này.
Nếu bạn sử dụng
cygwin cho Windows, bạn có thể
gặp phải các vấn đề trong khi chạy các lệnh JRuby nào đó. Để cho an toàn,
hãy gắn với shell CMD Windows tiêu chuẩn nếu bạn đang chạy Windows.
### Java
Bạn sẽ cần một JDK (Java Development Kit – Bộ dụng cụ phát triển Java) đang hoạt động trên hộp phát triển của bạn. Để kiểm tra xem một bộ dụng cụ phát triển Java đã được cài đặt chưa, hãy nhập lệnh sau đây:
$ javac -version
Lệnh này sẽ tìm thấy một phiên bản của JDK, nếu bạn đã thiết lập. Nếu
không, hãy cài đặt phiên bản mới nhất của JDK theo liên kết trong phần
[Tài nguyên](#resources). Sau khi cài đặt, hãy thêm thư mục
bin của JDK vào PATH (đường dẫn) của bạn và lặp lại lệnh ở trên.
### Ant
Android đi kèm với phiên bản Ant riêng của nó, nhưng Ruboto cũng sẽ cần
truy cập Ant từ kịch bản lệnh riêng của mình. Nếu bạn chưa cài đặt một
phiên bản độc lập của Ant, hãy tải nó về từ liên kết trong phần
[Tài nguyên](#resources) và giải nén vào thư mục bất kỳ. Một
lần nữa, hãy thêm thư mục bin của nó vào PATH của bạn. Hãy chắc chắn rằng
bạn có thể chạy lệnh Ant.
## Android
Chuyển đến trang Web của nhà phát triển Android và cài đặt Android SDK cho
hệ điều hành của bạn (xem
[Tài nguyên](#resources)). Sau khi đã
cài đặt Android SDK, hãy chạy lệnh
android nằm
trong thư mục tools (các công cụ) của Android. Lệnh này khởi chạy trình
quản lý này SDK, như trong Hình 2. Bạn sẽ muốn cài đặt các gói sau, được
liệt kê trong các gói có sẵn (Available).
- SDK cho nền tảng Android 2.2, API 8.
- Các công cụ SDK của Android, bản sửa đổi 8.
- Các công cụ-nền tảng SDK Android, bản sửa đổi 1.
##### Hình 2. SDK Android và trình quản lý AVD
![ Cửa sổ cho thấy một danh sách các gói có sẵn.](fig02.jpg)
Tạo một ảnh Android để phát triển bằng cách mở phần các thiết bị ảo của SDK Android và trình quản lý AVD. Nhìn vào Hình 3, hãy tạo một thiết bị ảo có tên Froyo nhằm đến Android 2.2 - API mức 8. Bạn có thể tạo một Thẻ nhớ SD ảo nếu bạn muốn.
##### Hình 3. Tạo một trình mô phỏng thiết bị
![ Cửa sổ với các trường tên: froyo, đích: Android 2.2 - mức 8 API 8, thẻ SD 1024, lớp phủ: mặc định, phần cứng.](fig03.jpg)
Các ứng dụng ruboto sẽ chạy trên thiết bị của bạn, nhưng việc phát triển sẽ dễ dàng hơn nhiều nếu bạn có quyền viết vào các thư mục tùy ý, trong đó yêu cầu hoặc sử dụng trình phỏng theo thiết bị hoặc thiết bị gốc. Phần còn lại của bài viết này tập trung vào sử dụng trình phỏng theo thiết bị. Sau khi bạn kết thúc dự án này, nó sẽ chạy tốt như nhau trên một thiết bị Android đang chạy phiên bản phần mềm 2.2 hoặc mới hơn.
Bổ sung thêm các thư mục các công cụ-nền tảng (platform-tools) và các công cụ (tools) của Android vào đường dẫn PATH của bạn. Bây giờ bạn có thể chạy các lệnh trong Liệt kê 1 từ dấu nhắc của bạn.
##### Liệt kê 1. Chạy các lệnh từ dấu nhắc của bạn
$ aapt version $ adb --version
### JRuby
JRuby cung cấp một bản cài đặt dễ dàng đến không ngờ. Chỉ cần tới http://jruby.org/getting-started và làm theo các hướng dẫn. Nếu cần thiết, hãy thêm thư mục bin của JRuby vào đường dẫn (PATH) của bạn. Hãy kiểm tra xem việc cài đặt đã thành công chưa bằng cách gõ lệnh sau:
$ jruby -v
Vì Ruboto được lưu trữ trên một máy chủ bảo mật, nên bạn sẽ cần phải cài đặt gem JRuby-openssl (gem là chương trình dùng để quản lý các thư viện cho Ruby) để tải nó. Bạn có thể thực hiện việc này bằng lệnh sau:
$ gem install jruby-openssl
Bạn cũng sẽ muốn cài đặt rake (Ruby make), là tương đương của make hay ant dành cho Ruby. Hãy gõ lệnh sau đây:
$ gem install rake
Cuối cùng, đến lúc để cài đặt chính Ruboto. Ruboto được đóng gói như một gem, vì vậy việc cài đặt rất dễ dàng. Hãy nhập lệnh sau đây:
$ gem install ruboto-core
## Tạo dự án Ruboto
Ruboto sẽ tạo ra một dự án Android từ đầu cho bạn, nó đảm bảo rằng bản kê của bạn được thiết lập đúng, các kịch bản lệnh được đặt đúng chỗ trong bộ sưu tập đúng và bạn có quyền truy cập vào các thư viện cần thiết. Bạn nên dùng cách tiếp cận này hơn là cố gắng tự tạo nó cho mình hoặc sửa đổi một dự án Android hiện tại.
Để tạo dự án, hãy dịch chuyển tới một thư mục dự án, sau đó gõ như sau:
$ ruboto gen app --package us.cirion.ruboto.demo --path fishmonger
--name Fishmonger --target android-8 --activity Fishmonger
Lệnh này làm những việc sau:
gen appra lệnh cho Ruboto tạo một dự án Android mới từ đầu.
--packagecung cấp tên gói Android duy nhất.
--pathra lệnh cho Ruboto lưu trữ dự án đó ở đâu; đây phải là một tên thư mục mới.
--namexác định tên ứng dụng mà người dùng nhìn thấy; tên này không cần phải là duy nhất.
--targetxác định phiên bản Android nào để biên dịch lại dự án. Lúc viết bài này, bạn phải sử dụng
android-8. Một đối số tùy chọn là
--min_sdk, khai báo rằng ứng dụng của bạn có thể chạy trên các phiên bản Android trước đó; tạm thời bây giờ hãy bỏ qua điều này.
--activitylà một đối số tùy chọn để ra lệnh cho Ruboto tạo ra một hoạt động Android mới và khởi tạo nó.
Bạn có thể tìm hiểu các nội dung của thư mục fishmonger (người bán cá).
Ruboto đã tự động tạo ra tất cả các tệp Android cần thiết để xây dựng và
chạy một Hoạt động cơ bản. Vì ứng dụng sẽ gửi các tin nhắn SMS, nên bạn
cần phải thực hiện một sự thay đổi trong tệp AndroidManifest.xml. Chèn thẻ
sau như là phần tử con đầu tiên của phần tử
<manifest> trong tệp đó:
<uses-permission android:name="android.permission.SEND_SMS" />
Nếu bạn bỏ qua sự quyền hạn này, bạn sẽ vẫn còn có thể xây dựng và nạp kịch bản lệnh của bạn, nhưng bạn sẽ nhận được một lỗi thời gian chạy khi ứng dụng của bạn cố gắng gửi đi một tin nhắn SMS.
## Chạy dự án mặc định
Đặc biệt, Ruboto tạo ra một Activity (hoạt động) và một kịch bản lệnh sẽ cài đặt và chạy trên thiết bị hoặc trình mô phỏng thiết bị. Nếu trình mô phỏng thiết bị của bạn vẫn còn chưa chạy, bạn có thể khởi chạy nó bằng các lệnh sau đây:
$ emulator -avd Froyo
Chờ cho trình mô phỏng thiết bị kết thúc khởi động và đi tới màn hình chủ.
Để đảm bảo tất cả các tệp Ruboto được xây dựng và triển khai đúng cách,
cd vào thư mục fishmonger và chạy các lệnh
sau:
$ rake install
Nếu bạn gặp một lỗi, hãy thử chạy lệnh này một lần nữa; đôi khi mất kết nối trong quá trình xây dựng. Việc xây dựng ban đầu phải mất một lúc, nhưng sau đó các cập nhật xảy ra nhanh hơn. Sau khi việc cài đặt hoàn thành, hãy tìm kiếm biểu tượng có nhãn Fishmonger trong trình mô phỏng thiết bị của bạn. Khởi chạy nó và chờ đợi. Lúc viết bài này, máy Ruboto phải mất một thời gian để nạp. Cuối cùng, bạn sẽ thấy một màn hình tương tự với hiển thị của Hình 4.
##### Hình 4. Hoạt động Ruboto theo khuôn mẫu
![ Trình mô phỏng thiết bị với một cửa sổ ở bên trái và một bàn phím và các nút điều khiển ở bên phải.](fig04.jpg)
## Tùy chỉnh dự án
Bây giờ, chúng ta hãy thiết lập ứng dụng Fishmonger (Người bán cá). Trước
tiên, bạn nên thêm sự hỗ trợ ngôn ngữ riêng. Ruby có một gem tuyệt vời gọi
là linguistics (ngôn ngữ học), cung cấp nhiều khả năng về ngôn ngữ - tiếng
Anh. Lúc viết bài viết, Ruboto không xử lý cấu trúc thư mục lồng nhau của
thư viện ngôn ngữ học, do đó để thay thế, hãy tải về tệp nén ngôn ngữ học
của bài viết này và giải nén các nội dung vào thư mục
fishmonger\assets\scripts (xem phần
[Tải về](#download) để có
một liên kết). Đây là gem ngôn ngữ học có sẵn, được sửa đổi để san bằng
cấu trúc thư mục. Trong tương lai, bạn có thể chỉ cần gói gem với kịch bản
lệnh ruboto của bạn.
### Viết kịch bản lệnh
Bây giờ bạn đã sẵn sàng cho phần chính của dự án. Khung công tác Ruboto xử lý tất cả các mã Java và cơ sở hạ tầng Android, vì vậy toàn bộ công việc của bạn có thể diễn ra trong tệp fishmonger.rb. Xoá bỏ các nội dung mặc định của tệp này. Bạn sẽ bắt đầu bằng cách thêm văn bản có trong Liệt kê 2.
##### Liệt kê 2. Các phụ thuộc của kịch bản lệnh
require 'ruboto.rb' require 'linguistics' include Linguistics::EN import "android.telephony.SmsManager" ruboto_import_widgets :Button, :EditText, :LinearLayout, \ :RadioGroup, :RadioButton, :TextView
Hai dòng đầu tiên nạp các thư viện ruboto và ngôn ngữ học. Lệnh include (bao gồm) sẽ làm cho ngữ pháp tiếng tiếng Anh có sẵn trong mô đun của bạn.
Câu lệnh nhập khẩu đầu tiên trông quen thuộc với những người dùng JRuby: bạn đang bổ sung thêm sự hỗ trợ cho lớp khác. Lưu ý rằng trong trường hợp này, bạn thực sự đang sử dụng lớp Dalvik của Android, không phải là một phần của thư viện Java chuẩn. Ruboto sẽ sử dụng phản chiếu trong thời gian chạy để nạp lớp này và tạo nó có sẵn cho bạn.
Phương thức
ruboto_import_widgets hoạt động
tương tự. Tại đây, bạn đang bổ sung thêm một số widget (tiện ích) giao
diện người dùng riêng của Android. Các widget này thường được sử dụng
trong các hoạt động Android và Ruboto bổ sung thêm một số phương thức
thuận tiện cho phép bạn cấu hình dễ dàng giao diện người dùng.
Tiếp theo, xác định phương thức
handle_create
của kịch bản lệnh, như trong Liệt kê 3.
##### Liệt kê 3. Cấu hình màn hình
$activity.handle_create do |bundle| setTitle 'Freddy\'s Fresh Fish' setup_content do linear_layout :orientation => LinearLayout::VERTICAL do text_view :text => "What would you like to order?" @group = radio_group do radio_button :text => "Tuna", :id => 0 radio_button :text => "Trout", :id=> 1 radio_button :text => "Salmon", :id => 2 radio_button :text => "Crab", :id => 3 radio_button :text => "Lobster", :id => 4 end @quantity = edit_text :hint => "Quantity" button :text => "Place Order" end end
Phương thức
handle_create được gọi khi người
dùng khởi chạy ứng dụng. Trong Android, đây là nơi bạn xử lý thiết lập cần
thiết. Các ứng dụng Android chuẩn thường sử dụng XML để định nghĩa cách bố
trí, còn trong Ruboto, bạn sẽ tạo kịch bản lệnh cho nó để thay thế.
Một lần nữa, tận dụng lợi thế của các chức năng của Ruboto cung cấp một cầu
nối giữa kịch bản lệnh của bạn và Android. Bất kể nền của bạn là Ruby hay
Android, bạn sẽ có thể xem những gì đang diễn ra trong
setup_content. Bạn đang tạo một cách bố trí
định hướng thẳng đứng, sắp xếp một số các widget chồng lên nhau. Cách bố
trí này bao gồm văn bản, các nút tròn để chọn loại cá đặt mua, một trường
văn bản có thể chỉnh sửa dùng để nhập số lượng và một nút để đặt hàng. Bạn
có thể sử dụng cú pháp Ruby để cấu hình các widget của bạn, thay vì cú
pháp Java dài dòng hơn thường được sử dụng trong Android
Việc thiết lập thuộc tính
id cho mỗi
radio_button cần phải nỗ lực hơn; nó cung cấp
cho bạn một cách dễ dàng để tìm kiếm nút nào được chọn sau này.
Android sẽ tự động xử lý tất cả tương tác người dùng với các nút tròn và
trường văn bản có thể chỉnh sửa. Phần duy nhất còn lại phải xác định là xử
lý nút
**Place Order** (Đặt hàng), như trong Liệt kê 4.
##### Liệt kê 4. Đặt hàng
handle_click do |view| if view.text == "Place Order" count = @quantity.text food = @group.child_at(@group.checked_radio_button_id).\ text.downcase order = Linguistics::EN::plural(food,count) SmsManager.default.send_text_message("4155551234", \ nil, "Please send #{count} #{order}", nil, nil) finish end end end
Nếu bạn đã từng viết các ứng dụng Android, bạn sẽ nhận thấy rằng bạn đang
sử dụng một mô hình khác để xử lý sự lựa chọn. Các nhà phát triển Android
có xu hướng viết các trình xử lý nhấn nút duy nhất cho mỗi mục lựa chọn.
Tuy nhiên, trong Ruboto, sẽ dễ dàng hơn nếu tạo ra một trình xử lý nhấn
nút trên toàn cục cho
Activity của bạn và kiểm
tra xem mục nào được người dùng nhấn vào trong Hoạt động đó.
Bạn trích ra số lượng và loại cá mà người dùng chọn. Nếu họ chưa nhấn vào
một nút tròn, thì Ruboto sẽ xử lý nội bộ các lỗi thời gian chạy một cách
trang nhã. Trái lại, bạn sẽ chuyển văn bản cho thư viện ngôn ngữ học và
yêu cầu nó tạo hình thái danh từ thích hợp cho bạn. Thư viện này có thể xử
lý các quy tắc khác nhau của danh từ số nhiều, do đó nó sẽ tạo ra các giá
trị ví dụ như
1 salmon,
2 salmon,
1 crab,
2 crabs, và v.v. Nó thậm chí còn nhận ra các số
được viết ra, do đó nó cũng sẽ tạo ra những cụm từ như
one lobster,
three lobsters, và v.v. Đây là hành vi rất ấn
tượng cho một dòng mã và cho thấy sức mạnh của việc sử dụng các kịch bản
lệnh hiện có để dễ dàng bổ sung thêm các khả năng cho ứng dụng của
bạn.
Tương tự như vậy, việc gửi tin nhắn SMS chỉ đòi hỏi một dòng lệnh gọi một
phương thức tiện lợi của Android. Ruboto cho phép bạn sử dụng cú pháp
kiểu-Ruby để gọi phương thức này; mã Java tương đương sẽ là
SmsManager.getDefault().sendTextMessage(). Bạn
cung cấp số điện thoại của người nhận và văn bản để gửi đi và chuyển
nil (không) cho các tham số tùy chọn. Nếu bạn
đang chạy trên thiết bị và muốn thực sự gửi một tin nhắn SMS, hãy thay thế
một số điện thoại hợp lệ. Nếu bạn muốn kiểm thử trong trình phỏng theo
thiết bị, bạn có thể thay thế bằng số cổng của trình mô phỏng thiết bị, ví
dụ, dãy số "5554."
### Chạy kịch bản lệnh
Một trong những khía cạnh mạnh mẽ nhất của Ruboto là bạn có thể thay đổi chức năng bằng cách chỉ cần nạp một kịch bản lệnh đã cập nhật. Mặc dù bạn đã hoàn toàn thay đổi những gì ứng dụng này làm, bạn không cần phải xây dựng lại ứng dụng hoặc nạp lại APK. Thay vào đó, chỉ cần gõ vào dòng lệnh như sau:
$ rake update_scripts
Lệnh này sẽ sao chép các kịch bản lệnh ngôn ngữ học và kịch bản lệnh fishmonger mới của bạn vào một trình phỏng theo thiết bị hay một thiết bị đính kèm. Khi bạn khởi chạy lại ứng dụng đó, bạn sẽ thấy màn hình mới của bạn, như trong Hình 5.
##### Hình 5. Trang đặt hàng Android
![ Màn hình cho thấy các tùy chọn theo thứ tự cá ngừ, cua, cá hồi, thịt cá hồi và tôm hùm cùng với một nút số lượng và đặt hàng.](fig05.jpg)
Nếu bạn đang chạy một thiết bị không phải gốc hoặc thực hiện bất kỳ các
thay đổi nào cho các tệp Java hoặc bản kê Android, bạn có thể nạp bản cập
nhật bằng cách gõ lệnh cài đặt
rake một lần
nữa. Lưu ý rằng ngay cả các thiết bị không phải gốc cũng có thể cập nhật
các kịch bản lệnh của chúng trong lúc đang hoạt động; ví dụ, bạn có thể
tải về các kịch bản lệnh mới từ Internet hoặc tạo chúng trong thời gian
chạy. Sự hạn chế của phần mềm cơ sở chỉ áp dụng cho việc đẩy các tệp qua
kết nối USB của bạn.
Hãy tiếp tục và chạy thử ứng dụng này. Sau khi bạn thực hiện một sự lựa chọn hợp lệ và nhấn nút đặt hàng, màn hình sẽ tự động đóng lại. Nếu bạn sử dụng một địa chỉ người nhận hợp lệ, họ sẽ thấy ngay thông điệp của bạn đến. Hình 6 cho thấy danh sách các đơn hàng mới nhất của người bán cá rất bận rộn.
##### Hình 6. Các đơn đặt hàng được tiêu chuẩn hóa từ kịch bản lệnh Ruboto
![ Màn hình cho thấy 4 đơn hàng khác nhau.](fig06.jpg)
## Kết luận
Ruboto vẫn đang còn là những nỗ lực bước đầu, nhưng ngay cả trong trạng thái hiện tại của mình nó vẫn cung cấp một cách rất linh hoạt và hữu ích để viết và phân phối phần mềm Android. Thành công của Ruboto là kết quả từ những thế mạnh của JRuby và Android: JRuby đã thực hiện công việc khó khăn là viết một trình thông dịch Ruby đầy đủ bằng ngôn ngữ Java và bộ các công cụ lập trình Dalvik của Android cung cấp một cách chuyển đổi ấn tượng từ mã byte Java chuẩn sang mã byte Dalvik tùy chỉnh của nó.
Như bạn đã thấy, các kịch bản lệnh Ruboto có thể rất ngắn, trong khi cung cấp nhiều khả năng mạnh mẽ từ cả Ruby lẫn Android. Khả năng để trộn lẫn và làm khớp các kịch bản lệnh của Ruby, cú pháp Ruby và Java và các API Android cung cấp cho bạn nhiều tùy chọn để tăng năng suất.
Ruboto là một cầu nối hấp dẫn cho các nhà phát triển trên cả hai phía của đường phân chia khách/chủ. Các nhà phát triển Android sẽ đánh giá các sức mạnh phản chiếu của nó, cung cấp cho họ năng lực để cập nhật đáng kể các khả năng của ứng dụng trong lúc đang hoạt động. Các nhà phát triển Ruby đã có được một cách hầu như không có khó khăn gì để mang các tri thức chuyên môn kịch bản lệnh của họ vào nền tảng di động và có thể sử dụng mã Ruby hiện có để tạo các ứng dụng mới. Cả hai phe vẫn đang theo dõi với mối quan tâm sâu sắc khi dự án này hoàn thiện hơn.
## Các tải về
|Mô tả||Tên||Kích thước|
|Article source code|[linguistics-rb.zip](http://www.ibm.com/developerworks/apps/download/index.jsp?contentid=648313&filename=linguistics-rb.zip&method=http&locale=en_VN)
## Tài nguyên
### Học tập
- Tìm hiểu thêm về
[JRuby](http://jruby.org).
- Xem video vào/ra (I/O) xuất sắc của
Google trên
[Máy ảo Dalvik và mã byte Dalvik](http://sites.google.com/site/io/dalvik-vm-internals).
- Truy cập vào thông tin dự án
[ruboto-core](https://github.com/ruboto/ruboto-core/).
- Tìm hiểu về
[ruboto-irb](https://github.com/ruboto/ruboto-irb/), dự án cùng loại cung cấp một trình thông dịch ruby tương tác.
- Để biết một cách tiếp cận thay thế cho
Ruby trên Android, hãy tìm hiểu
[Mirah](http://www.mirah.org)và [Garrett](https://github.com/technomancy/Garrett). Chúng biên dịch các kịch bản lệnh Ruby theo ngôn ngữ Java (và từ đó đến Dalvik), chứ không phải thông dịch các kịch bản lệnh Ruby trong thời gian chạy. Cách tiếp cận này dẫn đến việc thực hiện nhanh hơn nhưng phải trả giá bằng tính linh hoạt của siêu lập trình (metaprogramming) trong thời gian chạy.
- "
[Giới thiệu về phát triển Android](http://www.ibm.com/developerworks/vn/library/os-android-devel/)" (developerWorks, 05.2009) cung cấp cho bạn một bài mở đầu về nền tảng Android và giải thích cách mã hóa một ứng dụng Android cơ bản.
- "
[Nối mạng với Android](http://www.ibm.com/developerworks/opensource/library/os-android-networking/?S_TACT=105AGY75)" (developerWorks, 06.2009) khám phá những khả năng nối mạng của Android.
- "
[Làm việc với XML trên Android](http://www.ibm.com/developerworks/xml/library/x-android/?S_TACT=105AGY75)" (developerWorks, 06.2009) giải thích các tùy chọn khác nhau để làm việc với XML trên Android và cách sử dụng chúng để xây dựng các ứng dụng Android riêng của bạn. [Dưới Mái che của các ứng dụng Web được thiết kế riêng cho Android](http://www.linux-mag.com/id/7633): Tìm hiểu về các ứng dụng lai trong Android. [của Brian Fling từ O'Reilly Media thảo luận về các hướng dẫn thực hành, các tiêu chuẩn, các kỹ thuật và các cách làm thực tế tốt nhất để xây dựng các sản phẩm di động.](http://oreilly.com/catalog/9780596155445/) *Thiết kế và phát triển di động*
- Nhận
[tài liệu Android SDK](http://developer.android.com/reference/packages.html). [Open Handset Alliance](http://www.openhandsetalliance.com/)là nhà tài trợ của Android. [Vùng phát triển phát triển Web](http://www.ibm.com/developerworks/web/?S_TACT=105AGY75)của developerWorks chuyên về các bài viết trình bày các giải pháp dựa trên Web khác nhau.
### Lấy sản phẩm và công nghệ
[Tải về](http://developer.android.com)Android SDK, truy cập tài liệu tham khảo API và nhận được những tin tức mới nhất về Android từ trang Web chính thức của các nhà phát triển Android. Phiên bản 1.5 và mới hơn sẽ hoạt động.
- Android là nguồn
mở, có nghĩa là bạn có thể nhận được mã nguồn của nó từ
[Dự án nguồn mở Android](http://source.android.com/).
- Nhận
[bản cập nhật 21 của JDK 6](http://www.oracle.com/technetwork/java/javase/downloads/index.html).
- Tải về
[Ant](http://ant.apache.org/bindownload.cgi).
- Đổi mới dự án
phát triển tiếp theo của bạn bằng
[phần mềm dùng thử của IBM](http://www.ibm.com/developerworks/downloads/?S_TACT=105AGY75), có sẵn để tải xuống hoặc trên đĩa DVD.
### Thảo luận
[Thảo luận Ruboto](http://groups.google.com/group/ruboto)với nhóm phát triển và những người chấp nhận ngay từ buổi đầu khác.
- Tạo
[hồ sơ developerWorks](https://www.ibm.com/developerworks/mydeveloperworks/profiles/home.do?lang=en&S_TACT=105AGY75)của bạn hôm nay và [thiết lập một danh sách theo dõi](https://www.ibm.com/developerworks/mydeveloperworks/homepage/help/doc/en/homepage_watchlistuse.html?S_TACT=105AGY75)về phát triển ứng dụng Web di động. Hãy kết nối và duy trì kết nối với [cộng đồng developerWorks](http://www.ibm.com/developerworks/mydeveloperworks/#community?S_TACT=105AGY75).
- Tìm
[các thành viên khác của developerWorks quan tâm đến phát triển Web](https://www.ibm.com/developerworks/mydeveloperworks/profiles/html/keywordSearch.do?keyword=web&lang=en&S_TACT=105AGY75).
- Chia sẻ những gì bạn biết:
[Tham gia một trong những nhóm developerWorks tập trung vào các chủ đề Web của chúng tôi](https://www.ibm.com/developerworks/mydeveloperworks/search/web/search?S_TACT=105AGY75).
- Roland Barcia bàn về
[Web 2.0 và phần mềm trung gian](https://www.ibm.com/developerworks/mydeveloperworks/blogs/barcia/?lang=en&S_TACT=105AGY75)trong blog của mình.
- Theo
[các danh sách liên kết về các chủ đề được chia sẻ](https://www.ibm.com/developerworks/mydeveloperworks/bookmarks/html?ps=50&search=web&searchType=mode&sortOrder=desc&lang=en&S_TACT=105AGY75)của các thành viên WebdeveloperWorks.
- Để nhận được câu trả lời nhanh chóng:
Hãy truy cập vào
[diễn đàn các ứng dụng Web 2.0](http://www.ibm.com/developerworks/forums/forum.jspa?forumID=1182&S_TACT=105AGY75).
- Để nhận được câu trả lời nhanh chóng:
Hãy truy cập vào
[diễn đàn Ajax](http://www.ibm.com/developerworks/forums/forum.jspa?forumID=965&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

Content-Encoding: gzip

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

Content-Language: en-US

Kp-eeAlive: timeout=10, max=15

Vary: Accept-Encoding


text:
NGƯỜI VIỆT 2 - ENGLISH
RAO VẶT
NVEPAGES
NGƯỜI VIỆT TV
NGƯỜI VIỆT CÁC NƠI
NGƯỜI VIỆT ĐÔNG BẮC
NGƯỜI VIỆT MINNESOTA
NGƯỜI VIỆT LAS VEGAS
NGƯỜI VIỆT UTAH
NGƯỜI VIỆT SHOP
TÌM KIẾM BÀI
Tuesday, September 16, 2014
TIN TỨC
Cộng Đồng
Việt Nam
Hoa Kỳ
Thế Giới
GIẢI TRÍ
Ca Nhạc Điện Ảnh
Thể Thao
Du Lịch
VĂN HỌC NGHỆ THUẬT
Quán văn
Thời sự nhân văn
Truyện dài
ĐỜI SỐNG
Phụ nữ
Học đường
Nhà đất
Sức khỏe
Xe hơi
DIỄN ĐÀN
Diễn đàn
Cựu chiến binh
LUẬT PHÁP KIẾN THỨC
APALC Giải Đáp
Di trú
Khoa học
Kinh tế
Thuế
THƯ VIỆN
LIÊN LẠC NGƯỜI VIỆT
XEM NGƯỜI VIỆT TRÊN
CÁC TIN KHÁC
»
ĐỌC NHIỀU NHẤT
»
« Trở về trang trước
Cụ Bà Huỳnh Thị Láng
Thursday, December 13, 2012 4:00:14 PM
Print
Email
« Trở về trang trước
Please enable JavaScript to view the
comments powered by Disqus.
comments powered by
Disqus
NGƯỜI VIỆT TV
»
PHOTO Blog
»
HOME
MOBILE VERSION
NGUOI VIET ENGLISH
COPYRIGHT © Since 1999 by NGUOI VIET, INC.

WARC-Truncated: length

Set-Cookie: visid_incap_22813=zuPklU/RQAWZ08IwsQ6pY3kCGFQAAAAAQUIPAAAAAACW3TU+6vSZPcNEnpp60lrv; expires=Wed, 14 Sep 2016 13:52:16 GMT; path=/; Domain=.nguoi-viet.com

X-CDN: Incapsula


text:
Bộ lọc
-
Kiểu nhập liệu
-
Tính năng
-
Dòng sản phẩm
So sánh
-
Bắt đầu từ:
-
Bắt đầu từ:
-
Bắt đầu từ:
-
Bắt đầu từ:

markdown:
[Bộ lọc](#filters)
-
Kiểu nhập liệu
-
Tính năng
-
Dòng sản phẩm
##### So sánh
[Bắt đầu so sánh](/vn-vi/san-pham/compare/?action=productcompareaction)
-
Đặc điểm kỹ thuật
-
### 4inch
LCD
-
### 5 MP
-
### 4 GB
+15GB trên OneDrive, 128 GB
Bắt đầu từ:
-
-
Đặc điểm kỹ thuật
-
### 4,3inch
-
### 5 MP
-
### 4 GB
+ 7GB trên OneDrive, MicroSD (lên tới 32 GB)
Bắt đầu từ:
-
-
Đặc điểm kỹ thuật
-
### 4,5inch
ClearBlack, IPS LCD
-
### 5 MP
-
### 8 GB
+ 7GB trên OneDrive, 128 GB
Bắt đầu từ:
-
-
Đặc điểm kỹ thuật
-
### 5inch
LCD
-
### 5 MP
-
### 4 GB
+15GB trên OneDrive, MicroSD (lên tới 32 GB)
Bắt đầu từ:
-

Server: Apache

Set-Cookie: deviceType=M; expires=Fri, 19-Sep-2014 10:11:44 GMT; path=/

X-Frame-Options: SAMEORIGIN

X-Varnish-Cache: MISS

Content-Language: vi-VN


text:
Công ty Pouyuen là doanh nghiệp (DN) 100% vốn nước ngoài chuyên sản xuất giày xuất khẩu và cung ứng nguyên vật liệu cho ngành giày, có gần 65.500 công nhân (CN), tương đương với số lượng CN của cả KCX Linh Trung và nhiều gấp đôi số dân của 1 phường bình thường ở TPHCM. Vậy mà từ ngày thành lập đến nay, hơn 10 năm, Công ty Pouyuen chưa bao giờ để xảy ra đình công…
Công đoàn - chủ DN: quan hệ khắng khít
Công đoàn - chủ DN: quan hệ khắng khít
Công nhân Công ty Pouyuen (phải) nhận trợ cấp thai sản tại Công đoàn công ty. Ảnh: M.HƯƠNG
Trước tình hình giá cả tăng đột biến, ban chấp hành công đoàn (CĐ) Công ty Pouyuen đề xuất với chủ DN sớm có các biện pháp tăng lương để hỗ trợ khó khăn cho 65.000 CN. Anh Củ Phát Nghiệp, Chủ tịch Công đoàn công ty kể: “Tăng lương cùng lúc cho 65.000 con người - đó không phải là chuyện đơn giản.
Muốn đề nghị của mình được chấp thuận, CĐ phải đưa ra được những lý lẽ thuyết phục, những dẫn chứng có cơ sở. Vậy là CĐ làm một cuộc khảo sát quy mô, chi tiết, trong đó thống kê cụ thể tiền nhà trọ, tiền ăn sáng, ăn tối, các khoản sinh hoạt phí như xà bông tắm, dầu gội, tiền đi lại, đồ dùng cá nhân, sinh hoạt văn hóa, tiền đám cưới, đám hỏi… của mỗi CN phải chi trong 1 tháng.
Kết quả cho thấy: bình quân mỗi CN Pouyuen xài hết khoảng 1,2 triệu đồng/tháng để đảm bảo những nhu cầu tối thiểu, trong khi mức lương hiện tại của mỗi người chỉ từ 1,1 - 1,2 triệu đồng/tháng. Từ kết quả khảo sát đó, chúng tôi mang ra thảo luận với ban giám đốc. Cuối cùng chủ DN đồng ý tăng thêm 170.000 đồng/tháng cho toàn bộ CN, bắt đầu từ tháng 7-2008 này. Để đi đến quyết định đó, mỗi tháng, quỹ lương của công ty phải chi thêm hơn 11 tỷ đồng!”.
Không chỉ thay mặt CN đề đạt những bức xúc về đời sống, trước đó, tổ chức CĐ đã đề xuất chủ DN chi phụ cấp độc hại cho CN làm ở 18 công đoạn khác nhau như bốc vác, làm thử giày, xử lý nước khoáng, dán đế… Kết quả, từ tháng 2-2008, những CN làm ở khâu độc hại đã được hưởng phụ cấp 5% lương/tháng. “Ngoài việc hỗ trợ kinh phí hoạt động, lãnh đạo công ty còn luôn quan tâm đến những đề xuất của tổ chức CĐ và đáp ứng với khả năng cao nhất nếu đề xuất đó là hợp lý, có lợi cho CN, đem lại lợi ích lâu dài cho công ty và không vi phạm chủ trương, chính sách của nhà nước.
Nếu có vấn đề gì cấp bách cần đề đạt, CĐ đều có thể gặp trực tiếp chủ DN bất cứ lúc nào…” - anh Nghiệp cho biết. Chính từ mối quan hệ khắng khít, phối hợp nhịp nhàng, CĐ đã thực sự trở thành cầu nối giữa CN và lãnh đạo công ty, càng ngày càng được CN tin tưởng và gắn bó nhiều hơn với công ty. Thông qua hộp thư góp ý và kênh thông tin từ các Phòng Nhân quyền được đặt ở mỗi xưởng, mỗi năm, có hàng ngàn ý kiến phản ánh, góp ý của CN được gửi về cho tổ chức CĐ. “Nhờ nắm bắt và giải quyết kịp thời những bức xúc của CN nên từ ngày thành lập đến nay, dù đã hơn 10 năm, Công ty Pouyuen chưa từng xảy ra đình công” - Bí thư Chi bộ Công ty Pouyuen Tống Văn Thiện nhận định.
Họp chi bộ trong giờ sản xuất
Họp chi bộ trong giờ sản xuất
“Chăm lo đời sống vật chất, tinh thần cho CN, đó vừa là mục tiêu, vừa là động lực. Tôi tán thành quan điểm của lãnh đạo Công ty Pouyuen là DN muốn phát triển nhanh, lâu dài và vững chắc thì việc chăm lo CN có ý nghĩa sống còn. Đó là tư tưởng nhìn xa trông rộng, cách làm ăn lớn!” - Bí thư Thành ủy TPHCM Lê Thanh Hải phát biểu khi làm việc với lãnh đạo Công ty Pouyuen vào ngày 17-6.
Từ chỗ chỉ có 3 đảng viên vào thời điểm mới thành lập (tháng 3-2008) đến nay, Chi bộ Đảng Công ty Pouyuen đã có 8 đảng viên. Do hầu hết các đảng viên trong chi bộ đều là CN, lại làm việc theo ca, nên việc sắp xếp thời gian sinh hoạt chi bộ gặp khó khăn.
Nhìn thấy sự đóng góp thiết thực của chi bộ và vai trò của tổ chức cơ sở Đảng, chủ DN đã chấp thuận cho CN là đảng viên đang làm việc tại các xưởng được nghỉ từ 2 - 3 tiếng để họp chi bộ mà không bị trừ điểm chuyên cần, không bị trừ lương hoặc hạ bậc thi đua. “Họp chi bộ trong giờ cũng là để phục vụ sản xuất kinh doanh của công ty!” - Ban giám đốc Công ty Pouyuen nhìn nhận.
Đây là sự khác biệt quan điểm khá lớn giữa chủ DN Pouyuen với nhiều chủ DN khác, thậm chí là một số DN cổ phần hóa vốn có tổ chức cơ sở Đảng hình thành từ khi còn là DN Nhà nước. Bí thư Chi bộ Tống Văn Thiện kể: “Mới vừa rồi, chủ DN tạo điều kiện cho chi bộ cùng với CĐ, Chi đoàn TNCS lập danh sách 75 đoàn viên gửi đi học lớp cảm tình Đảng. Kết quả có 49/75 người được cấp giấy chứng nhận. Chúng tôi sẽ phân công đảng viên theo dõi, giúp đỡ CN ưu tú để kết nạp họ vào Đảng”.
Phối hợp nhịp nhàng với chi bộ và tổ chức CĐ, Chi đoàn TNCS công ty chủ động nắm bắt và giải quyết các vấn đề liên quan đến quyền lợi của thanh niên CN. Được biết ở công ty, 37.951 CN có trình độ văn hóa THCS (58%), 22.900 CN có trình độ THPH và còn 4.580 CN mới học hết tiểu học (7%).
Sắp tới, theo chỉ đạo của Thành ủy THCM, Thành đoàn TPHCM cùng với Chi đoàn TNCS công ty đứng ra lãnh trách nhiệm mở các lớp bổ túc văn hóa cho CN. “Nâng trình độ văn hóa cho CN, đó là đầu tư chiều sâu!” - Tổng Giám đốc Thạch Tiểu Bình nhìn nhận. Bí thư Chi đoàn TNCS, anh Trần Duy Canh kể: Cuối năm 2007, trong công ty xuất hiện dư luận là đầu năm 2008, CN sẽ không được hưởng chế độ ốm đau, thai sản, tức là không tính thâm niên làm việc (!?).
Mới nghe phong thanh như vậy, không ít CN đã tính chuyện nghỉ việc. Chi đoàn TNCS liền phân công đoàn viên nòng cốt nắm bắt thêm tình hình, giải thích cho CN hiểu, yên tâm làm việc. Chủ DN cũng ra thông báo cho CN biết đó là thông tin thất thiệt, đồng thời cam kết không ngừng chăm lo cho CN như cải thiện bữa ăn, trợ cấp khó khăn, chăm lo phúc lợi, xây dựng nhà ở…
Không có đình công, đời sống CN được cải thiện, tổ chức Đảng và các đoàn thể chính trị trong DN đều có vai trò thực chất đối với người lao động và người sử dụng lao động, là điều kiện không thể thiếu để DN phát triển… Đó là những điều bất ngờ chúng tôi nhận được từ công ty tư nhân 100% vốn nước ngoài Pouyuen.
Tuấn Sơn – Mai Hương

Content-Type: text/html

Accept-Ranges: bytes


text:
SHOP TRANH THÊU CHỮ THẬP.
SHOP TINA VÕ.
ĐC: 18B Ấp 4 đường Phạm Hữu Lầu, Xã Phước Kiển, Nhà Bè. (vào hẻm 21 Phạm Hữu Lầu gần cầu Phước Long).
ĐT: 0908.731.838 gặp Chị Cúc
Email: shoptinavo@yahoo.com
Số tài khoản: 0181001198932 ngân hàng vietcombank chi nhánh Tân Thuận. Chủ tài khoản: Lưu Thị Cúc
SHOP TINA VÕ Chuyên bán tranh thêu chữ thập (cross stitch) hay còn gọi là chữ X. Với tranh thêu chữ thập, các bạn có thể dùng nó như một món quà đầy thành ý do mình tự tay làm tặng cho người yêu, bạn bè, người thân, thầy cô, mừng thọ Ông Bà, tân gia, cưới hỏi, sinh nhật hay trang trí cho ngôi nhà thân yêu của bạn... Tranh thêu chữ thập sẽ giúp bạn nhắn gởi tới những người yêu thương những lời lẽ trong lòng mà bạn khó bộc lộ, để người thân yêu bạn cảm nhận được tình yêu thương bằng một món quà đơn giản mà độc đáo, tinh tế.
Ngoài ra chúng tôi còn nhận đặt thêu tranh theo yêu cầu của quý khách hàng và tư vấn cho quý khách những mẫu tranh mang tính phong thuỷ nhằm đem đến cho quý khách sự thịnh vượng, may mắn, phát tài và thành công.
SHOP TINA VÕ bán hàng uy tín, chất lượng với giá cả cực kỳ hợp lý cạnh tranh. Đến với chúng tôi quý khách sẽ tìm thấy những giây phút thoải mái và quên đi sự mệt nhọc, phiền muộn trong cuộc sống hay áp lực công việc, học hành hàng ngày và đồng thời quý khách có những món quà đầy ý nghĩa cho người thân. Đến với chúng tôi quý khách sẽ tìm thấy những ý tưởng mới cho ngôi nhà của mình thêm tươi đẹp.
Bạn là người chưa biết thêu chúng tôi sẽ hướng dẫn miễn phí bạn cách thêu và bạn chỉ thực hành trong vòng 10 đến 15 phút là bạn đã trở thành một nghệ nhân tự mình tạo nên những bức tranh tuyệt hảo mà bạn tưởng chừng như mình không thể.
Các nguyên vật liệu cần để thêu bao gồm: (một bộ hay gọi là kit)
- Mẫu thêu (còn gọi là chart): là hướng dẫn bao gồm các ô vuông với những ký hiệu khác nhau dùng để quy định màu chỉ. Mỗi ô vuông này sẽ tương ứng với một ô vuông (hay một mũi thêu chữ X trên vải.
- Vải thêu (Aida White 11 count): là loại vải đặc biệt dùng cho thêu cross stitch. Vải này được dệt thành các ô vuông có nông đều nhau. Có nhiều loại vải với tên gọi khác nhau: nhưng chúng tôi cung cấp loại vải này bằng chất liệu tốt sẽ giúp bảo tồn sản phẩm qua nhiều thế hệ khác nhau nhưng vẫn giữ được nét đẹp của tranh.
- Kim thêu: Dùng kim thêu sử dụng từng màu chỉ theo hướng dẫn qua từng chữ X trên vải.
- Chỉ thêu: Một bức tranh có bao nhiêu màu sắc sẽ tương ứng bấy nhiêu chỉ.
Chúng tôi giao hàng tận nơi trên toàn quốc.
Đến với chúng tôi quý khách sẽ thấy thực sự hài lòng.
SAU ĐÂY LÀ NHỮNG MẪU THÊU MỜI QUÝ KHÁCH THAM KHẢO.
Mỗi một Kit điều có mã số riêng (nếu quý khách đặt hàng vui lòng ghi rõ mã số của Kit mình chọn shop sẽ gửi đúng hàng cho quý khách).
Mã số: A- 104. Loại vải : Aida White 11 count Kích thước: 38x38cm. Hãng sản xuất : Pinkoo. Giá trọn bộ (gồm kim, chỉ, vải, mẫu thêu): 120.000 VND
CHỮ PHÚC
Mã số: B- 028. Loại vải : Aida White 11 count Kích thước: 65x49cm. Hãng sản xuất : Pinkoo. Giá trọn bộ (gồm kim, chỉ, vải, mẫu thêu): 120.000 VND
MẪU ĐỒNG HỒ
MẪU GỐI: bao gồm áo gối
Mã số: S- 066. Loại vải : Aida White 11 count Kích thước: 47x47cm. Hãng sản xuất : Pinkoo. Giá trọn bộ (gồm kim, chỉ, vải, mẫu thêu): 170.000 VND.
Mã số: S- 036. Loại vải : Aida White 11 count Kích thước: 47x47cm. Hãng sản xuất : Pinkoo. Giá trọn bộ (gồm kim, chỉ, vải, mẫu thêu): 170.000 VND.
Mã số: S- 044. Loại vải : Aida White 11 count Kích thước: 47x47cm. Hãng sản xuất : Pinkoo. Giá trọn bộ (gồm kim, chỉ, vải, mẫu thêu): 170.000 VND.
Mã số: S- 023. Loại vải : Aida White 11 count Kích thước: 47x47cm. Hãng sản xuất : Pinkoo. Giá trọn bộ (gồm kim, chỉ, vải, mẫu thêu): 170.000 VND.
Mã số: S- 207. Loại vải : Aida White 11 count Kích thước: 42x42cm. Hãng sản xuất : Pinkoo. Giá trọn bộ (gồm kim, chỉ, vải, mẫu thêu): 185.000 VND.
Mã số: A-202. Loại vải : Aida White 11 count Kích thước: 61x56cm. Hãng sản xuất : Pinkoo. Giá trọn bộ (gồm kim, chỉ, vải, mẫu thêu): 210.000 VND.
Mã số: G-175. Loại vải : Aida White 11 count Kích thước: 65x76cm. Hãng sản xuất : Pinkoo. Giá trọn bộ (gồm kim, chỉ, vải, mẫu thêu): 245.000 VND.
Mã số: H-321. Loại vải : Aida White 11 count Kích thước: 74x47cm. Hãng sản xuất : Pinkoo. Giá trọn bộ (gồm kim, chỉ, vải, mẫu thêu): 245.000 VND.
Mã số: K-066. Loại vải : Aida White 11 count Kích thước: 58x48cm. Hãng sản xuất : Pinkoo. Giá trọn bộ (gồm kim, chỉ, vải, mẫu thêu): 260.000 VND.
Mã số: H-282. Loại vải : Aida White 11 count Kích thước: 45x29cm. Hãng sản xuất : Pinkoo. Giá trọn bộ (gồm kim, chỉ, vải, mẫu thêu): 130.000 VND.
Mã số: H-254. Loại vải : Aida White 11 count Kích thước: 45x29cm. Hãng sản xuất : Pinkoo. Giá trọn bộ (gồm kim, chỉ, vải, mẫu thêu): 130.000 VND.
Mã số: TH-105. Loại vải : Aida White 11 count Kích thước: 41x50cm. Hãng sản xuất : Truelove. Giá trọn bộ (gồm kim, chỉ, vải, mẫu thêu): 180.000 VND.
Mã số: TH-120. Loại vải : Aida White 11 count Kích thước: 54x74cm. Hãng sản xuất : Truelove. Giá trọn bộ (gồm kim, chỉ, vải, mẫu thêu): 230.000 VND
Mã số: H-256. Loại vải : Aida White 11 count Kích thước: 72x45cm. Hãng sản xuất : Pinkoo. Giá trọn bộ (gồm kim, chỉ, vải, mẫu thêu): 245.000 VND
Còn rất nhiều loại mẫu mã đa dạng phong phú khác xin quý khách vui lòng liên hệ shop chúng tôi sẽ tư vấn kỹ hơn và cung cấp mẫu theo yêu cầu của quý khách.
SHOP TRANH THÊU CHỮ THẬP.
Ở Việt Nam, tranh thêu tay là một nghề truyền thống lâu đời. Trải qua bao thăng trầm của thời gian và lịch sử, nghề thêu tranh tay vẫn giữ được bản sắc văn hóa lâu đời của dân tộc.
Trong thời gian gần đây tại Việt Nam nữ giới đã quay trở lại với một thú vui mà tưởng chừng như ở thời hiện đại người ta không có đủ thời gian và cũng không mong muốn làm những việc như vậy, đó là phong trào thêu tranh chữ thập hay còn gọi (cross stitch).
Cross stitch (thêu chữ thập) xuất hiện từ cách đây cả nghìn năm trước trên khắp thế giới. Người ta đã tìm thấy những hoạ tiết thêu chữ thập trên tấm trang trí bàn thờ Chúa trời ở Jelusalem, trên trang phục các thổ dân da đỏ châu Mỹ, trên đồ trang sức của thổ dân châu Úc, trên hoàng bào của vua Trung Quốc và trên.... gấu váy của cô gái H'mông Việt Nam. Tuy nhiên, thêu chữ thập mới phát triển thành loại hình tranh thêu nghệ thuật vài thập kỷ gần đây. Khởi nguồn từ châu Âu, loại hình này đã nhanh chóng được lan sang châu Mỹ và châu Á, bùng phát tại Nhật Bản, Hàn Quốc và Trung Quốc và sau đó là đến Việt Nam.
Tranh thêu chữ thập (Crosstitch) ứng dụng cách thức thêu đơn giản bắt chéo mà bất kỳ ai cũng làm được giúp bạn có thể tự tay thực hiện được những tác phẩm nghệ thuật đẹp mắt kỳ công. Thêu chữ thập ngày càng phổ biến, được phụ nữ trên khắp thế giới ưa chuộng.
Với tranh thêu chữ thập, các bạn có thể dùng nó như một món quà đầy thành ý do mình tự tay làm tặng cho người yêu, bạn bè, người thân, thầy cô, mừng thọ Ông Bà, tân gia hay trang trí cho ngôi nhà thân yêu của bạn... Tranh thêu chữ thập sẽ giúp bạn nhắn gởi với những người yêu thương những lời lẽ trong lòng mà bạn khó bộc lộ, để người thân yêu bạn cảm nhận được tình yêu thương bằng một món quà đơn giản mà độc đáo, tinh tế.
Chỉ cần dành một chút thời gian rỗi mỗi ngày, bạn có thể thực hiện được các tác phẩm như những bức tranh chữ thập hoành tráng cho đến những tác phẩm ứng dụng thủ công (ví, móc khóa, túi xách, gối, khăn trải bàn, họa tiết áo quần…)
Khi thêu, người thêu tập trung cao độ, quên hết những nỗi buồn phiền, bon chen của cuộc sống.
Mấy năm gần đây, phong trào thêu thùa đã trở lại với nữ giới VN như một niềm đam mê âm thầm nhưng không kém mạnh mẽ,

Content-Type: application/xhtml+xml; charset=utf-8


text:
Sử dụng pin cho laptop Asus mới.
Thảo luận trong '[Win] Hỏi đáp - CSKN' bắt đầu bởi salem1806, 23/8/11. Trả lời: 950, Xem: 157254.
Trang 38 / 48
Trang 38 / 48
Thảo luận trong '[Win] Hỏi đáp - CSKN' bắt đầu bởi salem1806, 23/8/11. Trả lời: 950, Xem: 157254.

markdown:
# Sử dụng pin cho laptop Asus mới.
Thảo luận trong '
[[Win] Hỏi đáp - CSKN](forums/win-hoi-dap-cskn.201/)' bắt đầu bởi [salem1806](members/salem1806.541531/), [23/8/11](threads/su-dung-pin-cho-laptop-asus-moi.816642/).
Trả lời: 950, Xem: 157254.
Trang 38 / 48
Trang 38 / 48
Thảo luận trong '
[[Win] Hỏi đáp - CSKN](forums/win-hoi-dap-cskn.201/)' bắt đầu bởi [salem1806](members/salem1806.541531/), [23/8/11](threads/su-dung-pin-cho-laptop-asus-moi.816642/).
Trả lời: 950, Xem: 157254.

Server: LiteSpeed

Cache-control: private, max-age=0

Vary: User-Agent


text: Ít ra thì bộ ảnh sex nữ sinh lồn đẹp này cũng d94 làm chao đảo biết bao nhiêu người. Hơn thế, bộ mông to hồng hào mịn màng của em cũng được chú ý bởi vì người con gái 18 thế này thỉ sẽ làm cho ngành sex chao đảo cho mà coi.