Gọi vốn thông qua tiền thuật toán (ICO)

ICO là quá trình gọi vốn bằng tiền thuật toán (hay còn gọi là tiền ảo, cryptocurrency). Khác với hình thức gọi vốn truyền thống, gọi vốn qua tiền ảo sẽ giúp các công ty tiếp cận nhanh đến các nhà đầu tư (đặc biệt là các nhà đầu tư sở hữu tiền thuật toán) với quy mô toàn cầu.

Với hình thức gọi vốn này, các nhà đầu tư cần phát hành Token trên các nền tảng Blockchain (phổ biến nhất là Ethereum, trong nội dung bài viết này mình chỉ đề cập đến việc phát hành Token trên nền tảng Ethereum). Hiện nay, việc phát hành Token trên Ethereum đã được chuẩn hoá theo tiêu chuẩn ERC20 (https://github.com/ethereum/eips/issues/20). Dữ liệu về Token được lưu trong Smart Contract. Vì vậy, các công ty phát hành Token thường thuê các Developer (hoặc các bên thứ 3) viết các Smart Contract này.

Để có thể xây dựng một Smart Contract cho việc gọi vốn, các bạn có thể tham khảo tài liệu mình đã chuẩn bị tại link: https://erc20token.sonnguyen.ws/. Tài liệu này là tại liệu mở, hiện tại chỉ mới có bản tiếng Anh. Đối tượng sử dụng của tài liệu là các Developer đã có những hiểu biết cơ bản về Blockchain và thành thạo một ngôn ngữ lập trình (đặc biết NodeJS). Toàn bộ nội dung của tài liệu và mã nguồn sử dụng trong tài liệu mình đã đưa lên Github (https://github.com/thanhson1085/DemoCoin). Rất mong nhận được sự đóng góp thêm từ phía cộng đồng.

Bên cạnh việc chuẩn bị Smart Contract, các công ty phát hành Token cũng cần phải có các bài báo kỹ thuật (White Paper), trong đó có trình bày đến việc Token sẽ được tích hợp như thế nào trong các sản phẩm của công ty. Hiện nay, một số nước không chấp nhận hình thức gọi vốn này. Vì vậy, các công ty cần nghiên cứu kỹ vấn đề luật pháp để tránh những điều không có thể xảy ra.

Việc gọi vốn thông qua tiền kỹ thuật số thực chất là việc bán Token. Token đó có bán được hay không phụ thuộc vào khả năng thuyết phục nhà đầu tư của bạn.

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

Các giải pháp đưa Cryptocurrency vào hệ thống

Sau khi ICO thành công, các công ty đều phải tính đến chuyện đưa Token vào sử dụng trong hệ thống của mình. Thường thì các công ty sẽ đặt ra các yêu cầu như sau:

  • Không tính phí cho các giao dịch
  • Các giao dịch phải được thực hiện tức thì (hàng nghìn – triệu giao dịch/giây)
  • Đáp ứng được khối lương dao dịch lớn và dễ dàng mở rộng
  • Bảo mật cao, an toàn

Ngoài ra, trong xu thế xây dựng hệ thống phân tán hiện nay, các công ty còn muốn các giao dịch phải thực hiện trên các Blockchain (thậm chí là public Blockchain) để đảm bảo tính minh bạch, phân tán và các giao dịch không thể bị sửa hoặc xoá được.

Những yêu cầu trên đều hoàn toàn hợp lý. Tuy nhiên, để đáp ứng được tất cả các yêu cầu đó, chúng ta gặp khá nhiều thử thách về vấn đề công nghệ.

Để giải quyết vấn đề, chúng ta sẽ cùng phân tích 3 giải pháp sau:

Sử dụng hệ thống giao dịch truyền thống

Hệ thống giao dịch truyền thống có nghĩa là các giao dịch được thực hiện trên một hệ thống tập trung. Các giao dịch được xử lý, lưu trữ thông qua các hệ thống Message Queue/Database quen thuộc như RabbitMQ, Redis/MySQL, MongoDB. Ưu điểm của nó thời gian xây dựng nhanh, nhân lực dồi dào. Tuy nhiên, Hệ thống sẽ không đáp ứng đủ kỳ vọng khi không sử dụng công nghệ Blockchain.

Xây dựng Private Blockchain

Giải pháp này sử dụng Blockchain, vì vậy việc chỉnh sửa hay xóa dữ liệu sẽ khó khăn hơn. Tuy nhiên, đó là Private Blockchain. Private Blockchain chỉ thuộc một các nhân hay tổ chức, nên không thể đảm bảo hoàn toàn kỳ vọng về tính minh bạch và an toàn dữ liệu. Giải pháp này có ưu điểm là đã sử dụng công nghệ Blockchain, nhưng lại có nhược điểm về độ phức tạp của hệ thống, và tìm kiếm nhân lực để xây dựng.

Xây dựng Public Blockchain

Với giải pháp này, công ty sẽ xây dựng một Public Blockchain, sau đó công bố rộng rãi với cộng đồng. Hệ thống này đáp ứng đầy đủ các yêu cầu, tuy nhiên lại có độ khó cao hơn hẳn hai giải pháp trên. Hiện nay, các công ty công nghệ cũng đang trong quá trình xây dựng các Blockchain, cung cấp mã nguồn mở phục vụ cho mục đích này, tuy nhiên chưa có mã nguồn đều mới, cần có thời gian nghiên cứu và thử nghiệm thêm.

Với những công ty khởi nghiệp, làm ứng dụng phục vụ người dùng cuối (Consumer Apps), thì việc đưa Token vào hệ thống và tích hợp với các Blockchain lớn như Ethereum, Bitcoin đã là một thử thách không hề nhỏ. Vì vậy, với họ thì chọn giải pháp đầu tiên là một lựa chọn khôn ngoan. Ngược lại, với những công ty dồi dào nhân lực hơn, họ có thể đầu tư nghiên cứu, thử nghiệm các giải pháp hai, ba.

Ngày thứ 2 học IOT: Đo nhiệt độ, độ ẩm và gửi dữ liệu lên Cloud

Trong phần này, mình sẽ tiếp tục chia sẻ với các bạn ngày thứ 2 học IOT của mình.

Trong phần trước, mình đã tìm hiểu cơ bản về ESP8266, và NodeMCU DevKit cũng như Sming Framework. Phần này mình sẽ tiến hành đo nhiệt độ, độ ẩm và gửi dữ liệu lên Cloud.

Để có thể đo nhiệt độ, độ ẩm, chúng ta dùng cảm biến DHT11, giá thị trường khoảng 50 ngàn VNĐ (phương Tây họ hay dùng DHT22 hơn).

Cảm biến nhiệt độ, độ ẩm DHT-11

Cảm biến nhiệt độ, độ ẩm DHT-11

DHT11 có ba chân. Trong đó, chân S là chân tín hiệu. Hai chân còn lại là chân nguồn và chân đất.

Như vậy, ta sẽ kết nối DHT11 với NodeMCU như sau:

  • Chân đất của DHT11 nối với chân đất của NodeMCU
  • Chân nguồn của DHT11 nối với chân nguồn của NodeMCU
  • Chân tín hiệu của DHT11 nối với chân D2 của NodeMCU
Kết nối NODEMCU ESP8266 với DHT11

Kết nối NODEMCU ESP8266 với DHT11 (Ảnh từ esp8266.vn)

Sau khi chuẩn bị xong phần cứng, chúng ta cần chuẩn bị mã nguồn để nạp vào ESP8266.  Về cơ bản, mã nguồn cần làm ba việc sau:

  • Kết nối Wifi
  • Kết nối DHT11, lấy dữ liệu nhiệt độ và độ ẩm
  • Gửi dữ liệu nhiệt độ, độ ẩm qua Internet lên Cloud

Có khá nhiều lựa chọn cho Cloud, bạn có thể dùng ThingSpeak.  Với mình, mình chọn Koor.IO.

Mình đã viết mã nguồn trên nền tảng Sming Framework và đẩy lên Github ở link sau https://github.com/KoorIO/koor-samples/tree/master/HttpClient

Các bước thao tác trên Koor.IO, và triển khai mã nguồn mình đã ghi lại video. Các bạn có thể xem video để biết cụ thể hơn.

Như vậy, việc đẩy dữ liệu từ thiết bị lên Cloud trở nên hết sức dễ dàng với sự hỗ trợ của ESP8266, Koor.IO và Sming Framework.

Ngày tiếp theo, mình sẽ nghiên cứu thêm về Micropython for ESP8266, hứa hẹn là mọi chuyện sẽ dễ dàng hơn nữa. Chúng ta có thể làm một ví dụ đơn giản kiểu như bật tất đèn LED qua MQTT chẳng hạn.

Tôi đã học Internet Of Things như thế nào

Như các bạn biết, Internet Of Things là môt xu thế công nghệ được mọi người hướng tới nhiều nhất trong thời gian qua. Những Developer kinh nghiệm cũng tham gia nghiên cứu IOT nếu không muốn mình bị lạc hậu. Còn những Developers trẻ tuổi cũng háo hức học IOT để bắt đầu khởi nghiệp, hoặc để có một công việc tốt hơn trong tương lai.

Ngày nay,  IOT hay Khoa Học Công Nghệ không còn là câu chuyện của các cá nhân, tổ chức. Chính phủ nước nhà cũng đã chung tay góp sức bằng nhiều chính sách hỗ trợ cụ thể với những khởi nghiệp trong lĩnh vực này.

Cá nhân tôi cũng chỉ mới nghe về IOT một năm trước. Với nhận định đây là một xu hướng không thể thay thể, tôi bắt đầu nghĩ về nó, và chuẩn bị cho mình những kiến thức cơ bản:

  • Cơ bản về điện và điện tử
  • Các khái niệm trong IOT
  • Tổng quan về kiến trúc các hệ thống IOT
  • Giao thức MQTT

Với các tiếp cận của một Developer, tôi luôn bắt đầu viết mã nguồn sau khi nắm sơ bộ các kiến thức cơ bản. Việc thực hành giúp tôi hiểu vấn đề một cách dễ dàng hơn là việc đọc hàng trăm trang tài liệu. Việc đọc cũng rất quan trọng, nhưng nếu chỉ đọc mà không thực hành, tôi sẽ không thể hệ thống được kiến thức của mình.

Do không biết bắt đầu thực hành từ đâu, tôi đã tham gia lớp dành cho người mới bắt đầu của nhóm Maker Hanoi (một cộng đồng các Maker ở Hà Nội). Từ đó, mọi việc trở nên dễ dàng và đơn giản hơn.

Đầu tiên, tôi mua một NodeMCU ESP8266 DevKit với giá 200.000 đồng.

  • ESP8266 là một module Wifi
  • NodeMCU ESP8266 DevKit chứa ESP8266 và kết nối USB để giúp chúng ta có thể dễ dàng nạp mã nguồn vào ESP8266.
NodeMCU ESP8266 Dev Kit

NodeMCU ESP8266 Dev Kit

Tiếp đó, tôi kiếm thêm một dây cáp Micro USB để nối DevKit với máy tính của mình.

Micro USB Cable

Micro USB Cable

Sau khi có DevKit, tôi bắt đầu xem qua ESP8266 Datasheet để hiểu về các chân và cách hoạt động của ESP8266. Và tôi cũng tham khảo thêm ảnh bên dưới để biết các chân đầu ra của DevKit tương ứng với chân nào của ESP8266.

NodeMCU ESP8266 Dev Kit Pin Out

NodeMCU ESP8266 Dev Kit Pin Out

Sau khi chuẩn bị đầy đủ phần cứng, tôi bắt đầu với phần mềm. Tôi được gợi ý lựa chọn Sming Framework  để viết firmware cho ESP8266. Sming Framework rất dễ hiểu và dễ sử dụng. Tuy nhiên, bạn có thể gặp một vài khó khăn khi cài đặt nó.

Ý tưởng đầu tiên của tôi cho đoạn mã nguồn đầu tiên về IOT là sử dụng ESP866 đẩy dữ liệu lên một IOT Platform. Hiện nay có rất nhiều IOT Platform, có cả mã nguồn mở hay những platform sử dụng miễn phí. Tôi đã lựa chọn Koor.IO – Môt IOT Platform dành cho Developer.

Với Koor.IO, tôi có thể tạo Restful API, Websocket và cả MQTT. Koor.IO cũng giúp tôi lưu dữ liệu từ client gửi lên vào hiển thị chúng lên biểu đồ.

Để tiến thành, tôi đã làm theo các bước sau:

Bước 1: Tạo Projects

Đăng ký tài khoản trên Koor.IO và tạo một projects.

Create a IOT Project on Koor.IO

Create a IOT Project on Koor.IO

Sau khi tạo xong project, chúng ta cần đợi một lúc để Koor.IO cài đặt project.

2016-10-12_1700

Tiếp đến, mở project và tạo một Field. Field này sẽ giúp Koor.IO nhận biết dữ liệu bạn muốn lưu vào server.

2016-10-12_1704

Như vậy là chúng ta đã xong với Koor.IO, tiếp đến là viết mã nguồn.

Bước 2: Mã nguồn

Trước tiên, chúng ta lấy mã nguồn ví dụ của Koor.IO về máy https://github.com/KoorIO/koor-samples.

Trong thưc mục Mqttclient, chúng tao tạo file cấu hình bằng lệnh:

Tiến đến, điều chình file include/config.h cho phù hợp với môi trường của mình.

MQTT_TOPIC  chính là project_domain/field trên trang Koor.IO. Trong đó,  field là Field Code bạn đã tạo, còn project_domain chính là domain của project.

MQTT_HOST, bạn chọn mqtt.koor.io

Và  WIFI_SSID, WIFI_PWD chính là thông tin mạng WIFI

Bước 4: Biên dịch

Sau khi thay đổi file cấu hình, chúng ta cần biên dịch và nạp mã nguồn vào ESP8266 với lệnh sau:

Kết quả

Sau khi build flash thành công, chúng ta mở Dashboard của dự án trên Koor.IO để xem dữ liệu được đẩy lên từ thiết bị theo chu kỳ khoảng 20 giây một lần.

Koor.IO - Chart - ESP8266

Koor.IO – Chart – ESP8266

Các vấn đề có thể gặp

Nếu bạn sử dụng Linux, trong trường hợp máy tính không nhận được DevKit, ta dùng lệnh sau để debug

Nếu bạn muốn thấy Logs từ ESP8266, ta dùng lệnh:

Như vậy là đã hoàn thành ứng dụng IOT đầu tiên 🙂

Bắt đầu với ExpressJS và Mongoose

Trong bài này, chúng ta sẽ sử dụng kết hợp Mongoose và ExpressJS để thao tác dữ liệu với MongoDB

Source code của bài học: https://github.com/thanhson1085/bean-seed/tree/2.0

Để bắt đầu, chúng ta cần cài đặt thư viện Mongoose

Models

Tạo thư mục models với lệnh

Tạo file modes/index.js với nội dung như sau

Mục đích của file index.js là quét tất cả các file (trừ file index.js) trong thư mục models, và import và biến db.

Tiếp đến, tạo file models/user.js

Controllers

Tạo thư mục chứa các controllers

Trong thư mục apis, tạo file index.js

Mục đích của file này là để định tuyến các URL vào các file controller tương ứng.

Tiếp theo, tạo file apis/users.js.  Trong file này, chúng tao sẽ viết một API tạo mới user

Bước cuối cùng là cập nhật file index.js

Test

Sau khi hoàn thành phần code, chúng ta sử dụng Restful Client (Postman) để chạy thử (api/vi/users/create, POST)

Cài đặt và chạy thử MongoDB trên Ubuntu

Cài đặt MongoDB trên Ubuntu Server tương đối đơn giản.  Tuy nhiên, nếu muốn cài MongoDB với một version cụ thể, chúng ta nên xem hướng dẫn tại trang của (MongoDB https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/).

Để cài đặt một cách đơn giản, chúng ta dùng lệnh sau:

Để kiểm tra lại xem MongoDB đã chạy trên server chưa, ta dùng lệnh sau:

Hoặc lệnh:

Sau khi chắc chắn mongodb đã hoạt, chúng ta sử dụng mongo client để kết nối đến mongodb server

Sau đó, bạn có thể dùng tập lệnh sau để thao tác với database

 

Bắt đầu dự án AngularJS với Yeoman

Bạn có thể dễ dàng chạy thử một ví dụ về AngularJS với chỉ một file html và một file Javascript. Tuy nhiên, để làm một dự án Ứng dụng Web hoàn chỉnh, ta cần có đầy đủ các công cụ phụ trợ như Grunt, Bower, hay một cấu trúc thư mục hợp lý, hoàn chỉnh. Để làm được điều đó, chúng ta sử dụng Yeoman.

Để bắt đầu, chúng ta cài đặt Yeoman, Grunt, và Bower với lệnh sau:

Tiếp đến, chúng ta tạo thư mục cho dự án:

Sau đó, cài đặt các thư viện cần thiết để giúp Yeoman khởi tạo dự án AngularJS

Sau khi hoàn tất, chúng ta tiến hành lệnh khởi tạo dự án

Và tiến hành trả lời các câu hỏi như sau:

Để có thể sử dụng SASS, bạn cần có trình biên dịch. Bước này, chúng ta sẽ tiến hành cài đặt trình biên dịch đó

Cuối cùng, chúng ta sử dụng Grunt để biên dịch và chạy ứng dụng với lệnh

Như vậy, ta có một trang web mặc định của Yeoman chạy ở địa chỉ http://172.20.20.20:9000

Chú ý: Nếu chúng ta thấy lỗi về Version của Jquery, chúng ta chạy 2 lệnh sau để sửa

 

Vấn đề phân trang trong AngularJS và Boostrap Theme

Trong bài viết này, mình sẽ đề cập đến vấn đề phân trang trong AngularJS. Phân trang là một vấn đề rất phổ biến. Vì vậy, hiện nay đã có các thư viện giúp ta làm việc này.

Để bắt đầu, chúng ta cài đặt thư viện sau:

Sau đó thêm module mới ui.bootstrap vào file app/config/config.tpl.js

Kế tiếp, trong phần view app/views/users/list.html, chúng ta thêm thẻ sau:

Ở phần Controller app/scripts/controllers/users.js, chúng ta cần thêm các giá trị vào biến $scope

Như vậy, chúng ta đã hoàn thành phần phân trang.

Vấn đề đa ngôn ngữ trong AngularJS

Trong phần này, mình sẽ thêm chức năng đa ngôn ngữ cho dự án. Đa ngôn ngữ là một phần quan trọng và có mặt ở rất nhiều ứng dụng. Việc xây dựng chức năng này tương đối phức tạp, tuy nhiên lại mang lại lợi ích không nhỏ về lâu dài. Phần source code của dự án các bạn có thể xem tại đây https://github.com/thanhson1085/bean-seed/tree/4.4

Trước khi bắt đầu, chúng ta cần cài đặt các thư viện sau:

Sau đó thêm module mới pascalprecht.translate vào app/scripts/config.tpl.js

Tiếp đến chúng ta cần tạo thư mục resources để lưu các file ngôn ngữ:

Thêm nội dung vào file locale-us_US.json

Thêm cấu hình đa ngôn ngữ vào các file config như config/local.json

Thêm config vào file app.js

Thay đổi nội dung file app/views/users/list.html

Như vậy, đến đây chúng ta đã có thể thấy rằng Angular Translate sẽ đọc các label được khai báo trong file ngôn ngữ và đưa vào view (ví dụ list.html). Nhưng vẫn còn thiếu phần để người dùng có thể thay đổi ngôn ngữ của ứng dụng. Ở đây, ứng dụng có hai ngôn ngữ là English và Việt Nam.

Để làm được điều đó, chúng ta sẽ xây dựng một View và một Directive với từng bước như sau:

Tạo một Service thay đổi ngôn ngữ app/scripts/services/locale.js

Tiếp đến tạo một Directive app/scripts/directives/locale.js

Tạo một view, và thêm Directive vừa tạo vào view app/views/users/setting.html

Cuối cùng, thêm một route mới – app/scripts/app.js

Như vậy, chúng ta đã hoàn thành các bước để thêm chức năng Đa ngôn ngữ vào ứng dụng.

 

 

Link tạo Facebook Live Stream từ máy tính

Mọi người click vào nút bên dưới, một dialog của Facebook sẽ được bật lên để mọi người lấy các thông tin Facebook Live Stream. Vì vậy, nếu trình duyệt chặn Popup của trang này, mọi người nên cấu hình để cho phép popup từ trang.

Để bắt đầu Live Stream facebook trên máy tính, ta làm các bước sau:

Cài đặt OBS

Cài đặt chương trình OBS (Open Broadcaster Software) để có thể phát video từ máy tính. OBS là một phần mềm miễn phí. Bạn có thể download ở link sau: https://obsproject.com/.  Bạn nên lựa chọn phiên bản OBS Studio.

Sau khi download thành công, bạn tiến hành cài đặt như bình thường, không có cấu hình gì phức tạp

Lấy link Live Steam

Bạn click vào nút bên dưới

Đến đây, nếu trình duyệt chặn Popup, bạn cần tắt chế độ chặn đó đi, và ấn lại nút trên. Và một dialog sẽ bật lên, nếu cần bạn sẽ phải login facebook. Và bạn sẽ có giao diện như hình bên dưới.

Facebook Live Steam từ desktop

Facebook Live Steam từ desktop

Đến đây, bạn sẽ lựa chọn share lên Wall hay lên Group rồi ấn Next. Đợi 1 lúc, bạn sẽ có link stream và key.

Lựa chọn nguồn Stream

Bạn bật phần mềm OBS. Vào phần cấu hình để thiết lập link stream và key (cái mà bạn có được từ bước trên).

Sau đó lựa chọn nguồn video muốn Stream. OBS hỗ trợ rất đa dạng, bạn có thể chọn camera, màn hình máy tính hoặc file MP4

Bắt đầu Stream

Sau khi hoàn tất thiết lập, ấn nút Start Stream trên OBS. Rồi quay trở lại màn hình PopUp ấn vào nút Go Live.

Như vậy là bạn đã Go Live thành công, khi muốn kết thúc, bạn vào OBS và ấn nút Stop Stream