Vì đâu bạn làm việc chưa hết công suất?

Gần đây công việc của bạn luôn bê trễ, không trôi chảy, năng suất kém. Bạn cảm thấy như mình đang chững lại, cảm thấy bế tắc. Vì sao lại như vậy? Đã đến lúc bạn nên dành chút thời gian để đánh giá lại tình hình.

Nguyên nhân chính của sự thiếu năng suất đến từ chính bản thân bạn. Bạn đặt ra những mục tiêu phi lý, suy nghĩ tiêu cực, lạc hướng trong mục tiêu dài hạn và nguồn cảm hứng. Những yếu tố bên trong như vậy có thể ảnh hưởng tới động lực làm việc và cản trợ sự phát triển nghề nghiệp.

Dưới đây là một trong những nguyên nhân phổ biến nhất làm ảnh hưởng tới năng suất và một số lời khuyên để điều chỉnh:

Đặt mục tiêu mà không lập kế hoạch hành động cụ thể

Đặt mục tiêu ngắn và dài hạn là điều quan trọng nhưng như thế thôi là chưa đủ. Nếu bạn chỉ liệt kê các mục tiêu nghề nghiệp và dừng lại tại đó, động lực của bạn sẽ bị đẩy lùi với những yêu cầu và deadline hàng ngày. Năm tháng trôi qua và mục tiêu của bạn vẫn không đạt được.

Để tránh tình huống thiếu vui vẻ này, hãy thực tế hoá mục tiêu của bạn bằng một kế hoạch hành động cụ thể. Kế hoạch nên bao gồm những mục tiêu nhỏ và deadline ngắn hạn. Điều này giúp bạn theo nhịp và đảm bảo quá trình tiến triển.

Đặt mục tiêu quá cao hoặc quá thấp

Nếu bạn cảm thấy như đang chới với, không biết nên làm gì, đó có thể là do bạn hướng tới mục tiêu quá cao hoặc quá thấp. Khi lập mục tiêu không thực tế, bạn sẽ dễ cảm thấy chán nán và từ bỏ. Ngược lại, những mục tiêu quá đơn giản có thể khiến bạn thấy oải vì không có việc gì khác để làm nữa.

Để đặt ra một mục tiêu phù hợp, hãy đánh giá lại mục tiêu nghề nghiệp của bạn trong hoàn cảnh hiện tại. Dù vạch ra điều mình muốn và sẽ làm trong 5 – 10 năm tới không phải chuyện đơn giản nhưng hãy bắt đầu từ hiện tại, bạn đã đạt được mục tiêu gì mình đề ra từ vài năm trước. Kết quả hiện tại sẽ xác định điều bạn muốn và có thể đạt được trong tương lai.

Mắc kẹt trong những suy nghĩ hạn chế

Bạn có thường xuyên có suy nghĩ: “Mình muốn… nhưng mình không thể” hay “Giá mà mình có thể…”? Những suy nghĩ như vậy đang kìm hãm, thậm chí kéo bạn lại vì bạn chỉ để ý tới những mặt hạn chế của mình.

Thay vào đó, hãy tập trung vào điểm mạnh của bạn, vào những điều bạn có thể thay đổi. Hãy nhìn lại cách mình đã làm để đi tới vị trí này trong sự nghiệp và xây dựng phương pháp nâng khả năng hiện tại lên tầm cao mới. Chẳng hạn, nếu có kỹ năng giao tiếp tốt, bạn có thể tình nguyện dẫn dắt nhóm hay thuyết trình trước khách hàng – những việc bạn chưa từng làm trước đây.

Ngại thay đổi

Đôi khi nỗi sợ thất bại hoặc phạm sai lầm sẽ níu bạn lại phía sau. Bạn gắn bó với những điều quen thuộc và ngại thay đổi. Chiến lược này an toàn cho sự nghiệp nhưng tẻ nhạt. Nó làm lãng phí nguồn năng lượng và sức sáng tạo của bạn.

Hãy cố gắng thử sức mình với những thử thách chấp nhận được. Chẳng hạn, bạn có thể quyết định quyết tâm được thăng chức. Điều đó có nghĩa là bạn sẽ phải nhận thêm trách nhiệm, làm việc chăm chỉ hơn và tham gia vào những dự án mới.

Đánh giá thấp khả năng của mình

Khiêm tốn là điều tốt nhưng khiêm tốn quá có thể dẫn tới tự ti. Lúc nào bạn cũng nghĩ mình chưa đủ tốt, đủ giỏi để có thể đề nghị sếp tăng lương hoặc thăng chức cho mình.

Hãy tránh điều này bằng cách hiểu chính xác năng lực của mình, về những thành tích đáng tự hào bạn từng đạt được. Chúng là hành trang để bạn tự tin cống hiến hết mình và làm việc năng suất hơn.

Những suy nghĩ, hành động trên có thể đã trở thành thói quen khó bỏ nhưng một khi bạn trải nghiệm thành công với cách suy nghĩ và hành động mới, bạn sẽ có động lực để tiếp tục làm hết khả năng của mình.

Link gốc: http://dantri.com.vn/nghe-nghiep/vi-dau-ban-lam-viec-chua-het-cong-suat-723175.htm

Tìm hiểu về 4K Ultra HD, độ phân giải của thời đại mới

Tim_hieu_ve_4K_tinhte_500px

Ngày nay chúng ta đã quá quen thuộc với cụm từ Full-HD hay 1920 x 1080. Đây là độ phân giải đã có mặt trên nhiều TV, màn hình máy tính, laptop và mới đây là smartphone và tablet. Nếu bạn lấy 1920 pixel chiều dài nhân với 1080 pixel chiều rộng, chúng ta sẽ có được khoảng 2 triệu điểm ảnh (2 megapixel). Tuy nhiên, có một độ phân giải mới hơn nữa, một độ phân giải có thể mở ra một kỉ nguyên kế tiếp của nội dung và hình ảnh độ nét cao, đó là 4K (hay còn gọi là Ultra-HD). Với số điểm ảnh lên đến 8 triệu, tức gấp bốn lần Full-HD, 4K hứa hẹn mang lại những trải nghiệm cao cấp hơn, sắc nét hơn. Trong bài viết bên dưới, mình sẽ chia sẻ với các bạn một số thông tin liên quan đến chuẩn hình ảnh này.

Sự khác biệt giữa Ultra HD, Quad Full HD, 2160p và DCI là gì?

Tất cả đều được dùng để chỉ độ phân giải 4K, tuy nhiên chúng xuất hiện bởi vì các hãng, các công ty, nhà sản xuất nội dung có cách gọi khác nhau và định nghĩa về số pixel khác nhau một tí.

Trong số đó, Ultra HD, Quad Full-HD có nghĩa như nhau. Ultra High Definition (hoặc Ultra-HD) sẽ là cái tên mà bạn sẽ thấy rất nhiều trong thời gian tới bởi nó đã được Ủy ban Truyền thông Quốc tế (ITU) và Hiệp hội Điện tử Tiêu dùng Hoa kì (CEA) chấp nhận làm tên thương mại cho 4K. Tuy nhiên, chữ 4K sẽ vẫn còn đó và thường thì nó sẽ được đi kèm với chữ Ultra-HD luôn. Ví dụ, Sony tuyên bố họ sẽ gọi các sản phẩm 4K của mình bằng cụm từ “4K Ultra High Definition” bởi hãng cho rằng nó sẽ diễn tả hết được đặc trưng của thiết bị. Nhiều công ty nghe nhìn cũng gắn mác 4K cho nhiều máy quay phim, máy ảnh, TV, máy chiếu bên cạnh chữ Ultra-HD. Đây cũng sẽ là độ phân giải tiêu chuẩn dùng trong những sản phẩm tiêu dùng. Những thứ khác chủ yếu xuất hiện trong các thiết bị điện ảnh và lĩnh vực chuyên nghiệp.

4K-video-resolution-comparison

Để được dán nhãn Ultra HD, các sản phẩm phải có ít nhất một đầu vào tín hiệu hỗ trợ truyền video gốc ở độ phân giải 3840 x 2160 (8,3 megapixel), còn video độ phân giải thấp mà nâng lên 4K thì sẽ không được gọi là Ultra HD. Với các màn hình hoặc máy chiếu, thiết bị phải có từ 8 triệu pixel hiệu dụng trở lên với chiều ngang ít nhất là 3840 pixel, chiều dọc tối thiểu phải là 2160 pixel. CEA cho rằng nhờ có thuật ngữ cũng như các tiêu chuẩn mới mà người tiêu dùng sẽ dễ dàng xác định được sản phẩm nào phù hợp với nhu cầu của mình trong quá trình chọn mua máy.

Bảng tóm tắt một số độ phân giải 4K đang được dùng trên thị trường

Bang_4K

Lợi ích của độ phân giải 4K?

Ừ thì 4K có độ phân giải cao đấy, khủng đấy, nhưng mà lợi ích của nó là gì? Trước hết, hình ảnh sẽ sắc nét và rõ ràng hơn, các pixel trên màn hình sẽ nhỏ lại và chúng ta sẽ được hiệu ứng tương tự như trên các điện thoại Full-HD hoặc “Retina” hiện nay. Chữ và chi tiết ảnh sẽ được hiển thị tốt hơn, trải nghiệm xem thích thú hơn. Điều này quan trọng bởi vì hiện nay các TV càng ngày càng lớn hơn, chúng ta thậm chí đã có những chiếc TV gia đình với đường chéo màn hình lên đến 84″ hay 85″.

Tuy nhiên, cũng cần phải nói thêm rằng khả năng nhận biết các điểm ảnh của mắt người còn phụ thuộc nhiều vào khoảng cách đến màn hình. Mời các bạn xem qua sơ đồ bên dưới, trục tung là khoảng cách xem, trục hoành là kích cỡ màn hình. Các bạn có thể thấy rằng 4K chỉ thật sự có lợi ở vùng màu xanh lá cây, tức là chúng ta sẽ cần những chiếc TV lớn 50″-140″ và khoảng cách xem từ 1,5m đến xấp xỉ 5m. Mảng màu xanh càng lớn thì lơi ích càng nhiều. Chỉ khi nào đạt được yêu cầu này thì trải nghiệm 4K của chúng ta mới thật sự tốt, còn nếu không (rơi vào các vùng màu còn lại trong biểu đồ) thì bạn sẽ chỉ thưởng thức được chất lượng của các màn hình 720p hay 1080p. Lúc đó việc trang bị một màn hình 4K trở nên rất phí phạm.

200ppdengleski

Ngoài ra, nội dung 3D cũng được hưởng lợi rất nhiều khi sử dụng độ phân giải 4K. Hiện tại, những TV 3D hay máy chiếu sử dụng kính phân cực thụ động sẽ cắt hình ảnh Full-HD ra làm hai tương ứng với hai mắt của chúng ta để có thể tạo hiệu ứng nổi. Chính vì thế, chúng ta chỉ nhận được hình ảnh với độ phân giải 960 x 540 (một nửa mỗi chiều của 1920 x 1080) mà thôi, và tất nhiên là ảnh sẽ không thể đẹp như lúc xem 2D rồi. Còn khi áp dụng 4K, hình ảnh 3D xem qua kính thụ động sẽ được chia thành hai ảnh Full-HD 1080p cho mỗi mắt (tức một nửa 4K), tuyệt vời hơn là điều đương nhiên rồi.

Đối với các nhà sản xuất thiết bị, những màn hình 4K thì sẽ dễ sản xuất hơn là áp dụng một công nghệ mới hoàn toàn như OLED, trong khi họ vẫn có thể tiếp thị được nó ra thị trường như một chuẩn nội dung mới hơn, xịn hơn. Như các bạn đã thấy, con số 4K cao hơn những con số khác, và do đó nó dễ dàng được người tiêu dùng cho là “tốt hơn”. Chắc chắn rằng khi hỏi độ phân giải 3840 x 2160 với 1920 x 1080 cái nào tốt hơn, nhiều người sẽ trả lời ngay rằng 4K tốt vì nó có nhiều điểm ảnh hơn. Nhân viên bán hàng chắc chắn cũng sẽ tận dụng điểm này để giới thiệu sản phẩm đến bạn. Tuy nhiên, lại một lần nữa, 4K tốt hơn hay không còn phụ thuộc vào nhiều yếu tố, như vấn đề khoảng cách mà chúng ta đã thảo luận ở trên. Hiện nay cũng có những người tiêu dùng phổ thông nói rằng “Tôi chẳng biết Full-HD là gì, nhưng mà tôi muốn có nó”. Điều tương tự nhiều khả năng cũng sẽ diễn ra với 4K Ultra HD.

TV 4K to tới cỡ nào?

Tính đến thời điểm hiện tại, những chiếc Ultra HD TV trên thị trường toàn là những mẫu lớn, chẳng hạn như chiếc Sony 84X9000 84″LG 84LM960V 84″Toshiba 84L9300 cũng 84″. Sharp có ICC Purios và Aquos Ultra HD, Samsung thì có TV Ultra HD S9 85″ với thiết kế Timeless Gallery độc đáo. Ngoài ra, 4K cũng có mặt trên nhiều TV khác với kích cỡ nhỏ hơn, ví dụ như Sony XBR-55X900A (55″) và XBR-65X900A (65″), Toshiba 4K 65″ và 58″, Sharp và Sony cũng có những mẫu OLED 4K nhưng chưa rõ bao giờ thì chúng có mặt trên thị trường. Dự đoán rằng trong năm nay và năm sau, càng ngày sẽ có càng nhiều màn hình kích thước vừa (tầm 40″ đến 65″) với tấm nền Ultra HD được công bố. Xuống nhỏ hơn một chút thì ta có màn hình chuyên nghiệp 4K 32″ của Sharp sản xuất bằng tấm nền IGZO.

Tinhte_avshow201_108
TV 4K 84″ của LG, đã bán ở Việt Nam với giá 300 triệu và bạn đã có thể mua nếu muốn
DSC_9244
Mẫu TV 4K Sony XBR-65X900A với màn hình 65″ và thiết kế độc đáo
DSC_9406
TV 4K OLED 56″ của Panasonic

Giá của những mẫu TV kể trên hiện nay vẫn còn khá cao, thường từ 3000$ cho đến vài chục nghìn đô, vẫn còn nằm ngoài tầm với của nhiều người trong số chúng ta. Tuy nhiên, thứ gì mới ra thì cũng mắc cả, tương tự như tình trạng của TV Full-HD khi mới ra mắt. Một khi 4K đã trở nên phổ biến hơn, giá chắc chắn sẽ xuống rất nhanh và lúc đó mọi người sẽ xem 4K là chuyện bình thường.

Thế có máy chiếu Ultra HD không?

Câu trả lời là có. Thực chất sản phẩm 4K đầu tiên dành cho thị trường tiêu dùng đó chính là mẫu projector Sony VPL-VW1000ES được ra mắt hồi năm 2012. Những công nghệ dùng trong chiếc máy chiếu này ban đầu vốn được thiết kế để dùng trong những máy chiếu kĩ thuật số của Sony dùng cho mục đích thương mại. Tuy nhiên, VPL-VW1000ES dùng chuẩn 4K DCI nên độ phân giải của nó là 4096 x 2160, khác một chút so với 4K Ultra-HD mà chúng ta hay thấy trên các TV.

sony_vpl-vw1000es

Ngoài Sony ra, chúng ta còn có một loạt máy chiếu của JVC cũng được cho là có thể hiển thị hình ảnh ở độ phân giải 4K. Các model đó bao gồm DLA-X95R, DLA-X75R và DLA-X55R. Tuy nhiên, những thiết bị này thực chất chỉ trình chiếu hình ảnh ở độ phân giải Full-HD 1080p, sau đó sử dụng công nghệ làm lệch pixel để tăng độ phân giải cho hình ảnh. Trong khi đó, mẫu máy của Sony tự bản thân nó có thể trình chiếu hình ảnh với độ phân giải gốc lên đến 8,8 triệu điểm ảnh. Như vậy, 4K của Sony mới là Ultra-HD đúng nghĩa, còn của JVC chỉ là Full-HD được nâng (upscale) lên 4K mà thôi. Tất nhiên, theo lý thuyết, “hàng gốc” thì lúc nào cũng ngon hơn hàng “phóng lớn” rồi.

Một số thiết bị ghi hình hỗ trợ độ phân giải 4K:

Ultra HD có phát lên các kênh truyền hình không?

Về mặt kĩ thuật thì có đấy các bạn, nhưng phải là trong tương lai. Hãng Eutelsat Communications đã ra mắt kênh truyền hình đầu tiên hỗ trợ độ phân giải Ultra HD vào tháng 1/2013 dựa trên vệ tinh EUTELSAT 10A. Kênh này chỉ mới ở giai đoạn thử nghiệm mà thôi. Ngoài ra, BBC ở Anh cũng bắt đầu ghi hình một số bộ phim tài liệu với các thiết bị 4K trong năm nay. Đơn vị phụ trách mảng Tự nhiên và Lịch sử của BBC cũng đã được giao nhiệm vụ phát thử series phim tài liệu Survival ở định dạng Ultra HD. Ở phía bên kia địa cầu, Hàn Quốc cũng đang có những động thái dẫn đầu trong việc phát hình ảnh Ultra HD. Đài KBS đã sử dụng kiến trúc DVB-T2 để gửi tín hiệu hình ảnh Ultra HD được nén bằng codec H.265, hay còn gọi là High Efficiency Video Coding – HEVC (“codecvideo hiệu suất cao”). Mỹ cũng không nằm ngoài cuộc chơi và họ dự kiện sẽ phát sóng Ultra HD ở khu vực Baltimore trong năm nay với cùng công nghệ dùng ở Hàn Quốc. Trận chung kết World Cup 2014 sắp diễn ra ở Brazil cũng sẽ được truyền ở độ phân giải Ultra HD đến cho người xem ở Nhật Bản.

Làm thế nào để đưa nội dung Ultra HD ra TV hoặc máy chiếu Ultra HD? 

Hiện tại chúng ta vẫn chưa có nhiều thông tin về các đĩa quang có khả năng chứa được phim Ultra-HD, do đó người dùng sẽ phải sử dụng các hệ thống máy phát nội dung để có thể thưởng thức những thước phim Ultra HD của mình. Về cơ bản thì các máy này giống như những chiếc hộp phát nội dung phổ biến hiện nay, chỉ có điều chúng mạnh mẽ hơn nhiều để có thể hỗ trợ việc xuất hình ảnh gốc ở độ phân giải cao gấp 4 lần so với Ultra HD.

Một trong số các máy phát nội dung được nhiều người chú ý đó là Redray 4K Cinema Player của hãng RED với giá 1450$. Thiết bị này có thể xuất hình ảnh 4K Ultra-HD ở tốc độ 120fps thông qua cổng HDMI 1.4. Nguồn nội dung có thể lấy từ ổ đĩa cứng gắn trong hoặc ổ đĩa rời, thẻ nhớ. Máy có hai cổng Ethernet Gigabit, cổng USB và E-SATA. Đầu phát này còn tương thích với định dạng phim 3D 4K tốc độ cao 48-60fps (so với 30fps của chuẩn 3D cũ) vốn được dùng trong phim The Hobbist. Giờ đây, RED đã cho phép đặt hàng sản phẩm này với giá 1450$ và nó sẽ sớm được giao đến tay người dùng.

500px

RED cho biết thêm rằng sản phẩm của họ đảm đương được độ phân giải 4096 × 2160 (tỉ lệ 16:10) hoặc 3840 x 2160 (tỉ lệ 16:9). Đối với những nội dung hình ảnh cũ, REDray 4K Cinema Player có thể nâng nó lên thành 4K với tính năng upscale. Máy cũng được tích hợp công nghệ bảo vệ bản quyền REDPASS DRM và có một giấy phép RRENCODE để giúp người dùng chuyển đổi phim HD hoặc 4K của mình sang định dạng .RED tương thích với thiết bị nhờ phần mềm REDCINE-X PRO. REDray 4K Cinema Player vẫn có khả năng chơi được các phim HD 1080p, 720p ở định dạng .MP4.

Ngoài RED, Sony mới đây cũng đã tung ra thị trường đầu phát 4K Ultra HD FMP-X1. Chiếc máy này có dạng tròn, tương tự như nguyên mẫu mà Sony đã từng mang đến triển lãm CES 2013. Nó sẽ được bán ra trong mùa hè năm nay. Khi giao tới tay khách, FMP-X1 đã có sẵn 10 bộ phim độ phân giải 4K Ultra-HD. Đến mùa thu năm nay, người dùng FMP-X1 sẽ được phép truy cập vào một dịch vụ phân phối video có tính phí để tải và xem các tựa phim 4K từ Sony Pictures Entertainment cũng như “các nhà sản xuất nổi tiếng” khác. Sony nói khách hàng đang sử dụng chiếc TV 4K 84″ của hãng thì có thể đổi đầu phát nội dung hiện tại lấy FMP-X1. Giá của chiếc Sony FMP-X1 là 699$, “dễ thở” hơn so với đầu phát của RED.

FMP-X1_basic-f-12001

Bên cạnh đó, đĩa Blu-ray cũng có thể chứa được phim 4K. Nhờ vào chuẩn HEVC đã nói ở trên mà người ta có thể nén video cho nhỏ lại để bỏ vừa vào đĩa Blu-ray. Tuy nhiên, có khả năng các nhà sản xuất sẽ phải thêm vào một số lớp lưu trữ để có thể chứa đủ một bộ phim dài. Có hai đầu chơi Blu-ray là Sony S5100 và Samsung BD-F7500 được gọi là “4K ready”, nhưng chúng cũng chỉ upscale độ phân giải từ Full-HD lên Ultra-HD mà thôi.

Việc thiếu nội dung 4K không phải là vấn đề nghiêm trọng

Khi nhắc đến Ultra HD, nhiều người cho rằng nội dung quá nghèo nàn hiện nay sẽ là rào cản để nó tiến bước vào thị trường phổ thông. Tuy nhiên, trang tin CNET có viết bài nói về việc này và họ chỉ ra rằng việc thiếu hút nội dung 4K không phải là vấn đề to tát. Trước khi các phim Full-HD trở nên phổ biến, chẳng phải người ta cũng đã upscale các phim 480p hay 720p lên 1080p hay sao. Như đã nói ở trên, đầu thu của RED hỗ trợ upscale phim cũ lên 4K, ba máy chiếu của JVC và máy chiếu Sony cũng có khả năng tương tự. Như vậy, về lý thuyết, chúng ta đã có sẵn nội dung 4K rồi, tất nhiên là nó không được đẹp như 4K nguyên gốc mà thôi.

Về phần các nguồn phim, hiện nay Hollywood đã và đang bắt đầu quay nhiều bộ phim bằng các máy quay 4K. Ví dụ, phim The Hobbit: An Unexpected Journey của Peter Jackson được ghi hình bằng các camera hỗ trợ độ phân giải lên đến 5K. Nhiều chương trình cũng được quay bằng chiếc camera Sony F65, vốn hỗ trợ độ phân giải 4K. Sony cũng có tải sẵn 10 phim độ phân giải 4K Ultra HD cho đầu phát FMP-X1, bao gồm: Bad Teacher, Battle: Los Angeles, The Bridge on the River Kwai, Salt, The Karate Kid (2010), Taxi Driver, That’s My Boy, The Amazing Spider-Man, The Other Guys, và Total Recall (2012).

Ngoài ra, việc sở độ phân giải 4K không đồng nghĩa với việc chúng ta sẽ dùng hết tất cả các pixel của nó chỉ để trình chiếu một thứ duy nhất. Bạn có thể dùng TV 4K để hiển thị hai kênh truyền hình cùng lúc trên một màn hình duy nhất, hoặc chia đôi màn hình ra và chơi game hai người. Hiện nay một số hãng đã sử dụng kính phân cực đeo lên mắt để tách hai hình ảnh ra, và nếu áp dụng cho 4K thì mỗi ảnh sẽ có độ phân giải là 3840 x 1080, dư sức đáp ứng nhu cầu độ nét cao khi bạn cần xem video.

Còn đó những vấn đề khác ngoài độ phân giải

Như các bạn đã biết, hình ảnh có đẹp hay không thì không thể chỉ đánh giá bằng độ phân giải. Một màn hình hay máy chiếu độ phân giải cao không mang lại hình ảnh xuất sắc. Thay vào đó, chúng ta còn phải đánh giá về độ tương phản, màu sắc, độ đen, hiện tượng lỗi hay biến dạng khi nén phim… Hãy thử tượng tượng bạn đang xem một phim 4K Ultra HD trên một chiếc màn hình với màu sác nhợt nhạt thì có vui không? Chất lượng tổng quan của hình ảnh mới là vấn đề đáng được quan tâm và nếu các thiết bị hay nội dung 4K không đáp ứng tốt khoản này, số pixel khổng lồ trở nên vô nghĩa.

DSC_9227

Một vấn đề khác với hình ảnh 4K đó là độ phân giải đối với các hình ảnh chuyển động (motion resolution). Tất cả các màn hình LCD đều bị tình trạng giảm ít nhiều độ phân giải khi chiếu tới các hình ảnh chuyển động nhanh, và trong một số trường hợp có thể mất đến 40%. Hiện nay hầu hết tất cả các màn hình Ultra HD đều là LCD và nó vẫn mắc phải tình trạng này. Dù không quá nghiêm trọng nhưng nó cũng gây ảnh hưởng đến trải nghiệm xem video của chúng ta. Những màn hình mới cũng có tốc độ quét rất nhanh, lên đến 800Hz, thậm chí là 900Hz, tuy nhiên nếu không có được một bộ tách chuyển động tốt, tần số quét cao chỉ có thể làm giảm một ít motion blur mà thôi.

Mình có nghe nói tới Super Hi-Vision, nó là cái gì nữa?

Super Hi-Vision là chuẩn video “8K” đang được phát triển bởi nhà đài NHK của Nhật Bản và đã được Ủy ban Truyền thông Quốc tế chấp thuận. Super Hi-Vison có độ phân giải là 8192 × 4320 (khoảng 35.3 megapixel) hoặc 7680 x 4320 (khoảng 32 megapixel). Bạn cứ tưởng tượng rằng ở chiều dài và chiều rộng, mỗi chiều của 8K gấp bốn lần so với điểm ảnh của một khung ảnh Full-HD. Nó hỗ trợ hiển thì video với tốc độ 120 khung hình mỗi giây và hệ thống âm thanh 22.2. Năm ngoái, Super Hi-Vision đã được đài BBC của Anh dùng để ghi hình thử nghiệm một số trận đấu trong khuôn khổ Olympics 2012 London. Có lẽ chuẩn Super HI-Vision cũng còn rất lâu nữa mới được thương mại hóa và đưa ra thị trường, chưa kể nó sẽ phải mất thêm khoảng một hai năm nữa để trở nên phổ biến. Trong thời gian đó chắc 4K sẽ được dùng nhiều như Full-HD hiện nay.

8k_TV

Độ phân giải của video vs Megapixel

Trước khi bạn rời bài viết này, mình xin nói thêm một chút về độ phân giải dùng trong video và những con số megapixel mà các bạn hay nghe. Nếu đổi độ phân giải video ra megapixel, một hình ảnh 1080p (1920 x 1080) chỉ bằng 2,1 megapixel. Bạn có thể tính bằng cách lấy số pixel theo chiều dài là 1920 nhân với số pixel chiều rộng là 1080. Tương tự, hình ảnh 4K (3840 x 2160 hoặc 4096 x 2160) xấp xỉ 8,5 megapixel. Chỉ khi nào sử dụng chuẩn 8K (7680 x 4320) thì bạn mới có số pixel “khủng” 33,2 megapixel. Nói cách khác, nếu dùng một chiếc smartphone cao cấp thì bạn đã có thể chụp ra bức ảnh gần với 4K, còn nếu xài máy ảnh compact thì vượt xa luôn. Tuy nhiên, video khác với ảnh tĩnh, để xử lí nó cần rất nhiều tài nguyên hệ thống (CPU, GPU, RAM, pipeline…) vì bạn phải ghép vài chục khung hình mỗi giây để tạo ra sự chuyển động. Do đó, độ phân giải video hiện nay vẫn thấp hơn một bật so với ảnh tĩnh.

Trên đây là vài thông tin mà mình thu thập về 4K. Hi vọng nó sẽ giúp ích cho các bạn. Mời các bạn cùng thảo luận cũng như đóng góp ý kiến cho bài viết này nhé. Xin cảm ơn mọi người.

Một câu chuyện về Bridge Pattern

– Mẫu thiết kế Bridge được thiết kế với ý tưởng tách rời những xử lý của một lớp ra lớp khác, từ đó có thể dễ dàng biến đổi hoặc thay thế mà không làm ảnh hưởng đến những nơi có sử dụng lớp ban đầu. Điều này có thể hiểu như sau: bạn thiết kế một lớp với rất nhiều xử lý, bây giờ bạn không muốn để những xử lý đó trong lớp của bạn nữa, bạn sẽ tạo ra một lớp mới và move toàn bộ những xử lý đó sang lớp mới. Khi đó trong lớp cũ sẽ giữ một đối tượng thuộc về lớp mới, và đối tượng này sẽ chịu trách nhiệm xử lý thay cho lớp ban đầu. Tại sao chúng ta làm như vậy và cách thực hiện như thế nào? Hi vọng với bài viết này chúng ta tìm được lời giải thích cho 2 câu hỏi trên.

– Mẫu Bridge về khía cạnh nào đó khá giống với mẫu Adapter ở chỗ: người ta sẽ nhờ vào một lớp khác để thực hiện một số xử lý nào đó. Tuy nhiên, ý nghĩa và mục đích sử dụng của hai mẫu thiết kế này hoàn toàn khác nhau. Mẫu Adapter Pattern hay còn gọi là Wrapper pattern được dùng để biến đổi một lớp/interface sang một dạng khác có thể sử dụng được. Adapter Pattern giúp nhiều lớp có thể làm việc với nhau dễ dàng mà bình thường không thể. Một trường hợp tôi gặp phải và có thể áp dụng Adapter Pattern là khi tôi không thể kế thừa lớp A nhưng muốn làm một lớp B có những xử lý tương tự như lớp A. Khi đó tôi làm lớp B như sau, các xử lý của B sẽ gọi những xử lý của A khi cần:bbpraroi:

Adapter Pattern Example

Hình 1: Ví dụ về mẫu Adapter

– Đó chỉ là một trong nhiều cách sử dụng có thể có của mẫu Adapter, tôi sẽ nói thêm về Adapter trong một bài viết khác, ở đây chỉ nêu ra ý nghĩa khác nhau của hai mẫu thiết kế này. Trước khi đi vào câu chuyện của mẫu Bridge, chúng ta hãy xem sơ đồ lớp của mẫu Bridge:


Bridge Pattern

Hình 2: Sơ đồ lớp của mẫu Bridge

Câu chuyện về mẫu thiết kế Bridge (Bridge Pattern)

– Có một người đã làm nghề đầu bếp đã 20 năm. Ông ta đã đi rất nhiều nơi trên thế giới, làm việc cho rất nhiều nhà hàng khác nhau và đã học được cách nấu rất nhiều món ngon. Không những thế ông ta còn sáng tạo ra những món đặc biệt cho riêng mình nữa. Nhờ tài nghệ của ông, các nhà hàng nơi ông làm luôn luôn đông khách. Sau 20 năm nhìn lại, ông thấy đã đến lúc mình phải mở nhà hàng cho riêng mình. Đã để dành được một số vốn kha khá, ông quyết định chọn một trong những thành phố năng động của Việt Nam là TPHCM để bắt đầu sự nghiệp riêng. Thế là nhà hàng của ông ta ra đời và kinh doanh khá phát đạt nhờ vào danh tiếng và tài nghệ của mình. Ông ta dành hết tâm huyết để tự tay nấu mọi món ngon nhất cho các thực khách vì không tin tưởng vào các phụ bếp được thuê. Càng ngày danh tiếng của nhà hàng càng được nhiều người biết đến, không chỉ những người sành ăn trong nước mà cả những du khách nước ngoài cũng tìm đến nhà hàng này để thưởng thức khi có cơ hội ghé đến TPHCM. Ông ta rất vui mừng trước doanh thu ngày càng cao nhưng bên cạnh đó cũng rất lo cho sức khỏe của mình, vì ông phải đứng chế biến món ăn từ 6h sang đến 11h đêm hằng ngày:bbpbuon:

– Các con của ông rất thương bố mình và khuyên ông nên truyền nghề lại cho các học trò, các người ấy sẽ giúp ông làm việc cho nhà hàng. Suy nghĩ khá lâu, ông thấy rằng các con ông nói rất có lý. Ông ta chọn 1 đứa học trò ngoan và giỏi nhất truyền toàn bộ những gì mình biết. Sau khi đã lĩnh hội được toàn bộ khóa học, đứa học trò đã phụ ông nấu nướng cho nhà hàng, nhờ vậy ông được rảnh rổi về sớm đi tập thể dục thẩm mỹ và làm những việc quản lý, mở rộng kinh doanh.

– Thời gian trôi qua, ông muốn mở thêm một nhà hàng mới ở HN. Cũng trong giai đoạn này, ông nhận được email của một số khách ruột bảo rằng chất lượng món ăn bắt đầu kém đi, không đậm đà như trước đây. Sau khi tìm hiểu, ông phát hiện nguyên nhân là do thằng học trò đểu cáng đang âm mưu mở nhà hàng riêng nên nó lơ là việc nấu nướng :bbpnodo:, ngoài ra do ông dạy nó nhiều quá nên nó chỉ có thể nấu ngon được một số món ăn, phần lớn các món khác nấu không đạt yêu cầu. Rút kinh nghiệm, ông quyết định đăng báo dân trí tìm một số cô gái thích nấu nướng truyền cho mỗi cô 1 kĩ thuật nấu món ngon các miền. Sau này nếu có ý định mở nhà hàng ở miền Trung cũng sẽ có đầu bếp chuyên nấu món cay hợp khẩu vị của dân địa phương.


Bridge Pattern Example

Hình 3: Bản kế hoạch mở 2 nhà hàng mới của ông

// Bridge pattern -- Structural example
using System;
namespace nthoai.blogspot.com.BridgePattern
{
// “Abstraction”
class NhaHang
{

protected DauBep _dauBep;

// Property
public DauBep DauBep
{

set { _dauBep = value; }

}

public virtual void CheBienMonAn()
{

_dauBep.CheBienMonAn();

}

}

// “Implementor”
abstract class DauBep
{

public abstract void CheBienMonAn();

}

// “Nhà hàng món Huế”
class NhaHangMonHue : NhaHang
{

public override void CheBienMonAn()
{

_dauBep.CheBienMonAn();

}

}

// “Nhà hàng món miền Nam”
class NhaHangMienNam : NhaHang
{

public override void CheBienMonAn()
{

_dauBep.CheBienMonAn();

}

}

// “ConcreteImplementorA”
class DauBepMonAnHue : DauBep
{

public override void CheBienMonAn()
{

Console.WriteLine(“Đây là những món ăn Huế do đầu bếp Huế thực hiện”);

}

}

// “ConcreteImplementorB”
class DauBepMonAnMienNam : DauBep
{

public override void CheBienMonAn()
{

Console.WriteLine(“Đây là những món ăn miền Nam do đầu bếp miền Nam thực hiện”);

}

}

// Ông đầu bếp mở nhà hàng như sau
class ÔngĐầuBếpGià
{

static void Main()
{

NhaHang _nhaHangMonHue = new NhaHangMonHue();

// Set implementation and call
_nhaHangMonHue.DauBep = new DauBepMonAnHue();
_nhaHangMonHue.CheBienMonAn();

NhaHang _nhaHangMonMienNam = new NhaHangMienNam();
// Change implemention and call
_nhaHangMonMienNam.DauBep = new DauBepMonAnMienNam();
_nhaHangMonMienNam.CheBienMonAn();

// Wait for user
Console.Read();

}

}

 
}

Hình 4: Kế hoạch mở nhà hàng 😀

– Câu chuyện của ông đầu bếp già là một ví dụ về cách sử dụng của Bridge khi đưa những xử lý sang một lớp khác. Trong các tài liệu về mẫu Bridge, các tác giả thường sử dụng các thuật ngữ như: Abstraction, Implementor, RefinedAbstraction và ConcreteImplementor. Cá nhân tôi thấy những từ vô cùng chuyên môn như vậy hơi khó hiểu, tôi thích những ví dụ thực tế hơn, tuy nhiên những từ ấy hoàn toàn chính xác. Sử dụng mẫu Bridge trong lập trình không chỉ đơn giản là đưa những xử lý của một lớp sang lớp khác rồi gọi nó từ lớp mới, mọi việc không chỉ đơn giản như vậy. Ý tưởng trên chỉ là một vế của Bridge Pattern, ở đây chúng ta chưa nói đến vế: “từ đó có thể dễ dàng biến đổi hoặc thay thế mà không phải ảnh hưởng đến những nơi có sử dụng lớp ban đầu” (so you can vary or replace the implementation without changing the client code). Xin thưa với các bạn đây chỉ là cách diễn giải của tôi, không phải khái niệm hay định nghĩa tiếng Việt của Bridge Pattern cho nên nếu các bạn muốn xem nguồn tiếng Anh hãy chịu khó google. Quay lại chỗ “biến đổi, thay thế mà không ảnh hưởng”, tôi đã có viết về chuyện này ở loạt bài về Dependency Injection của Spring.NET. Trong trường hợp của mẫu Bridge, chúng ta có thể giảm sự phụ thuộc giữa các lớp với nhau bằng cách sử dụng Interface hoặc abstract class. Trong các tài liệu về Bridge Pattern, các Abstraction và Implementer là những lớp abstract hoặcinterface. Trong khi đó, các RefinedAbstraction và ConcreteImplementor là những thể hiện cụ thể hay những lớp con của các abstract class/ interface nói trên. Như vậy trong câu chuyện ông đầu bếp của chúng ta thì Abstraction là NhàHàng, RefinedAbstraction chính là Nhà Hàng Món Huế, Nhà Hàng Món Nướng Nam Bộ, Nhà Hàng Châu Âu còn ConcreteImplementor là các đầu bếp: Đầu Bếp Món Âu, Đầu Bếp Món Huế, …

– Như vậy chữ Bridge (chiếc cầu) ở đây là quan hệ “use/have” giữa Abstraction và Implementation, giữa Nhà Hàng và Đầu Bếp. Một RefinedAbstraction sẽ không khai báo cụ thể một ConcreteImplementor nào đang được sử dụng mà chỉ biết nó đang có 1 Implementor nào đó; khi mở một Nhà Hàng mới ta sẽ mướn Đầu Bếp (biết nấu ăn), còn cụ thể đầu bếp nấu được món miền nào sẽ quyết định lúc chọn xong địa điểm:bbpnghi:

– Trong một số trường hợp, mẫu thiết kế Bridge được dùng như một cầu nối giữa 2 nhóm đối tượng khác nhau, giữa nhóm các dữ liệu và nhóm các cách thể hiện ra màn hình, đó là ví dụ thường được dùng trong các bài viết về mẫu Bridge. Như chúng ta biết có rất nhiều chuẩn hình ảnh như JPG, PNG, BMP, GIF, … và các hệ điều hành khác nhau như Windows, MacOS, UNIX đều hiểu và có thể hiển thị các định dạng ảnh này.

– Cấu trúc hình ảnh và cách hiển thị chúng là hai thành phần quan trọng của một định dạng ảnh. Cấu trúc hình chính là cách mà hình đó được lưu trữ, và cách thể hiện chúng sẽ tương đối khác nhau trên các chương trình xem hình trên các hệ điều hành khác nhau. Trong trường hợp này các file hình với các định dạng khác nhau sẽ thường xuyên thay đổi, và các hệ điều hành cần vẽ hình cũng nhiều tương tự. Nếu được yêu cầu thiết kế lớp cho bài toán trên sao cho tính tái sử dụng cao nhất, bạn sẽ làm thế nào. Như đã nói, có rất nhiều chuẩn hình, mỗi hình sẽ có những thông tin riêng của nó và mỗi hình nên được thiết kế để có khả năng tự vẽ nó (Information Expert) . Nhưng vì cách vẽ sẽ khác nhau trên các hệ điều hành khác nhau nên nếu chúng ta thiết kế lớp hình tự thực hiện hàm vẽ rồi khi cần thì sửa hàm vẽ để nó hoạt động được trên hệ điều hành khác là không nên. Bridge Pattern sẽ giúp ta đưa những hàm vẽ đó sang những lớp khác để vẽ trên các hệ điều hành tương ứng. Nhờ vậy, khi một chuẩn hình mới được tạo ra hay có một thuật toán vẽ khác được nghĩ ra, sẽ rất dễ dàng để ta code thêm một lớp vẽ mới cho chương trình.

– Một ví dụ khác cũng tương tự là khi bạn cần xây dựng một ứng dụng thể hiện ra màn hình thông tin khác nhau với những loại user khác nhau. Cùng một dữ liệu nhưng nếu là Admin bạn sẽ cho phép hiển thị chi tiết hơn, có thêm những button cho phép edit hoặc delete chẳng hạn. Trong khi đó user thường hoặc guest chỉ có thể xem mà không thể làm gì khác. Còn rất nhiều trường hợp khác mà chúng ta có thể dùng Bridge cũng như có nhiều mẫu thiết kế tương tự Bridge như Strategy, Adaptor. Nếu chúng ta nắm được ý nghĩa, sự khác nhau và khi nào nên áp dụng những thiết kế này của 4 lão tiền bối thì công việc lập trình sẽ hứng thú, đầy tính sáng tạo và không nhàm chán chút nào. Hi vọng đến đây chúng ta đã tìm được câu trả lời cho 2 câu hỏi trên. Tôi sẽ bàn thêm một chút về những lợi ích và trở ngại khi sử dụng Bridge:

Benefits in using Bridge Pattern

1/ Đặt vấn đề: chúng ta có một lớp A, và các lớp A1, A2, A3 kế thừa từ lớp A. Các lớp A1, A2, A3 sẽ được thừa hưởng các attribute và behavior của lớp A. Như vậy vô tình các xử lý của lớp A1, A2, A3 sẽ y như A trừ khi chúng phải override lại. Trong chương trình, khi cần sử dụng một trong các lớp A1, A2, A3 người ta thường khai báo chung chung là A thay vì khai báo cụ thể là ta sẽ gọi mày đó A1, A2, A3. Cách sử dụng lớp A ta gọi là abstraction hay là trừu tượng hóa và những xử lý của lớp A mà các A1, A2, A3 thừa hưởng gọi là implementation. Sử dụng thiết kế Bridge sẽ giúp chúng ta giảm sự phục thuộc giữa abstraction và implementation. Tính kế thừa trong hướng đối tượng thường gắn chặt abstraction và implementation lúc build chương trình. Bridge Pattern có thể được dùng để cắt đứt sự phụ thuộc này và cho phép chúng ta chọn implementation phù hợp lúc runtime.

2/ Giảm số lượng những lớp con không cần thiết. Một số trường hợp sử dụng tính inheritance sẽ tăng số lượng subclass vô tội vạ. Ví dụ trường hợp chương trình xem hình trên các hệ điều hành khác nhau, ta có 6 loại hình và 3 hệ điều hành. Sử dụng inheritance trong trường hợp này sẽ làm ta thiết kế 18 lớp trong khi áp dụng Bridge sẽ giảm số lượng lớp xuống 9:bbpcuoi1:

3/ Lợi ích thứ 2 dẫn đến một hệ quả: Code sẽ gọn gàn hơn và dẫn đến kích thước ứng dụng sẽ nhỏ hơn.

4/ Các Abstraction và Implementation của nó sẽ dễ dàng thay đổi lúc runtime cũng như khi cần thay đổi thêm bớt trong tương lai. Như vậy chương trình của chúng ta cũng sẽ dễ bảo trì hơn.

5/ Tương tự như lợi ích 4, nếu sử dụng Bridge, hệ thống sẽ dễ mở rộng về sau. Đây hầu như là một yêu cầu bắt buộc đối với các chương trình lớn. Nhiều công ty sẽ cùng làm trong từng giai đoạn phát triển. Một số công ty phần mềm ở VN thường làm outsource: maintain hoặc mở rộng một framework hay một chương trình đã được làm sẵn ở nước ngoài. Công ty khách hàng sẽ yêu cầu chúng ta thêm module cho ứng dụng có sẵn nhưng không được sửa đổi framework/ứng dụng có sẵn của họ vì các framework/ứng dụng đó có thể được công ty nâng cấp lên version mới. Đó là bài toán các bạn sẽ gặp phải khi làm ở những project trung bình và lớn, và ta sẽ vô cùng bực mình và cảm thấy khó khăn khi framework/chương trình đó được đám lập trình viên ở đâu đâu code vô cùng chuối giờ lại bắt mình viết thêm vào:bbptuc:

6/ Những nơi cần sử dụng các abstraction sẽ hoàn toàn độc lập với các implementation.Ví dụ các lớp khác của chương trình xem ảnh sẽ độc lập với thuật toán vẽ ảnh trong các implementation. Như vậy ta có thể update chương trình xem ảnh khi có một thuật toán vẽ ảnh mới mà không cần phải sửa đổi nhiều thậm chí build lại toàn chương trình nếu có dùng các kĩ thuật Dependency Injection.

1 Drawbacks in using Bridge Pattern

– Khi sử dụng Bridge Pattern, chúng ta đã tăng số lần gọi gián tiếp lên hai. Trong ví dụ trên, với cách làm cũ, lớp Image sẽ thực hiện hàm vẽ của chính nó. Nếu áp dụng Bridge, hàm vẽ sẽ được gọi thông qua một lớp implementation tương tứng như vậy có thêm một lần khởi tạo đối tượng và gọi đối tượng, có thêm một lần hủy đối tượng và lượng bộ nhớ bị chiếm để chạy chương trình sẽ tăng lên một chút. Theo tôi những bất lợi này vô cùng không đáng kể so với những lợi ích mang lại khi chúng ta áp dụng Design Pattern nói chung và Bridge Pattern nói riêng.

—————————————————————–

– Cuối cùng, ông đầu bếp già của chúng ta sẽ không có thời gian đi massage hay đi chơi gôn nếu cứ tiếp tục tự nấu ăn. Nhà hàng của ông sẽ rất khó khăn khi đầu bếp chính nghỉ việc nếu không có nhiều đầu bếp giỏi chuyên môn. Thử tưởng tượng trong thực tế chúng ta mua một chiếc xe gắn máy mà khi hư thì phải bỏ đi và mua xe mới thay vì có phải tìm phụ tùng thay thế. Tính độc lập, chuyên môn hóa giữa các bộ phận trong một hệ thống luôn được đề cao trên mọi lĩnh vực trong cuộc sống. Riêng trong thiết kế phần mềm, design pattern là những bài học kinh nghiệm mà khi áp dụng tốt sẽ biến người lập trình thành một nghệ sĩ. Một lần nữa, tôi hi vọng bài viết này không chỉ giúp các bạn biết Bridge Pattern là gì mà còn hiểu được tại sao và khi nào cần nó. Tóm lại, cách sử dụng inheritance một cách máy móc có thể vô tình dán chặt những abstraction và implementation với nhau trong khi một số ứng dụng cần điều ngược lại. Bridge Pattern có thể được sử dụng khi một abstraction có nhiều implementation và cả 2 nhóm có thể có nhiều thay đổi mà không phụ thuộc hoặc ảnh hưởng gì nhóm còn lại:bbpcuoi5:

Link gốc: http://nthoai.blogspot.com/search/label/Bridge%20Pattern

Quản lý bộ nhớ trong .NET

– Khi học lập trình C++, chúng ta biết rằng khi muốn tạo một đối tượng thì phải dùng từ khóa “new”, và khi không còn cần đến đối tượng này nữa, ta phải “delete”. Cơ chế quản lý bộ nhớ này được gọi là “reference counting”. Reference count sẽ tăng lên mỗi khi bộ nhớ được phân vùng cho một đối tượng mới, và giá trị ấy sẽ giảm đi khi đối tượng không còn sử dụng trong chương trình. Người lập trình viên trước đây phải quản lý bộ nhớ theo cách như vậy, nêú anh ta quên không delêt một object sau khi sử dụng xong, rất có thể sẽ dẫn đến một trạng thái gọi là “memory leak”.

– Trong môi trường .NET, bộ nhớ được quản lý bởi CLR. Sẽ có một thao tác gọi là “Garbage Collection” được chạy ngầm bên dưới và người lập trình .NET không cần phải nhức đầu quan tâm tới memory leaks.

The garbage collection algorithm

– Trong .NET, các object được tạo ra và lưu vào một vùng nhớ gọi là HEAP, như chúng ta biết thì HEAP là một cấu trúc hình cây. Garbage Collector sẽ thực hiện công việc của nó khi vùng nhớ Heap này full. Nó sẽ bắt đầu duyệt từ những node root, các node root này được xác định bởi JIT compliler. Nó sẽ duyệt qua chuỗi các objects và lần lượt thêm những objects nó tìm thấy vào một danh sách.

– Khi nó duyệt tới một object nào đó và phát hiện ra object này đã được thêm vào danh sách rồi, nó sẽ dừng lại. Bằng cách này, Garbage Collector sẽ duyệt qua tất cả các object được link từ những objects root của chương trình. Khi quá trình duyệt qua các object này kết thúc, danh sách của nó chỉ chứa những objects có giá trị sử dụng, những object còn lại trong Heap mà không có trong danh sách sẽ bị xem là vô giá trị và “CÓ THỂ” bị hủy đi. Chúng sẽ bị đánh dấu và bị “collected”

Heap

Hình 1: Cấu trúc bộ nhớ Heap trong .NET

– Trong hình 1, blocks 1 3 và 5 là những node có thể được sử dụng bởi các application roots. Blocks 2 và 4 sẽ bị đánh dấu để “collect”. Một khi quá trình collection đã xong, bộ nhớ của .NET được dọn dẹp và vác vùng nhớ rời rạc được dồn lại cho liên tục vì các vùng nhớ bị chiếm của các objects không cần thiết đã được thu hồi.

– Tuy nhiên, quá trình trên sẽ chạy một cách định kì chứ không phải ngay khi một object nào đó “goes out of scope”. Chỉ khi nào vùng nhớ trống bị thu hẹp đến một mức độ nào đó thì quá trình Garbage Collection mới được gọi. Điều trở ngại duy nhất của phương pháp này là nó không cho phép người lập trình xác định được chính xác thời điểm object bị hủy khỏi bộ nhớ.

Circular references

– Truy xuất vòng là trạng thái mà hai objects refer lẫn nhau. Giả sử rằng ta có một lớp A refer to lớp B. Nếu lớp B cũng refer đến lớp A thì chúng ta có một truy xuất vòng. Chúng ta có thể nghĩ rằng nếu vậy thì các object của 2 lớp này sẽ không bao giờ bị xóa khỏi bộ nhớ nhưng thực ra Garbage Collector sẽ xóa mọi object nào mà nó không duyệt tới được từ các node root.
Generations

– Thuật toán của quá trình Garbage Collection được tối ưu hóa cao. Như đã nói ở trên, Garbage Collector sẽ tạo một danh sách những objects có ích và theo dõi sự reference đến chúng. Nó chia danh sách này thành các danh dách con gọi là các Generations. CLR chia Heap ra 3 generations. Những objects mới được tạo ra được cho vào generation 0. Khi những references đến các object này được giữ trong một thời gian dài, chúng sẽ vẫn tồn tại qua các lần garbage collection. Những object như vậy sẽ được “lên đời” và được chuyển vào generation 1 và generation 2. Quá trình phần loại như thế sẽ tăng performance bởi vì Garbage Collector có thể thực hiện công việc của nó trên một generation nào đó mà không cần phải duyệt cả Heap.

Generations

Hình 2: Các Generations

– Thông thường, các objects có thời gian tồn tại ngắn sẽ thường xuyên được tạo ra và huỷ đi trong Generation 0. Garbage Collector sẽ thực hiện công việc của nó trong Generation 0 chỉ khi Generation 0 bị đầy. Điều này xảy ra khi cần tạo một object mới mà không còn đủ bộ nhớ cho nó. Nếu như bộ nhớ thu hồi được đủ để tạo ra object này thì Garbage Collector sẽ không cần kiểm tra đến các Generation khác.

The Dispose design pattern: IDisposable, Dispose, and Finalize

– Common Language Runtime không thể clean up những resources như database connection, window handles và file handles. Vì thế, trách nhiệm clean up chúng thuộc về người lập trình. Những resources kể trên được gọi là unmanaged resources. Quá trình clean up những resources này có thể được thực hiện trong hàm Finalize.Finalize method được implement như là một destructor của ngôn ngữ C# nhưng rõ rang trong .NET không hề có khái niệm gọi là destructor, Finalize method chỉ tương tự như destructor mà thôi. Quá trình gọi Finalize method được điều khiển bởi Garbage Collector.

– Thường thường, khi lập trình ta vẫn muốn hủy ngay những unmanaged resources này. Khi mở file để đọc, ta muốn đóng ngay file handle khi đọc xong. Để làm được như vậy, .NET hỗ trợ chúng ta một thứ gọi là dispose design pattern.
Những objects muốn cleanup các unmanaged resource sẽ implement interface IDisposable. Interface này có method Dispose và chúng ta sẽ viết những thứ cần viết trong hàm này.

– Nếu như bạn chắc chắn là đã clean up mọi thứ trong hàm Dispose thì rõ ràng không cần thiết để Garbage Collector thực hiện clean up lần. Vì thế, trong hàm Dispose nên gọi method GC.SuppressFinalize() để Garbage Collector bỏ qua nó khi thực thi Finalization.
Chúng ta nên viết cả Finalize cũng như Dispose cho một object khi mà cần cleanup các unmanaged resources. Trong đó, hàm Finalize sẽ đóng vai trò backup cho hàm Dispose khi Dispose không được gọi. Và vì thế Garbage Collector có thể thực hiện Finalization trên object này để clean up các resources mà đáng lẽ phải được clean up trong hàm Dispose.

Generations

Hình 3: Dispose design pattern

Weak references

– .NET framework còn có một feature khác khá hấp dẫn mà ta có thể sử dụng để implement các kĩ thuật caches. Đó là kĩ thuật weak reference được implement bởi .NET, lớp System.WeakReference. Như tên gọi của nó thì chức năng này cho phép ta reference tới một object nhưng có một đặc điểm là object này vẫn có thể được collect bởi “garbage collector”. Kĩ thuật cache của ASP.NET sử dụng references, nếu bộ nhớ bị sử dụng quá cao, cache sẽ được clean up.

Forcing Garbage Collection

– .NET framework đã built sẵn lớp System.GC giúp người lập trình có thể thực hiện một số can thiệp vào Garbage Collector. Garbage Collection có thể được thực hiện ngay khi chúng ta call method GC.Collect. Người ta khuyên rằng không nên lạm dụng chức năng này vì nó sẽ làm chậm hệ thống. Có một điểm cần lưu ý là khi garbage collector run, nó sẽ tạm thời treo tất cả các thread đang chạy. Hàm GC.Collect không nên được đặt ở những nơi được gọi thường xuyên như các vòng lặp, làm như vậy sẽ ảnh hưởng nặng nề đến tốc độ của chương trình.

Kết luận:

– Ngoài những điều kể trên, .NET framework còn có 2 version của cùng một CLR tùy vào máy đang chạy là server với multi-processor hay là máy work station với 1 processor. Phiên bản server build của CLR được build để tận dụng lợi thế multi-processor, nhờ đó garbage collection có thể được thực hiện song song với các quá trình khác. Trên một máy chỉ có 1 processor như các workstation, chỉ có thể load bản workstation build của CLR.

– Khi hiểu được vài trò của Dispose Design Pattern, lập trình viên .NET sẽ biết được khi nào nên implement interface IDisposable để cleanup các unmanaged resources. Và với sự hỗ trợ của Garbage Collection, ta sẽ không cần quan tâm đến việc huỷ những đối tượng .NET trong chương trình. Các dòng lệnh như objectA = null; có thể là vô nghĩa vì đã có Garbage Collector quản lý chuyện đó. Cái chúng ta cần nhớ là phải cleanup các unmanaged resource như file handles, database connection, window handles.

 

Link gốc: http://nthoai.blogspot.com/search/label/Memory%20Management

Bắt đầu với Kendo UI Mobile

Bài viết khá hay, lướt qua về
1. Giới thiệu về Kendo UI Mobile
2. Tương thích hiển thị (Adaptive rendering): cho phép tương thích trên các nền tảng khác nhau iOS, Android, BlackBerry.
3. Giới thiệu về PhoneGap Build
4. Tạo một ứng dụng đơn giản
5. Sử dụng PhoneGap Build với ứng dụng đơn giản bên trên
6. Giới thiệu tiến trình Build với PhoneGap

Tóm lại: muốn tiếp tục học Kendo UI Moibile bạn phải học qua ví dụ demo, tham khảo API, widgets..

Link gốc bài viết: http://www.adobe.com/devnet/phonegap/articles/getting-started-kendo-ui-mobile-phonegap-build.html

Sau đây là một số bài viết bạn có thể tham khảo:

9 dấu hiệu nhận biết sếp tồi

Một vị sếp sẽ bị đánh giá là tồi nếu có những biểu hiện như: xem việc quản lý là ra lệnh và kiểm soát, nghĩ mình là “ngôi sao”, nhận thành công về phần mình nhưng đẩy thất bại cho người khác…

Theo trang

Theo trang CNBC, dưới một góc độ nào đó, những vị sếp tồi được định nghĩa là những nhà lãnh đạo luôn có những niềm tin lệch lạc về công việc và hoạt động quản lý. Dưới đây là 9 dấu hiệu cơ bản để nhận diện những vị sếp như vậy:

1. Xem quản lý là mệnh lệnh và kiểm soát

Sếp tồi nghĩ rằng, công việc của họ là ra lệnh cho nhân viên làm mọi việc và đảm bảo rằng nhân viên hoàn thành các công việc đó.

Trái lại, những vị sếp thông minh hiểu rằng, cái chính trong công việc quản lý là giúp nhân viên của mình thành công hơn và đưa ra những quyết định khó khăn mà nhân viên không thể tự quyết được.

2. Cho rằng, nhân viên phải “thích” làm việc nhiều giờ

Sếp tồi tin là những nhân viên nào không muốn làm việc 60h mỗi tuần đều là những kẻ chểnh mảng, vô giá trị.

Trong khi đó, sếp thông minh biết, nhiều nghiên cứu đã chỉ ra rằng, bất kỳ nỗ lực nào để làm việc liên tục hơn 40 giờ đồng hồ mỗi tuần đều làm giảm năng suất lao động.

3. Thích quản lý các con số hơn là con người

Sếp tồi tập trung toàn bộ năng lượng để đảm bảo rằng, các con số được đưa ra là “ngon lành”, cho dù điều đó đồng nghĩa với việc thay đổi các con số.

Không giống như vậy, sếp thông minh biết, cách hiệu quả duy nhất để có được những con số tốt là giúp nhân viên của mình tạo ra con số của chính họ.

4. Tự mình làm nếu thực sự cần thiết phải hoàn tất một công việc nào đó

Sếp tôi cho bản thân họ là “ngôi sao” trong công việc, có thể giải quyết bất kỳ vấn đề gì bằng cách ôm đồm mọi thẩm quyền và trách nhiệm.

Ngược lại, sếp thông minh nhận thức được rằng, tài lãnh đạo thực sự là phải biết thúc đẩy cấp dưới tự chịu trách nhiệm về thành công hay thất bại của họ.

5. Không đưa ra quyết định cho tới khi nào có trong tay mọi dữ liệu

Sếp tồi sợ rủi ro đến mức, họ đòi hỏi hàng “núi” thông tin trước khi đưa ra bất kỳ quyết định quan trọng nào.

Sếp thông minh thì hiểu rằng, đôi khi, việc có quá nhiều thông tin chỉ khiến mọi chuyện thêm phần phức tạp.

6. Thành công là của sếp, thất bại là của nhân viên

Sếp tồi thích “vỗ ngực” khi mọi chuyện suôn sẻ, và chỉ tay phê bình khi xảy ra vấn đề.

Sếp thông minh biết rằng, công việc thực sự của họ bao gồm 2 điểm. Thứ nhất, họ phải khắc phục thất bại ngay trước khi xảy ra thất bại, và thứ hai là công bố thành quả khi nhân viên đạt được thành công.

7. Thích người khác phải đoán

Sếp tồi thích che giấu những “quân bài” mà họ đang có, không bao giờ để cấp dưới biết về quá trình ra quyết định.

Sếp thông minh hiểu rằng, các quyết định sẽ thành công hơn khi có sự tham gia ngay từ đầu của những người thực thi.

8. Xem lúc rà soát bảng lương là thời điểm hoàn hảo để “lên lớp” nhân viên

Sếp tồi thường đợi tới các đợt đánh giá năng lực và điều chỉnh lương mới tung ra “hàng lô” những lời phàn nàn,chỉ trích và khuyên bảo đối với nhân viên.

Sếp thông minh nhận thức được rằng, nhân viên sẽ hoảng sợ khi bị “đánh úp” kiểu như vậy, và chỉ có thể thay đổi hành vi của họ khi họ được chỉ bảo thường xuyên, từ tốn.

9. Tự xem mình là quan trọng đến mức không cần giữ lịch sự

Sếp tồi luôn có cảm giác mình vĩ đại, đến nỗi họ chẳng buồn quan tâm tới việc kiểm soát hành vi của mình.

Sếp thông minh hiểu rõ, thái độ tự cao tự đại rốt cục sẽ dẫn tới kết quả là sếp chỉ có một đám nhân viên xu nịnh, bất tài, phá hỏng công ty.

64 bit version of ‘Microsoft.Jet.OLEDB.4.0’ Office 2007/2010 Jet drivers

1. Cho phép sử dụng OLEDB trên môi trường 64 bit (hiên tại trong IIS đang phải Enable 32 bit = true) => Hơi bất tiện

2. Chi tiết tại: http://www.codicode.com/art/64_bit_version_of_microsoft_jet.aspx

3. Trang download của Microsoft: http://www.microsoft.com/en-us/download/details.aspx?id=13255