Showing posts with label soict. Show all posts
Showing posts with label soict. Show all posts

6/01/2022

Phát triển ứng dụng đa nền tảng | Tài liệu, chuyên ngành


Phát triển ứng dụng đa nền tảng trình bày khái niệm cơ bản, quy trình, công cụ và các thư viện, framework hỗ trợ để xây dựng ứng dụng đa nền tảng và chủ yếu chính là React Native và Flutter (Cross platform). 

Nếu ai học KHMT thì ở module 1 các bạn cũng đã được học môn học "Phát triển ứng dụng cho thiết bị di động", môn học này giới thiệu về phát triển các ứng dụng trên mobile với các công cụ phát triển gốc trên Android (Native platform) bằng ngôn ngữ lập trình Java. Nếu bạn muốn biết thêm về ưu nhược điểm của Native platform và cross platform thì có thể xem qua bài viết trước đó trên website của mình: Native với Cross Platform: ưu và nhược điểm


Các bạn sẽ học được gì ở môn học này? Như bao môn khác, không thể nào qua 1 môn học mà các bạn có thể trở thành một nhà phát triển ứng dụng đa nền tảng được, môn học chỉ cung cấp cho bạn những thứ cơ bản nhất để nếu bạn nào có theo hướng này thì cũng sẽ cần tự mình nghiên cứu thêm rất nhiều hay là đi thực tập tại các công ty để có thể học hỏi thêm từ các doanh nghiệp.

Trong phát triển ứng dụng đa nền tảng các bạn sẽ được dạy tập chung chủ yếu vào các phần chính: 

  • Tổng quan và kiến trúc của thiết bị di động (kiến trúc android, kiến trúc iOS, kiến trúc đa nền tảng)
  • Dart và Flutter
  • Javascript và React native

(Tham khảo bài viết: Các điểm nhấn trong cú pháp của ES6)

Với bài tập lớn các bạn có thể tùy ý lựa chọn xây dựng ứng dụng đa nền tảng dựa trên Flutter hoặc React Native tùy ý. Các bạn đã được cung cấp sẵn backend khi làm bài tập lớn và công việc của mỗi nhóm chỉ là xây dựng ứng dụng frontend cho thiết bị di động với công nghệ đa nền tảng. Dĩ nhiên là các bạn được phép thêm các chức năng, chỉnh sửa để có một ứng dụng ưng ý hơn, thậm chí đây còn là điều bắt buộc khi trong kỳ mình học bản backend thầy đưa cho là một bản backend bị thiếu một số chức năng và thầy giáo không tìm được bản đầy đủ. Hoặc các bạn cũng có thể xây dựng một con backend mới hoàn toàn nếu có thời gian, nhưng nhớ là con backend các bạn xây dựng mới nên có các chức năng cũng phải giống với con backend mà thầy giáo cung cấp.

Môn học này có 1 số thầy giáo phụ trách như là thầy Nguyễn Mạnh Tuấn, Nguyễn Tiến Thành,... Các bạn học thầy Tuấn thì có vẻ điểm sẽ cao hơn, học thầy Thành thì sẽ được làm các đề thi thử trước khi các bạn thi cuối kì.

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

Môn học này sẽ có 1 số kiến thức xung quanh môn học được thầy giáo hay hỏi trong quá trình học tập, mình sẽ viết thành các bài viết riêng đăng sau bài viết này vì chúng cũng là những vấn đề không nhỏ.

5/08/2022

Các điểm nhấn trong cú pháp của ES6 | Phát triển ứng dụng đa nền tảng - Sharing


Trong phát triển ứng dụng đa nền tảng các bạn sẽ được đề cập tới 2 framework đa nền tảng mobile nổi tiếng nhất hiện nay đó là React Native và Flutter. Với React Native việc nắm vững Javascript và những cú pháp mới trong ES6 là điều rất cần thiết. Trong bài viết này mình muốn viết về những điểm nhấn trong cú pháp của ES6, bài viết được tham khảo trong chương 4, phần 1.2 của slide bài giảng phát triển ứng dụng đa nền tảng sẽ được chia sẻ ở những bài viết sau trên blog của mình và đã được bổ sung và sửa đổi một số kiến thức cho đầy đủ hơn.

Từ khóa let và const

Trong ES5, chúng ta định nghĩa 1 biến sử dụng từ khóa var, phạm vi của biến khi sử dung var để khai báo sẽ chỉ có 2 trường hợp là global hoặc local. Khi chúng ta định nghĩa biến ngoài một hàm thì nó là biến global, còn khi chúng ta định nghĩa biến ở bên trong hàm thì nó là một biến local.

Trong ES6 giới thiệu cho chúng ta một từ khóa let giúp cho việc khai báo biến chạy trong một block (block ở đây được hiểu như là giới hạn trong 2 dấu "{}")

Ví dụ: 

let x = 10;
if (x == 10) {
    let x = 20;
    console.log(x); // 20:  reference x inside the block
}
console.log(x); // 10: reference at the begining of the script

Chúng ta có thể thấy biến x được khai báo mới trong block if hoàn toàn được khai báo mới chứ không hề liên quan gì tới biến đã được khai báo ở ngoài. Việc này cũng giúp chúng ta tránh nhầm lẫn trong việc sử dụng tên biến hơn và cũng giúp Javascript gần hơn với các ngôn ngữ khác.

ES6 cũng cung cấp một cách định nghĩa hằng số sử dụng const. const keyword dùng để định nghĩa các biến chỉ đọc và tham chiếu tới một giá trị.

Các biến được khai báo bởi từ khóa let là mutable (có thể thay đổi), còn các biến khai báo bởi từ khóa const là immutable (không thể thay đổi).

Vòng lặp for...of

Cú pháp mới for...of giúp lặp một cách dễ dàng hơn trên các đối tượng có thể lặp lại như là: mảng, string, map, set,...

Ví dụ: 

let scores = [80, 90, 70];

for (let score of scores) {
    score = score + 5;
    console.log(score);
}

Template literals

Trước ES6, chúng ta sử dụng dấu ngoặc đơn (') và ngoặc kép (") để biểu thị cho string javascript, và string bị giới hạn rất nhiều chức năng. 

Với template literals chúng ta có thể làm nhiều hơn với một string như là: 

- Khai báo và sử dụng string có thể kéo dài trên nhiều dòng

- Thực hiện nội suy cho phép nhúng các biến hoặc biểu thức vào chuỗi 

- An toàn khi chèn vào các mã HTML

Template literals được đặt trong 2 dấu (``), ví dụ: 

let str = `Template literal in ES6`;

console.log(str);// Template literal in ES6
console.log(str.length); // 23
console.log(typeof str);// string

Arrow Function

Cú pháp mũi tên (=>), đây như là một cách viết gọn hàm lại. Ví dụ với một hàm bình thường như sau: 

let add = function (x, y) {
	return x + y;
};
console.log(add(10, 20)); // 30

Chúng ta có thể viết gọn lại với cú pháp của arrow function như sau: 

let add = (x, y) => x + y;
console.log(add(10, 20)); // 30;

Một số trường hợp chúng ta có thể viết gọn lại hơn nữa arrow function, khi danh sách tham số chỉ có 1, chúng ta có thể bỏ qua dấu ngoặc đơn: 

(singleParam) => { statements }
singleParam => { statements }

Tuy nhiên nếu hàm không có tham số thì cặp dấu ngoặc đơn là bắt buộc sử dụng: 

() => { statements }

Nếu chỉ có một biểu thức trong nội dung của arrow function thì chúng ta có thể bỏ qua dấu ngoặc nhọn: 

let square = x => x * x;

Giá trị mặc định cho tham số

Ví dụ: 

function say(message='Hi') {
    console.log(message);
}

say(); // 'Hi'
say('Hello') // 'Hello'

Xây dựng các Class

Trước ES6, Javascript không có khái niệm về class, mà để bắt chước một class thì chúng ta có thể sử dụng constructor/prototype pattern. 

Ở ES6, khái niệm class đã được giới thiệu và đây chắc chắn là những tin vui cho những ai fan của hướng đối tượng: 

class Person {
    constructor(name) {
        this.name = name;
    }
    getName() {
        return this.name;
    }
}

Module

- Mỗi module được biểu diễn bằng một thẻ .js riêng biệt 

- Lệnh import hoặc export trong một module để xuất hoặc nhập các biến, hàm, class hoặc bất cứ một thực thể nào đến từ một module hoặc tệp khác

Ví dụ, tạo một file message.js có nội dung như sau: 

export let message = 'ES6 Modules';

Để sử dụng biến message trong một file khác, chúng ta có thể sử dụng cú pháp import như sau: 

import { message } from './message.js'

Rest Parameters

- Truyền vào lượng tham số tùy ý cho hàm dưới dạng mảng

- Thêm vào phía trước tham số toán từ ... (dấu ba chấm)

function sortNumbers(...numbers) {
    return numbers.sort();
}
console.log(sortNumbers(3, 5, 7));
console.log(sortNumbers(3, 5, 7, 1, 0));

Toán tử Spread

Toán tử spread (tức là chia nhỏ) một mảng và chuyển các giá trị vào hàm được chỉ định.

const odd = [1,3,5];
const combined = [2,4,6, ...odd];
console.log(combined);

// => output: [ 2, 4, 6, 1, 3, 5 ]

function f(a, b, ...args) {
	console.log(args);
}

f(1, 2, 3, 4, 5);

// => output: [ 3, 4, 5 ]

Phép gán hủy cấu trúc

Biểu thức giúp dễ dàng trích xuất các giá trị từ mảng hoặc thuộc tính từ các đối tượng, thành các biến riêng biệt bằng cách cung cấp một cú pháp ngắn gọn.

let colors = ["Xanh", "Đỏ"];
let [a, b] = colors;

Tham khảo: https://www.javascripttutorial.net/es6/

10/05/2021

Công nghệ web và dịch vụ trực tuyến | Tài liệu, chuyên ngành


Công nghệ web và dịch vụ trực tuyến và một môn chuyên ngành, nằm trong module 4, module phát triển ứng dụng nghiệp vụ. Trong môn này các bạn sẽ được học tất cả những thứ có thể làm ra 1 trang web từ các ngôn ngữ phát triển phía máy khách như HTML, CSS, JS, các ngôn ngữ phát triển phía máy chủ PHP, Java, Nodejs, học về XML, DTD, học về các mô hình lập trình như MVC. Và dĩ nhiên rồi, vì kiến thức là rất nhiều mà khoảng thời gian học chỉ có 1 kì học nên có những thứ sẽ học kĩ, nhưng có những thứ chỉ mang tính chất giới thiệu là chính.

Ngôn ngữ backend chính được dạy trong môn học là PHP, vì thế nếu các bạn sử dụng các ngôn ngữ khác thì phải tự mày mò tìm hiểu là chủ yếu.

Nhìn chung thì mình thấy lý thuyết của môn này học cũng không cuốn hút, đa phần là lượng kiến thức mà các bạn đã biết chỉ có 1 số ít là các kiến thức mới thì lại học rất ít. Tuy nhiên thì bài tập lớn môn này rất là mở và sẽ thỏa mãn được đam mê của các bạn, thường và hầu hết các thầy/ cô dạy môn này sẽ cho mọi người xây dựng 1 trang web bất kì nào, nếu các bạn học Đào Thành Chung thì thầy sẽ không cho sử dụng framework trong bài tập lớn vì thế nếu bạn nào học thầy Chung thì xem xét nha, tuy nhiên thầy cho điểm rất thoải mái, nhóm có điểm bài tập lớn đứng đầu còn được miễn thi.

Ngoài ra môn này sẽ có bài tập hàng tuần về kiến thức đã học trong tuần đó, các thức kiểm tra bài tập tuần của mỗi thầy/cô là khác nhau nhưng nói chung là các bạn phải làm bài tập tuần nha. 

Tóm lại mình nhìn nhận về môn này là rất dễ kiếm điểm, các bạn có thể không cần học nhiều đâu, chỉ cần dựa vào kiến thức mà các bạn đã có về web từ trước tới giờ cộng với ôn tập 1 tí thôi là A+ rồi.

Tài liệu

  • Slide công nghệ web và dịch vụ trực tuyến mới từ viện: LINK 1 | LINK 2
    (Đường link 1 là slide mới hơn mà mình nhận được, nhưng link 2 lại có thêm 1 số slide về servlet và 1 số thứ khác mà các bạn có thể tham khảo thêm)

  • Slide công nghệ wb và dịch vụ trực tuyến - thầy Đào Thành Chung: TẢI VỀ SLIDE

Bài tập lớn

Bài tập lớn như mình đã nói bên trên là đề tài tự do và các bạn hoàn toàn có thể chọn làm bất cứ cái gì mà các bạn thích. Sau khi làm xong các bạn có thể đẩy web lên các host, việc đẩy web lên host và demo trực tiếp để mọi người cùng vào thử nghiệm sẽ được các thầy/cô đánh giá cao và ưu ái hơn trong việc cho điểm, dĩ nhiên là hơn hết các bạn phải tập chung vào sản phẩm của mình, còn thời gian hãy nghĩ tới việc này. Có nhiều thầy/cô không hẳn là thích giao diện đẹp đâu, vì các thầy/cô đều nghĩ đẹp hầu như là các bạn đi cop, vì thế hãy cố gắng tập chung vào logic và phần backend nha, giao diện có thể phèn phèn 1 tí nhưng website có nhiều chức năng sẽ là 1 điểm mạnh. Dĩ nhiên là phần giao diện cũng phải đáp ứng được các yêu cầu của thầy giáo đưa ra như responsive,...

Mình sẽ có 1 bài hướng dẫn đẩy 1 website viết bằng PHP lên host, các bạn theo dõi nha.

Cuối cùng là bạn có thể tham khảo 1 project của mình tại đây nha: https://github.com/trannguyenhan/selling-computer (mặc dù giao diện không đẹp bằng các nhóm khác tuy nhiên project may mắn có điểm cao nhất)

7/22/2021

Công cụ mô phỏng mạng OMNeT++ | Góc lên LAB học gì?


CNTT là một ngành nghề có tính ứng dụng rất cao vì thế viện CNTT&TT có rất nhiều các LAB nghiên cứu thuộc nhiều các lĩnh vực khác nhau như: LAB công nghệ phần mềm, LAB hệ thống thông tin, LAB khoa học máy tính, BKC LAB, ... Và các thầy/ cô trong LAB luôn luôn mở rộng cửa để chào đón các bạn sinh viên cùng tham gia. 

Bài viết này là bài viết đầu tiên tại series Góc lên LAB học gì? nên mình sẽ nói cụ thể và chi tiết hơn về những vấn đề ban đầu để mọi người hiểu được rõ hơn những vấn đề khi tham gia các LAB nghiên cứu khoa học của viện nha.

Đầu tiên là việc khi tham gia các LAB nghiên cứu thì mang lại những lợi ích gì? Lợi ích thì là vô cùng nhiều, khi tham gia các LAB cùng các thầy/ cô và các anh/ chị trên LAB các bạn được tiếp cận với các anh/ chị, các bạn, các thầy/ cô phải nói là rất giỏi và rất tâm huyết. Được học những kiến thức chuyên sâu về một lĩnh vực, được traing theo lộ trình, được tham gia vào các dự án nghiên cứu trong LAB, được có tên trong các bài báo khoa học,...

Tuy nhiên khi tham gia LAB các bạn sẽ mất thời gian để dành cho các công việc trên LAB, mất thêm thời gian để học các kiến thức trên LAB mà có thể trên lớp không học tới.

Làm thế nào để được lên LAB? Dĩ nhiên là không phải ai muốn lên LAB là sẽ được lên đâu. Có những LAB thì xét duyệt khá dễ nhưng cũng cần có 1 bảng điểm đẹp như LAB khoa học máy tính của cô Bình các bạn chỉ cần gửi mail cho cô kèm theo bảng điểm, nếu cô đọc qua thấy điểm cao, OK thì cô sẽ nhắn lại cho các bạn là hôm sau có thể lên LAB. Còn có 1 số LAB tuyển thành viên rất khắt khe như LAB của thầy Khoát phải trải qua bao vòng với lên được thành viên chính thức.

Các phòng LAB hay các không gian học tập và làm việc tại tòa B1 của viện đang được chỉnh sửa và hiện đại hơn rất nhiều, nhìn đã là thấy thích rồi, các bạn có thể theo dõi thầy Tạ Hải Tùng (Viện trưởng) thầy có đăng lên rất nhiều hình ảnh về các không gian học tập, làm việc mới trên LAB, nhìn là muốn được ngồi đây mãi rồi.





Ngoài việc lên LAB để có thể học hỏi thêm các kiến thức thì các bạn có thể chọn đi thực tập. Mình đã từng thấy một số người rất giỏi nhưng họ lại không chọn lên LAB mà lại chọn đi thực tập. Khi bạn đi thực tập thì bạn vẫn có đầy đủ lợi ích khi bạn tham gia LAB chỉ khác là kiến thức mà bạn học được tại các doanh nghiệp sẽ thực tế hơn là các công nghệ mà chính các doanh nghiệp đang sử dụng để kiếm ra tiền, còn kiến thức mà các bạn được học trên LAB sẽ hàn lâm hơn, mang tính nghiên cứu nhiều hơn.

OK! Lan man như vậy thôi, bây giờ mình sẽ vào chủ đề chính của bài viết này về OMNeT++.

OMNeT++ là một phần mềm mô phỏng mạng sử dụng C++, mục đích chính là mô phỏng hoạt động của mạng thông tin, ngoài ra do tính linh hoạt OMNeT++ còn được sử dụng trong một số lĩnh vực khác nữa.

Tại Bách Khoa thì không có môn học chính thức nào giảng dạy về OMNeT++ và thế dĩ nhiên nếu không thích các bạn có thể không đọc bài viết này. Nhưng các bạn cũng có thể tìm hiểu về OMNeT, biết đâu nó lại là hướng đi phù hợp với bạn.

OMNeT được các thầy/ cô trong LAB công nghệ phần mềm sử dụng để mô phỏng giao thức mạng, có rất nhiều các nghiên cứu của các thầy/ cô có sử dụng OMNeT các bạn có thể xem qua TẠI ĐÂY. 

LAB công nghệ phần mềm của thầy Nguyễn Khanh Văn mình thấy không tuyển sinh viên, hầu như là các sinh viên làm project I, II, III của các thầy trong LAB, sau đó sẽ được các thầy định hướng thêm để tham gia các nghiên cứu với các thầy/ cô thôi, vì thế mà LAB này mình thấy khá trầm và không nổi bật cho lắm.

Mình có một số tài liệu về OMNeT, nếu muốn tìm hiểu về OMNeT các bạn có thể xem qua tài liệu này: TÀI LIỆU VỀ OMNET++

Những bài viết sau mình sẽ viết về một số LAB khác hoạt động sôi nổi hơn trong viện như là LAB của thầy Khoát hay LAB cô Bình nha.