Công Nghệ

Review và giải thích sâu về framework, ngôn ngữ, AI, blockchain… ngắn gọn, dễ hiểu, cập nhật liên tục như git pull ‑‑rebase.

1826 bài viết

Imatis – làn gió công nghệ mới trong dịch vụ chăm sóc sức khỏe y tế

Imatis – làn gió công nghệ mới trong dịch vụ chăm sóc sức khỏe y tế

Internet of thing (IoT) có rất nhiều ứng dụng trong lĩnh vực chăm sóc sức khỏe, từ giám sát từ xa đến cảm biến thông minh cùng khả năng tích hợp vào các thiết bị y tế. Nó không chỉ có khả năng giúp cho bệnh nhân an toàn và khỏe mạnh mà còn được dùng để nâng cao chất lượng dịch vụ. Có thể nói đây là một hệ thống tiên tiến vốn được xem là chuẩn mực cho các bệnh viện ở nước ngoài. Với mong muốn đem đến cơ hội chăm sóc ý tế đáp ứng tốt hơn nhu cầu của người dùng Việt Nam và nhận thức được nhu cầu chăm sóc sức khỏe chất lượng cao tại thị trường Việt Nam. Imatis, một trong những công ty chuyên phát triển dịch vụ phần mềm về chăm sóc sức khỏe hàng đầu thế giới, và đang có kế hoạch triển khai dự án ở thị trường Việt Nam. Hôm nay, Station D có cơ hội được gặp gỡ và trò chuyện cùng đội ngũ chuyên gia của Imatis để hiểu rõ hơn về E-health và tiềm năng của E- health tại thị trường Việt Nam Việt Nam – thị trường E-health đầy tiềm năng và thử thách Theo ông Morten Andresen, CEO của Imatis – công ty chuyên phát triển phần mềm về chăm sóc sức khỏe. Trong đó, hãng tập trung về mảng logistic, quản lí thiết bị cơ sở cũng như là thiết lập đường dây kết nối thông tin dành riêng cho bệnh viên. Với sự tích hợp của machine learning, người bệnh sẽ được hỗ trợ dịch vụ chăm sóc sức khỏe vô cùng tiện lợi. Imatis hiện đã có mặt tại hơn 30% bệnh viện tại Na Uy. Ngoài ra, Imatis...

By stationd
Viết blog đem lại những kỹ năng gì?

Viết blog đem lại những kỹ năng gì?

Bài viết được sự cho phép của vntesters.com Viết blog không những giúp bạn thoả đam mê viết lách, chia sẻ mà còn đem lại cho các bạn những kỹ năng (skills) giúp ích rất nhiều trong cuộc sống. Kỹ năng viết Kỹ năng đọc và tổng hợp Kỹ năng trình bày, bố cục văn bản Kỹ năng liên kết, ngoại giao Kỹ năng sử dụng máy tính, Internet Ngoại Ngữ 25 blogger IT nổi tiếng mà dân lập trình ai cũng phải biết Câu chuyện về cái comment tại một blog nọ Như vậy có thể thấy viết blog đã đem lại khá nhiều kỹ năng hữu ích đấy chứ. Vậy còn bạn, viết blog đã đem lại cho bạn những kỹ năng gì? Kỹ năng viết : việc sử dụng câu chữ thế nào, dấu chấm, dấu phẩy của người viết sẽ được cải thiện rõ rệt qua thời gian dài viết bài (với điều kiện là các bạn viết một cách nghiêm túc). Nó thể hiện sự chuyên nghiệp cũng như tôn trọng người đọc của tác giả. Kỹ năng đọc và tổng hợp : Đây cũng là một trong những kỹ năng quan trọng mà bạn sẽ thu được nhờ viết blog. Chắc chắn rằng bạn sẽ phải chép từ chỗ này một chút chỗ kia một chút cũng như tham khảo các nguồi tại liệu khác nhau để lấy ý tưởng, cuối cùng là kết hợp tất cả chúng lại với nhau để có một bài viết hoặc ý tưởng hay. Ngoài ra để có thể đọc được nhanh mà vẫn nắm bắt được nội dung chính của một bài viết, bạn sẽ dần hoàn thiện kỹ năng đọc của mình. Kỹ năng trình bày, bố cục văn bản : một điều khá quan trọng...

By stationd
Java Stream – Collectors và Statistics

Java Stream – Collectors và Statistics

Bài viết được sự cho phép của tác giả Kiên Nguyễn Làm việc với Stream Collector/ Collectors đã lâu, liệu rằng bạn có biết ngoài Grouping và Partitioning , Stream còn hỗ trợ cả thống kê (Statistics) . Bất ngờ chưa, Collector thật sự còn ẩn chứa nhiều điều mà anh em còn chưa biết tới. Hãy cùng tìm hiểu collector và các methods của nó qua bài viết dưới đây. Cuộc đời anh em developer chúng ta sẽ bớt khổ . Xem thêm các Việc làm Java hấp dẫn trên Station D 10 Java Web Framework tốt nhất 10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java Trường hợp muốn tìm hiểu sâu hơn về stream và stream how it’s works , các bạn có thể khảo bài viết này . Thực sự những method được cung cấp bởi collectors như Partitioning hay Grouping có sức hấp dẫn lạ kì. 1. Collectors. A Collector represents a way to combine the elements of a Stream into one result. Collector đại diện cho cách kết hợp tất cả các đối tượng trong Stream thành một kết quả duy nhất. Để hoàn thành nhiệm vụ của mình, collectors sẽ chịu trách nhiệm thực thi 3 nhóm tác vụ chính: A supplier of an initial value. Cung cấp một giá trị ban đầu. An accumulator which adds to the initial value. – Nơi tổng hợp một loạt các giá trị ban đầu. A combiner which combines two results into one. – Kết hợp hai kết quả thành một. Collector được sử dụng thường xuyên khi ta sử dụng Stream API, nhưng ta ít khi để ý tới. Có hai cách để sử dụng: // Phương thức ngắn gọn. collect(Collector) (types left off for brevity) // Các...

By stationd
Chỉ sau 15 tháng, Gameloft for brands và Kinder đã cho ra đời dự án đầy tham vọng – Applaydu

Chỉ sau 15 tháng, Gameloft for brands và Kinder đã cho ra đời dự án đầy tham vọng – Applaydu

Chỉ sau 15 tháng, Gameloft for brands và Kinder đã ra mắt ứng dụng Applaydu – một dự án đầy tham vọng – mang các nhân vật đồ chơi của Kinder vào đời sống thực tế thông qua Thực tế tăng cường (AR) với một thế giới đầy những điều thú vị đang chờ được khám phá. Applaydu là một ứng dụng giáo dục trên điện thoại, được thiết kế cho trẻ em từ 3 đến 9 tuổi. Tại đây, các bé có thể khám phá nhiều trò chơi đầy thú vị, giúp các bé học đếm, làm quen với ngôn ngữ và mở rộng kiến thức về các quốc gia, địa lý và cả động vật. Một đoàn làm phim chuyên nghiệp đã đến thăm Gameloft Sài Gòn Studio để có thể nắm bắt được kĩ càng nhất quá trình phát triển suốt 15 tháng của dự án Applaydu. Qua đó, “Creating Applaydu” – một phim tài liệu dài 15 phút đầy gần gũi và cảm động đã ra đời, thể hiện cận nét từng bước hành trình sáng tạo của cả nhóm. Bạn sẽ nhận ra rằng chuyên môn và niềm đam mê của từng thành viên trong team có thể giúp họ đạt được những điều to lớn như thế nào.  Đội ngũ Applaydu tại trụ sở Gameloft Sài Gòn Studio Thế giới đã thay đổi rất nhiều kể từ khi Kinder Surprise phát hành cách đây 50 năm: trẻ em ngày nay được sinh ra với công nghệ và dành phần lớn thời gian của chúng trên điện thoại thông minh. Để bắt kịp với thời đại, Ferrero Group muốn nâng cao trải nghiệm của trẻ em bằng cách kỹ thuật số hóa những đồ chơi bình thường. Là một chuyên gia trong ngành công...

By stationd
Các kĩ sư ZOZO đã tạo ứng dụng Survey realtime xử lý 1000 người đồng thời như thế nào

Các kĩ sư ZOZO đã tạo ứng dụng Survey realtime xử lý 1000 người đồng thời như thế nào

Bài viết được sự cho phép của tác giả Ngo Thang Chắc hẳn nhiều người cũng đã từng làm 1 ứng dụng trả lời Survey bằng việc sử dụng thư viện hay service bên thứ 3 như Google Form. Nếu không có yêu cầu gì đặc biệt thì Google Form quả thực quá đủ. Nhưng mà để hiển thị kết quả Survey bằng realtime thì có lẽ Google Form không phải là sự lựa chọn hợp lý. Vậy cùng xem các kĩ sư ZOZO đã tạo ra ứng dụng Survey realtime như thế nào nhé. Realtime API trong 5 phút với FeathersJS Xây dựng ứng dụng realtime messaging bằng Firebase như TikTok, Bigo... Bối cảnh ZOZO là 1 trang web bán hàng online gần như lớn nhất Nhật Bản. Công ty được thành lập vào năm 1998, đến nay đã đạt hơn 1000 nhân viên. Đa số các công ty Nhật bản, họ thường tổ chức bữa tiệc tổng kết cuối năm để báo cáo tình hình tài chính, giới thiệu dịch vụ công ty đang vận hành đến toàn thể nhân viên. Và ZOZO cũng vậy. Vào buổi tổng kết cuối năm, họ quay video giới thiệu về dịch vụ trong công ty. Và mỗi khi kết thúc 1 phần nào đó trong video, họ tổ chức 1 cái Survey thăm dò ý kiến của toàn bộ nhân viên, và sẽ hiển thị kết quả ra màn hình 1 cách realtime . Và cái Survey này sẽ được chèn vào giữa các đoạn trong video. Đây là toàn bộ khung cảnh hội trường lúc đó. Công ty to có khác, hội trường trông hoành tráng quá. Điều kiện khi thực hiện Survey Trước buổi tổng kết 2 tuần thì đã nhận được 1 số request từ bên admin như...

By stationd
Tự tạo một hàm printf thay thế cho hàm printf mặc định trong thư viện stdio.h (phần 1)

Tự tạo một hàm printf thay thế cho hàm printf mặc định trong thư viện stdio.h (phần 1)

Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh Chào bạn! Lại là tôi Xuân Quỳnh đây. Bạn vẫn háo hức về những kiến thức cực kỳ cơ bản trong loạt bài lập trình C cơ bản này chứ? :)) 1001 Tips: Con trỏ và hàm (Pointer & Function) trong C++ Sử dụng lệnh printf hiển thị câu chào ra màn hình OK, bài trước các bạn đã làm quen với 1 lệnh cơ bản là printf, thuộc thư viện stdio.h. Rất hay dùng để in ra màn hình các đoạn text, các con số và nhiều thứ khác nữa. Tôi đã hứa là làm 1 hàm printf tương tự, nhưng nó thuần Việt Aha, tôi việt hóa hàm này cho bạn biết nha. Nhắc lại chương trình cũ của chúng ta như sau: #include < stdio.h > void main() { printf(“Chao em C xinh dep”); } OK, bây giờ chúng ta sẽ thay thế hàm printf ở trên bằng hàm, tôi đặt tên nó là inramanhinh(“In cái gì đó trong này”) :)) Bây giờ tôi giới thiệu khái niệm mới là thủ tục. Nếu bạn nào hồi cấp 3 mà cày Pascal thì biết thủ tục là như nào rồi. Tôi nhắc lại theo cách bình dân như sau: Thủ tục là việc nhóm các câu lệnh lại để xử lý 1 việc nào đó theo mong muốn của lập trình viên. Ở đây là tôi nhóm việc in ra màn hình thành 1 thủ tục có tên như trên. Rồi, từ khóa cho việc dịnh nghĩa là void <Tên thủ tục>. Ở đây là: void inramanhinh( char * caicaninra) Bạn choáng ngợp chưa? Đừng sợ, tôi sẽ chỉ cho bạn hết sợ nha. Ở trên tôi có từ khóa void. void là gì vậy trời?...

By stationd
Con muốn trở thành một Software Architect

Con muốn trở thành một Software Architect

Bài viết được sự cho phép của tác giả Tino Phạm Một developer trẻ nói với Chú của mình về việc cậu ta muốn trở thành một Software Architecture trong tương lai. Sau đây là cuộc nói chuyện giữa hai chú cháu. Con muốn sau này trở thành một Software Architecture (kiến trúc sư phần mềm). Con có định hướng cho mục tiêu nghề nghiệp vậy là tốt lắm đó. 10 Công cụ Go-To Tech dành riêng cho các Software Developer Biến Git và GitHub trở thành công cụ đắc lực cho Software Engineer Con muốn được dẫn đầu một nhóm và đưa ra các quyết định quan trọng như chọn loại Database nào, Framework nào, Web API thế nào và dùng những công nghệ nào cho dự án. Khá đó chứ. Nhưng nghe có vẻ như con không phải muốn trở thành Software Architecture nữa. Tất nhiên là con muốn chứ. Con muốn trở thành một người quyết định tất cả những thứ quan trọng. Chú biết vậy, nhưng mà con đang liệt kê những thứ không quan trọng. Chính xác hơn là những thứ con liệt kê nó không liên quan đến quyết định của một Software Architecture. Ý của Chú là sao? Database mà không quan trọng sao? Chú có biết phải chi bao nhiêu tiền cho chúng không? Có lẽ là rất nhiều, nhưng mà lựa chọn database không phải là một trong những quyết định quan trọng. Sao Chú nói vậy? Database là trái tim của toàn hệ thống. Nó là nơi dữ liệu được lưu trữ, sắp xếp, đánh index và được truy cập. Không có nó thì sẽ không có hệ thống. Database đơn thuần chỉ là một thiết bị IO. Nó chỉ là một công cụ hữu ích để sắp xếp, truy...

By stationd
Phương thức Autocomplete của jQuery

Phương thức Autocomplete của jQuery

Bài viết được sự cho phép của BBT Tạp chí Lập trình Trong thế giới bùng nổ thông tin như hiện nay thì việc tìm kiếm trên Internet trở nên quan trọng hơn bao giờ hết. Vì vậy, việc website của bạn có thêm chức năng tìm kiếm nhanh không chỉ tăng trải nghiệm người dùng mà còn thể hiện sự chuyên nghiệp trong thiết kế. Tuy nhiên, khi các chức năng cơ bản của 1 website đã quá phổ thông như hiện nay thì trải nghiệm người dùng là vấn đề được ưu tiên hàng đầu. Việc tìm kiếm thông tin phải đạt được yêu cầu nhanh, chính xác, đáp ứng mục đích của người dùng. Và kĩ thuật hỗ trợ đầy đủ các yêu cầu đó chính là phương thức Autocomplete của jQuery . Nếu bạn đang có nhu cầu tìm kiếm một sản phẩm nào đó trên một website bán hàng chẳng hạn, thì việc tìm thấy thông tin sản phẩm hoặc ít nhất là có thể thấy danh sách các kết quả được lọc ra ngay khi gõ tên sản phẩm sẽ tiện lợi hơn nhiều so với việc chúng ta phải bấm nút “Tìm kiếm” rồi chờ lọc kết quả trong một rừng sản phẩm được show ra màn hình. Đặt vị trí của mình vào người dùng, chắc chắn điều đó sẽ ảnh hưởng đến cảm quan của họ tới website của bạn. Để giải quyết vấn đề này, ta có thể dùng phương thức Autocomplete của jQuery., một kĩ thuật đơn giản nhưng lại đem đến trải nghiệm tuyệt vời cho website của bạn. Cách sử dụng các plugins jQuery trong VueJS Top các Plugin jQuery tạo Lightbox free đẹp nhất cho website Ví dụ ô tìm kiếm của bạn được viết bằng...

By stationd
Thiết kế Messaging Service WhatsApp – P2

Thiết kế Messaging Service WhatsApp – P2

Bài viết được sự cho phép của tác giả Kiên Nguyễn Tiếp theo phần 1 về thiết kế hệ thống Messaging Service WhatsApp . Bài viết thứ hai này sẽ cho ta một cái nhìn toàn diện và sâu hơn về thiết kế tổng quan đã trình bày ở phần trước. Nội dung này có thể xem là High Level Design cho System. Trình bày và giải thích cụ thể hơn cho từng thành phần trong hệ thống. Discord đã lưu trữ hàng tỉ messages mỗi ngày như thế nào Kiểm tra HTML5 validation message 1. Quay lại với hệ thống Quay lại với hệ thống Messaging Service WhatsApp, ở phần 1 ta đã có cái nhìn tổng quan về các thành phần trong hệ thống. Load Balancer App Servers Memcached APN/GCM Job Queue Workers Tiếp tục đi sâu hơn nhằm trả lời các câu hỏi có thể phát sinh trong thực tiễn khi triển khai hệ thống. 2. Chi tiết Messaging Service WhatsApp Bắt đầu từ gốc tới ngọn, ta sẽ xem xét Database Model trước. Ở hệ thống chat này, ta có thể sử dụng NoSQL, có 2 phương án để lựa chọn: 2.1 Database Model Thứ nhất là Wide-Column Store. Loại này tương tự như HBase và Cassandra Thư hai là NoSQL Key Value Stores , kiểu lưu trữ này chỉ có key và value, phân tán trên nhiều database nhỏ (Distributed Database). Tốt cho scaling, tiêu biểu có thể chọn là DynamoDB Schema User như sau: Java - id - username - password - device_OS // Xác định service gửi notification - device_token // Dùng cho Notification - list<unread_messages> Lưu ý là bảng User cần có thêm 2 cột là device_OS và device_token. Device_OS cho ta biết nên sử dụng Apple APNS hay Google’s GCM. Device_token...

By stationd
Giới thiệu về Gulp JS

Giới thiệu về Gulp JS

Bài viết được sự cho phép của tác giả Tino Phạm 1. Gulp là cái gì vậy? Gulp được biết đến như là một Task Runner , nghĩa là nó sẽ thực hiện các nhiệm vụ mà developer đặt ra cho nó một cách tự động. OK, ví dụ thế này nhé: bạn đang tham gia một dự án web và trong quá trình phát triển dự án bạn muốn là: mỗi khi bạn chỉnh sửa các file html, css, hoặc là js gì bạn sẽ không cần phải nhấn F5 (refresh) browser cho mất công nữa, bạn cũng muốn minify các file css và js khi bạn release package, và bạn còn muốn làm nhiều thứ khi phát triển dự án của mình. Vậy Gulp sẽ giúp bạn định nghĩa các tasks và tự động thực hiện các tasks đó cho bạn. Lợi ích của Gulp là : giúp bạn tự động minify, complile, reload browser,… và nhiều thứ khác rất hay nữa. 10 Công ty hàng đầu thế giới sử dụng Node.js 8 lợi thế khi sử dụng Polymer so với Angular và React 2. Hướng dẫn cài đặt Gulp hoạt động trên môi trường Nodejs nên việc đầu tiên là bạn phải cài đặt Node.js và npm – Download và cài đặt Node.js tại đây . Cài Node.js bao gồm cả npm. – Mở hộp thoại cmd trong window và gõ lệnh: npm install gulp -g Vậy là xong việc cài đặt Gulp rồi. Giải thích lệnh trong npm: npm có 3 loại install – install -g: là global, như thế e có thể truy cập tới package vừa cài ở bất kì đâu trong hệ thống – install –save: là khi install, đồng thời save lại tên package đó vào package.json ở trường dependencies, thường dùng...

By stationd
Mọi thứ bạn nên biết về Memory Leaks trong IOS (phần 2)

Mọi thứ bạn nên biết về Memory Leaks trong IOS (phần 2)

Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh Memory Leaks trong Closure Nếu bạn chưa xem phần 1, vui lòng xem ở đây: Khi chúng ta tạo giá trị 1 closure nó cần giữ 1 tham chiếu mạnh tới các biến mà nó cần thuộc controller. Chúng ta tạo 1 hàm biến optional closure có kiểu () -> Int và gán trong ViewDidLoad. Closure cần a và b để chạy nó. a và b được capture bởi nó và thuộc ViewDidLoad – bên ngoài nó. Promise Memoization useMemo là gì? Hướng dẫn sử dụng React useMemo Hook var someClosure: (() -> Int)? Đầu tiên, chúng ta nói self.someClosure là 1 tham chiếu mạnh. someClosure = { return self.a + self.b } Cả ViewController và Closure đều tăng RC = 1. Khi Controller này push vào navigation controller, nó sẽ tạo 1 tham chiếu mạnh RC = 1 tới controller này. Và đồng thời closure cần a và b để capture cho nên class fererences này có RC = 2. Khi bạn pop ViewController này thì nó bị xóa bởi navigation, đồng thời RC = 1. Lý tưởng là khi đó ViewController sẽ bị hủy tuy nhiên chúng ta tạo ra 1 retain cycle. ARC thấy RC của cả 2 đều là 1 nên không thể giải phóng được. Giải pháp Tạo ra 1 tham chiếu yếu thay thế tham chiếu mạnh. Như hình trên closure capturing 1 giá trị yếu. Do đó lúc này a, b là kiểu optional cho nên chúng ta cần guard để unwrap 2 giá trị này lại. var someClosure: (() -> Int)? self.someClosure = { [weak self] in guard let `self` = self else { return 0 return self.a + self.b} Khi tạo SecondViewController thì RC của nó = 1. Closure...

By stationd
Distributed cache là gì? – điều gì khiến nó trở nên mạnh mẽ?

Distributed cache là gì? – điều gì khiến nó trở nên mạnh mẽ?

Bài viết được sự cho phép của tác giả Kiên Nguyễn Ngày nay, một ứng dụng web, một app trên mobile cũng có thể có cả triệu user sử dụng, truyền đạt (gửi đi tới cả tera bytes). Rõ ràng là thế, vậy mới đẻ ra nghành Khoa Học Dữ Liệu ( Data Scientist ) , càng ngày càng hot. Để đảm bảo cho trải nghiệm của người dùng, cache chưa bao giờ là sự lựa chọn tồi. Tuy nhiên, chỉ mỗi cache không là chưa đủ. Buffer là gì? Hiểu về Buffer và Cache Speed up Microservices 2: Tận dụng trình duyệt và cache Số lượng request nhiều -> một server cache sẽ chịu tải quá lớn -> nếu đầu tư quá nhiều phần cứng -> lãng phí. Đây là nguyên nhân chính ta cần phải biết thêm về Distributed cache (Cache phân tán). 1. Distributed cache là gì? Distributed cache thì có 2 chữ, chữ Distributed và chữ Cache . Giờ focus vô chữ Cache trước Caching is a commonly used technology to boost application performance as well as reduce costs Caching là công nghệ thường được sử dụng để tăng hiệu năng của ứng dụng, giảm chi phí xuống ở mức tối thiểu Bằng cách sử dụng cache và CDN , user không còn phải chờ tải nội dung từ hơn 1000km hoặc từ châu lục này tới châu lục khác. By caching frequently accessed data in memory, rather than the backend database, applications can deliver highly responsive experiences . Bằng cách thường xuyên sử dụng cache để lưu trữ data trong bộ nhớ, hơn là sử dụng Backend DB, ứng dụng có thể cung cấp những trải nghiệm tuyệt vời hơn tới User . Khác với CDN , thay vì mỗi khu vực sẽ có vài...

By stationd