Tạo bởi - Hi Admin
Ngày nay, có rất nhiều ngôn ngữ lập trình mà chúng ta có thể theo đuổi. Trong bài viết này HocLapTrinh.me sẽ nói về lộ trình học Java – một trong số những ngôn ngữ lập trình phổ biến nhất hiện nay . Sự phổ biến của Java có thể là do tính linh hoạt của nó vì nó có thể được sử dụng để thiết kế các ứng dụng tùy chỉnh nhẹ, nhanh và phục vụ cho nhiều mục đích khác nhau.Tại thời điểm viết bài viết này, theo Tiobe Index, Java đang là ngôn ngữ lập trình phổ biến thứ 2, đứng sau ngôn ngữ lập trình C. Giảm 1 bậc so với cùng thời điểm tháng 3/2020. Trên thực tế, Java là ngôn ngữ được sử dụng ở hầu hết mọi công ty, cho dù họ là công ty nhỏ hay công ty công nghệ khổng lồ như Google, Amazon, v.v. Vì vậy, trở thành một Java Developer có thể là một định hướng rất tốt cho tương lai của bạn! Và đó là lý do tại sao hôm nay HocLapTrinh.me sẽ chia sẻ những yêu cầu cơ bản để trở thành một Java Developer:1. Nắm vững Core Java SEĐầu tiên, hãy bắt đầu với Core Java ( Java SE ) và thành thạo nó càng nhiều càng tốt. Bạn nên biết và hiểu các khái niệm cơ bản như vòng lặp, mảng, toán tử và nhiều khái niệm khác. Ngoài ra, Java SE có một loạt các API thông dụng như java.lang, java.io, java.math, v.v. và ít đương nhiên bạn cần phải có kiến thức cơ bản về chúng. Quan trọng hơn nữa bạn cũng nên bắt đầu học các khái niệm của OOP (Object Oriented Programmin – lập trình hướng đối tượng) vì chúng đã được biết đến nhiều trong Java và nó cũng là một kỹ thuật lập trình phổ biến nhất hiện nay.2. Tiếp tục thực hành JavaBất cứ điều gì bạn đã học trong Core Java, chỉ cần tiếp tục thực hành nó để bạn có thể viết cú pháp mà không gặp bất kỳ lỗi cơ bản nào. Ngoài ra, hãy thử đưa ra những giải pháp khác nhau cho cùng một vấn để cải thiện tư duy lập trình của bạn. Vì vậy, hãy tiếp tục coding thực hành càng nhiều càng tốt và cũng cố gắng thực hiện các dự án nhỏ về bất kỳ chủ đề nào bạn học được.3. Học Java EESau khi đã có kiến thức về Core Java bạn có thể bắt đầu chuyển sang học Java EE (Enterprise Edition), còn được gọi là Advanced Java. Khi bạn bắt đầu học Java EE, bạn có thể làm quen với việc phát triển web vì Java EE có các tính năng bổ sung như web services bao gồm các công nghệ như Servlet, WebSocket, Java Server Faces, v.v.4. Thực hiện dự án với Servlet và JSPTừ những điều bạn đã học được trong Java EE, chỉ cần kết hợp nó với các công nghệ Front End như HTML, CSS, Javascript là bạn đã có thể tạo các dự án web cho riêng mình. Ngoài ra, điều quan trọng là bạn phải thực hiện hai dự án, một với Servlet và hai là với JSP . Điều này là do nếu không thực hiện các dự án trên 2 nền tảng này, bạn sẽ không thực sự hiểu về ngôn ngữ lập trình này.5. Tìm hiểu Hibernate và Spring FrameworksKhi bạn hoàn thành cả Java SE và Java EE thì bạn có thể chuyển sang học Java Framework bao gồm Hibernate Framework và Spring Framework . Đây là những framework phổ biến nhất của Java hiện nay. Trên thực tế, hầu hết các Công ty phát triển Java ngày nay đều sử dụng các frameworks Spring như Spring Boot, Spring MVC và Spring Cloud để phát triển ứng dụng web. Hibernate framework cũng rất phổ biến để ánh xạ mô hình hướng đối tượng sang cơ sở dữ liệu quan hệ và cũng là Hibernate Query Language. Vì vậy, nếu bạn biết những frameworks này thì bạn có thể trở thành phát triển Java trong bất kỳ công ty nào.Xem thêm khóa học Java miễn phí: Khóa học lập trình Java cơ bản
Xem chi tiếtPublished - Thứ Ba, 22 Feb 2022
Tạo bởi - Hi Admin
Trong bài viết này VNFS sẽ chia sẻ với các bạn một số khóa học Flutter miễn phí mà chúng ta có thể tham khảo.Dart Programming Tutorial – Full CourseTrước tiên, nếu muốn bắt đầu với Flutter bạn phải biết đến ngôn ngữ Dart. Flutter sử dụng Dart cho việc phát triển app của mình.Flutter Course – Full Tutorial for Beginners (Build iOS and Android Apps)Một khóa học ở freeCodeCamp về Flutter cho người mới bắt đầu. Đây cũng là một trong những khóa học mà tôi được giới thiệu khi bắt đầu đến với Flutter. Nó rất hiệu quả và chắc chắn sẽ rất hữu ích cho bạnLearn Flutter, Google’s groundbreaking multi-platform mobile development framework, to create apps for Android and iOS.Trong khóa học này, Nick Manning đến từ Flutter Crash Course dạy bạn cách để đến với Flutter một cách nhanh nhất và hiệu quả nhất, Nick đã là một kỹ sư Flutter từ những năm 2017 và anh ấy hiểu rất sâu về nó. Khóa học sẽ giúp bạn hiểu sâu về thực thế, hiểu rõ vấn đề một cách trực quan nhất, từng bước và từng bước.Flutter Crash CourseTrong khóa học này chúng ta sẽ được tìm hiểu cách để xây dựng một native mobile app. Định nghĩa Flutter là gì, cách để cài đặt, tạo widgets, stateless and stateful…Flutter Tutorial for BeginnersBạn sẽ khám phá ra cách để sử dụng Flutter để tạo app android và ios. Học được tất cả mọi thứ về widgets, packages, assets & asynchronous code để tạo app “Giờ thế giới”.Flutter & Firebase App BuildLại một playlist nữa về Flutter và Firebase được tạo bởi The Net Ninja. Khi tôi muốn sử dụng firebase cho ứng dụng đầu tiên của mình thì nó chính là sự lựa chọn hợp lý. Khóa học rất đầy đủ và đã giúp tôi hiểu thế nào để tích hợp Firebase vào Flutter.Trong khóa học này bạn sẽ hiểu được cách sử dụng Firebase Firestore (Real- time database) và firebase Authentication. Playlist này dành cho những người đã có một chút kiến thức với FlutterReso CoderMột kênh Youtube chuyên dụng dành riêng cho Flutter. Reso Coder đã tạo ra rất nhiều tutorials để giải thích cách hoạt động của Flutter. Một số tool mà bạn có thể sử dụng cùng Flutter rất rõ ràng đơn giản và tất nhiên bạn có thể tích hợp nó vào dự án của mình.Flutter đang làm thay đổi diện mạo của việc phát triển ứng dụng. Đừng để bị bỏ lại phía sau. Hãy học cách để phát triển những ứng dụng cross-platform dành cho di động và web.FilledStacksMột kênh Youtube chuyên về Flutter. Bạn sẽ khám phá ra tất nhiều tut về Flutter như là Firebase, UI, cấu trúc hoạt động. Và tất nhiên nó có cả những tut về web và mobile. Học cách để xây dựng một sản phẩm chất lượng từ Flutter.Code With AndreaKhóa học về Flutter. Các video bao gồm tất cả những thứ về Flutter bao gồm về cách quản lý các sate, giao diện, kiểm thử và nhiều những thứ khác. Kênh này sẽ giúp bạn trở thành một lập trình viên Flutter giỏi hơn.Xem thêm: Triển khai BLoC trong Flutter
Xem chi tiếtPublished - Wed, 23 Feb 2022
Tạo bởi - Hi Admin
Flutter là nền tảng phát triển ứng dụng đa nền tảng cho iOS và Android do Google phát triển. Flutter sử dụng ngôn ngữ DART cũng do Google phát triển và flutter cũng đã được sử dụng để tạo ra các ứng dụng native cho Google.Bên dưới là lộ trình học flutter cho các bạn tham khảo. Có thể xem thêm video về học flutter của VNFS tại đây: Triển khai BLoC trong FlutterProgramming LanguageDartIDE for developmentVsCodeAndroid StudiointellijUser InterfaceWidgetsstatefull widgetstateless widgetaccessibilityInherited widgetThemingLocalizationStyleMaterialCupertionAssetsfontsimagessvgaudiovideoStatic User InterfaceViewText,Image,button raised button etcViewGroupContainer, Row, Column, Stack, Expanded, ConstrainedBoxDynamic User InterfaceListViewGridViewExpansionTitleAnimationAnimatedWidgetAnimatedBuilderAnimationControllerCurvedAnimationHeroTransformOpacitySotrageshared preferencefile storagesqlite3rd party libararieshttpdioget_itcached_network_imageFlutter_webview_plug-infont_awesome_flutterSQFLiterxdartbloc_patternBehavior ComponentsPermissionLocal NotificationPush NotificationDownload ManagerMedia PlaybackPreferenceSharingState managementsetStateProviderReduxBLoCMobXQuality AssuranceFirebaseCrashlyticsApp distributionAnalyticsGoogle play beta testsTestFlightApp CenterVersion ControlGitGithubBitbucketGitlabFirebaseFirebase AuthFirebase databaseFirebase StorageFirebase MessagingNative IntegrationAndroidAndroid StudioJavaKotlinApp SigingGoogle Play StoreIn App PurchaseiosXcodeSwiftObjective-CApple CertificationAppStoreKeep Learning and try to improve your code.Xem thêm:Một số khóa học Flutter miễn phí nên họcĐăng ký Youtube VNFS:VNFS Youtube
Xem chi tiếtPublished - Wed, 23 Feb 2022
Tạo bởi - Hi Admin
1. Giới Thiệu về GetX trong FlutterTrong series bài viết này chúng ta sẽ tìm hiểu về GetX trong Flutter. Hiện nay có rất nhiều thư viện State Management như MobX, BLoC, Redux, Provider, v.v. GetX cũng là một micro framework mạnh mẽ cho Flutter. Nó kết hợp State Management, dependency injection và route management một cách nhanh chóng và thiết thực.Những ưu điểm của Get – State managerLink fanpage học Flutter để cập nhật thông tin mới nhất: facebook.com/VNFSChỉ update những widget cần thiết.Sử dụng ít bộ nhớ hơn so với các kiểu quản lý state khác.Chỉ cần sử dụng một component duy nhất là GetWidget thay vì lựa chọn StatefulWidget hay StateLessWidgetViệc tổ chức cấu trúc project sẽ cực kỳ clear, phần code logic được tách hẳn hoàn toàn so với UI.Tối ưu hoá bộ nhớ, Get sẽ tự động thu dọn những component không cần thiết.2. Nguyên lý hoạt độngVề nguyên lý hoạt động của Get. Những bạn nào đã quen làm việc với Rx chắc sẽ hiểu được nguyên lý hoạt động của nó một cách dễ dàng. Về cơ bản Get hoạt động cũng giống như Rx, cũng có các Observable và các component để lắng nghe thay đổi của Observable.3. Cài đặtThêm vào file pubspec.yaml:dependencies: get:Import vào những file cần sử dụng:import 'package:get/get.dart';
Xem chi tiếtPublished - Wed, 23 Feb 2022
Tạo bởi - Hi Admin
1. Tạo Controller kế thừa từ GetxControllerTạo một file mới đặt tên controller.dart sau đó thêm mã vào file vừa tạo như sau: class Controller extends GetxController{ var count = 0.obs; @override void onInit() { super.onInit(); } increment() => count++; @override void onClose() { super.onClose(); } }2. Khởi tạo Controller trong StatelessWidgetCó một lưu ý khi chúng ta sử dụng GetX các bạn sẽ không cần quan tâm đến StatelessWidget hay StateFulWIdget nữa. Cách để chúng ta khởi tạo Controller trong StatelessWidget như sau:final Controller controller = Get.put(Controller());3. Gắn Obx vào widget cần thay đổiVà trong giao diện người dùng, khi bạn muốn hiển thị giá trị đó và cập nhật màn hình bất cứ khi nào giá trị thay đổi, chỉ cần thực hiện điều này:Obx(() => Text("${controller.count)}"));File giao diện đầy đủ sẽ như sau:class Home extends StatelessWidget { final Controller controller = Get.put(Controller()); @override Widget build(context) { return Scaffold( body: Center( child: Obx(() => Text("Clicks: ${controller.count}")) ), floatingActionButton: FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment)); } }
Xem chi tiếtPublished - Wed, 23 Feb 2022
Tạo bởi - Hi Admin
1. Định tuyến không sử dụng tên routeĐịnh tuyến dễ dàng hơn với GetX. Chúng ta cần thay MaterialApp thành GetMaterialApp ở main.dartGetMaterialApp( // Before: MaterialApp( home: MyHome(), )Để chuyển đến một trang mới chúng ta sử dụng phương thức sau:Get.to(NextScreen());Đóng snackbars, dialogs, bottomsheets, hay bất cứ thứ gì có thể đóng bằng Navigator.pop(context) thì trong GetX chúng ta sử dụng cú pháp:Get.back();Điều hướng đến trang mới và không cho quay về trang hiện tại (Thường được sử dụng cho SplashScreen, Login,..):Get.off(NextScreen());Đến trang mới và xóa hết các trang cũ:Get.offAll(NextScreen());Đến trang mới và nhận dữ liệu trả về từ trang đó ngay khi back về trang hiện tại:var data = await Get.to(Payment());Trả dữ liệu về trang trước theo cú pháp:Get.back(result: 'success');2. Định tuyến sử dụng tên routeĐối với chuyển trang bằng tên thì cũng tương tự các hàm trên nhưng có thêm hậu tố Named như: toNamed, offNamed, offAllNamed, …void main() { runApp( GetMaterialApp( unknownRoute: GetPage(name: '/notfound', page: () => UnknownRoutePage()), initialRoute: '/', getPages: [ GetPage(name: '/', page: () => MyHomePage()), GetPage(name: '/second', page: () => Second()), ], ) ); }3. Truyền dữ liệu cho trang mới3.1 Truyền dữ liệu với arguments:Get.toNamed("/NextScreen", arguments: 'Get is the best');print(Get.arguments); //print out: Get is the best3.2 Dynamic urls linksDynamic urls khá quen thuộc đối với Web Developer. GetX hỗ trợ nó cho Flutter. Ta có thể sử dụng theo syntax thuộc tính:Get.offAllNamed("/NextScreen?device=phone&id=354&name=Enzo");print(Get.parameters['id']); // out: 354 print(Get.parameters['name']); // out: EnzoHoặc có thể sử dụng theo cấu trúc định sẵn như ví dụ bên dưới:GetPage( name: '/profile/:user', page: () => UserProfile(), ),Gửi dữ liệu với route được định nghĩa ở trên.Get.toNamed("/profile/34954");Nhận dữ liệu tương tự như ở trên.print(Get.parameters['user']); // out: 3495
Xem chi tiếtPublished - Wed, 23 Feb 2022
Tạo bởi - Hi Admin
Khóa học này được VNFS cung cấp nhằm mục đích là hướng dẫn các bạn viết một RESTful API. Chúng ta sẽ xây dựng một ứng dụng Todo List đơn giản. Chúng ta sẽ xây dựng các API để tạo, liệt kê, chỉnh sửa và xóa todo list. Khóa học giúp các bạn hiểu rõ hơn về RESTful API, CRUD cũng như ôn lại các kiến thức về NodeJS, Express và MongoDB.Danh sách bài học[NodeJS API] – Bài 1: Thiết lập cấu trúc cho project[NodeJS API] – Bài 2: Tạo API thêm mới dữ liệu[NodeJS API] – Bài 3: Tạo API lấy danh sách dữ liệu[NodeJS API] – Bài 4: Tạo API lấy Todo theo ID[NodeJS API] – Bài 5: Tạo API update dữ liệu[NodeJS API] – Bài 6: Tạo API delete dữ liệu – kết thúcLink youtube của khóa học viết API bằng NodeJS, Express và MongoDB: https://vnfullstack.com/khoa-hoc-api-nodejsMã nguồn của khóa học: https://github.com/nv-thang/node_api_course
Xem chi tiếtPublished - Wed, 23 Feb 2022
Tạo bởi - Hi Admin
Tổng quan: Điều khiển đèn LED bằng Firebase và ESP8266Sử dụng các phần cứng IoT và nền tảng đám mây , chúng ta có thể kiểm soát các thiết bị IoT từ bất kỳ nơi nào có kết nối internet. Dự án dựa trên IoT mini này đề cập đến việc điều khiển đèn LED bằng Firebase và module NodeMCU ESP8266 . Có nhiều phương pháp kiểm soát trạng thái đèn LED như sử dụng Máy chủ web, Ứng dụng Blynk hay các dịch vụ API. Nhưng trong phạm vi bài viết này VNFS sẽ chỉ tập trung vào Google Firebase. Trong bài viết này VNFS sẽ hướng dẫn các bạn cách điều khiển đèn LED bằng Firebase và ESP8266.Đầu tiên chúng ta cần biết Firebase là gì? Firebase là một dịch vụ cơ sở dữ liệu thời gian thực được cung cấp bởi Google và hoạt động trên nền tảng đám mây. Kèm theo đó là hệ thống máy chủ cực kỳ mạnh mẽ của Google. Nó giúp các lập trình phát triển nhanh các ứng dụng di động bằng cách đơn giản hóa các thao tác với cơ sở dữ liệu.Yêu cầu phần cứngSau đây là các thành phần cần thiết để thực hiện dự án này. Tất cả các thành phần có thể dễ dàng mua từ Shopee. Liên kết mua linh kiện được đưa ra bên dưới:NodeMCU ESP8266 => Link mua shopeeĐèn LED 5mm màu bất kỳ => Link mua shopeeBreadboard => Link mua shopeeĐiện trở 220 ohm => Link mua shopeeSơ đồ kết nối đèn LED bằng Firebase và ESP8266Đây là sơ đồ mạch kết nối LED và Board NodeMCU ESP8266 . Kết nối cực dương của LED với GPIO5 , tức là D1 của NodeMCU ESP8266 thông qua điện trở 220ohm như trong hình bên dưới:Cài đặt Thư viện Firebase và JSONĐể cài đăt 2 thư viện này các bạn có thể download tại link dưới đây:Thư viện firebase: https://github.com/FirebaseExtended/firebase-arduino/blob/master/src/Firebase.hThư viện Arduino Json 5.x https://github.com/bblanchon/ArduinoJsonSau khi download xong, trên Arduino IDE các bạn chọn Sketch > Include library > Add .zip > Select zip file để cài đặt 2 thư viện mà chúng ta đã tải xuống.Thiết lập CSDL FirebaseTạo một dự án firebase mới từ bảng điều khiển(console) và đi đến phần cơ sở dữ liệu. Chọn cơ sở dữ liệu thời gian thực của firebase (real-time database).Trên firebase các bạn copy “database secret”để xác thực từ Settings Panel > Service accounts.Thêm một nút(node) vào cơ sở dữ liệu firebase. Giá trị này sẽ quyết định bật hay tắt đèn LED.Code trên Arduino IDBây giờ tất cả các thiết lập đã xong, chúng ta sẽ chuyển qua bước lập trình cho ESP8266. #include // esp8266 library #include // firebase library #define FIREBASE_HOST "your-project.firebaseio.com" //Địa chỉ của project trên firebase #define FIREBASE_AUTH "06dEpqanFg*qAwnQLwLI" // secret key lấy từ firebase #define WIFI_SSID "xxxxxxxxxxxxx" //tên wifi #define WIFI_PASSWORD "xxxxxxxxxxxxxx" //password wifi String fireStatus = ""; //Khai báo biến lưu trạng thái của đèn int led = D1; //Chân kết nối của đèn với NodeMCU void setup() { Serial.begin(9600); delay(1000); pinMode(LED_BUILTIN, OUTPUT); pinMode(led, OUTPUT); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); //kết nối với wifi Serial.print("Connecting to "); Serial.print(WIFI_SSID); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(); Serial.print("Connected to "); Serial.println(WIFI_SSID); Serial.print("IP Address is : "); Serial.println(WiFi.localIP()); //In ra địa chỉ IP Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); // Kết nối tới firebase Firebase.setString("LED_STATUS", "OFF"); //Khởi tạo trạng thái của đèn trên Firebase } void loop() { fireStatus = Firebase.getString("LED_STATUS"); // Lấy trạng thái của đèn trên firebase if (fireStatus == "ON") { // Kiểm tra nếu trạng thái đèn là ON Serial.println("Led Turned ON"); digitalWrite(LED_BUILTIN, LOW); // make bultin led ON digitalWrite(led, HIGH); // make external led ON } else if (fireStatus == "OFF") { // Kiểm tra nếu trạng thái đèn là OFF Serial.println("Led Turned OFF"); digitalWrite(LED_BUILTIN, HIGH); // make bultin led OFF digitalWrite(led, LOW); // make external led OFF } else { Serial.println("Wrong Credential! Please send ON/OFF"); } }Trong phần code này mình đã note rất chi tiết các bạn có thắc mắc vui lòng để lại bình luận để được giải đáp.
Xem chi tiếtPublished - Thu, 24 Feb 2022
Tạo bởi - Hi Admin
Lớp Scanner trong gói java.util được sử dụng để nhận được input của các kiểu dữ liệu nguyên thủy như int, double, String v.v.. Đây là cách dễ nhất để đọc đầu vào trong chương trình Java, mặc dù đây không phải là phương pháp hiệu quả nhất. Lớp Scanner bao gồm các phương thức next() và nextLine().Trong bài viết này, sẽ thảo luận về sự khác biệt giữa hai phương thức next() và nextLine().Phương thức next()Phương thức này nằm trong lớp Scanner và được sử dụng để có được những thông tin từ người sử dụng. Để sử dụng phương thức này, bạn cần tạo một đối tượng từ lớp Scanner. Phương thức này chỉ có thể đọc đầu vào cho đến khi gặp phải dấu cách (” “). Nó không thể đọc hai từ cách nhau bởi một khoảng trắng.Sau đây là một ví dụ về cách phương thức next() được triển khai trong Java:import java.util.Scanner;class Test { public static void main(String[] args) { // Creating the Scanner object Scanner sc = new Scanner(System.in); // Use of the next() method String Inpt = sc.next(); System.out.println(Inpt); }}Input: Hoc JavaOutput: HocPhương thức nextLine()Cũng giống như phương thức next(), phương thức này nằm trong lớp Scanner và được sử dụng để nhận những thông tin từ người sử dụng. Để sử dụng phương thức này, ta cũng cần khởi tạo một đối tượng từ lớp Scanner. Phương thức này có thể đọc dữ liệu đầu vào cho đến cuối dòng. Nói cách khác, nó có thể nhận dữ liệu đầu vào bao gồm cả những khoảng trắng giữa các từ cho đến cuối dòng(\n) hoặc nhấn phím Enter.Sau đây là một ví dụ về cách phương thức nextLine():import java.util.Scanner;class Test { public static void main(String[] args) { // Creating the object of the // Scanner class Scanner sc = new Scanner(System.in); // Use of nextLine() method String Inpt = sc.nextLine(); System.out.println(Inpt); }} Input: Hoc JavaOutput: Hoc JavaDưới đây là bảng so sánhnext()nextLine()Đọc đầu vào cho đến ký tự khoảng trắng.Đọc đầu vào cho đến khi dòng thay đổi.Không thể đọc những từ có khoảng trắng trong đó.Có thể đọc những từ có khoảng trắng trong đó.Kết thúc việc đọc đầu vào sau khi nhận được khoảng trắng.Kết thúc việc đọc đầu vào sau khi nhận được ‘\ n’ hoặc nhấn Enter.Đặt con trỏ vào cùng một dòng sau khi đọc đầu vào.Đặt con trỏ vào dòng tiếp theo sau khi đọc đầu vào.Chuỗi thoát của next() là khoảng trắng.Chuỗi thoát của nextLine () là ‘\n’.Cú pháp là: Scanner.next ()Cú pháp là: Scanner.nextLine ()
Xem chi tiếtPublished - Thứ Ba, 01 Mar 2022
Wed, 27 Jul 2022
Mon, 27 Tháng sáu 2022
Thứ Ba, 01 Mar 2022
Viết đánh giá công khai