Chữ “ĐỢI” có thể làm ta hối hận suốt một đời.

Tác giả

Tác giả Bùi Xuân Đạt là nhà phát triển phần mềm (Software Development) kinh nghiệm nhiều năm tại công ty SweetSoft và là thành viên trong đội ngũ tư vấn / giảng dạy / tài trợ của chúng tôi. Biết thêm về tác giả tại Facebook cá nhân xuandat2996.

Nội dung

Đợi học xong và lấy bằng tốt nghiệp con sẽ tìm một công việc ổn định.

Đợi con lớn ba mẹ mới yên tâm. Đợi con đỗ Đại Học ba mẹ mới yên tâm. Đợi con lập gia đình ba mẹ mới yên tâm.

Đợi khi có thời gian rãnh rồi mới đi khám bệnh.

Đợi kinh tế ổn định anh sẽ cho em hạnh phúc.

Đợi hết tháng có lương chúng ta sẽ gặp nhau.

Đợi công việc làm công, ăn lương ổn tí chúng ta sẽ bắt đầu kinh doanh.

Đợi có thời gian rãnh chúng ta sẽ cùng đi du lịch.

Đợi nghiên cứu thêm tí, Đợi suy nghĩ tí, Đợi tìm hiểu thêm tí em sẽ bắt tay vào làm sếp ạ!

Trích truyện ngắn:

Tại một ngôi chùa cổ ở Nhật Bản, có một cậu bé mới 9 tuổi tên là Thân Loan (sau này là người sáng lập Chân Tông tịnh độ), quyết định xuất gia đi tìm thiền sư để xuống tóc, khi gặp được thiền sư đã hỏi ông rằng:

“Con còn nhỏ thế này tại sao đã muốn xuất gia?”.

Lúc đó Thân Loan trả lời:

“Năm nay mặc dù cháu mới 9 tuổi nhưng bố cháu đã qua đời, cháu không biết vì sao con người phải chết, vì sao cháu và bố cháu phải rời xa nhau. Vì thế để hiểu được đạo lý này, cháu nhất định phải xuất gia”.

Vị thiền sư nói:

“Được! Ta hiểu rồi. Ta đồng ý nhận con làm đồ đệ, nhưng hôm nay muộn rồi, chờ đến sáng sớm mai ta sẽ xuống tóc cho con!”.

Thân Loan nghe xong liền nói:

“Thưa sư phụ, mặc dù sư phụ nói là chờ đến sáng sớm mai sẽ cắt tóc cho con, nhưng con còn nhỏ, con không dám chắc quyết tâm đi tu của con có còn giữ được đến sáng mai không. Mà sư phụ thì đã nhiều tuổi thế này rồi, sư phụ có dám chắc sáng mai tỉnh dậy sư phụ vẫn khỏe mạnh không?”.

Vị thiền sư nghe xong liền nói:

“Tốt, tốt! Con nói rất hay! Những gì con nói đều đúng, ta sẽ xuống tóc cho con ngay bây giờ”.

Khi có việc cần làm ta thường hay dùng từ “tí nữa, để mai, chờ tý”. Nhưng rồi đợi mãi cuối cùng lại tự quên đi, việc cũng để sang một bên. Thời gian như nước chảy, một đi thì không trở lại. Đời người không mua được tấm vé quay đầu.

Cứ đợi như vậy khiến cho nhiều người lãng phí đi cuộc sống của mình. Dường như lúc nào cũng nghĩ rằng đợi đến thời điểm nào đó mình nhất định sẽ sống với điều mình muốn. Nhưng đợi hết cái này lại đến cái khác phải đợi.

Đời người vội vội vàng vàng, hãy trân trọng thời gian hiện tại, chớ để lại những điều hối tiếc, nắm chắc thời gian mà cố gắng hết sức mình mới là điều quan trọng nhất.

Hãy chải đầu khi còn có tóc.

Hãy đánh răng khi còn có răng.

Hãy làm đẹp khi còn đẹp.

Hãy đi khi còn có thể đi.

Hãy nắm lấy cơ hội khi còn có thể – Đừng đợi đến khi phải nói 2 chữ “GIÁ NHƯ”!

Hướng dẫn gửi email và đọc nội dung email bằng C#

Tác giả

Tác giả Nguyễn Thắng Hưng đang là Software Engineer tại công ty Infodation. Trong bài viết này, tác giả chia sẻ về cách sử dụng thư viện MailKit trong ứng dụng ASP.NET Core API.

Biết thêm về tác giả tại Facebook Thắng Hưng.

Nội dung

MailKit là gì?

MailKit là một nền tảng đa nguồn mở. Thư viện mail-client NET dựa trên MimeKit và được tối ưu hóa cho các thiết bị di động.

MailKit hỗ trợ cho Gmail, HotMail, Office365.

Bắt đầu

Trong bài hướng dẫn này mình sẽ dung dotnet core API để hướng dẫn (Console, Windows, WebForm, MVC cũng áp dụng tương tự 😉).

Chuẩn bị

  • Editor Visual Studio 20XX
  • Kiến thức C#
  • 2 email để test 😉
  • Để Gmail cho phép ứng dụng của bạn kết nối đến server SMTP của nó với xác thực là tài khoản gmail của bạn, bạn cần thiết lập tài khoản email của bạn như sau:
  • Vào địa chỉ https://myaccount.google.com/security
  • Ở menu trái chọn mục Bảo mật, sau đó tại mục Quyền truy cập của ứng dụng kém an toàn phải ở chế độ bật

Cài đặt thư viện MailKit

Tạo mới 1 project C# bằng Visual Studio (Console, Web, Window Form,…). Mình chọn ASP.NET Core Web API => đặt tên cho project.

Sau khi tạo xong project hãy xóa 2 tệp WeatherForecast.csWeatherForecastController.cs. Tạo mới 1 folder có tên là Services

Trên thanh menu của VS chọn Tool > NuGet Package Manager > Package Manager Console

Trên cửa sổ Package Manager Console nhập Install-Package MailKit và nhập Install-Package Swashbuckle.AspNetCore để cài đặt thư viện.

Bắt đầu code

Trên thanh Solution bên phải nhấp chuột trái vào Services sau đó chuột phải chọn Add > New Item…

Cửa sổ items hiện ra hãy chọn interface và đặt tên là IMailRepository và nhấp nút Add


Tương tự tạo tiếp 1 class và đặt tên là MailRepository và cho nó kế thừa interface trên


Tiếp theo vào file IMailRepository để viết vài function cho email

Đầu tiên là function GetUnredMails có chức năng đọc mail, function gồm có 4 parameter: mailServer (server của mail mà mình muốn kết nối, VD: gmail, office365,…), port (cổng của mỗi server), login (tên tài khoản đăng nhập, VD: adb@gmail.com), password (mật khẩu đăng nhập). Kiểu trả về là 1 list string chứa nội dung của email còn Task là từ khóa của lập trình bất đồng bộ.

Tiếp theo là function SendMail  có chức năng gửi mail, function gồm có 7 parameter: mailServer (server của mail mà mình muốn kết nối, VD: gmail, office365,…), port (cổng của mỗi server), login (tên tài khoản đăng nhập, VD: adb@gmail.com), password (mật khẩu đăng nhập), to (email bạn muốn gửi đến), subject (tiêu đề của email), html (bạn có thể gửi dạng text hoặc html).

Bây giờ ta vào file MailRepository để triển khai 2 funtion trên. Đầu tiên là function GetUnreadMails

Ở đây mình dung lập trình bất đồng bộ nên luôn có cặp từ khóa async await:

  • Line 19: tạo 1 list để lưu nội dung của tất cả các email chưa đọc.
  • Line 20 => 28: cú pháp kết nối với server của MailKit.
  • Line 29: bạn có thể setting cho nó là ReadOnly hoặc ReadWrite. Sự khác nhau giữa 2 hàm này là 1 cái chỉ đọc không cho nó làm gì còn cái kia là đọc xong mình có thể đánh dấu nó đã đọc hoặc xóa email đó. Trong trường hợp này mình muốn vừa đọc xong email là đánh dấu nó đã được đọc luôn thì lần sau sẽ không đọc lại email đó nữa nên mình dung ReadWrite.
  • Line 30: viết query để MailKit có thể tìm kiếm đúng hòm thư mà mình muốn, query này trả về 1 list mail. Có rất nhiều query trong đó nên bạn cứ nghịch thoải mái 😉.
  • Line 31 => 37: viết 1 vòng lặp để đọc từng thư trong đó. Dòng 33:lấy Id của mail. Dòng 34: đưa nội dung (mình lấy html nha, còn bạn nào muốn lấy text thì tự nghịch nhé xem như thử thách 😉) của email vào list string lúc đầu mình tạo.
  • Line 36: gọi hàm đánh dấu xác nhận email đó đã đọc.
  • Line 38: ngắt kết nối với server để giải phóng dung lượng cho project.
  • Line 40: trả về 1 list chứa nội dung của email mà mình đọc được

Tiếp theo là function SendMail

  • Line 48: add địa chỉ email của bạn (địa chỉ email bạn đăng nhập)
  • Line 49: add địa chỉ bạn muốn gửi
  • Line 50: add tiêu đề cho email
  • Line 51: add nội dung cho email (có thể là html hoặc text)
  • Line 54 => 58: cú pháp của thư viện

Hướng dẫn sử dụng function

Những bạn không dùng API thì chỉ tập trung vào cách dùng function thôi nhé, khi biết dùng function rồi thì có thể bỏ qua các bước phía dưới:

  • Tạo mới 1 controller: đưa chuột vào thư mục Controllers > chuột phải > Add > New item… chọn API Controller Empty, đặt tên file: MailKitControllerAdd
  • Triển khai API đọc email
  • Line 27: gọi function đọc mail mà mình vừa tạo. Các parameter truyền vào tương ứng với emailServer, port, user, password mà mình tạo bên service.
  • Nếu bạn không dùng dotnet core thì có thể dùng function như sau:
  • Line 33 => 37: sau khi ta lấy list content email, cho nó vào 1 vòng lặp để mình lấy hết nội dung của từng email đó và sau đó nối chuỗi cho biến contentText. Biến contentText dùng để chứa tất cả các nội dung mà mình lấy được.
  • Nên dùng try catch vì khi mình dùng thư viện nào đó, nếu có lỗi nó sẽ bắt được những lỗi mà mình không cover được và quăng ra 1 message để mình biết nó là lỗi gì.
  • Tương tự triển khai API send mail
  • Vào thư mục Startup.cs để tiến hành đăng ký service bằng cách DI (chỉ áp dụng cho dotnet core 😉).
  • Trong function ConfigureServices hãy thêm vài dòng code dưới đây

Configure

  • Chỗ nào báo đỏ cứ chuột phải và chọn bóng đèn rồi add câu lệnh using nha 😉. Vào folder Properties > chọn file launchSettings.json và chỉnh file

Nhấp nút

để chạy project

Nhấp chữ GET mở ra 1 form cho mình truyền parameter

Chọn Try it out và truyền parameter vào sau đó nhấp Execute, kéo xuống Server response để xem kết quả. Nếu 200 là thành công còn khác 200 nó sẽ báo lỗi cho bạn fix. Lưu ý: phải chắc chắn trong gmail của bạn có thư là chưa đọc nếu không thì nó sẽ trả về 200 và không có nội dung nào cả

SendMail cũng chạy tương tự vậy nhá.

Tham khảo mã nguồn

https://github.com/jstedfast/MailKit

Học lập trình thế nào để đạt hiệu quả?

Tác giả

Tác giả Bùi Xuân Đạt là nhà phát triển phần mềm (Software Development) kinh nghiệm nhiều năm tại công ty SweetSoft và là thành viên trong đội ngũ tư vấn / giảng dạy / tài trợ của chúng tôi. Biết thêm về tác giả tại Facebook cá nhân xuandat2996

Bài viết chia sẻ một vài kinh nghiệm quý giá dành cho các bạn mới bắt đầu học lập trình.

Nội dung

Không copy / paste

Đối với những người mới học về ngôn ngữ lập trình mới, việc copy/paste là không nên.

Khoa học đã chứng minh. “Mấy người lười thường rất thông minh“. Tự xem mình có lười không nhé! Còn tôi thì … các bạn biết rồi đấy.

Nhưng các bạn biết không điều này có thể sẽ giúp bạn thực thi được đoạn code đó nhanh nhất. Nhưng bạn sẽ không hiểu được nguyên lý hoạt động của nó.

Việc ngồi gõ lại code có thể giúp mình nhớ cú pháp một cách nhanh nhất. Trong lúc code bạn sẽ thấy được nhiều yếu tố: “Dòng này nó làm gì?”, “Mình đang code sai ở đâu? Sao nó không chạy”, ở level cao hơn thì “Đoạn code này quá củ chuối ☺”…. Bla bla. Các bạn biết phải làm gì với các vấn đề ở trên rồi chứ? Debug chứ còn làm gì nữa!

Debug

Debug là gì? Hiểu đơn giản Debug là công cụ giúp chúng ta gỡ rối chương trình thôi. Trong suốt sự nghiệp lập trình, ông nào nói “tôi code không cần debug” => Bóc phét. Ah có tôi đấy, nhưng chỉ là nói điêu thôi :D. Các bạn thấy nó quan trọng thế nào rồi chứ! Bạn nào chưa biết thì tìm hiểu ngay nhé.

Debug sẽ giúp chúng ta hiểu rõ hơn về chương trình. Đoạn code nào đang gây ra lỗi để có hướng sửa lỗi (Fix bug), đoạn nào cần cải tiến để giúp chương trình chạy tốt hơn.

Tính kiên nhẫn

Kiến thức ngành IT giống như là vô tận. Để giỏi hơn thì chúng ta cần phải học tập và tìm kiếm tài liệu rất nhiều. Giành rất nhiều thời gian để sửa lỗi chương trình, tìm kiếm hướng dẫn. Nghiên cứu công nghệ mới. Đừng nản khi gặp phải những vấn đề trên. Hãy cài đặt cho mình tư duy này từ bây giờ.

Người hướng dẫn

Thời gian đầu, khi bắt đầu vào học lập trình có thể bạn sẽ thấy rất khó khăn. Tôi cũng nằm trong số đó, bản thân tôi thật may mắn biết bao khi có một người thầy tận tâm, truyền đạt cho tôi kiến thức nền tảng rất tốt, đủ để tôi có thể đi làm. Ah mà nói điều này để làm gì nhỉ?

Nếu bạn không quá khó khăn về kinh tế hãy tìm cho mình một guru (vừa là thầy vừa là đạo sư), một người đàn anh cũng được. Để họ có thể định hướng soi sáng con đường phía trước cho bạn. Hoặc có thể đầu tư thêm cho mình những khóa học lập trình online từ các trường đào tạo uy tín. Tạo được nền tảng tốt ban đầu.

Code, code nữa rồi code mãi luôn

Những kiến thức trên các cuốn sách dày cộm, tài liệu online hay ebook dạy code đôi khi cũng lỗi thời, lỗi phiên bản rồi. Ah quên, cũ nhưng cũng là nền tảng đừng xem thường những bí kíp cổ đó nhé :D). Nên cách học code nhanh nhất là hãy bắt tay ngay vào việc code. Code sai thì sửa, quên thì xem lại, lỗi thì search tìm cách fix. Fix no thì nghĩ mai fix tiếp, đừng xem bug như kẻ thù hãy xem nó là niềm đam mê ☺, mặc dù đôi lúc chúng cũng khiến ta cay cú, haha. Từ đó nâng cao kỹ năng code, kỹ năng Giải quyết vấn đề”.

TÔI bôi đen nó vì nó rất quan trọng và thật sự rất cần thiết. Hơn thua nhau là ở những kỹ năng mềm này. Bản thân tôi cũng đang rất chú trọng vào nó. Cần luyện tập nhiều chứ không phải tự nhiên mà có!

Tự học, học, học nữa, học mãi

Sửa lại xí, Code đến một lúc thì phải dừng thôi chứ hông code mãi luôn đâu!!! Nhưng học thì không dừng đâu. Già rồi cũng còn phải học đấy=> Chắc chắn luôn khỏi bàn cãi. Trong ngành của chúng ta, việc tự học và cập nhật kiến thức rất rất là quan trọng. Thế hệ trẻ ngày càng giỏi, công nghệ thì không ngừng đổi mới, thay đổi vèo vèo như người yêu trở mặt. Nếu chúng ta không nâng cao kỹ năng, kỹ thuật thì rất khó để tồn tại trong những năm tới.

Vì vậy nên mở máy ra và học ngay đi nhé nếu không muốn sớm về vườn. Trong lúc học, đừng thấy gì khó chút là phải đi hỏi, nó sẽ hạn chế sự sáng tạo và tư duy của các bạn đấy. Thanh niên mà, bản lĩnh lắm mà “Ngon thì đừng có hỏi”.

Học nhóm: Trong môi trường học của tôi, bạn học thì ít mà bạn nhậu thì nhiều :D. => Không nói điêuuu. Vì vậy, mãi đến khi tôi đi làm tôi mới tìm được những nhóm bạn học thật sự. Học nhóm sẽ giúp mình nhanh tiến bộ, tăng khả năng giao tiếp với bạn bè, đồng nghiệp. Tạo hăng say, đam mê trong lúc học.

Hãy cố gắng tìm cho mình những nhóm học phù hợp ngay bây giờ. Cùng đam mê, cùng chí hướng. => Đam mê tích cực. Còn xxx … bla bla thì thôi, dẹp đi!

Chuyên môn hóa

Hãy chọn một lĩnh vực và tập trung phát triển nó. Đã có minh chứng rằng “Một developer giỏi không nhất thiết phải biết nhiều ngôn ngữ”. Nói chi xa, tôi nè! Không cần phải lan mang rằng tôi phải biết nhiều ngôn ngữ, tôi phải học Python, Java, .Net … bla bla. Học nhiều ngôn ngữ để làm gì trong khi mất thời gian mà không đi sâu được vào một thứ để trở thành chuyên gia. Ông bà có sai bao giờ “Một nghề cho chín còn hơn chín nghề”.

Vì vậy, ngay lúc còn mài đít ở ghế nhà trường thì hãy nên chọn một lĩnh vực để tập trung đào sâu. Đến lúc ra trường làm việc rồi hãy tính đường rẽ nhánh tiếp để phù hợp với đặc thù của công việc.

Ảo tưởng sức mạnh

Mấy ông sinh viên giàu vượt sướng hay ảo tưởng sức mạnh vãi lúa. Mai mốt em ra làm game làm ba cái website chán òm, mục tiêu của em là đi Nhật làm lập trình sẵn đóng phim luônnnn. Em phải làm AI, em phải cho máy nó học (Machine learning)…Bla bla.

Thật ra là nói những điều trên cũng để mình có ước mơ, đặt mục tiêu để mình phấn đấu. Không sai, nhưng phải thực tế, phải biết mình đang ở đâu. Nói được mà làm không được thì thành ra nói phét.

Ngay bây giờ, nếu còn ngồi trên ghế nhà trường thì hãy im lặng và chứng minh đi ở đó mà bốc phét!