4/10/2022

Sinh viên CNTT kiếm tiền như nào? | Sharing


Sinh viên CNTT thì kiếm tiền như nào? Chắc hẳn là nhiều người sẽ có câu hỏi như vậy khi bắt đầu bước lên đại học và trong các năm học sau đó. Nếu các bạn lên Google và tìm kiếm thì chắc chắn ra rất nhiều kết quả với những công việc khác nhau. Trong bài viết này mình muốn chia sẻ thực tế về những gì mà bản thân mình đã làm hoặc những bạn bè thân thiết của mình từng làm để kiếm thêm thu nhập trong khoảng thời gian là sinh viên.


1. Làm gia sư

Khi còn là sinh viên năm 1-2, kiến thức chuyên ngành bạn chưa có nhiều, trong khi đó bạn vừa phải học các môn đại cương trên trường và những kiến thức từ cấp 3 vẫn còn nắm vững thì làm gia sư là một công việc rất hợp lý.

Gia sư nói chung là một công việc không quá vất vả, nhưng cũng đem lại nguồn thu nhập cũng gọi là ổn định cho các bạn sinh viên. Tuy nhiên mình cũng xin lưu ý tới các bạn khi nhận các lớp, nếu nhận được lớp dạy từ người quen hay bạn bè thì tốt, còn không nếu nhận lớp từ trung tâm thì nên tìm hiểu xem trung tâm đó có uy tín hay không, xem những review về trung tâm trên facebook trước khi cọc tiền. Nói đi cũng phải nói lại, các bạn đi dạy học hãy có một thái độ tốt, chuẩn bị tốt trước khi đi dạy, báo cáo tình hình học tập thường xuyên của học sinh cho phụ huynh. Khi các bạn dạy tốt lúc đó các bạn sẽ được các phụ huynh giới thiệu cho nhau để tới kèm con/em họ, khi đó các bạn còn có thể có lớp dạy mà không cần mất phí tìm lớp qua trung tâm.

2. Giải bài tập thuê trên các ứng dụng online

Cái này thì hình thức nó gần giống gia sư nhưng tự chủ được thời gian hơn một tí, các bạn có thể làm lúc nào các bạn thích. Thu nhập thì chưa chắc đã ổn định tùy vào mức độ chăm chỉ giải bài của bạn.

Trên mạng thì có rất nhiều app kiểu này, mình và một số bạn mình đã từng làm qua một app cũng khá ổn các bạn có thể tham khảo: QUANDA.

3. Đi thực tập

Khi vào tầm cuối năm 2, hoặc là năm 3, 4 lúc đó các bạn có thể nghĩ tới việc đi thực tập tại các công ty. Việc thực tập vừa giúp bạn học hỏi thêm kiến thức, văn hóa ở các công ty cũng giúp bạn có thêm một phần thu nhập từ tiền trợ cấp/lương từ công ty đó. Hầu hết các công ty công nghệ đều sẵn sàng trả cho các thực tập một mức trợ cấp/lương tầm 1-2-3-4 triệu mặc dù đa số các bạn chỉ vào công ty để học hỏi mà chưa đóng góp được gì cho công ty.

Đi thực tập giúp bạn vừa học hỏi được nhiều kiến thức mà cũng giúp bạn có được một nguồn thu nhập ổn định.

4. Làm freelancer

Công việc này đòi hỏi bạn phải có kinh nghiệm, kỹ năng rồi nên mình cũng ghi chú ở đây là dành cho các sinh viên tầm năm 3,4,5 khi mà các bạn đã trang bị cho mình một lượng kiến thức cụ thể và một ít kinh nghiệm khi đi thực tập và làm bài tập lớn trên trường.

Freelancer đơn giản là người ta thuê gì thì mình làm lấy, nhưng mà tìm kiếm các công việc freelancer qua đâu, một số các trang web tìm việc freelancer nổi tiếng tại Việt Nam mà các bạn có thể tìm hiểu như là:

Trên tất cả các kênh này đều lưu lại hồ sơ làm việc của bạn, đây cũng có thể là một vũ khí mạnh mẽ thuyết phục các nhà tuyển dụng sau này khi bạn nộp đơn vào một công ty làm việc.

Ngoài ra, thì bạn có thể nhận các công việc được giới thiệu từ người quen, những người thuê làm đồ án, bài tập lớn trên các group Facebook.

4/06/2022

Khai phá web | Tài liệu, chuyên ngành


Khai phá web là một môn tự chọn được dạy trong học phần kỹ sư của khoa học máy tính và kỹ thuật thuật máy tính. Bởi vì là một môn tự chọn nên các bạn hoàn toàn có thể chọn một môn khác thay thế môn này.

Với khai phá web các bạn sẽ được nhắc lại các kiến thức về Machine learning, Deep learning, một số các phần mới như là tìm kiếm thông tin. Ngoài ra thì các bạn sẽ được đi vào và giới thiệu tới các bài toán cụ thể như là: phân tích liên kết, phân tích quan điểm, trích rút thông tin, khai phá truy vấn & quảng cáo trực tuyến. 

Khi học về những năm cuối, nhất là những bạn theo định hướng hệ thống thông tin thì các bạn sẽ thấy các môn học có sự giao nhau rất nhiều, ví dụ như môn nhập môn khoa học dữ liệu các bạn sẽ thấy có 1 ít về các kiến thức Machine Learning đã được học, 1 ít kiến thức về tìm kiếm thông tin bên khai phá web, 1 ít kiến thức về bigdata đã được học ở lưu trữ và xử lý dữ liệu lớn cộng với 1 phần kiến thức mới là trực quan hóa dữ liệu. Điều này thì cũng hợp lý thôi, các môn học hay các lĩnh vực trong CNTT nói chung và KHMT nói riêng thì có sự liên quan chặt chẽ với nhau chứ không thể nói là môn này, lĩnh vực này tách riêng biệt hoàn toàn với các khác được. Tuy nhiên thì mỗi môn sẽ tập chung vào một phần chính như khi các bạn học nhập môn AI, nhập môn ML các bạn sẽ được tập chung chính vào giới thiệu các thuật toán, cách làm, làm như nào, tối ưu như nào, tức là học sâu về phần mô hình, còn khi học khai phá web các bạn sẽ được giới thiệu sâu hơn về phần ứng dụng như là ứng dụng các mô hình này vào các bài toán thực tế, còn trong nhập môn khoa học dữ liệu các bạn sẽ được học sâu hơn về phần xử lý và trực quan hóa dữ liệu.

Về nhận xét của mình về môn học thì môn học là một môn cũng khá hay, các bạn có thể chọn nó làm 1 trong 3 môn tự chọn kỹ sư của mình.

Thầy dạy môn này có thầy Nguyễn Kiêm Hiếu, thầy thì giao khá nhiều bài tập trong tuần, cũng như các bạn có thể phải làm các bài quizz nhỏ từng tuần. Tuy nhiên thì thầy chấm điểm cũng khá thoáng, học thầy các bạn cũng sẽ được nghe các buổi seminar do sinh viên của thầy trình bày cũng khá hay và thú vị. Các bạn có thể theo dõi website cá nhân của thầy Hiếu tại đây: https://users.soict.hust.edu.vn/hieunk/

Tài liệu môn học

- Slide môn học khai phá web: TẢI VỀ SLIDE
- Đề thi tham khảo khai phá web: TẢI VỀ ĐỀ THI THAM KHẢO

2/20/2022

Sinh viên nên sở hữu cho mình một blog cá nhân? | Share


Sinh viên có nên sở hữu cho mình một blog cá nhân? Với ý kiến của mình thì là có. Nhiều bạn có suy nghĩ: "uồi, viết có ai đọc đâu mà viết", nhưng thế thực sự là sai lầm, viết blog đâu chỉ phải là dành cho mọi người đọc đâu, viết blog đầu tiên là phải viết cho bản thân mình trước.

Đa số chúng ta đều không phải những thiên tài hay là những siêu trí nhớ, vì thế các kiến thức mà chúng ta từng biết, từng được học có thể quên đi vào một ngày nào đó, vì thế bạn viết blog là để lưu lại những kiến thức này để cho sau này bất cứ khi nào cần cũng có thể mang ra tra cứu lại.

Nếu bạn có kiến thức sâu về một phần nào đó như là cấu trúc dữ liệu, blockchain, mạng máy tính, hay là về các ngôn ngữ lập trình như Java, C++, C#,... Việc bạn viết blog chia sẻ về những kiến thức này sẽ giúp bạn có thể hệ thống lại lượng kiến thức này. Khi viết blog bạn sẽ có trách nhiệm hơn về kiến thức của mình, mặc dù là viết cho chính mình đi nữa thì cũng không thể viết lằng nhằng được, khi đó các bạn sẽ tự mình phải Google lại, tìm hiểu lại, xác minh lại kiến thức này đúng và đủ chưa, từ đó cũng sẽ giúp bạn củng cố được kiến thức.

Việc viết ra, viết lại những kiến thức của bạn cũng chính là một lần được học lại.

Trên blog, bạn cũng có thể viết lại những câu chuyện nào đó của bạn ở thời sinh viên, để sau này khi 10-20 năm sau xem lại chúng ta cũng có những kỷ niệm thực sự khó quên.

Viết blog có thể kiếm tiền! Dĩ nhiên là nếu kiếm được tiền thì blog của bạn phải có nhiều lượt xem và chắc chắn rằng lúc đó blog của bạn phải vượt qua mức là viết cho bản thân mình, lúc đó thì mỗi bài viết bạn viết ra sẽ phải cẩn thận hơn, chỉn chu hơn, vì lúc đó mỗi bài viết trên blog của bạn không phải dành cho bạn nữa mà là dành cho mọi người.

Vậy viết blog ở đâu, hiện nay có rất nhiều nền tảng để một người có thể tạo được một blog cá nhân một cách dễ dàng, mình biết đa số các bạn theo dõi website này đều là những sinh viên CNTT, vì thế mình gợi ý tới mọi người một số nền tảng mà dân CNTT hay sử dụng để làm blog cá nhân: 

1. Wordpress

Wordpress là một CMS và wordpress cũng rất là nổi tiếng rồi, trên internet cũng có rất nhiều bài viết nói về wordpress rồi, mình chỉ có một lưu ý là nếu bạn quan tâm tới wordpress thì hãy để ý phân biệt https://wordpress.org/ và https://wordpress.com/. Trong bài viết này hay rất nhiều các bài viết khác trên internet, khi nhắc tới wordpress thì các bạn hiểu rằng là đang nói tới https://wordpress.org/

Với Wordpress bạn hoàn toàn miễn phí khi sử dụng, nhưng bạn sẽ phải mất chi phí thuê hosting và mua tên miền, chi phí cũng khá là đắt đỏ nếu bạn đang là sinh viên. 

2. Github page

Github có lẽ không gì xa lạ với sinh viên CNTT, vậy việc tận dụng github page làm website cá nhân thì phải gọi là nhất cử lưỡng tiện. Với github page thì bạn sẽ có một blog cá nhân với đuôi .github.io, nghe khá là ngầu phải không, dĩ nhiên là bạn có thể thay thế bằng tên miền tùy chỉnh của mình.

Để bắt đầu với github page, hãy xem qua Thiết lập trang GitHub Pages với JekyllJekyllrb là công cụ sinh ra website tĩnh (static website), nói một cách chính xác nhất thì nó là text transformation engine (cỗ máy chuyển đổi text).

Với Jekyll github page bạn có một kho template phong phú, free thao hồ chọn lựa: 

Github page có thể mang lại cho bạn một blog cá nhân đẹp và hoàn toàn free, tuy nhiên thì để sử dụng github page thì bạn cũng cần một số kiến thức để có để chỉnh sửa và quản lý blog của mình.

3. Blogger

Blogger thì dễ sử dụng như wordpress và hoàn toàn miễn phí từ A-Z như github page vậy, blogger như là việc dung hòa giữa 2 ưu điểm của wordpress và github page vậy. Tuy nhiên đây lại là 2 ưu điểm duy nhất mà blogger đem lại. Nhược điểm lớn nhất của blogger chính là blog của bạn nhưng lại không phải của bạn. Mình nói thế nghĩa là sao, khi bạn tạo blog trên blogger thì blog là của bạn nhưng dữ liệu của bạn đang do Google lắm giữ và Google hoàn toàn có thể xóa blog của bạn bất cứ lúc nào nếu bạn vi phạm nguyên tắc, vì thế trong mọi trường hợp nếu sử dụng blogger hãy thường xuyên sao lưu lại dữ liệu của bạn đề phòng trường hợp xấu nhất xảy ra.

4. Viblo

Viblo giống như mạng xã hội công nghệ thông tin vậy, bạn đăng kí tài khoản và viết những bài viết trên nền tảng mà viblo cung cấp. Viblo có sẵn lượng thành viên và lượt truy cập khổng lồ, vì thế khi viết blog trên viblo bạn có thể đem bài viết của bạn ngay tới hàng triệu người. Nhưng dĩ nhiên rồi, bạn viết bạn trên nền tảng của người khác thì ngoài viết bài và viết bài ra thì bạn không thể làm thêm được gì như là việc thay đổi giao diện,...

2/06/2022

Nhập môn học máy và khai phá dữ liệu | Tài liệu, sở sở ngành CNTT


Học máy là một lĩnh vực của trí tuệ nhân tạo liên quan tới việc nghiên cứu và xây dựng các kỹ thuật cho phép các hệ thống học tự động để giải quyết những vấn đề cụ thể. Nếu bạn đã học qua môn nhập môn trí tuệ nhân tạo thì ắt hẳn đã có một chương giới thiệu về học máy và 2 bài toán với 2 phương pháp kinh điển trong học máy đó là phân loại văn bản với Naive Bayes và phân cụm với KNN. Với môn học này, chúng ta sẽ được tìm hiểu kĩ hơn, sâu hơn, được giới thiệu nhiều phương pháp hơn, cách làm quen và sử dụng thư viện,...

Với các bạn học kỹ thuật máy tính thì môn này thuộc học phần kỹ sư và các bạn cũng không được học môn nhập môn trí tuệ nhân tạo nên có thể là một môn mới mẻ, còn đối với các bạn học khoa học máy tính, mặc dù có 2 bài nói về học máy thôi nhưng một số thầy/cô thường nói nhiều hơn về những gì được đề cập trong slide nên có thể những kiến thức trong môn học này có một số đã là kiến thức cũ mà các bạn đã từng được học qua. 

Môn này có một số thầy/cô dạy và các thầy/cô đều dạy rất hay, mỗi người đều có những nét đặc biệt riêng. Nếu bạn học thầy Nguyễn Nhật Quang thì bạn sẽ được học khá bài bản, tuy nhiên thì thầy chỉ dạy tập chung những gì trong slide, nếu bạn không có định hướng theo AI thì học thầy Quang là khá hợp lí, nếu bạn học thầy Ngô Văn Linh thì sẽ được nghe thêm rất nhiều kiến thức mà thầy nói thêm, các vấn đề nâng cao mà mình nghĩ bạn nào có định hướng theo AI thì nên học thầy Linh.

Thầy Khoát có một kênh youtube và các video bài giảng về học máy, các bạn muốn xem và học trước có thể xem tại: https://youtu.be/jc1wo_8VA1w

BÀI TẬP LỚN

Bài tập lớn thì sẽ xung quanh các vấn đề về học máy rồi, nếu các bạn học thầy Quang thì yêu cầu về bài tập lớn sẽ đơn giản hơn khi học thầy Linh, các chủ đề bài tập lớn xoay quanh các chủ đề kinh điển như là: 
- Các bài toán phân loại (phân loại văn bản, phân loại thư rác, phân loại hoa iris)
- Các bài toán nhận dạng (nhận dạng chữ viết, nhận dạng khuôn mặt, nhận dạng biển số xe,...)
- Các bài toán dự đoán (dự đoán giá nhà, dự đoán giá xe máy) 
- ...

TÀI LIỆU MÔN HỌC

- Tải về slide thầy Quang: TẢI VỀ SLIDE

- Tải về slide thầy Linh: TẢI VỀ SLIDE

THI CUỐI KÌ

Về đề thi cuối kì, do ảnh hưởng của dịch nên chúng ta cũng chưa thể biết trước là sẽ thi cuối kì dạng trắc nghiệm hay tự luận nên các bạn phải chú ý thông báo của thầy/cô giáo trong mail hoặc trên qldt. 

1/27/2022

Phân tích và thiết kế hệ thống | Tài liệu, cơ sở ngành CNTT


Nếu các bạn học môn công nghệ phần mềm trước thì có lẽ các bạn đã được giới thiệu và làm quen trước về một số các biểu đồ như biểu đồ use-case, biểu đồ luồng, biểu đồ hoạt động, biểu đồ lớp,... Với môn phân tích và thiết kế hệ thống thì chính xác là các bạn được học lại nhưng mà đi một cách kĩ càng hơn khi phân tích và vẽ các biểu đồ trên.

Ở OOP thì các bạn được làm quen với 2 biểu đồ là biểu đồ use-case và biểu đồ lớp, sang tới công nghệ phần mềm các bạn được giới thiệu và làm quen với nhiều các loại biểu đồ hơn và tới phân tích thiết kế hệ thống các bạn sẽ được làm quen với gần như tất cả các loại biểu đồ đó là: 

  • Biểu đồ lớp 
  • Biểu đồ đối tượng
  • Biểu đồ triển khai 
  • Biểu đồ gói 
  • Biểu đồ thành phần 
  • Biểu đồ cấu trúc đa hợp
  • Biểu đồ ca sử dụng (use-case)
  • Biểu đồ hoạt động 
  • Biểu đồ trình tự 
  • Biểu đồ giao tiếp 
  • Biểu đồ máy trạng thái
  • Biểu đồ thời gian
  • Biểu đồ tổng quan tương tác

Mỗi biểu đồ sẽ đặc trưng cho một giai đoạn, góc nhìn trong quy trình phát triển phần mềm của bạn. Theo mình được biết thì việc vẽ những biểu đồ này sẽ nằm trong phần công việc của một BA (Business Analyst), dĩ nhiên là một lập trình viên ít nhất cũng phải nhìn được hiểu các biểu đồ này.

Môn học này là môn đi học chỉ học biểu đồ và làm bài tập lớn hay đi thi thì cũng chỉ thi vẽ biểu đồ thôi. Nhìn chung thì bước phân tích và thiết kế là một bước rất quan trọng trong quy trình phát triển phần mềm, tuy nhiên đôi khi đi làm ở công ty hay là các bài tập lớn ở trường thì chúng ta thường bỏ qua bước này mà bước ngay vào bước viết mã nguồn cho phần mềm sau đó dùng các công cụ để gen lại các biểu đồ dí vào báo cáo cho có, nhưng đấy là các môn khác thôi với môn này các bạn làm bài tập lớn sẽ không cần code và chỉ phải phân tích và thiết kế. 

Môn này có một số thầy dạy, tuy nhiên mình thấy thầy dạy hay nhất là thầy Nguyễn Nhật Quang, thầy dạy rất tỉ mỉ, giải thích rõ từng phần một, điểm thì thầy cho cũng khá thoải mái, các bạn có thể xem qua website cá nhân của thầy Quang TẠI ĐÂY.

Một số tài liệu dành cho môn học: 

- Slide bài giảng - thầy Nguyễn Nhật Quang: TẢI VỀ SLIDE BÀI GIẢNG

- Một số đề thi cuối kì môn phân tích và thiết kế hệ thống: TẢI VỀ ĐỀ THI THAM KHẢO

Một số tài liệu tham khảo thêm: 

- Thực hành về xây dựng biểu đồ use-case: TẢI VỀ TÀI LIỆU

- Thực hành về xây dựng biểu đồ lớp, biểu đồ trạng thái: TẢI VỀ TÀI LIỆU

- Tham khảo biểu đồ use-case chi tiết: TẢI VỀ TÀI LIỆU

Tài liệu khác: 

- Tài liệu phân tích thiết kế hệ thống thông tin - PTIT: TẢI VỀ GIÁO TRÌNH

1/24/2022

Tổng hợp các câu hỏi về Apache Spark | Ôn tập cuối kì môn Lưu trữ và xử lý dữ liệu lớn


Xem phần trước: Tổng hợp các câu hỏi về Apache Hadoop | Ôn tập cuối kì môn Lưu trữ và xử lý dữ liệu lớn


Số thứ tự Câu hỏi Đáp án Câu Trả Lời
1 Spark được phát triển bằng ngôn ngữ nào A. Java
B. Scala
C. Python
D. R
B
2 Trong Spark Streaming dữ liệu có thể lấy từ những nguồn nào? A. Kafka
B. Flume
C. Kinesis
D. Tất cả
D
3 Apache Spark có API cho các ngôn ngữ: A. Java
B. Scala
C. Python
D. Tất cả
D
4 Đâu không phải là một thành phần trong hệ sinh thái Spark? A. Sqoop
B. GraphX
C. MLlib
D. BlinkDB
A
5 Cấu trúc dữ liệu cơ bản của Spark Streaming là gì? A. DStream
B. RDD
C. Shared Variable
D. Không có trong số đáp án trên
A
6 Thuật toán nào sau đây không có trong Spark MLlib A. Streaming Linear Regression
B. Streaming KMeans
C. Tanimoto distance
D. Không có trong các phương án trên
C
7 DStream là gì? A. Chuỗi các RDD liên tục
B. Chuỗi Dataframe liên tục
C. Chuỗi Dataset liên tục
D. Không có trong các phương án trên
A
8 Đâu không phải là một đặc điểm của Spark A. Hỗ trợ xử lý tính toán trên RAM
B. Tính chịu lỗi
C. Tiết kiệm chi phí
D. Tương thích với hệ thống lưu trữ tệp khác
C
9 Đâu không phải là một ouput operation của DStream A. SaveAsTextFiles
B. ForeachRDD
C. SaveAsHadoopFiles
D. ReduceByKeyAndWindow
D
10 Apache Spark có khả năng xử lý hàng loạt khi chạy trên RAM nhanh hơn bao nhiêu lần so với MapReduce A. 10
B. 20
C. 100
D. 200
C
11 Đâu là lý do khiến Spark nhanh hơn MapReduce A. Công cụ thực thi DAG và tính toán trên RAM
B. Hỗ trợ cho việc sử dụng nhiều ngôn ngữ khác nhau như Scala; Java; Python; R
C. RDD là bất biến và có khả năng chịu lỗi cao
D. Không có trong các phương án trên
A
12 Điều nào sau đây là đúng khi nói về RDD A. RDD là một mô hình lập trình
B. RDD là một tập hợp đối tượng bất biến
C. Là database
D. Không có trong các phương án trên
B
13 Khả năng chịu lỗi của RDD thể hiện qua đâu? A. Tính bất biến của RDD
B. DAG (Directed Acyclic Graph)
C. Lazy-evaluation
D. Không có trong các phương án trên
14 Đầu vào dữ liệu cho chương trình Spark có thể là: A. Local files
B. HDFS; NFS
C. Amazon S3; Elasticsearch
D. Cả 3 phương án trên
D
15 Đâu là lệnh lưu dữ liệu ra ngoài chương trình Spark? A. input.saveAsTextFile('file:///usr/zeppelin/notebook/dataset/new.txt')
B. input.saveAsTextFile('/usr/zeppelin/notebook/dataset/new.txt')
C. input.saveAs('file:///usr/zeppelin/notebook/dataset/new.txt')
D. input.saveAsTextFile:'file:///usr/zeppelin/notebook/dataset/new.txt'
A
16 Đâu là cách submit đúng một job lên Spark cluster hoặc chế độ local A. ./spark-submit wordcount.py README.md
B. ./spark-submit README.md wordcount.py
C. spark-submit wordcount.py README.md
D. Phương án A và C
A
17 Câu lệnh MapReduce trong Spark dưới đây chia mỗi dòng thành từ dựa vào delimiter nào: input.flatMap(lambda x: x.split('\t')).map(lambda x: (x;1)).reduceByKey(add) A. Tab
B. Dấu cách
C. Dấu hai chấm
D. Dấu phẩy
A

Tham khảo: https://data-flair.training/

12/26/2021

LaTeX cho người mới bắt đầu với 7 videos | Kỹ năng


Như các bạn đã biết, Latex là một công cụ soạn thảo các văn bản khoa học chuyên nghiệp, đặc biệt là các công thức Toán học với nhiều công dụng vô cùng hữu ích, có thể chạy hoàn toàn miễn phí trên hệ thống phần cứng và các hệ điều hành khác nhau.

Latex có rất nhiều ưu điểm nội nổi trội so với các công cụ soạn thảo khác, như:

  • Latex tạo ra văn bản chất lượng cao, chuyên nghiệp và đẹp mắt. Văn bản tạo ra bởi Latex có chất lượng in ấn rất cao

  • Hỗ trợ soạn thảo các công thức toán, các hình vẽ, mã nguồn lập trình, tạo các cấu trúc phức tạp như chỉ mục, mục lục, phụ lục, tài liệu tham khảo một cách dễ dàng.

  • Latex tạo ra văn bản có dung lượng tập tin nhỏ, tiện dụng trong việc lưu trữ trong đĩa mềm.

  • Latex cho phép tách nội dung văn bản độc lập ra khỏi hình thức trình bày. Điều này cho phép người soạn thảo chỉ cần tập trung vào nội dung mà không cần tốn thời gian làm đẹp phần trình bày.

  • Latex khắc phục được một số vấn đề của Word: không có sự thông nhất về định dạng trong toàn văn bản, thường có lỗi trong các tham chiếu chéo, khó khăn trong việc gõ các công thức...

  • Latex là phần mềm mã nguồn mở, liên tục được phát triển và cải tiến. Có cộng đồng người dùng rộng khắp trên thế giới và Latex community luôn sẵn sàng giải đáp mọi thắc mắc và khó khăn của bạn qua Internet.

Nếu các bạn theo các con đường nghiên cứu thì LaTeX chính là phần không thể thiếu vì nó là bắt buộc để viết một bài báo khoa học. Ngoài ra, nếu bạn sử dụng LaTeX để làm báo cho cho đồ án môn học hay đồ án tốt nghiệp thì sẽ được đánh giá rất cao (các trường hợp này mình đều đã gặp), báo cáo làm bằng LaTeX đẹp hơn rất nhiều so với một báo cáo bằng Word.

BCH Liên chi đoàn - Liên chi hội Viện Toán Ứng dụng và Tin học cũng đã từng rất nhiều lần tổ chức các khóa học LaTeX BASICS. Nhưng với quan điểm của mình, những thứ kiểu như "cho người mới bắt đầu", "BASICS" thì có thể tự học được, tham gia các khóa học mặc dù được chỉ bảo, hỏi đáp trực tiếp nhưng mất thời gian vào các khóa BASICS là không cần thiết.

LaTeX nó cũng gần giống như các ngôn ngữ lập trình mà các bạn học vậy, muốn sử dụng chúng ta phải cài vào môi trường và có một công cụ soạn thảo trên máy. Tuy nhiên, bây giờ có rất nhiều các trang web hỗ trợ soạn thảo LaTeX online cực kì tiện lợi, một công cụ phổ biến mà mình thấy các thầy/cô cũng thường sử dụng để viết các bài báo là https://www.overleaf.com/. Việc làm việc online cũng đem lại những lợi ích nhất định khi mọi người có thể cùng nhau chỉnh sửa một bài, có thể chia sẻ lẫn nhau xem trước khi xuất bản,...

Overleaf cũng giới thiệu chuỗi 7 video hướng dẫn học LaTeX cho người mới bắt đầu, các bạn có thể tham khảo toàn bộ khóa học TẠI ĐÂY (HUST & PI cũng mong muốn sẽ dịch được phần transcript của các video bài học này sang tiếng Việt để cho mọi người có thể tham khảo dễ hơn, tuy nhiên hiện tại vẫn chưa thể làm được do vấn đề thời gian và nhân lực).

LaTeX video tutorial for beginners: 

Video 1: 

Video 2: 

Video 3: 

Video 4: 

Video 5: 

Video 6: 

Video 7: 


Các công cụ hỗ trợ lateX online nổi tiếng: 

https://www.sharelatex.com/

https://www.overleaf.com/login?

12/17/2021

Hướng dẫn lab 5 | Môn lưu trữ và xử lý dữ liệu lớn


Các bạn học môn lưu trữ và xử lý dữ liệu lớn của thầy Đào Thành Chung sẽ phải làm 5 bài lab, trong bài viết này mình sẽ hướng dẫn mọi người chạy bài lab số 5 (lab về Spark Streaming), xem yêu cầu của bài lab TẠI ĐÂY

Chú ý

- Trong hướng dẫn của thầy, có một số hướng dẫn đã quá cũ và không thể chạy được nếu bạn làm theo y nguyên trong hướng dẫn của thầy. Mình đã sửa lại 2 project trong lab cho phù hợp, các bạn chỉ cần clone về và làm theo hướng dẫn của mình dưới đây.

- Project của thầy và project mình sửa lại đều chạy với Spark Single node, nên nếu bạn cài với cụm Multi node thì hãy sửa đổi các địa chỉ hostname từ localhost thành địa chỉ máy master, chỗ nào cần sửa mình đã lưu ý bôi đậm, các bạn chú để sửa lại cho đúng.

Bài 1: Socket Stream

Clone toàn bộ project sau về máy để chuẩn bị chạy nha: https://github.com/demanejar/socket-stream.

Trong project có 2 file chính, một là file SocketStream.scala:

object SocketStream {
    def main(args : Array[String]){
        val conf = new SparkConf().setAppName("Socket-Stream")
        val ssc = new StreamingContext(conf, Seconds(1))
        val lines = ssc.socketTextStream("localhost", 7777)
        val errorLines = lines.filter(_.contains("error"))
        errorLines.print()
        ssc.start()
        ssc.awaitTermination()
    }
}

  • Để có thể submit job này với spark-submit thì bạn phải build chúng thành một file .jar, với scala thì chúng ta sẽ sử dụng sbt

  • Lưu ý: nếu bạn chạy cụm Spark nhiều máy, thì hãy đổi địa chỉ hostname từ localhost thành địa chỉ máy master nha

Khởi động Spark và kiểm tra địa chỉ của master thông qua cổng 8080 (spark://PC0628:7077):

Build project vừa rồi thành file .jar với câu lệnh:

sbt clean package

Chạy spark-submit với file jar vừa bulid được:

spark-submit --master spark://PC0628:7077 --class SocketStream target/scala-2.11/socket-stream_2.11-0.0.1.jar

  • Tham số master là địa chỉ của master mà bạn vừa lấy ở bên trên

  • Tham số class là đường dẫn tới hàm main của project

Mở một terminal khác lên và chạy lệnh sau để bắt đầu gửi text qua cổng 7777:

nc -l 7777

Kết quả in ra màn hình và sẽ vụt qua rất nhanh:



Bài 2: Log Analyzer

Clone toàn bộ project về máy để chuẩn bị chạy nha: https://github.com/demanejar/logs-analyzer.

Mình sẽ đi qua giải thích từng file để mọi người hiểu hơn về project, đầu tiên là file đầu vào log.txt, file này chứa 1546 dòng log, các log đều có cấu trúc giống nhau, công việc của project này chính là nhận đầu vào từ file log này và đưa ra các phân tích, thống kê về trên tập log này.

File stream.sh là một file shell script với nhiệm vụ là đọc dữ liệu từ file log.txt và đẩy chúng qua cổng 9999.

File build.sbt thì giống với project trước, file này để khai báo các thư viện, phụ thuộc để có thể build project thành một file .jar

Cuối cùng là project của chúng ta viết bằng scala với 2 file ApacheAccessLog.scalaLogAnalyzerStreaming.scala. File LogAnalyzerStreaming.scala sẽ lắng nghe ở cổng 9999, lấy dữ liệu và tiến hành tổng hợp, phân tích chúng.

  • Lưu ý: nếu bạn chạy cụm Spark nhiều máy, thì hãy đổi địa chỉ hostname  trong file LogAnalyzerStreaming.scala từ localhost thành địa chỉ máy master nha

Khởi động Spark và kiểm tra địa chỉ của master thông qua cổng 8080 (spark://PC0628:7077):

Build project vừa rồi thành file .jar với câu lệnh dưới đây, lần đầu build có thể các bạn sẽ phải đợi khá lâu vì nó phải tải xuống các thư viện, trong các lần build sau sẽ nhanh hơn:

sbt clean package

Chạy spark-submit với file jar vừa bulid được:

spark-submit --master spark://PC0628:7077 --class LogAnalyzerStreaming target/scala-2.12/log-analyzer_2.12-0.0.1.jar

  • Tham số master là địa chỉ của master mà bạn vừa lấy ở bên trên

  • Tham số class là đường dẫn tới hàm main của project

Trong bài viết trước, chúng ta đã gửi dữ liệu thông qua socket bằng tay, trong bài này vẫn là socket tuy nhiên chúng ta sẽ viết một chương trình để chúng tự động gửi dữ liệu và chúng ta chỉ việc ngồi chờ kết quả thôi.

Như mình giải thích ở ban đầu, file stream.sh là một file shell script với nhiệm vụ là đọc dữ liệu từ file log.txt và đẩy chúng qua cổng 9999. Sử dụng câu lệnh sau để bắt đầu chạy:

./stream.sh log.txt

  • Với log.txt viết ở phía sau thể hiện log.txt là một tham số đầu vào của chương trình viết trong file .stream.sh

  • Lưu ý: nếu bạn chạy cụm Spark nhiêu máy thì file này phải được chạy trên máy master 

Kết quả in ra màn hình cũng sẽ vụt qua rất nhanh, các bạn có thể kéo terminal lên để nhìn

Mở cổng 4040 để xem lại chi tiết các job vừa thực hiện (localhost:4040):


Tham khảo: https://demanejar.github.io/

11/12/2021

C/C++ có thực sự cần thiết? Giới thiệu các IDE, Text Editor sử dụng cho lập trình C/C++


C/C++ có thực sự cần thiết?

C/C++ là ngôn ngữ dùng và giảng dạy trong hầu hết các môn học liên quan tới các môn cơ sở cốt lõi ngành CNTT như tin đại cương, cấu trúc dữ liệu, kỹ thuật lập trình, thuật toán ứng dụng,... tại Bách Khoa và hầu hết các trường đại học khác vì tính "nền tảng của C/C++".

Trong phần này mình sẽ giải thích cho các bạn vai trò của C/C++, và với sự phát triển mạnh mẽ của các ngôn ngữ lập trình bậc cao thì C/C++ có thực sự cần thiết?

- Câu trả lời của mình về C/C++ là cần thiết (*).

- Đầu tiên là mình muốn nói về C/C++ còn được các công ty sử dụng hay không?, chúng ta hãy xem danh sách các ngôn ngữ mà các công ty lớn đang sử dụng cho sản phẩm/dịch vụ của họ nha (Ảnh: Wiki - 2021): 

Như mọi người thấy C++ được hầu hết các ông lớn sử dụng ở phía server vì hiệu năng, tốc độ của nó là cực kì tốt.

- C/C++ gần với ngôn ngữ máy tính nhất nên qua đó, bạn có thể hiểu được bên dưới thật sự máy tính nó đang làm gì, cấp phát bộ nhớ ra sao, hoạt động như thế nào.

- C/C++ là cơ sở để xây dựng rất nhiều ngôn ngữ khác như Python, các thư viện hay core của Python đều được viết bằng C++, vì thế khi hiểu rõ bạn có thể tác động sâu hơn vào các ngôn ngữ này, cái này khá là hay mà khi mà mình đã bị bạn mình khuất phục bằng những thứ mình nghĩ là không thể nếu chúng ta chỉ là người giỏi ngôn ngữ Python mà không hiểu hệ thống bên dưới nó được chạy thế nào.

- Nhiều ngôn ngữ lập trình khác được phát triển dựa trên nền tảng C++, bao gồm C#, D, Java và các phiên bản mới hơn của C. Vậy nên các cấu trúc, câu lệnh, khai báo biến,... đều có phần giống với C/C++. Vì thế khi bạn học xong C/C++ thì tiếp cận các ngôn ngữ khác cũng dễ dàng hơn.

- Lập trình viên C/C++ được trả lương rất cao

Tuy nhiên chúng ta cần quay lại (*) ở bên trên, mình đã nói rằng C/C++ là cần thiết tuy nhiên chúng không phải là tất cả, bạn có thể bước vào và trở thành một lập trình viên mà không cần biết cũng như cần học qua C/C++. Với các bạn sinh viên và đặc biệt là sinh viên Bách Khoa thì C/C++ được sử dụng làm ngôn ngữ giảng dạy trong một số môn thì lời khuyên của mình là các bạn hãy cố gắng học cho tốt chú đừng cố kêu ca rằng nó đã lỗi thời và không còn được sử dụng.

Các IDE, Text Editor sử dụng cho lập trình C/C++

Khi năm nhất cũng mới học tin đại cương thôi, lúc ấy cũng là dân mới vào nghề, mình cũng không biết là dùng IDE gì để code C/C++, cũng đã thử cài vào rồi gỡ ra rất nhiều ứng dụng. Trong phần này mình sẽ chia sẻ tới mọi người một số IDE, Text Editor phổ biến cho lập trình C/C++ và các ưu, nhược điểm của nó để các bạn có thể chọn ra IDE, Text Editor phù hợp cho mình nha.

Dev-C/C++

Cái tên gạo cội thì phải nhắc tới Dev-C/C++, nó là IDE chính được sử dụng trong môn tin học đại cương, nó dễ cài đặt, dễ sử dụng và nhẹ tuy nhiên chưa phải là một IDE mạnh. Thường thì Dev-C/C++ sử dụng cho người mới bắt đầu.

Codeblocks

Codeblocks là IDE mà mình thấy là phù hợp cho việc học thuật toán và nó cũng được các thầy/cô giáo trong môn thuật toán ứng dụng gợi ý sử dụng. Codeblocks cũng rất dễ cài đặt, sử dụng và nhẹ. Với góc độ thuật toán thì Codeblocks là một IDE khá mạnh, tuy nhiên với project lớn phải chia các mô-đun thì mình thấy là Codeblocks chưa đủ mạnh.

Eclipse / Netbeans

C/C++ như là nghề tay trái khi nhắc tới 2 IDE này. Netbeans hay Eclipse đều là các IDE mạnh mẽ hỗ trợ Java và thường sử dụng cho các lập trình viên Java (Eclipse thì có cả 1 hệ sinh thái các ứng dụng của riêng chúng). 

Điểm mạnh của 2 IDE này là mã nguồn mở, hoàn toàn free cho người dùng và rất mạnh mẽ. Tuy nhiên thì việc sử dụng 2 IDE này trong 2 môn tin đại cương hay thuật toán ứng dụng có vẻ là hơi to và nặng.

Clion

Clion là một sản phẩm của Jetbrains và như mình đã viết trong một số bài viết thì các sản phẩm của Jetbrains là miễn bàn, ngon khỏi chê. 

Tuy nhiên Clion rất nặng, như với Netbeans và Eclipse thì Clion dành cho các project lớn. Còn nữa, Clion là không có bản miễn phí, nhưng với sinh viên chúng ta hoàn toàn có thể sử dụng miễn phí Clion mà không tốn một đồng nào từ mail edu của các bạn, bạn có thể xem lại bài hướng dẫn Mail edu của trường làm được gì để nhận và sử dụng miễn phí tất cả các sản phẩm của Jetbrains.

VSCode / Sublime Text

VSCode hay Sublime Text đều là các Text Editor, và muốn sử dụng chúng cho bất cứ ngôn ngữ hay framework nào thì các bạn phải cài thêm các extension hỗ trợ, và việc mày mò cài thêm  các extension cho từng ngôn ngữ là rắc rối. Thường thì những pro mới dùng editor để code, lời khuyên của mình nếu các bạn là newbie thì hãy lựa chọn Dev-C hoặc Codeblocks chứ đừng bem ngay vào 2 editor này.

Một editor nữa mình giới thiệu luôn ở phần này đó là vim, cũng giống như VSCode hay Sublime Text, bạn muốn sử dụng chúng cho các ngôn ngữ hay framework nào thì phải cài thêm các extension hỗ trợ. Vim thì sử dụng rất khó, cài đặt thêm các extension cũng khó. Thường thì các super-pro mới dùng vim để code.

replit

Cái này là một IDE online hỗ trợ khá nhiều các ngôn ngữ. Vì là online nên rất tiện vì các bạn không cần phải cài đặt, chỉ cần một trình duyệt có mạng là có thể vào code luôn, dùng mọi nơi chỉ cần là có máy tính nối mạng không cần phải cài môi trường hay gì cả. 

Tuy nhiên vì là online nên có rất nhiều hạn chế như các thư viện không đủ, các trình gợi ý code chưa đủ mạnh,...

Tham khảo: https://en.wikipedia.org/https://codelearn.io/

11/01/2021

Tổng hợp các câu hỏi về Apache Hadoop | Ôn tập cuối kì môn Lưu trữ và xử lý dữ liệu lớn


Câu 1: Mục tiêu chính của Apache Hadoop 

Lưu trữ dữ liệu khả mở và xử lý dữ liệu mạnh mẽ. Tiết kiệm chi phí khi lưu trữ và xử lý lượng dữ liệu lớn.

Bạn có thể xem thêm chi tiết mục tiêu của Hadoop [TẠI ĐÂY]

Câu 2: Hadoop giải quyết bài toán chịu lỗi thông qua kỹ thuật gì

- Hadoop chịu lỗi thông qua kỹ thuật dư thừa

- Các tệp tin được phân mảnh, các mảnh được nhân bản ra các node khác trên cụm

- Các công việc cần tính toán được phân mảng thành các tác vụ độc lập 


Câu 3: Mô tả cách thức 1 client được dữ liệu trên HDFS

Client truy vấn namenode để biết được vị trí các chunks. Namenode trả về vị trí các chunks. Client kết nối song song với các datanode để đọc các chunk.

Bạn có thể xem chi tiêt quá trình đọc dữ liệu này [TẠI ĐÂY]


Câu 4: Mô tả cách thức 1 client ghi dữ liệu trên HDFS

Client kết nối tới namenode để chỉ định khối lượng dữ liệu cần ghi. Namnode chỉ định vị trí các chunk cho client. Client khi chunk tới datanode đầu tiền, sau đó các datanode tự động thực thi nhân bản. Quá trình kết thúc khi tất cả các chunk và nhân bản đã được thực thi thành công. 

Bạn có thể xem chi tiêt quá trình ghi dữ liệu này [TẠI ĐÂY]


Câu 5: Các thành phần chính trong Hadoop Ecosystem

Hadoop Ecosytem là một nền tảng cung cấp các giải pháp để lưu trữ và xử lý lượng lớn dữ liệu. 

Các thành phần chính trong Hadoop Ecosytem là: 

- HDFS 

- Mapreduce framework 

- YARN

- Zookeeper


Câu 6: Cơ chế chịu lỗi của datanode trong HDFS

Sử dụng cơ chế heartbeat, định kì datanode sẽ gửi thông báo về trạng thái cho namenode. Khoảng thời gian mặc định mà datanode gửi heartbeat về cho namenode là 3s, sau 3s mà datanode không có gửi thông tin về cho namenode thì mặc định namenode coi là node đó đã chết và nhiệm vụ chưa hoàn thành của node đó sẽ được trao lại cho node mới.

Để cấu hình lại thời gian heartbeat thì bạn có thể thêm đoạn XML sau vào trong file hdfs-site.xml như sau: 

<property>

<name>dfs.heartbeat.interval</name>

<value>3</value>

</property>



<property>

<name>dfs.namenode.heartbeat.recheck-interval</name>

<value>300000</value>

</property>

Bạn có thể xem các cấu hình mặc định của hdfs-site.xml [TẠI ĐÂY]


Câu 7: Cơ chế tổ chức dữ liệu của datanode trong HDFS

Files trong HDFS được chia thành các khối có kích thước cố định được ( block-sized chunks) gọi là data block. Các block được lưu trữ như các đơn vị độc lập (kích thước của 1 block mặc định là 128MB). 

 Các chunk là các tập tin hệ thống trong tập tin cục bộ của máy chủ datanode


 Xem thêm[Vấn đề gì xảy ra nếu lưu trữ các file nhỏ trên HDFS?]

 

Câu 8: Cơ chế nhân bản dữ liệu trong HDFS

Các block của file được nhân bản để tăng khả năng chịu lỗi. Namenode là node đưa ra tất cả các quyết định đến việc nhân rộng các khối. 


Câu 9: HDFS giải quyêt bài toán single-point-of-failure cho namenode bằng cách nào 

Sử dụng Secondary Namenode theo cơ chế active-passive. Secondary Namenode chỉ hoạt động khi có vấn đề với Namenode

Các bạn có thể xem chi tiết về Secondary Namenode [TẠI ĐÂY]


Câu 10: 3 chế độ mà Hadoop có thể chạy? 

- Standalone mode: đây là chế độ mặc định, Hadoop sử dụng local FileSystem và 1 tiến trình Java duy nhất để chạy các dịch vụ Hadoop.

- Pseudo-distributed mode: triển khai Hadoop trên 1 node để thực thi tất cả các dịch vụ.

- Fully-distributed mode: triển khai Hadoop trên 1 cụm máy với namenode và datanode.


Câu 11: Giải thích Bigdata và tiêu chí 5V của Bigdata

Bigdata là thuật ngữ chỉ tập dữ liệu lớn và phức tạp và rất khó để xử lý bằng các công cụ dữ liệu quan hệ, các ứng dụng xử lý dữ liệu truyền thống. 

5V trong Bigdata là: 

- Volume: Volume thể hiện lượng dữ liệu đang tăng với tốc độ cấp số nhân, tức là bằng Petabyte và Exabyte.

- Velocity: Velocity đề cập đến tốc độ dữ liệu đang phát triển, rất nhanh. Hôm nay, dữ liệu của ngày hôm qua được coi là dữ liệu cũ. Ngày nay, mạng xã hội là một yếu tố đóng góp lớn vào tốc độ phát triển của dữ liệu.

- Variety: Variety đề cập đến sự không đồng nhất của các kiểu dữ liệu. Nói cách khác, dữ liệu được thu thập có nhiều định dạng như video, âm thanh, csv, v.v. Vì vậy, các định dạng khác nhau này đại diện cho nhiều loại dữ liệu.

- Veracity: Veracity đề cập đến dữ liệu bị nghi ngờ hoặc không chắc chắn của dữ liệu có sẵn do dữ liệu không nhất quán và không đầy đủ. Dữ liệu có sẵn đôi khi có thể lộn xộn và khó tin cậy. Với nhiều dạng dữ liệu lớn, chất lượng và độ chính xác rất khó kiểm soát. Khối lượng thường là lý do đằng sau sự thiếu chất lượng và độ chính xác của dữ liệu.

- Value: Tất cả đều tốt và tốt khi có quyền truy cập vào dữ liệu lớn nhưng trừ khi chúng ta có thể biến nó thành một giá trị.

Tham khảo các câu hỏi về Hadoop tại: https://data-flair.training/

Bài viết được tham khảo tại: https://demanejar.github.io/