Friday, October 3, 2014

Một số bài tập lập trình cho SIE

Bài 1. Tính điểm
Đầu vào: là một file text  (input.txt) chứa tên các thư mục của các bạn nộp bài tập theo tuần
Đầu ra: Số lượng bài tập nộp của từng sinh viên (lấy theo mã sinh viên) và điểm được in ra màn hình và xuất ra file output.txt

VD. File đầu vào: input.txt
DSA_20133_BuiDuyKhanh_20101702
DSA_20133_BuiTranLinh_20125640
DSA_20133_BuiVanKhanhDuy_20115499
DSA_20133_BuiVanQuan_20125730
DSA_20133_DANGTUNGQUAN_20115703
DSA_20133_DangVanToan_20115783
DSA_20133_DaoDieuThanh_20115770
DSA_20133_DinhHuyHung_20125577
DSA_20133_DoThiAnh_20115455
DSA_20133_DoVanTuan_20112412
DSA_20133_DngVnNhn_20136934
DSA_20133_Ha Minh Quyet_20122305
DSA_20133_HoangQuocViet_20112500
DSA_20133_Hoàng Minh Quyn_20125738
DSA_20133_LeHaiNam_20101907
DSA_20133_LuuAnhTai_20102116
DSA_20133_LyVanHieu_20115572
DSA_20133_LÊ MINH TRANG_20115796
DSA_20133_Lê Tun Anh_20104839
DSA_20133_Lê Ðc Anh_20115429
DSA_20133_LêCaoK_20115609
DSA_20133_LêVnHi_20090936
DSA_20133_Lu Trung Hiu _20101512
DSA_20133_LngVnAnh_20115434
DSA_20133_NguyenDaiPhong_20111979
DSA_20133_NguyenDangHoang_20101577
DSA_20133_NguyenDinhGiap_20121601
DSA_20133_NguyenDucDuy_20104833
DSA_20133_NguyenGiaVu_20112479
DSA_20133_NguyenHoangSon_20112073
DSA_20133_NguyenHuyHieu_20102652
DSA_20133_NguyenHuyHoang_20121749
DSA_20133_NGUYENHUYMEN_20136928
DSA_20133_NguyenManhSang_20115724
DSA_20133_NGUYENNGOCHIEU_20115573

File đầu ra output.txt

Tong so bai nop: 111
So bai nop trung binh: 4.05
Diem trung binh: 1.48
=================================
BuiDuyKhanh 20101702 5 2
BuiTranLinh 20125640 5 2


Điểm được tính theo số bài nộp theo công thức sau

5 bài : 2 điểm
4 bài : 1.5 điểm
3 bài: 1 điểm
2 bài 0.5 điểm
<=1 bài: 0 điểm

Download Data
https://drive.google.com/folderview?id=0B5nb3v94xY_WSVBzWnctQW9qeDA&usp=sharing


Bài 2. Xây dựng chương trình hiển thị giờ hiện tại của hệ thống

Yêu cầu: Viết chương trình hiển thị giờ hiện tại của hệ thống dưới dạng số dùng các ký hiệu giống dạng LED điện tử

12:35:00

*   ****         ****    ****        ****    ****
*         *           *    *           *     *   *    *
*   ****         ****    ****       *    *   *    *
*   *                 *          *     *     *   *    *
*   ****         ****    ****        ****    ****

Độ dài của mỗi số có thể thay đổi trong khoảng (5-9)

Bài 3. Xây dựng chương trình đọc số 

Mục đích: đọc số

123 -> mot tram hai muoi ba
12454 -> muoi hai nghin buon tram nam muoi bon
1013.678 -> mot nghin khong tram muoi ba phay sau tram bay tam

Các số này sẽ được nhập từ file hoặc bàn phím, kết quả sẽ được in ra màn hình và file tương ứng

Số được đọc có định dạng: số thực, phần nguyên tối đa 11 chữ số và phần thập phân tối đa 4 chữ số

XX XXX XXX XXX.YYYY

Bài 4. Xây dựng một chương trình quản lý danh ban tương tự chương trình quản lý danh bạ trên điện thoại.
Thông tin contact được lưu vào file (khi hiển thị sẽ được đọc ra từ file)
Các trường của một contact gồm

  • họ tên
  • giới tính
  • sdt
  • địa chỉ
  • email
Chương trình hỗ trợ tìm kiếm đơn giản theo họ tên hoặc địa chỉ

Bài 5. xây dựng tiện ích tìm kiếm các file trên windows 

Đầu vào là một pattern (một từ hoặc một phần tên file), và một thư mục sẽ tìm kiếm
Đầu ra là danh sách các file (kèm đường dẫn) mà có tên file chứa pattern

VD. pattern là ".mp3", và đường dẫn là C:\musics

Thì chương trình sẽ đưa ra tất cả các file có tên chứa ".mp3" trong phần tên của thư mục trên


Bài 6. Xây dựng chương trình tính và hiển thị góc giữa kim giờ và kim phút của đồng hồ.

VD. 9:00 thì kim giờ ở vị trí 9 và kim phút ở vị trí 10 -> góc là 90o
6:00 thì góc là 180o
(chỉ cần tính góc <=180o)

Đầu vào: Một giờ bất kỳ
Đầu ra: Góc giữa hai kim

Bài 7. Xây dựng chương trình tìm kiếm các tên riêng trong văn bản

Đầu vào: một file văn bản chứa một đoạn văn bản bằng tiếng anh lấy trên trang báo nước ngoài
Đầu ra: Danh sách các tên riêng xuất hiện trong văn bản đó và tần số

VD. Văn bản đầu vào là

"Come out of the shadows and get right with the law," urged President Barack Obama in a televised address.
Republicans say the action, without Congress, is beyond his authority and relations will now be poisoned.
There are about 11m illegal immigrants in the US and this year children coming across the border prompted a crisis.
Under the plan, undocumented parents of children who are US citizens or legal residents will be able to apply for work permits lasting three years.
Only parents who have lived in the US for five years will qualify - about 3.7m people are estimated to fit this criteria.

Các tên riêng và tần số xuất hiên tương ứng

President Barack Obama 1
Republicans 1
Congress 1
US 3



Bài 8. Thống kê số lượng câu, từ và độ dài của văn bản
Đầu vào: một file văn bản chứa một đoạn văn bản bằng tiếng anh lấy trên trang báo nước ngoài
Đầu ra: Số lượng câu, số lượng từ, số lượng ký tự, độ dài trung bình của một câu, một từ

Các từ trong tiếng nah được ngăn cách bởi dấu các trống và các dấu câu

Tuesday, September 9, 2014

Một số card màn hình thế hệ mới - THDC_SIE_20141_TRANTHIPHUONG_20138355 baitaptuan3


Máy tính bảng và giáo dục phổ thông - THDC_SIE_20141_VũMinhTrí_20138474 baitaptuan3


Thực trạng thương mại điện tử ở Việt Nam - THDC_SIE_20141_VuTuanAnh_20138730 Baitaptuan3


Thực trạng thương mại điện tử ở Việt Nam - THDC_SIE_nguyenhoangphong_20138639 baitaptuan3

I. Khó khăn khách quan
1. Thị phần nhỏ bé
Hiện nay chỉ mới được khoảng hơn 2 triệu khách hàng mua hàng qua TMĐT – con số quá bé so với hơn 35 triệu người dùng Internet và dân số 90 triệu người dân Việt Nam.
Nếu xét về doanh số, tại Việt Nam rất khó thống kê chính xác nhưng ước tính đạt khoảng gần $500 triệu trong năm 2012. Đem so với các cường quốc về TMĐT trên thế giới như Mỹ (343 tỷ), Nhật (127 tỷ), Anh (124 tỷ) và Trung Quốc (110 tỷ) thì thị trường TMĐT thật quá nhỏ bé.
Chính vì thị phần bé như vậy, nên khi triển khai mô hình TMĐT cụ thể, việc lựa chọn đối tượng khách hàng khá khó khăn và phải rất thận trọng để đưa ra mô hình phục vụ phù hợp với phân khúc khách hàng mình lựa chọn.
Khi triển khai mô hình TMĐT cụ thể, việc lựa chọn đối tượng khách hàng khá khó khăn và phải rất thận trọng để đưa ra mô hình phục vụ phù hợp.

2. Thói quen mua hàng
Vẫn tâm lý ra cửa hàng tạp hoá đầu ngõ để mua những đồ dùng thiết yếu hay ra các cửa hàng offline để mua sắm các đồ dùng, đồ thời trang và đồ công nghệ.
- Thói quen thích nhìn tận mắt, sờ tận tay
- Thói quen thanh toán bằng tiền mặt

3. Niềm tin
Người tiêu dùng tại Việt Nam vẫn chưa đặt niềm tin vào mua sắm trực tuyến, họ vẫn có cái nhìn thiếu thiện cảm với các hình thức kinh doanh trên mạng. Thực tế, có rất nhiều khách hàng phản ánh rằng sản phẩm họ nhận được khác xa với những gì họ nhìn thấy trên website, do vậy niềm tin vào TMĐT cũng bị lung lay.
Nguyên nhân của thực trạng này là do TMĐT đang bị lạm dụng, bóp méo bởi sự làm ăn thiếu chuyên nghiệp của các đơn vị cung cấp sản phẩm. Điển hình như vụ việc MB24 đã lợi dụng danh nghĩa TMĐT để phục vụ lợi ích riêng cho mình khiến cho khách hàng hiểu sai về TMĐT.
Một số khác thì dùng kênh TMĐT để phân phối hàng giả, hàng nhái kém chất lượng nhằm qua mắt người tiêu dùng – một cách làm ăn rất chụp giựt.

4. Hạ tầng thanh toán
- Thanh toán qua thẻ còn ít
- Các bước thanh toán qua internet banking rắc rối và không nhất quán giữa các ngân hàng
- Thẻ chủ yếu dùng để nhận lương và rút tiền tại ATM
- Chi phí giao dịch cao
- Hình thức thanh toán chưa đa dạng
- Cơ chế hoàn tiền còn chậm và chưa rõ ràng
- Hành lang pháp lý còn lỏng lẻo

5. Dịch vụ giao nhận
- Chưa có đơn vị thứ 3 thực sự chuyên nghiệp để đảm bảo tốt dịch vụ giao nhận mà không ảnh hưởng đến chất lượng phục vụ, hầu hết các đơn vị làm TMĐT đều phải tự xây dựng đội ngũ giao nhận để nắm quyền chủ động trong việc kiểm soát và điều phối hiệu quả cũng như chất lượng phục vụ khách hàng.
- Do đặc thù địa lý Việt Nam trải dài, mặt khác volume thị trường còn bé đồng thời việc tự tổ chức đội ngũ giao nhận khiến cho chi phí giao nhận rất cao, chiếm từ 10-15% giá trị của 1 giao dịch.

6. Vốn đầu tư
Đầu tư vào TMĐT là dài hạn và đốt tiền, thậm chí đốt rất nhiều tiền. Chi phí cho nhân sự, marketing, stock hàng là những chi phí rất lớn. Nếu không có khoản đầu tư lớn thì chỉ đi được nửa đường là chết, khi mà lợi nhuận chưa thể bù đắp cho khoản tiền đầu tư để educate thị trường, để làm brand và hoàn thiện quy trình.
Do vậy bạn nào đang hi vọng làm TMĐT sẽ thu lời được ngay thì tốt nhất đừng dấn thân vào TMĐT làm gì. Theo nguồn tin cá nhân thì tất cả các đơn vị đang đầu tư cho TMĐT tại Việt Nam thì chưa có đơn vị nào có lãi (trừ một số dự án vertical e-commerce), mà ngược lại số tiền đầu tư đã lên đến hàng triệu đô.

II. Khó khăn chủ quan
Xét một cách toàn diện thì các đơn vị làm TMĐT vẫn đang ở tâm lý vừa làm vừa thăm dò thị trường và tìm cách phản ứng để phù hợp với tâm lý người tiêu dùng. Do vậy việc triển khai khó có thể diễn ra bài bản ngày từ đầu và xuyên suốt trong quá trình hoạt động.
Mặt khác, rất nhiều đơn vị làm TMĐT vẫn chưa hiểu rõ thấu đáo sự khác biệt của TMĐT với bán hàng offline truyền thống, vẫn bê nguyên tư duy vận hành offline lên online, dẫn đến sự phản ứng chậm chạp, thiếu chuyên nghiệp và không phát huy hết lợi thế của online, chưa đánh trúng tâm lý của người tiêu dùng online.
Người tiêu dùng online có những hành vi và tâm lý mua hàng khác với người tiêu dùng offline. Người làm TMĐT cần hiểu rõ tâm lý đối tượng khách hàng của mình để có thể đưa ra những phương thức phục vụ phù hợp.


III. Kết luận
Để triển khai TMĐT thành công, bạn phải hiểu rất rõ về những gì bạn đang có và hiểu rõ về ngành hàng cũng như phân khúc khách hàng bạn đang nhắm tới, nhằm phát triển và chiếm tối đa thị phần trong mảng mình kinh doanh.
Chất lượng dịch vụ và kiểm soát tồn kho, thất thoát là hai khó khăn lớn nhất trong việc triển khai TMĐT nhưng nó lại là yếu tố sống còn để quyết định mô hình TMĐT của bạn có thành công hay không.


Ví dụ khó khan trong một số mô hình TMĐT
a. Mô hình sàn giao dịch
- Người dùng thường tìm đến các website có nhiều tin để đọc, và ngược lại người bán cũng tìm đến website có nhiều người đọc để đăng tin rao. Do đó, khi thiết lập mới một sàn giao dịch TMĐT, cần phải có được ngay lượng thông tin phong phú để thu hút người đọc, đặc biệt việc làm SEO sẽ giúp cho website có được nguồn traffic tự nhiên cực lớn
- Giao dịch trên các sàn giao dịch hầu như không có, mà đó chỉ là nơi người bán và người mua gặp nhau, sau đó tự liên lạc và thoả thuận hình thức bán hàng và thanh toán. Vì thế độ tin cậy sẽ không cao.
- Bài toán kiếm tiền từ mô hình này khá đơn giản, khiến cho việc muốn tăng mạnh doanh số rất khó khăn. Các mô hình tiêu biểu bao gồm: bán banner quảng cáo, bán tin VIP, bán lượt hiển thị các trang đầu

b. Mô hình website bán lẻ
- Khó khăn lớn nhất của mô hình này là kiểm soát hàng tồn kho. Để hàng tồn kho quá lâu và không có sự kiểm soát chặt chẽ và thường xuyên thì tất cả những khoản lãi thu được đều không đủ để bù lỗ cho chi phí hàng tồn kho
- Khó khăn thứ 2 là tạo được sự tin cậy và minh bạch về thông tin hàng hoá, giá cả, để cho tỷ lệ chuyển đổi (CR) phải luôn ở mức cao nhất nhằm tiết kiệm chi phí marketing, nâng cao hiệu quả bán hàng. Theo kinh nghiệm của tôi thì các website TMĐT phải đảm bảo tỷ lệ chuyển đổi ở mức tối thiểu 1% (CR=1%), có nghĩa là 100 người truy cập vào website của bạn thì ít nhất phải có 1 người mua hàng. Nhưng thực tế rất ít đơn vị đầu tư cho việc tracking hiệu quả và liên tục cải tiến để tăng CR.
- Khó khăn thứ 3 là đảm bảo chất lượng dịch vụ logistic từ khâu giao hàng, hỗ trợ sau bán, bảo hành, đổi trả hàng hoá đều phải chính xác, thân thiện và nhanh chóng. Mỗi nhân viên giao hàng, nhân viên CSKH đều phải là đại sứ bán hàng của công ty.
- Khó khăn thứ 4 là về margin, nếu bạn bán được nhiều thì các nhà phân phối mới chiết khấu cao cho bạn, nếu không thì % chiết khấu sẽ thấp và khó cạnh tranh về giá với đối thủ và thị trường offline. Ngược lại, nếu bạn để giá cao thì khó bán hàng, dẫn đến sản lượng thấp. Do vậy bạn cần cân đối thật chắc chắn về chính sách giá cũng như doanh số bán hàng.
- Khó khăn thứ 5 là cá lớn nuốt cá bé. Các ông lớn sẵn sàng vung tiền để phủ thị trường, để đạt quy mô và được giá tốt, lúc này việc cạnh tranh giữa các đơn vị quy mô nhỏ sẽ khó khăn hơn rất nhiều.


c. Mô hình website khuyến mãi, giảm giá
Ở mô hình này thì ngoài khó khăn như mô hình website bán lẻ, nó còn có khó khăn rất lớn đó là làm việc và thuyết phục nhà cung cấp đồng ý giảm giá ở mức đủ để hấp dẫn khách hàng mà nhà cung cấp không được lỗ hoặc chỉ lỗ ít để mang lại nguồn thu cũng như khách hàng mới cho họ.
Khách hàng của mô hình này thông thường kém trung thành, nên việc giữ chân khách hàng là điều rất khó. Do vậy cần có những quyết định trong chiến lược để khai thác lợi nhuận ngắn hạn từ những khách hàng có được, tránh việc đầu tư dài hạn để lấy user với hi vọng sau đó sẽ khai thác từ tập khách hàng đó.

d. Mô hình website đấu giá trực tuyến
Rõ ràng rằng tại Việt Nam, mô hình này đang gặp rào cản rất lớn đó là thiếu niềm tin. Tôi không tin là tôi đấu giá có thể trúng với giá rẻ, tôi không tin các nhà cung cấp sẵn sàng cho đi sản phẩm của mình chỉ nhằm mục đích quảng bá… có hàng vạn lý do để người tham gia không tin vào hình thức này.
Để làm mô hình này thành công, trước hết website đấu giá phải đảm bảo mọi yếu tố đều minh bạch và show được nó cho khách hàng thấy để họ khỏi nghi ngờ chân gỗ hay sự thiếu trung thực.

e. Mô hình localize e-commerce và dịch vụ
- Về localize e-commerce, sự mở rộng thị trường rất khó khăn và chậm do yếu tố địa phương hoá. Mặt khác, yếu tố chất lượng dịch vụ được đặt lên hàng đầu. Do vậy áp lực về chất lượng dịch vụ rất lớn, đòi hỏi người làm mô hình này phải kiểm soát tốt, song song với đó là chi phí đầu tư cho dịch vụ phải cao thì mới đảm bảo được chất lượng theo yêu cầu. Ví dụ về mô hình gọi món online, nếu sau 30-45 phút mà không giao được đồ ăn cho khách thì khách sẵn sàng huỷ order ngay lập tức.

- Về các website dịch vụ như đặt bàn, đặt chỗ, đặt phòng khách sạn,… thì khó kiểm soát được chất lượng của nhà cung cấp. Bởi lẽ mô hình này chỉ là yếu tố trung gian kết nối khách hàng với merchant. Nếu merchant không làm hài lòng khách hàng thì sẽ khó chiêu dụ khách hàng quay lại sử dụng tiếp dịch vụ của website. Do vậy cần kết hợp với các merchant để cùng kiểm soát chất lượng dịch vụ của merchant.

Wednesday, September 3, 2014

Hệ thống nhúng THDC_SIE_20141_LeMinhNguyen_20138317

Bài tập tuần 2: Tìm hiểu về hệ thống nhúng

Hệ thống nhúng (Embedded system) là một thuật ngữ để chỉ một hệ thống có khả năng tự trị được nhúng vào trong một môi trường hay một hệ thống mẹ. Đó là các hệ thống tích hợp cả phần cứng và phần phềm phục vụ các bài toán chuyên dụng trong nhiều lĩnh vực công nghiệp, tự động hoá điều khiển, quan trắc và truyền tin. Đặc điểm của các hệ thống nhúng là hoạt động ổn định và có tính năng tự động hoá cao.

Nói một cách đơn giản khi một hệ tính toán (có thể là PC, IPC, PLC, vi xử lý, vi hệ thống, DSP vv…) được nhúng vào trong một sản phẩm hay một hệ thống một cách hữu cơ và thực hiện một số chức năng cụ thể của hệ thống thì ta gọi đó là một hệ thống nhúng. Ví dụ quanh ta có rất nhiều sản phẩm nhúng như lò vi sóng, nồi cơm điện, điều hoà, điện thoại di động, ô tô, máy bay, tàu thuỷ, các đầu đo cơ cấu chấp hành thông minh vv. Ta có thể thấy hiện nay hệ thống nhúng có mặt ở mọi lúc mọi nơi trong cuộc sống của chúng ta.            Các nhà thống kê trên thế giới đã thống kê được rằng số chip vi xử lý ở trong các máy PC và các server, các mạng LAN, WAN, Internet chỉ chiếm không đầy 1% tổng số chip vi xử lý có trên thế giới. Hơn 99% số vi xử lý còn lại nằm trong các hệ thống nhúng.Như vậy công nghệ thông tin không chỉ đơn thuần là PC, mạng LAN, WAN và Internet như nhiều người thường nghĩ. Đó chỉ là bề nổi của một tảng băng chìm. Phần chìm của công nghệ thông tin chính là các ứng dụng của các hệ nhúng có mặt trong mọi ngành nghề của đời sống xã hội hiện nay.            Các hệ nhúng được tích hợp trong các thiết bị đo lường điều khiển và các sản phẩm cơ điện tử tạo nên đầu não và linh hồn của sản phẩm.Trong các hệ nhúng, hệ thống điều khiển nhúng đóng một vai trò hết sức quan trọng.            Hệ điều khiển nhúng là hệ thống mà máy tính được nhúng vào vòng điều khiển của sản phẩm nhằm điều khiển một đối tượng, điều khiển một qúa trình công nghệ đáp ứng các yêu cầu đặt ra. Hệ thống điều khiển nhúng lấy thông tin từ các cảm biến, xử lý tính toán các thuật điều khiển và phát tín hiệu điều khiển cho các cơ cấu chấp hành.            Khác với các hệ thống điều khiển cổ điển theo nguyên lý thuỷ lực, khí nén, rơ le, mạch tương tự, hệ điều khiển nhúng là hệ thống điều khiển số được hình thành từ những năm 1960 đến nay. Trước đây các hệ điều khiển số thường do các máy tính lớn đảm nhiệm, ngày nay chức năng điều khiển số này do các chip vi xử lý, các hệ nhúng đã thay thế. Phần mềm điều khiển ngày càng tinh sảo tạo nên độ thông minh của thiết bị và ngày càng chiếm tỷ trọng lớn trong giá thành của thiết bị.            Như vậy không phải tất cả các sản phẩm đo lường và điều khiển đều là các hệ nhúng. Hiện nay chúng ta còn gặp nhiều hệ thống điều khiển tự động hoạt động theo nguyên tắc cơ khí, thuỷ lực, khí nén, rơ le, hoặc diện tử tương tự…            Ngược lại phần lớn các sản phẩm cơ điện tử hiện nay đều có nhúng trong nó các chip vi xử lý hoặc một mạng nhúng. Ta biết rằng cơ điện tử là sự cộng năng của các công nghệ cơ khí, điện tử, điều khiển và công nghệ thông tin. Sự phối hợp đa ngành này tạo nên sự vượt trội của các sản phẩm cơ điện tử.         Sản phẩm cơ điện tử ngày càng tinh sảo và ngày càng thông minh mà phần hồn của nó do các phần mềm nhúng trong nó tạo nên. Các sản phẩm cơ điện tử là các sản phẩm có ít nhất một quá trình cơ khí (thường là một quá trình chuyển động), là đối tượng để điều khiển do vậy các sản phẩm cơ điện tử ngày nay thường có các hệ nhúng trong nó nhưng ngược lại không phải hệ thống nhúng nào cũng là một hệ cơ điện tử.


Các đặc điểm của hệ thống nhúng
Hệ thống nhúng thường có một số đặc điểm chung như sau:
• Các hệ thống nhúng được thiết kế để thực hiện một số nhiệm vụ chuyên dụng chứ không phải đóng vai trò là các hệ thống máy tính đa chức năng. Một số hệ thống đòi hỏi ràng buộc về tính hoạt động thời gian thực để đảm bảo độ an toàn và tính ứng dụng; một số hệ thống không đòi hỏi hoặc ràng buộc chặt chẽ, cho phép đơn giản hóa hệ thống phần cứng để giảm thiểu chi phí sản xuất.
• Một hệ thống nhúng thường không phải là một khối riêng biệt mà là một hệ thống phức tạp nằm trong thiết bị mà nó điều khiển.
• Phần mềm được viết cho các hệ thống nhúng được gọi là firmware và được lưu trữ trong các chip bộ nhớ ROM hoặc bộ nhớ flash chứ không phải là trong một ổ đĩa. Phần mềm thường chạy với số tài nguyên phần cứng hạn chế: không có bàn phím, màn hình hoặc có nhưng với kích thước nhỏ, dung lượng bộ nhớ thấp Sau đây, ta sẽ đi sâu, xem xét cụ thể đặc điểm của các thành phần của hệ thống nhúng.

- Giao diện
Các hệ thống nhúng có thể không có giao diện (đối với những hệ thống đơn nhiệm) hoặc có đầy đủ giao diện giao tiếp với người dùng tương tự như các hệ điều hành trong các thiết bị để bàn. Đối với các hệ thống đơn giản, thiết bị nhúng sử dụng nút bấm, đèn LED và hiển thị chữ cỡ nhỏ hoặc chỉ hiển thị số, thường đi kèm với một hệ thống menu đơn giản.
Còn trong một hệ thống phức tạp hơn, một màn hình đồ họa, cảm ứng hoặc có các nút bấm ở lề màn hình cho phép thực hiện các thao tác phức tạp mà tối thiểu hóa được khoảng không gian cần sử dụng; ý nghĩa của các nút bấm có thể thay đổi theo màn hình và các lựa chọn. Các hệ thống nhúng thường có một màn hình với một nút bấm dạng cần điểu khiển (joystick button). Sự phát triển mạnh mẽ của mạng toàn cầu đã mang đến cho những nhà thiết kế hệ nhúng một lựa chọn mới là sử dụng một giao diện web thông qua việc kết nối mạng. Điều này có thể giúp tránh được chi phí cho những màn hình phức tạp nhưng đồng thời vẫn cung cấp khả năng hiển thị và nhập liệu phức tạp khi cần đến, thông qua một máy tính khác. Điều này là hết sức hữu dụng đối với các thiết bị điều khiển từ xa, cài đặt vĩnh viễn. Ví dụ, các router là các thiết bị đã ứng dụng tiện ích này.

- Kiến trúc CPU
Các bộ xử lý trong hệ thống nhúng có thể được chia thành hai loại: vi xử lý và vi điều khiển. Các vi điều khiển thường có các thiết bị ngoại vi được tích hợp trên chip nhằm giảm kích thước của hệ thống. Có rất nhiều loại kiến trúc CPU được sử dụng trong thiết kế hệ nhúng như ARM, MIPS, Coldfire/68k, PowerPC, x86, PIC, 8051, Atmel AVR, Renesas H8, SH, V850, FR-V, M32R, Z80, Z8 … Điều này trái ngược với các loại máy tính để bàn, thường bị hạn chế với một vài kiến trúc máy tính nhất định. Các hệ thống nhúng có kích thước nhỏ và được thiết kế để hoạt động trong môi trường công nghiệp thường lựa chọn PC/104 và PC/104++ làm nền tảng. Những hệ thống này thường sử dụng DOS, Linux, NetBSD hoặc các hệ điều hành nhúng thời gian thực như QNX hay VxWorks. Còn các hệ thống nhúng có kích thước rất lớn thường sử dụng một cấu hình thông dụng là hệ thống on chip (System on a chip – SoC), một bảng mạch tích hợp cho một ứng dụng cụ thể (an application-specific integrated circuit – ASIC). Sau đó nhân CPU được mua và thêm vào như một phần của thiết kế chip. Một chiến lược tương tự là sử dụng FPGA (field-programmable gate array) và lập trình cho nó với những thành phần nguyên lý thiết kế bao gồm cả CPU.

-Thiết bị ngoại vi
Hệ thống nhúng giao tiếp với bên ngoài thông qua các thiết bị ngoại vi, ví dụ như:
• Serial Communication Interfaces (SCI): RS-232, RS-422, RS-485...
• Synchronous Serial Communication Interface: I2C, JTAG, SPI, SSC và ESSI
• Universal Serial Bus (USB)
• Networks: Controller Area Network, LonWorks...
• Bộ định thời: PLL(s), Capture/Compare và Time Processing Units
• Discrete IO: General Purpose Input/Output (GPIO)

-Công cụ phát triển
Tương tự như các sản phẩm phần mềm khác, phần mềm hệ thống nhúng cũng được phát triển nhờ việc sử dụng các trình biên dịch (compilers), chương trình dịch hợp ngữ (assembler) hoặc các công cụ gỡ rối (debuggers). Tuy nhiên, các nhà thiết kế hệ thống nhúng có thể sử dụng một số công cụ chuyên dụng như:
• Bộ gỡ rối mạch hoặc các chương trình mô phỏng (emulator)
• Tiện ích để thêm các giá trị checksum hoặc CRC vào chương trình, giúp hệ thống nhúng có thể kiểm tra tính hợp lệ của chương trình đó.
• Đối với các hệ thống xử lý tín hiệu số, người phát triển hệ thống có thể sử dụng phần mềm workbench như MathCad hoặc Mathematica để mô phỏng các phép toán.
• Các trình biên dịch và trình liên kết (linker) chuyên dụng được sử dụng để tối ưu hóa một thiết bị phần cứng.
• Một hệ thống nhúng có thể có ngôn ngữ lập trình và công cụ thiết kế riêng của nó hoặc sử dụng và cải tiến từ một ngôn ngữ đã có sẵn.
Các công cụ phần mềm có thể được tạo ra bởi các công ty phần mềm chuyên dụng về hệ thống nhúng hoặc chuyển đổi từ các công cụ phát triển phần mềm GNU. Đôi khi, các công cụ phát triển dành cho máy tính cá nhân cũng được sử dụng nếu bộ xử lý của hệ thống nhúng đó gần giống với bộ xử lý của một máy PC thông dụng.

-Độ tin cậy
Các hệ thống nhúng thường nằm trong các cỗ máy được kỳ vọng là sẽ chạy hàng năm trời liên tục mà không bị lỗi hoặc có thể khôi phục hệ thống khi gặp lỗi. Vì thế, các phần mềm hệ thống nhúng được phát triển và kiểm thử một cách cẩn thận hơn là phần mềm cho máy tính cá nhân. Ngoài ra, các thiết bị rời không đáng tin cậy như ổ đĩa, công tắc hoặc nút bấm thường bị hạn chế sử dụng. Việc khôi phục hệ thống khi gặp lỗi có thể được thực hiện bằng cách sử dụng các kỹ thuật như watchdog timer – nếu phần mềm không đều đặn nhận được các tín hiệu watchdog định kì thì hệ thống sẽ bị khởi động lại.
Một số vấn đề cụ thể về độ tin cậy như:
• Hệ thống không thể ngừng để sửa chữa một cách an toàn, ví dụ như ở các hệ thống không gian, hệ thống dây cáp dưới đáy biển, các đèn hiệu dẫn đường,… Giải pháp đưa ra là chuyển sang sử dụng các hệ thống con dự trữ hoặc các phần mềm cung cấp một phần chức năng.
• Hệ thống phải được chạy liên tục vì tính an toàn, ví dụ như các thiết bị dẫn đường máy bay, thiết bị kiểm soát độ an toàn trong các nhà máy hóa chất,… Giải pháp đưa ra là lựa chọn backup hệ thống.
• Nếu hệ thống ngừng hoạt động sẽ gây tổn thất rất nhiều tiền của ví dụ như các dịch vụ buôn bán tự động, hệ thống chuyển tiền, hệ thống kiểm soát trong các nhà máy …

-  Một số ví dụ điển hình về hệ thống nhúng
o   Các hệ thống dẫn đường trong không lưu, hệ thống định vị toàn cầu, vệ tinh.
o   Các thiết bị gia dụng: tủ lạnh, lò vi sóng, lò nướng,…
o   Các thiết bị kết nối mạng: router, hub, gateway,…
o   Các thiết bị văn phòng: máy photocopy, máy fax, máy in, máy scan,…
o   Các thiết bị y tế: máy thẩm thấu, máy điều hòa nhịp tim,…
o   Các máy trả lời tự động 
o   Dây chuyền sản xuất tự động trong công nghiệp, robots.
Các hệ thống nhúng tạo cơ sở cho kỷ nguyên hậu PC (post-PC era), các hệ thống xử lý thông tin chuyển dần từ PC sang hệ thống nhúng cho các ứng dụng cụ thể.


NOTE: Đặt tên các thư mục con cho các tuần sai!

So sánh lập trình trên PC và lập trình trên di động - THDC_SIE_20141_LêĐắcToàn_20138452 baitaptuan2

Lập trình trên thiết bị di dộng:        
1,Giới thiệu:

Trong guồng quay hối hả của cuộc sống hiện nay, thiết bị di động với ưu thế nhỏ gọn nhưng tích hợp cả một thế giới văn phòng và giải trí mini đã nghiễm nhiên trở thành người bạn đồng hành thân thiết của hầu hết mọi người, đặc biệt là giới trẻ năng động. Với sự tăng trưởng mạnh mẽ của thị trường này, không chỉ các hãng sản xuất di động mà cả các nhà phân phối và những doanh nghiệp công nghệ khác cũng chen chân vào cuộc đua phát triển ứng dụng mobile để khai thác hết các tính năng của thiết bị di động đỉnh cao như: iPhone, iPad, Samsung Galaxy, Nokia Lumia, Blackberry, HTC, … Việt Nam cũng không nằm ngoài xu hướng này. Điều đó đặt ra một yêu cầu là phải có đội ngũ nhân sự lập trình giỏi để cho ra đời các tiện ích độc đáo và thiết thực, đáp ứng đòi hỏi ngày càng cao của người dung.
2,Khái niệm:
Trước hết thế nào là lập trình và lập trình là gì thì có thể hiểu đơn giàn là thiết bị máy móc (Devices) không tự biết phải làm gì đề phục vụ một nhu cầu nào đó của con người. Nó chỉ có thể làm những gì được định sẵn với khả năng thực hiện nhanh và chính xác hơn con người (Keeper sẽ nói về AI - Artificial Intelligence sau, AI = Trí tuệ nhân tạo; khái niệm giúp máy móc thiết bị tự quyết định và tự đưa ra giải pháp tùy tình huống mà không cần con người vạch sẵn) vậy nên chúng ta phải lập trình cho máy tính.
3,Cơ bản khi lập trình cho thiết bị di động:
Vì vậy nếu muốn thiết bị cho ra kết quả của phép nhân từ 2 con số thì người lập trình phải viết 1 đoạn code cung cấp cho thiét bị 2 variables(biến số) represents (đại diện) cho 2 con số muốn tính toán(Calculate) và cách thức (Method) để cho ra kết quả phép nhân. Thiết bị khi đó không cần biết 2 con số là gì mà nó chỉ biết khi người sử dụng nhập 2 con số và click Enter thì nó chỉ việc lấy 2 số này và áp dụng công thức đã được lập trình viên định sẵn và trả về kết quả. Như vậy nếu chỉ có công thức nhân mà không có công thức cộng trừ hay chia thì nó chỉ có thể cho ra kết quả nhân. Do đó muốn nó cho ra kết quả cộng trừ hay chia thì người lập trình buộc phải cung cấp thêm cho nó công thức công trừ hay chia.

Lập trình cho các thiết bị di động như Mobile Phones, Portable Devices, Mobility Devices...Được gọi là lập trình di động.

Tùy thuộc vào khả năng, tính chất của từng loại mobile devices mà có những cách lập trình, ngôn ngữ, môi trường khác nhau. Hiện tại phổ biến nhất vẫn là Java MIDP/CLDC technology.
Ngôn ngữ để sử dụng lập trình cho những thiết bị di động hỗ trợ MIDP/CLDC được gọi là Java J2ME(Java 2 Micro Edition) và nó khác với J2SE , J2EE ... ở chỗ nó chỉ có những API và cơ chế tương thích với MIDP/CLDC và vì thế mới chạy được trên thiét bị hỗ trợ MIDP/CLDC.

Bên cạnh đó còn có Android SDK (Java Dalvik), iPhone SDK (iPhone OS) là những Software Development Kit dùng đề phát triển phần mềm cho các thiết bị chạy hệ điều hành Android hay iPhone OS.

Với loại này thì syntax, API, library và môi trường hoàn toàn khác với J2ME, và muốn lập trình cho Android hay iPhone OS... thì bắt buộc phải xem tài liệu về nó chứ không thể đem source code của J2ME rồi bắt chạy trên Android hay iPhone và ngược lại.

Mỗi chủng loại có những tools và material khác nhau nhưng programming concept thì không khác nhau. Tất cả đều vẫn phải sử dụng những thuật toán(Algorithm) như 

if satisfy this condition, do something, else, do something else

Các vòng loop như:

while this condition is still true, keep doing something until this condition is false

Programming concept thì như nhau nhưng khác nhau về câu lệnh(syntax) và library vì mỗi chủng loại khác nhau sẽ có những loại tài nguyên khác nhau giống như Window và Mac có giao diện khác nhau vì nó có library khác nhau do đó không thể sử dụng Window library mà cho ra giao diện của Mac 

          
Lập trình trên PC
1,Khái niệm:
Một lập trình viên viết mã nguồn bằng một ngôn ngữ lập trình cụ thể.
Các ngôn ngữ lập trình khác nhau hỗ trợ các phong cách lập trình khác nhau (còn gọi là các phương pháp lập trình). Một phần của công việc lập trình là việc lựa chọn một trong những ngôn ngữ phù hợp nhất với bài toán cần giải quyết. Các ngôn ngữ lập trình khác nhau đòi hỏi lập trình viên phải xử lý các chi tiết ở các mức độ khác nhau khi cài đặt các thuật toán. Thông thường, điều này dẫn tới thỏa hiệp giữa thuận lợi cho việc lập trình và hiệu quả của chương trình (thỏa hiệp giữa "thời gian lập trình" và "và thời gian tính toán").
Ngôn ngữ lập trình duy nhất mà máy tính có thể thực thi trực tiếp là ngôn ngữ máy (còn gọi là "mã máy"). Thời kỳ đầu, tất cả các lập trình viên viết chương trình toàn bằng mã máy, nhưng hầu như không ai làm việc này nữa. Thay vào đó, các lập trình viên viết mã nguồn, và một máy tính (chạy một trình biên dịch, một trình thông dịch hoặc đôi khiassembler) dịch nó qua một hoặc vài bước để bổ sung đầy đủ các chi tiết, trước khi bản mã máy cuối cùng được thực thi trên máy tính đích. Thậm chí khi cần điều khiển mức thấp của máy tính đích, các lập trình viên viết bằng hợp ngữ. Các lệnh của ngôn ngữ này có tính gợi nghĩa và tương ứng một-một với các lệnh trong ngôn ngữ máy.
Một số ngôn ngữ, thay vì được dịch ra mã máy, lại được dịch ra dạng nhị phân p-code (hoặc byte-code). Có các trình thông dịch tương ứng để thực thi dạng nhị phân này. Bytecode được sử dụng trong ngôn ngữ lập trình Java của Sun Microsystems cũng như họ ngôn ngữ lập trình .NET gần đây của Microsoft  Visual Basic trước phiên bản.NET


Sự khác nhau: cơ bản đó là lập trình trên thiết bị di động ngày nay đang la xu thế và được ưa chuộng hơn nhờ tính năng cơ động của nó,đem lại sự tiện lợi cho người sử dụng,đồng thời dung lượng cũng như bộ nhớ của các thiết bị di động nhỏ hơn nên khi lập trình cần tối thiểu input và tối đa output.Tuy nhiên lập trình trên pc vẫn là 1 chương trình gốc,nền tảng cho các lập trình trên di động sau này.

Bảng mã unicode - THDC_SIE_20141_DoVuHiep_20138151 baitaptuan2


Máy tính nhúng,máy tính gắn trên đồ dùng - THDC_SIE_20141_DaoHoangGiang_20138624 bai tap tuan 2

Máy tính nhúng  là một thuật ngữ để chỉ một máy tính có khả năng tự trị được nhúng vào trong một môi trường hay một hệ thống mẹ. Đó là các hệ thống tích hợp cả phần cứng và phần mềm phục vụ các bài toán chuyên dụng trong nhiều lĩnh vực công nghiệp, tự động hoá điều khiển, quan trắc và truyền tin. Đặc điểm của các máy tính nhúng là hoạt động ổn định và có tính năng tự động hoá cao

Đặc điểm:
 
    -  Các hệ thống nhúng được thiết kế để thực hiện một số nhiệm vụ chuyên dụng chứ không phải đóng vai trò là các hệ thống máy tính đa chức năng. Một số hệ thống đòi hỏi ràng buộc về tính hoạt động thời gian thực để đảm bảo độ an toàn và tính ứng dụng; một số hệ thống không đòi hỏi hoặc ràng buộc chặt chẽ, cho phép đơn giản hóa hệ thống phần cứng để giảm thiểu chi phí sản xuất.
    -Một hệ thống nhúng thường không phải là một khối riêng biệt mà là một hệ thống phức tạp nằm trong thiết bị mà nó điều khiển.
   - phần cứng hạn chế: không có bàn phím, màn hình hoặc có nhưng với kích thước nhỏ, dung lượng bộ nhớ thấp Sau đây, ta sẽ đi sâu, xem xét cụ thể đặc điểm của các thành phần của hệ thống nhúng.
   -Có thể không có giao diện(đối với máy đơn giản) hay đẩy đủ giao diện tương tác với người dùng như trong hệ điều hành của máy đa năng

  -Kiến trúc CPU: Các bộ xử lý trong hệ thống nhúng có thể được chia thành hai loại: vi xử lý và vi điều khiển. Các vi điều khiển thường có các thiết bị ngoại vi được tích hợp trên chip nhằm giảm kích thước của hệ thống. Có rất nhiều loại kiến trúc CPU được sử dụng trong thiết kế hệ nhúng như ARM, MIPS, Coldfire/68k, PowerPC, x86, PIC, 8051, Atmel AVR, Renesas H8, SH, V850, FR-V, M32R, Z80, Z8 … Điều này trái ngược với các loại máy tính để bàn, thường bị hạn chế với một vài kiến trúc máy tính nhất định. Các hệ thống nhúng có kích thước nhỏ và được thiết kế để hoạt động trong môi trường công nghiệp thường lựa chọn PC/104 và PC/104++ làm nền tảng. Những hệ thống này thường sử dụng DOS, Linux, NetBSD hoặc các hệ điều hành nhúng thời gian thực như QNX hay VxWorks.
-Các hệ thống nhúng thường nằm trong các cỗ máy được kỳ vọng là sẽ chạy hàng năm trời liên tục mà không bị lỗi hoặc có thể khôi phục hệ thống khi gặp lỗi. Vì thế, các phần mềm hệ thống nhúng được phát triển và kiểm thử một cách cẩn thận hơn là phần mềm cho máy tính cá nhân. Ngoài ra, các thiết bị rời không đáng tin cậy như ổ đĩa, công tắc hoặc nút bấm thường bị hạn chế sử dụng. Việc khôi phục hệ thống khi gặp lỗi có thể được thực hiện bằng cách sử dụng các kỹ thuật như watchdog timer – nếu phần mềm không đều đặn nhận được các tín hiệu watchdog định kì thì hệ thống sẽ bị khởi động lại.


 Ứng dụng

Đèn giao thông                          đồng hồ                                                   Máy rút tiền

Nén dữ liệu là gì ? THDC_SIE_20141_DangVuDuc_20138674 baitaptuan2

1.     Nén dữ liệu là gì?
 Nén(compression) là phương pháp mã hoá dữ liệu số nhằm làm giảm dung lượng và giảm đòi hỏi băng thông để truyền đi.  Thực chất của việc này chính là sử dụng một thuật toán giúp loại bỏ những phần tử được cho là không có ích trên một nội dung đa phương tiện để làm cho nó nhỏ hơn. Có hai phương pháp nén căn bản: nén có thất thoát (lossy), trong đó một số dữ liệu sẽ bị mất khi các tập tin được giải nén; nén bảo toàn (lossless), không làm mất dữ liệu khi tập tin được phục hồi định dạng gốc.

* Nén mất dữ liệu (lossy compression): Hay gặp nhất trong công nghệ thông tin là nén hình ảnh và âm thanh. Có nhiều giải thuật được đặt ra để đáp ứng yêu cầu giảm thiểu kích thước của file ảnh sao cho vẫn duy trì được chất lượng ở mức độ chấp nhận được. Những giải thuật này đều dựa trên nền tảng là loại bớt những màu mà mắt người không hoặc khó cảm nhận được, chỉ giữ lại những màu chủ yếu thực sự ảnh hưởng tích cực lên khả năng cảm nhận màu của mắt. Nếu đã từng biên tập hình ảnh bằng Photoshop, bạn sẽ dễ dàng nhận thấy sự khác biệt khá lớn giữa bảng màu chuẩn và bảng màu dùng cho hình ảnh tải lên web, tức là hình nén đấy. Trong bảng màu web, các màu trung gian, chuyển tiếp đã bị lược bỏ mất, thay vào đó là các màu tương đương cận kề. Tuy 2 bảng màu này dễ phân biệt như vậy nhưng khi xem một hình ảnh bạn không dễ dàng nhận biết được đó là file .bmp (chưa nén), .gif hay .jpg (ảnh nén). Còn một cách nữa cũng sử dụng kiểu mất dữ liệu để nén hình là giảm độ phân giải, tức là bớt số điểm ảnh trên một inch (dots per inch - dpi). Cách này khi được sử dụng, tùy trường hợp mà phải gia giảm cho phù hợp. Độ phân giải cao quá thì phí chỗ, nhưng giảm đi nhiều quá thì bị “vỡ hình”.

Đối với âm thanh, có nhiều chuẩn nén khác nhau như: Windows Media, MP3, Real G2, Liquid Audio, ACC, nhưng thông dụng nhất hiện nay là MP3. Nén theo chuẩn MP3, kích thước file audio có thể được thu nhỏ đi 8 lần so với kích thước ban đầu. Để làm được như vậy, người ta sử dụng một kỹ thuật gọi là lấy mẫu âm, thử nghiệm rồi bỏ bớt những tone mà tai người không nghe được hoặc kém nhạy. Do đó, chất lượng âm của MP3 rất khó phân biệt với âm của đĩa CD chuẩn. Hiện nay một chuẩn cải tiến của MP3 là MP3pro còn làm hơn thế. Nó tiến hành mã hóa sóng âm có tần số thấp bằng kỹ thuật mp3 và tạo phần sóng có tần số cao bằng kỹ thuật SBR. Khi phát lại sẽ kết hợp 2 phần sóng này với nhau thành nguồn âm đầy đủ, khắc phục được tình trạng file MP3 mất âm tần số cao khi truyền tải bằng modem quay số.

* Nén không mất dữ liệu (lossless compression): Dữ liệu, đặc biệt là văn bản, đồ họa luôn chứa trong nó những chuỗi thông tin giống hệt nhau lặp đi lặp lại. Việc nén dữ liệu được thực hiện bằng cách thay thế nhiều ký tự thông tin lặp đi lặp lại bằng các ký tự khác, và tạo ra chỉ một bản sao của những đoạn dữ liệu bị lặp lại này. Cũng có cách khác tỉ mỉ hơn là dùng những mã có độ dài khác nhau mã hóa cho các ký tự khác nhau giúp cho các ký tự này chiếm ít chỗ hơn. Cách gì thì cách nhưng phải làm sao vừa thu nhỏ được kích thước file vừa giữ được sự toàn vẹn của dữ liệu.

2.     Ưu nhược điểm của các thuật toán nén dữ liệu:

2.1: Mã hóa độ dài hàng loạt (Run-length encoding):
Loại dư thừa đơn giản nhất trong một tập tin là các đường chạy dài gồm các kí tự lặp lại, điều này thường thấy trong các tập tin đồ hoạ bitmap, các vùng dữ liệu hằng của các tập tin chương trình, một số tập tin văn bản... 


Ví dụ, xét chuỗi sau: 
AAAABBBAABBBBBCCCCCCCCDABCBAAABBBBCCCD 
Chuỗi này có thể được mã hoá một cách cô đọng hơn bằng cách thay thế chuỗi kí tự lặp lại bằng một thể hiện duy nhất của kí tự lặp lại cùng với một biến đếm số lần kí tự đó được lặp lại. Ta muốn nói rằng chuỗi này gồm bốn chữ A theo sau bởi ba chữ B rồi lại theo sau bởi hai chữ A, rồi lại theo sau bởi năm chữ B... Việc nén một chuỗi theo phương pháp này được gọi là mã hoá độ dài loạt. Khi có những loạt dài, việc tiết kiệm có thể là đáng kể. Có nhiều cách để thực hiện ý tưởng này, tuỳ thuộc vào các đặc trưng của ứng dụng (các loạt chạy có khuynh hướng tương đối dài hay không ? Có bao nhiêu bit được dùng để mã hoá các kí tự đang được mã ?). 
Nếu ta biết rằng chuỗi của chúng ta chỉ chứa các chữ cái, thì ta có thể mã hoá biến đếm một cách đơn giản bằng cách xen kẻ các con số với các chữ cái. Vì vậy chuỗi kí tự trên được mã hoá lại như sau: 
4A3BAA5B8CDABCB3A4B3CD 
Ở ÐÂY "4A" có nghĩa là "bốn chữ A"... Chú ý là không đáng để mã hoá các loạt chạy có độ dài 1 hoặc 2 vì cần đến hai kí tự để mã hoá. 
Ðối với các tập tin nhị phân một phiên bản được tinh chế của phương pháp này được dùng để thu được sự tiết kiệm ÐÁNG KỂ. Ý tưởng ở đây là lưu lại các độ dài loạt, tận dụng sự kiện các loạt chạy thay đổi giữa 0 và 1 để tránh phải lưu chính các số 0 và 1 đó. Ðiều này giả định rằng có một vài loạt chạy ngắn (Ta tiết kiệm các bit trên một loạt chạy chỉ khi độ dài của đường chạy là lớn hơn số bit cần để biễu diễn chính nó trong dạng nhị phân), nhưng khó có phương pháp mã hoá độ dài loạt nào hoạt động thật tốt trừ phi hầu hết các loạt chạy đều dài. 
Việc mã hoá độ dài loạt cần đến các biễu diễn riêng biệt cho tập tin và cho bản đã được mã hoá của nó, vì vậy nó không thể dùng cho mọi tập tin, điều này có thể hoàn toàn bất lợi, ví dụ, phương pháp nén tập tin kí tự đã được đề nghị ở trên sẽ không dùng được đối với các chuỗi kí tự có chứa số. Nếu những kí tự khác được sử dụng để mã hoá các số đếm, thì nó sẽ không làm việc với các chuỗi chứa các kí tự đó. Giả sử ta phải mã hoá bất kì kí tự nào từ một bảng chữ cái cố định bằng cách chỉ dùng các kí tự từ bảng chữ cái đó. Ðể minh hoạ, giả sử ta phải mã hoá bất kì một chuỗi nào từ một chữ cái đó, ta sẽ giả định rằng ta chỉ có 26 chữ cái trong bảng chữ cái (và cả khoảng trống) để làm việc. 
Ðể có thể dùng vài chữ cái để biểu diễn các số và các kí tự khác biểu diễn các phần tử của chuỗi sẽ được mã hoá, ta phải chọn một kí tự được gọi là kí tự "Escape". Mỗi một sự xuất hiện của kí tự đó báo hiệu rằng hai chữ cái tiếp theo sẽ tạo thành một cặp (số đếm, kí tự) với các số đếm được biểu diễn bằng cách dùng kí tự thứ i của bảng chữ cái để biểu diễn số i. Vì vậy, chuỗi ví dụ của chúng ta sẽ được biểu diễn như sau với Q được xem là các kí tự "Escape" 
QDABBBAABQHCDABCBAAAQDBCCCD 
Tổ hợp của kí tự "Escape", số đếm và một kí tự lặp lại được gọi là một dãy Escape. Chú ý rằng không đáng để mã hoá các đường chạy có chiều dài ít hơn bốn kí tự, vì ít nhất là cần đến ba kí tự để mã hoá bất kì một loạt chạy nào. 
Trong trường hợp bản thân kí tự "Escape" xuất hiện trong dãy kí tự cần mã hoá ta sử dụng một dãy "Escape" với số đếm là 0 (kí tự space) để biểu diễn kí tự "Escape". Như vậy trong trường hợp kí tự "Escape" xuất hiện nhiều thì có thể làm cho tập tin nén phình to hơn trước. 


Phương pháp mã hoá độ dài loạt thường được áp dụng cho các tập tin đồ hoạ bitmap vì ở đó thường có các mảng lớn cùng màu được biểu diễn dưới dạng bitmap là các chuỗi bit có đường chạy dài. Trên thực tế, nó được dùng trong các tập tin .PCX, .RLE. 
"ABRACADABRA" 
Nếu mã hoá chuỗi trên trong dạng mã nhị phân 5 bit ta sẽ có dãy bit sau: 
00001000101001000001000110000100100000010001010010 00001 
Ðể giải mã thông điệp này, chỉ đơn giản là đọc ra 5 bits ở từng thời điểm và chuyển đổi nó tương ứng với việc mã hoá nhị phân đã được định nghĩa ở trên. Trong mã chuẩn này, chữ D xuất hiện chỉ một lần sẽ cần số lượng bit giống chữ A xuất hiện nhiều lần. 
Ta có thể gán các chuỗi bit ngắn nhất cho các kí tự được dùng phổ biến nhất, giả sử ta gán: A là 0, B là 1, R là 01, C là 10 và D là 11 thì chuỗi trên được biễu diễn như sau: 
0 1 01 0 10 0 11 0 1 01 0 
Ví dụ này chỉ dùng 15 bits so với 55 bits như ở trên, nhưng nó không thực sự là một mã vì phải lệ thuộc vào khoảng trống để phân cách các kí tự. Nếu không có dấu phân cách thì ta không thể giải mã được thông điệp này. Ta cũng có thể chọn các từ mã sao cho thông điệp có thể được giải mã mà không cần dấu phân cách, ví dụ như: A là 11, B là 00, C là 010, D là 10 và R là 011, các từ mã này gọi là các từ mã có tính prefix (Không có từ mã nào là tiền tố của từ mã khác). Với các từ mã này ta có thể mã hoá thông điệp trên như sau: 
1100011110101110110001111 
Với chuỗi đã mã hoá này ta hoàn toàn có thể giải mã được mà không cần dấu phân cách. Nhưng bằng cách nào để tìm ra bảng mã một cách tốt nhất ? Vào năm 1952, D.Huffman đã phát minh ra một cách tổng quát để tìm ra bảng mã này một cách tốt nhất. 
- Bước đầu tiên trong việc xây dựng mã Huffman là đếm số lần xuất hiện của mỗi kí tự trong tập tin sẽ được mã hoá. 
- Bước tiếp theo là xây dựng một cây nhị phân với các tần số được chứa trong các nút. Hai nút có tấn số bé nhất được tìm thấy và một nút mới được tạo ra với hai nút con là các nút đó với giá trị tần số của nút mới bằng tổng tần suất của hai nút con. Tiếp theo hai nút mới với tần số nhỏ nhất lại được tìm thấy và một nút mới nữa lại được tao ra theo cách trên. Lặp lại như vậy cho đến khi tất cả các nút được tổ hợp thành một cây duy nhất. 
- Sau khi có cây nhị phân, bảng mã Huffman được phát sinh bằng cách thay thế các tần số ở nút đáy bằng các kí tự tương ứng. 
-Ưu điểm: đạt được hệ số nén cao (Hệ số nén tuỳ thuộc vào cấu trúc của các tập tin).
Nguyên tắc hoạt động của nó như sau: 
- Một xâu kí tự là một tập hợp từ hai kí tự trở lên. 
- Nhớ tất cả các xâu kí tự đã gặp và gán cho nó một dấu hiệu (token) riêng. 
- Nếu lần sau gặp lại xâu kí tự đó, xâu kí tự sẽ được thay thế bằng dấu hiệu của nó. 
Phần quan trọng nhất của phương pháp nén này là phải tạo một mảng rất lớn dùng để lưu giữ các xâu kí tự đã gặp (Mảng này được gọi là "Từ điển"). Khi các byte dữ liệu cần nén được đem đến, chúng liền được giữ lại trong một bộ đệm chứa (Accumulator) và đem so sánh với các chuỗi đã có trong "từ điển". Nếu chuỗi dữ liệu trong bộ đệm chứa không có trong "từ điển" thì nó được bổ sung thêm vào "từ điển" và chỉ số của chuỗi ở trong "từ điển" chính là dấu hiệu của chuỗi. Nếu chuỗi trong bộ đệm chứa đã có trong "từ điển" thì dấu hiệu của chuỗi được đem ra thay cho chuỗi ở dòng dữ liệu ra. Có bốn qui tắc để thực hiên việc nén dữ liệu theo thuật toán LZW là: 
-qui tắc 1: 256 dấu hiệu đầu tiên được dành cho các kí tự đơn (0 - 0ffh). 
-qui tắc 2: Cố gắng so sánh với "từ điển" khi trong bộ đệm chứa đã có nhiều hơn hai kí tự. 
-qui tắc 3: Các kí tự ở đầu vào (Nhận từ tập tin sẽ được nén) được bổ sung vào bộ đệm chứa đến khi chuỗi kí tự trong bộ đệm chứa không có trong "từ điển". 
-qui tắc 4: Khi bộ đệm chứa có một chuỗi mà trong "từ điển" không có thì chuỗi trong bộ đệm chứa được đem vào "từ điển". Kí tự cuối cùng của chuỗi kí tự trong bộ đệm chứa phải ở lại trong bộ đệm chứa để tiếp tục tạo thành chuỗi mới. 
Các loạt chạy dài có thể được cắt ra để mã hoá bằng nhiều dãy Escape, ví dụ, một loạt chạy gồm 51 chữ A sẽ được mã hoá như QZAQYA bằng cách dùng trên. 
- Ưu điểm: tiết kiệm đáng kể dung lượng file sau khi nén, dùng được cho các đoạn bit dài.
- Nhược điểm: không thể dùng được cho mọi loại tập tin.


2.2: Huffman:

Các tập tin của máy tính được lưu dưới dạng các kí tự có chiều dài không đổi là 8 bits. Trong nhiều tập tin, xác suất xuất hiện các kí tự này là nhiều hơn các kí tự khác, từ đó ta thấy ngay rằng nếu chỉ dùng một vài bit để biểu diễn cho các kí tự có xác suất xuất hiện lớn và dùng nhiều bit hơn để biểu diễn cho các kí tự có xác suất xuất hiện nhỏ thì có thể tiết kiệm được độ dài tập tin một cách đáng kể. Ví dụ, để mã hoá một chuỗi như sau: 
-Nhược điểm: bên nhận muốn giải mã được thông điệp thì phải có một bảng mã giống như bảng mã ở bên gửi, do đó khi nén các tập tin bé hệ số nén không được cao. 

2.3: LZW (Lempel-Zip & Welch):
Phương pháp nén LZW được phát minh bởi Lempel - Zip và Welch. Nó hoạt động đựa trên một ý tưởng rất đơn giản là người mã hoá và người giải mã cùng xây dựng bản mã. 
-Ưu điểm: bên nhận có thể tự xây dựng bảng mã mà không cần bên gửi phải gửi kèm theo bản tin nén. 

2.4: Burrows-Wheelers transform:
-Ưu điểm: vẫn giữ nguyên giá trị gốc không thay đổi, chỉ hoán vị.
- Nhược điểm: do chỉ hoán vị, giữ nguyên giá trị gốc nên kích thước giảm không nhiều.

2.5:  Chuẩn H.264/MPEG-4:
-Ưu điểm: nén được các file đa dạng, chất lượng video tốt hơn mà vẫn tiết kiệm, có thể xuất ra các cấu hình khác nhau. 

Bảng mã Unicode là gì ? so sánh sự khác biệt của các bảng mã Unicode UTF7 , UTF 16 , UTF 32 , UTF 8 ? THDC_SIE_20141__Nguyễn Đức Tài_20138381 baitaptuan2

Bảng mã Unicode là gì ? so sánh sự khác biệt của các bảng mã Unicode UTF7 , UTF 16 , UTF 32 , UTF 8 ?
Trả lời
Bảng mã Unicode (hay còn gọi là bảng mã thống nhất , mã đơn nhất) :  là bộ mã chuẩn quốc tế được thiết kế để dùng làm bộ mã duy nhất cho tất cả các ngôn ngữ khác nhau trên thế giới, kể cả các ngôn ngữ sử dụng ký tự tượng hình phức tạp như tiếng Trung Quốc, tiếng Việt Nam , tiếng Thái Lan …  Vì những điểm ưu việt đó, Unicode đã và đang từng bước thay thế các bộ mã truyền thống, kể cả bộ mã tiêu chuẩn ISO 8859 và hiện đang được hỗ trợ trên rất nhiều phần mềm cũng như các trình ứng dụng, chẳng hạn Windows
Sự khác biệt giữa các bảng mã là :
UTF 8 : UTF-8 là một cách mã hóa để có tác dụng giống như UCS-4 (cũng là UTF-16), chứ không phải có code point nào khác. UTF-8 được thiết kế để tương thích với chuẩn ASCII. UTF-8 có thể sử dụng từ một (cho những ký tự trong ASCII) cho đến 6 byte để biểu diễn một ký tự.
Chính vì tương thích với ASCII, UTF-8 cực kỳ có lợi thế khi được sử dụng để bổ sung hỗ trợ Unicode cho các phần mềm có sẵn. Thêm vào đó, các nhà phát triển phần mềm vẫn có thể sử dụng các hàm thư viện có sẵn của ngôn ngữ lập trình C để so sánh (comparisons) và xếp thứ tự. (Ngược lại, để hỗ trợ các cách mã hóa 16 bit hay 32 bit như ở trên, một số lớn phần mềm buộc phải viết lại do đó tốn rất nhiều công sức. Một điểm mạnh nữa của UTF-8 là với các văn bản chỉ có một số ít các ký tự ngoài ASCII, hay thậm chí cho các ngôn ngữ dùng bảng chữ cái Latinh như tiếng Việt,tiếng Anh ,tiếng Đức ...; cách mã hóa kiểu này cực kỳ tiết kiệm không gian lưu trữ.
UTF-8 được thiết kế đảm bảo không có chuỗi byte của ký tự nào lại nằm trong một chuỗi của ký tự khác dài hơn. Điều này khiến cho việc tìm kiếm ký tự theo byte trong một văn bản là rất dễ dàng. Một số dạng mã hóa khác (như Shift-JIS) không có tính chất này khiến cho việc xử lý chuỗi ký tự trở nên phức tạp hơn nhiều. Mặc dù để thực hiện điều này đòi hỏi phải có độ dư (văn bản sẽ dài thêm) nhưng những ưu điểm mà nó mang lại vẫn nhiều hơn. Việc nén dữ liệu không phải là mục đích hướng tới của Unicode và việc này cần được tiến hành một cách độc lập.
Các quy định chính xác của UTF-8 như sau (các số bắt đầu bằng 0x là các số biểu diễn trong hệ thập lục phân )
·         Các ký tự có giá trị nhỏ hơn 0x80, sử dụng 1 byte có cùng giá trị.
·         Các ký tự có giá trị nhỏ hơn 0x800, sử dụng 2 byte: byte thứ nhất có giá trị 0xC0 cộng với 5 bit từ thứ 7 tới 11 (7th-11th least significant bits); byte thứ hai có giá trị 0x80 cộng với các bit từ thứ 1 tới thứ 6 (1st-6th least significant bits).
·         Các ký tự có giá trị nhỏ hơn 0x10000, sử dụng 3 byte: byte thứ nhất có giá trị 0xE0 cộng với 4 bit từ thứ 13 tới 16; byte thứ hai có giá trị 0x80 cộng với 6 bit từ thứ 7 tới 12; byte thứ ba có giá trị 0x80 cộng với 6 bit từ thứ 1 tới thứ 6.
·         Các ký tự có giá trị nhỏ hơn 0x200000, sử dụng 4 byte: byte thứ nhất có giá trị 0xF0 cộng với 3 bit từ thứ 19 tới 21; byte thứ hai có giá trị 0x80 cộng với 6 bit từ thứ 13 tới 18; byte thứ ba có giá trị 0x80 cộng với 6 bit từ thứ 7 tới thứ 12; byte thứ tư có giá trị 0x80 cộng với 6 bit từ thứ 1 tới thứ 6.
Hiện nay, các giá trị khác ngoài các giá trị trên đều chưa được sử dụng. Tuy nhiên, các chuỗi ký tự dài tới 6 byte có thể được dùng trong tương lai.
·         Chuỗi 5 byte sẽ lưu trữ được mã ký tự chứa đến 26 bit: byte thứ nhất có giá trị 0xF8 cộng với 2 bit thứ 25 và 26, các byte tiếp theo lưu giá trị 0x80 cộng với 6 bit có ý nghĩa tiếp theo.
·         Chuỗi 6 byte sẽ lưu trữ được mã ký tự chứa đến 31 bit: byte thứ nhất có giá trị 0xFC cộng với bit thứ 31, các byte tiếp theo lưu giá trị 0x80 cộng với 6 bit có ý nghĩa tiếp theo.

UTF 32 :
Cách đơn giản nhất để lưu trữ tất cả các 220+216 Unicode code points là sử dụng 32 bit cho mỗi ký tự, nghĩa là, 4 byte – do đó, cách mã hóa này được Unicode gọi là UTF 32 và ISO/IEC 10646 gọi là UCS-4 . Vấn đề chính của cách này là nó hao chỗ hơn 4 lần so với trước kia, do đó nó ít được dùng trong các vật nhớ ngoài (như đĩa, băng). Tuy nhiên, nó rất đơn giản, nên một số chương trình sẽ sử dụng mã hóa 32 bit bên trong khi xử lý Unicode.

UTF 16 :
UTF-16 là một cách mã hóa dùng Unicode 20 bit. Các ký tự trong BMP được diễn tả bằng cách dùng giá trị 16-bit của code point trong Unicode CCS. Có hai cách để viết giá trị 16 bit trong một dòng (stream) 8-bit. Có lẽ bạn đã nghe qua chữ endian. Big Endian có nghĩa là cho Most Significant Byte đi trước, tức là nằm bên trái – do đó ta có UTF-16BE. Còn Little Endian thì ngược lại, tức là Least Significant Byte đi trước – do đó ta có UTF-16LE. Thí dụ, giá trị 16-bit của con số Hex1234 được viết là Hex12 Hex34 trong Big Endian và Hex34 Hex12 trong Little Endian.
Những ký hiệu không nằm trong BMP được biểu diễn bằng cách dùng surrogate pair (cặp thay thế). Code points có giá trị từ U+D800 đến U+DFFF được dành riêng ra để dùng cho mục đích này. Trước hết, một code point có 20 bit được phân ra làm hai nhóm 10 bit. Nhóm Most Significant 10 bit được map vào một giá trị 10 bit nằm trong khoảng từ u+D800 đến u+DBFF. Nhóm Least Significant 10 bit được map vào một giá trị 10 bit nằm trong khoảng từ U+DC00 đến U+DFFF. Theo cách đó UTF-16 có thể biểu diễn được những ký hiệu Unicode có 20 bit.

UTF 7 :

Chuẩn hóa được ít dùng nhất có lẽ là UTF-7. Chuẩn MIME yêu cầu mọi thư điện tử phải được gửi dưới dạng ASCII cho nên các thư điện tử nào sử dụng mã hóa Unicode được coi là không hợp lệ. Tuy nhiên hạn chế này thường bị hầu hết mọi người bỏ qua. UTF-8 cho phép thư điện tử sử dụng Unicode và đồng thời cũng phù hợp với tiêu chuẩn. Các ký hiệu ASCII sẽ được giữ nguyên, tuy nhiên các ký tự khác ngoài 128 ký hiệu ASCII chuẩn sẽ được mã hóa bằng một sequence  hay một dấu '+' theo sau một ký tự Unicode được mã hóa bằng Base64, và kết thúc bằng một dấu '-'. Ký tự '+' nổi tiếng sẽ được mã hóa thành '+-'.

Tuesday, September 2, 2014

Tìm hiểu về Google THDC_20141_D3T_VuDangTuan_20134348 Baitaptuan1

          
Loại hình: Cổ phần
Ngành nghề: Internet, Phần mềm máy tính, Thiết bị viễn thông
Thành lập: Menlo Park, California, Hoa Kì
Năm thành lâp: Ngày 4 tháng 9 năm 1998
Trụ sở chính: Mountain View, California, Hoa Kì
Thành viên chủ chốt: Larry Page (Tổng Giám Đốc), Eric Emerson Schmidt (Chủ tịch điều hành), Sergey Brin (Giám Đốc điều hành)
Doanh thu: 37.905 tỷ USD (2011)
Lãi thực: 9.373 tỷ USD (2011)
Tổng số tài sản: 72.574 tỷ  USD (2011)
Tài sản cổ phần: 58.145 tỷ USD (2011)
Số nhân viên: 54.604 (2012)
Khẩu hiệu: Đừng làm quỷ dữ (Don’t be evil)
Giá cổ phiếu: 582,36 USD (29/8/2014)
Google là một công ty Internet có trụ sở tại Hoa Kỳ, được thành lập vào năm 1998. Sản phẩm chính của công ty này là công cụ tìm kiếm Google, được nhiều người đánh giá là công cụ tìm kiếm hữu ích và mạnh mẽ nhất trên Internet. Trụ sở của Google tên là "Googleplex" tại Mountain View, California. giám đốc không người nào khác đó là Larry Page, 1 trong 2 người sáng lập ra công ty. Tên "Google" là một lối chơi chữ của từ googol, bằng 10100. Google chọn tên này để thể hiện sứ mệnh của công ty để sắp xếp số lượng thông tin khổng lồ trên mạng. Googleplex, tên của trụ sở Google, có nghĩa là 10googol.
Đầu năm 2012, Google đứng đầu trong danh sách 100 công ty có môi trường làm việc tốt nhất ở Mỹ do tạp chí Fortune bình chọn với tỷ lệ tăng trưởng việc làm trong năm 2011 là 33%

Lịch sử hình thành
Năm 1996, Google là một công trình nghiên cứu của Larry Page  Sergey Brin, hai nghiên cứu sinh tại trường Đại học Stanford. Họ có giả thuyết cho rằng một công cụ tìm kiếm dựa vào phân tích các liên hệ giữa các website sẽ đem lại kết quả tốt hơn cách đang được hiện hành lúc bấy giờ (1996). Đầu tiên nó được gọi là BackRub (Gãi lưng) tại vì hệ thống này dùng các liên kết đến để ước tính tầm quan trọng của trang.
Page và Brin tin rằng những trang có nhiều liên kết đến nhất từ các trang thích hợp khác sẽ là những trang thích hợp nhất. Họ đã quyết định thử nghiệm giả thuyết trong nghiên cứu của họ, tạo nền móng cho công cụ Google hiện đại bây giờ (http://www.google.com). Tên miền www.google.com được đăng ký ngày 15 tháng 9 năm 1997. Họ chính thức thành lập công tyGoogle, Inc. ngày 7 tháng 9 năm 1998 tại một ga ra của nhà Esther Wojcicki (cũng là nhân viên thứ 16 của Google, Phó Chủ tịch cấp cao, phụ trách bộ phận quảng cáo) tại Menlo Park, California. Trong tháng 2 năm 1999, trụ sở dọn đến Palo Alto, là thành phố có nhiều trụ sở công ty công nghệ khác. Sau khi đổi chỗ hai lần nữa vì công ty quá lớn, trụ sở nay được đặt tại Mountain View, California tại địa chỉ 1600 Amphitheater Parkway vào năm 2003.
Công cụ tìm kiếm Google được nhiều người ủng hộ và sử dụng vì nó có một cách trình bày gọn và đơn giản cũng như đem lại kết quả thích hợp và nâng cao. Trong năm 2000, Google đã bắt đầu bán quảng cáo bằng từ khóa để đem lại kết quả thích hợp hơn cho người dùng. Những quảng cáo này chỉ dùng văn chứ không dùng hình để giữ chất đơn giản của trang và tránh sự lộn xộn và đồng thời để trang được hiển thị nhanh hơn.
Google nhận được bằng sáng chế cho kỹ thuật sắp xếp trang web PageRank ngày 4 tháng 9 năm 2001. Bằng đưa quyền cho Đại học Stanford và liệt kê Larry Page là người sáng chế.
Trong tháng 2 năm 2003 Google mua được Pyra Labs, công ty chủ của Blogger, một trong những website xuất bản weblog lớn nhất.
Đầu năm 2004, khi Google ở tột đỉnh, Google đã xử lý trên 80% số lượng tìm kiếm trên Internet qua website của họ và các website của khách hàng như Yahoo!, AOL, và CNN. Sau khi Yahoo! bỏ Google để dùng kỹ thuật họ tự sáng chế vào tháng 2 năm 2004, số này đã bị tuột xuống.
Phương châm của Google là "Không làm ác" (Don't be evil). Biểu trưng của họ có khi được sửa đổi một cách dí dỏm vào dịp những ngày đặc biệt như ngày lễ hay sinh nhật của một nhân vật quan trọng. Giao diện của Google gồm trên 100 ngôn ngữ, kể cả tiếng Việt và một số ngôn ngữ dí dỏm như tiếng Klingon  tiếng Leet. Vào ngày Cá tháng tư (tiếng Pháp: poisson d'avril, tiếng Anh: April Fool's Day) Google thường tung ra nhiều tin hài hước về công ty.
Phát hành cổ phiếu:
Vào tháng 1 năm 2004, Google tuyên bố đã thuê công ty Morgan Stanley  Goldman Sachs Group để tổ chức phát hành cổ phiếu lần đầu ra công chúng. Google chọn cách bán cổ phiếu bằng đấu giá, một điều hiếm có. Từ khi ra thị trường, giá Google đã lên đến gần $200 mỗi cổ phiếu từ $85 lúc đầu. Giá thị trường của Google đến nay là trên 100 tỷ đô la.

Sự phát triển
Khi thị trường ban đầu của công ty là trên thị trường web, Google đã bắt đầu thử nghiệm ở một số thị trường khác, ví dụ như Phát thanh hoặc Xuất bản. Ngày 17-1-2006, Google công bố rằng công ty đã mua lại công ty quảng cáo phát thanh dMarc, công ty đã sử dụng một hệ thống tự động, cho phép các công ty quảng cáo trên radio. Điều này sẽ giúp Google kết hợp 2 kênh quảng cáo truyền thông là Internet và Radio, với khả năng của Google, nhắm thẳng vào tâm lý khách hàng. Google cũng bắt đầu thử nghiệm bán quảng cáo trên các kênh quảng cáo offline của công ty, như trên báo và tạp chí, với các quảng cáo được lựa chon trên Chicago-Sun Times. Họ đã lấp được một chỗ trống không bán được trên tờ báo mà trước đấy thường được dùng vào việc quảng cáo nhà.
Google được đưa vào danh sách 500 S&P index ngày 30 tháng 3 năm 2006, chiếm vị trí của Burlington Resources, một nhà sản xuất dầu chính ở Houston.

(Trụ sở Google)

Các thương vụ mua bán và cộng tác
Các thương vụ mua bán:
Từ năm 2001, Google đã mua được nhiều công ty nhỏ mới thành lập, thường là công ty có nhiều sản phẩm và đội ngũ nhân viên tốt. Một trong những công ty mà Google mua lại sớm nhất là Pyra Labs. Họ chính là những người sáng tạo ra Blogger, một nền tảng của việc xuất bản weblog, giới thiệu lần đầu tiên vào năm 1999. Pyra Labs ban đầu được lập ra bởi Evan Williams, khi anh này rời Google vào năm 2004. Đầu năm 2006, Google mua lại Upstartle, một công ty chịu trách nhiệm xử lý từ ngữ trên mạng, Writely. Công nghệ của sản phẩm này rốt cuộc đã được Google sử dụng để tạo ra Google Docs & Spreadsheets.
Tháng 2 năm 2006, công ty phần mềm Adaptive Path bán Measure Map, một ứng dụng thống kê weblog cho Google.
Cuối năm 2006, Google mua lại trang web chia sẻ video trực tuyến YouTube với giá 1,65 tỷ USD bằng cổ phần. Không lâu sau, 31 tháng 10 năm 2006, Google công bố họ đã mua lại Jotspot, một nhà phát triển của công nghệ wiki cho các website cộng đồng.
Ngày 13 tháng 4 năm 2007, Google đạt được thỏa thuận mua lại DoubleClick. Google đã đồng ý mua lại công ty này với giá 3,2 tỷ USD.
Ngày 15 tháng 8 năm 2011, Google tuyên bố sẽ mua Motorola Mobility với giá 12,5 tỷ USD
Sự cộng tác:
Năm 2005, Google gia nhập hiệp hội với các công ty và tổ chức chính phủ khác để phát triển phần mềm và dịch vụ. Google công bố mối cộng tác với NASA Ames Reseach Center, xây dựng đến 1 triệu phòng chuyên trách và làm việc trong đề án nghiên cứu bao gồm Quản lý dữ liệu trên diện rộng, công nghệ nano, sắp xếp công việc sử dụng máy tính… Google cũng tham gia cộng tác với Sun Microsystem để chia sẻ và phân loại các công nghệ của nhau. Công ty cũng tham gia cộng tác với American Online của Time Warner để cải tiến dịch vụ video trực tuyến.
Năm 2007, Google và New Corp.’s Fox Interactive Media tham gia vào bản hợp đồng trị giá 900 triệu USD để phục vụ tìm kiếm vào quảng cáo trên trang mạng xã hội nổi tiếng,Myspace.
Ngày 22 tháng 3 năm 2010, Google rời khỏi thị trường khổng lồ Trung Quốc (tuy nhiên, các dịch vụ bản đồ trực tuyến và âm nhạc vẫn tiếp tục hoạt động). Google đóng cửa website google.cn, và thay vào đó chuyển tới trang google.com.hk để tránh bị kiểm duyệt nội dung. Nguyên nhân chính được cho là vì bất đồng quan điểm với chính quyền Trung Quốc. Ngày 30 tháng 3 năm 2010, mọi cách tìm kiếm bằng google (không chỉ google.cn mà còn các ngôn ngữ khác như google.co.jp. Google.com.au,..), bao gồm cả Google Mobile, đều bị chặn ở Trung Quốc. Hai dịch vụ như Google Mail và Google Maps không bị ảnh hưởng. Lệnh cấm được dỡ bỏ vào ngày hôm sau http://www.google.com/prc/report.html

Sản phẩm
Google hiện nay đã phát triển nhiều dịch vụ và công cụ cho cộng đồng chung cũng như trong lĩnh vực kinh doanh, bao gồm các ứng dụng Web, mạng lưới Quảng cáo và giải pháp kinh doanh.
Quảng cáo:
Phần lớn thu nhập của Google đến từ các chương trình Quảng cáo trực tuyến. Google AdWords cho phép các đối tượng có nhu cầu Quảng cáo đăng Quảng cáo của mình trên kết quả tìm kiếm của Google và trên Google Content Network qua phương thức cost-per-click (trả tiền qua số lần click vào Quảng cáo) hoặc cost-per-view (trả tiền qua số lần xem Quảng cáo). Chủ các trang web Google AdSense cũng có thể hiển thị quảng cáo trên trang của họ và kiếm tiền mỗi lần banner quảng cáo được Click.
Ứng dụng:
Google nổi tiếng bởi dịch vụ Tìm kiếm của nó, nhân tố chính dẫn đến thành công của Google. Vào tháng 12 năm 2006, Google là công cụ tìm kiếm được sử dụng nhiều nhất trên mạng chiếm 50,8% thị phần, vượt xa so với Yahoo (23,6 %) và Window Live Search (8,4%). Google liên kết với hàng tỷ trang web, vì thế người sử dụng có thể tìm kiếm thông tin mà họ muốn thông qua các từ khóa và các toán tử. Google cũng tận dụng công nghệ tìm kiếm của mình vào nhiều dịch vụ tìm kiếm khác, bao gồm Image Search (tìm kiếm ảnh),Google News, trang web so sánh giá cả Froogle, cộng đồng tương tác Google Groups, Google Maps và còn nhiều nữa.
Năm 2004, Google ra mắt dịch vụ email trên nền web, gọi là Gmail. Gmail hỗ trợ công nghệ lọc thư rác và khả năng sử dụng Công nghệ tìm kiếm của Google để tìm kiếm thư. Dịch vụ này tạo ra thu nhập bằng cách hiển thị quảng cáo từ dịch vụ AdWords mà phù hợp với nội dung của email hiển thị trên màn hình.
Đầu năm 2006, Google ra mắt dịch vụ Google Video, dịch vụ không chỉ cho phép người dùng tìm kiếm và xem miễn phí các video có sẵn mà còn cho người sử dụng hay các nhà phát hành khả năng phát hành nội dung mà họ muốn, kể cả các chương trình truyền hình trên CBS, NBA và các video ca nhạc. Nhưng đến tháng 8 năm 2007, Google đã đóng cửa trang web này trước sự cạnh tranh của đối thủ Youtube cũng thuộc sở hữu của công ty
Google cũng đã phát triển một số ứng dụng nhỏ gọn, bao gồm cả Google Earth, một chương trình tương tác sử dụng ảnh vệ tinh. Ngoài ra công ty còn phát triển nhiều gói phần mềm văn phòng trên ứng dụng web tên là Google Docs nhằm cạnh tranh thị phần với Microsoft Office.
Nhiều ứng dụng khác nữa có tại Google Labs, một bộ sưu tập những phần mềm chưa hoàn chỉnh. Chúng đang được thử nghiệm để có thể đưa ra sử dụng trong cộng đồng.
Google đã đẩy mạnh quảng bá sản phẩm của họ bằng nhiều cách khác nhau. Ở London, Google Space được cài đặt tại sân bay Healthrow, ra mắt nhiều sản phẩm mới, bao gồmGmail, Google Earth  Picasa. Ngoài ra, một trang web tương tự cũng được ra mắt cho sinh viên Mỹ dưới cái tên College Life, Powered by Google.
Vào ngày 2 tháng 9 năm 2008, Google đã thông báo sự xuất hiện của Google Chrome, một trình duyệt mã nguồn mở. Trình duyệt này được giới phân tích đánh giá sẽ là đối thủ cạnh tranh thị phần của Internet Explorer  Firefox.Cũng vào khoảng thời gian này Google Translate đã bổ sung thêm tiếng Việt trong dịch vụ dịch tự động của mình và tích hợp ngay trong công cụ tìm kiếm, giúp người sử dụng nhanh chóng hiểu được cơ bản nội dung trang web trình bày bằng tiếng nước ngoài.
Ngày 5 tháng 1 năm 2010, Google cho ra mắt điện thoại Nexus One, sản phẩm cộng tác với hãng điện thoại HTC. Nexus One chạy trên nền hệ điều hành Android 2.1 (cũng do hãng phát triển), được cho là đối thủ cạnh tranh ngang hàng với iPhone của Apple.
Sản phẩm phục vụ kinh doanh:
Năm 2007, Google giới thiệu Google Apps Premium Edition, một phần mềm phù hợp cho việc kinh doanh, cung cấp dịch vụ email, tin nhắn, lịch…như một chương trình bảng tính. Sản phẩm này chủ yếu nhắm tới người sử dụng là doanh nhân, dùng để cạnh tranh trực tiếp với bộ phần mềm Microsoft Office, với giá chỉ 50USD một năm cho một người sử dụng, so với giá 500USD cho một người sử dụng của Microsoft Office. Google có một số lượng lớn người sử dụng Google App với 38.000 người ở Đại học Lakehead tại Thunder Bay, Ontario, Canada.
Cũng vào năm 2007, Google đã mua lại công ty Postini và sẽ tiếp tục phát triển công nghệ mà họ mua được từ công ty này và đặt tên là Google Security Services.

Các dịch vụ chính
·         Blogger: Dịch vụ blog miễn phí của Google
·         Froogle: Tìm hàng hóa để mua (đã ngừng hoạt động, chuyển sang Google Products)
·         Gmail: Dịch vụ thư điện tử
·         Google Alerts: Nhận tin tức và kết quả tìm kiếm qua thư điện tử
·         Google Answers: Dịch vụ trả lời có lệ phí (đã ngừng hoạt động)
·         Google Apps: Kho ứng dụng dành cho doanh nghiệp
·         Google Buzz: Mạng xã hội (đã ngừng hoạt động)
·         Google Calendar: Ứng dụng lịch trực tuyến
·         Google Catalogs: Ứng dụng đưa các catalog (đã ngừng hoạt động, chuyển sang Google Book Search)
·         Google Code: Phát triển mã nguồn và lưu trữ các dự án mã nguồn mở
·         Google Docs: Công cụ soạn thảo văn bản, bảng tính và trình chiếu trực tuyến
·         Google Drive: Lưu trữ tập tin bằng điện toán đám mây (15Gb miễn phí)
·         Google Directory: Thư mục lấy từ Open Directory Project
·         Google Groups: Diễn đàn
·         Google Images Search: Tìm kiếm hình ảnh
·         Google Labs: Thử nghiệm các ứng dụng và công cụ mới
·         Google Language Tools Đã chuyển sang Google Translate
·         Google Local: Bản đồ địa phương (đã ngừng hoạt động, chuyển sang Google Maps)
·         Google Maps: Bản đồ, chỉ hướng, hình từ vệ tinh toàn thế giới. Dịch vụ này của Google cho phép tạo bản đồ cá nhân và yêu cầu có một tài khoản Google.
·         Google Mobile: Sử dụng Google trên điện thoại di động
·         Google News: Tin tức
·         Google Pages Creator: Upload, lưu trữ file, tạo trang web trực tuyến miễn phí (đã ngừng hoạt động, chuyển sang Google Sites)
·         Google Print: Phiên bản sách in cũ, hiện đã chuyển sang Google Book Search
·         Google Reader: Trình đọc tin trực tuyến
·         Google Scholar: Tìm kiếm kho học liệu
·         Google SMS: Dịch vụ gởi tin nhắn miễn phí (đã ngừng hoạt động)
·         Google Sites: Ứng dụng làm trang web miễn phí
·         Google Translate: Công cụ dịch thuật trực tuyến hỗ trợ 65 ngôn ngữ khác nhau (tính đến 01/2013)
·         Google Video: Đăng tải video (đã ngừng cho phép tải video mới, chuyển sang dịch vụ YouTube)
·         Google Web Accelerator: truy cập trang web nhanh hơn
·         Google Web Albums: Quản lý lưu trữ hình ảnh, xuất bản hình ảnh trên web
·         Google+: Mạng xã hội
·         iGoogle: Trang chủ Google cá nhân tùy biến (đã ngừng hoạt động vào ngày 1 tháng 11 năm 2013)
·         Panoramio: Mạng xã hội chia sẻ ảnh
·         Webmaster Tools: Công cụ quản lý trang web trên máy chủ tìm kiếm của Google
·         YouTube: Đăng tải video và ứng dụng xã hội với video
Chương trình
·         Google Adwords: Chương trình quảng cáo dành cho các doanh nghiệp muốn quảng cáo trên Google và các trang đối tác
·         Google Adsense: Dịch vụ dành cho đối tác muốn đưa quảng cáo Google lên trang web của mình
Ứng dụng để bàn
·         Google Deskbar
·         Google Desktop Search
·         Google Earth: xem bản đồ 3D của google
·         Orkut
·         Picasa: Lưu trữ ảnh
·         Google GO: Ngôn ngữ lập trình
·         Google Toolbar: thanh công cụ trên Internet Explorer
·         Google Chrome: Trình duyệt web
·         Google Sidewiki: Ghi chú và nhận xét về các trang web mà người dùng xem
·         Google Drive Client: Lưu trữ online


3 sản phẩm thành công của Google
Google Apps: Có nhiều tính năng nổi trội hơn IOS và Window Phone

 Google Search, Gmail