Tag Archive: minh thien


Nếu bạn thích xem video trên các trang xã hội như là Facebook, Twitter, Google+, ViewTube là một extension của Chrome có thể giúp bạn xem video một cách khác biệt. Videos mà bạn xem sẽ được hiện thành popup, và bạn có thể di chuyển nó xung quanh trang, giúp bạn vừa xem video vừa đọc tin tức mà không phải lo bị mất tập trung.

 Sau khi cài đặt extension, nó sẽ tự động chạy mỗi khi bạn chạy video trên facebook, twitter hoặc google+, và bạn có thể tự do di chuyển màn hình khắp nơi xung quanh trang. Bạn có thể bấm like, dislike hoặc comment ngay trên video mà không cần phải mở youtube lên.

 

 

Bình thường, khi video được chơi trên Twitter, nó sẽ tự động mở tab mới, và bạn sẽ bị mất tập trung vào trang. Do đó, khi sử dụng ViewTube, bạn có thể xem trực tiếp videos trên Twitter, mà không cần mở thêm tab.

 

 

Cài đặt ViewTube cho Google Chrome tại đây 

 

Nguồn: addictivetips

Advertisements

http://mp3.zing.vn/bai-hat/Ai-Roi-Cung-Khac-Anh-Quoc/ZWZCBWCB.html

http://static.mp3.zing.vn/skins/default/flash/player/mp3Player_skin8.swf?xmlurl=http://blog.apps.zing.vn/api/mp3/index?q=eyJ0aXRsZSI6IkFpIFJcdTFlZDNpIENcdTAxNjluZyBLaFx1MDBlMWMiLCJzaW5nZXIiOiJBbmggUXVcdTFlZDFjIiwidXJsU291cmNlIjoiaHR0cDpcL1wvbXAzLnppbmcudm5cL3htbFwvbG9hZC1zb25nXC9NakF4TVNVeVJqQTNKVEpHTVRVbE1rWTBKVEpHWlNVeVJqUmxNamxrTlRVMllXRTJNMlEwWlRNek1qTXpaR1JpWXpBNU9XTTRObVkxTG0xd015VTNRekk9IiwiYXV0b3BsYXkiOiJmYWxzZSJ9

Tiếc nuối những gì đã qua….
nhưng không oán trách vì người đã quên.
Vì thời gian trôi ai chẵng 1 lần, quên mất là mình đang dần đổi thay
Tình mong manh, nên tình dễ phai
Nhiều ước muốn nên lòng người dễ thay.
Người ở lại, đau xót từng ngày dài, chờ mong và  thương nhớ

Và rồi ngày tháng qua đi, tình vẫn là chia li.
Chờ mãi trong vô vọng….
Đành thôi xem như tôi đã chết trong người, vùi chôn cùng bao nhiêu ngày tháng yêu nhau.
Hình bóng em bây giờ, tận đáy sâu tâm hồn, hiện hữu cũng chỉ là… một ký ức….

Tôi muốn tìm gì đó bình yên….

Sống xa hoa – không chỉ là chuyện cá nhân

TTCT – Việc dùng vật chất để “lượng giá” một con người đã có từ xa xưa, có lẽ từ lúc con người có ý thức về việc sở hữu vật chất mình có được. Điều này đã trở thành động lực – có thể nói là lớn nhất – thúc đẩy con người làm ra nhiều của cải vật chất hơn để phục vụ mình.

Ngày nay, những vật chất mang tính tiện nghi đang dần mang thêm chức năng chứng minh giá trị của chủ sở hữu, và ngày càng nhiều thứ không có giá trị sử dụng mà chỉ để làm vật trang sức. Ví dụ những viên đá quý đính trên chiếc điện thoại đời mới chẳng nâng cao thêm tính năng sử dụng của phương tiện liên lạc này nhưng chắc chắn sẽ cho biết mức độ “chịu chơi” của chủ nhân nó.

Nếu một người xem hàng hóa đồng nghĩa với nhân cách thì đó là việc của một cá nhân, nhưng nếu cả xã hội cũng sùng bái lối thể hiện này thì phải chăng đó là sự yếu kém của chính não trạng và nền tảng đạo đức của xã hội đó? Một khi xã hội quá đề cao vật chất và sự xa hoa thì chưa thể nào chấm dứt những cuộc chơi phù phiếm của những kẻ giàu có lẫn những kẻ cố – gắng – làm – ra – vẻ – giàu – có; vì đây là cách nhanh nhất để đáp ứng được sự định giá của xã hội đó.

Nói vậy cũng có nghĩa xã hội có khả năng đưa ra những cách định giá mới để chống lại sự suy tôn quá mức đối với thói xa hoa, nhất là trong hoàn cảnh toàn cầu đang chống chọi với sự suy thoái kinh tế hiện nay. Nếu các vụ “đốt tiền” vào hàng hiệu hoặc các vụ chơi ngông của người nổi tiếng còn được tung hô thì làm sao đề cao được các giá trị nhân cách?

Hiện nay ở Việt Nam chắc chắn rằng những biểu hiện tò mò, ham hố, “sành điệu” của một tầng lớp “nhà giàu mới” đề cao lối sống phù hoa có xuất phát từ sự ảnh hưởng của lối sống phương Tây, từ tâm lý hưởng thụ sau những năm dài chiến tranh gian khổ và cả sự suy yếu trách nhiệm cá nhân đối với gia đình và cộng đồng nữa.

Nhưng nên nhớ rằng phương Tây có nhiều thế kỷ hình thành nên cấu trúc xã hội với các tổ chức vận hành từ cơ sở đến thượng tầng hiệu quả, giúp chúng có khả năng “định lượng” giá trị một cá nhân qua những hoạt động khác nhau chứ không phải chỉ vật chất.

Như vậy không thể lên án một chiều những người thể hiện và cả những người tung hô giá trị hàng hóa, mà cần tìm cách giải ngay trong việc đề cao các giá trị nhân cách, đồng thời phải tìm kiếm những sự bảo hộ các giá trị đó về mặt đạo đức.

Dù được bào chữa hay biện minh là vô tình, không cố ý, “tôi giàu tôi có quyền” thì việc đốt tiền vào những siêu đám cưới, những bộ trang phục chỉ mặc vài lần có giá bằng cả một đời làm việc của công nhân, vẫn gợi lên sự liên hệ chua xót với rất nhiều cảnh đời đang chạy ăn từng bữa. Đã đến lúc hiện tượng khoe khoang cần được nhìn nhận với sự nghiêm khắc hơn và các biện pháp hay định chế xã hội cần có tiếng nói mạnh mẽ hơn để kiểm soát thói xa hoa, tiêu xài vô trách nhiệm.

ĐÔNG PHƯƠNG (Thủ Đức, TP.HCM)

__________

George Clooney từng biến mình thành công cụ

Trong vòng một tháng qua, tài tử điển trai của Hollywood George Clooney liên tục xuất hiện trên truyền thông thế giới, với tần suất nhiều hơn trước đây và vì những lý do không liên quan tới điện ảnh hay vẻ điển trai của mình. Đặc biệt, ngày 19-3, Clooney tự nguyện vào tù cùng cha mình khi cả hai cứ đứng lỳ trong khuôn viên Đại sứ quán Sudan ở Washington.

Cảnh sát xuất hiện, còng tay anh và đưa vào tù (ảnh). Chỉ vài giờ sau anh ra tù. Tin “hot” lập tức lan ra khắp nơi trên thế giới: Clooney bị bắt vì biểu tình phản đối những hành vi bạo lực chống dân thường vô tội, trẻ em và phụ nữ, yêu cầu Chính phủ Sudan cho phép các tổ chức viện trợ nhân đạo vào để cứu giúp người dân nước này trước khi Sudan trở thành nơi khủng hoảng nhân đạo lớn nhất thế giới.

Vụ bắt giữ khiến Clooney cảm thấy “rất hài lòng” vì nó khiến thông tin về Sudan được nhắc tới nhiều hơn cả sau khi anh điều trần trước Quốc hội Mỹ. Anh làm mọi việc để đảm bảo truyền thông thế giới chụp được hình ảnh anh tay bị còng đằng sau.

Các hoạt động vì xã hội của các ngôi sao thế giới không phải là điều mới mẻ. Từ những năm 1960, Paul Robeson và Woody Guthrie đã trở thành hình mẫu trong lĩnh vực tăng cường nhận thức, gây quỹ và lên tiếng vì một vấn đề nào đó mà xã hội quan tâm. Không “mượn” hàng hóa để đánh bóng mình, nhiều ngôi sao nước ngoài còn biến mình thành công cụ nhằm đánh động quan tâm về những vấn đề xã hội lớn lao…

H.N.

__________

“Để tiền làm gì?”

1. Trong thời gian Mark Zuckerberg – nhà sáng lập mạng xã hội Facebook – du lịch Việt Nam, ngạc nhiên trước sự giản dị của nhà tỉ phú trẻ, có độc giả của một tờ báo mạng lớn đã nhận xét: “Không biết ông này để tiền làm gì!”. Thắc mắc này cũng dễ hiểu vì trong vài năm trở lại đây, tại nước ta đã mặc nhiên hình thành một quan niệm là hễ thành đạt thì phải phủ lên mình những món hàng xa xỉ, tới mức chúng được không ít người xem là biểu hiện cho sự thành công và giá trị của một người.

Mads Mikkelsen vai Rochefort trong Ba chàng ngự lâm – Ảnh: moviebuzzers.com

Tất nhiên ai cũng có quyền sử dụng đồng tiền của mình theo ý thích (và trong khuôn khổ của luật pháp), nhưng khi quần áo, đồ phụ tùng, giày dép… được xem như những tiêu chí quan trọng nhất khi đánh giá một ai thì tất nhiên sẽ dẫn đến tình trạng có những người cố tạo cho mình giá trị ảo bằng hàng hóa thay vì bỏ công sức ra xây dựng những giá trị thật cho bản thân.

Tâm lý quan trọng hóa những món “hàng hiệu” còn dẫn tới một hệ lụy khác là một bộ phận không nhỏ người trẻ háo thắng và nông nổi, tìm mọi cách để sở hữu chúng cho “bằng chị bằng em”. Chuyện cậu học sinh Trung Quốc bằng lòng bán đi một trái thận để mua iPhone, được báo chí phản ánh trong thời gian gần đây, là một minh chứng cụ thể cho sự quyến rũ đầy nguy hiểm của ánh hào quang “hàng hiệu”!

Năm ngoái không ít người đã phải giật mình khi đọc thấy trên mạng lời rao của một cô bé sẵn sàng qua đêm với người lạ để đổi lấy chiếc vé xem buổi diễn của nhóm Super Junior. Cho dù chỉ là một chiêu gây sốc để thu hút sự chú ý, thì ý tưởng này cũng cho thấy ánh hào quang “sành điệu” có thể đưa những người trẻ và rất trẻ đi xa tới đâu.

2. Chẳng riêng tôi mà những bạn bè đã định cư lâu năm hoặc đang làm việc tại các nước phát triển phương Tây đều thấy choáng trước cách ăn xài của nhiều người tại TP.HCM và thủ đô Hà Nội hiện nay trong những chuyến về thăm quê hương.

Những “siêu xe”, những món trang phục mang mác các nhãn hiệu hàng đầu thế giới, những chiếc iPad, iPhone thường được giới thiệu tại Việt Nam sớm hơn trên thị trường Tây Âu từ 3-6 tháng, tuy có cho thấy sự phát triển nhanh chóng của đất nước nhưng cũng gợi lên không ít băn khoăn khi vẫn còn một khoảng cách rất xa giữa Việt Nam và các nước trong khu vực.

Năm 2011 GDP của ta chỉ là 3.354 USD/người, đứng hạng 129/181 nước (tụt hai hạng so với 2010). Thu nhập bình quân của người Việt năm 2011 là 1.382 USD (năm 2010 là 1.224 USD, đứng hạng 141/189 nước, Thái Lan là 5.281 USD, hạng 90/189, Indonesia là 3.469 USD, hạng 108).

Trào lưu sở hữu những món hàng xa xỉ của không ít người Việt có thể nhằm mục đích “lòe” thiên hạ, cũng có thể do bị lây bệnh “nhà giàu mới” (nouveau riche) đang lan rất nhanh tại các thị trường mới nổi. Trong giai đoạn chuyển đổi từ nền kinh tế chỉ huy bao cấp sang kinh tế thị trường, không ít người có cơ hội phất lên nhanh chóng.

Nhiều người ngất ngây với sự đổi đời mau chóng này đã sa vào sự hoang phí thay vì tích lũy cho tái đầu tư và phòng ngừa rủi ro trong kinh doanh; hoặc lưu danh bằng các công trình phục vụ lợi ích của xã hội và cộng đồng – như cách làm của nhiều nhà giàu tại các nước phát triển.

Những cách hành xử lố bịch, như một đại gia Trung Quốc chơi trội bằng cách rải tiền làm thảm cho con giẫm lên trong lễ cưới, những biểu hiện coi thường pháp luật, không tôn trọng những người xung quanh… gọi chung là tính trọc phú, là hệ quả tất yếu khi có khoảng cách đáng kể giữa nền tảng văn hóa, tri thức với khả năng kinh tế.

3. Trong cái có thể gọi là “cơn lốc hàng hiệu” hiện nay, chúng ta không thể không nói tới trách nhiệm của một bộ phận trong giới truyền thông. Khi những trang báo giấy, báo mạng tràn ngập hình ảnh các “sao” lớn nhỏ khoe khoang những món hàng đắt tiền mà giá mua nếu là hàng thật vẫn quá cao so với thu nhập khai thuế của không ít “sao”, thì không tránh khỏi những tác động nhất định lên công chúng, đặc biệt là giới trẻ.

Có nhiều người cho rằng phô trương, xa xỉ là đặc tính của giới showbiz, nhưng những ngôi sao giàu có như Angelina Jolie cũng chỉ chưng diện khi thật sự cần thiết, chẳng hạn như lễ trao giải Quả cầu vàng. Diễn viên Trần Khôn (Chen Kun) – ngôi sao của Long Môn phi giáp – mặc trang phục thể thao trong buổi lễ nhậm chức đại sứ của Tổ chức Unicef tại Trung Quốc gần đây.

Bản thân tôi đã không nhận ra diễn viên Đan Mạch có đẳng cấp quốc tế Mads Mikkelsen (*) khi tình cờ gặp anh trong quán cà phê của ông bà thân sinh anh tại quê nhà anh Nykoebing S (gần Copenhagen). Có lẽ đối với Mads thì những vai diễn ấn tượng đáng chú ý hơn là trang phục.

QUẾ VIÊN (Copenhagen)

Một mình đạp xe 1.800 km đi học khởi nghiệp

Ví 1.800 km từ Hà Nội vào TP HCM như quá trình lập nghiệp, anh Nguyễn Ngọc Hưng chọn chiếc xe đạp làm phương tiện, vừa để thử thách bản thân, vừa mong học được những kỹ năng cần thiết qua việc trải nghiệm.

Anh Hưng (ở Hà Nội) vừa trúng tuyển tham gia một khóa huấn luyện về khởi nghiệp trong lĩnh vực Internet, di động sắp diễn ra tại TP HCM. Nhiều lần bay ra bay vào TP HCM, nhưng lần này anh thử sức chọn xe đạp làm phương tiện băng qua quãng đường 1.800 km, với mục đích tự trải nghiệm bản thân và học tất cả những gì diễn ra trong và sau cuộc hành trình. “Mình muốn làm để thử thách bản thân, trải nghiệm và học những kỹ năng khởi nghiệp cần thiết từ chính chuyến đi”, anh Hưng nói.

Anh Nguyễn Ngọc Hưng trên chặng đường Thanh Hóa – Nghệ An.

Theo đó, 4h30 sáng ngày 9/5, anh Nguyễn Ngọc Hưng, sống ở Hà Nội bắt đầu chặng đường 1.800 cây số vào TP HCM bằng xe đạp. Những vật dụng cần thiết, nhỏ gọn nhất được mang theo như bông băng y tế, dầu gió, thuốc dự phòng, lương khô, chai sạch đựng nước, túi nilon, đồ dùng cá nhân và laptop để làm việc…

Tổng thời gian anh Hưng đạp xe trên đường 3 ngày đầu tiên là hơn 25 tiếng (tính theo đồng hồ điện tử được anh mang theo). Đến cuối ngày 11/5, anh đã vượt qua hơn 400 cây số, đang trong cuộc hành trình chinh phục Đèo Ngang. Tốc độ trung bình 16-20 km mỗi giờ, còn những đoạn leo đèo ngược gió, vận tốc là 8 km.

“Đã leo dốc mà lại còn thêm gió ngược chiều, những lúc thế này chắc đi bộ còn nhanh hơn. Gió khiến việc lao xuống dốc không còn nghĩa lý gì, vì bạn thả phanh cũng chẳng chạy được bao nhiêu. Đến con dốc sau, không hiểu sao nó dài thế, lên đến nửa chừng, tất cả cơ chân cơ tay gần như bó cứng lại. Nhưng ý chính thắng sức ỳ của cơ thể, tôi đã vượt qua”, anh Hưng chia sẻ trên blog cá nhân về chặng đường ngày 11/5.

Suốt quãng đường đi, không may hỏng xe, anh phải tự mày mò sửa chữa. Đêm đến cần thuyết phục người dân địa phương đồng ý cho vào ngủ nhờ. Ngoài ra, do đi một mình nên nếu kết thúc chặng đường bất hợp lý nơi đèo vắng, rừng heo hút, anh cũng có thể gặp nhiều nguy hiểm. Từ những tình huống trên đường, anh Nguyễn Ngọc Hưng tin có thể rèn luyện được những kỹ năng cần thiết cho công việc như khả năng thuyết phục, xử lý sự cố, làm chủ thời gian, kế hoạch… Bởi vậy, anh gọi 1.800 cây số lần này của mình là hành trình lập nghiệp mini.

Thông thường, với một cuộc chuyến xuyên Việt bằng xe đạp, một người sẽ mất 15 ngày trở lên. Nhưng anh Hưng buộc phải hoàn thành kế hoạch này trong 12 ngày để kịp tham gia khóa học vào ngày 22/5 tới.

Đang triển khai dự án thiết kế phần mềm dành cho smartphone với số vốn ban đầu hơn 2 tỷ đồng, anh Hưng cho biết khóa học tại TP HCM khá quan trọng. Đó là cơ hội để anh tạo mối quan hệ, học kinh nghiệm khởi nghiệp và kêu gọi đầu tư từ những doanh nhân thành đạt trên thế giới.

Trên dọc hành trình, để tránh các bác tài ngược chiều lấn làn đường, anh Hưng “thiết kế” chiếc bảng một mặt đề “Đừng vượt”, một mặt ghi chữ “Đi chậm”.

Ý tưởng đạp xe xuyên Việt tình cờ đến với anh hồi cuối tháng 4, khi gặp một bạn người Italy đi vòng quanh Đông Nam Á bằng xe đạp. “Mượn xe của bạn nước ngoài một tối, tôi đạp suốt 3 tiếng qua Hồ Gươm, Hồ Tây, cầu Long Biên, cầu Chương Dương, cảm giác thật thú vị nên quyết thử thách bản thân cho chuyến đi dài”, anh Hưng tâm sự.

Sau 2 tuần tập luyện, tham gia vào các diễn đàn để học hỏi kinh nghiệm, anh Nguyễn Ngọc Hưng chuẩn bị đồ đạc lên đường. Đến phút chót thì người bạn đồng hành “bỏ cuộc”. Thừa nhận, khi đó có đôi chút dao động song anh Hưng vẫn quyết thực hiện, dù vấp phải không ít phản đối, nghi ngại và lo lắng của gia đình. Thậm chí, trước đó, anh từng nghe tin một anh bạn đuối sức, phải truyền nước giữa đường… lấy sức quay về cũng trong cuộc hành trình xuyên Việt tương tự.

Chị Đặng Thị Thuy Thùy, phó giám đốc chi nhánh TP HCM của đơn vị tổ chức khóa học mà anh Hưng chuẩn bị tham gia chia sẻ, không loại trừ khả năng anh Hưng sẽ không thể hoàn thành được chặng đường dài gần 2.000 km. Tuy nhiên, theo chị, khởi nghiệp là như vậy, dám nghĩ, dám làm, dám thử thách bản thân, không sợ thất bại và sẵn sàng làm lại. “Chúng tôi đã lên kế hoạch động viên và hỗ trợ Hưng trên suốt dọc đường đi từ Bắc vào Nam”, chị Thùy nói.

Okay! mình sẽ bắt đầu bài hướng dẫn với Stock như sau:

Click vào ảnh để lấy Full sizeClick vào ảnh để lấy Full size

Trước tiên mình xin nói trước là các Layer Adjustment đều được tạo ở Layer > New Fill Layer hoặcLayer > New Adjustment Layer.

Bước 1: Mở ảnh bằng photoshop, Image > Mode > Labs Color

Blend màu lạ mắt với tone màu vàng cam cổ điển

Mở stock, nhân đôi (Ctrl + J), chúng ta sẽ có Layer Background copy, sau đó tiến hành trộn màu bên Channel ở hệ Lab (với những bạn đã đọc tut làm màu tuyết thì chắc không còn lạ, xem thêm tại đây –> Hiệu ứng mùa đông lạnh giá)

Tại Layer Background copy, chuyển sang box Channel

Chọn kênh a, ấn Ctrl+A để tạo vùng chọn toàn bộ ảnh:

Blend màu lạ mắt với tone màu vàng cam cổ điển

Ctrl+C để copy kênh a

Chọn kênh b

Ctrl+V để copy kênh a sang kênh b

Blend màu lạ mắt với tone màu vàng cam cổ điển

Blend màu lạ mắt với tone màu vàng cam cổ điển

Sau khi xong các bạn chuyển về hệ RGB

Image > Mode > RGB Color

Hộp thoại hiện ra, chọn:

Blend màu lạ mắt với tone màu vàng cam cổ điển

Bước 2: Tạo 1 lớp Hue/Saturation

Bước này mục đích là chỉnh tất cả vùng màu Cyan có trong ảnh.

Blend màu lạ mắt với tone màu vàng cam cổ điển

Hue: đổi màu Cyan sang bất cứ 1 màu nào khác có trong bảng màu.

Saturation: tăng/giảm độ bão hòa của ảnh (hiểu một cách khác là độ tươi/nhạt của màu).

Lightness: tăng/giảm độ sáng/tối của màu.

Bước 3: tạo 1 lớp Curves để tăng sáng cho ảnh (nên tăng nhẹ tránh ảnh bị cháy màu).

Blend màu lạ mắt với tone màu vàng cam cổ điển

Bước 4: Tạo 1 lớp Gradient Map

Blend màu lạ mắt với tone màu vàng cam cổ điển

Bước 5: Tạo 2 lớp Solid Color

Blend màu lạ mắt với tone màu vàng cam cổ điển

Blend màu lạ mắt với tone màu vàng cam cổ điển

Bước 6: Tạo 1 lớp Curves

Blend màu lạ mắt với tone màu vàng cam cổ điển

Bước 7:Tạo 1 lớp Selective Color

Blend màu lạ mắt với tone màu vàng cam cổ điển

Và cuối cùng ta có kết quả như sau :x

Blend màu lạ mắt với tone màu vàng cam cổ điển

Còn đây là 1 số kết quả khác với kiểu blend màu trên!

Blend màu lạ mắt với tone màu vàng cam cổ điển

Chúc các bạn thành công!!! :D

Những câu nói hay và ý nghĩa về cha mẹ

https://www.facebook.com/ConYeuBaMe.KhongNenLoi

Nuôi con chẳng quản chi thân

Bên ướt mẹ nằm, bên ráo con lăn.

Ơn cha núi chất trời Tây

Láng lai nghĩa mẹ nước đầy biển Đông.

Ơn cha trọng lắm ai ơi

Nghĩa mẹ bằng trời mang nặng đẻ đau.

Lên non mới biết non cao

Nuôi con mới biết công lao mẫu từ.

1/Nơi ẩn náu yên ổn nhất là lòng mẹ .

Florian

2/ Trên môi và trong trái tim em bé :” mẹ chính là tên của thượng đế ”

Thackeray

3/ Trái tim người mẹ là trường học của đứa con .

W. Bacher

4/ Tương lai của con là công trình của mẹ .

Napoleon I

5/ Bàn tay đong đưa vành nôi là bàn tay thống trị toàn cầu .

W.R.Wllce

6/ Mẹ, người tuyệt diệu nhất của mỗi con người trên thế gian này có được.

7/ Ôi ! tình mẹ , mối tình ko ai quên được .

V.Hugo

8/ Lòng mẹ là vực sâu mà dưới đáy luôn có sự khoan dung .

Balze.

9/ Ko có bà mẹ thì tổ ấm là cái gì ?

A.Hawthorne.

10/Có vợ là có lời khuyên chí lí , có mẹ vợ là được tiếp đón ân cần nhưng ko có gì hơn 1 người mẹ hiền .

L.Tolstoi.

11/Sự âu yếm của mẹ , 1 cuộc dạo chơi thú vị , những giờ phút say sưa nghe kể chuyện vui tươi , những điều ấy tác động đến cả 1 đời người .

M.Barries.

12/Vũ trụ ko có nhiều kì quan , nhưng kì quan tuyệt phẩm nhất là trái tim người mẹ.

Bernard Shaw.

13/Hạnh phúc thay cho người nào được Thượng Đế ban tặng cho một người mẹ hiền.

Lamartime

14/Người mẹ đánh đòn sửa phạt con nhưng chẳng mấy chốc bao con bằng những nụ hôn

Ngạn ngữ Armenia


15/Trên đời này, hầu hết những gì là đẹp đều hiện ra như hai, như ba, như hàng tá hay hàng trăm thứ. Nhiều như thể những bông hồng, những buổi hoàng hôn, những cầu vồng, những anh chị, những chú bác cô dì và anh em họ; nhưng trên cả thế giới, ta luôn luôn chỉ có MỘT bà mẹ!

Kate Douglas Wiggin


16/Nghề đẹp nhất, quan trọng nhất trong tất cả mọi nghề, là làm mẹ. Đó là nghề đòi hỏi nhiều tri thức nhất trong lãnh vực khoa học nhân bản.

Elizabeth Cady Stanton


17/Theo kinh nghiệm và nhận xét cuả tôi, nếu một gia đình còn bền chặt được qua thử thách, thì chín phần mười là nhờ ở người mẹ.

Roddy Doyle


18/Chuá không thể ở khắp mọi nơi, nên Ngài sinh ra người mẹ.

Proverbe yiddish


19/Tôi đã mở mắt ra, tôi đã say mê nhìn mặt mẹ tôi …Tôi bắt đầu cuộc sống như vậy.

George Eliot

20/Ý nghĩa của từ mẹ

Million là hàng triệu điều mẹ trao cho con…

Old là nghĩa là mẹ sẽ vì thế mà ngày càng già đi…

Tears là những giọt nước mắt mà mẹ đã đổ vì con…

Heart là trái tim vàng của mẹ…

Eyes là đôi mắt mẹ luôn dõi theo con…

Right là những gì đúng đắn mẹ hay khuyên bảo…

“Cha mẹ nhận một đời bão tố

Để cho con mãi mãi bình yên”


“Nước biển mênh mông không đong đầy tình Mẹ

Mây trời lồng lộng không phủ kín tình Cha”



” Đi khắp thế gian không ai tốt bằng Mẹ

Gánh nặng cuộc đời không ai khổ bằng Cha”./.

Các bạn có muốn làm cho Facebook profile của mình ai nhìn cũng phải nể phục ko? Bài Notes này mình sẽ chỉ các bạn làm cho profile mình thêm ấn tượng nhé♥ Lợi dụng đặc điểm tag hình, nghệ sĩ Alexandre Oudin đã khám phá ra việc lợi dụng 6 tấm hình thành những mảnh ghép của một bức ảnh của riêng mình, chỉ tốn chừng 15 phút thao tác là bạn cũng có thể tạo ra cho mình một profile Facebook rất độc đáo như vậy đấy.

 

Quy tắc thực hiện cũng khá đơn giản, có thể liệt kê ra thành 7 bước như sau:

1. Bạn dùng công cụ chụp ảnh màn hình Facebook của bạn rồi dùng Photoshop mở tấm ảnh này.

2. Trên màn hình Photoshop, chọn công cụ Slice và lần lượt rê chuột tạo ra 6 vùng chọn tương ứng với 6 vùng ảnh trên hình. 

3. Sử dụng công cụ Rectangular Marquee []tạo vùng chọn là 6 vùng mà bạn đã dùng công cụ Slice vạch ra ở bước 2., chú ý là bạn cần chọn đúng và chính xác, nếu khó thì bạn có thể phóng lớn để tạo vùng chọn sao cho nó bám vào vùng mà công cụ Slice đã vẽ, xong bạn nhấn nút Delete để xóa bức hình này đi.

4. Mở bức ảnh bạn dùng làm hình Profile và đưa vào hình này, khi đã cân chỉnh ngay ngắn như ý muốn bạn cho lớp (layer) của bức ảnh này nằm phía dưới của lớp hình bạn đã chụp trang Facebook.

5. Trên Photoshop bạn chọn File > Save for Web & Device, hộp thoại hiện ra bạn chọn lưu với định dạng là JPG, Quality bạn chọn là 100, ở màn hình preview bạn dùng chuột và phím Shift để chọn 6 hình ở vùng mà bạn đã cắt tại bước 3., xong chọn đường dẫn lưu vào thư mục nào đó để dễ dàng truy xuất.

6. Vào Facebook, chọn Profiles > Photos > Upload Photos, chọn đưa toàn bộ những tấm ảnh đuôi .JPG bạn đã cắt ra từ Photoshop lên Facebook, ở màn hình kế tiếp Facebook sẽ yêu cầu bạn tạo Album, bạn đặt tên cho album và chú ý chọn album này chế độ xem hình là Public .

7. Đây là bước cuối cùng và cũng là bước quan trọng, để tạo được tấm ảnh ưng ý thì bạn cần tag chính bạn vào bức hình theo thứ tự từ phải qua trái, tức tấm ảnh nằm ở bên tay phải của dãy hình sẽ là tấm được tag đầu tiên, cứ thế làm cho đến tấm thứ 6 là bạn chọn làm Profile Pictures.

Nếu bạn thấy mô tả bên trên quá khó hiểu thì có thể tham khảo đoạn video hướng dẫn sau:

PS: Cách này sẽ bị vô hiệu nếu bạn bị tag vào các hình khác

Theo Gizmodo

 

Ban đầu là idea cho fb nhưng do fb chuyển qua tiemline, còn zing vẫn còn như fb cũ nên ta ứng dụng qua zing.

Trong bài trước mình đã giới thiệu về Stored Procedure, Trong bài này chúng ta sẽ tìm hiểu về  Function và Trigger – một phần cũng không kém phần quan trong trong lập trình với cơ sở dữ liệu

1. Hàm – Functions

Cũng giống như Stored Procedure Hàm là một đối tượng trong cơ sở dữ liệu bao gồm một tập nhiều câu lệnh SQL được nhóm lại với nhau thành một nhóm. Điểm khác biệt giữa hàm và thủ tục là hàm trả về một giá trị thông qua tên hàm. Điều này cho phép ta sử dụng hàm như là một thành phần của một biểu thức chẳng hạn như trong các câu lệnh truy vấn hay các câu lệnh thực hiện cập nhật dữ liệu

Trong SQL có rất nhiều các hàm được định nghĩa sẵn (Được chia theo nhóm – Trong 1 Database bạn chọn Programmability/Functions/System Functions) như các hàm về chuỗi (String Functions), các hàm về ngày tháng (Date and Time Functions), Các hàm toán học (Mathematical Function), … Ngoài những hàm do hệ quản trị cơ sở dữ liệu cung cấp sẵn, bạn có thể tự xây dựng các hàm nhằm phục vụ cho mục đích riêng của mình – Các hàm do người dùng định nghĩa. Các hàm do người dùng định nghĩa thường có 2 loại: Loại 1 là Hàm với giá trị trả về là “dữ liệu kiểu bảng” – Table-valued Functions; Loại 2 là Hàm với giá trị trả về là một giá trị – Scalar-valued Functions và các hàm này cũng sẽ được Hệ quản trị phân thành 2 nhóm.

Các hàm sẵn có của SQL bạn tự tìm hiểu và sử dụng, trong bài viết này mình giới thiệu qua về những hàm “Do người dùng định nghĩa”.

Cú pháp của hàm như sau:

CREATE FUNCTION Ten_Ham ( [Danh_Sach_Cac_Tham_So] )
RETURNS Kieu_Du_Lieu_Tra_Ve_Cua_Ham
AS
BEGIN
Cac_Cau_Lenh_Cua_Ham
END

 Ten_Ham: Tên của hàm cần tạo. Tên phải tuân theo qui tắc định danh và không trùng với tên của các hàm hệ thống có sắn.
– Danh_Sach_Cac_Tham_So: Các tham số của hàm được khai báo ngay sau tên hàm và được bao bởi cặp dấu (), Danh sách các tham số này có thể không có – trường hợp này thì sau tên hàm bạn cần có cặp dấu (). Nếu hàm có nhiều tham số thì các khai báo phân cách nhau bởi dấu phẩy và phải bao hồm 2 phần: Tên tham số được bắt đầu bởi dấu @, Kiểu dữ liệu của tham số
– Cac_Cau_Lenh_Cua_Ham: Tập hợp các câu lệnh sử dụng trong nội dung hàm để thực hiện các yêu cầu của hàm.

Giờ chúng ta sẽ xem các ví dụ cụ thể để hiểu hơn về hàm nhé:
Ví dụ 1: Mình sẽ lấy một ví dụ thật đơn giản là hàm không có Danh_Sach_Cac_Tham_So – trả về giá trị là năm hiện hành (Theo giờ hệ thống trên máy Database server):

CREATE  FUNCTION dbo.fuGetCurrYear ()
RETURNS int
AS
BEGIN
RETURN   YEAR(getdate())
END
Xem ví dụ trên bạn sẽ thấy nó rất đơn giản nhưng qua đây bạn cũng đã biết được việc viết hàm trong SQL như thế nào.

Ví dụ 2: Tiếp theo mình sẽ viết một ví dụ nữa để bạn hiểu và có thể viết cho mình các hàm tự định nghĩa:
Ví dụ này sẽ có 2 tham sô trong Danh_Sach_Cac_Tham_So. Hàm sẽ trả về số ngày của tháng, năm do bạn truyền vào; Bạn biết khi lập trình với Pascal bạn đã quen với bài toán tính số ngày của thàng – Với năm nhuận thì tháng 2 có 29 ngày, các năm khác có 28 ngày. (Qua hàm này bạn cũng sẽ hiểu hơn về điều khiển IF (Xem thêm bài viết Kỹ thuật phân trang bằng Store Procedure để hiểu hơn về cách sử dụng IF trong SQL) và sử dụng Case – (Xem bài viết về Hàm Case trong SQL để hiểu hơn về Case)

 CREATE  FUNCTION dbo.fuDaysInMonth (
 @Thang Int,
 @Nam  Int
) 
RETURNS int
AS 
BEGIN  
 DECLARE @Ngay Int
 IF @Thang = 2
  BEGIN
   IF ((@Nam % 4 = 0 AND @Nam % 100 <> 0)
    OR (@Nam % 400 = 0))
    SET @Ngay = 29
   ELSE
    SET @Ngay = 28
  END
 ELSE
  SELECT @Ngay = 
   CASE @Thang
    WHEN 1 THEN 31
    WHEN 3 THEN 31
    WHEN 5 THEN 31
    WHEN 7 THEN 31
    WHEN 8 THEN 31
    WHEN 10 THEN 31
    WHEN 12 THEN 31
    WHEN 4 THEN 30
    WHEN 6 THEN 30
    WHEN 9 THEN 30
    WHEN 11 THEN 30
   END
 RETURN @Ngay
END

Ví dụ 3: Bạn xem tiếp ví dụ sau để xác định thứ trong tuần của một giá trị kiểu ngày

CREATE FUNCTION fuThu
(
@ngay DATETIME
)
RETURNS NVARCHAR(10)
AS
BEGIN
DECLARE @KetQua NVARCHAR(10)
SELECT @KetQua=CASE DATEPART(DW,@ngay)
WHEN 1 THEN N’Chủ nhật’
WHEN 2 THEN N’Thứ hai’
WHEN 3 THEN N’Thứ ba’
WHEN 4 THEN N’Thứ tư’
WHEN 5 THEN N’Thứ năm’
WHEN 6 THEN N’Thứ sáu’
ELSE N’Thứ bảy’
END
RETURN (@KetQua)  /* Trị trả về của hàm */
END

Một hàm khi đã được định nghĩa có thể được sử dụng như các hàm do hệ quản trị cơ sở dữ liệu cung cấp (thông thường trước tên hàm ta phải chỉ định thêm tên của người sở hữu hàm bằng dbo.) như ví dụ dưới đây:

SELECT e.FirstName, e.LastName,
dbo.fuThu(e.BirthDate) AS ThuOfBirth
FROM Employees e

Bạn có thể tham khảo thêm bài viết Xử lý từ khóa tìm kiếm cho bài viết

Tiếp theo mình sẽ nói về Hàm với giá trị trả về là “dữ liệu kiểu bảng”

Nếu đã biết về SQL chắc hẳn bạn đã biết cách tạo View từ các bảng trong CSDL, Nhưng với View bạn không thể truyền các tham số được, điều này phần nào đó làm giảm tính linh hoạt trong việc sử dụng View. Vậy nên khi bạn cần sử dụng dữ liệu dạng View mà có các tham số thì việc sử dụng hàm là một giải pháp hợp lý nhất.
Ví dụ 4: Giả sử Mình tạo 1 View như sau:

 CREATE VIEW vProducts
 as
 SELECT    
 Categories.CategoryID,
 Categories.CategoryName,
 Products.ProductName,
 Products.QuantityPerUnit,
 Products.UnitPrice
FROM        
 Categories INNER JOIN
 Products ON Categories.CategoryID = Products.CategoryID
 WHERE Categories.CategoryID=1

Bạn xem ví dụ bạn thấy rằng mình tạo ra 1 View vProducts có  Categories.CategoryID=1 và bạn muốn truy vấn các trường của bảng Products ừng với CategoryID=1 và bạn chỉ cần câu lệnh Select * from vProducts là bạn đã có kết quả như ý. Nhưng với những CategoryID khác thì View vProducts  không làm được trừ phi bạn. Vậy bạn thử sử dụng hàm sau để làm minh họa nhé

Ví dụ 5: Tạo một hàm trả về dữ liệu dạng bảng tùy theo giá trị của biến @CategoryID truyền vào:

CREATE FUNCTION fuGetProducts
(
@CategoryID int
)RETURNS TABLE
AS
RETURN
(
SELECT
Categories.CategoryID,
Categories.CategoryName,
Products.ProductName,
Products.QuantityPerUnit,
Products.UnitPrice
FROM
Categories INNER JOIN
Products ON Categories.CategoryID = Products.CategoryID
WHERE Categories.CategoryID=@CategoryID)

chạy thử hàm trên(Chú ý là khi hàm trả về dạng bảng bạn cũng coi đó như 1 table hoặc 1 View và bạn có thể truy vấn theo 1 hay nhiều trường của hàm) như sau:

SELECT CategoryID,
CategoryName,
ProductName,
QuantityPerUnit,
UnitPrice
FROM  dbo.fuGetProducts(1)
Sẽ tra về dữ liệu chính là Select * from vProducts ở trên. Nếu muốn lầy Theo CategoryID=2 bạn dùng câu lệnh Select * from dbo.fuGetProducts(2)…

Trên đây chỉ là một ví dụ nhỏ về hàm trả lại dữ liệu kiểu bảng hy vọng bạn sẽ hiểu phần nào về loại hàm này. Trong thực tế chúng ta sẽ cần nó để thực hiện các yêu cầu phức tạp hơn tùy vào dữ liệu thiết kế, quan hệ dữ liệu và yêu cầu mà bạn viết hàm để sử dụng

2. Trigger

Cũng tương tự như thủ tục lưu trữ (Stored Prodedure), một trigger là một đối tượng chứa một tập các câu lệnh SQL và tập các câu lệnh này sẽ được thực thi khi trigger được gọi. Điểm khác biệt giữa thủ tục lưu trữ và trigger là: Các thủ tục lưu trữ được thực thi khi người sử dụng có lời gọi đến chúng còn các trigger lại được “gọi” tự động khi xảy ra những giao tác làm thay đổi dữ liệu trong các bảng.

Mỗi một trigger được tạo ra được gắn liền với một bảng nào đó trong cơ sở dữ liệu của bạn. Khi dữ liệu trong bảng bị thay đổi (Là khi xảy ra các sự kiện INSERT, UPDATE hay DELETE) thì trigger sẽ được tự đông kích hoạt. Để xem các Trigger của một bảng trong SQL 2005 bạn chọn bảng đó, chọn Triggers

Sử dụng trigger một cách hợp lý trong cơ sở dữ liệu sẽ có tác động rất lớn trong việc tăng hiệu năng của cơ sở dữ liệu. Các  trigger thực sự hữu dụng với những khả năng sau:

  • Một trigger có thể nhận biết, ngăn chặn và huỷ bỏ được những thao tác làm thay đổi trái phép dữ liệu trong cơ sở dữ liệu.
  • Các thao tác trên dữ liệu (xoá, cập nhật và bổ sung) có thể được trigger phát hiện ra và tự động thực hiện một loạt các thao tác khác trên cơ sở dữ liệu nhằm đảm bảo tính hợp lệ của dữ liệu.
  • Thông qua trigger, ta có thể tạo và kiểm tra được những mối quan hệ phức tạp hơn giữa các bảng trong cơ sở dữ liệu mà bản thân các ràng buộc không thể thực hiện được.

Khi xảy ra ra một sự kiện thao tác dữ liệu một bản ghi trong CSDL nó sẽ lưu ra một bản ghi trong Trigger nó có tên là inserted đối với các thao tác Insert hay Update và deleted đối với Delete
Cú pháp chung để tạo một Trigger như sau:

CREATE TRIGGER Ten_Trigger
ON Ten_Bang
FOR {[INSERT] | [UPDATE] | [DELETE]}
AS
BEGIN
Cac_Cau_Lenh_Cua_Trigger
END
Như vậy khi tạo ra một trigger ta phải chỉ rõ là tạo ra trigger trên table nào và được trigger khi nào (insert, update hay delete. Sau chữ AS là các câu lệnh SQL xử lý công việc, có thể dùng cặp Begin … End hoặc không). Bạn có thể tham khảo thêm bài viết về Trigger Xây dựng cơ sở dữ liệu – TRIGGER

Giờ ta sẽ tìm hiều ví dụ để hiều hơn về Trigger nhé.
Vẫn với CSDL Northwind giả sử trong bảng Employees mình thêm 1 trường là Age – là tuổi của Employees. Giờ mình sẽ viết 1 trigger gắn với bảng Employees để khi thay đổi BirthDay thì trường Age sẽ tự động được cập nhật. Bạn xem ví dụ sau.

CREATE TRIGGER trigCalcAge
ON Employees
FOR  UPDATE, Insert
AS
BEGIN
DECLARE @age int
DECLARE @EmployeeID int
SELECT
@age=YEAR(GETDATE())-year(BirthDate),
@EmployeeID=EmployeeID
FROM inserted
IF UPDATE (BirthDate)
UPDATE Employees
SET Age = @age
WHERE EmployeeID=@EmployeeID
END
Xem ví dụ trên bạn thấy khi có thay đổi nó sẽ tạo 1 bản ghi inserted và chúng ta có thể lấy các giá trị của bản ghi đó. Khi thay đổi dữ liệu bạn sẽ không cần cập nhật trường Age.
Tương tự như vậy với trường hợp Xóa dữ liệu.
Một điều chú ý là với Trigger nó chỉ thực hiện với sự thay đổi dữ liệu của từng bản ghi. Với trường hợp cập nhật dữ liệu theo bó thì khi đó bạn cần các kỹ thuật xử lý phức tạp hơn.
Ví dụ câu lệnh sau: Update Employees Set BirthDate=’12/12/1990 12:00:00 AM’ Câu lệnh này sẽ update toàn bộ dữ liệu (Cập nhật theo bó) của bảng Employees  Nhưng khi đó Trigger của ta chỉ update trường Age ở bản ghi đầu tiên. Để xử lý trường hợp này có nhiều cách chẳng hạn như dùng vòng lặp (dùng con trỏ).

Trong bài viết này mình chỉ giới thiệu qua về Trigger như  vậy để bạn hiểu và ứng dụng nó vào database và yêu cầu của Project của bạn theo yêu cẩu cụ thể

Trong bài viết sau của loại bài này mình sẽ giới thiệu cách xây dựng lớp trong C# để thực thi các Stored Prodecure trong trang asp.net

Một số tài liệu cho bạn tham khảo:

1. Lập trình cơ sở dữ liệu SQL server
2. Câu lệnh truy vấn SQL server
3. Giáo trình thực hành SQL server

Hy vọng bài viết có ích đối với bạn. Chúc bạn thành công!

Đối với một lập trình viên đã có nhiều kinh nghiệm thường sẽ sử dụng Store procedure để thực hiện thao tác dữ liệu thay vì viết câu lênh trực tiếp (dạng Text). Trong bài này mình sẽ giới thiệu về Store Procedure – một phần khá quan trong trong lập trình với cơ sở dữ liệu

Stored Procedure (SP) là  ?

Stored Procedure (Thủ tục lưu trữ) là một đối tượng trong cơ sở dữ liệu bao gồm một tập nhiều câu lệnh SQL được nhóm lại với nhau thành một nhóm với những khả năng sau:

  • Các cấu trúc điều khiển (IF, WHILE, FOR) có thể được sử dụng trong thủ tục.
  • Bên trong thủ tục lưu trữ có thể sử dụng các biến như trong ngôn ngữ lập trình nhằm lưu giữ các giá trị tính toán được, các giá trị được truy xuất được từ cơ sở dữ liệu.
  • Một tập các câu lệnh SQL được kết hợp lại với nhau thành một khối lệnh bên trong một thủ tục. Một thủ tục có thể nhận các tham số truyền vào cũng như có thể trả về các giá trị thông qua các tham số (như trong các ngôn ngữ lập trình). Khi một thủ tục lưu trữ đã được định nghĩa, nó có thể được gọi thông qua tên thủ tục, nhận các tham số truyền vào, thực thi các câu lệnh SQL bên trong thủ tục và có thể trả về các giá trị sau khi thực hiện xong.

Lợi ích khi sử dụng SP

  • Khả năng module hoá: Bạn có thể tạo một SP một lần và tái sử dụng nó bao nhiêu lần tùy thích trong chương trình của bạn. Điều này làm tăng khả năng bảo trì ứng dụng của bạn và cho phép các ứng dụng truy cập vào các cơ sở dữ liệu trong một cách thức thống nhất và tối ưu hóa.
  • Đơn giản hoá các thao tác trên cơ sở dữ liệu nhờ vào khả năng module hoá các thao tác này.
  • Thủ tục lưu trữ được phân tích, tối ưu khi tạo ra nên việc thực thi chúng nhanh hơn nhiều so với việc phải thực hiện một tập rời rạc các câu lệnh SQL tương đương theo cách thông thường.
  • Thủ tục lưu trữ cho phép chúng ta thực hiện cùng một yêu cầu bằng một câu lệnh đơn giản thay vì phải sử dụng nhiều dòng lệnh SQL. Điều này sẽ làm giảm thiểu sự lưu thông trên mạng.
  • Thay vì cấp phát quyền trực tiếp cho người sử dụng trên các câu lệnh SQL và trên các đối tượng cơ sở dữ liệu, ta có thể cấp phát quyền cho người sử dụng thông qua các thủ tục lưu trữ, nhờ đó tăng khả năng bảo mật đối với hệ thống.
  • SP có thể được gọi từ các chương trình phía client hoặc từ các SP khác do đó SP được ưa chuộng trong lập trình CSDL, đặc biệt là trong các ứng dụng theo mô hình N-tier và các Web services.

Tạo thủ tục lưu trữ
Thủ tục lưu trữ được tạo bởi câu lệnh CREATE PROCEDURE với cú pháp như sau:

CREATE PROCEDURE Tên_thủ_tục [(Danh_sách_tham_số)]
[WITH RECOMPILE  |  ENCRYPTION  |  RECOMPILEENCRYPTION]
AS
Các_câu_lệnh_của_thủ_tục

Trong đó: – Tên_thủ_tục: Tên của thủ tục cần tạo. Tên phải tuân theo qui tắc định danh và không được vượt quá 128 ký tự.
– Danh_sách_tham_số: Các tham số của thủ tục được khai báo ngay sau tên thủ tục và nếu thủ tục có nhiều tham số thì các khai báo phân cách nhau bởi dấu phẩy. Khai báo của mỗi một tham số tối thiểu phải bao gồm hai phần: Tên tham số được bắt đầu bởi dấu @, Kiểu dữ liệu của tham số
–  RECOMPILE: Thông thường, thủ tục sẽ được phân tích, tối ưu và dịch sẵn ở lần gọi đầu tiên. Nếu tuỳ chọn WITH RECOMPILE được chỉ định, thủ tục sẽ được dịch lại mỗi khi được gọi.
– ENCRYPTION: Thủ tục sẽ được mã hoá nếu tuỳ chọn WITH ENCRYPTION được chỉ định. Nếu thủ tục đã được mã hoá, ta không thể xem được nội dung của thủ tục.
Các_câu_lệnh_của_thủ_tục: Tập hợp các câu lệnh sử dụng trong nội dung thủ tục. Các câu lệnh này có thể đặt trong cặp từ khoá BEGIN…END hoặc có thể không + Để thực thi một thủ tục ta thực hiện: Execute Ten_Store_Procedure Danh_sách_các_tham_số (Hoặc EXEC  Ten_Store_Procedure Danh_sách_các_tham_số)
+ Để chỉnh sửa một Stored Procedure có sẵn: sử dụng lệnh Alter Procedure
+ Để xóa một Stored Procedure: sử dụng lệnh Drop Procedure  Ten_Store_Procedure
+ Để đổi tên một Stored Procedure ta dùng lệnh: sp_rename ‘tên_sp_cũ’ ‘tên_sp_mới’
+ Để xem nội dung Stored Procedure ta dùng sp_helptext tên_sp

Ví dụ 1: Tạo Store Procedure không có tham số
Trong định nghĩa chúng ta có [(Danh_sách_tham_số)] Nhưng đôi khi Store có thể không có Danh sách các tham số. Bạn tham khảo ví dụ sau

CREATE PROCEDURE spCategories_GetCate_ViDu1
AS
BEGIN
	SELECT c.CategoryID, 
		c.CategoryName, 
		c.Description 
	FROM Categories c
END

Trong ví dụ trên mình đã tạo một SP là spCategories_GetCate để truy vấn các trường CategoryID, CategoryName, Description của bảng Categories, Bạn có thể chú ý đến cách đặt tên tuy tên của SP là tùy chọn nhưng Theo mình để cho dễ kiểm soát khi Database của bạn lớn Bạn nên đặt cho mình một quy tắc đặt tên cho SP. Mình thường đặt là spTênBảng_ChứcnăngcủaSP vì khi database của bạn có thể sẽ có rất nhiều bảng và rất nhiều store nêu không theo quy tắc khi cần Alter một SP bạn sẽ khó tìm SP đó. (Trong SQL server có hỗ trợ chức năng Filter – Phải chuột vào Store Procedure/Filter/Filter setting sau đó nhập từ khóa cần Filter)

Ví dụ 2: Tạo Store Procedure  có tham số đầu vào.
Trong ví dụ sau ta sẽ tạo 1 SP có tham số đầu vào và truy vấn theo điều kiện của tham số

CREATE PROCEDURE spCategories_GetCate_ViDu2
@CategoryID int
AS
BEGIN
	IF @CategoryID>0
		SELECT c.CategoryID, 
			c.CategoryName, 
			c.Description 
		FROM Categories c 
		WHERE c.CategoryID=@CategoryID
	ELSE
		SELECT c.CategoryID, 
			c.CategoryName, 
			c.Description 
		FROM Categories c 
		ORDER BY c.CategoryID DESC 
END

Trong ví dụ trên bạn thấy có tham số đầu vào là @CategoryID khi @CategoryID =0 thì sẽ truy vấn All Còn khi @CategoryID >0 thì truy vấn theo @CategoryID
Đây cũng thêm một cách mà mình hay dùng để giảm bớt số lượng SP trong database. (Thường thì bạn sẽ phải viết 2 SP một là Select One – @CategoryID >0, 2 là Select All @CategoryID =0). Bạn thấy rằng trong SP trên mình có sử dụng cấu trúc điều khiển IF. Bạn có thể thấy là SQL cũng có thể lập trình và có thể nó sẽ mang lại nhiều lợi ích khi lập trình trên SQL. Tham khảo thêm bài viết sau: Hướng dẫn xây dựng website

Ví dụ 3: Store Procedure có tham số đầu vào – thực hiện Insert, Delete, Update.
Trong Store Procedure sau mình sẽ minh họa việc tạo một SP để thực hiện Thêm, Sửa, Xóa một bản ghi phụ thuộc vào điều kiện của tham số:

CREATE PROCEDURE spCategories_Edit_ViDu3
@Action int,
@CategoryID int, 
@CategoryName nvarchar(50), 
@Description nvarchar(400), 
@Picture image 
AS
BEGIN
IF @Action=0
	DELETE FROM Categories 
	WHERE CategoryID=@CategoryID
ELSE
	BEGIN
		IF @CategoryID=0
		INSERT INTO Categories(
			[CategoryName], 
			[Description], 
			[Picture])
			VALUES (
			@CategoryName,
			@Description,
			@Picture	
			)
		ELSE
			UPDATE Categories
			SET
				CategoryName = @CategoryName,
				Description = @Description,
				Picture = @Picture
			WHERE CategoryID=@CategoryID
	END
END

Trong ví dụ trên bạn thấy mình sử dụng 1 Store để thực hiện 3 hành động thêm, sửa, xóa một bản ghi trong bảng Categorys. Cũng là một cách mình muốn giới thiệu để giảm bớt số lượng SP trong cơ sở dữ liệu của bạn.Ví dụ 4: Store Procedure có tham số đầu vào, Tham số đầu ra và trả về giá trị

CREATE PROCEDURE spCategories_Edit_ViDu4
@Action int,
@CategoryID int, 
@CategoryName nvarchar(50), 
@Description nvarchar(400), 
@Picture image,
@error nvarchar(1000) output 
AS
BEGIN TRAN 
IF @Action=0
	BEGIN
		DELETE FROM Categories 
		WHERE CategoryID=@CategoryID
		IF @@ERROR<>0
		BEGIN
			SET @error = N'Lỗi: Chưa xóa được'
			IF @@TRANCOUNT>0
				ROLLBACK tran
			GOTO Error
		END
		ELSE
			SET @error = N'Đã xóa bản ghi'
	END

ELSE
	IF @CategoryID=0
	BEGIN
		INSERT INTO Categories(
		[CategoryName],[Description],[Picture])
		VALUES (
		@CategoryName,@Description,@Picture	
		)
		IF @@ERROR<>0
		BEGIN
			SET @error = N'Lỗi: Lỗi khi thêm dữ liệu'
			IF @@TRANCOUNT>0
				ROLLBACK tran
			GOTO Error
		END
		ELSE
			SET @error = N'Đã thêm mới bản ghi'
	END
	ELSE
		BEGIN
			UPDATE Categories
			SET
				[CategoryName] = @CategoryName,
				[Description] = @Description,
				[Picture] = @Picture
			WHERE CategoryID=@CategoryID
			IF @@ERROR<>0
			BEGIN
				SET @error = N'Lỗi: Lỗi khi cập nhật dữ liệu'
				IF @@TRANCOUNT>0
					ROLLBACK tran
				GOTO Error
			END	
			ELSE
			SET @error = N'Đã cập nhật dữ liệu'
		END
	RETURN @error -- Select @error as ThongBao

COMMIT TRAN 	
Error:

Bạn để ý thấy rằng trong khi thực hiện SP trên thì ở trường hợp nào bạn cũng sẽ nhận được giá trị trả về tương ứng thông báo cho bạn biết trạng thái thực thi. Bạn cũng nên lưu ý sử dụng biên Output trong SP và dùng cách dùng ROLLBACK tran. Khi trong SP của bạn thực hiện nhiều hành động (Có thể là thực hiện Edit dữ liệu nhiều bảng khác nhau trong 1 SP khi đã thực hiện được 1 lệnh nào đó và đến lệnh tiếp theo xảy ra lỗi khi đó nếu  bạn không dùng dùng ROLLBACK thì sẽ xảy ra sai dữ liệu mà lại khó tím lỗi). Tham khảo thêm bài viết:Những thói quen tốt khi viết câu lệnh SQL. Trong những bài viết sau của loạt bài hướng dẫn này mình sẽ giới thiệu cách dùng C# để thực thi một Store Procedure

Trên đây mình giới thiệu qua về Store Procedure, hy vọng qua đây bạn đã hiểu hơn về SP và biết cách tạo SP cho Database của bạn. Trong bào viết sau của loạt bài này mình sẽ giới thiệu về Function và Trigger trong SQL server. Tham khảo thêm bài viết Hướng dẫn xây dựng website :: Xây dựng cơ sở dữ liệu – TRIGGER Một số tài liệu cho bạn tham khảo:
1. Lập trình cơ sở dữ liệu SQL server
2. Câu lệnh truy vấn SQL server
3. Giáo trình thực hành SQL server

Nguồn: http://www.hmweb.com.vn

Tạo hiệu ứng chữ lửa với Photoshop

Đúng như tiêu đề, bài viết này sẽ hướng dẫn bạn cách tạo ra hiệu ứng chữ bốc cháy với Photoshop cực kỳ đơn giản. Trước tiên tạo một file mới với kích thước 500 x 500 pixel rồi sau đó đổ màu đen cho layer nền.

Dùng công cụ Type Tool (T) viết một chữ cái tùy ý lên nền đen.

 

Tiếp đến, di chuyển tới Layer > Layer Style > Blending Options. Tại đây, bạn đánh dấu vào 4 mục là Outer Glow, Inner Glow, Satin và Color Overlay với tùy chọn từng mục như sau:   Outer Glow: Sử dụng màu #f40000.

 

Inner Glow: Sử dụng màu #e5c23b.

 

 

Satin: Sử dụng màu #872d0f.

 

Color Overlay: Sử dụng màu #cd7e2e.

Sau khi chỉnh sửa hiệu ứng trong Blending Options, các bạn sẽ thu được kết quả như hình dưới đây.

Để chữ trông thật hơn khi cháy, các bạn nên làm cho chữ méo mó đi một chút bằng cách click chuột phải vào layer chữ chọn Rasterize Type để biến layer chữ thành một layer bình thường.

 

Tiếp tục vào menu Filter > Lyquify hoặc bấm tổ hợp phím Ctrl + Shift + X.

 

Dùng công cụ Forward Warp Tool và kéo nhẹ để chữ hơi méo mó một chút.

 

Tiếp theo là công đoạn áp ngọn lửa vào chữ, các bạn tải hình ảnh ngọn lửa tại đây và mở nó ở một mục mới.

 

DTrên bức hình ngọn lửa vừa tải xuống, các bạn chọn sang mục Chanels cạnh mục Layers.

Giữ phím Ctrl và click vào hình ảnh thu nhỏ trên kênh Green để lấy những vùng sáng của ngọn lửa như hình.

 

Copy vùng vừa chọn của ngọn lửa rồi quay trở lại hình chữ đang làm. Nhấn Ctrl + V để dán vùng lửa được chọn lên hình như một layer mới

Bước này cần sự tỉ mỉ khá cao, bạn cần sử dụng lệnh Tranform (phím tắt Ctrl + T) để phóng to hay thu nhỏ layer ngọn lửa nhằm lấy vùng lửa sáng nhất lấp vào vùng chữ.

 

Sử dụng tẩy với kích thước khoảng 15-16 pixels để tẩy bớt phần lửa nằm ngoài chữ sao cho không cắt vào hình ngọn lửa, gây mất độ chân thật của hình.

 

Nhân đôi phần chữ đã cắt ở trên để làm sáng thêm ngọn lửa bằng tổ hợp phím Ctrl + J. Sau đó, bôi đen cả hai layer lửa và nhấn Ctrl + E để nhập chúng lại thành một layer. Kết quả thu được sẽ sáng hơn ban đầu một chút.

Làm tương tự với phần còn lại của chữ G bằng cách nhân đôi layer lửa vừa tạo thành rồi dùng lệnh Tranform để dịch chuyển đến ví trí khác của chữ. Xóa các vùng thừa rồi lại tiếp tục cho tới khi ngọn lửa phủ kín chữ.

 

 

Cuối cùng, nhập tất cả layer lửa sau khi đã phủ kín chữ thành một layer duy nhất rồi nhân đôi layer đó lên. Layer phía trên chuyển chế độ hòa trọn về Overlay, layer phía dưới chỉnh Opacity về khoảng 40%.

 

Làm tương tự cho các chữ cái khác nếu bạn muốn viết cả một dòng hoàn chỉnh.

 

Để trang trí thêm cho hiệu ứng, các bạn hãy sử dụng ảnh Stock ở đây rồi căn chỉnh cho dòng chữ vào chính giữa vùng tối của hình.

Nhân đôi layer nền vừa tạo. Chọn cho layer trên chế độ hòa trộn là Overlay rồi giảm Opacity xuống khoảng 60%.

 

Giữ phím Ctrl và chỉ vào layer chữ để lấy vùng chọn của layer. Vào menu Select > Modify > Expand và chọn giá trị khoảng 5 – 10 Pixel.

 

Tạo một layer mới bằng tổ hợp phím Ctrl + Shift + N rồi đổ màu đen cho vùng chữ vừa chọn trên layer mới, bấm Ctrl + D để bỏ vùng chọn.   Sử dụng lênh Tranform (Ctrl + T) rồi giữ Ctrl kéo nghiêng vùng chữ đi một chút.

Đẩy layer này xuống dưới layer chữ lửa và vào menu Filter > Blur > Gaussian blur để làm mờ nó đi. Và đây là kết quả cuối cùng.

 

 

Chúc các bạn thành công!