Chủ Nhật, 7 tháng 8, 2011

Hiểu về kho web mở

Understanding The Open Web Stack

Dù bạn có là một cao thủ .NET hay một kẻ nổi loạn của Rails thì cũng chẳng vấn đề gì khi nói về phát triển với các công nghệ mở ở các giao diện mặt tiền. Người kỳ cựu nhất về Web là Holzschlag giải thích Kho Công nghệ Web Mở trông giống cái gì, làm thế nào những lập trình viên có thể sử dụng kho này như một chỉ dẫn cho những thực tiễn tốt nhất, và cách mà kho này so sánh với các lựa chọn sở hữu độc quyền.

Whether you're a .NET guru or Rails rebel makes no matter when it comes to developing with open technologies on the front end. Web doyenne Molly Holzschlag explains what the Open Web Technology Stack looks like, how developers can use this stack as a guideline for best practices, and how the stack compares with proprietary options.

by Molly Holzschlag | August 1, 2011 0 Comments and 30 Reactions

Theo: http://www.softwarequalityconnection.com/2011/08/understanding-the-open-web-stack/

Bài được đưa lên Internet ngày: 01/08/2011

Lời người dịch: Có lẽ tại Việt Nam, ngay cả giới CNTT-TT còn chưa tiêu hóa nổi cái gọi là phần mềm nguồn mở, rồi chuẩn mở, rồi công nghệ mở. Và bây giờ là Web Mở với những chuẩn và kiến trúc của riêng nó, được tiên đoán sẽ định hình cho tương lai của Web những năm tới. Nó có những nguyên tắc cơ bản như: “Nhưng nếu thứ gì đó bất kỳ là nguyên tắc quan trọng duy nhất cho một Web mở và dân chủ, thì đó chính là tính tương hợp. Tính tương hợp có nghĩa là các hệ thống, phần mềm, các site, và các ứng dụng chúng ta phát triển làm việc được với nhau mà không có xung đột... Khía cạnh đầu tiên và có lẽ và sống còn nhất đối với Web Mở là nó là phi tập trung. Điều này có nghĩa là nó không bị bất kỳ cá nhân, công ty, hay tổ chức duy nhất nào kiểm soát. Thay vào đó, nó thuộc về bất kỳ ai muốn sử dụng nó. Có sự lựa chọn cách mà bạn được tham gia trong quá trình đó, từ việc sử dụng một dải rộng lớn các nhà cung cấp dịch vụ cho tới việc thiết lập site riêng tự làm của bạn”. Liệu có ai có thể chốn được khỏi Web Mở???

Các kho” công nghệ đã có từ nhiều năm nay. Tốt nhất, một kho công nghệ đưa ra được các biện pháp trực quan cách một nhóm công nghệ làm việc được cùng nhau. Tệ nhất, nó kết thúc trông giống như một mê cung “đi theo con chuột đồng mù” theo vòng xoắn của sự hỗn độn.

Trong các tiêu chuẩn Web và “Web Mở”, chúng ta trong nền công nghiệp từng hoàn toàn là những con chuột đồng mù. Điều này đã dẫn tới sự hỗn độn cực kỳ về cái gì đi đâu và vì sao. Một ví dụ hàng đầu của điều này là sử dụng và sử dụng sai khái niệm HTML5, mà nhiều người bị, cho tới nay, bị loạn. Không sợ! Bài viết này không chỉ giải thích kho công nghệ Web Mở mà còn đưa ra một nhìn nhận bạn có thể hiểu và sử dụng.

Web Mở là gì?

Định nghĩa thực sự của Web Mở là vẫn còn đang hình thành. Tuy nhiên, nó được xây dựng dựa vào các nguyên lý cốt lõi của bản thân Web, với một ít sự thông thái hơn được đưa ra sau khi đã thấy ý tưởng ban đầu của Web đã trở thành hiện thực.

Các nguyên tắc cội rễ của Web là để tạo ra và chia sẻ nội dung bất chấp:

  • Nền tảng

  • Hệ điều hành

  • Định dạng dữ liệu

  • Ngôn ngữ/Vị trí

  • Người khuyết tật hay không khuyết tật

Technology “stacks” have been around for years. At best, a technology stack provides a means of visualizing the way a group of technologies work together. At worst, it ends up looking like a convoluted “follow the blind hamster” maze of confusion.

In Web standards and the “Open Web,” we in the industry have definitely been the blind hamsters. This has led to extreme confusion about what goes where and why. A prime example of this is the use and misuse of the term HTML5, which many people are, to this day, confused by. Fear not! This article not only explains the Open Web technology stack but also provides a visual you can understand and put to use.

What is the Open Web?

The actual definition of the Open Web is still forming. However, it is built upon core principles of the Web itself, with a little more wisdom thrown in after having seen the original idea of the Web become reality.

The root principles of the Web are to create and share content regardless of:

  • Platform

  • Operating System

  • Data format

  • Language/Location

  • Ability or disability

Từ lúc ban đầu nhất của nó, những người sáng tạo ra Web, Tim Berners-Lee và những người khác như Robert Cailliau, đã thấy Web như một môi trường xã hội tới mức mà như một môi trường kỹ thuật. Khuynh hướng xã hội học này đã khẳng định những khái niệm về sự truyền bá của Web là dân chủ, một công cụ cho trang bị của con người theo tất cả các cách thức và, vì thế, càng mở và càng ít chi phí có thể càng tốt.

Nhưng nếu thứ gì đó bất kỳ là nguyên tắc quan trọng duy nhất cho một Web mở và dân chủ, thì đó chính là tính tương hợp. Tính tương hợp có nghĩa là các hệ thống, phần mềm, các site, và các ứng dụng chúng ta phát triển làm việc được với nhau mà không có xung đột.

Nếu bạn đang cười nụ khi bạn đọc tuyên bố đó, thì bạn nhận thức được rằn đây không phải là một nhiệm vụ dễ dàng, và rằng sự căng thẳng từng có trong tim của mỗi “cuộc chiến tranh” mà Web từ trước tới giờ từng có, dù nó là kết quả của trình duyệt, nền tảng, các ứng dụng, và các codecs mà không tương hợp được với nhau.

Không đảm bảo tính tương hợp là để cho phép tầm nhìn lớn hơn của một sự chùn bước của Web Mở tích hợp vào trong một mô hình bị kiểm soát, ngăn cấm sự tiến bộ tiềm tàng của nó. Các triết lý của Web Mở đang nổi lên với một tốc độ nhanh muốn kháng cự lại những lo lắng về tính không tương hợp thách thức chưa từng có.

From its earliest inception, the Web’s creators, Tim Berners-Lee and others such as Robert Cailliau, saw the Web as a social environment inasmuch as a technical one. This sociological bent has persisted in terms of evangelism of the Web as democratic, a tool for human empowerment in all ways and, as such, as open and low cost as possible.

But if anything is the single most important principle for an open and democratic Web, it is interoperability. Interoperability means that the systems, software, sites, and applications we develop work with each other without conflict.

If you’re chuckling as you read that statement, you realize that this is no easy task, and that tension has been at the heart of every “war” the Web has ever had, be it the result of browser, platform, apps, and codecs that are not interoperable.

To not ensure interoperability is to allow the greater vision of an integrated yet Open Web falter into a controlled model, prohibiting its potential evolution. Open Web philosophies are emerging at a fast pace to attempt to counteract the ever-challenging interoperability concerns.

Core Principles of the Open Web

Các nguyên tắc cốt lõi của Web Mở

Web Mở là con đường công nghệ nhiều như nó là con đường chuyên nghiệp và đạo đức xã hộ vậy, đảm bảo rằng sức mạnh và tiềm năng đích thực của Web - và tất cả loài người - được duy trì.

Khía cạnh đầu tiên và có lẽ và sống còn nhất đối với Web Mở là nó là phi tập trung. Điều này có nghĩa là nó không bị bất kỳ cá nhân, công ty, hay tổ chức duy nhất nào kiểm soát. Thay vào đó, nó thuộc về bất kỳ ai muốn sử dụng nó. Có sự lựa chọn cách mà bạn được tham gia trong quá trình đó, từ việc sử dụng một dải rộng lớn các nhà cung cấp dịch vụ cho tới việc thiết lập site riêng tự làm của bạn.

Các vấn đề xã hội - kỹ thuật mà Web Mở có quan tâm bao gồm:

  • Sự minh bạch. Từ quan điểm kỹ thuật, điều này có nghĩa là tất cả các mức Web nên nhìn thấy được, từ các nguồn tài liệu cho tới các URL và các lớp HTTP.

  • Khả năng kết nối. Thông qua các giao diện lập trình ứng dụng API và thông tn mở được thu thập thông qua sự minh bạch, nó nên có khả năng đặt ra một loạt những mẩu cùng với sự dễ dàng, theo một cách thức an ninh, như việc bổ sung một dòng Flickr vào một blog, hoặc nhúng một clip nhạc từ một site này vào một site khác.

  • Những đặc tả mở. Tài liệu yêu cầu đặc tả, và các đặc tả mở là đặc biệt quan trọng đối với một Web Mở, không có những trở ngại như các bản quyền hoặc bằng sáng chế trong các đặc tả mở đó.

  • Sự tự do của các dạng xã hội. Khái niệm này, Brad Neuberg, cựu luật sư lập trình viên của Google đã đưa ra, mô tả một thị trường mở toàn cầu rộng rài “có tổ chức”. Điều này bao gồm các sản phẩm nguồn mở, các wikis được những người tình nguyện dẫn dắt, những món vay nợ vi lượng cho những người có nhu cầu về kinh tế, qua tới những thực thể kinh tế và xã hội lớn hơn như các site đấu giá hoặc các mạng xã hội.

  • Thuyết trình mở. Web là của hàng triệu người, và mang tiếng nói của tất cả những người tham gia. Web Mở khuyến khích sự thuyết trình dân sự, mở giữa mọi người, sử dụng Web như một công cụ đầu tiên, toàn cầu, chi phí thấp để kết nối một - nhiều hoặc hàng triệu - tới - hàng triệu, hoặc bất kỳ tổ hợp nào có thể tưởng tượng ra được.

  • Hướng về phía trước. Nếu bạn học thứ gì đó, hãy là một người tham gia Web mở có nghĩa là chia sẻ sự học được đó với những người khác thông qua thuyết trình, các blog, các hội nghị hoặc sáng tạo và tích hợp các công nghệ mở để thúc đẩy tiếp những ý tưởng đó.

Trong khi danh sách này còn chưa vét cạn, thì nó cũng đưa ra được một cái nhìn mạnh mẽ vào những nguyên tắc chỉ dẫn cho Web Mở. Sẽ có những khác biệt trong ý kiến, tất nhiên. Nhiều người bảo vệ Web Mở không gán các công nghệ cụ thể nào cho Web, tin tưởng điều này để lại cửa rộng mở cho sự tiến hóa sau này. Trong khi tôi đồng ý với điều này như một ý tưởng, thì tôi cũng thấy rằng việc đưa ra kho công nghệ trực quan đã giúp một cách sâu sắc trong việc làm sáng tỏ cách mà những đặc tả mở trong Web Mở có thể, và làm việc được cùng nhau.

The Open Web is as much of a path of technology as it is a path of professional and social ethics, ensuring that the true strength and potential of the Web – and all humanity – is maintained.

The first and perhaps most critical aspect to the Open Web is that it is decentralized. This means it’s not controlled by any single individual, company, or organization. Rather, it belongs to anyone who wants to use it. There is choice as to how you are included in the process, from using a wide range of service providers to setting up your own home-based site.

Other socio-technical issues with which the Open Web is concerned include:

  • Transparency. From a technical standpoint, this means all levels of the Web should be visible, from document source to URLs to HTTP layers.

  • Connect-ability. Via open APIs and information gathered via transparency, it should be possible to put various pieces together with ease, in a secure way, such as adding a Flickr stream to a blog, or embedding a clip of music from one site into another.

  • Open Specifications. Specs require documentation, and open specifications are especially important to an Open Web, with no encumbrances such as copyrights or patents on those open specs.

  • Freedom of Social Forms. This term, coined by Brad Neuberg, former developer advocate at Google, describes an “organic” broad global open market. This includes open source products, volunteer-led wikis, micro loans to those in economic need, right on through to larger economic and social entities such as auction sites or social networks.

  • Open discourse. The Web is of millions, and contains the voices of all who participate. Open Web encourages civil, open discourse between people, utilizing the Web as a primary, global, low-cost tool linking one-to-many or millions-to-millions, or any combination imaginable.

  • Pay It Forward. If you learn something, to be an open Web participant means to share that learning with others via discourse, blogs, conferences or the creation and integration of open technologies to further these ideals.

While this list is not exhaustive, it does provide a strong look at the principles that guide the Open Web. There are differences of opinion, of course. Many Open Web advocates do not ascribe specific technologies to the Web, believing this leaves the door wide open for ongoing evolution. While I agree with this as an ideal, I’ve also found that providing the visual technology stack has assisted profoundly in demystifying the way open specifications in the Open Web can, and do, work together.

Open Web Technologies: Front End

Các công nghệ Web Mở: Giao diện mặt tiền - Front End

Tất nhiên, một người có hể sẵn sàng nói rằng các công nghệ Web Mở là những công nghệ tuân thủ các nguyên tắc cốt lõi và gốc rễ của các tiêu chuẩn Web và Web mở. Và họ có lẽ đúng! Một lần nữa, đây là những nguyên tắc cho phép chúng ta mở rộng và trả lời được cho các nghĩa vụ đang gia tăng chưa từng có đối với những người chuyên nghiệp về Web. Với điều đó trong đầu, đây là cái nhìn sơ qua vào một số các công nghệ được coi là mở.

Bạn cũng sẽ lưu ý rằng tôi cũng đã chọc vào các công nghệ được các lập trình viên giao diện mặt tiền sử dụng. Có một phương pháp đối với sự điên khùng của tôi ở đây: Sự phát triển giao diện mặt tiền thường phải chơi được tốt với công nghệ máy chủ sở hữu độc quyền. Điều này là sống còn vì các công nghệ ở giao diện mặt tiền (Bảng 1) có xu hướng rất có khả năng thích nghi được, phần lớn vì sự minh bạch của chúng.


Công nghệ Web Mở

Các phiên bản

Tổ chức

Mô tả

HTML

HTML – HTML 4.01

W3C

Ngôn ngữ đánh dấu cho các tài liệu Web

HTML/5

HTML / HTML5

WHAT-WG / W3C

Ngôn ngữ đánh dấu và các API có liên quan cho một Web giàu ứng dụng.

XHTML

XHTML 1.0 – 1.1, XHTML Basic, XHTML-MP

W3C

Sự tuần tự hóa XML của HTML cho các tài liệu và các ứng dụng

XML

All

W3C

Siêu ngôn ngữ cho các ứng dụng XML

SVG

All

W3C

Đồ họa Vector mở rộng được phạm vi cho Web (dựa vào XML)

MathML

All

W3C

Ký hiệu cho toán học và khoa học (dựa vào XML)

CSS

All

W3C

Ngôn ngữ kiểu dạng cho Web

ECMAScript

All

ECMA (Hiệp hội các Nhà sản xuất Máy tính châu Âu)

Phiên bản “tiêu chuẩn” của những gì chúng ta thường tham chiếu tới như là JavaScript

HTML5 Media APIs

HTML5

WHAT-WG / W3C

HTML5 APIs

HTML5

WHAT-WG / W3C

Một loạt các giao diện lập trình ứng dụng cho một dải rộng truy cập script tới các yếu tố ứng dụng và tài liệu.

Microformats

All

microformats.org

Mở rộng đánh dấu hiện hành để làm cho nó mở hơn và con người đọc được hơn.

WAI-ARIA

All

W3C

Sáng kiến về tính có thể truy cập được Web/ Tính có thể truy cập được cho các ứng dụng Internet giàu

Bảng 1. Các công nghệ hiện hành được xem là Web Mở

Trong khi đa số các công nghệ tới từ W3C, thì WHAT-WG và microformats.org là những tổ chức từ bên dưới lên (grass-root) và làm việc theo cách tuân thủ với các ý tưởng của Web Mở. Chúng là mở cho bất kỳ ai có quan tâm và mong muốn tham gia, một điều lệ về sức mạnh của các cá nhân để giúp xây dựng các công nghệ với nó chúng ta sẽ làm việc.

Of course, one can readily say that Open Web technologies are those that conform to the root and core principles of Web standards and Open Web. And they’d be right! Again, it is the principles that allow for us to expand and respond to our ever-growing duties as Web professionals. With that in mind, here’s a look at some of the technologies considered to be open.

You’ll note also that I’ve stuck to technologies used by front end developers. There’s a method to my madness here: Front end development often has to play well with proprietary server technology. This is critical because technologies on the front end (Table 1) tend to be very adaptable, in large part due to their transparency.

Open Web Technology

Versions

Organization

Description

HTML

HTML – HTML 4.01

W3C

Markup language for Web documents

HTML/5

HTML / HTML5

WHAT-WG / W3C

Markup language and related APIs for an application-rich Web

XHTML

XHTML 1.0 – 1.1, XHTML Basic, XHTML-MP

W3C

XML serialization of HTML for docs and applications

XML

All

W3C

Metalanguage for XML applications

SVG

All

W3C

Scalable Vector Graphics for the Web (XML-based)

MathML

All

W3C

Notation for math and science (XML-based)

CSS

All

W3C

The style language for the Web

ECMAScript

All

ECMA (European Computer Manufacturers Association)

The “standard” version of what we generally refer to as JavaScript

HTML5 Media APIs

HTML5

WHAT-WG / W3C

HTML5 APIs

HTML5

WHAT-WG / W3C

Variety of application programming interfaces for a wide range of script access to application and document elements.

Microformats

All

microformats.org

Extending existing markup to make it more human-readable and open.

WAI-ARIA

All

W3C

Web Accessibility Initiative / Accessibility for Rich Internet Applications

Table 1: Current technologies considered to be Open Web

While the majority of these technologies come from the W3C, the WHAT-WG and microformats.org are grass-roots organizations and work in the way compliant with the ideals of the Open Web. They are open to anyone who has the interest and desire to participate, a testament to the power of individuals to help build the very technologies with which we work.

Visualizing the Open Web Technology Stack

Ảo hóa Kho Công nghệ Web Mở

Một trong những thách thức trong nhận thức ngày nay về các tiêu chuẩn Web và Web Mở là việc HTML5 là sự kết hợp của những công nghệ này. Không gì có thể xa hơn từ sự thực này. Rất quan trọng rằng các lập trình viên, những người quản trị, và đám người hiện dựa vào các giám đốc công nghệ CTO ít nhất có được sự hiểu biết này: HTML5 đơn giản là một ngôn ngữ làm việc với các ngôn ngữ khác trong kho công nghệ Web Mở.

Đặt điều này vào trong tầm nhìn đã giúp làm rõ nhiều sự bối rối. Khi chúng ta có thể thực sự nhìn vào cách những công nghệ này làm việc cùng với nhau, thì chúng ta có thể tách bạch được các lớp và hiểu được đây không chỉ là một công nghệ, mà nhiều công nghệ làm việc được với nhau theo nghĩa kết nối các khả năng của Web Mở.

One of the challenges in today’s perception of Web standards and Open Web is that HTML5 is the combination of these technologies. Nothing could be further from the truth. It is very important that developers, managers, and folks right on up to the CTO have at least this understanding: HTML5 is simply a language that works with other languages in the Open Web technology stack.

Putting this into a visual has helped clear up a lot of confusion. When we can actually look at how these technologies work together, we can separate the layers and understand that it’s not just one technology, but many working together in the connect-ability sense of the Open Web.

The Open Web Technology Stack

Hình 1: Kho Công nghệ Web Mở: hình dung về Web Mở.

Figure 1: The Open Web Technology Stack: a visualization of Open Web

Có 4 lớp: cấu trúc, trình diễn, hành vi, và phương tiện. Nhiều độc giả sẽ quen với mô hình 3 lớp, nhưng cùng với HTML5 còn có các API mở cho các phương tiện nhúng.

Ở lớp đầu tiên, cấu trúc, chúng ta thấy HTML5 cùng với ARIA. Điều này cho phép các cú pháp, ngữ nghĩa và các tính năng về tính có thể truy cập được đối với các nội dung và tính năng của các website và ứng dụng. Trên lớp cấu trúc là trình diễn, tất nhiên là lớp thiết kế thông qua CSS. Cùng với nội dung và kiểu dạng, có lớp hành vi.

Trong lớp này chúng ta bắt đầu thấy ảnh hưởng của HTML5 trong Web Mở, nơi mà các API của HTML5 (cũng như các API khác có liên quan tới nhưng không phải là HTML5, như vị trí địa lý) và scripting ngồi ở cùng mức này. Đây là một sự chuyển dịch mà HTML5 mang lại: các lựa chọn scripting giàu không thể tin nổi mà chúng ta chưa bao giờ có trong các trình duyệt trước đây.

Cuối cùng, lớp phương tiện, nơi chúng ta cũng thấy ảnh hưởng của HTML5 ở dạng các API phương tiện cụ thể: nghe nhìn, âm thanh và tranh. SVG là Đồ họa Vector có khả năng mở rộng phạm vi và có thể được sử dụng để tạo các đồ họa và hoạt hình vector trên trình duyệt. Không mới mẻ gì, SVG bây giờ đang trở thành mong muốn hơn khi mà trình duyệt IE bắt đầu chín.

Giữ trong đầu rằng kho này chỉ là một trong nhiều trình bày tiềm năng. Microformats, ví dụ, có thể dễ dàng được bổ sung vào cho lớp cấu trúc, và hơn nữa. Trên thực tế, đồng nghiệp của tôi tại Opera Software, David Storey, đã bắt đầu sự hình dung này và tôi đã sửa đổi nó từ đó. Theo tinh thần của Web Mở, Paul Irish từ Google đã thấy nó, đã hỏi về nó, và bây giờ đang sửa đổi và sử dụng để tạo ra một loạt cá hình dung. Đó là Web Mở trong hành động!

Sự nhắc lại, Tương lai Mở

Khi các công nghệ tiến hóa và nổi lên thay đổi, nhiều người trong chúng ta làm việc với chúng cũng phải thay đổi. Điều này đòi hỏi nhiều thiện chí để thích nghi và có lẽ thậm chí cả sự thay đổi toàn bộ kế hoạch dự án để thích nghi được với thách thức kỹ thuật được đưa ra. Đây là nét đẹp, và nỗi đau, là một phần của công nghệ phá hủy.

Những gì mô phỏng nhu cầu nhanh chóng thích nghi là trong thực tế Web Mở, vì nó được xây dựng để trở thành mềm dẻo, thích nghi cao, và giải quyết được các nhu cầu hôm nay với các nhu cầu trong tương lai, tất cả cùng khi giữ trung thành với các nguyên tắc gốc ban đầu của bản thân Web. Đây là nhiệm vụ không dễ dàng, và không có một qui trình nào vừa cho tất cả. Hãy là một phần của cuộc đàm luận mở, và tôi hứa những phần thưởng sẽ là vô giá.

There are four layers: structure, presentation, behavior, and media. Many readers will be familiar with the three layer model, but along with HTML5 has come open APIs for embedded media.

On the first level, structure, we see HTML5 along with ARIA. This provides the syntax, semantics, and accessibility features for the content and features of your websites and applications. Above structure is presentation, which is of course the design layer via CSS. Along with the content and style, there’s the behavior layer.

It’s in this layer we begin to see the influence of HTML5 in the Open Web, where HTML5 APIs (as well as other APIs that are related to but not HTML5, such as geolocation) and scripting sit at the same level. This is the real shift that HTML5 brings: incredibly rich scripting options we’d never had in browsers before.

Finally, there’s the media layer, where we also see the influence of HTML5 in the form of specific media APIs: video, audio, and canvas. SVG is Scalable Vector Graphics and can be used to create in-browser vector graphics and animation. Not new to the game, SVG is now becoming more desirable as the IE browser begins to mature.

Keep in mind that this stack is only one of many potential representations. Microformats, for example, could easily be added to the structural layer, and so on. In fact, my colleague at Opera Software, David Storey, began this visualization and I’ve modified it from there. In the spirit of the Open Web, Paul Irish from Google saw it, asked for it, and now it’s being modified and used to create a variety of visualizations. That’s the Open Web in action!

An Iterative, Open Future

As evolving and emerging technologies change, so must those of us who work with them change. This requires a great deal of willingness to adapt and perhaps even change an entire project plan to accommodate a given technical challenge. This is the beauty, and the pain, of being part of disruptive technology.

What mitigates the need to rapidly adapt is in fact the Open Web, as it is built to be flexible, adaptive, and address the needs of today with the needs of the future, all the while keeping faithful to the original principles of the Web itself. It’s no easy task, and there’s no one-size-fits-all process. Be a part of the open conversation, and I promise the rewards will be priceless.

Dịch tài liệu: Lê Trung Nghĩa

letrungnghia.foss@gmail.com


Không có nhận xét nào:

Đăng nhận xét

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.