Home Blog Page 206

Báo cáo xu hướng ngành IT năm 2018

Để đánh dấu sự kết thúc của một năm cực kì hoành tráng và náo nhiệt của làng công nghệ tại Việt Nam, vừa qua TopDev đã cho ra Báo cáo tình hình, những dự báo và xu hướng của ngành trong năm 2018, đánh giá lại tình hình lao động ngành công nghệ thông tin trong năm 2017 đồng thời đưa ra những dự đoán về xu hướng của ngành trong năm 2018.

JavaScript – sự lựa chọn an toàn của các lập trình viên

Câu chuyện tuyển dụng trong ngành công nghệ luôn là vấn đề được quan tâm hàng đầu đối với thị trường lao động cạnh tranh hiện nay. Năm 2017 là một năm sôi động của mảng tuyển dụng lập trình viên, và dự báo sẽ tiếp tục tăng trưởng mạnh trong năm tới.

Nguồn lao động cũng như nhu cầu tuyển dụng của các công ty được dự báo sẽ tiếp tục tăng cao: các công ty quy mô vừa sẽ thuê thêm lao động, trong khi các công ty với quy mô lớn hơn sẽ có kế hoạch thu hút nhiều chuyên gia công nghệ hơn về đầu quân cho mình.

Theo kết quả khảo sát, JavaScript vẫn trụ vững trong top đầu danh sách các ngôn ngữ được lập trình viên sử dụng nhiều nhất, và cũng là một trong những ngôn ngữ được các công ty săn đón nhiều nhất, chỉ ngay sau Python. Chính vì thế, các lập trình viên JavaScript vẫn đang có một lợi thế rất vượt trội nhưng cũng hết sức cạnh tranh.

Top 5 các ngôn ngữ lập trình được săn đón nhất

100+++ vị trí Javascript đúng điệu cho coder sành điệu

Offer ngàn đô, vài năm là sắm ô tô với hơn 300 vị trí Java hấp dẫn

Xu hướng công nghệ 2018 – Bùng nổ ứng dụng AI và Blockchain vào thực tiễn cuộc sống.

Trí tuệ nhân tạo (Artificial Intelligence – AI) và Machine Learning thực sự đã len lỏi vào từng ngóc ngách trong cuộc sống hàng ngày của chúng ta, nhưng cuộc cách mạng này cũng chỉ mới thực sự bắt đầu.

Có thể nói năm 2017 vừa qua là năm đặt nền móng cho sự phát triển công nghệ này ở Việt Nam, khi mà các “ông lớn” của nền công nghệ trong nước như FPT, Viettel, VNG,… đều đã rục rịch nghiên cứu và cho ra đời nhiều giải pháp, ý tưởng phát triển sản phẩm ứng dụng AI vào thực tế cuộc sống. Tuy nhiên, “mỏ vàng” AI không chỉ mở cửa cho những “ông lớn”, mà đây còn là mảnh đất màu mỡ cho các doanh nghiệp vừa và nhỏ dấn thân vào. Vì thế, để không bị bỏ lại phía sau, các doanh nghiệp trẻ Việt Nam cũng nên tận dụng lợi thế nguồn lực năng động, sáng tạo của mình để tiếp thu nghiên cứu và khai thác thị trường đầy tiềm năng này.

Top 6 xu hướng công nghệ năm 2018

Năm 2017 được đánh giá là một năm khó quên đối với công nghệ Blockchain, chính nhờ vào sự nổi lên như cồn của Bitcoin và các đồng tiền số khác. Mặc dù có không ít mối quan ngại đã và đang dấy lên xung quanh vấn đề tiền ảo – người ta nghi ngờ rằng nó như một quả bom nổ chậm, tiềm ẩn nhiều rủi ro và có thể “phản bội” chính mục đích cốt lõi của Blockchain; thế nhưng nhu cầu nghiên cứu ứng dụng công nghệ này của các công ty tổ chức vẫn không có dấu hiệu sụt giảm.

Điều đáng nói là những tác động và tiềm năng to lớn của công nghệ này còn lan toả đến nhiều lĩnh vực khác nhau trong cuộc sống như bảo mật, tài chính, an toàn thực phẩm… Chính vì thế, Blockchain tiếp tục được kì vọng là xu thế sẽ khuấy đảo thị trường công nghệ Việt Nam trong năm nay. Đây có thể là cơ hội vàng cho các bạn lập trình viên hiện nay – những người trẻ muốn dấn thân và tìm hiểu những công nghệ mới.

Các công cụ phát triển Blockchain thông dụng

Thời đại công nghệ di động bùng nổ đang hướng mọi người về ứng dụng di động nhiều hơn. Đây chính là lý do tại sao các xu hướng dưới đây được dự báo sẽ mang đến không ít thay đổi và ảnh hưởng đối với làng công nghệ trong năm 2018:

  • Cross-platform – kết hợp giữa app và web được dự kiến sẽ tiếp tục “hoành hành” trong năm nay, để đem đến những  trải nghiệm thống nhất, phục vụ cho nhu cầu tiếp cận và kết nối với người dùng.
  • Xu hướng công nghệ IoT – Vạn vật kết nối cũng được dự báo sẽ phát triển tích cực và đem lại không ít lợi nhuận cho các công ty trong sân chơi mới này. Bên cạnh cross-platform, các ứng dụng – thiết bị cũng sẽ được thiết kế theo xu hướng này và đi kèm với nhiều framework mới để mang đến những trai nghiệm đặc sắc hơn cho người dùng.
  • Ứng dụng AR (Augmented Reality) – công nghệ Thực tế ảo tăng cường nhờ có sự phát triển của ứng dụng mobile mà cũng ngày càng trưởng thành, lớn mạnh hơn. Có thể trước đây, AR có khởi đầu chưa mấy thuận lợi và chưa được đón nhận rộng rãi, nhưng các chuyên gia tin rằng đó là những bước đệm cho những đột phá mới hơn, lớn hơn của công nghệ này trong tương lai sắp đến.

Xu hướng công nghệ năm 2018 – Augmented Reality (AR)

Trên đây là các dự đoán trong tương lai về xu hướng công nghệ trong năm nay. Có thể sẽ xuất hiện thêm các công nghệ mới hơn, hay sự trỗi dậy của những xu hướng cũ, nhưng đây sẽ là cơ sở để cộng đồng có sự chuẩn bị tốt nht trong sự phát triển của mình/ doanh nghiệp. Bên cạnh đó, vấn đề bảo mật an toàn thông tin trong môi trường kết nối vạn vật cũng sẽ trở nên khó khăn hơn nhiều. Điều này đòi hỏi doanh nghiệp và người dùng phải cẩn trọng hơn, các giải pháp bảo mật thông tin phải trở nên linh hoạt và có khả năng thích ứng hơn theo sự phát triển của mạng lưới kỹ thuật số.

Xem đầy đủ báo cáo tại đây:

DOWNLOAD

Blog Topdev

Single Page App với React/Redux – những thách thức và giải pháp

Sơn-Tăng

Giữa những thay đổi chóng mặt của công nghệ, SPA (Single Page Application) vẫn luôn là một trong nhưng mối quan tâm hàng đầu của những nhà phát triển, đặc biệt là trong giới lập trình web, bên cạnh đòi hỏi về tính tiện dụng, khả năng tương thích, mở rộng cũng như hiệu suất đối với các frameworks, libs sử dụng để xây dựng SPA cũng ngày một khó khăn.

Được phát triển bởi Facebook, React như một làn gió mới giữa những frameworks, libs với cách tiếp cận có phần hơi cũ kỹ (như Angular). Kết hợp với Redux, một state management lib rất phổ biến, React/Redux trở thành một bộ “framework” kinh điển của dân SPA những năm gần đầy. Tuy nhiên, sử dụng bộ bí kiếp này không phải lúc nào cũng dễ dàng.

Với hơn 6 năm làm việc trong lĩnh vực phát triển phần mềm, kinh qua không ít những dự án outsourcing, nhưng đối với anh Tăng Hải Ngọc Sơn -Senior Engineering Manager tại KMS Technology luôn cảm thấy hào hứng với các dự án Single Page App. Bởi theo anh những dự án Single Page App không đơn thuần chỉ là những thách thức về mặt công nghệ, mà ngay cả những trải nghiệm về phía người dùng cũng là một thách thức không hề nhỏ.

Cùng lắng nghe những chia sẻ kinh nghiệm về những thách thức gặp phải khi sử dụng React/Redux Với Single Page Application từ anh Tăng Hải Ngọc Sơn.

Tuyển dụng lập trình viên React lương cao

Những giới hạn của công nghệ React/Redux 

Mặc dù được phát triển bởi một ông lớn trong ngành công nghệ – Facebook – và được đưa vào sử dụng trong nội bộ khá lâu trước khi phát hành dưới dạng mã nguồn mở, triết lý thiết kế của React hướng tới sự đơn giản. React chỉ cung cấp những API cần thiết để xây dựng phần “View” của ứng dụng, thay vì một bộ giải pháp hoàn chỉnh như Angular cung cấp. Đồng nghĩa với việc người dùng buộc phải kết hợp cùng những thư viện khác để tạo ra một bộ giải pháp hoàn chỉnh.

Việc kết hợp này không phải lúc nào cũng đưa đến kết quả tối ưu. Kể cả kết hợp cùng Redux, React/Redux chỉ cung cấp vừa đủ để xây dựng một SPA, không ràng buộc người dùng quá nặng vào những quy chuẩn có sẵn. Điều này vừa có lợi vừa có hại, bởi lẽ người dùng sẽ buộc phải tự quyết định về kiến trúc hệ thống cũng như những quy chuẩn lập trình để đảm bạo sản phẩm của mình không những vận hành tốt mà còn dễ bảo trì với chi phí thấp.

Ngoài ra, React mặc dù đã được cải thiện khá nhiều ở phiên bản mới nhất, tuy nhiên kích thước của thư viên này vẫn nằm ở mức khá lớn khiến cho việc sử dụng React để phát triển những ứng dụng nhỏ hoặc có những ràng buộc về mặt kích thước của gói front-end còn nhiều hạn chế.

Thách thức với việc làm quen công nghệ React/Redux 

React/Redux không phải là công nghệ quá mới mẻ, tuy nhiên số lượng những ứng dụng lớn sử dụng hai công nghệ này chưa nhiều cùng bởi triết lý thiết kế mở, đơn giản của React/Redux tạo ra không ít khó khăn cho các dự án phát triển mới khi sử dụng hai thư viện này.

Lập trình viên thường ít có kinh nghiệm sử dụng React/Redux trong một dự án phức tạp tuy nhiên buộc phải tự quyết định về kiến trúc hệ thống cũng như lựa chọn các thư viên liên quan để kết hợp thành một giải pháp hoàn chỉnh khiến cho kiến trúc của những dự án này thường không hiệu quả và khó bảo trì. Bên cạnh đó, mặc dù React và Redux đơn giản và không quá khó để sử dụng trong dự án, việc hiểu rõ phương thức hoạt động của React cũng là một thử thách với các lập trình viên.

Đặc biệt là khi React không tuân theo các cách tiếp cận trước đây của những framework nổi tiếng như Angular, EmberJS mà sử dụng một cách tiếp cận tương đối mới sử dụng JSX và Virtual DOM. Điều này khiến nhiều lập trình viên mới không khỏi bối rối và dẫn tới những sai lầm không đáng có trong quá trình lập trình, nhất là ở những ứng dụng với độ phức tạp cao và cần hiệu suất tốt.

Những lưu ý khi thiết kế Single Page app với React/Redux

  • Kiến trúc hệ thống

Khi thiết kế kiến trúc cho SPA sử dụng React/Redux, lập trình viên cần nắm rõ thiết kế Component Based của React. Dưới góc nhìn của React, toàn bộ ứng dụng sẽ là một cấu trúc cây khủng lồ với ngọn là “root” element được khai báo tại thời điểm khởi tạo. Toàn bộ những thay đổi ở node cha sẽ dẫn tới thay đổi tương ứng tại node con. Nếu không lưu ý điều này, kiến trúc của ứng dụng sẽ dễ tồn tại những nhánh quá lớn hoặc quá phức tạp dẫn tới hàng loạt các vấn đề về hiệu suất cũng như những lỗi tiềm ẩn. Một trong những lưu ý khác khi thiết kế kiến trúc khi sử dụng React/Redux là việc phân tách những nhóm logic để tăng tối đa khả năng sử dụng lại của từng Component cũng như đảm bảo tính bao đóng cho từng Component. Ngoài ra, khi thiết kế kiến trúc cho ứng dụng React/Redux, các kiến trúc “state” của ứng dụng cũng cần được đặt lên hàng đầu. Sử dụng một cây “global state” quá phức tạp sẽ dẫn tới những nặng nề không đáng có và ảnh hưởng tới hiệu suất của ứng dụng, tuy nhiên lạm dụng internal state của Component sẽ dẫn tới giảm thiểu khả năng dùng lại, kiểm thử cũng như bảo trì của ứng dụng.
Một lời khuyên dành cho những lập trình viên còn ít kinh nghiệm trong việc thiết kế kiến trúc với React/Redux là sử dụng những boilberplate  (https://github.com/xgrommx/awesome-redux#boilerplate) làm nền tảng trước khi tự tay xây dựng một kiến trúc cho riêng mình.

  • Đóng gói và triển khai

Việc đóng gói và triển khai React/Redux không có nhiều khác biệt lắm so với những SPA hiện nay. Về cơ bản, React/Redux SPA vẫn dựa vào các thư viên hỗ trợ đóng gói như webpack hay parcel. Một lưu ý nhỏ trong quá trình kiển khai React/Redux SPA là việc khởi tạo ứng dụng ban đầu sẽ tương đối tốn thời gian, do đó các lập trình viên nên sử dụng những kỹ thuật để giảm thiểu thời gian khởi tạo chẳng hạn như server-side rendering hoặc code-spliting nhằm hướng đến một trải nghiệm tốt hơn cho người dùng.

  • Kiểm thử ứng dụng React/Redux Single page app 

Với thiết kế đơn giản của React và Redux cho phép lập trình viên thực hiện unit testing khá dễ dàng nếu tuân thủ đúng những nguyên tắc chung về lập trình trong React. Hàng loạt thư viện có thể giúp cho việc testing ứng dụng React/Redux như Enzym, Jest đều tương đối dễ sử dụng và hiệu quả. Ngoài ra nếu theo đuổi triết lý “stateless” trong thiết kế, lập trình viên có thể dễ dàng kiểm tra tính đúng đắn của UI bằng cách so sánh html string output của từng component thay vì kiểm tra từng phần tử như trước kia. Điều này giúp cho automation testing trong ứng dụng React/Redux hiệu quả hơn rất nhiều vì gần như tất cả các thành phần của ứng dụng, từ “View” đến logic đều có thể thực hiện kiểm thử ở mức unit testing thay vì integration testing như trước đây.
Lập trình viên hoàn toàn có thể sử dụng những thư viên giả lập dom như JSDOM để thực hiện kiểm thử React/Redux thay vì lệ thuộc vào trình duyệt như các giải pháp khác nhờ vào thiết kế trừu tượng hoá thông qua Virtual Dom của React/Redux.
Một tips nhỏ dành cho lập trình viên là việc tạo ra integration test cases giữa các component với React/Redux cũng tương đối dễ dàng nếu ứng dụng có một kiến trúc tốt và tách biệt những “state” quan trọng của application vào bên trong cây “global state” bởi lúc này toàn bộ UI representation của ứng dụng có thể được tái tạo dễ dàng bằng cách thay đổi “global state” tương ứng. Redux Test Recorder (https://github.com/conorhastings/redux-test-recorder) là một trong những thư viện hỗ trợ tự động khởi tạo test case theo nguyên lý trên.

  • Những lựa chọn khác để xây dựng Single Page App

Bên cạnh sự phổ biến của React/Redux, lập trình viên cũng có thể lựa chọn sử dụng một trong những alternative khác cho việc xây dựng SPA. Từ những thư viên tương tự như React như Vue.JS hay Cycle.JS cho tới những bộ giải pháp hoàn chỉnh như Aurelia hay Angular.
Trong số những giải pháp thay thế trên, được sử dụng phổ biến nhất là Vue.JS và Angular. Vue.JS theo đuổi triết lý thiết kế gần giống như React khi chỉ cung cấp những API để xây dựng phần “View” của ứng dụng thay vì một bộ giải pháp hoàn chỉnh. Cả Vue.JS và React đều sử dụng Virtual DOM làm yếu tố chính trong việc cải thiện performance, khác biệt lớn nhất giữa hai thư viện có lẽ là React sử dụng JSX để xây dựng và thiết kế “View” trong khi Vue.JS vẫn sử dụng HTML-based template để xây dựng và thiết kế “View”. Có rất nhiều tranh cãi xung quanh cách tiếp cận nào là tốt hơn bởi mỗi tiếp cận đều có ưu nhược khác nhau, tuy nhiên quyết định sử dụng cách tiếp cận nào trong từng dự án vẫn phụ thuộc phần lớn và lập trình viên là tính chất của dự án.
Với Angular, khác biệt lớn nhất với React là Angular cung cấp một bộ giải pháp hoàn chỉnh để xây dựng SPA. Có thể nói, trong số cách framework nêu trên, Angular tương đối nặng nề và có phần cứng nhắc. Ảnh hưởng bởi triết lý thiết kế một giải pháp toàn diện, Angular cung cấp một bộ công cụ có thể sử dụng để xây dựng bất kỳ SPA nào mà không cần hoặc cần rất ít sự kết hợp của các thư viên khác. Điều này tạo ra một sự đồng nhất trong kiến trúc và cũng góp phần giúp việc tìm hiểu và áp dụng Angular có phần đơn giản hơn với những lập trình viên chưa có nhiều kinh nghiệm. Tuy nhiên, triết lý thiết kế này cũng tạo ra những rườm rà không đáng có trong quá trình phát triển bởi lẽ một dự án đều có những nhu cầu rất riêng.
Lời khuyên cho các lập trình viên khi lựa chọn giải pháp cho dự án của mình là đừng nên chỉ nhìn vào độ phổ biến của giải pháp hay những “mỹ từ” mà cộng đồng dành cho các thư viên, giải pháp. Thay vào đó, lập trình viên nên hiểu rõ nhu cầu của dự án mình cũng như những ràng buộc liên quan để lựa chọn một giải pháp phù hợp. Chẳng hạn một dự án tương đối đơn giản, không chứa quá nhiều logic phức tạp, việc sử dụng một bộ giải pháp cồng kềnh như Angular chưa chắc đã là một lựa chọn tốt. Bên cạnh đó, nếu đứng trước một dự án tương đối phức tạp, cần sự kết hợp của nhiều người và đa phần lập trình viên đều chưa có nhiều kinh nghiệm trong phát triển SPA, lựa chọn một giải pháp có nhiều tính tự do như React hay Vue có thể mang tới nhiều “khó khăn” hơn so với một giải pháp “tiêu chuẩn” như Angular hay Aurelia.

Bạn cảm thấy những chia sẻ của Sơn hữu ích và thú vị? Bạn muốn trở thành đồng nghiệp của Sơn tại KMS? Đừng chần chờ gì nữa, click và nộp hồ sơ tại đây ngay hôm nay.

Topdev Via Techtalk

Tham khảo thêm các vị trí tuyển ngành IT hấp dẫn

Làm thế nào để khởi nghiệp từ viết blog và tiến ra thế giới.

Xin chào, tôi tên là Thomas Bertrand, đến từ Pháp và đã sống tại Nhật Bản từ năm 2003. Tôi bắt đầu cửa hàng online Bento&Co vào 11/2008.

Chúng tôi bán hộp Bento và các dụng cụ làm bếp khác cho khách hàng tới từ hơn 100 quốc gia. Chúng tôi bán buôn lẫn bán lẻ.

Năm 2016, tôi lại mở một công ty mới, một SaaS cho người bán hàng online ở Nhật để quản lý việc vận chuyển, có tên là Ship&Co.

KHỞI NGUỒN Ý TƯỞNG VÀ NHỜ ĐÂU BẠN CÓ Ý TƯỞNG ĐÓ

Khi tôi chuyển tới Nhật Bản năm 2003, tôi đã nghĩ rằng tôi sẽ mở một công ty ở đây.

Sống ở một môi trường hoàn toàn khác biệt, ở một đất nước với văn hóa khác biệt, giá trị khác biệt khiến cho não bộ của bạn hoạt động hết công suất.

Năm 2005, tôi mở một blog về cuộc sống ở Kyoto và Nhật Bản. Tại thời điểm đó, tôi có 800 khách ghé thăm mỗi ngày (unique visitors), vì thế tôi nghĩ tôi có thể bắt đầu bán các sản phẩm Nhật Bản cho độc giả.

Khởi đầu Bento&Co cần rất nhiều đam mê và thời gian, công sức. Nhưng khi tôi nhìn lại, tôi thực sự rất quý thời gian đó và thực sự rất nhớ thời gian đó là đằng khác

Nhân tiên với những bạn chưa biết, Bento Boxes là hộp cơm trưa của người Nhật. Chúng là một vật rất phổ biến với học sinh và ngay cả người lớn ở Nhật.

Vào mùa thu 2008, mẹ tôi có nói rằng công thức làm bento được cho vào mục tiêu điểm trên tạp chí phụ nữ ở Pháp. Tại thời điểm đó chỉ có vài blogs về bento ở Pháp và Nhật và rất khó để mua chúng.

Phần lớn thời gian, tôi làm việc như một cây viết tự do cho các website công nghệ. Tôi cũng viết blog cá nhân về cuộc sống ở Kyoto. Tôi có thời gian nhưng lại không có nhiều tiền.

Có rất nhiều người mê văn hóa và ẩm thực Nhật Bản. Vì thế tôi chắc chắn rằng hộp bento sẽ bán chạy ở ngoài lãnh thổ Nhật Bản, đặc biệt là ở Pháp. Chỉ là trực giác cá nhân thôi, mặc dù tôi cũng có nghiên cứu trên mạng một chút và không tìm thấy hộp bento ở đâu ngoài eBay.

HÃY MÔ TẢ QUÁ TRÌNH BẠN GÂY DỰNG VÀ RA MẮT DOANH NGHIỆP

Cảm ơn blog và cả vợ của tôi, tôi đã kết nối với vài người bạn. Họ giúp tôi gây dựng và ra mắt bentoandco.com. Một người là graphic designer, và một người là developer. Họ giúp tôi dựng website và chỉnh sửa từ một theme Shopify. Hồi này Shopify còn đang ở Beta program. Miễn phí sử dụng nhưng họ sẽ thu tiền hoa hồng trên mỗi đơn bán được!

Để có được nguồn hàng, tôi tới một cửa hàng ở Kyoto và viết lên một mảnh giấy tên của hai nhà sản xuất. Tôi và vợ tôi đã liên hệ với họ, lấy catalog và đặt hàng sản phẩm trực tiếp từ họ (bằng tiền mặt). Chúng tôi đặt hàng không dùng máy fax trong năm đầu tiên, và đây thực sự là một thành tựu lớn ở Nhật Bản đấy!

Bắt đầu việc kinh doanh như thế này ở Nhật thật sự rất dễ dàng. Chỉ mất 10 phút ở văn phòng thuế và khoảng 3 tuần để dựng website. Tôi chụp ảnh 10 sản phẩm đầu tiên

Tôi không nhớ có trở ngại lớn nào không. Chỉ có sự phấn khích về việc mở một cửa hàng online và tôi viết blog về việc đó hàng ngày trước khi ra mắt.

LÀM CÁCH NÀO BẠN CÓ KHÁCH HÀNG ĐẦU TIÊN

Blog của tôi! Những độc giả trở thành những khách hàng đầu tiên

Tôi cũng có được khách hàng từ những blog khác. Có nhiều blog về khởi nghiệp, e-commerce và kinh doanh online ở Nhật và Pháp. Họ nói về câu chuyện của tôi và qua đó giúp tôi có được những khách hàng mới.

Ngược trở lại năm 2008, truyền thông xã hội không có vai trò lớn như bây giờ. Không phải Facebook hay Twitter, mà là các blog. Dễ để bắt đầu tại thời điểm đó hoặc ít nhất là tôi cảm thấy như vậy.

Order của tôi có được sau 30 phút mở shop.

Tôi có một người bạn làm ở lĩnh vực PR, và cô ấy cho tôi một danh sách các nhà báo để liên hệ. Tôi gửi email và sản phẩm mẫu cho họ và hiệu quả không ngờ. Vài tuần sau khi Bento&co ra mắt, một vài tờ báo và tạp chí lớn giới thiệu cửa hàng của tôi trên ấn bản của họ.

Chúng tôi có được vài đơn hàng mỗi ngày từ ngày đầu tiên. Sáu tháng sau, tôi nghỉ công việc freelance để tập trung toàn bộ cho Bento&co. Năm đầu tiên khá là bận rộn đấy!

Trong năm đầu, traffic đến chủ yếu từ SEO và các blog kinh doanh nói về chúng tôi.

Ngày nay thì chúng tôi dùng nhiều kênh marketing hơn. Chúng tôi dùngAdwords, Facebook (khoảng 85,000 fans), Instagram (không nhiều), và một chút affiliate marketing với các blog về bento khác

Ngoài ra, hàng năm kể từ năm 2009, chúng tôi tạo ra một cuộc thi Bento Quốc tế, ở đó chúng tôi đặt ra đề bài cho các followers tạo hộp Bento theo một chủ đề gì đó (Pasta Bento, Onigiri Bento, Spring Bento, etc). Người chiến thắng sẽ nhận được vé tới thăm chúng tôi ở Kyoto, Japan!

Ngày nay, gần như rất khó tạo được một cộng đồng mạnh, đam mê và kéo dài xoay quanh shop của bạn. Dễ để kiếm nhiều likes, fans và followers hơn 8 năm trước nhưng tôi nghĩ mọi người đều bị phân tán bởi truyền thông xã hội và bớt đam mê và tập trung vào một chủ đề nhất định như bento.

Blogs về bento từng có cả chục comments ở mỗi bài viết. Bây giờ, blogger đang chuyển dịch sang Instagram. Thay vì 20 comment chất lượng trên mỗi blog posts, họ có thể có 500 likes mỗi post Instagram và nhiều người tag bạn bè của họ trên Facebook. Nói chung mạng xã hội phải cực kì cực kì lớn mới mang lại đủ traffic tốt để mang lại hiệu quả kinh doanh. Điều đó thật đáng thất vọng.

BÂY GIỜ BẠN ĐANG Ở ĐÂU VÀ CÓ KẾ HOẠCH GÌ CHO TƯƠNG LAI

Chúng tôi mở website tiếng Anh năm 2010 và một phiên bản tiếng Nhật năm 2011. Công ty lớn dần và tới năm 2012, chúng tôi dời công ty tới vùng ngoại ô Kyoto, địa điểm tuyệt vời để mở cửa hàng.

Năm 2018, chúng tôi sẽ sản xuất và bán sỉ một số sản phẩm có giấy phép (licensed items) ở châu Âu với một số nhân vật nổi tiếng của Nhật Bản. Tôi không thể nói ngay được, hãy chờ thêm!

Năm 2018, có lẽ tôi sẽ tập trung phần lớn thời gian vào Ship&co.

Ship&co là một công cụ ship cho người bán hàng online.

Tôi đã thử Shippo và ShipStation vài năm trước và tôi thấy họ làm không tốt với các doanh nghiệp ở Nhật. Vì thế chúng tôi làm riêng một ứng dụng cho Bento&co và từ năm 2016, chúng tôi bắt đầu chạy beta cho các merchants khác ở Nhật Bản.

Ship&co là app “Made In Japan” đầu tiên phát hành trên Shopify Store. Chúng tôi cũng là đơn vị đầu tiên tương thích với FedEx ở châu Á Thái Bình dương. Chúng tôi cũng sẽ swoms thích hợp với 3 đơn vị vận tải lớn ở Nhật là Japan Post, Sagawa, và Yamato.

Và một tin tức rất hay nữa! Chúng tôi đã gọi vốn được 1 triệu USD từ một quỹ đầu tư mạo hiểm Nhật Bản để mở rộng Ship&co và Bento&co. 2018 sẽ bận rộn lắm đây.

CÔNG CỤ BẠN SỬ DỤNG?

Bento&co sử dụng Shopify.
Chúng tôi dùng PayPal và Stripe cho online payments.
Với B2B và chuyển khoản ngân hàng, chúng tôi dùng Transferwise.
Asana để quản lý công việc nội bộ Bento&co.
Slack cho đội Ship&co.
Zendesk cho Ship&co customers support.

CUỐN SÁCH, PODCASTS ẢNH HUỞNG TỚI BẠN

Tôi đang đọc marketing cơ bản Traction: How Any Startup Can Achieve Explosive Customer Growth.

Tôi cũng thích xem mấy phim như The Social Network và The Founder. Mỗi lần xem lại có thêm động lực

LỜI KHUYÊN CHO NHỮNG BẠN BẮT ĐẦU KHỞI NGHIỆP

Khởi đầu Bento&Co cần rất nhiều đam mê và thời gian, công sức. Nhưng khi tôi nhìn lại, tôi thực sự rất quý thời gian đó và thực sự rất nhớ thời gian đó là đằng khác

Bài lược dịch từ anh Lê Quang – Co-founder tại Eggcellent Design.

Bài gốc tại đây!

 

Cải thiện mối quan hệ giữa lập trình viên với sếp: dễ hay khó? (P1)

Trong hai bài viết gần đây tôi đấ chia sẻ những kinh nghiệm cá nhân về những điều mà lập trình viên và nhà quản lý không nên làm để tránh những căng thẳng không đáng có.

Trong bài này, tôi muốn nhấn mạnh những kết quả tích cực từ hai bài báo trước và những gì tôi đã học được từ chúng, và tôi cũng hy vọng rằng nó giúp ích được cho bạn.

Loạt vị trí Junior cực hot bạn không nên bỏ lỡ

Tôn trọng thời gian của nhau

Tôi nghĩ đây là bài học quý báu nhất mà tôi từng học. Tôn trọng thời gian nên được thực hiện từ cả hai phía để có một mối quan hệ tốt.

Đối với nhà quản lý, điều này có nghĩa là tránh giao các công việc mang tính thách đố đối nhằm giữ cho lập trình viên luôn bận rộn. Điều đó có nghĩa là không đặt ra các deadlines phi thực tế, không yêu cầu quá nhiều thời gian của developers trong một ngày, một tuần hay một tháng nào đó.

Đối với các developers, điều này không liên quan đến công việc chuyên môn nhưng nó vô cùng quan trọng. Bởi vì, bên cạnh công việc họ còn có cuộc sống riêng và các mối quan hệ xã hội khác, và nó thực sự cần được tôn trọng.

Cùng nhau phát triển

Theo tôi, đây cũng là một yếu tố khá quan trọng đối với cả hai!

Đối với các nhà quản lý, điều này có nghĩa là họ phải luôn hiểu rõ về yêu cầu công việc và khả năng cũng như trách nhiệm mà mỗi lập trình viên đang phụ trách. Điều đó có nghĩa là, cần có sự sắp xếp công việc một cách hợp lý đúng với những nguyện vọng và chuyên môn của họ, nhưng đồng thời cũng trao cho những lập trình viên cơ hội được thử thách bản thân ở những vị trí khác ( mà học chưa bao giờ đảm nhiệm )

Đối với lập trình viên, điều này có nghĩa là trước hết cần tuân thủ các yêu cầu công việc thể. Nó không chỉ giúp nhà quản lý hiểu được công việc của lập trình viên và nắm được những vấn đề mà các lập trình viên đang gặp phải và có những sự hỗ trợ phù hợp.

Tích cực hỗ trợ lẫn nhau

Đối với các nhà quản lý, nó có thể đơn giản là thể hiện uy tín của họ đối với một công việc, đảm bảo tiến độ, sử dụng hợp lý ngân sách. Nói một cách đơn giản là giao tiếp với developer (và điều này giúp mở rộng mối quan hệ với bất kì nhân viên nào) rằng họ đang cùng đồng hành cùng với developers. Các developers có thể cảm thấy không an toàn, ngay cả khi họ có cái tôi lớn, vì vậy vài lời khen ngợi thật lòng về những nỗ lực của họ sẽ mang lại những hiệu quả bất ngờ. Bạn đang giúp các developers cảm thấy thành công hơn và giúp họ có thêm động lực hoàn thành tốt công việc.

Đối với các developers, bạn có lẽ nên cân nhắc đến việc gửi feedback bạn đến sếp của bạn. Lần cuối bạn cảm ơn sếp vì đã giao cho bạn một công việc tuyệt vời là khi nào? Tôi có một vài mối quan hệ công việc, và hiện giờ chúng đã trở thành bạn bè, cần có rất nhiều sự trao đổi để đạt được điều đó. Tôi không mong nghe câu ” Làm tốt lắm! ” nếu tôi không nói ” Tôi thích làm việc ở đây” hoặc “Đó là một dự án thú vị! Cho tôi thêm một dự án khác nhé!”.

Góp ý dựa mang tính chất xây dựng

Chủ đề này là phần tiếp theo của chủ đề trên.

Theo ý kiến ​​cá nhân của tôi, đó là một nghệ thuật. Về bản chất, tôi là người hướng nội và tôi thấy các bối cảnh trong đời thực rất khó giải quyết. Tôi phải chiến đấu rất nhiều để vượt qua những cảm xúc đó.

Cho dù bạn là nhà lãnh đạo hay lập trình viên, hãy thể hiện sự quan tâm lẫn nhau. Đứa con mới sinh của tôi có thể là một đề tài để chia sẽ với nhau. Ghi chép những điều bạn nói chuyện với người khác nếu bạn cảm thấy khó nhớ.

Thật khó để nhìn thấy mối quan hệ 1:1 giữa cuộc sống và công việc lập trình nhưng tôi đảm bảo bạn có ít nhất một mối quan hệ. Khi bạn cảm nhận được sự kết nối với những người bạn đang làm việc chung, sự khác biệt sẽ rất lớn.

Source: dev.to

 

  Cải thiện mối quan hệ giữa lập trình viên với sếp: dễ hay khó? (P2)

Tìm việc IT lương cao, đãi ngộ tốt trên TopDev ngay!

React Pattern: Tập trung PropTypes

Tránh lặp lại chính bản thân bằng cách tập trung PropTypes

Có ba cách phổ biến để xử lý các loại trong React: PropTypes, TypeScript và Flow. Bài này sẽ viết về PropTypes, hiện đang là loại phổ biến nhất.

Từ khi PropTypes cung cấp các cảnh báo trong thời gian chạy, nó rất hữu ích vì càng cụ thể có thể:

Component chấp nhận một đối tượng? Khai báo hình dạng của đối tượng.
Prop chỉ chấp nhận một danh sách cụ thể của các giá trị? Sử dụng một trong số đó .
Array nên chứa các con số? Sử dụng một trong số các array.
Bạn thậm chí có thể khai báo các loại của riêng bạn. AirBnB cung cấp nhiều PropTypes bổ sung.

UserDetails.propTypes = {
 user: PropTypes.shape({
   id: PropTypes.number.isRequired,
   firstName: PropTypes.string.isRequired,
   lastName: PropTypes.string.isRequired,
   role: PropTypes.oneOf(['user','admin'])
};

Ví dụ về khai báo PropType

Trong các ứng dụng thực với các đối tượng lớn, điều này nhanh dẫn đến rất nhiều code. Đó là một vấn đề, bởi vì trong React, bạn thường sẽ vượt qua cùng một đối tượng tới nhiều thành phần. Việc lặp lại các chi tiết này trong nhiều file component sẽ phá vỡ nguyên tắc DRY (không lặp lại chính mình). Lặp đi lặp lại chính nó tạo ra vấn đề bảo trì.

Giải quyết bằng cách nào? Tập trung vào PropTypes.

Đây là cách tích hợp PropTypes

Cá nhân tôi thích tập trung PropTypes trong /types/index.js.

// types/index.js
import { shape, number, string, oneOf } from 'prop-types';

export const userType = shape({
  id: number,
  firstName: string.isRequired,
  lastName: string.isRequired,
  company: string,
  role: oneOf(['user', 'author']),
  address: shape({
    id: number.isRequired,
    street: string.isRequired,
    street2: string,
    city: string.isRequired,
    state: string.isRequired,
    postal: number.isRequired
  });
});

Ở trên tôi đang dùng tên đưa trên dòng 2 để rút ngắn các tờ khai.

Và đây là cách tôi sử dụng PropType đã đưa ra ở trên:

import React from 'react';
import {userType} from './types';

function User({ user }) {
  return (
    <div>
      <h1>{user.firstName} {user.lastName}</h1>
    </div>
  )
}

User.propTypes = {
  user: userType.isRequired
};

export default User;

Tôi nhập vào tên để lấy một tham chiếu đến khai báo PropType được xuất ra trên dòng 2 và đặt nó vào dòng 13.

Benefits:

  1. PropType tập trung hoàn toàn đơn giản hóa việc khai báo PropType của component. Dòng 13 chỉ đề cập đến PropType tập trung, vì vậy nó rất dễ đọc.
  2. Kiểu tập trung chỉ khai báo hình dạng, vì vậy bạn vẫn có thể đánh dấu cột theo yêu cầu khi cần.
  3. Không có thêm bản sao / dán. Nếu hình dạng đối tượng thay đổi sau đó, bạn sẽ có cập nhật.

Đây là một ví dụ làm việc trên CodeSandbox.

 

Tín dụng bổ sung: Tạo PropTypes của bạn

Cuối cùng, hãy xem xét viết một số code tùy chỉnh để tạo các khai báo PropType của bạn từ code phía máy chủ của bạn. Ví dụ, nếu API của bạn được viết bằng ngôn ngữ đánh máy mạnh như C # hay Java, hãy xem xét tạo các khai báo PropType của bạn như là một phần của quá trình xây dựng API phía máy chủ của bạn bằng cách đọc hình dạng các lớp phía máy chủ của bạn. Bằng cách này bạn không phải lo lắng về việc đồng bộ hóa các PropTypes phía máy khách và API code phía máy chủ của bạn.

Lưu ý: Nếu bạn biết về một dự án thực hiện việc này với bất kỳ ngôn ngữ nào phía máy chủ, vui lòng trả lời trong các nhận xét và tôi sẽ thêm một liên kết ở đây.

Chỉnh sửa: Bạn có thể chuyển đổi JSON thành PropTypes bằng cách sử dụng transform.now.

Tóm lại

  1. Khai báo PropTypes một cách rõ ràng nhất có thể, vì vậy bạn sẽ biết khi nào mắc phải lỗi.
  2. Tập trung PropTypes để tránh lặp lại.
  3. Nếu bạn đang làm việc với một ngôn ngữ đánh máy mạnh mẽ trên máy chủ, hãy xem xét việc tạo ra các tham số PropTypes của bạn bằng cách đọc code từ phía máy chủ. Điều này đảm bảo PropTypes của bạn khớp với các kiểu máy chủ.
Tham khảo thêm các vị trí tuyển dụng React lương cao

Hướng dẫn bắt đầu GraphQL với Node.js (Phần 2)

Hướng dẫn bắt đầu GraphQL với Node.js (Phần 1)

Phần 1 đã đã đề cập đến một số thuật ngữ khác nhau và một số tính năng kỹ thuật trong GraphQL. Tiếp theo sẽ là những thuật ngữ còn lại.

Aliases

Hãy tưởng tượng một tình huống mà chúng ta cần phải chọn hai người dùng khác nhau. Làm thế nào để chúng tôi xác định từng người dùng? Với GraphQL, bạn không thể truy vấn trực tiếp cho cùng một trường với các đối số khác nhau. Hãy cùng chứng tỏ nó.

Query

query getUsersWithAliasesError($userAID: Int!, $userBID: Int!) {
    user(id: $userAID) {
        name
        age
        gender
    },
    user(id: $userBID) {
        name
        age
        gender
    }
}

Variables

{ 
    "userAID":1,
    "userBID":2
}

Output

Lỗi này rất đặc tả và thậm chí sử dụng aliases. Hãy sửa lại nó.

query getUsersWithAliases($userAID: Int!, $userBID: Int!) {
    userA: user(id: $userAID) {
        name
        age
        gender
    },
    userB: user(id: $userBID) {
        name
        age
        gender
    }
}

Variables

{ 
    "userAID":1,
    "userBID":2
}

Output

Bây giờ chúng ta có thể xác định chính xác mỗi người dùng cùng các lĩnh vực của họ.

Fragment

Các truy vấn ở trên không phải là xấu, nhưng nó có một vấn đề; chúng ta đang lặp lại các trường tương tự cho cả userA và userB. Chúng ta có thể tìm thấy một cái gì đó sẽ làm cho ra các truy vấn DRY. GraphQL bao gồm các đơn vị có thể tái sử dụng được gọi là các fragment cho phép bạn xây dựng các tập các trường và tiếp theo gom chúng trong các truy vấn mà bạn cần.

Query

query getUsersWithFragments($userAID: Int!, $userBID: Int!) {
    userA: user(id: $userAID) {
        ...userFields
    },
    userB: user(id: $userBID) {
        ...userFields
    }
}

fragment userFields on Person {
  name
  age
  gender
}

Variables

{ 
    "userAID":1,
    "userBID":2
}

Output

Chúng tôi đã tạo ra một fragment được gọi là userFields chỉ có thể được áp dụng cho type Person và sử dụng nó để lấy người dùng.

Directives

Directive cho phép chúng tôi tự động thay đổi cấu trúc và hình dạng của các truy vấn mà sử dụng các biến. Tại một số điểm chúng ta có thể skip hoặc gom một số trường mà không thay đổi schema. Hai directive sẵn có là:

  • @include(if: Boolean) Chỉ bao gồm trường này trong kết quả nếu đối số đúng.
  • @skip(if: Boolean) Bỏ qua trường này nếu đối số đúng.

Let us say we want to retrieve users of gender ‘F’ but skip their age and include their id fields. We use variables to pass in the gender and use directives for the skipping and inclusion functionalities.

Hãy nói rằng chúng tôi muốn truy xuất người dùng giới tính ‘F’ nhưng bỏ qua tuổi và các trường id của họ. Chúng tôi sử dụng các biến để tìm ra giới tính và dùng các directive cho  chức năng skipping và inclusion.

Query

query getUsers($gender: String, $age: Boolean!, $id: Boolean!) {
  users(gender: $gender){
    ...userFields
  }
}

fragment userFields on Person {
  name
  age @skip(if: $age)
  id @include(if: $id)
}

Variables

{
  "gender": "F",
  "age": true,
  "id": true
}

Output

Mutations

Cho đến nay chúng tôi đã giải quyết các thắc mắc; hoạt động để retrieve dữ liệu. Mutation là hoạt động chính thứ hai trong GraphQL nhằm tạo, xoá và cập nhật dữ liệu. Hãy tập trung vào một số ví dụ về cách thực hiện đột biến. Ví dụ: chúng tôi muốn cập nhật người dùng có id==1 và thay đổi độ tuổi của họ theo tên và độ tuổi và trả lại chi tiết user mới.

Chúng tôi sẽ cập nhật schema để bao gồm một loại mutation và cũng cập nhật root resolve với các chức năng resolve liên quan.

// Add mutations
var schema = buildSchema(`
  ...
  type Mutation {
    updateUser(id: Int!, name: String!, age: String): Person
  }
`);
...
var updateUser = function({id, name, age}) {  // Update a user and return new user details
  users.map(user => {
    if(user.id === id) {
      user.name = name;
      user.age = age;
      return user;
    }
  });
  return users.filter(user=> user.id === id) [0];
}
...

var root = { 
  user: getUser,
  users: retrieveUsers,
  updateUser: updateUser  // Include mutation function in root resolver
};

Giả sử đây là những chi tiết người dùng đầu.

Sau mutation để cập nhật user, chúng tôi nhận được các chi tiết của user mới.

Query

mutation updateUser($id: Int!, $name: String!, $age: String) {
  updateUser(id: $id, name:$name, age: $age){
    ...userFields
  }
}
fragment userFields on Person {
  name
  age
  gender
}

Variables

{
  "id": 1,
  "name": "Keavin",
  "age": "27"
}

#Conclusion

Cho đến nay, chúng ta đã biết đến các khái niệm cơ bản về GraphQL với một số ví dụ  phức tạp. Hầu hết các ví dụ này cho thấy rõ sự khác biệt giữa GraphQL và REST đối với người dùng đã tương tác với REST.

TopDev via Scotch

VNG đồng hành cùng sinh viên thời đại mới khám phá công nghệ Fintech

Sáng ngày 20/01 sự kiện “Fintech – The next big thing”, đã diễn ra tại Up Co-working Space (Đại học Bách Khoa HCM).  Các bạn sinh viên đã không giấu được niềm hứng khởi của mình trước những kiến thức mới toanh trong lĩnh vực Fintech. Dưới sự dẫn dắt của các diễn giả đến từ đội ngũ phát triển sản phẩm ZaloPay, các chủ đề về “blockchain”, “mobile payment” dường như trở nên thú vị và nhận được nhiều sự quan tâm từ các bạn sinh viên hơn, thể hiện rõ nhất qua phần đặt câu hỏi trực tiếp. Tham gia cùng sự kiện, các bạn còn tỏ ra vô cùng hào hứng khi trải nghiệm ứng dụng thanh toán di động ZaloPay với máy bán nước tự động.

Điểm lại những khoảnh khắc đáng nhớ từ sự kiện “FinTech – The Next Big Thing”

Sự kiện thu hút được sự quan tâm của đông đảo các bạn sinh viên
Sự kiện thu hút được đông đảo sự quan tâm của sinh viên
Trải nghiệm thử Zalo Pay mua nước ngọt từ máy bán hàng tự động
Anh Lê Đức Anh – Senior Software Engineer, ZaloPay.
Anh Nguyễn Hoài An – Head of ZaloPay Product
Hào hứng trải nghiệm thử Zalo Pay dưới sự hướng dẫn của các chuyên gia đến từ Zalo Pay

TopDev Via LifeAtVNG

Làm chủ CSS Flexbox trong 5 phút

Trong bài này, bạn sẽ được học những điều cơ bản về CSS Flexbox, đây là một kỹ năng cần thiết cho các developer và designer web trong vài năm trở lại đây.

Chúng ta sẽ sử dụng navbar làm ví dụ, vì đây là trường hợp điển hình cho Flexbox. Điều này sẽ giới thiệu cho bạn các thuộc tính được sử dụng nhiều nhất của mô-đun, trong khi loại bỏ những tính năng không quan trọng.

Bố cục Flexbox đầu tiên

Hai thành phần chính của bố cục Flexbox là containeritem.

Đây là HTML cho ví dụ của chúng ta, chứa một container với ba mục:

<nav class="container">
  <div>Home</div>
  <div>Search</div>
  <div>Logout</div>
</nav>

Trước khi biến chúng thành bố cục Flexbox, các phần tử </ div> sẽ được xếp chồng lên nhau như sau:

Tôi đã thêm một chút styling, nhưng điều đó không có gì với Flexbox.

Để biến nó thành một bố cục Flexbox, chúng ta chỉ cần cung cấp cho container thuộc tính CSS sau:

.container {
    display: flex;
}

Điều này sẽ tự động định vị các vật phẩm độc đáo theo trục ngang.

Nếu bạn muốn kiểm tra code thực tế, bạn có thể đi qua Scrimba playground.

Justify-content và Align-item

Justify-contentalign-item là hai thuộc tính CSS giúp chúng tôi phân phối các mục trong vùng chứa. Họ kiểm soát cách các item được định vị dọc theo main axiscross axis.

Trong trường hợp này (nhưng không phải luôn luôn) main axis là ngang và chéo thẳng đứng:

Trong bài viết này, chúng tôi sẽ chỉ xem xét justify-content, như tôi đã tìm thấy để được sử dụng này nhiều hơn nhiều so với align-items. Tuy nhiên, trong khóa học sắp tới của tôi, tôi sẽ được thông qua cả hai tài sản cụ thể.

Hãy tập trung tất cả các mục dọc theo main axis bằng cách sử dụng justify-content:

.container {
    display: flex;
    justify-content: center;
}

Hoặc chúng ta có thể đặt nó vào space-between, sẽ thêm không gian giữa các mục, như thế này:

.container {
    display: flex;
    justify-content: space-between;
}

Dưới đây là các giá trị bạn có thể đặt cho justify-content::

  • flex-start (default)
  • flex-end
  • center
  • space-between
  • space-around
  • space-evenly

Tôi khuyên bạn nên tìm hiểu những điều này và xem cách họ chơi trên trang. Điều đó sẽ cho bạn một sự hiểu biết đúng đắn về khái niệm này.

Kiểm soát single item

Chúng tôi cũng có thể kiểm soát các single items. Giả sử chúng ta ví dụ muốn giữ hai mục đầu tiên ở phía bên trái, nhưng di chuyển nút logout sang bên phải.

Để làm được điều này, chúng ta sẽ sử dụng kỹ thuật cũ để thiết lập lề cho auto.

.logout {
    margin-left: auto;
}

Nếu chúng ta muốn cả search và logout sẽ được đẩy lên phía tay phải và cần thêm margin-left thay mục tìm kiếm.

.search {
    margin-left: auto;
}

Nó sẽ đẩy mục tìm kiếm về phía tay phải, lần nữa sẽ đẩy mục logout bằng:

The flex property

Cho đến nay, chúng tôi chỉ có mặt hàng có fixed-width. Nhưng liệu nếu chúng ta muốn họ response? Để đạt được điều đó chúng ta có một thuộc tính được gọi là flex. Nó làm cho nó dễ dàng hơn nhiều so với của việc sử dụng tỷ lệ phần trăm.

Chúng tôi đơn giản chỉ là nhắm mục tiêu tất cả các mục và cung cấp cho họ một giá trị flex là  1.

.container > div {
    flex: 1;
}

Như bạn thấy, nó kéo dài các mục để lấp đầy toàn bộ container.

Trong nhiều trường hợp, bạn có thể muốn một trong các mục để chiếm thêm extra width, và do đó chỉ đặt một nếu chúng có chiều rộng linh hoạt. Ví dụ: chúng ta có thể làm cho mục search mất hết không gian thêm:

.search {
    flex: 1;
}

Trước khi kết thúc bài viết này, tôi muốn đề cập đến rằng thuộc tính flex là một tính năng viết tắt ba tính chất: flex-growflex-shrink và flex-basis.

TopDev via Freecodecamp

Tìm kiếm số liệu cho các dự án JavaScript hàng đầu

Tìm kiếm số liệu cho các dự án JavaScript hàng đầu

Mỗi 6 giờ sáng, có một đoạn code nhỏ được lưu trữ ở đâu đó trong các cloud. Khi tỉnh dậy, nó chạm vào GitHub API, và sau đó “back to sleep” cho đến ngày hôm sau.

Sau đó nó sẽ lấy dữ liệu GitHub, biên dịch lại số lượng star cho một dãy các dự án JavaScript được lựa chọn trước, và sau đó lưu giữ các star trong cơ sở dữ liệu BestOfJS.org.

Và sau đó, mỗi năm một lần, chúng tôi lấy tất cả dữ liệu tích lũy này và sử dụng nó để tìm ra các dự án JavaScript phổ biến nhất năm, còn được biết đến là Rising JavaScript Stars.

Vue.js là số một (Again)

Giống như năm ngoái, Vue.js là JavaScript project đã đánh giá được nhiều star nhất

Điều này không có nghĩa là đây là dự án phổ biến nhất với tổng số đánh giá (vẫn thua React với 85.589 star), nhưng nó sẽ tăng nhanh nhất trong hai năm kế tiếp. Và ở mức đó, Vue sẽ vượt qua React trong vòng sáu tháng!

Sức mạnh của React là hệ sinh thái

Mặc dù thành công của Vue, React cũng đang rất thành công.

Trong khi React không thêm các star với tỷ lệ khá giống nhau (như dự kiến), sự thành công thực sự nằm ở hệ sinh thái của React:

Năm dự án hàng đầu đã tích lũy được tổng cộng 67.9 nghìn star, so với 44.4k cho hệ sinh thái Vue.

Ngoài ra, tất cả các này giấy phép là đằng sau nó, rào cản cuối cùng để thông qua React có thể đã giảm xuống. Vì vậy, nó sẽ được thú vị để xem làm thế nào mọi thứ tiến triển trong năm 2018.

Parcel có nhiều đánh giá hơn trong một tháng so với hầu hết các dự án được thực hiện cả năm

Bạn sẽ nghĩ rằng khi nhắc đến các bảng xếp hạng hàng năm, việc tung ra dự án vào tháng 12 sẽ làm giảm rất nhiều cơ hội đặt chân vào top 20.

Về Parcel: nó đã có thể có được hơn 14 nghìn star trong vòng chưa đầy một tháng, và ở vị trí top 12 dự án phổ biến nhất vào năm 2017.

https://twitter.com/devongovett/status/938084464743165952

Đáng ngạc nhiên hơn: Parcel đã bổ sung thêm nhiều star trong một tháng so với Webpack trong một năm!

Thực tế, sự thành công của Parcel đã khiến chúng tôi rất ngạc nhiên vì thậm chí không có cơ sở dữ liệu của chúng tôi và phải tranh giành để thu thập dữ liệu từ các nguồn khác (nhờ bạn bè của chúng tôi tại Porter.io!).

Dự án yêu thích Prettier

Trong khi mọi người đang bận rộn trong việc tạo ra Yet-Another-Front-End-Framework. người dùng Prettier đã quyết định chấp nhận những thách thức thực sự: tabs vs spaces.

Và câu trả lời của họ là: ai quan tâm? Với Prettier, bạn có thể sử dụng space, tab, hoặc poop emojis *, và Prettier sẽ chăm sóc định dạng code của bạn đúng cách trên tiết kiệm.

Không có gì ngạc nhiên khi Prettier đứng ở vị trí thứ 7. Trên thực tế, chúng tôi đã biến nó thành dự án không chính thức trong năm.

Cuộc chiến về front-end đã kết thúc

Mặc dù các cheap shot ở các front-end framework, sự thật là không có nhiều trong số họ nữa.

Di chuyển qua top 3 (Vue, React và Angular) và bạn nhanh chóng tiếp cận các dự án nhỏ hơn như Preact, Hyperapp và dva.

Mặc dù tất cả đều có những thành tích riêng nhưng rõ ràng chúng không thuộc cùng loại với big three trong lĩnh vực phổ biến và hệ sinh thái.

Và chắc chắn, các framework được thiết lập nhiều như Ember vẫn là các lựa chọn thay thế, nhưng họ không có cùng động lực nữa.

Kết quả là front-end equation có ít thông số so với trước đây, đó là tin tốt cho các CTO ở mọi nơi. Ít nhất, cho đến khi có đợt bầu chọn tiếp của JavaScript!

Tuyển lập trình viên Javascript lương upto 2000USD

“VS” trong “VS code” có nghĩa “Very Successful”

VS Code đã thể hiện sự cạnh tranh của mình không chỉ để trở thành JavaScript IDE hàng đầu của năm, mà còn là dự án phổ biến đứng thứ 6.

Điều này xác định kết quả về State of JavaScript trước đây, cho thấy rằng VS Code hiện là trình biên tập số 1 đối với các lập trình viên JavaScript (và điều này đã khiến tôi chuyển từ Sublime Text sang VS Code).

Câu chuyện thành công của VS Code rất thú vị bởi vì nó không phải là hoàn hảo: Giao diện người dùng có sự nhồi nhét của Microsoft-y, điều này dường như gây nhiễm cho tất cả các sản phẩm, nó đi kèm tài nguyên lớn và khiến khởi tạo rất chậm.

Tuy nhiên, sử dụng VS Code trong một thời gian ngắn, và những sai sót này đã dừng lại một cách đáng kể. Thay vào đó, các tính năng giống như IDE, khả năng mở rộng, và các bản cập nhật thường xuyên chuyển thành một tăng năng suất trực tiếp mà làm cho nó khó tưởng tượng bằng cách sử dụng bất cứ điều gì khác.

Vậy điều gì sẽ xảy ra tiếp?

Nhìn chung, Rising Star năm nay sẽ thật yên tĩnh. Không có rắc rối lớn, người chơi chiếm ưu thế trong hầu hết các thể loại … có thể đây là điều kết thúc cho JavaScript?

Thậm chí nếu điều này xảy ra, không có nghĩa là JavaScript sẽ ngừng hoạt động.

Đâu là xu hướng được mong đợi

Trend #1: GraphQL All the Things!

GraphQL có thể không phải là mainstream nhưng bây giờ nó đã xây dựng nên một nền tảng vững chắc cho các thư viện, dịch vụ và các framework có thể khiến một dự án dựa trên GraphQL phát triển trong năm tới.

Năm 2017, Gatsby (sử dụng GraphQL như là một phần của data layer) đã thể hiện khá tốt , đứng ở vị trí 25 trong bảng xếp hạng chung

Trend #2: Thời đại của Reason

Tại sao bạn nên quan tâm đến một dự án mà chỉ đạt 2.1k đánh giá star năm 2017? Vì Reason được tạo ra cùng với những người siêu thông minh mua lại React và GraphQL, nói cách khác là bộ phận nguồn mở của Facebook.

Lý do là một ngôn ngữ biên dịch cho JavaScript, bản thân nó đang hình thành xu hướng lớn trong những năm tới.

Trend #3: Công cụ tốt hơn, và nhiều hơn thế

Khi những thành công của Prettier, Parcel và VS Code xuất hiện, các developer không chỉ quan tâm đến code: họ cũng quan tâm đến những thứ giúp bạn viết code.

Điều này thể hiện, nhưng chỉ cần duyệt qua một vài bài đăng để làm một “Framework XYZ Developer” và trung tâm dữ liệu của ngành này vẫn còn nhiều thứ hơn “what” nhiều hơn “how”.

Hãy theo dõi

Nếu bạn chưa fix JavaScript, hãy kiểm tra BestOfJS.org hàng ngày để cập nhật số liệu thống kê. Bạn cũng có thể kiểm tra điều tra State of JS cho số lượng JavaScript lớn.

Và cuối cùng, chúng tôi cũng đang lên kế hoạch đưa ra một bản tin tuần, sẽ tự động gửi bảng xếp hạng về số liệu thống kê mới nhất, vì vậy hãy đăng ký nếu điều đó làm bạn thấy thú vị.

TopDev via Freecodecamp

Tham khảo các vị trí tuyển dụng IT nhiều công ty hot tại đây

Hiểu hơn HTTPS với bồ câu đưa thư

Cryptography là một topic khó hiểu. Nó cần các áp dụng toán học để chứng minh. Trừ khi bạn đang thực sự phát triển các hệ thống cryptography, phần lớn sự phức tạp đó không cần thiết để hiểu những gì đang diễn ra ở mức cao.

Alice, Bob và … chim bồ câu?

Bất kỳ hoạt động nào bạn làm trên Internet (đọc báo, mua đồ trên Amazon, tải lên 1 bức hình ảnh) đi xuống để gửi và nhận tin nhắn đến và từ máy chủ.

Thật khó vì nó có một chút trừu tượng nên chúng ta hãy tưởng tượng rằng những thông điệp đó được cung cấp bởi bồ câu đưa thư. Tôi biết rằng điều này có vẻ rất tùy ý, nhưng tôi tin rằng HTTPS hoạt động theo cùng một cách, mặc dù nhanh hơn rất nhiều.

Thay vì nói về máy chủ, client và hacker, chúng ta sẽ nói về Alice, Bob và Mallory. Nếu đây không phải là lần đầu tiên bạn tìm hiểu các khái niệm về cryptography, bạn sẽ nhận ra những cái tên đó vì chúng được sử dụng rộng rãi trong các tài liệu kỹ thuật.

Naive communication đầu tiên

Nếu Alice muốn gửi tin nhắn cho Bob, cô ấy sẽ gắn thông điệp trên chân bồ câu và gửi cho Bob. Bob nhận được thông báo, đọc nó.

Nhưng điều gì sẽ xảy ra nếu Mallory chặn bồ câu của Alice và thay đổi thông điệp? Bob sẽ không có cách nào biết được thông điệp đã được gửi bởi Alice đã bị sửa đổi trong chuyển hàng.

Đây là cách HTTP hoạt động. Nhưng tôi sẽ không gửi các chứng chỉ ngân hàng của tôi qua HTTP và cũng không nên.

Secret code

Sẽ ra sao nếu Alice và Bob xảo quyệt. Họ đồng ý rằng họ sẽ viết thư của họ bằng cách sử dụng secret code. Họ sẽ chuyển mỗi chữ bằng 3 vị trí trong bảng chữ cái. Ví dụ D → A, E → B, F → C. Thông điệp “secret messagt” sẽ là “pbzobq jbppxdb”.

Nếu Mallory chặn được chim bồ câu, cô ấy sẽ không thể thay đổi thông điệp thành một thông tin có ý nghĩa và cũng không hiểu những gì họ nói, bởi vì cô ấy không biết code. Nhưng Bob chỉ đơn giản có thể áp dụng code ngược lại và giải mã thông điệp từ A → D, B → E, C → F. Văn bản mật mã “pbzobq jbppxdb” sẽ được giải mã lại thành “secret message”.

Success!

Đây được gọi là cryptography về mật mã đối xứng, bởi vì nếu bạn biết cách mã hóa tin nhắn cũng như cách giải mã nó.

Code tôi mô tả ở đây thường được gọi là Caesar cipher. Trong cuộc sống thực, chúng ta sử dụng code giả mạo và phức tạp hơn, nhưng ý tưởng chính là.

Làm thế nào để quyết định key?

Cryptography về mật mã đối xứng rất an toàn nếu không có ai ngoài người gửi và người nhận biết chìa khóa đã được sử dụng. Trong mật mã Caesar, chìa khóa là một sự bù đắp cho bao nhiêu chữ cái mà chúng ta dịch chuyển từng chữ. Trong ví dụ của mình, tôi sử dụng một offset cho 3, nhưng cũng có thể sử dụng 4 hoặc 12.

Vấn đề xảy ra nếu Alice và Bob không gặp nhau trước khi gửi tin nhắn với pigeon, họ sẽ không có cách nào để thiết lập một key an toàn. Nếu họ gửi chính bản tin, Mallory sẽ chặn thông điệp và tìm hiểu về key. Điều này sẽ cho phép Mallory đọc hoặc thay đổi thông điệp như mong muốn trước và sau khi Alice và Bob bắt đầu mã hóa tin nhắn.

Đây là ví dụ điển hình của Man in the Middle Attack và cách duy nhất để tránh nó là thay đổi hệ thống mã hóa tất cả lại.

Pigeons dưa boxes

Vì vậy, Alice và Bob đã đưa ra một hệ thống tốt hơn. Khi Bob muốn gửi tin nhắn cho Alice, cô ấy sẽ làm theo các bước sau:

  • Bob gửi một chú chim bồ câu tới Alice mà không có bất kỳ tin nhắn nào.
  • Alice gửi con chim bồ câu trở lại mang một cái hộp với khóa mở, nhưng giữ chìa khoá.
  • Bob đưa tin nhắn vào box, khóa lại và gửi hộp cho Alice.
  • Alice nhận được box, mở nó và đọc tin nhắn.

Bằng cách này Mallory không thể thay đổi thông điệp bằng cách chặn pigeon, bởi vì cô ấy không có chìa khóa. Quá trình tương tự được theo khi Alice muốn gửi cho Bob một thông báo.

Alice và Bob chỉ sử dụng thuật ngữ được biết đến là asymmetric key cryptography. Nó được gọi là bất đối xứng, bởi vì ngay cả khi bạn có thể mã hóa một tin nhắn (khóa hộp) bạn không thể giải mã nó (mở khóa).
Trong bài phát biểu, box được biết đến như là public key và chìa để mở nó được gọi là private key.

Cách để tin tưởng the box?

Nếu quan tâm bạn có thể nhận thấy rằng chúng tôi vẫn gặp vấn đề. Khi Bob nhận được box đó thì làm thế nào anh ta có thể chắc chắn nó đến từ Alice và Mallory không chặn pigeon và thay đổi hộp với cái mà cô ta có chìa khóa?

Alice quyết định rằng cô sẽ ký tên vào box, khi Bob nhận hộp kiểm tra chữ ký và biết rằng đây là box đến từ Alice.

Một số bạn có thể đặt ra câu hỏi, làm thế nào mà Bob nhận ra chữ ký của Alice ở đâu. Alice và Bob cũng gặp phải vấn đề này, vì vậy họ quyết định rằng, thay vì Alice ký tên vào hộp, Ted sẽ ký tên vào hộp.

Vậy Ted là ai? Anh ta là một người rất nổi tiếng đáng tin cậy. Ted đã ký tên cho tất cả mọi người và mọi người tin tưởng rằng anh ta sẽ chỉ ký tên vào box của những người hợp pháp.

Ted sẽ chỉ ký một box của Alice nếu anh ta chắc chắn rằng người yêu cầu chữ ký là Alice. Vì vậy, Mallory không thể có được Alice box ký bởi Ted thay mặt cho cô ấy vì Bob sẽ biết rằng box bị tráo bởi vì Ted chỉ ký các box sau khi xác minh danh tính của họ.

Ted về mặt kỹ thuật thường được gọi là Cơ quan chứng nhận và trình duyệt bạn đang đọc bài viết này đi kèm với các chữ ký của các Cơ quan chứng nhận khác nhau.

Ted về mặt kỹ thuật thường được gọi là Certification Authority và browser bạn đang đọc bài viết này đi kèm với các chữ ký của các Certification Body khác nhau.

Vì vậy, khi bạn kết nối với trang web lần đầu tiên bạn tin cậy hộp vì bạn tin rằng Ted sẽ cho bạn biết rằng hộp này là hợp pháp hay không.

Boxes quá nặng

Alice và Bob bây giờ có một hệ thống đáng tin cậy để giao tiếp, nhưng họ nhận ra rằng pigeon carrying box chậm hơn so với những pigeon chỉ mang theo tin nhắn.

Họ quyết định rằng họ sẽ sử dụng box method (asymmetric cryptography) chỉ để chọn key để mã hóa tin nhắn bằng cách sử dụng mật mã đối xứng với (nhớ Caesar cipher).

Bằng cách này, họ nhận được sự tốt nhất của cả hai thế giới. Độ tin cậy của asymmetric cryptography và hiệu quả của symmetric cryptography.

Trong thế giới thực, không có pigeon chậm, tuy nhiên việc mã hóa các tin nhắn sử dụng asymmetric cryptography chậm hơn so với sử dụng symmetric cryptography, vì vậy chúng ta chỉ sử dụng nó để trao đổi các encryption key.

TopDev via Freecodecamp

30+ công cụ phát triển ứng dụng Android chuyên nghiệp ( Phần 2)

30+ công cụ phát triển ứng dụng Android chuyên nghiệp

Trong phần 1, tác giả đã đề cập đến một vài công cụ giúp phát triển ứng dụng Android, bài viết này sẽ đề cập những công cụ tiếp theo.

Android Wifi ADB

Với công cụ tuyệt vời này, bạn có thể chạy ứng dụng Android của bạn từ Android Studio trên thiết bị bằng Wifi. Bạn không cần phải giữ thiết bị của mình gắn vào máy tính qua cáp và có thể tận hưởng trải nghiệm phát triển và thử nghiệm các ứng dụng không dây.

FindBugs

Plugin này có thể chứng minh là khá hữu ích để phát hiện lỗi phổ biến của Java ngay tại thời điểm phát triển. Trong khi xây dựng các ứng dụng, chúng tôi có xu hướng giới thiệu một số lỗi nhỏ và ở đó bị bắt sau đó trong sản xuất.

Drawable Optimizer

Một số nội dung hình ảnh được sử dụng trong một ứng dụng Android có xu hướng đóng góp rất nhiều vào kích thước của APK. Tuy nhiên, plugin gradle tiện lợi này có thể tối ưu hóa những hình ảnh này và giảm kích thước APK kết quả đáng kể cho bạn.

Scalpel

Công cụ sáng tạo của Jake Wharton có thể cho phép bạn trải nghiệm hình ảnh 3D trực quan với bố cục cho toàn bộ ứng dụng của bạn. Người mới bắt đầu có thể thấy nó thực sự hấp dẫn vì nó có thể cung cấp cho họ một cái nhìn hoàn toàn mới về cách bố trí của bạn.

BlockCanary

Một thư viện giám sát hiệu suất mạnh mẽ khác có thể giúp bạn phát hiện khi luồng UI trong ứng dụng của bạn bị khóa đủ lâu và làm cho ứng dụng của bạn tụt xuống. Nó rất dễ dàng để thiết lập và hoạt động khá giống với LeakCanary.

NimbleDroid

Một công cụ tuyệt vời để kiểm tra ứng dụng về rò rỉ bộ nhớ và các vấn đề trước khi xuất bản trên Play Store. Tool này hoạt động khá tốt và tự động kiểm tra các luồng người dùng khác nhau của ứng dụng và tìm ra sự cố tiềm ẩn và các vấn đề quan trọng cần được chú ý ngay lập tức.

Methods Count

Ai không thích thêm các thư viện tuyệt vời vào dự án của họ và tăng tính năng của nó? Nhưng bạn luôn phải suy nghĩ về 65K vấn đề. Công cụ tuyệt vời này có thể có ích vì nó có thể cung cấp cho bạn một ý tưởng rõ ràng về số phương pháp mỗi thư viện thêm vào ứng dụng của bạn.

Android Tool for Mac

Nếu bạn là nhà phát triển Android và sử dụng máy Mac thì công cụ nhỏ này có thể giúp bạn nhận được bug report, screenshot, video recording của ứng dụng mà bạn đang gỡ lỗi chỉ với một cú nhấp chuột từ máy tính.

DevKnox

Có một số lỗ hổng bảo mật ẩn bên trong ứng dụng mà hầu hết ta không nhận thức được và có thể mất nhiều thời gian và nỗ lực để hiểu các khía cạnh quan trọng khác của bảo mật và thực hiện các ứng dụng bảo mật. Nhưng công cụ tuyệt vời này có thể giúp bạn phát hiện các lỗ hổng bảo mật dễ như sử dụng trình kiểm tra chính tả trong IDE của bạn.

JSONSchema2POJO

Tất cả chúng ta phải đối mặt với điều này nhiều lần khi chúng ta có một JSON và tạo một POJO tương đương từ nó. Điều này thật sự khá nhàm chán và tốn thời gian nhưng đây là nơi này công cụ tiện lợi có thể có ích. Tất cả bạn cần làm là dán JSON của bạn và nó sẽ tự động tạo ra tất cả các lớp POJO cho bạn.

ADB IDEA

Plugin tuyệt vời này dành cho Android Studio có thể thực hiện được rất nhiều việc và giúp bạn tăng tốc phát triển Android mỗi ngày một cách đáng kể. Bạn có thể dễ dàng, start, , restart, thậm chí xóa dữ liệu, gỡ bỏ cài đặt ứng dụng ngay từ IDE tiết kiệm rất nhiều thời gian.

Key Promoter

Tất cả chúng ta đều biết phím tắt rất hữu ích, nhưng có rất nhiều lối tắt cho rất nhiều hành động khác nhau mà làm cho ta rất khó nhớ. Đây là plugin biến toàn bộ trò chơi của các phím tắt trở nên dễ dàng hơn nhiều.

Fabric

Bạn có lẽ đã biết được sức mạnh và tuyệt vời của Fabric. Nó cung cấp một bộ công cụ để giúp bạn xây dựng, triển khai và phát triển ứng dụng của bạn nhanh hơn với ít nỗ lực nhất. Hãy thử nó nếu bạn chưa có.

ClassyShark

Với ClassyShark, bạn có thể kiểm tra bất kỳ APK Android nào để tìm ra nhiều thông tin có giá trị từ nó, như các lớp học, tài nguyên, kê khai, phụ thuộc, dex count và nhiều hơn nữa. Nó có thể cung cấp cho bạn một ý tưởng về những gì các ứng dụng khác đang làm và có lẽ họ đang làm nó như thế nào.

APK DeGuard

Đây là một trong những chương trình de-obfuscator tốt và chính xác nhất cho các ứng dụng Android. Nó sử dụng machine learning để phân tích các ứng dụng khác nhau và đảm bảo nó mang lại kết quả tốt nhất có thể mọi lúc. Nó đã giúp tôi khá nhiều trong việc kiểm tra một số ứng dụng và hiểu rõ cách họ đang triển khai các tính năng nhất định.

Codota

Khá thường xuyên chúng tôi gặp khó khăn trong khi phát triển một cái gì đó mới và cần phải kiểm tra một số ví dụ mã nhanh chóng từ StackOverflow hoặc Github. Nhưng công cụ này tuyệt vời có thể cho phép bạn làm điều đó mà không cần rời khỏi IDE của bạn.

Material Design Icon Generator

Plugin này dành của Android Studio cho phép bạn truy cập vào tất cả Material Design Icon và tùy chỉnh chúng ngay từ chính IDE của bạn, tiết kiệm rất nhiều thời gian trong khi phát triển ứng dụng.

TopDev via Blog.aritraroy

Tìm việc làm android lương cao tại đây

Gatsby.js: Cách thiết lập và sử dụng React Static Site Generator

Gatsby.js: Cách thiết lập và sử dụng React Static Site Generator

Gatsby là một static site generator cho React đã phát hành phiên bản chính đầu tiên vào tháng trước. Đó là một công cụ không chỉ giúp bạn xây dựng các dự án (hoặc trang web) mà còn tuyên bố rằng các trang web đó nhanh chóng hoạt động. Nếu bạn quyết định sử dụng Gatsby, bạn sẽ được tận hưởng sức mạnh của các công nghệ web mới nhất như React.js, Webpack,…

Có rất nhiều mô hình hiện đại mà Gatsby quan tâm đến developer của nó đằng sau hậu trường để bắt đầu xây dựng và chạy dự án của họ. Một điều thú vị khác về Gatsby mà tôi thích là hệ sinh thái data plugin ngày càng phát triển. Nó cho phép một nhà phát triển lấy dữ liệu trực tiếp vào một ứng dụng được tạo ra bằng Gatsby.

Tuyển dụng lập trình viên React lương cao

Dưới đây là một số lợi ích của việc sử dụng Gatsby:

  • HTML code được tạo ra phía máy chủ
  • Dễ dàng mở rộng theo hệ sinh thái plugin
  • Hệ thống xây dựng dựa trên Webpack được cấu hình sẵn
  • Được tối ưu hóa tốc độ. Gatsby chỉ tải các phần quan trọng, để trang web của bạn tải nhanh nhất có thể. Sau khi nạp, Gatsby tìm nạp trước tài nguyên cho các trang khác để việc nhấp vào trang web cho thấy sự nhanh chóng vô cùng.
  • Định tuyến tự động dựa trên cấu trúc thư mục của bạn. (không cần thư viện định tuyến/định hướng riêng)

Nếu bạn biết tính chất của React, bạn có thể bắt đầu ngay với Gatsbyjs bằng cách đọc hướng dẫn này. Tôi không yêu cầu bạn phải nâng cao với React nhưng chỉ có sự quen thuộc với các khái niệm của nó. Nếu bạn muốn làm mới kiến thức của bạn hoặc tìm hiểu thêm về nó, tôi khuyên bạn nên làm theo các liên kết:

Cài đặt Gatsby CLI

Chúng tôi sẽ sử dụng npm để cài đặt công cụ đầu tiên và cơ bản mà chúng ta cần phải thiết lập bất kỳ dự án Gatsby. Bạn cũng có thể sử dụng yarn. Hãy thực hiện lệnh này:

npm install --global gatsby-cli

Bạn có thể cần phải thêm sudo vào đầu lệnh nếu nó đưa ra một lỗi về sự cho phép

Để bắt đầu một trang mới, hãy trực tiếp tới dự án bạn muốn. Chọn một vị trí trên hệ thống nơi bạn có thể lưu trữ tất cả hoặc ứng dụng trong giai đoạn ban đầu của họ và sau đó trong terminal:

gatsby new first-gatsby-site

Bạn có thể đặt tên dự án bất cứ điều gì bạn thích, tôi đặt tên vì sự ngắn gọn.

Gatsby.js: Cách thiết lập và sử dụng React Static Site Generator

Hoàn tất việc cài đặt và thiết lập dự án. Sau đó, thay đổi thư mục vừa tạo. Chạy gatsby develop từ dòng lệnh để xem trang web của bạn đang chạy ở http://localhost:8000.

Gatsby.js: Cách thiết lập và sử dụng React Static Site Generator

Trong cửa sổ trình duyệt của bạn, ứng dụng Gatsby.js mặc định sẽ như sau:

Gatsby.js: Cách thiết lập và sử dụng React Static Site Generator

Để lệnh chạy vì nó cho phép Hot Reloading. Bây giờ bất kỳ thay đổi nào chúng tôi thực hiện cho dự án của chúng tôi sẽ được phản ánh trực tiếp, mà không làm mới trang.

Hiện tại, ứng dụng của chúng tôi có hai trang. Do đó, việc định tuyến tối thiểu đã được thực hiện. Trước khi tìm code và sửa đổi nó, chúng ta cần phải hiểu cấu trúc dự án. Sau đó, bạn có thể sử dụng nó bằng cách thao tác nó trong các dự án trong tương lai.

Tìm hiểu kĩ về Project Structure

Gatsby.js: Cách thiết lập và sử dụng React Static Site Generator

Mỗi dự án Gatsby ít nhất chứa những tệp này. Bạn có thể quen thuộc với một số ví dụ như node_modules, public trực tiếp, được phục vụ khi triển khai. Nó cũng chứa package.json, , chứa siêu dữ liệu của bất kỳ ứng dụng Javascript hiện đại.

Trọng tâm và mối quan tâm chính của chúng tôi nằm trong thư mục src và tệp gatsby-config.js. Các tệp này chứa siêu dữ liệu và các thông tin cần thiết khác về ứng dụng hiện tại.

Bên trong src/ có hai tiểu thư mục: layouts/ và pages/.

Các layouts/ chứa thêm hai tệp:index.css và index.js. Đây là những điểm khởi đầu của ứng dụng của chúng tôi.

import React from "react";
import PropTypes from "prop-types";
import Link from "gatsby-link";
import Helmet from "react-helmet";

import "./index.css";

const Header = () => (
  <div
    style={{
      background: "rebeccapurple",
      marginBottom: "1.45rem"
    }}
  >
    <div
      style={{
        margin: "0 auto",
        maxWidth: 960,
        padding: "1.45rem 1.0875rem"
      }}
    >
      <h1 style={{ margin: 0 }}>
        <Link
          to="/"
          style={{
            color: "white",
            textDecoration: "none"
          }}
        >
          Gatsby
        </Link>
      </h1>
    </div>
  </div>
);

const TemplateWrapper = ({ children }) => (
  <div>
    <Helmet
      title="My First Gatsby Site"
      meta={[
        { name: "author", content: "amanhimself" },
        { name: "keywords", content: "sample, something" }
      ]}
    />
    <Header />
    <div
      style={{
        margin: "0 auto",
        maxWidth: 960,
        padding: "0px 1.0875rem 1.45rem",
        paddingTop: 0
      }}
    >
      {children()}
    </div>
  </div>
);

TemplateWrapper.propTypes = {
  children: PropTypes.func
};

export default TemplateWrapper;

Phần Header chứa các kiểu và đánh dấu hiện như là tiêu đề của ứng dụng của chúng tôi. Nó phản ánh trên mỗi trang bởi TempplateWrapper là thành phần bố cục chính trong ứng dụng. Điều này có nghĩa là thành phần này có thể được sử dụng để hiển thị trình đơn điều hướng (mà chúng ta sẽ làm trong một thời) hoặc footer.

Link tag bạn đang nhìn thấy là cách Gatsby cho phép khách truy cập điều hướng từ trang này sang trang khác. Thư viện react-helmet nhằm mục đích gắn các thông tin header trong HTML. Nó đang được tạo ra bởi JSX. Bạn có thể đọc về thư viện hữu ích, mới bắt đầu hữu ích này trên tài liệu chính thức ở đây.

Chú ý đến {children()}. Đây là một function thực hiện JSX code để xác định vị trí chính xác cho các thành phần con hiển thị.

Trang Application chính

Các pages/ thư mục liên quan của chúng tôi chứa phần còn lại của các trang xây dựng ứng dụng của chúng tôi. Chúng là các React component. Hãy xem tệp index.js bên trong thư mục này hiện đang đóng vai trò trang chính của ứng dụng của chúng tôi.

import React from "react";
import Link from "gatsby-link";

const IndexPage = () => (
  <div>
    <h1>Hi people</h1>
    <p>Welcome to your new Gatsby site.</p>
    <p>Now go build something great.</p>
    <Link to="/page-2/">Go to page 2</Link>
  </div>
);

export default IndexPage;

Tương tự, bạn sẽ tìm thấy code trong page-2.js. Nếu trong cửa sổ trình duyệt, chúng ta cố gắng điều hướng tới trang thứ hai, hãy chú ý URL của trang khi tải.

Gatsby.js: Cách thiết lập và sử dụng React Static Site Generator

Nó giống như tên file. Chúng tôi cũng sử dụng Link tag từ Gatsby để điều hướng trở lại trang chủ.

Hãy thêm một trang khác vào trang của chúng tôi. Trong thư mục pages, hãy tạo một tệp page-3.j mới.

import React from "react";
import Link from "gatsby-link";

const ThridPage = () => (
  <div>
    <h1>Third Page</h1>
    <p>This is my first Gtasby site</p>
    <Link to="/page-2/">Back to Page 2</Link>
    <br />
    <Link to="/">Go back to the homepage</Link>
  </div>
);

export default ThridPage;

Bây giờ chúng ta hãy thêm liên kết vào trang mới của chúng tôi vào trang chủ. Mở tệp index.js:

import React from "react";
import Link from "gatsby-link";

const IndexPage = () => (
  <div>
    <h1>Hi people</h1>
    <p>Welcome to your new Gatsby site.</p>
    <p>Now go build something great.</p>
    <Link to="/page-2/">Go to page 2</Link>
    <br />
    <Link to="/page-3">New Page!</Link>
  </div>
);

export default IndexPage;

Gatsby.js: Cách thiết lập và sử dụng React Static Site Generator

Điều này hiển thị chính xác trên trang. Chú ý tệp 404.js trong thư mục. Tệp này được hiển thị khi không tìm thấy URL mong muốn. Bạn có thể đọc thêm thông tin trong tài liệu Gatsby chính thức.

Bây giờ để làm cho mọi thứ một chút thú vị hơn. Hãy thêm một menu điều hướng trong phần Header của chúng ta.

Thêm Menu điều hướng

Mở layouts/index.js và bên trong thành phần Header, thêm đoạn code sau:

const Header = () => (
  <div
    style={{
      background: "rebeccapurple",
      marginBottom: "1.45rem"
    }}
  >
    <div
      style={{
        margin: "0 auto",
        maxWidth: 960,
        padding: "1.45rem 1.0875rem"
      }}
    >
      <h1 style={{ margin: 0 }}>
        <Link
          to="/"
          style={{
            color: "white",
            textDecoration: "none"
          }}
        >
          Gatsby
        </Link>
        <ul style={{ listStyle: "none", float: "right" }}>
          <li style={{ display: "inline-block", marginRight: "1rem" }}>
            <Link
              style={{
                color: "white",
                textDecoration: "none",
                fontSize: "x-large"
              }}
              to="/"
            >
              Home
            </Link>
          </li>
          <li style={{ display: "inline-block", marginRight: "1rem" }}>
            <Link
              style={{
                color: "white",
                textDecoration: "none",
                fontSize: "x-large"
              }}
              to="/page-2"
            >
              Page 2
            </Link>
          </li>
          <li style={{ display: "inline-block", marginRight: "1rem" }}>
            <Link
              style={{
                color: "white",
                textDecoration: "none",
                fontSize: "x-large"
              }}
              to="/page-3"
            >
              Page 3
            </Link>
          </li>
        </ul>
      </h1>
    </div>
  </div>
);

Nếu bạn lưu tệp, kết quả sẽ được phản ánh ngay trên trang chủ và mỗi trang.

Gatsby.js: Cách thiết lập và sử dụng React Static Site Generator

Tệp Configuration

https://gist.github.com/amandeepmittal/dfbefb5a09c93f1816198d9db253dd6c

Tệp cuối cùng của mối quan tâm của chúng tôi là gatsby-config.js trong thư mục gốc. Tệp này có thể chứa siêu dữ liệu của trang web và thông tin bổ sung như các plugin mà chúng tôi cài đặt bằng lệnh npm. Tuy nhiên, phạm vi sử dụng và mối quan tâm của họ chỉ với một dự án được tạo ra bằng cách sử dụng Gatsby CLI. Theo mặc định, plugin gatsby-plugin-react-helmet được cài đặt.

Một danh sách đầy đủ các bổ sung được liệt kê ở đây.

Triển khai các Static site

Chúng tôi đã phát hiện ra một static site tối thiểu phục vụ cho mục đích đi bộ. Bước cuối cùng mà tôi muốn tập trung là triển khai. Tôi sẽ triển khai bằng GitHub Pages.

Để triển khai một dự án trên các trang GitHub hãy chắc chắn rằng thư mục làm việc hiện tại của bạn được khởi tạo như một kho lưu trữ git và lưu trữ trên GitHub. Nếu tốt, chúng ta hãy thêm một mô-đun gọi là gh-pages.

npm install --save-dev gh-pages

Thêm phần triển khai trong package.json:

"scripts": {
  "deploy": "gatsby build --prefix-paths && gh-pages -d public",
}

Trong gatsby.config.js thêm path prefixing của repo như:

module.exports = {
  siteMetadata: {
    title: `Gatsby Default Starter`
  },
  pathPrefix: `/first-gatsby-site`,
  plugins: [`gatsby-plugin-react-helmet`]
};

Xem tài liệu chính thức về path prefixing.

Bây giờ từ thiết bị đầu cuối của bạn:

npm run deploy

TopDev via Freecodecamp

Tham khảo vị trí việc làm IT khác hấp dẫn

30+ công cụ phát triển ứng dụng Android chuyên nghiệp ( Phần 1)

30+ công cụ phát triển ứng dụng Android chuyên nghiệp

Trong bài viết này, tôi sẽ chia sẻ một số công cụ tốt nhất để nâng cao hiệu suất phát triển và xây dựng các ứng dụng Android tốt hơn. Cá nhân tôi đã sử dụng các công cụ này trong một thời gian ngay bây giờ và đã tìm thấy chúng được thực sự hữu ích.

Những công cụ này đã giúp tôi tiết kiệm rất nhiều thời gian quý giá từ cuộc sống phát triển hàng ngày và cũng đã giúp tôi tạo các ứng dụng tốt hơn và chất lượng được nâng lên đáng kể.

Vì vậy, không lãng phí thời gian nữa, chúng ta hãy  khám phá các công cụ mới và tuyệt vời để phát triển các ứng dụng Android.

Tuyển android không cần kinh nghiệm

FlowUp

An amazing tool for Android which can help you to track the overall performance of your app and get in-depth insights on various key performance metrics like FPS, memory usage, CPU usage, disk usage and much more from your live production app.

Công cụ tuyệt vời dành cho Android giúp bạn theo dõi hiệu suất chung của ứng dụng và các thông tin chi tiết về các số liệu như FPS, memory usage, CPU usage, disk usage và nhiều thông số khác từ ứng dụng.

Stetho

Một debugging platform mã nguồn mở mạnh mẽ dành cho Android, được phát triển bởi Facebook. Công cụ này giúp gỡ lỗi cho các ứng dụng Android gốc đơn giản như gỡ lỗi các trang web bằng cách sử dụng Developer Tool của Chrome và giúp thực hiện nhiều hành động khác nhau như kiểm tra cơ sở dữ liệu View hierarchy, inspect SQLite database, giám sát hoạt động của mạng,…

JRebel for Android

Tất cả chúng ta đều cảm thấy thất vọng khi nhìn chằm chằm vào màn hình như một kẻ ngốc và chờ đợi Gradle xây dựng để hoàn thiện. Tuy nhiên, công cụ tuyệt vời từ JRebel giúp giải quyết bằng cách cải thiện thời gian xây dựng và làm cho việc phát triển ứng dụng Android và gỡ lỗi gần như là thời gian thực.

Gradle Please

Nếu bạn đang sử dụng Gradle làm build system trong Android Studio, thì bạn có thể thêm bất kỳ thư viện bên ngoài nào trong dự án của mình chỉ bằng một dòng code. Nhưng làm thế nào bạn có được dòng đó một cách nhanh chóng và dễ dàng? Đây là công cụ để xử lí việc đó.

Android Asset Studio

Bộ sưu tập tuyệt vời các công cụ đơn giản và dễ sử dụng để tạo các loại biểu tượng khác nhau (launcher, thông báo, phím tắt chung, biểu tượng ứng dụng) mà bạn cần khi thiết kế và phát triển ứng dụng Android.

LeakCanary

LeakCanary là một công cụ  phát hiện việc rò rỉ bộ nhớ mạnh mẽ được phát triển bởi Square, làm cho công việc khó khăn và mất thời gian để phát hiện bộ nhớ rò rỉ dễ dàng hơn rất nhiều. Sau khi thiết lập, nó sẽ tự động bắt đầu cung cấp cho bạn các thông báo bất cứ khi nào bộ nhớ rò rỉ xảy ra trong ứng dụng của bạn với dấu vết ngăn xếp hoàn chỉnh để giúp bạn khắc phục nó.

DryRun

Công cụ hữu ích và sáng tạo cho phép bạn thử nghiệm bất kỳ thư viện Android nào lưu trữ trực tuyến chỉ trong vài giây. Công cụ này làm cho bạn dễ dàng tìm ra các thư viện khác nhau mà chúng tôi phát hiện hàng ngày mà không cần nỗ lực nhiều.

Slides Code Highlighter

Khi các developer phải thuyết trình, các cuộc thảo luận công nghệ hoặc chỉ cần đưa ra một đoạn code ngắn cho nhà phát triển khác. Và đây là nơi mà công cụ tiện lợi này của Roman Nurik có ích giúp bạn biến các đoạn code chán thành một đoạn code được làm nổi bật và có thể trình bày được.

InstaBug

Tôi đã sử dụng công cụ này khá lâu và phải thừa nhận rằng nó đã thay đổi đáng kể cách người dùng đưa feedback cho tôi. Giờ đây, họ có thể chia sẻ ảnh chụp màn hình, ghi âm và video, nhật ký chi tiết và nhiều thứ khác để giúp tôi xác định và khắc phục lỗi dễ dàng.

Takt

Một thư viện nhỏ mà bạn có thể sử dụng để kiểm tra FPS của ứng dụng trong khi debugging nó. Tốt hơn là tìm lỗi trong giai đoạn phát triển và không cho phép người dùng của bạn có cơ hội trải nghiệm không tốt khi sử dụng ứng dụng.

Android Debug Database

Công cụ tuyệt vời thay đổi hoàn toàn cách bạn gỡ lỗi cơ sở dữ liệu và chia sẻ preference trong ứng dụng Android của bạn. Bây giờ bạn có thể xem tất cả dữ liệu, chỉnh sửa chúng, xóa và chạy các truy vấn SQL trong một giao diện người dùng clean và đẹp.

Source Tree

Một công cụ đơn giản và tuyệt vời để biến Git trở nên tuyệt vời. Bạn có thể hình dung tất cả các thay đổi, commit, nhánh và không bao giờ phải viết một lệnh duy nhất trong dòng lệnh một lần nữa. Nó cũng có thể được rất hữu ích cho tất cả những người mới bắt đầu ra có những người có xu hướng bị lẫn lộn với sự rộng lớn của Git.

GenyMotion

Trở lại trong những ngày mà trình mô phỏng của Android trở nên chậm chạp, GenyMotion là trình giả lập duy nhất được lựa chọn cho tất cả các Android developer. Nhưng qua thời gian, GenyMotion đã mở rộng khá nhiều từ chỉ là một mô phỏng cho một nền tảng hoàn chỉnh để phát triển ứng dụng tiên tiến, thử nghiệm và triển khai.

Vysor

Nếu bạn là người không thích phát triển ứng dụng trên trình mô phỏng nhưng muốn dễ dàng, bạn phải kiểm tra Vysor xem nó cho phép bạn nhân bản thiết bị thực của bạn với máy tính. Hơn nữa, bạn cũng có thể hiển thị trình diễn ứng dụng trực tiếp trên màn hình TV lớn và máy chiếu dễ dàng khi sử dụng công cụ này.

Còn tiếp…

TopDev via Blog.aritraroy

Thấu hiểu các JavaScript Closure: Phương pháp tiếp cận thực tiễn

Thấu hiểu các JavaScript Closure: Phương pháp tiếp cận thực tiễn

Học một ngôn ngữ mới yêu cầu đến một loạt các bước, để thành thạo cần có sự kiên nhẫn, thực hành, sai lầm và rút ra kinh nghiệm.

Một số developer sẽ có đủ kiến thức để cung cấp các tính năng theo nhu cầu của khách hàng, nhưng phải mất nhiều thời gian hơn để trở thành developer tốt.

Một developer tốt là người cần có những kiến thức nền tảng về ngôn ngữ

Hôm nay chúng ta hãy nhìn sâu vào JavaScript closure và hy vọng rằng kiến thức bạn học sẽ có lợi trong các dự án.

Tuyển dụng Javascript lương cao mới nhất

JavaScript closure là gì?

JavaScript Closure là khi một inner function có quyền truy cập tới các thành viên của outer function (lexical scope) ngay cả khi thực thi bên ngoài phạm vi của outer function.

Vì vậy, chúng tôi không thể đủ khả năng để nói về closure trong khi bỏ ra các functions và scope.

Scope trong JavaScript

Scope đề cập đến mức độ hiển thị của một biến được xác định trong một chương trình. Các cách để tạo ra scope trong JavaScript là thông qua: try-catch blocksfunctionslet keyword  với } trong số những thứ khác. Chúng tôi chủ yếu có hai biến thể: global scope và local scope.

var initialBalance = 0 // Global Scope

function deposit (amount) {
  /**
   * Local Scope
   * Code here has access to anything declared in the global scope
   */
  var newBalance = parseInt(initialBalance) + parseInt(amount)
  return newBalance
}

Mỗi function trong JavaScript tạo ra local scope riêng của nó khi được khai báo.

Điều này có nghĩa là bất cứ điều gì được khai báo bên trong local scope của function thì không thể truy cập từ bên ngoài. Xem xét minh hoạ dưới đây:

var initialBalance = 300 // Variable declared in the Global Scope

function withdraw (amount) {
  var balance // Variable declared in function scope

  balance = parseInt(initialBalance) - parseInt(amount)
  return balance
}
console.log(initialBalance) // Will output initialBalance value as it is declared in the global scope
console.log(balance) // ReferenceError: Can't find variable: balance

Lexical Scope

JavaScript Lexical Scope được xác định trong giai đoạn biên soạn. Nó xác định scope của một biến để nó chỉ có thể được gọi / tham khảo từ bên trong khối mã mà nó được định nghĩa.

Một function được khai báo bên trong một function block xung quanh có quyền truy cập vào các biến trong lexical scope của function xung quanh.

var initialBalance = 300 // Global Scope

function withdraw (amount) {
  /**
   * Local Scope
   * Code here has access to anything declared in the global scope
   */
  var balance = parseInt(initialBalance) - parseInt(amount)

  const actualBalance = (function () {
    const TRANSACTIONCOST = 35
    return balance - TRANSACTIONCOST /**
     * Accesses balance variable from the lexical scope
     */
  })() // Immediately Invoked Function expression. IIFE

  // console.log(TRANSACTIONCOST) // ReferenceError: Can't find variable: TRANSACTIONCOST
  return actualBalance
}

Gọi một inner function bên ngoài enclosing function của nó và vẫn duy trì quyền truy cập vào các biến trong enclosing function (lexical scope) tạo ra một JavaScript Closure.

function person () {
  var name = 'Paul'  // Local variable

  var actions = {
    speak: function () {
    //  new function scope
      console.log('My name is ', name) /**
      * Accessing the name variable from the outer function scope (lexical scope)
      */
    }
  } // actions object with a function

  return actions /**
  * We return the actions object
  * We then can invoke the speak function outside this scope
  */
}

person().speak() // Inner function invoked outside its lexical Scope

Closure cho phép sử dụng một giao diện cộng đồng trong khi cùng một lúc ẩn và bảo vệ các xâm phạm từ phạm vi bên ngoài.

Một số mẫu thiết kế JavaScript sử dụng closure.

Module Pattern

Một trong những mô hình được triển khai tốt này là module pattern, mô hình này cho phép bạn mô phỏng: private, public và privileged member.

var Module = (function () {
  var foo = 'foo' // Private Property

  function addToFoo (bam) { // Private Method
    foo = bam
    return foo
  }

  var publicInterface = {
    bar: function () { // Public Method
      return 'bar'
    },
    bam: function () { // Public Method
      return addToFoo('bam') // Invoking the private method
    }
  }

  return publicInterface // Object will contain public methods
})()

Module.bar() // bar
Module.bam() // bam

Từ module pattern mô tả ở trên, chỉ các phương pháp công khai và thuộc tính trong đối tượng trả về sẽ có sẵn bên ngoài ngữ cảnh thực thi của closure.

Tất cả các thành viên private sẽ vẫn tồn tại khi bối cảnh thực hiện của họ được bảo vệ nhưng bị che giấu khỏi outside scope.

Thêm ví dụ về Closures

Khi chúng ta vượt qua một function trong setTimeout hoặc bất kỳ kiểu gọi lại nào. Function vẫn còn nhớ lexical scope vì closure.

When we pass a function into a setTimeout or any kind of callback. The function still remembers the lexical scope because of the closure.function foo () {
  var bar = 'bar'
  setTimeout(function () {
    console.log(bar)
  }, 1000)
}

foo() // bar

Closure và loop

for (var i = 1; i <= 5; i++) {
  (function (i) {
    setTimeout(function () {
      console.log(i)
    }, i * 1000)
  })(i)
}
/**
* Prints 1 thorugh 5 after each second
* Closure enables us to remember the variable i
* An IIFE to pass in a new value of the variable i for each iteration
* IIFE (Immediately Invoked Function expression)
*/
for (let i = 1; i <= 5; i++) {
  (function (i) {
    setTimeout(function () {
      console.log(i)
    }, i * 1000)
  })(i)
}
/**
* Prints 1 through 5 after each second
* Closure enabling us to remember the variable i
* The let keyword rebinds the value of i for each iteration
*/

Tôi tin rằng bây giờ chúng ta có một sự hiểu biết về closure và có thể làm như sau:

  • Minh hoạ các trường hợp sử dụng của nó hoặc xác định nó trong ngữ cảnh chúng ta không bao giờ biết
  • Giữ bối cảnh thực hiện như dự đoán
  • Triển khai code trong module pattern của JavaScript
  • Sử dụng closure trong code của chúng tôi, với sự hiểu biết rõ ràng

TopDev via Scotch

Tham khảo thêm các vị trí tuyển ngành CNTT tại đây

Sử dụng ứng dụng HTTP Client của Angular v4

Sử dụng ứng dụng HTTP Client của Angular v4

Với việc phát hành Angular v4.3 vào tháng 7, một số tính năng mới vừa được giới thiệu, trong số đó là HttpClientModule,  @angular/common/http thay thế @angular/http nhỏ gọn hơn, dễ dàng hơn và là một thư viện để thực hiện các yêu cầu HTTP.

Một dịch vụ HttpClient mới cũng đã có trong HttpClientModule và nó có thể được sử dụng để bắt đầu yêu cầu HTTP. Trong hướng dẫn này, tôi sẽ chỉ cho bạn triển khai ứng dụng mới này và kiểm tra một số tính năng của nó.

Chúng tôi đã nói về HTTP Client theo chiều sâu trong một bài viết trước: Angular 2 HTTP Requests with Observables

TLDR

Dưới đây là những thay đổi bạn cần thực hiện từ phiên bản cũ (trước phiên bản 4) sang phiên bản mới (v4+)

Để nhập vào một NgModule:

// below v4 ==========================================
import { HttpModule } from '@angular/http';

...
@NgModule({
    imports: [
        HttpModule
    ]
})
...

// v4+ ===============================================
import { HttpClientModule } from '@angular/common/http';

...
@NgModule({
    imports: [
        HttpClientModule
    ]
})
...

Và để sử dụng bên trong dịch vụ:

// below v4 ==========================================
import { Http } from '@angular/http';

...
constructor(private http: Http) {}
...

// v4+ ===============================================
import { HttpClient } from '@angular/common/http';

...
constructor(private http: HttpClient) {}
...

Chúng ta hãy xem xét sâu hơn.

Cài đặt Angular v4

Để bắt đầu cài đặt Angular CLI sử dụng Node và NPM nếu bạn chưa cài đặt nó.

npm install -g @angular/cli@latest

Các -gchuyển đổi để cài đặt nó trên toàn cầu và @latest cho phiên bản mới. Sau khi quá trình cài đặt hoàn tất, hãy chạy lệnh sau để chèn một ứng dụng mới

ng new httptutorial

Thao tác này sẽ tải template của dự án và cài đặt tất cả. Cấu trúc thư mục dự án sẽ giống như thế này.

// end-to-end-tests
|- e2e/
  |----- app.e2e-spec.ts
  |----- app.po.ts
  |----- tsconfig.e2e.json

// npm dependencies
|- node_modules/

// public facing app. built things go here. this wont show until we run a build
|- dist/

// where most of the work will be done
|- src/
  |----- app/
      |----- app.component.css|html|spec.ts|ts
      |----- app.module.ts
  |----- assets/
  |----- environments/
      |----- environment.prod.ts|ts
  |----- favicon.ico
  |----- index.html
  |----- main.ts
  |----- polyfills.ts
  |----- styles.css
  |----- test.ts
  |----- tsconfig.app.json
  |----- tsconfig.spec.json
  |----- typings.d.ts

// overall configuration
|- .angular-cli.json  // the main configuration file
|- .editorconfig      // editorconfig which is used in some VS Code setups
|- .gitignore
|- karma.conf.js
|- package.json
|- protractor.conf.js
|- README.md
|- tsconfig.json
|- tslint.json

Mở tập tin package.jsonvà cập nhật sự phụ thuộc vào phiên bản 4.3.6. Vì vậy, dependencies và devDependenciessection của tập tin như thế này:

"dependencies": {
    "@angular/animations": "^4.3.6",
    "@angular/common": "^4.3.6",
    "@angular/compiler": "^4.3.6",
    "@angular/core": "^4.3.6",
    "@angular/forms": "^4.3.6",
    "@angular/http": "^4.3.6",
    "@angular/platform-browser": "^4.3.6",
    "@angular/platform-browser-dynamic": "^4.3.6",
    "@angular/router": "^4.3.6",
    "core-js": "^2.4.1",
    "rxjs": "^5.4.2",
    "zone.js": "^0.8.14"
  },
  "devDependencies": {
    "@angular/cli": "1.3.2",
    "@angular/compiler-cli": "^4.3.6",
    "@angular/language-service": "^4.3.6",
    "@types/jasmine": "~2.5.53",
    "@types/jasminewd2": "~2.0.2",
    "@types/node": "~6.0.60",
    "codelyzer": "~3.1.1",
    "jasmine-core": "~2.6.2",
    "jasmine-spec-reporter": "~4.1.0",
    "karma": "~1.7.0",
    "karma-chrome-launcher": "~2.1.1",
    "karma-cli": "~1.0.1",
    "karma-coverage-istanbul-reporter": "^1.2.1",
    "karma-jasmine": "~1.1.0",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "~5.1.2",
    "ts-node": "~3.2.0",
    "tslint": "~5.3.2",
    "typescript": "~2.3.3"
  }

Tiếp đó, chạy file project directory

npm install

Điều này sẽ kéo các dependences vào file package.json. Để xem nếu mọi thứ hoạt động đúng, bắt đầu chạy development web server:

ng serve

Điều này bắt đầu phát triển web server tại http://localhost:4200. Truy cập link url, và bạn sẽ thấy một cái gì đó như sau:

Cài đặt HTTP module

Tiếp theo, nhập HttpClientModule vào phần mô-đun gốc của ứng dụng tệp src/app/app.module.ts và thêm nó vào thuộc tính imports. Vì vậy, các tập tin trông như thế này:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { HttpClientModule } from '@angular/common/http';

import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

Bây giờ các HttpClient để được sử dụng trong các component, nó cần phải được tiêm vào các nhà xây dựng lớp học. Trong src/app/app.component.ts nhập HttpClient sau đó đưa vào constructor như hình dưới đây:

import { Component } from '@angular/core';

import { HttpClient } from '@angular/common/http';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'app';

  constructor( private http: HttpClient ) { //dependency injection, creating an instance of HttpClient called http

  }
}

Bây giờ bạn sẽ có thể thực hiện các hoạt động CRUD và thực hiện các yêu cầu HTTP. Các phương thức HTTP khả dụng là post, put, delete, patch, head và jsonp.

HTTP GET

Để tìm ra phương pháp, chúng tôi sẽ truy hồi giả REST API. Đi qua link http://jsonplaceholder.typicode.com/ và cuộn xuống Resources. Bạn sẽ thấy một trang như sau:

Sau đó nhấp vào Resources/posts

Lưu ý rằng chúng ta thấy nhiều các đối tượng json ở đây, mỗi trong số đó có bốn thuộc tính: userIdidtitle and body. Vì vậy, khi chúng tôi nhấn vào link url: http://jsonplaceholder.typicode.com/posts từ ứng dụng Angular, chúng tôi sẽ nhận được kết quả trên. Các phương pháp HTTP khác cũng hoạt động như mong đợi.

Bây giờ, chỉnh sửa src/app/app.component.ts như sau:

import { Component, OnInit } from '@angular/core'; // importing the OnInit interface

import { HttpClient } from '@angular/common/http';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit { // implementing OnInit
  title = 'app';

  constructor( private http: HttpClient ) {

  }
  ngOnInit(): void { // adding the lifecycle hook ngOnInit
    this.http.get('http://jsonplaceholder.typicode.com/posts').subscribe(data => {
      console.log(data); // using the HttpClient instance, http to call the API then subscribe to the data and display to console
    });
  }

}

Ở đây chúng ta đang call đến điểm cuối API trong vòng đời ngOnInit. Hook này được gọi ra khi thành phần của chúng ta đã được khởi tạo. Đầu tiên chúng ta nhập giao diện OnInit, sau đó thực hiện giao diện này trong định nghĩa class. Sau đó chúng ta gọi phương thức ngOnInit, bên trong chúng ta gọi HttpClient instance http, chúng ta đã tạo ra trước đó trong constructor.

Chúng tôi gọi phương thức get từ trường hợp này, dự kiến URL của điểm cuối API mà chúng ta quan tâm. Phương thức get trả về một giá trị có thể quan sát được vì vậy chúng ta cần phải đăng ký với thông tin này để được thông báo khi đáp ứng đến, điều này được thực hiện bằng cách gọi phương pháp subscribe. Trong phương pháp subscribe, chúng ta đưa một trình xử lý sự kiện nhận dữ liệu, sau đó chúng ta có thể nhập vào bảng điều khiển. Đầu ra được hiển thị trong bảng điều khiển của trình duyệt sẽ giống như sau:

Đây là những đối tượng json được kéo từ url: http://jsonplaceholder.typicode.com/posts.

Để truy cập vào từng thuộc tính của đối tượng trả lời, ví dụ như thuộc tính data.userId, chúng ta cần phải gán đối tượng phản ứng vào một kiểu chứa các thuộc tính tương ứng. Để làm điều này, chúng ta hãy xác định một giao diện. Nhập các tệp tin sau vào tệp  src/app/app.component.ts ngay sau khi các câu lệnh nhập:

interface DataResponse {
  userId: string;
  id: string;
  title: string;
}

Tiếp theo, chỉnh sửa lệnh get call để sử dụng giao diện DataResponse:

this.http.get<DataResponse>('http://jsonplaceholder.typicode.com/posts/1').subscribe(data => {
      console.log('UserId: ' + data.userId);
      console.log('Id: ' + data.id);
      console.log('Title: ' + data.title);
      console.log('Body: ' + data.body);
    });

Bây giờ chúng ta có thể truy cập các thuộc tính userId, title và body riêng biệt. Đầu ra giao diện điều khiển sẽ giống như sau:

Chúng tôi có thể muốn hiển thị thông báo lỗi khi yêu cầu http thất bại. Để thực hiện việc này, đầu tiên hãy nhập HttpErrorResponse từ @angular/common/http sau đó tạo một hàm xử lý lỗi bằng cách thêm một callback vào phương thức subscribe, sau đó xác định một tham số kiểu HttpErrorResponse cho hàm xử lý lỗi:

import { HttpClient, HttpErrorResponse } from '@angular/common/http';

// ...

this.http.get<DataResponse>('https://jsonplaceholder.typicode.com/posts/1').subscribe(data => {
      console.log('UserId: ' + data.userId);
      console.log('Id: ' + data.id);
      console.log('Title: ' + data.title);
      console.log('Body: ' + data.body);
    },
    (err: HttpErrorResponse) => {
      if (err.error instanceof Error) {
        console.log('Client-side error occured.');
      } else {
        console.log('Server-side error occured.');
      }
    }
  );

HTTP POST

Cũng như trước, chúng tôi sẽ sử dụng dịch vụ JSONPlaceholder để trình bày HTTP POST. Tuy nhiên, lưu ý rằng vì đây là một dịch vụ giả, dữ liệu không liên tục nhưng API đáp ứng như thể một API thực được gọi. Điểm cuối của yêu cầu POST là http://jsonplaceholder.typicode.com/posts. Nếu bạn truy cập url này, bạn sẽ thấy rằng chúng tôi có bốn tài sản có sẵn cho chúng tôi:userIdidtitle và body. Để sử dụng điểm cuối này để tạo một bản ghi mới, thêm một cuộc gọi thứ hai bên trong vòng đời của ngOnInit :

this.http.post('http://jsonplaceholder.typicode.com/posts', {
      title: 'foo',
      body: 'bar',
      userId: 1
    })
      .subscribe(
        res => {
          console.log(res);
        },
        err => {
          console.log('Error occured');
        }
      );

Phương pháp post  trả lại một lần nữa có thể giám sát vì vậy chúng ta cần phải đăng ký nhận xét này như trước, điều này được thực hiện bằng cách gọi phương thức đăng ký. Với phương pháp đăng ký, chúng ta hiểu một trình xử lý sự kiện nhận dữ liệu, sau đó chúng ta có thể in vào bảng điều khiển. Sau đó, chúng ta thêm trình xử lý lỗi để in thông tin nếu xảy ra lỗi. Đầu ra được hiển thị trong bảng điều khiển của trình duyệt sẽ giống như sau:

HTTP Interceptor

Một tính năng mới khác của mô đun HTTP Client là các interceptor. Interceptor nằm giữa ứng dụng và một backend API. Với interceptor chúng ta có thể đưa một yêu cầu đến từ ứng dụng trước khi nó thực sự được gửi và gửi đến backend. Cuộc trò chuyện cũng đúng, đó là phản ứng từ phía backend có thể thay đổi trước khi nó được gửi và xử lý bằng đơn của chúng tôi. Để thực hiện điều này, chúng tôi sẽ đánh chặn các thông tin tiêu đề đến từ yêu cầu nhận được để http://jsonplaceholder.typicode.com/posts/1. Trường header chúng ta sẽ thay đổi là trường Accept-Language đến từ API. Tạo một tệp mới src/app/typicode.interceptor.ts  và nhập mã sau:

import { Injectable } from '@angular/core';
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';
import { Observable } from 'rxjs/observable';
@Injectable()
export class TypicodeInterceptor implements HttpInterceptor {
  intercept (req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const authReq = req.clone({
      headers: req.headers.set('Accept-Language', 'Test')
    });
    return next.handle(authReq);
  }
}

Đầu tiên chúng ta nhập injectable từ @angular/core sau đó import HttpEventHttpInterceptorHttpHandler từ @angular/common/http. Cuối cùng, gói Observable  được import từ rxjs/observable.

Tiếp theo chúng ta thêm vào @injectable , sau đó tạo ra class TypicodeInterceptor thực thi giao diện HttpInterceptor. Sau đó chúng ta bổ sung phương thức interceptor trong việc thực hiện class.

Phương pháp này lấy một yêu cầu, thay đổi nó, trước khi chuyển nó sang cho việc xử lý tiếp đến ứng dụng của chúng tôi. Do đó chúng tôi đang đi qua hai tham số vào phương pháp này; yêu cầu bản thân của kiểuHttpRequest<any> và một tham số được gọi là next  đó là kiểu HttpHandler. Phương thức trả về một kiểu quan sát được của HttpEvent<any>

Tiếp theo chúng ta gọi phương thức req.clone() để nhân bản yêu cầu HTTP ban đầu. Bên trong phương pháp này chúng ta thay đổi trường tiêu đề được thực hiện bằng cách gọi phương thức req.headers.set(). Ở đây chúng ta thay đổi trường Accept-Language bằng cách thay đổi giá trị của nó thành Test.

Cuối cùng, đối tượng yêu cầu vừa được tạo ra (có header bao gồm) được chuyển tiếp để xử lý tiếp bằng cách sử dụng phương thức next.handle.

Người cung cấp Interceptor 

Để lấy interceptor để chúng tôi sử dụng chúng, chúng ta phải chỉnh sửa tập tin src/app/app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { AppComponent } from './app.component';
import { TypicodeInterceptor } from './typicode.interceptor';
@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule
  ],
  providers: [{
    provide: HTTP_INTERCEPTORS,
    useClass: TypicodeInterceptor,
    multi: true
  }],
  bootstrap: [AppComponent]
})
export class AppModule { }

Ở đây chúng tôi đã nhập khẩu HTTP_INTERCEPTORS từ @angular/common/http và TypicodeInterceptor class chúng tôi tạo ra trước đó trong src/app/typicode.interceptor.ts. Tiếp theo, chúng ta chèn một đối tượng mới vào mảng được gán cho thuộc tính provider của @NgModule. Đối tượng này có ba thuộc tính:

  • provide: cần được đặt thành HTTP_INTERCEPTORS để xác định rằng một máy chủ chặn HTTP được cung cấp
  • useClass: cần phải được thiết lập để loại interceptor class của chúng tôi
  • multi: cần được đặt thành multi để nói với Angular rằng HTTP_INTERCEPTORS là một mảng các giá trị, chứ không phải là một giá trị duy nhất

Để xem interception này, hãy nhấp vào tab mạng, tải lại trang, sau đó chọn yêu cầu HTTP trên bảng điều khiển bên trái và các header HTTP sẽ được hiển thị trên bảng điều khiển bên phải. Yêu cầu chúng tôi quan tâm là yêu cầu nhận được gọi url: http://jsonplaceholder.typicode.com/posts/1.

Kết luận

Mô-đun HTTP Client giúp dễ dàng xử lý các giao diện HTTP backend như của REST API. Để recap chúng ta đã đề cập đến các thiết lập cơ bản của HttpClientModule, đưa ra cách sử dụng phương thức get và post và chỉ ra cách sử dụng tính năng interceptor mới. Bạn có thể nghĩ đến một vài trường hợp sử dụng được các tính năng này sẽ được yêu cầu. Cũng hãy xem dự án này trên Github. Nếu bạn có bất kỳ thắc mắc hoặc băn khoăn gì, đừng ngần ngại gửi chúng dưới đây.

Topdev via Scotch

TopDev ra mắt giải pháp tuyển dụng ứng dụng trí tuệ nhân tạo

TopDev vừa ra mắt giải pháp tuyển dụng tích hợp trí tuệ nhân tạo (AI ) đầu tiên tại Việt Nam. Tích hợp AI vào mạng quảng cáo việc làm cho phép tin đăng tuyển dụng được hiển thị đến đúng đối tượng, vào đúng thời điểm thích hợp, dựa trên những phân tích thói quen sử dụng Internet của ứng viên. Nhờ đó, gia tăng cơ hội tìm kiếm được ứng viên phù hợp cho nhà tuyển dụng, tiết kiệm được hơn 50% chi phí cũng những thời gian tìm kiếm ứng viên.

Theo thống kê của bộ TT&TT, Việt Nam cần khoảng 1,2 triệu nhân lực CNTT vào năm 2020, trong khi toàn bộ hệ thống cung cấp nhân lực về CNTT trên cả nước chỉ có khả năng đáp ứng quá nửa con số ấy. Sự thiếu hụt nhân sự CNTT không chỉ khiến doanh nghiệp loay hoay trong việc triển khai phát triển, mà còn dẫn tới tình trạng bất ổn định trên thị trường lao động.

Giờ đây, khi mà các giải pháp tuyển dụng thông thường không còn hiệu quả và tốn rất nhiều thời gian, chi phí, thì đã đến lúc cần một giải pháp tuyển dụng thay thế, hiệu quả và tối ưu hơn. Đây là lúc vai trò của AI được phát huy.

Developer quan tâm tới Java chỉ nhận được các Job liên quan đến Java ( giao diện trên Desktop)

Ứng dụng AI vào tuyển dụng đã được áp dụng khá phổ biến trên thế giới, gần đây nhất là sự kiện Google ra mắt bộ công cụ tìm kiếm việc làm dựa vào trí tuệ nhân tạo. Nhưng ở Việt Nam hiện nay, TopDev được xem là platform tuyển dụng đầu tiên tích hợp AI vào tuyển dụng, đây là một bước đột phá mới giúp nhà tuyển dụng tìm kiếm ứng viên phù hợp với chi phí tối ưu trong thời gian tối thiểu.

Công nghệ AI tự động phân tích và hiểu người dùng, từ đó tin tuyển dụng được phân phối và hiển thị đến đúng đối tượng, đúng thời điểm; gia tăng cơ hội tìm kiếm được ứng viên phù hợp cho nhà tuyển dụng, tiết kiệm được hơn 50% chi phí cũng những thời gian tìm kiếm ứng viên.

Hiển thị Job trên giao diện Mobile

Ví dụ đơn giản như một digital marketer sẽ chỉ thấy các job liên quan đến digital marketing, một lập trình viên web sẽ chỉ nhìn thấy các quảng cáo job liên quan đến lập trình web. Nhờ đó mà việc tìm kiếm sẽ trở nên hiệu quả hơn cho các bên khi không phải mất thời gian với các quảng cáo không phù hợp.

Có hệ thống mạng lưới liên kết rộng khắp với các website và fanpage lớn, có độ phủ sóng đến hơn 90% lập trình viên hiện nay cùng với các hoạt động xây dựng cộng đồng như chuỗi sự kiện Vietnam Mobile Day, Vietnam Web Summit…thu hút hàng chục ngàn lượt người tham dự, TopDev nhanh chóng trở thành một trong những chuyên trang tuyển dụng IT hàng đầu hiện nay, là đối tác tin cậy của nhiều công ty tập đoàn lớn trong và ngoài nước.

Việc ra mắt giải pháp mới ứng dụng AI vào quy trình tuyển dụng là một trong những nỗ lực của TopDev nhằm giải quyết triệt để bài toán tuyển dụng lập trình viên đang khá nhức nhối trước làn sóng khởi nghiệp mạnh mẽ ở Việt Nam và sự phát triển công nghệ của thế giới.

TopDev đã xây dựng mạng lưới với hơn 50 publisher, trong đó có các website thuộc hàng top trong lĩnh vực công nghệ như Techtalk.vn, Freetuts.net, ddth.com…

Kết quả đem lại từ các publisher trong ngành IT hiện nay rất khả quan khiến chúng tôi mạnh dạng mở rộng sang các ngành nghề khác trong tương lai gần.

Hiện nay, TopDev đang thực hiện mở rộng hệ thống mạng lưới hiển thị nội dung trên nhiều Blog/Website chuyên về công nghệ, Design, Marketing (tương ứng với đối tượng tuyển dụng là các Developer, Designer và Marketer ) với nhiều chính sách, hỗ trợ hấp dẫn. Cụ thể đối với các Publisher, chủ của những website/blog có nhiều lượt truy cập, việc tích hợp mạng quảng cáo này sẽ giúp tạo thêm giá trị cho user, đồng thời đem lại nguồn doanh thu khá tốt bên cạnh các quảng cáo của Google Adwords. Việc tích hợp mạng quảng cáo rất đơn giản, chỉ cần nhúng mã Javascript vào Website/ Blog là ngay lập tức, trang web có thêm tính năng hiển thị việc làm tại những nơi tùy ý.

Nguyễn Hữu Bình – CEO của TopDev

Theo ông Nguyễn Hữu Bình, CEO của TopDev, cho biết “Giá CPI, CPM và CPA trả cho các publisher sẽ cao ít nhất gấp đôi Google Adwords do chỉ chuyên về mảng việc làm. Việc hiển thị cũng sẽ rất tinh tế, không phản cảm và như là một thành phần tiện ích thêm cho user.”

TopDev đã xây dựng mạng lưới với hơn 50 publisher, trong đó có các website thuộc hàng top trong lĩnh vực công nghệ như Techtalk.vn, Freetuts.net, ddth.com…

Với những nỗ lực của mình TopDev tham vọng trở thành một trong những lựa chọn hàng đầu về tuyển dụng lập trình viên ở Việt Nam.

“TopDev.vn sẽ là nơi cho những người chủ động vào tìm việc, bên cạnh đó, mạng hiển thị quảng cáo việc làm mới sẽ mở ra nhiều cánh cửa tiếp cận đến ứng viên tiềm năng ít chủ động tìm việc, chúng tôi kỳ vọng sẽ giải quyết tình trạng mất cân bằng cung cầu, tình trạng thừa người nhưng khó tuyển, tuyển không phù hợp, cũng như đem đến những cơ hội việc làm tốt hơn cho những người không chủ động tìm kiếm cơ hội mới” – Anh Bình kết luận.

Tham khảo các vị trí tuyển dụng việc làm ngành trí tuệ nhân tạo AI lương cao.

TopDev

Các xu hướng JavaScript đáng để theo dõi ( Phần 2)

Các xu hướng JavaScript năm 2018 đáng để theo dõi ( Phần 2)

Trong phần 1, ta để điểm sơ qua một vài xu hướng Javascript hàng đầu năm 2018, trong bài viết này, ta sẽ đến với những xu hướng còn lại.

Prettier

Như tên gọi của nó, Prettier là một định dạng mà làm cho code của bạn dễ đọc hơn.

foo(reallyLongArg(), omgSoManyParameters(), IShouldRefactorThis(), isThereSeriouslyAnotherOne());

trở thành…

foo(
 reallyLongArg(),
 omgSoManyParameters(),
 IShouldRefactorThis(),
 isThereSeriouslyAnotherOne()
);

Với hơn 18.000 đánh giá star trên Github, các nhà phát triển đang dành nhiều quan tấm đến dự án đơn giản và có giá trị này.

Nó cũng được sử dụng trên nhiều dự án khác mà có thể bạn đã yêu thích, như Webpack, React, Next.js, Babel,…

Một lần nữa, bạn chỉ cần trở thành một Go develper và thậm chí không cần phải cài đặt nó.

Jest and Enzyme

Khi nói đến testing JavaScript, Jest đã chắc chắn là sự lựa chọn dẫn đầu, với Enzyme như một sự bổ sung tuyệt vời khi xây dựng các React app.

Như bạn có thể thấy, Jest hiện đang chiếm ưu thế hơn Jasmine trong việc tải về.

Tính năng Snapshots của Jest đã được tung ra vào năm 2017, làm cho nó để với thử nghiệm. Hãy xem cuộc nói chuyện này từ React Conf 2017 để tìm hiểu về nó.

Enzyme, do team engineering của Airbnb tạo ra, là một thư viện JavaScript để testing React component. Nó đã bùng nổ tới 12.000 đánh giá star trên Github kể từ năm 2016.

Hình ảnh Snapshots của Jest và API cực kỳ đơn giản của Enzyme để testing React component tạo ra một kết hợp thử nghiệm tuyệt vời sẽ tiếp tục phát triển lên trong năm 2018.

Webpack

Webpack đã trở thành gói asset bundler phổ biến nhất. Webpack cũng đã có một năm KHÔNG TƯỞNG.

Thời gian này năm ngoái, Webpack hầu như không có tài liệu và hầu hết các developer không biết làm thế nào để bắt đầu với nó.

Sau đó, vào đầu năm, tôi đã viết về việc Webpack đã tăng 15.000 đô trong 3 tháng (và chúng tôi hạnh phúc như thế nào khi là một trong những nhà tài trợ sớm nhất) để hỗ trợ dự án. Hiện nay họ có hàng trăm ngàn đô la tài trợ.

Webpack không chỉ mở đường cho việc tương lai của các dự án mã nguồn mở có thể phát triển như thế nào, nhưng sự phát triển của dự án đã duy trì động lực to lớn trong suốt cả năm.

Và Sean Larkin may mắn dẫn đầu phong trào Webpack, thực sự khó có thể đưa ra những gì Webpack có khả năng đạt được tiếp theo.

Bởi vì nó hỗ trợ tốt dự án này (và họ quan tâm đến cộng đồng của mình), làm xu hướng nó trở thành dễ đoán nhất năm 2018.

Parcel

Nhưng với mọi xu hướng, một lực lượng các developer không hài lòng ngày càng tăng.

Parcel, một nhà cung cấp dịch vụ vận chuyển, đang nhanh chóng đạt được 12.000 đánh giá star trên Github vào năm 2017 và đi ngay sau Webpack.

Parcel và các gói khác đã trở nên quá cồng kềnh, trong khi Parcel hoạt động nhanh gấp hai lần gói thành Webpack (nhanh hơn 10 lần khi sử dụng bộ nhớ cache).

Nó cũng đi sau khi cài đặt cấu hình hơi khó hiểu của Webpack, như với Parcel, không cần cấu hình.

“Chỉ cần điểm nó ở vị trí vào của ứng dụng của bạn, và nó làm điều đúng.”

Mặc dù đơn giản hoá cấu hình và cải thiện tốc độ là cả hai cải tiến lớn, tôi sẽ không ngạc nhiên nếu Webpack không sao chép những cải tiến này vào nửa đầu năm 2018.

Tương tự như Vue vs React, nó sẽ luôn đổi mới nhanh hơn, nhưng đến với sẽ được truyền cảm hứng bởi sự đổi mới và cải thiện dự án.

Bạn có thể theo dõi toàn bộ cuộc tranh luận ở đây.

Gatsby

Gatsby là một static site generator cho React được xây dựng bởi Kyle Mathews.

Kể từ khi Kyle dành toàn bộ thời gian cho Gatsby, thực sự đáng để đón nhận.

Không có bằng chứng nào tốt hơn về điều đó so với thực tế là trang web React được xây dựng bằng Gatsby.

Gatsby là về hiệu suất và cung cấp trải nghiệm web nhanh nhất có thể trong React.

Sơ đồ này từ trang web này cung cấp cách ý tưởng hoạt động:

Gatsby cũng sử dụng công nghệ web tiên tiến tìm nạp trước tài nguyên cho các trang khác, do đó, trình duyệt với tốc độ rất nhanh.
Mặc dù Gatsby không thống trị ngành công nghiệp bất kỳ phương tiện nào, đó là một giải pháp tuyệt vời để xây dựng các trang web tĩnh sẽ tiếp tục trở nên phổ biến.
Để biết thêm về Gatsby, hãy đọc bài đăng này.
Chúng tôi cũng sẵn sàng tài trợ để phát triển cho Gatsby trong năm nay.

Babel

Babel không cần giới thiệu vào thời điểm này và duy trì là một xu hướng thiết yếu.

Trong tất cả, đây là năm tốt cho Babel, chủ yếu tập trung vào việc xây dựng Babel 7 (hy vọng tung ra đầu năm 2018). Quan trọng nhất, họ đã viết một bài hát 🙂

Mối quan tâm duy nhất của Babel hiện nay (ngoài người bảo trợ phi thường của nó, một khoảng thời gian không rõ ràng / mơ hồ từ dự án), giống như Reason trở thành xu hướng chủ đạo.

Nhưng bây giờ, Babel sẽ tiếp tục mạnh mẽ trong suốt 2018.

Chúng tôi cũng rất vui khi tài trợ cho Babel trong năm.

Flow & Typescript

TypescriptFlow là cả hai lựa chọn tuyệt vời dành cho các nhà phát triển JavaScript để sử dụng để cải thiện chất lượng code của mình.

Chúng ta có thể sẽ không thấy người kia tàn phá như thế nào vào năm 2018, vì cả hai đã sống sót cùng nhau, phục vụ các mục đích khác nhau.

Flow được xây dựng bởi Facebook là sự lựa chọn ưa thích của các nhà phát triển React vì nó dễ dàng tích hợp với Babel,  thường được sử dụng trong các dự án React.

Typescript, được xây dựng bởi Microsoft, phổ biến trong số các nhà phát triển Angular 2+ vì đó là ngôn ngữ chính.

Năm 2018 có thể sẽ trở nên tồi tệ nếu xét về tiến bộ từ hai lựa chọn này, và câu hỏi thực sự trong những năm tới sẽ trở thành một cái gì đó như Reason có thể thay thế cho cả hai.

Immutable.js

Tôi thích cách một redditor mô tả Immutable.js:

“immutableJS đảm bảo rằng các nhà phát triển trên các nhóm lớn không làm điều gì đó ngu ngốc.”

Đơn giản: Immutable.js, một dự án khác của Facebook, đảm bảo rằng nhà nước không bị biến đổi bởi các đối tượng không thay đổi (không thay đổi).

Như một redditor đã chỉ ra, điều này có thể được vô cùng hữu ích trong một team lớn các developer có thể gây thất bại.

Dữ liệu được đóng gói trong một đối tượng Immutable.JS không bao giờ bị biến đổi. Một bản sao mới luôn được trả lại. Điều này ngược lại với JavaScript, trong đó một số thao tác không làm biến đổi dữ liệu của bạn (ví dụ: một số phương pháp Array, bao gồm bản đồ, bộ lọc, concat, forEach,…), nhưng một số khác (pop, push, splice, array).

Có một số hạn chế lớn để sử dụng Immutable.JS, nhưng những hạn chế có thể không quan trọng tùy thuộc vào nhu cầu của bạn. Bạn có thể đọc thêm về chúng tại đây.

Với 20.000 star trên Github hiện tại, Immutable.js đã tăng vào năm 2017 và có dự kiến sẽ tiếp tục tăng trong năm 2018 khi các developer bắt đầu dành thời gian để hiểu khái niệm và cân bằng.

Popmotion

Popmotion là một thư viện chuyển động JavaScript nhanh chóng đạt được các đánh giá trên Github.

Hãy suy nghĩ về cách Flash đáp ứng jQuery.

Bây giờ, tôi nhận ra bằng cách sử dụng hai từ trong cùng một câu không giúp nó trở nên phổ biến.

Nhưng khi bạn càng lún sâu vào dự án này, bạn càng khám phá ra một nhóm những người có sự nhún nhường với cả jQuery và Flash và đơn giản là cần thiết để làm tốt hơn.

Và Popmotion thực sự là một trải nghiệm tốt với rất nhiều đổi mới về web animation. Đây chắc chắn là một năm đáng chờ đợi.

Kiểm tra trang web của họ để bắt đầu bị trêu chọc.

React Native & Electron

React Native cho phép bạn xây dựng ứng dụng React cho thiết bị di động, trong khi Electron cho phép bạn tạo các ứng dụng JavaScript cho máy tính để bàn.

Cả hai đều trở thành các framework thành công trong năm 2017 và cả hai đều là những giải pháp tuyệt vời cho JavaScript đến một ứng dụng gốc.

Một số ứng dụng đáng chú ý được xây dựng bao gồm: Slack, Atom, Github Desktop và Discord.

Và các ứng dụng phổ biến được xây dựng với React Native bao gồm: Facebook, Instagram, Airbnb và UberEATS.

Bạn cũng có thể tạo các ứng dụng React Native cho Windows.

Bất kể, đây là thời điểm tốt để trở thành nhà phát triển JavaScript vì bạn có thể tạo ứng dụng cho cả desktop và mobile dễ dàng hơn trong quá khứ.

Bonus: Web Assembly

Với tất cả 4 trình duyệt hiện hỗ trợ Web Assembly, chúng ta gần như ở đó. Vẫn còn quá sớm để gọi nó là xu hướng cho năm 2018, vì vậy chúng tôi sẽ cập nhật bạn trong 12 tháng.

Xem thêm tuyển dụng javascript lương cao cho bạn

TopDev via Hackernoon

Các xu hướng JavaScript đáng để theo dõi ( Phần 1)

Các xu hướng JavaScript năm 2018 đáng để theo dõi ( Phần 2)

Nếu bạn đang chôn chân trong các dự án trong suốt năm 2017, đây thật sự là bài viết dành cho bạn.

Rất nhiều thứ đã xảy ra vào năm 2017 khiến cho 2018 cho rất nhiều đổi mới.

Bạn cũng có thể sử dụng bài viết này như một hướng dẫn để lên kế hoạch cho sự phát triển vào năm 2018 để giúp bạn có được những dự án sáng tạo hơn.

React vs. Vue.js

Chúng ta hãy đón nhận những điều tốt đẹp: Không ít người tin rằng Vue sẽ trở thành đối thủ lớn của React, nhưng không thể bỏ qua Vue trong năm nay, thậm chí bỏ qua Angular vì sự phát triển của nhà phát triển.

Khi nhìn về phía trước đến năm 2018, chúng ta sẽ bắt tay vào cuộc chiến kéo dài 2 năm đầy những sự phát triển cho Vue.

React vẫn có sự hỗ trợ về tài chính từ một trong những công ty giàu nhất trên thế giới, chưa kể đến một số nhà đầu tư vô cùng tài năng.

Nhưng Vue đang làm tất cả những điều khiến cho các nhà phát triển thực sự thoải mái:

Vue nhẹ, dễ học, có các công cụ đặc biệt, quản lý nhà nước tuyệt vời và định tuyến tích hợp sẵn,…

Cộng đồng của Vue chắc chắn không lớn như của React, nhưng các cộng đồng phát triển dựa trên việc nhóm có những người tuyệt vời và lắng nghe cộng đồng của họ (cả hai đều có sẵn).

Khi nói đến làm hài lòng các nhà phát triển, chúng ta đừng quên việc Facebook đã thất bại với BSD + Patents license snafu đối với thực sự tốt với các nhà phát triển.

Chúng tôi đã thực sự đạt đến vị trí mà bạn cũng có thể bắt đầu mọi dự án với Vue để đơn giản hóa cuộc sống, và đó là một thành tựu ấn tượng của nhóm.

Dưới đây là một bài viết về React vs. Vue vs Angular trong năm nay.

Nếu bạn là một nhà phát triển Angular, người chỉ từ chối học React, Vue.js sẽ nhanh chóng trở thành lựa chọn tốt hơn cho con đường sự nghiệp của bạn khi các cơ hội góc cạnh chết đi (vì Vue có một số cú pháp tương tự như Angular 1).

Mỗi nhà phát triển JS vẫn nên xem xét việc học Vue.js, vì nó được tạo cơ hội đủ lớn đến nơi mà chúng tôi bắt đầu thấy các yêu cầu được thuê của các nhà phát triển của Vue.js, có nghĩa là bạn có thể tạo ra một số giá trị cho chính mình ít nhất trong ngắn hạn.

Next.js

Và rồi có Next.js, ngôn ngữ chúng tôi sẽ gọi là ‘insurance for React.”

Ngay cả khi Facebook không bao giờ vượt trội trong cuộc đua hay sự đổi mới cùng một thời gian như Vue, React cùng với Next.js giúp bạn gần gũi hơn với Vue về công cụ, chia tách code, định tuyến và quản lí, cho phép bạn giữ lại và hỗ trợ hệ sinh thái React.

Tiếp theo cũng hữu ích cho các ứng dụng được hiển thị ở phía máy chủ được xây dựng trong React, với xu hướng ngày càng tăng.

Hơn nữa, hãy thêm vào Now.js (tạo bởi cùng một nhóm) và bạn có một cách nhanh chóng để triển khai các ứng dụng React.

Khi cuộc chiến giữa Vue vs React vẫn cứ tiếp tục, chúng ta mong đợi rằng sẽ ngày càng có nhiều sự chấp thuận của Next  với React để làm cho người dùng React cảm thấy thoải mái hơn.

Angular

Bất chấp những khó khăn ngày càng nhiều của Angular, nó vẫn sẽ tiếp tục là một framework được sử dụng rộng rãi vào năm 2018.

Nhiều công ty đã chấp nhận Angular 1.0 và khi họ chuyển sang một thứ gì đó tốt hơn vào năm 2018,19, họ sẽ xem React hoặc Vue.js là những lựa chọn thay thế tốt hơn cho Angular 2.

Những người ủng hộ còn lại của Angular đã đưa ra quan điểm rằng Angular sẽ là JS framework được lựa chọn của nhiều doanh nghiệp, nhưng điều này vẫn chưa được chứng minh và có thể sẽ không được nhắc đến vào năm 2018.

Reason

Reason luôn luôn có giá trị chú ý đến mọi thứ mà Facebook đang sử dụng trong sản xuất.

Facebook hiện đang sử dụng Reason (OCaml đã được thiết lập sẵn) cho phiên bản web của Facebook Messenger, trong số các dự án khác (WhatsApp, Instagram, Quảng cáo, v.v.).

Năm 2017, họ cũng phát hành reason-react, thứ đã tạo ràng buộc với React để bạn thực sự có thể viết Reason code để biên dịch thành ReactJS.

Vì vậy hãy tưởng tượng không cần phải cài đặt Babel (+ nhiều plugin), Flow, v.v … và chỉ cần sử dụng sức mạnh của OCaml + Reason (hiện hỗ trợ kết hợp React). Đó là một xu hướng lớn đang chuẩn bị bùng nổ trong năm tới.

Reason đã thu hút được sự chú ý của năm 2017 trong lĩnh vực JS so với hầu hết các ngôn ngữ lập trình khác, do đó chắc chắn là một để tiếp tục xem với năm 2018.

GraphQL

GraphQL là một ngôn ngữ truy vấn cho các API (think: a modern take on REST).

GraphQL đã rất thịnh hành vào năm 2017, vì các công ty lớn như Yelp, Spotify, Github, Walmart, NYTimes, v.v … đều dựa trên API GraphQL.

Một số các API này thậm chí còn độc quyền GraphQL, và không có tùy chọn REST nào có sẵn. Nói một cách đơn giản: các công ty sáng tạo đang đặt cược vào GraphQL.

Các API này chắc chắn sẽ không còn tồn tại, nhưng một lần nữa, nhìn vào xu hướng khởi động của các công ty mới, GraphQL là một lựa chọn phổ biến.

Mặt khác, các giải pháp thay thế như Falcor hầu như chưa bao giờ được thảo luận nữa.

Đây chắc chắn là thời gian để bắt đầu học GraphQL nếu bạn muốn có được việc làm tại các công ty sáng tạo.

Redux, Relay Modern và Apollo

Redux là dự án của Dan Abramov / Andrew Clark mà nổi tiếng đã trở thành giải pháp cho việc quản lí của quản lý nhà nước và thu thập dữ liệu trong React.

Nhưng GraphQL đã thực sự gây rắc rối cho Redux, đặc biệt là khi tìm kiếm dữ liệu.

Bây giờ chúng ta đã có Relay Modern (tạo ra bởi Facebook) và Apollo, client framework GraphQL cho phép bạn lấy và truyền dữ liệu GraphVN vào ứng dụng React của bạn hiệu quả hơn Redux.

Giống như một nhà phát triển chỉ ra về Relay / Apollo / Redux:

“Những framework và lợi ích của chúng không phải là loại trừ lẫn nhau. Trong thực tế, sử dụng cùng nhau có thể cung cấp một sự tách biệt tốt đẹp của mối quan tâm đó là rất quan trọng trong phát triển web.”

Điều này có nghĩa là bạn vẫn có thể sử dụng Redux song song với Relay, sử dụng Redux cho trạng thái cục bộ và một số trạng thái phi máy chủ phức tạp và sau đó dùng Relay để nạp lại.

Nhưng cộng đồng đang lo lắng cho một cái gì đó để đơn giản hóa điều này (và cho đến nay các phản ứng duy nhất là Vuex / Vue.js / Apollo hoặc Cashay).

Storybook

Storybook là một môi trường để tìm, phát triển và thử nghiệm các thành phần UI.

Nó bắt nguồn từ thực tế đã chết vào đầu năm, để phổ biến rộng rãi vào giữa năm 2017 nhờ vào nỗ lực lớn từ cộng đồng. Đây là một câu chuyện đầy cảm hứng về cách làm việc với mã nguồn mở đáng để đọc.

Nó vô cùng hữu ích (và thậm chí thú vị khi sử dụng), cho phép bạn xây dựng và thử nghiệm thành phần giao diện người dùng một cách độc lập. Nó giống như một UI style guide mà cung cấp giá trị thực cho nhà phát triển.

Bạn đã có thể gặp một dự án mã nguồn mở bằng cách sử dụng Storybook đã có, nhưng để xem nó trong hoạt động không, hãy kiểm tra Storybook bằng date picker của Airbnb.

Nếu bạn muốn nổi lên như một nhà phát triển vào năm 2018, hãy thể hiện bằng Storybook với dự án gần đây nhất của bạn.

Bonus: Kiểm tra react-bluekit, một Storybook thay cho các team kĩ sư tại Netflix đang sử dụng cho các components library.

Còn tiếp…

Techtalk via Hackernoon

Tham khảo các vị trí tuyển dụng Javascript hấp dẫn tại đây

Machine Learning góp phần cải thiện chiến lược Digital Marketing của bạn như thế nào?

Machine Learning góp phần cải thiện chiến lược Digital Marketing

RankBrain – một công cụ Machine Learning mới được Google tung ra đã góp phần không nhỏ vào kết quả tìm kiếm, khiến nhiều người băn khoăn về những tác động của Machine Learning trong việc tối ưu hóa kết quả tìm kiếm – Search Engine Optimization (SEO).

Chưa bao giờ ngành công nghiệp công nghệ cao đạt tốc độ phát triển ” điên cuồng” như hiện nay, với trí tuệ nhân tạo ( AI), xử lý ngôn ngữ tự nhiên ( NLP), Machine Learning và Chatbots,.. Điều quan trọng nhất trong lúc này là cần phải biết những công nghệ nào? Nó diễn ra ở đâu? Và sẽ tác động như thế nào đến Digital Marketing nói riêng và toàn ngành Marketing nói chung?

Bài viết này sẽ giải thích các khái niệm cũng như chia sẻ một số lời khuyên về cách để thích ứng với Machine Learning.

Sự phát triển và phổ biến của Machine Learning, AI

Thực tế, Machine Learning không còn xa lạ trong giới công nghệ. Khái niệm Machine Learning xuất hiên lần đầu tiên vào năm 1950 và bây giờ đã phát triển thành một công nghệ xây dựng hệ thống thuật toán dựa trên những data trends (xu hướng dữ liệu), models ( mô hình) và các pattern (mẫu) mà nó đã học được từ trước. Với các dữ liệu này, Machine Learning sẽ mô phỏng các quá trình ra quyết định của con người bằng cách phân tích dự đoán.

RankBrain thực sự ghi dấu ấn của mình trong giới công nghệ, các công ty khác cũng bắt đầu quan tâm vào việc thu thập và lưu trữ dữ liệu, khiến Machine Learning trở nên gần gũi với người sử dụng. Đó là chưa kể đến những công cụ Machine Learning mới hiện đang được triển khai và thiết kế để dễ tiếp cận hơn. Với ý nghĩ đó, các công ty lớn đã bắt đầu áp dụng Machine Learning vào việc kinh doanh và tự động hóa tiếp thị.

Tuy nhiên trước khi tiến sâu hơn vào thế giới của Machine Learning cũng như tìm hiểu cách mà nó ảnh hưởng đến Marketing, phải lưu ý rằng Machine Learning không giống với AI. Mặc dù chúng đang được sử dụng thay thế cho nhau, rõ ràng là có những điểm khác biệt giữa hai công nghệ này. Dưới đây là một số điểm khác biệt:

Sự khác biệt giữa Machine Learning và AI?

Trí tuệ nhân tạo là một khái niệm về máy móc có khả năng thực hiện những công việc mà con người cho rằng đó là thông minh. Nói một cách khác, trí tuệ nhân tạo là khi máy móc có thể thực hiện được những công việc tương tự như con người, hoặc thậm chí là tốt hơn cả con người.

Machine Learning là một tập hợp con của AI, bằng cách cung cấp cho máy móc những dữ liệu, sau đó nó học theo cách của riêng nó. Thay vì được lập trình để làm điều gì này, máy móc được cung cấp thông tin mà chúng cần để tự làm. Đơn giản hơn, Machine Learning là một trong những ứng dụng sẽ điều hướng phát triển của AI. Với tư tưởng đó, điều quan trọng là chúng ta phải dạy được máy móc học sao cho đúng, qua đó chúng ta có thể phát triển được trí tuệ nhân tạo.

Tham khảo thêm: Việc làm machine learning job in vietnam lương 3000 USD

Machine Learning và Digital Marketing

Bởi vì Machine Learning đang được sử dụng để giải quyết các vấn đề lớn với sự giúp đỡ của dữ liệu, các kênh truyền thông, nội dung và bối cảnh, cũng như các nhà tiếp thị, chúng ta được hưởng lợi từ thông tin này cũng như toàn bộ quá trình này. Nhưng, khi mà thông tin chúng ta thu thập được ngày càng nhiều hơn, Digital Marketing sẽ được thay đổi.

Tối ưu hóa công cụ tìm kiếm

Từ cách nhìn của một SEO, từ khóa có thể ít quan trọng hơn. Các công cụ tìm kiếm tạo ra nhiều giá trị quảng cáo hơn họ cung cấp cho người dùng những nội dung có chất lượng cao hơn. Kết quả là, các thuật toán họ sử dụng cần phải tập trung vào việc cung cấp cho mỗi người dùng với những nội dung có mục đích cụ thể hơn là việc đưa ra một số lượng lớn những từ khóa chính xác. Do đó, bạn cần phải bắt đầu suy nghĩ về chất lượng nội dung như là một yếu tố xếp hạng trên các công cụ tìm kiếm.

Chiến dịch Pay Per Click

Việc Google tung ra những tính năng thông minh mới như Google Smart Bidding, Smart Display Campaigns và In-Market Audience để giúp các doanh nghiệp tối ưu hóa sự chuyển đổi, rõ ràng rằng tương lai của PPC nằm trong Machine Learning.

Để đưa chiến dịch PPC của bạn lên một tầm cao mới, bạn nên:

Nắm vững những số liệu có giá trị với doanh nghiệp của bạn

Hiểu được những trở ngại có thể xuất hiện trong quá trình đạt được mục tiêu

Biết rõ chương trình điều khiển cơ bản được thực hiện để có thể đưa ra những quyết định chiến lược.

Content Marketing

Mặc dù vẫn giữ vị trí vô cùng quan trọng, Internet đã bão hòa với quá nhiều nội dung. Như đã đề cập ở trên, để thành công, bạn cần phải tạo ra nội dung có giá trị với độc giả. Để làm được điều này, bạn cần phải nắm rõ xu hướng tiêu dùng.

Những công cụ Machine Learning cho phép giảm bớt số lượng thời gian bạn dùng để theo dõi dữ liệu, cũng như cho phép bạn giải mã các dữ liệu tốt hơn, vì vậy, bạn có thể tạo ra những chiến dịch có thể dẫn đến thành công. Quan trọng hơn, điều này có thể áp dụng rất tốt cho chiến dịch email marketing.

Xây dựng liên kết

Sau khi Google công bố các thuật toán Penguin, nhiều người nghĩ rằng xây dựng liên kết sẽ ngừng hoạt động bởi vì Penguin sẽ phạt bất kì doanh nghiệp nào mua bán backlink. Tuy nhiên, thay vì việc biến mất, xây dựng liên kết đã phát triển trở lại. Là một nhà tiếp thị, bạn cần phải tìm kiếm nội dung để công nhận thương hiệu, đẩy mạnh việc đề cập thương hiệu của bạn, và nghiên cứu nội dung cho các bài viết thay vì chỉ đơn giản là mua các liên kết của bạn.

Các vấn đề và cơ hội của Machine Learning cho nhà tiếp thị

Các công cụ của Machine Learning hiện nay khá tốn kém, trong khi đó thực tế là các nhà tiếp thị cảm thấy khó khăn trong việc đáp ứng việc thuật toán đang thay đổi liên tục từ phía Google cũng và các công cụ tìm kiếm khác. Tuy nhiên, cơ hội cho các marketer là không giới hạn. Đây là một trong số chúng:

Dữ liệu không giới hạn

Machine Learning có thể thu thập được những dữ liệu từ các nguồn tin hầu như không giới hạn. Với điều này, bạn có thể điều chỉnh thông điệp thương hiệu dựa trên hành vi của người tiêu dùng, cho phép tự động hóa và cá nhân hóa quy trình tiếp thị bằng việc để công cụ máy móc đưa ra các quyết định về nội dung, thực hiện và thậm chí là cả thiết kế trong thời gian thực.

Phân khúc khách hàng

Phân khúc khách hàng vô cùng quan trọng và là một công việc chiếm nhiều thời gian. Machine Learning được sử dụng để xác định các phân khúc trong thị trường mục tiêu của bạn cũng như tạo ra các micro-segments dựa trên các mẫu hành vi. Dữ liệu này giúp tạo ra một dự đoán để tiếp cận đến phân khúc khách hàng, cho phép bạn tiếp cận khách hàng thông qua quá trình mua bán của khách hàng.

Giá trị trọn đời của khách hàng

Giá trị trọn đời khách hàng được đánh giá dựa trên nhân khẩu học, lịch sử mua hàng, sự tương tác của họ với chiến dịch marketing, cũng như các hành động họ tương tác trên nền tảng. Machine Learning tính toán giá trị trọn đời khách hàng một cách chính xác, do đó nó cho phép bạn tối ưu hóa tương tác với khách hàng theo cách phù hợp nhất.

Tương lai của Machine Learning

Các nhà nghiên cứu tin rằng Machine Learning sẽ tiếp tục phát triển trên nền tảng thị trường di động, sẽ xuất hiện trong hầu hết các ứng dụng, thiết bị trợ giúp kỹ thuật số và AI cũng như trong toàn ngànhcông nghệ. Nó thậm chí có thể gia nhập vào lĩnh vực máy bay không người lái và ô tô tự lái.

Tuy nhiên, nhu cầu cần nhiều hơn dữ liệu và thuật toán đang tăng cao, bạn có thể mong chờ những công cụ Machine Learning trở nên có sẵn. Đây là một tin tốt với một số người, tuy nhiên điều quan trọng vẫn là chúng ta luôn phải học hỏi từ những gì đang có để có thể điều chỉnh chính xác quy trình marketing cũng như tránh những rủi ro có thể xuất hiện.

Lời khuyên cho việc thích ứng với Machine Learning

Machine Learning đang trên đà tăng trưởng, cùng với nó, những công cụ mới và thuật toán cũng đang được tung ra mỗi năm, chính vì vậy, điều quan trọng là những doanh nghiệp phải biết điều chỉnh quy trình cho phù hợp. Tầm quan trọng của nội dung, xây dựng liên kết, chiến dịch PPC và SEO đều đã được đề cập ở trên, tuy nhiên để có thể tận dụng được tất cả các cơ hội, bạn cũng phải:

Tạo một trang web tương thích với mọi thiết bị

Có một respontive web với thời gian tải nhanh, hỗ trợ nhiều medias, và thân thiện với mobile là rất quan trọng đến xếp hạng trên Google. Nghiên cứu đã chỉ ra rằng việc cải thiện thiết kế web có thể tăng đáng kể lưu lượng truy cập của bạn. Phải đảm bảo rằng bạn thực hiện được nhiều loại kiểm tra trên trang web và giữ được người sử dụng mọi lúc.

Tối ưu hóa tìm kiếm địa phương

Để xếp hạng cao trên Google, bạn cần phải tối ưu hóa tìm kiếm địa phương. Điều này có nghĩa là nên tập trung vào danh sách kinh doanh với tên chính xác, địa chỉ, đường dẫn website, và các thông tin chi tiết của công ty trên một loạt các nền tảng, đáng chú ý nhất là Yelp, Google My Business và Yellow Pages.

Sẵn sàng cho việc tìm kiếm từ khóa bằng giọng nói

Sự kết hợp của Machine Learning và tìm kiếm bằng giọng nói đã tạo nên một Conversational Search Term, thứ mà doanh nghiệp nào cũng phải có nếu muốn được xếp hạng cao trên Google. Ngoài việc xếp hạng những từ khóa dài, cũng cần cân nhắc việc tạo nội dung để giải đáp những câu hỏi của khách hàng thông qua đàm thoại.

Tham khảo thêm: Việc làm machine learning job in vietnam lương 3000 USD

Luôn cập nhật xu hướng mới

Công nghệ thay đổi không ngừng, điều quan trọng nhất lúc này là luôn giữ cho mình được cập nhật những tin tức mới nhất, nếu không muốn bị bỏ lại phía sau.

Sự kiện DIGITAL MARKETING 2018 LANDSCAPE sẽ đem đến cái nhìn toàn diện cho các Marketer thông qua các chủ đề:

🔆Topic 1: Xu hướng Digital Marketing 2018 và thực trạng truyền thông số ở Việt Nam
🔆 Topic 2: Công việc thực sự của một Digital Marketer và đánh giá hiệu quả của chiến dịch Marketing
🔆 Topic 3: Sử dụng Machine Learning để tối đa hóa doanh thu từ Digital Marketing như thế nào?
🔆 Topic 4: Ứng dụng Marketing Automation vào việc cải thiện tỉ lệ chuyển đổi

 

Những sự kiện đáng chú ý của Meet Up

👑 All about Product Management

👑 Dùng React Native làm một ứng dụng như Uber/Grab trong 3 giờ: https://meetup.vn/e/qIW

👑 Digital Marketing 2018 lanscape: https://meetup.vn/e/bpa

👑 Bắt đầu nghiên cứu Big Data từ đâu và như thế nào? https://meetup.vn/e/1lH

👑 Bắt đầu nghiên cứu AI từ đâu và như thế nào? https://meetup.vn/e/auG
👑 Facebook Marketing 2018: https://meetup.vn/e/CAs

👑 Thiết kế hệ thống E-Commerce yêu cầu ổn định và khả năng mở rộng: https://meetup.vn/e/XKV.

 

TopDev

Developer Việt đang ở đâu trên bản đồ năng lực lập trình thế giới?

Theo nghiên cứu mới nhất của HackerRank, Việt Nam xếp thứ 23 thế giới về năng lực developer, còn theo kết quả mới nhất trên đấu trường CodeFights thì developer Việt Nam cũng đang chiếm giữ nhiều vị trí dẫn đầu. Có thể khẳng định một điều chắc chắn rằng, năng lực của developer Việt Nam không hề thua kém bạn bè quốc tế.

Với sự phát triển vũ bão của công nghệ đã mở ra một thị trường vô cùng tiềm năng cho các developer phát triển. Trong đó, Việt Nam luôn được đánh giá là một trong những “mỏ vàng” về nhân lực IT trẻ, chất lượng. Do đó, ngày càng có nhiều công ty về công nghệ đã “chọn mặt gửi vàng” tại thị trường Việt Nam, và IT Consultis – công ty chuyên cung cấp giải pháp kỹ thuật số đa quốc gia, cũng đã lựa chọn như vậy.

Cùng TopDev trò chuyện cùng Mr Thomas Guillemaud – Co-founder & COO của IT Consultis phân tích những ưu – nhược điểm của developer Việt Nam hiện nay.

1. Anh có thể giới thiệu đôi nét về bản thân cũng như về IT Consultis được không?

Tôi là Thomas Guillemaud – Co-founder & COO của IT Consultis, là một digital agency được thành lập vào năm 2011 bởi 3 thành viên là Yoan Rigart-Lenisa, Aurelien Rigart và tôi. Chỉ trong 6 năm, IT Consultis đã phát triển nhanh chóng với đội ngũ hơn 60 chuyên gia trong  lĩnh vực digital, đến từ nhiều quốc gia trên thế giới. Hiện nay, công ty có 3 văn phòng ở TP. Hồ Chí Minh – Việt Nam, Thượng Hải – Trung Quốc và Singapore. Chúng tôi đã xây dựng văn phòng tại Việt Nam từ 18 tháng trước và đã có mặt tại Singapore từ tháng 11 năm 2017.

IT Consultis chuyên nghiên cứu và cung cấp các dịch vụ như triển khai giải pháp digital, tư vấn chiến lược cho dự án, phát triển toàn diện website, ứng dụng mobile, thương mại điện tử và trải nghiệm điểm bán hàng. Khách hàng của công ty đều là các tổ chức và thương hiệu đa quốc gia như: GAP, Zara, Porsche, Decathlon, Budweiser, Leica, v.v

Công ty cũng đặt kì vọng sẽ trở thành Digital agency độc lập hàng đầu cho các thương hiệu quốc tế tại Châu Á vào năm 2020.

2. Anh có thể giới thiệu một sản phẩm nổi bật mà công ty hiện đang làm?

Như các bạn đã biết là IT Consultis vốn có văn phòng chính tại Trung Quốc, một trong những sản phẩm nổi bật mà IT Consultis từng tham gia là WeChat, một ứng dụng cực kì nổi tiếng tại thị trường Trung Quốc và trên thế giới, với nhiều tính năng nổi bật cũng như tích hợp các mini web bên trong nó.

WeChat là một siêu ứng dụng bởi nó có rất nhiều hệ thống kết hợp với nhau từ gọi taxi cho đến cả việc mua hàng online. Nói cách khác, người dùng có thể làm rất nhiều thứ chỉ với một ứng dụng. Cụ thể nhiệm vụ của chúng tôi chính là thực hiện các sản phẩm bên trong siêu ứng dụng Wechat này đồng thời đảm bảo sản phẩm trở nên bắt mắt người dùng. (cười)

 

3. Tại sao IT Consultis lại chọn Việt Nam là điểm đến thứ 2 ?

Đầu năm 2016, công ty tìm kiếm một thị trường đa dạng và năng động, đặc biệt là nơi có nguồn lao động chất lượng để mở rộng quy mô kinh doanh, đa quốc gia, vươn ra Châu Á. Và Việt Nam trở thành một lựa chọn tuyệt vời bởi con người, văn hóa cũng như những chính sách kinh doanh ở đây.

4. Theo anh ưu điểm của thị trường developer Việt Nam là gì?

Việt Nam và Trung Quốc khá gần nhau do đó mà khung giờ làm việc cũng không có quá nhiều khác biệt giữa hai văn phòng. Chính vì vậy, dù làm việc ở văn phòng nào thì vẫn có thể hoạt động như một team thật sự và việc quản lí cũng trở nên hiệu quả hơn. Hơn nữa tôi cũng cực kỳ yêu mến đất nước và con người Việt Nam.

Bên cạnh đó, ở Trung Quốc vấn đề chủ yếu là từ hệ thống giáo dục. Bởi nhà trường tập trung vào Java, .Net trong khi IT Consultis thì chọn làm việc với những công nghệ open source như React. Do đó để thuê những developer chuyên về các ngôn ngữ “hiếm” trong thị trường Trung Quốc sẽ tốn chi phí rất cao. Và như vậy IT Consultis không còn lựa chọn khác ngoài nâng giá dịch vụ, và điều đó hoàn toàn không có lợi cho khách hàng.

5. Công ty của anh có gặp khó khăn gì trong việc tuyển dụng tại Việt Nam?

Tôi nghĩ vấn đề tìm kiếm một ứng viên phù hợp luôn rất khó tại mọi thị trường chứ không riêng gì ở Việt Nam. Khi so sánh với thị trường Trung Quốc thì tuyển dụng tại Việt Nam dễ dàng hơn, do ở Việt Nam, các bạn đã có kinh nghiệm làm việc outsource với các dự án của nước ngoài nên các ứng viên thường thích nghi tốt hơn so với thị trường Trung Quốc.

Chúng tôi có mở văn phòng tại Singapore tập trung vào tìm kiếm khách hàng và mở rộng thị trường trong khi văn phòng Việt Nam thì tập trung vào việc phát triển sản phẩm và thu hút nguồn nhân lực giỏi tại đây. Tôi tin rằng Việt Nam sẽ phát triển rất nhanh nhờ vào các chính sách hội nhập rất tích cực.

Vấn đề khó khăn nhất nằm ở việc giao tiếp đòi hỏi các ứng viên phải có khả năng nói tiếng Anh bởi IT Consultis là công ty đa văn hóa với hơn 14 quốc tịch khác nhau, nên việc tìm kiếm được một ứng viên vừa có kĩ năng đồng thời lại thành thạo ngoại ngữ cũng cần thời gian.

IT Consultis hiện có 60 nhân viên với 14 quốc tich khác nhau,với 3 văn phòng tại Việt Nam, Trung Quốc và Singapore, đồng thời có đại diện làm việc tại New Zealand và Pháp.

Dù vậy,  IT Consultis hiện tại rất hài lòng khi chiêu mộ được nhiều tài năng chủ chốt phù hợp với yêu cầu và văn hoá làm việc của công ty.

6. Anh có lời khuyên nào cho developer tại Việt Nam không?

Tôi nghĩ rằng lời khuyên tốt nhất mà tôi có thể dành cho các bạn là hãy luôn tò mò, bạn cần liên tục cập nhật kiến thức, xu hướng thị trường. Bạn nên nghiêm túc và đam mê công việc của bạn. Và đó là cách bạn có thể vừa có niềm vui mà có thể phát triển sự nghiệp của mình. Bởi vì nếu bạn vẫn còn thiếu định hướng bạn sẽ không thể tồn tại và theo kịp sự phát triển của ngành. Bạn phải luôn luôn học hỏi và áp dụng nhanh hơn những người khác. 

7. Vậy anh đánh giá cao những kỹ năng nào ở một developer?

Công ty luôn rất chú trọng vào giá trị sản phẩm và con người thế nên yếu tố hàng đầu là tinh thần trách nhiệm. Mặt khác, IT Consultis rất quan tâm tới chất lượng sản phẩm bởi sự đòi hỏi gắt gao từ phía khách hàng. Mỗi developer cần phải hiểu rõ vì sao họ cần phải thực hiện những yêu cầu công việc với tiêu chuẩn cao như vậy. Ngoài ra khả năng đưa ra quyết định cũng rất quan trọng. Việc mắc sai lầm không phải điều trầm trọng bởi các bạn sẽ học và cải thiện từ những trải nghiệm này.

Các bạn cũng phải luôn có mặt và hỗ trợ cho team theo tinh thần làm việc nhóm.

Công ty luôn hướng tới cái mới, liên tục phát triển và thay đổi, do đó khi đứng trước các công nghệ tiên tiến, IT Consultis luôn sẵn sàng và hoàn toàn có thể ứng dụng ngay lập tức.

Chính trực cũng là một phẩm chất vô cùng quan trọng, bởi các bạn làm việc trong một nhóm nên việc các thành viên tin tưởng và tôn trọng lẫn nhau là cần thiết.

Cuối cùng là các developer cần phải hoà nhập với văn hoá công ty bởi sự đóng góp nhỏ bé của mỗi thành viên sẽ tạo nên những thay đổi vô cùng mạnh mẽ và quan trọng

8. Câu hỏi cuối cùng, theo anh vì sao các bạn developer nên chọn IT Consultis là nơi làm việc lý tưởng ?

IT Consultis vẫn đang tìm kiếm những bạn developer tài năng, thông qua các sự kiện và hội thảo trong ngành IT nhằm có thể thu hút nhiều ứng viên đa dạng hơn cũng như tạo thương hiệu và mang hình ảnh công ty – một trong những nơi làm việc hàng đầu đến gần với ứng viên hơn. Ngoài ra, công ty cũng duy trì và cải tiến nhiều chính sách phúc lợi đặc biệt nhằm giữ chân nhân tài cũng như tạo động lực cho các bạn phát triển và cống hiến cho công ty như: các phúc lợi được bảo đảm, văn hóa làm việc cởi mở, năng động, cơ hội được làm việc trong môi trường đa quốc gia, du lịch thường niên, và tham gia các khóa đào tạo kỹ năng nội bộ … Không chỉ là nơi làm việc, IT Consulits quan tâm đến mỗi cá nhân và thành viên trong tổ chức, sự phát triển của bạn là sự phát triển của công ty, và bạn sẽ nhận được tương xứng với những nỗ lực và đóng góp của mình. IT Consultis chính là gia đình thứ hai của bạn.

Cảm ơn anh về những chia sẻ thú vị của mình

TopDev