Home Blog Page 221

5 ngôn ngữ lập trình mới bạn cần phải biết trong năm 2022

Lập trình viên hiện là một trong những ngành Hot nhất hiện nay. Cho dù là bạn chỉ mới chập chững lập trình hay là đã là một programmer chuyên nghiệp, bạn vẫn luôn tự hỏi mình rằng: Nên học tiếp cái gì đây?

Với sự phát triển và thay đổi vượt bật của ngành web, bạn sẽ luôn thấy rằng có rất nhiều thứ mới mẻ mà bạn cần phải học. Nhưng câu hỏi đặt ra là bạn sẽ học ngôn ngữ lập trình mới nào đây?

Sở thích, kiến thức bản thân, mục tiêu sự nghiệp là những thứ bạn nên cân nhắc để đưa ra lựa chọn cho ngôn ngữ mình muốn học. Ngoài ra bạn cũng nên xem thêm về bảng xếp hạng các ngôn ngữ hàng đầu được giới công nghệ ưa thích với những lựa chọn không thể nào sai được với Java hoặc Python. Nhưng nếu bạn muốn thử một thứ khác lạ, để đáp ứng cho một lĩnh vực đặc biệt mà lại có nhu cầu cao. Bài viết sẽ giới thiệu 5 ngôn ngữ lập trình mới trong năm nay, đáng để bạn học.

Groovy

Groovy là một loại ngôn ngữ lập trình tập trung về object-scripting, được tạo ra bởi Apache dành cho platform Java. Dự án vốn được bắt đầu từ 2003 nhưng mãi đến 2007 thì phiên bản ổn định đầu tiên (Groovy 1.0) mới được chính thức tung ra. Kể từ đó, Groovy đã được nhiều ông lớn công nghệ sử dụng như Netflix, Linkedin, Airbus, and Mastercard.

Groovy được đánh giá là được viết ra cho Java bytecode, vì thế mà nó hoạt động rất hiệu quả với bất cứ Java library nào. Nếu bạn đã lập trình được bằng Java hoặc bất cứ ngôn ngữ nào sử dụng cú pháp curly-bracket thì bạn sẽ học được Groovy khá dễ dàng.

Nếu bạn muốn tìm hiểu thêm về những lợi ích của Groovy so với Java hãy vào xem cuộc thảo này trên Quora về những điểm mạnh của Groovy, cũng như JavaRevisited blog với bài viết phân tích 10 điểm khác nhau giữa Groovy và Java. Ngoài ra, trang chính của Groovy cũng có một bài tóm tắt về sự khác biệt của nó.

Do Groovy là một nguồn mở, bạn có thể tìm mã gốc tại Github, hoặc bạn đóng góp công sức vào project đó luôn nếu bạn muốn.

Mặc dù Groovy được đánh giá cao bởi nó giúp developer làm việc tốt hơn, nhưng nó còn cho phép ta dùng Grails Web Application Framework.

Nói cách khác, Grails cho phép ta tạo ra các ứng dụng web với Groovy. Bao gồm các tính năng khá thú vị như integrated ORM / NoSQL support, pluggability, powerful view technology, etc.

Rust

Rust được xếp hạng nhất trong hạng mục “The Most Loved” từ cuộc khảo sát về developer của Stack Overflow’s 2016, bởi tiềm năng của nó. Rust là một ngôn ngữ về hệ thống lập trình của Mozilla. Rust Không dùng để tạo ra các ứng dụng cho end-use mà là cho các hardware. Vì thế mà nó nằm chung nhóm với những ngôn ngữ lập trình như C hoặc C++ (Chứ không phải là JavaScript, Python, Perl, etc.).

Mozilla tuyên bồ rằng mục đích của Rusttận dụng tối đa sức mạnh của multi-core processor. Rust tập trung vào việc tối ưu hóa performancememory safety, nó ngăn chặn sự xuất hiện của lỗi phân mảng cũng như rất dễ học nhờ vào cú pháp đơn giản. Danh sách các ông lớn sử dụng Rust cũng khá là ấn tượng với Dropbox, Telenor Digital, Coursera, và SmartThings.

Rust là một open-source, vì thế mà bạn có thể kiếm mã gốc của nó trên Github. Nếu bạn có hứng thú và muốn học nó thì có thể bắt đầu với The Book, được viết bởi chính nhóm tạo ra Rust. Ngoài ra bạn có thể download Rust compiler từ chính trang web của Rust, ngoài ra bạn cũng có thể tìm thấy khá nhiều thông tin hữu ích trên đó.

Ở video dưới đây, các developer của Mozilla đang nói về nguyên nhân vì sao họ hi vọng Rust sẽ giúp web app trở thành một đối thủ với các ứng dụng truyền thống trong tương lai, cũng như việc nó giải quyết những hạn chế của C++.

Elixir

Elixir là ngôn ngữ lập trình chuyên về functional programming, cho phép developer tạo ra các ứng dụng có liên quan tới realtime distrubuted. Được khai sinh vào 2011 bởi một core Ruby contributor với mục đích giải quyết vấn đề của Ruby liên quan tới việc viết các đoạn code concurrent. Elixir được tạo ra nhằm cải thiện hiệu năng của các ứng dụng Rails chạy trên nhiều CPUs (vào đây để biết thêm chi tiết)

Elixir là một lựa chọn tuyệt vời cho lập trình các ứng dụng dành cho network và những hệ thống phản hồi cao cấp như phần mềm cho ngân hàng, và cho data processing. Elixir chạy trên Erlang Virtual Machine (BEAM)  và được compiled cho Erlang bytecode. Vì vậy mà Elixir developer có toàn quyền truy cập vào Erlang’s ecosystem.

Nếu bạn vẫn chưa biết gì về functional programming, thì bắt đầu với Elixir ngay sẽ trở nên khó khăn hơn, nhưng nó có thể giúp bạn có một cách nhìn hoàn toàn mới về lập trình. Nói cách khác, functional programming thực ra rất khác biệt so với object-oriented programming bởi nó không hề dùng tới objects và classes mà lại sử dụng operations trong functions và modules.

Nếu bạn muốn có thêm thông tin và cảm hứng trước khi nhập cuộc thì hãy đọc qua bài viết của Spreedly Engineering về You’re Smart Enough for Elixir, nó thật sự sẽ giúp bạn cảm thấy tự tin lên rất nhiều. Ngoài ra official Elixir website cũng có khá nhiều nguồn hữu ích, hướng dẫn chi tiết để bạn có thể học Elixir nhanh nhất có thể. Elixir cũng có mặt trên diễn đàn Github nên bạn có thể kiếm mã nguồn của nó để xem những vấn đề cũng như các thay đổi cập nhật được đưa ra.

Go

Ngôn ngữ lập trình Go được Google tung ra vào 2009, kể từ đó, hãng cũng dùng nó trong nhiều hệ thống khác nhau. Go là một ngôn ngữ lập trình về số liệu – statically typed, concurrent, compiled với mục đích kiếm soát và giải quyết các vấn đề lập trình mà các công ty lớn đang gặp phải. Vì thế mà tương tự như Java và C++, Go cũng thích hợp với những hệ thống lớn.

Theo kết quả từ cuộc khảo sát về GO 2016, phần lớn các developer đều hài lòng với GO. Lí do được nói đến nhiều nhất là bởi vì Go rất đơn giản, dễ sử dụng, hiệu năng tốt và có tính năng concurrency. Go còn giảm thiểu thời gian cho compile nhờ đó mà việc code-test-build loop diễn ra thuận lợi hơn. Vì thế mà GO được đánh giá là lí tưởng cho Test-Driven Development (TDD).

Nếu bạn muốn biết thêm về những tính năng và lợi ích của GO, hãy đọc bài viết này để hiểu thêm vì sao mà GO lại được nhiều người yêu thích. Go có một lượng người dùng là các công ty công nghệ hàng khủng như Youtube, Bitbucket, Basecamp, BBC, Dropbox, và còn nhiều nữa (List về Go user).

Go trang chủ là một nguồn vô cùng hữu ích, bạn có thể tìm thấy một live demo khá cool để test Go hoạt động như thế nào, và còn nhiều thứ hữu ích khác nữa như documentation, packages, hướng dẫn cài đặt, Go blog. Tất nhiên, Go cũng là open-source, nên bạn có thể tìm được mã nguồn của nó tại Github.

R

Trong những năm gần đây, R càng được nhiều developer biết đến nhờ vào lượng data cực lớn mang tính cách mạng. R có thể xem là phiên bản open-source của proprietary S, được viết ra với sự hợp tác của Ross Ihaka và Robert Gentleman, thuộc đại học Auckland ở New Zealand vào những năm 1990s.

R có thể được dùng cho tính toán thống kê và đồ họa, nó cho phép bạn hoàn thành được những task như data processing, data mining, data analysis, và statistical reporting.

Hiện nay, R đang được rất nhiều công ty săn đón, theo O’Reilly’s 2016 Data Science Salary Survey, các R developer luôn có mức lương rất ấn tượng. Không có gì đáng ngạc nhiên khi R cũng là một trong những ngôn ngữ quan trọng nhất của MOOCs.

Bạn có thể download R từ trang web chính của nó, ngoài ra còn có The R journal, manualsbooks. Còn nếu bạn muốn đọc những bài viết mới hơn thì R-bloggers là một nơi lí tưởng với tính năng cho phép bạn viết ra blog về R của chính mình.

R sử dụng SVN để kiểm soát và quản lí các version và bản cập nhật nhưng bạn có thể vào read-only mirror của mã nguồn tại Github, vốn sễ dễ dàng hơn cho bạn. Nếu bạn tò mò muốn biết thêm các project có sử dụng R thì hãy vào đây theo dõi.

Nguồn: blog.topdev.vn via Hongkiat

 

5 điểm nóng trong ngày khai mạc Vietnam Mobile Day tại Tp.HCM

Chỉ còn ít ngày nữa, Ngày hội Di động Toàn Quốc – Vietnam Mobile Day sẽ chính thức khai mạc tại Tp.HCM (20/05). Trong những thời khắc cuối cùng này, hãy cùng BTC sự kiện điểm lại 5 tâm điểm nóng tại sự kiện, bạn nhé!

Phiên Khai Mạc – Xác định bức tranh toàn cảnh của ngành

Vietnam Mobile Day tự hào là 1 trong những mùa sự kiện quy tụ đông đảo nhất các “đại gia công nghệ” trong nước và thế giới đang hoạt động trong lĩnh vực IT – Mobile. Mỗi “đại gia công nghệ” ấy lại đóng vai trò như 1 đại sứ vẽ lại 1 khía cạnh trong bức tranh toàn cảnh về xu hướng ngành, cung cấp những số liệu – dự báo hữu ích để hỗ trợ hoạt động kinh doanh/ phát triển của các cá nhân và doanh nghiệp tham dự.

  • Microsoft tập trung vào những chuyển đổi về kĩ thuật số với topic Digital Transformation
  • Nielsen khắc họa cách Mobile thay đổi hình thái thương mại điện tử tại Vietnam với How Mobile is transforming the E-commerce in Vietnam
  • Google hướng đến các doanh nghiệp/ Tech startup bằng chủ đề Building for Billions
  • MasterCard – tập đoàn toàn cầu trong lĩnh vực Thanh Toán cũng đồng hành cùng Vietnam Mobile Day qua topic Hội tụ Công nghệ Số – Digital Convergence.

Đặc biệt, 2 chủ đề đinh khác tại Phiên Khai Mạc được bật mí vào phút cuối hứa hẹn sẽ làm hài lòng những khách tham dự khó tính nhất.

Mang trải nghiệm tại thị trường thế giới về Việt Nam

Sự hiện diện của các diễn giả đến từ Facebook, Microsoft, Youtube, Google… với các topic chuyên sâu, chia sẻ từng công nghệ tân tiến nhất, từng bí kíp cập nhật nhất đang được thế giới áp dụng là điểm nóng khác không thể bỏ qua.

Nếu chủ đề On how app developers can build integrations with Workplace của diễn giả Nakul Patel – Head of Facebook SMBs APAC sẽ cho bạn biết cách xây dựng các integrations với Workplace đang được áp dụng tại Facebook thì chủ đề App re-engagement strategies của diễn giả Phương Nguyễn – Strategic Partner Manager (Online Partnership Group, Google Asia Pacific) sẽ đề cập, phân tích rõ các chiến lược App re-engagement hiệu quả cần được cân nhắc và lựa chọn.

Tham gia đại tiệc Vietnam Mobile Day
Gặp gỡ hàng trăm diễn giả trong lĩnh vực IT, Marketing, Design ngay hôm nay

Ngoài ra, những startup đang muốn tận dụng công cụ Youtube để tạo viral truyền thông, thực hành chiến thuật Growth Hacking có thể tìm kiếm được nhiều kiến thức bổ ích với chủ đề Cách build Youtube viral channel/ viral content cho start up của diễn giả Phan Dũng – Youtube Ambassador, đồng thời là Co-Founder & COO tại BIG CAT và CEO kiêm Co-Founder của Compare.vn.

Đặc biệt, với những ưu điểm về thời gian, chi phí… khi phát triển Cross-platform, topic Introduction to Xamarin – Cross-platform Mobile Development của diễn giả Khương Nguyễn, MVP của Microsoft sẽ cung cấp cái nhìn chi tiết về mặt kĩ thuật dành cho các nhà phát triển đa nền tảng tương lai.

Nhóm chủ đề Trending Technology – AI, IoT, Chatbot lên ngôi

Các ứng dụng của AI, IoT, Chatbot… là những minh chứng sống động nhất, thể hiện Cuộc Cách Mạng Công Nghệ 4.0 đang đến gần hơn bao giờ hết. Chúng ta đã có Cortana, Skype, Tay, Xiaoice của Microsoft), Alexa của Amazon, Bots cho Messenger của Facebook), Siri của Apple, Google Now trên các điện thoại Android của Google, Slack của Slack… Hơn lúc nào hết, đây chính là thời điểm tốt nhất để bạn nghiên cứu công nghệ tương lai này.

Bắt kịp xu hướng, Vietnam Mobile Day đã chọn ra những topic trọng tâm để truyền tải chính xác “nhịp đập nóng hổi” của AI/ Chatbot/ IoT hiện nay tại Việt Nam lẫn thế giới, tiêu biểu có thể kể đến: How to Adapt to Changes in a Tech & Business, Nanny Robot with Microsoft IoT, Machine learning and AI in Mobile applications, Ứng dụng AI và blockchain để tối ưu hóa đầu tư mạo hiểm

Bí quyết tối ưu hóa công việc lập trình – Món ăn không thể thiếu

Như thường lệ, các bí quyết tối ưu hóa công việc lập trình/ thiết kế dành cho các nhà phát triển ứng dụng là nhân tố không thể thiếu tại Vietnam Mobile Day. Hầu hết các chủ đề trong chuyên mục này hoặc là tập trung vào các giải pháp mới hỗ trợ developer hoặc sẽ làm bật lên những điểm ưu việt ở từng công cụ/ platform để giúp developer đưa ra lựa chọn phù hợp nhất cho dự án của mình.

Các topic hỗ trợ công việc lập trình tiêu biểu như: Xây dựng hệ thống xử lý bất đồng bộ có độ ổn định và hiệu năng cao, Modern DevOps flow to improve developer’s productivity, Tăng tốc lập trình Android với Kotlin

Các topic nêu bật tính năng của mỗi công cụ/ platform: Crossplatform/Native/Web app, lựa chọn nào cho dự án?, The beauty of React Native, Unidirectional Data Flow Architecture – Kiến trúc Facebook sử dụng để phát triển ứng dụng, Emotional UX, Cân nhắc chi phí và lợi ích của Mobile Test Automation

Mobile Marketing, Digital Marketing – Trọn vẹn cho đại tiệc Mobile

Nằm trong top 3 nhóm chủ đề được quan tâm nhiều nhất của sự kiện trong 7 năm tổ chức vừa qua, Mobile Marketing nói chung và Digital Marketing nói riếng luôn chiếm thời lượng “lên sóng” đáng nể với chất lượng nội dung ngày càng tăng cao, đáp ứng được nhu cầu của cộng đồng Marketer rộng lớn.

Cùng điểm qua những chủ đề về Mobile Marketing/ Digital Marketing sẽ được đem ra “mổ xẻ”, “chiêu đãi” người tham dự: Triết lý “Zero Cost” marketing cho startup, Killer Feature sẽ làm cho ứng dụng của bạn trở nên khác biệt, Educate khách hàng trước khi làm Marketing, 5 yếu tố ảnh hưởng đến doanh thu quảng cáo của ứng dụng, Làm thế nào để ứng dụng của bạn trở nên đặc biệt?, Cách sử dụng Offer để tăng gấp đôi doanh thu

Tham gia đại tiệc Vietnam Mobile Day
Gặp gỡ hàng trăm diễn giả trong lĩnh vực IT, Marketing, Design ngay hôm nay

Ngoài 5 điểm nóng đã kể trên, Vietnam Mobile Day năm nay cũng đón chào hàng chục topic khác được các diễn giả kinh nghiệm chia sẻ như: Cách tiếp cận làm Mobile App cho doanh nghiệp của diễn giả Nguyễn Duy Vỹ – Marketing Director của Tugo, Kinh nghiệm tối ưu trải nghiệm người dùng trên Mobile tại thegioididong.com của diễn giả Nguyễn Thanh Tùng (Tùng Jacob) – Product Director của Thế giới Di động, Đi làm startup với các công ty lớn như Google, Facebook của diễn giả Lê Yên Thanh – Backend Developer của Umbala…

Vietnam Mobile Day là một trong những chuỗi sự kiện lớn nhất về Mobile được tổ chức hàng năm với quy mô hơn 120 chủ đề, gần 100 diễn giả cùng khoảng hơn 10,000 lượt tham dự ở 3 miền đất nước.

Với sứ mệnh hỗ trợ và đẩy mạnh thị trường Mobile tại Việt Nam, Vietnam Mobile Day hy vọng sẽ quy tụ và kết nối được rất nhiều công ty, đối tác với nhau, từ đó phát triển thêm nhiều mối quan hệ cần thiết cho những bước tiến mạnh mẽ về sau. Đây chắc chắn sẽ là một Ngày hội không thể bỏ lỡ cho những ai quan tâm đến lĩnh vực công nghệ nói chung và Mobile nói riêng.

  • Thời gian & địa điểm:
    – 20/05/2017 tại Trung tâm hội nghị 272, Võ Thị Sáu, Q.3, Hồ Chí Minh
    – 27/05/2017 tại Trung tâm hội nghị và tiệc cưới Forevermark, 614 Lạc Long Quân, Quận Tây Hồ, Hà Nội
    – 03/06/2017 tại One Opera Danang hotel, 115 Nguyễn Văn Linh, Q. Hải Châu, Đà Nẵng
  • Website thông tin chi tiết: http://mobileday.vn
  • Mọi chi tiết thắc mắc xin liên hệ
    ngoc.do@applancer.net (Ms. Ngọc) | 0944 685 243
    event@applancer.net (Event Team) | 08 6273 3497

“Vệ Binh Dải Ngân Hà” của Vietnam Mobile Day là ai?

Vietnam Mobile Day là ngày hội thường niên lớn nhất trong lĩnh vực Ứng dụng Di động, cập nhật những kiến thức mới, chuyên sâu từ các diễn giả được mời về từ những công ty, tập đoàn công nghệ tiên phong trong nước và quốc tế.

Để đáp ứng đầy đủ nhu cầu của người tham dự đa dạng từ Developer, Marketer, Designer đến đại diện các Tech startup, sự kiện năm nay mở rộng đến hơn 120 chủ đề chuyên sâu, hơn 100 diễn giả đến từ nhiều lĩnh vực trong ngành công nghiệp Mobile.

Phái đoàn hùng hậu của Google và Facebook

Có thể nói, 7 “vệ binh” đến từ dải ngân hà Google và Facebook xuất hiện tại Vietnam Mobile Day mang trong mình không chỉ là sứ mệnh lan tỏa tầm nhìn, định hướng của hai ông lớn trên đối với tương lai của nền công nghệ toàn cầu mà còn thể hiện tinh thần kết nối, sẻ chia những kiến thức, kinh nghiệm tại thị trường khu vực và thế giới đến hệ sinh thái Mobile Việt Nam.

Cụ thể, những chủ đề mà diễn giả Google mang đến vừa có tính chiến lược vừa giải quyết các vấn đề thực tiễn trong quá trình phát triển ứng dụng: Làm thế nào để xây dựng các ứng dụng có lợi nhuận tốt? Bí quyết nào để thực hiện App Localization hiệu quả? Hoạch địch App Re-engagement ra sao? Những đặc điểm nào cần chú ý đối với người dùng App tại thị trường Việt Nam?… Tất cả sẽ được giải đáp bởi chính những diễn giả kinh nghiệm đang giữ chức vụ cấp cao của Google tại Vietnam Mobile Day

Các diễn giả Google tại sự kiện:

  • Chị Gaby Hiền – Business Development Manager thuộc Online Partnership Group của Google với chủ đề App Re-engagement Strategies
  • Anh Aimen Khan – Mobile App Consultant của Google Marketing Solutions với chủ đề Building a Profitable App Business with Google
  • Chị Vân Vương – Strategic Partner Manager thuộc Online Partnership Group của Google với chủ đề Going global: Unlocking the secrets of app localization
  • Chị Phương Nguyễn – Strategic Partner Manager thuộc Online Partnership Group của Google Asia Pacific với chủ đề Re-Engagement Strategies for Apps
  • Anh Trường Đỗ – App Dev Account Manager của Google Asia Pacific  với chủ đề Mobile App User Landscape in Vietnam

Trong khi đó, nhóm chủ đề mà các chuyên gia Facebook chia sẻ tại Vietnam Mobile Day lại liên quan đến hoạt động của doanh nghiệp, đi sâu phân tích cách để các App Developer xây dựng Integration trên Workplace – một ứng dụng di động và ứng dụng web được thiết kế nhằm mục đích duy trì kết nối các thành viên trong team. Đặc biệt, nội dung chủ đề chắc chắn sẽ “đánh trúng tim đen” các công ty IT vừa và nhỏ qua phần hướng dẫn sử dụng Workplace hiệu quả tương tự như những gì Facebook đã và đang làm.

Các diễn giả Facebook tại sự kiện:

  • Anh Nakul Patel – Head of Facebook SMBs thuộc khu vực Châu Á – Thái Bình Dương
    với chủ đề Facebook Workplace for developers
  • Anh Georg Zoeller – Partner Engineering Manager của Facebook APAC

Youtube và Microsoft – Không đứng ngoài cuộc chơi lớn

Vietnam Mobile Day năm nay còn đón chào thêm Đại sứ thương hiệu của trang web chia sẻ video lớn nhất thế giới – Youtube anh Phan Dũng. Từ kinh nghiệm đa dạng trong vai trò Youtube Ambassador và hiện đang giữ song song hai vai trò Co-Founder & COO tại BIG CAT và CEO kiêm Co-Founder của Compare.vn, anh Phan Dũng chắc chắn sẽ làm “nức lòng” cộng đồng startup tham dự sự kiện với chủ đề Cách xây dựng Youtube Viral Channel/ Viral Content cho startup.

Khác với 3 ông lớn Facebook, Google, Youtube, tập đoàn Microsoft vừa trực tiếp “gửi gắm” diễn giả đến chia sẻ vừa âm thầm đứng sau hỗ trợ BTC Vietnam Mobile Day xây dựng hướng nội dung bao quát của chương trình tại 3 miền đất nước. Trong đó, không thể bỏ qua 2 chuyên đề “gây xôn xao” trong thời gian gần đây là Digital Transformation và Introduction to Xamarin – Cross-platform Mobile Development, hứa hẹn sẽ mở ra bức tranh toàn cảnh về những thay đổi “chóng mặt” của kỉ nguyên Digital dành cho Marketer cùng những tiến bộ về mặt kĩ thuật khi lập trình ứng dụng dành cho Developer. Ba gương mặt diễn giả Microsoft cũng là ba chuyên gia đã quen thuộc với cộng đồng: anh Huỳnh Bảo Toàn – Senior Technical Evangelist, anh Francis Nguyễn Tuấn Anh – Giám đốc truyền bá công nghệanh Khương Nguyễn – MVP của Microsoft.

Các diễn giả của Youtube & Microsoft tại sự kiện:

  • Anh Phan Dũng – Youtube Ambassador
  • Anh Huỳnh Bảo Toàn – Senior Technical Evangelist của Microsoft
  • Anh Francis Nguyễn Tuấn Anh – Giám đốc truyền bá công nghệ của Microsoft
  • Anh Khương Nguyễn – MVP của Microsoft.

Như vậy, chỉ còn chưa đến 10 ngày này nữa, Ngày hội Di động Toàn quốc – Vietnam Mobile Day sẽ chính thức khởi động tại Tp.HCM (20/05), tiếp đến tại Thủ đô Hà Nội (27/05) và sau đó sẽ dừng chân tại trung tâm đất nước – Tp. Đà Nẵng (03/06).

Với sự bảo trợ tài chính đến từ các đơn vị VECOM, MasterCard, MobileFone, Verisign, Ví Việt, PA Việt Nam, Hiệp Hội Internet Việt Nam, Appota, Sixth Gears Studios cùng hàng chục startup đang hoàn tất những khâu cuối cùng để giới thiệu đến cộng đồng các sản phẩm – dịch vụ của mình, công tá chuẩn bị sự kiện gần như đã hoàn chỉnh. Tất cả góp phần đem đến cho khách tham dự một bữa tiệc công nghệ thịnh soạn nhất trong suốt 7 năm qua, hướng về một sân chơi chung cùng nhau chia sẻ, học hỏi kinh nghiệm và mở rộng vòng tròn kết nối, đưa nền công nghiệp Mobile Việt Nam từng bước phát triển, tiệm cận tầm vóc của thế giới.

Thời gian & địa điểm:

  • 20/05/2017 tại Trung tâm Hội nghị 272, Võ Thị Sáu, Q.3, Hồ Chí Minh
  • 27/05/2017 tại Trung tâm Hội nghị Forevermark, 614 Lạc Long Quân, Q.Tây Hồ, Hà Nội
  • 03/06/2017 tại One Opera Danang Hotel, 115 Nguyễn Văn Linh, Q. Hải Châu, Đà Nẵng

Website thông tin chi tiết: http://mobileday.vn

Mọi chi tiết thắc mắc xin liên hệ

  • ngoc.do@applancer.net (Ms. Ngọc) | 0944 685 243
  • event@applancer.net (Event Team) | 08 6273 3497

Tổng hợp về WannaCry cho người không biết gì

WannaCry là virus (gọi vậy cho dễ hiểu và thân quen) mà khi nhiễm sẽ mã hóa toàn bộ các file dữ liệu trên máy và tống tiền nên nó được gọi là Ransomware (mã độc tống tiền). Tên khoa học của nó là WannaCrypt (chỉ dân security dùng này cho dễ gọi, còn WannaCry là tên  tác giả malware đặt trong code)

Cách lây lan:

1. “Tác giả” con virus này vẫn đang phát tán nó qua phương thức thông thường là nhúng vào các bản crack, nhúng vô các trang web có nhiều người truy cập (trang sex, trang warez …).
Về kỹ thuật thì WannaCry vẫn đang phát tán malware qua các mạng lưới phát tán malware và các exploitkit

2. WannaCry lây lan mạnh vì nó không chỉ phát tán theo cách truyền thống mà nó còn lây lan qua mạng LAN do tận dụng các công cụ khai thác lỗi SMB mà NSA (Cơ quan an ninh quốc gia Hoa Kỳ) phát triển bí mật, nhưng bị nhóm ShadowBroker đánh cắp và tung ra public từ tháng trước. Lúc Shadow Broker tung ra các công cụ này thì các chuyên gia bảo mật đã dự đóan về một cuộc tấn cồng mạng toàn cầu mà  Wanna Cry đang làm.

Nói dễ hiểu là nếu một máy trong mạng LAN bị nhiễm WannaCry thì toàn bộ các máy trong mạng LAN cũng có thể bị nhiễm chung nếu như không được vá lỗi trước đó.

Vì cách lây lan như trên mà việc thực hiện các bước an toàn như tắt SMBv1 và cập nhật cho Windows bản vá lỗi mới nhất KHÔNG HOÀN TOÀN AN TOÀN . Nó chỉ ngăn việc con virus này nhảy từ máy khác cùng mạng LAN qua máy bạn. Không ngăn việc bạn xui xẻo tải trúng nó từ internet.

Hiện nay, WannaCry chỉ lây lan trên Windows và mạng máy tính Windows, hiện vẫn chưa ghi nhận trường hợp nhiễm virut nào xảy ra với Mac và Linux

Cách phòng chống:

1. Update bản vá lỗi mới nhất cho Windows.

2. Disable tính năng SMB bằng cách vô Start, search Windows Features, xong bỏ dấu check chỗ SMB … đi là được.

3. Cập nhật các Antivirus. Hiện Windows Defender, McAfee, Symantec, ESET, Bitdefender … tức mẫy AV nổi tiếng đều đã update WannaCry rồi. Sau khi cập nhật AV thì nhớ bật tính năng bảo vệ Realtime Protection (hoặc tên giống vậy). Để ngăn việc máy tính bị nhiễm.

4. BACKUP DỮ LIỆU QUAN TRỌNG LÀ CÁCH DUY NHẤT CHỐNG RANSOMWARE.
Nhớ backup thường xuyên. Cá nhân thì mua 1 ổ cứng di động, copy dữ liệu quan trọng ra 1 bản bỏ vô ổ cứng rồi cất đi. Không cắm thường xuyên vô máy, cần mới cắm vô backup hoặc lấy dữ liệu ra.

5. Nên dùng các dịch vụ Cloud Drive như Google Drive, OneDrive, DropBox để thường xuyên sync (đồng bộ) dữ liệu đám mây (Cloud). Giá của các dịch vụ này tương đối rẻ, Google Drive free 15GB, và bán 100 GB có 45 000VND/1 tháng, hoặc 250 000 VNĐ/1000 GB (1TB). Hoặc mua Google Enterprise giá có 15$/tháng nhưng Unlimited

Tại sao nên xài dịch vụ Cloud Drive ?

Nêu lỡ bị dính ransomware thì Cloud vẫn mã hóa file trên máy và các tool sync của các dịch vụ này vẫn sync bản dữ liệu bị mã hóa lên máy chủ, NHƯNG các Cloud này có hỗ trợ tính năng File Versions. Tức là 1 file bạn backup trên Cloud thì mấy dịch vụ này sẽ lưu cho bạn 30 bản khác nhau của 30 ngày gần nhất của cái file. Tức là bạn có thể tải về bất kỳ phiên bản cũ nào của cái file đã bị ransomware tấn công

Cách xử lý khi bị nhiễm Ransomware WannaCry:

1. Ngắt ngay lập tức các máy tính bị nhiễm khỏi mạng LAN, tránh để nó lây lan qua các máy khác

2. Trả tiền cho tác giả WannaCry để nó đưa mật mã giải mã file là quyết định của bạn. Hiện chưa có báo cáo nào về việc chúng có đưa mã giải mã hay không .

Hiện chỉ mới có 160 giao dịch trị giá khoảng 300.000$ được gửi tới cái địa chỉ BitCoin tác giả WannaCry cung cấp (2 BitCoin/ giao dịch tương đương 80 triệu VND đồng)

3. Hiện có thông tin là WannaCry có lỗi trong cách thức nó mã hóa dữ liệu, nên các chuyên gia bảo mật đang thử tìm cách khai thác và viết công cụ giải mã. Nên nếu dữ liệu quá quan trọng thì có thể cất ổ cứng đi chờ công cụ được cung cấp.

4. Còn không có gì để mất thì format toàn bộ ổ cứng và cài lại win thì sẽ sạch, nhớ là chỉ FORTMAT TOÀN BỘ Ổ CỨNG thì mới sạch chứ chỉ format ổ C rồi cài lại thì không giải quyết được vấn đề.

Ransomware là vấn nạn 3 năm nay rồi, gây ra thiệt hại hàng tỉ đô. Nhưng chưa bao giờ thế giới chứng kiến một ransomware có tốc độ lay lan nhanh đến như vậy

Đó đơn giản dễ hiểu vậy thôi. BACKUP NGAY ĐI TRƯỚC KHI BỊ RANSOMWARE tấn công!!!

Nguồn: Fb Hong Phuc Nguyen

Tuyệt chiêu giúp các app trò truyện trên React chạy nhanh hơn 45%

45-faster

Tôi hiện đang làm cho Missive, một team chuyên về xây và quản lí hệ thống email/chat client của React. Nó sử dụng nhiều tầng chứa các cột thông tin để hiển thị cuộc đối thoại. Khi nhấn phím ⬆︎️⬇ thì thanh navigation của app sẽ chuyển qua một cuộc nói chuyện mới. Tuy nhiên, điều đó cần diễn gần như là ngay tức khắc để người dùng không cảm nhận được app bị delay.

Một cuộc nói chuyện có thể chứa đến hàng trăm comment, email, và event. Vì thế để tối ưu hóa hệ thống navigation giữa các cuộc nói chuyện, chúng tôi chuyển đổi nhiều thành phần của cuộc nói chuyện thành một chức năng chính – functional one.

Ví dụ cụ thể là như component Avatar sẽ được chuyển đổi từ:

class Avatar extends React.Component {
  render() {
    return <img src={this.props.url} />;
  }
}

… thành:

// simplified version of our real component
const Avatar = (props) => {
  return <img src={props.url} />;
}

Như bạn thấy đấy, một functional component chính là một tính năng “return element” trong JavaScript. Functional component cũng được gọi là component không có “state”.

Ban đầu, chúng tôi cứ nghĩ rằng sự thay đổi trên sẽ giúp cải thiện hiệu năng cho ứng dụng ngay lập tức bởi khi điều hướng giữa các cuộc nói chuyện trong Missive, React phải unmounts mounts hàng trăm component. Bạn sẽ nghĩ rằng functional component sẽ tránh được quá trình trên cũng như cả sự kiện life-cycle kế đó bởi vì nó chỉ là function thế nhưng thật ra điều đó sai hoàn toàn.

Chính bản React 0.14 release notes đã chứng thực điều đó:

Pattern này nhằm khuyến khích việc tạo ra các component đơn giản vốn sẽ chiếm phần lớn những gì tạo nên ứng dụng của bạn. Trong tương lai, chúng tôi sẽ tập trung vào việc tối ưu hóa hiệu năng cho một số component bằng việc giảm đi các thao tác kiểm tra không cần thiết cũng như memory allocation.

Hóa ra, React vẫn phải làm khá nhiều việc cho các functional component, mà vốn chẳng cần đến. Vì thế mà ta bị mất đi đến vài millisecond quí giá.

Vậy liệu ta có thể bỏ qua các bước thủ tục từ React cho các component này? Thay vì gọi là mount, ta hãy gọi nó đúng theo bản chất của nó: các JavaScript function nhạt nhẽo. Nói cách khác, ta chỉ cần thay đổi các JSX tags của Avatar thành brace, và gọi những function đó trực tiếp luôn. Như thế này:

ReactDOM.render(
   <div>
-    <Avatar url={avatarUrl} />
+    {Avatar({ url: avatarUrl })}
     <div>{commentBody}</div>
   </div>,
   mountNode
 );

 // Compiled JavaScript
 ReactDOM.render(React.createElement(
   'div',
   null,
-  React.createElement(Avatar, { url: avatarUrl }),
+  Avatar({ url: avatarUrl }),
   React.createElement(
     'div',
     null,
     commentBody
   )
 ), mountNode);

Như vậy chúng ta vừa mới loại bỏ một  React.createElementcall quan trọng, và tất cả events của React component lifecycle. Do đó mà, ta cũng không cần phải đợi React team phải lo về vấn đề tối ưu hóa nội bộ.

Để biết được sự thay đổi có ảnh hưởng thế nào, tôi đã tạo ra benchmark này, kết quả thu được khá kinh ngạc. Từ việc chỉ chuyển đổi một class-based component thành functional component , tốc độ được cải thiện chỉ khoảng 6%. Thế nhưng khi gọi component đó là một function đơn giản thay vì mounting, thì tốc độ lại được cải thiện tới 45%.

Qua đó ta thấy được rằng, Missive đã phải mount/unmount một lượng rất lớn các component nhanh nhất có thể (điều hướng giữa các cuộc conversation)

TL;DR

Khi trực tiếp gọi một functional component là function thay vì mounting nó thì hãy sử dụng `React.createElement`. Bạn có thể làm như sau trong JSX:

 

// simplified version of our real component
const Avatar = (props) => {
  return <img src={props.url} />;
}
 ReactDOM.render(
   <div>
-    <Avatar url={avatarUrl} />
+    {Avatar({ url: avatarUrl })}
     <div>{commentBody}</div>
   </div>,
   mountNode
 );

 // Compiled JavaScript
 ReactDOM.render(React.createElement(
   'div',
   null,
-  React.createElement(Avatar, { url: avatarUrl }),
+  Avatar({ url: avatarUrl }),
   React.createElement(
     'div',
     null,
     commentBody
   )
 ), mountNode);

Thật đơn giản đúng không.

Nguồn: topdev.vn via Medium

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

Hiểu thêm về Deep Learning thông qua 12 khóa học online miễn phí

Hằng ngày, chúng ta luôn bắt gặp những đầu báo nói về Deep Learning đang thay đổi cuộc sống như thế nào:

  • Các thuật toán của Deep Learning giúp chuẩn đoán ung thư da chuẩn xác như bác sĩ đầy kinh nghiệm.
  • Amazon Go: Deep Learning và AI đã thay đổi cách thức bán hàng như thế nào.
  • Deep Learning giúp xe tự lái thông minh phát hiện ra người đi bộ khi đang chạy trên đường

Bạn tò mò muốn tìm hiểu về nó? Bạn đang muốn học hỏi nhằm phát triển kĩ năng cũng như sự nghiệp của mình? Tôi đã tìm ra 12 lớp học online (hoàn toàn miễn phí) trải dài từ những điều cơ bản nhất cho tới những nghiên cứu mới nhất.

Trước khi bắt đầu, có lẽ bạn sẽ vẫn thắc mắc rằng “Deep learning là cái quái gì?”

“Deep learning là một subfield của machine learning tập trung vào thuật toán dựa theo cấu trúc và tính năng của bộ não và được gọi là hệ thần kinh nhân tạo” – theo Jason Brownlee trong Machine Learning Mastery

Các khóa học online về Deep learning

1/ Ứng dụng thông minh của Deep learning với TensorFlow

via Kadenze ★★★★★ (14 ratings)

Khóa học bao gồm những bài học cơ bản về deep learning, nó có nghĩa gì, hoạt động như thế nào cũng như cách lập trình để tạo ra các thuật toán về mạng phức tạp sâu, các bộ mã vạch biến thể, các mạng lưới đối ứng sinh sản, và mạng nơron recurrent. Một trong những điểm chính của khóa là tập trung vào cách áp dụng các thuật toán đó để tạo nên những ứng dụng sáng tạo. Khóa có 2 lựa chọn free và trả phí (tùy thuộc vào mức độ bạn muốn học).

Christopher Kelly cho biết “ Tôi đã tốt nghiệp chuyện ngành về computer science…. tôi cũng dành cả đống thời gian học online thế nhưng tôi thật sự rất ấn tượng bởi chất lượng và tính chuyên nghiệp của khóa học này. Rất khuyến khích các bạn muốn biết về deep learning học khóa này”

2/ Neural Networks for Machine Learning

Đại học Toronto via Coursera ★★★★★ (18 ratings)

Học về mạng nơ-ron nhân tạo và cách chúng được sử dụng trong machine learning, như nhận diện vật thể, giọng nói; phân tích cử động con người; phân chia hình ảnh, etc. Khóa học cũng tập trung vào những cơ bản về thuật toán và các trick thực tiễn nhằm khiến chúng hoạt động tốt.  Khóa có 2 lựa chọn free và trả phí (tùy thuộc vào mức độ bạn muốn học).

Một review nổi bật (bởi Bobby Brady): “Là một trong những khóa học cực hay mà bạn có thể học được từ những người giỏi nhất.Geoffrey Hinton là một trong những nhà nghiên cứu quan nổi tiếng nhất về lĩnh vực trí tuệ nhân tạo và mạng lưới thần kinh những năm 80. Hiện ông đang làm việc cho Google với project là AI/deep learning initiatives”.

3/ Practical Deep Learning For Coders, Part 1

fast.ai ★★★★☆ (3 ratings)

Khóa học kéo dài 7 tuần này dành cho những người đã có ít nhất 1 năm kinh nghiệm với lập trình, kèm với một số kiến thức về toán học cấp 3. Bạn sẽ bắt đầu với bước một – Học cách làm cho một GPU server online phù hợp với deep learning  – cho đến việc tạo ra sự hiện đại, thiết thực của các model cho computer vision, xử lý ngôn ngữ tự nhiên cũng như recommendation systems. Tất cả đều hoàn toàn miễn phí.

Anonymous cho biết: “Đây như là ngọc trong đá vậy. Jeremy Howard đã rất xuất xắc trong việc dẫn dắt người học qua những thứ cơ bản cũng như chỉ ra kết quả của chúng. Tôi đã rất ngạc nhiên khi anh liên tục đưa ra những thông tin được cập nhật không chỉ trong năm mà còn chỉ vừa cách đây vài tuần vào các bài học… Bạn được thực hành dựa trên những số liệu, thông tin có thực. Tôi cực kì khuyến khích các bạn nào chưa có kinh nghiệm mà muốn trở thành chuyên gia trong lĩnh vực này tham gia vào khóa học này”.

4/ 6.S191: Introduction to Deep Learning

Massachusetts Institute of Technology (MIT) ★★★★☆ (1 rating)

Một khóa giởi thiệu về các phương thức của deep learning với những ứng dụng vào machine translation, nhận diện hình ảnh, game, chế tạo hình ảnh và nhiều thứ khác. Là một khóa học có sự hợp tác giữa các labs thuộc TensorFlow. Hoàn toàn miễn phí.

5/ 6.S094: Deep Learning for Self-Driving Cars

Massachusetts Institute of Technology (MIT) ★★★★☆ (1 rating)

Khóa học giới thiệu về các ứng dụng thực tiễn của deep learning dựa trên theme xây dưng một xe ô tô tự chạy. Đây là một lớp học dành cho các beginner và những người hoàn toàn mới đối với machine learning, thế nhưng khóa học cũng rất hưu ích đối những nhà nghiên cứu đang tìm kiếm một phương thức áp dụng deep learning vào các app của họ. Khóa học hoàn toàn miễn phí

6/ Deep Learning

Google via Udacity ★★☆☆☆ (20 ratings)

Trong khóa học này, bạn sẽ được hiểu rõ về động lực của deep learning, và thiết kế một hệ thống trí thông minh nhân tạo với khả năng đọc hiểu các dataset phức tạp và lớn. bạn cũng se được học cách giải quyết các vấn đề vốn từng được cho là khá khó nhai, cũng như là trở nên quí trọng hơn đối với trí tuệ của con người khi bạn giải quyết những vấn đề ấy một cách dễ dàng sử dụng các cách thức của deep learning. Khóa học cũng hoàn toàn free.

7/ Deep Learning for Natural Language Processing

University of Oxford

Là một khóa học tập trung về những công nghệ mới nhất về phân tích cũng như tạo ra lời văn và text sử dụng hệ thống network neural recurrent. Các định nghĩa toán học của các model của machine learning cũng sẽ được giới thiệu cùng với những thuật toán dùng để tối ưu chúng.

Khóa học được tạo ra bởi Phil Blunsom cùng với sự hợp tác từ nhóm nghiên cứu DeepMind Natural Language. Khóa học cũng miễn phí cho các bạn.

8/ CS224n: Natural Language Processing with Deep Learning

Stanford University

Bạn sẽ được học về những công trình nghiên cứu mới nhất về deep learning trong Natural Language Processing. Về phía model, khóa học sẽ tập trung vềCác mô hình vector chữ, các mạng nơ-ron dựa trên window-base, mạng nơ-ron tái phát, các mô hình bộ nhớ dài hạn, mạng nơ-lăng đệ quy, mạng nơ-ron xoắn cũng như model mới đây có liên quan về lưu trữ bộ nhớ. Thông qua các bài học và những bài assignment, học sinh sẽ học được những trick kĩ thuật cần thiết để làm ra một neural network vận hành tốt và giải quyết được các vấn đề trong thực tiễn. Hoàn toàn miễn phí.

9/ Machine Learning

Nando de Freitas/University of British Columbia

Khóa học tập trung về những lĩnh vực nổi bật nhất của deep learning. Dựa trên những thông tin về thần kinh học và thống kê, khóa học giới thiệu về background cơ bản của neural network, Boltzmann machine, mạng thần kinh xoắn và mạng thần kinh tái diễn. Nó cũng chỉ ra sự ảnh hưởng của deep learning về cách chúng ta hiểu về trí thông minh cũng như những đóng góp vào việc tạo ra những cỗ máy với trí thông minh nhân tạo. Khóa học cũng hoàn toàn miễn phí.

10/ Deep Learning Summer School 2015 and 2016

Various organizers (including Yoshua Bengio and Yann LeCun) via Independent

Deep Learning Summer School nhắm tới các sinh viên đã tốt nghiệp và engineer cũng như những nhà nghiên cứu vốn đã có một lượng kiến thức cơ bản về machine learning (cũng như deep learning) nhưng vẫn muốn học thêm về lĩnh vực đó. Mặc dù khóa học không được sắp xếp như một khóa học online truyền thống nhưng bởi vì người tạo ra nó cũng như các thành viên tham gia giảng dạy cho khóa mà nó được đánh giá như một ỏ vàng về deep learning. Tất nhiên cũng miễn phí.

11/ Online Course on Neural Networks

Hugo Larochelle/Université de Sherbrooke

“Chào mừng các bạn đã đến với khóa học online về neural network của tôi! Đây là một khóa học mà tôi dùng nó để dạy trong trường đại học  Université de Sherbrooke. Đây là một khóa học với trình độ ngang đai học, bao gồm tất cả những điều cơ bản về nerual network và những topic nâng cao khác”. Miễn phí!

12/ Learn TensorFlow and deep learning, without a Ph.D.

Google

Một khóa học vỏn vẹn 3 tiếng (bao gồm slide và video) sẽ giới thiệu nhanh cho các developer về những nguyên tắc cơ bản nhất của deep-learning, kèm theo một số kiến thức đến từ TensorFlow. Hoàn toàn free.

Nguồn: topdev.vn via medium

Trả lời 44 câu hỏi phỏng vấn khó nhằn này, bạn sẽ vào được Apple!

Apple là một trong những công ty uy tín hàng đầu thế giới. Vì vậy, không có gì ngạc nhiên khi biết để có 1 công việc ở đó thì không dễ dàng.

Apple hỏi những câu hỏi liên quan đến kỹ thuật, dựa trên kinh nghiệm của ứng viên, và cả những câu hỏi kì quặc.

Nếu bạn đang có dự định ứng tuyển vào vị trí nhân viên bán lẻ tại Apple store, bạn sẽ được hỏi rất nhiều câu hỏi về cách xử lý với khách hàng đang tức giận.

Trang tìm việc Glassdorr đã tổng hợp những câu hỏi hóc búa nhất Apple đã từng hỏi các ứng viên. Một số câu hỏi giải quyết các vấn đề toán học, trong khi  số khác lại vô cùng đơn giản nhưng bạn phải thật sự tật trung, cảnh giác.

1/ Chúng tôi có một cốc cà phê nóng và một cốc sữa lạnh. Phòng có nhiệt độ ở khoảng giữa nhiệt độ của 2 cốc. Khi nào thì chúng tôi nên thêm sữa vào cốc cà phê để có được cốc cà phê sữa ngon nhất và sớm nhất ( lúc lạnh, mát, hay để nguội)

Vị trí : Product Design Engineer

"We have a cup of hot coffee and a small cold milk out of the fridge. The room temperature is in between these two. When should we add milk to coffee to get the coolest combination earliest (at the beginning, in the middle, or at the end)?" —Product Design Engineer candidate

2/ Tòa nhà Empire State Building có trọng lượng bao nhiêu?

Vị trí: Solutions Consultant

"How much does the Empire State Building weigh?" — Solutions Consultant candidate
3/ Làm cách nào để kiểm tra cây nhị phân nếu nó là hình ảnh phản chiếu của sub-trees trái & phải?

Vị trí : Research scientist

"How do you check if a binary tree is a mirror image on left and right sub-trees?" - Research scientist candidate4/ Bạn muốn là siêu anh hùng nào? Tại sao?

Vị trí Retail

"What superhero would you be and why?" - Retail candidate5/ Giải thích cho đứa trẻ 5 tuổi về RAM?

Vị trí: Apple Genius

"Explain what RAM is to a five year old." — Apple Genius candidate6/ Cánh máy bay hoạt động như thế nào?

Vị trí: Lead Systems Engineer

"How does an airplane wing work?" — Lead Systems Engineer candidate7/ Vẽ cấu trúc bên trong của 1 chiếc iPhone.

Vị trí: Hardware Test Design Lead

"Draw the inside architecture of an iPhone" — Hardware Test Design Lead candidate8/ Chỉ ra 5 cách để đo lượng xăng trong xe hơi.

Vị trí Hardware Engineering

"Give me 5 ways of measuring how much gasoline is in a car." — Hardware Engineering candidate9/ Nếu bạn có 2 quả trứng và bạn cần biết độ cao tối đa có thể thả trứng mà không làm vỡ nó thì bạn sẽ làm thế nào? Đâu là giải pháp tối ưu?

Vị trí Sofware Engineering

“If you have 2 eggs, and you want to figure out what's the highest floor from which you can drop the egg without breaking it, how would you do it? What's the optimal solution?” — Software Engineer candidate10/ Làm thế nào để giảm giá thành của chiếc bút này.

Vị trí: Lobal Supply Manager

“How would you break down the cost of this pen?” — Global Supply Manager candidate11/ Mô tả một vấn đề bạn cho là thú vị và tìm lời giải cho nó.

Vị trí: Software Engineer

"Describe an interesting problem and how you solved it." — Software Engineer candidate
12/ Giải thích cho một đứa trẻ 8 tuổi về định nghĩa và chức năng của router/modem.

Vị trí: Home Advisor

"Explain to an 8 year old what a modem/router is and its functions." — At-Home Advisor candidate13/ Mỗi ngày có bao nhiêu đứa trẻ được sinh ra?

Vị trí Global Supply Manager

"How many children are born every day?" — Global Supply Manager candidate14/ Bạn có 100 đồng tiền xu xếp trên mặt bàn, 10 mặt ngửa, 90 mặt sấp. Bạn không có cách nào để biết được mặt sấp hoặc ngửa của mỗi đồng xu. Tìm cách để chia số đồng xu trên thành 2 cột sao cho mỗi phần có số đồng xu mặt ngửa bằng nhau.

Vị trí: Sofware Engineering

"You have a 100 coins laying flat on a table, each with a head side and a tail side. 10 of them are heads up, 90 are tails up. You can't feel, see or in any other way find out which side is up. Split the coins into two piles such that there are the same number of heads in each pile." — Software Engineer candidate15/ Làm cách nào để kiểm tra ứng dụng yêu thích của bạn.

Vị trí: Software QA

"How would you test your favorite app?" — Software QA Engineer candidate16/ Có 3 hộp đựng hoa quả, 1 đựng táo, 1 đựng cam và 1 cái còn lại đựng cả táo và cam. Chúng được dán nhãn sai. Bạn không được nhìn vào các hộp và chỉ được lấy ra 1 quả duy nhất từ cả 3 hộp. Hãy dán lại đúng nhãn của từng hộp.

Vị trí: Software QA Engineer

"There are three boxes, one contains only apples, one contains only oranges, and one contains both apples and oranges. The boxes have been incorrectly labeled such that no label identifies the actual contents of the box it labels. Opening just one box, and without looking in the box, you take out one piece of fruit. By looking at the fruit, how can you immediately label all of the boxes correctly?" — Software QA Engineer candidate17/ Câu hỏi tình huống: “Bạn gặp một khách hàng đang rất giận dữ, cô ấy yêu cầu tư vấn từ 20 phút trước nhưng không nhận được hồi âm, và cô ta đang làm loạn. Cô ấy tuyên bố sẽ tới Best Buy hoặc Microsoft Store để mua máy tính. Bạn sẽ quyết vấn đề này như thế nào.

Vị trí: Specialist

"Scenario: You're dealing with an angry customer who was waiting for help for the past 20 minutes and is causing a commotion. She claims that she'll just walk over to Best Buy or the Microsoft Store to get the computer she wants. Resolve this issue." — Specialist candidate18/ Một khách hàng gọi cho bạn và than phiền rằng chiếc máy tính cũ của anh ta bây giờ nó không khác gì cục sắt vụn. Bạn sẽ làm gì?

Vị trí: Apple Care At-Home Consultant

“A man calls in and has an older computer that is essentially a brick. What do you do?” — Apple Care At-Home Consultant candidate19/ Bạn có cho rằng mình là người thông minh?

Vị trí: Build Engineer

“Are you smart?” — Build Engineer candidate20/ Kể về thất bại của bạn và bạn học được điều gì từ nó?

Vị trí: Software Manager

"What are your failures, and how have you learned from them?" — Software Manager candidate21/ Đã bao giờ bạn bác bỏ ý kiến của sếp chưa? Bạn bác bỏ nó bằng cách nào? Cho ví dụ cụ thể, kết quả cũng như cách khắc phục hậu quả của tình huống đó.

Vị trí: Software Engineering

"Have you ever disagreed with a manager's decision, and how did you approach the disagreement? Give a specific example and explain how you rectified this disagreement, what the final outcome was, and how that individual would describe you today." — Software Engineer candidate22/ Bạn đặt một cốc nước lên máy quay đĩa than, sau đó tăng dần tốc độ quay. Hiện tượng nào sẽ xảy ra đầu tiên: cái cốc bị trượt, cái cốc bị lộn nhào, nước bị văng ra ngoài?

Vị trí: Mechanical Engineer

“You put a glass of water on a record turntable and begin slowly increasing the speed. What happens first — does the glass slide off, tip over, or does the water splash out?" — Mechanical Engineer candidate
23/ Điều gì trong cuộc sống khiến bạn tự hào?

Vị trí: Software Engineering

"Tell me something that you have done in your life which you are particularly proud of." — Software Engineering Manager candidate

24/ Bạn có phải là người sáng tạo? Ý tưởng sáng tạo mà bạn đang nghĩ là gì?

Vị trí: Software Engineering

"Are you creative? What's something creative that you can think of?" — Software Engineer candidate25/ Kể một kỷ niệm làm bạn xấu hổ

Vị trí: Chuyên gia tư vấn bán lẻ

"Describe a humbling experience." — Apple Retail Specialist candidate

26/ Sáng tạo ra trải nghiệm người dùng tuyệt vời và giải quyết vấn đề của người dùng, việc nào quan trọng hơn.

Vị trí: Apple At Home Advisor

"What's more important, fixing the customer's problem or creating a good customer experience?" — Apple At Home Advisor candidate

27/ Tại sao Apple đổi tên từ Apple Computers Incorporated thành Apple Inc?

Vị trí- Specialist

“Why did Apple change its name from Apple Computers Incorporated to Apple Inc.?” — Specialist candidate

28/ Bạn có vẻ là người khá lạc quan, điều gì khiến bạn thất vọng?

Vị trí: Family Room Specialist

"You seem pretty positive, what types of things bring you down?" — Family Room Specialist candidate

29/ Chứng minh rằng chỉ bằng giọng nói của mình bạn hãy cho khách hàng cảm thấy bạn sẵn sàng giúp đỡ họ.

Vị trí: College Advisor tại nhà

"Show me (role play) how you would show a customer you're willing to help them by only using your voice." — College At-Home Advisor candidate

30/ Điều gì khiến bạn có mặt ở đây?

Vị trí: Software Engineer candidate

"What brings you here today?" — Software Engineer candidate

31/ Chúng tôi có một kiểu app như iTunes, nó down về quá nhiều hình ảnh vô ích, bạn sẽ làm gì để tống khứ những hình ảnh này?

Vị trí: Software Engineer

"Given an iTunes type of app that pulls down lots of images that get stale over time, what strategy would you use to flush disused images over time?" — Software Engineer candidate

32/ Bạn có một lọ tiền xu thật và giả lẫn lộn. Tiền thật thì 1 mặt sấp 1 mặt ngửa, còn tiền giả thì 2 mặt sấp hoặc 2 mặt ngửa. Bạn lấy 1 đồng ra và xoay 3 lần. Tính xác suất đồng tiền đó là thật hay giả dựa vào kết quả vừa thu được.

Vị trí: Lead Analyst

"If you're given a jar with a mix of fair and unfair coins, and you pull one out and flip it 3 times, and get the specific sequence heads heads tails, what are the chances that you pulled out a fair or an unfair coin?" — Lead Analyst candidate

33/ Bạn hãy kể về 1 ngày tốt đẹp nhất và 1 ngày tồi tệ nhất của bạn trong 4 năm vừa qua.

Vị trí: Engineering Project Manager

"What was your best day in the last 4 years? What was your worst?" — Engineering Project Manager candidate

34/ Khi thăm quan Apple Store với tư cách là một khách hàng, điều gì gây ấn tượng cho bạn nhất?

Vị trí: Specialist

"When you walk in the Apple Store as a customer, what do you notice about the store/how do you feel when you first walk in?" — Specialist candidate

35/ Tại sao bạn muốn làm việc ở Apple? Nếu làm việc ở Apple bạn sẽ bỏ lỡ điều gì?

Vị trí: Software Engineering

"Why do you want to join Apple and what will you miss at your current work if Apple hired you?" — Software Engineer candidate

36/ Bạn kiểm tra máy nướng bánh mỳ như thế nào?

Vị trí Sofware QA

"How would you test a toaster?" — Software QA Engineer candidate

37/ Nếu bạn lên núi một ngày và xuống núi vào ngày hôm sau. Thời gian xuất phát là như nhau. Liệu rằng bạn có thể ở cùng một vị trí trong cùng một thời gian?

Vị trí: Technical Lead

"If you are to go up the mountain one day and come down the next day, leaving at the same time, will you ever be at the same place at the same time of day?" —Technical Lead candidate at Apple.

38/ Bạn có phải là kiểu người quan tâm tới các phát minh công nghệ.

Vị trí: Retail specialist

"Are you the type of person people come to for technical issues?"— Retail specialist candidate

39/ 62-63 = 1 là phép tính sai. hỉ được di chuyển 1 thành phần (chữ số hoặc phép toán), hãy biến nó trở thành phép tính đúng.

Vị trí: Software Development Test Engineer

"62-63=1; Changing only one element (either digit or operand), make this statement true." — Software Development Test Engineer candidate

40/ Món kem yêu thích của bạn?

Vị trí Administrative assistant

"What is your favorite ice cream?" — Administrative assistant candidate

41/ Làm thế nào để tạo ra mô hình chuỗi cung ứng hiệu quả.

Vị trí: WW Supply Demand Planner

"How do you create an efficient supply chain model?" — WW Supply Demand Planner candidate.

42/ Kể về lần bạn làm tổn thương bạn mình và cách giải quyết?

Vị trí: Technical specialist

"Describe a time when you hurt a friend and how did you handle it?" — Technical specialist candidate

43/ Bạn dự định lên kế hoạch đến Triều Tiên cho đồng nghiệp của mình như thế nào?

Vị trí: Hardware Test Design Lead

"How would you plan a hand gliding trip for your colleagues to North Korea?" — Hardware Test Design Lead

44/ Bạn sẽ hỏi tìm thông tin, dữ liệu nào để chuẩn bị ra iPhone ở thị trường mới?

Vị trí: Finance

Viết code có hiệu quả? Lời khuyên từ chuyên gia

Là 1 lập trình viên, có khi nào bạn giật mình nhìn lại quãng đường vừa qua với bao đêm thức trắng cùng những dòng code và tự hỏi “Code tốt liệu có đủ?”, hay “Tôi cần gì hơn để trở thành một lập trình viên xuất sắc?” và gỡ bỏ cái nhãn “code monkey” đang gắn trên trán mình?

Dưới đây là tóm tắt 1 số lời khuyên của  ông Jonathan Blow trong bài thuyết trình ở đại học UC Berkeley. Trong bài thuyết trình, ông mô tả tính thẩm mỹ trong lập trình của mình và làm thế nào để viết code có hiệu quả.

1. Đừng cố gắng tối ưu code từ lúc đầu

Thường thì các bạn sẽ thực hiện tối ưu hóa code của mình từ rất sớm, nhưng đôi khi chúng cũng làm cho mọi việc trở nên phức tạp hơn khi lúc nào bạn cũng phải nghĩ cách tối ưu cho code của mình. Hãy tập trung viết cho code hoạt động đúng trước, sau đó mới bắt đầu tối ưu những đoạn code.

2. Thực hiện tối ưu hóa với những điều đơn giản nhất

Bạn có thể tối ưu tốc độ thực thi hay tối ưu dung lượng ứng dụng nhưng điều quý giá nhất bạn cần tối ưu chính là thời gian của bạn. Hãy tối ưu hóa cho code của bạn dễ đọc, dễ hiểu và nếu như bạn phải dừng lại và tự hỏi “code này chạy như thế nào nhỉ?” hay “Tại sao mấy dòng code này không chạy?” – thì bạn đang lãng phí thời gian của mình đấy.

3. Những gì bạn học chưa chắc đúng

Một số phương pháp bạn được học tại trường nếu bạn sử dụng thì nên cẩn thận. Đa số những phương pháp đó chỉ áp dụng được trong 1 vài trường hợp nhất định. Không phải tất cả những phương pháp đó đều không đúng nhưng chúng thường được nói hơi quá so với thực tế. Và nếu bạn chấp nhận áp dụng những phương pháp đó, kết quả nhiều khi không được như ý muốn mà lại còn làm cho bạn rối thêm. Vì thế hãy cẩn thận.

4. Đơn giản thường là tốt nhất

Kẻ thù lớn nhất của hiệu suất công việc đó chính là ý chí của lập trình viên. Càng có nhiều suy nghĩ trong đầu bạn, bạn sẽ càng làm việc kém hiệu quả. Vì thế, sự phức tạp chính là kẻ thù của bạn. Bất cứ lúc nào có thể, hãy tìm cách đơn giản hóa suy nghĩ của mình. Nếu bạn luôn suy nghĩ đến những điều đơn giản, bạn sẽ tìm ra giải pháp nhanh hơn khi bạn có hàng tấn sự phức tạp ở trong đầu.

Những lập trình viên trẻ thường thích sử dụng những cấu trúc dữ liệu và ngôn ngữ lập trình nâng cao như một cách để thể hiện năng lực của họ. Nghe thì khá ấn tượng đấy, nhưng trừ khi bạn phải đảm bảo rằng nó sẽ làm cho dự án của bạn thành công. Nếu không hãy hạn chế dùng chúng.

Với mỗi class/phương thức bạn đưa vào đoạn code của mình, mức độ phức tạp sẽ tăng lên theo cấp số nhân chứ không phải cấp số cộng bình thường. Đưng đưa mọi thứ vào các hàm của bạn khi nó làm tăng thêm độ phức tạp.

5. Đừng viết những đoạn code chung chung, tổng quát

Những đoạn code chung chung có nhiều lợi ích nhưng thường lãng phí thời gian của bạn vì  nguy cơ tiềm ẩn những bugs và khá khó khăn trong việc khắc phục. Hardcode không phải là một lựa chọn tồi nếu đoạn code của bạn chỉ đơn giản thực hiện một điều gì đó.

Ngoài ra còn có một số chia sẻ được rất nhiều độc giả yêu thích:

Luôn luôn có một vài dự án phụ sẽ giữ cho đầu óc của bạn minh mẫn. Khi mọi thứ trong công việc không làm bạn quá bận rộn hoặc chưa đủ thách thức với bạn, hãy dành nhiều thời gian vào các dự án phụ của bạn vào những lúc sau giờ làm việc hay cuối tuần. Thực hiện các dự án phụ có thể sẽ giúp bạn có thêm những kỹ năng mới trong việc thiết lập công cụ của bạn cũng như thử nghiệm nó với các công nghệ mới.

Cấu trúc lại code của bạn bất cứ khi nào có thể. Một khi bạn đã có một cái gì đó làm việc, bạn có thể nghĩ ra một cách tốt hơn để viết những code tương tự. Hãy dành thời gian để viết lại các code trong một cách có ý nghĩa hơn. Có nhiều khả năng bạn sẽ có thẻ bổ sung thêm tính năng mới cho dự án của bạn.

Có một sự hiểu biết về các công cụ và môi trường phát triển của bạn. Biết các công cụ soạn thảo cũng như hiểu rỏ bàn tay của bạn. Biết tất cả các thư viện có sẵn trong các ngôn ngữ bạn học và biết làm thế nào để sử dụng chúng. Ép buộc mình phải viết một ví dụ với mỗi thư viện. Lưu những ví dụ đó để bạn có thể xem chúng bất cứ khi nào cần thiết. Một khi bạn đã hiểu một số thư viện, bạn có nhiều khả năng sẽ nhanh chóng nhớ ra chúng khi gặp vấn đề, bạn cũng biết làm thế nào để sử dụng chúng.

Đọc code của người khác. Đây là một cách học hỏi tuyệt vời. Nếu bạn gặp phải các thành ngữ, các thư viện, các ví dụ hoặc các kỹ thuật mà dường như xa lạ với bạn, hãy tiếp tục khám phá chúng cho đến khi bạn cảm thấy sẵn sàng để thử chúng trong code của riêng bạn.

Đến với sự kiện Vietnam Mobile Day, bạn sẽ được trực tiếp thực tập những lời khuyên trên: Cách tối ưu hóa công việc lập trình – Hiểu biết hơn về nhiều công cụ, môi trường phát triển phổ biến – Cơ hội nhận ra: Những điều bạn học chưa chắc là đúng – Được đọc code của nhiều chuyên gia nổi tiếng trong ngành. Ngoài ra còn có rất nhiều điều thú vị sẽ được tiết lộ dần dần trong mỗi topic mà các diễn giả của Vietnam Mobile Day đem đến!

Điểm qua những topic đinh trong 100 topic đỉnh của sự kiện bên dưới. Cập nhật toàn bộ Agenda

  • Chủ đề “Xây dựng hệ thống xử lý bất đồng bộ có độ ổn định và hiệu năng cao” – Diễn giả Lê Minh Nghĩa – Solution Architect tại Tiki.
  • Chủ đề Develop Mobile App fast with Ionic Framework 101 – Diễn giả Nguyễn Đức Minh Quân, Solution Manager tại FPT Technology Solution
  • Chủ đề Automated Testing of Embedded Software – Diễn giả Nguyễn Đức Thái Bình, Specialist engineer của BOSCH Việt Nam
  • Chủ đề “Tăng tốc lập trình Android với Kotlin” – Diễn giả Trần Duy Thanh, Giảng Viên Khoa Hệ Thống Thông Tin, Đại Học Kinh Tế-Luật, ĐH Quốc Gia TP.HCM
  • Chủ đề “Kinh nghiệm làm mobile và những bài học thất bại” – Diễn giả Nguyễn Trung Thành, Head of Research & Development Department của VNG Corporation
  • Chủ đề “Killer Feature sẽ làm cho ứng dụng của bạn trở nên khác biệt – Diễn giả Nguyễn Hoài Anh – Online Channel Manager của Giao Hàng Nhanh
  • Chủ đề “Quy trình phát triển Mobile App Giải pháp fullstack cho phát triển Mobile App nhanh nhất và chi phí cơ hội thấp nhất với React ecosystem” – Diễn giả Phạm Thanh Tú, CTO của Agiletech
  • Chủ đề “Những câu chuyện từ những dự án phần mềm thất bại” – Diễn giả Hoàng Văn Hậu, CTO của Rada JSC
  • Chủ đề “Ứng dụng AI và blockchain để tối ưu hóa đầu tư mạo hiểm, và hơn thế nữa” – Diễn giả Võ Việt Anh – CEO của DropDeck và diễn giả Phan Đình Sơn – CTO của DropDeck

 

  • Thời gian & địa điểm:
    – 20/05/2017 tại Trung tâm hội nghị 272, Võ Thị Sáu, Q.3, Hồ Chí Minh

    – 27/05/2017 tại Trung tâm hội nghị và tiệc cưới Forevermark, 614 Lạc Long Quân, Quận Tây Hồ, Hà Nội
    – 03/06/2017 tại One Opera Danang hotel, 115 Nguyễn Văn Linh, Q. Hải Châu, Đà Nẵng
  • Website thông tin chi tiết: http://mobileday.vn
  • Mọi chi tiết thắc mắc xin liên hệ
    ngoc.do@applancer.net (Ms. Ngọc) | 0944 685 243

    event@applancer.net (Event Team) | 08 6273 3497

Nhìn chung, có rất nhiều cách để lập trình viên code hiệu quả, cải thiện tư duy lập trình và tiến xa hơn trong sự nghiệp của mình. Trong số đó, việc mở rộng networking, học hỏi từ các guru trong ngành là 1 trong những cách tối ưu nhất.

Keep calm and Code Smart nha các dev!

Nguồn tham khảo: gamestudio via careerbuilder.vn

Sự thật ẩn giấu đằng sau những dòng code

Các software developer hẳn cũng đều đã từng nghe qua một câu tương tự như thế này:

“Sự thật chỉ có thể tìm thấy ở 1 nơi duy nhất: code”– Robert C. Martin 

Nhưng điều đó có nghĩa là gì ?

Dựa trên điều luật nổi tiếng trong Agile Manifesto : “Thực hành lập trình luôn hơn đọc trăm cuốn sách hay”

Có thể nói các developers viết các tài liệu về software behavior dưới hình thức những dòng code.

Thực ra, các chú thích hay các thông số kỹ thuật cũng có thể ghi nhận được từ software behavior. Tuy nhiên, đôi khi các chú thích hay các thông số kỹ này thuật không được cập nhập dù code thì vẫn được phát triển. Thế là những chú thích, thông số trở nên lỗi thời. Trái lại, code  luôn phản ánh và tạo nên định nghĩa về software behavior.

Vì thế mà khi bạn muốn hiểu về software behavior, hãy nhìn vào code.

Viết cho các độc giả của bạn

Có thể xem code là một loại tài liệu. Và lẽ tất nhiên, bất cứ loại tài liệu nào cũng có những nhóm độc giả riêng của mình.

Người xem code có thể là là một compiler hoặc interpreter, hay cũng có thể là các developer khác.

Vì vậy, mà bạn code không phải chỉ để cho chính mình mà còn phải cho người khác hiểu được. Bởi những developer khác sẽ làm việc với code cũng như giúp code của bạn mở rộng và phát triển hơn.

Một phương pháp thường gặp để code dễ hiểu là sử dụng clean code. Bằng việc sử ​​dụng ngôn ngữ lập trình dễ hiểu cho variable và method names. Điều đó làm giảm bớt những code comment.

Clean code nên được dùng với nguyên tắc sau: Điều gì mà ta có thể đạt được nhờ vào một phương pháp chứ không phải làm sao mà phương pháp đó có hiệu quả.

Hãy đoán xem phương pháp này có công dụng gì:

BigDecimal addUp(List<BigDecimal> ns){..}


Vậy giờ ta thử viết nó ra theo phong cách của clean code xem:

BigDecimal calculateTotal(List<BigDecimal> individualPrice){..}

Clean code là một ý tưởng tốt. Nhưng thế vẫn là chưa đủ.

Tầm quan trọng của việc chia sẻ hiểu biết

Khi có một yêu cầu mới, bạn cần phải hiểu làm cách nào để thực hiện nó, và điều đó ảnh hưởng như thế nào đến code.

Sẽ là một thách thức nếu phần mềm của bạn đã được viết cách đây một khoảng thời gian.

Sau đây là một tình huống mà tôi bắt gặp khá thường xuyên:

X: chúng ta không thể tiếp tục duy trì tính năng Foo

Y: Tại sao?

X: bởi vì Z là người duy nhất biết về nó- ông ấy đã implement code mà chúng ta đang muốn thay đổi

Y: vậy tại sao chúng ta không hỏi ông ấy?

X: bởi vì, ông ấy ốm/ đang trong nghĩ lễ/ đang có cuộc họp,/..

Y: oh

Vấn đề là, nêu code bạn viết dễ hiểu thì ai cũng sẽ đọc được nó

Có rất nhiều cách để làm điều đó. Ví như, Pair programming là một ý tưởng không tồi, hay trau đổi với các developer khác về code của bạn.

Tuy nhiên, cũng cần lưu ý, nếu có quá nhiều developer tham gia vào phát triển 1 sản phẩm sẽ thật khó để làm hài lòng tất cả, cũng như là vấn đề nếu họ bỏ giữa chừng thì sao?

Câu chuyện

Clean code giúp bạn chọn được những từ hay ý đẹp.

Câu hỏi đặt ra là: Bạn sẽ dùng chúng để kể câu chuyện gì qua code của bạn ?

Tôi thì chắc chắn chả biết rồi, chuyện của bạn mà.

Tuy nhiên, thông qua câu chuyện về một điển hình kinh doanh, mà tôi sắp giới thiệu với bạn, tôi tin tưởng tưởng khá chắc chắn rằng bạn sẽ cảm thấy thú vị với câu chuyện code đằng sau đó.

Câu chuyện từ cửa hàng găng tay

Là một người sử dụng phần mềm, tôi luôn mong muốn đạt được kết quả tốt nhất. Vì thế, vào mùa đông, tôi muốn mua một đôi găng tay mới để giữ ấm cho các ngón tay khi phải làm việc.

Vì vậy, tôi dạo qua các trang web bán găng tay. Các web này cho phép tôi mua găng tay trực tuyến.

Basic flow” ( hay còn được biết đến với tên gọi  “kịch bản ngày vui” ) được áp dụng trong trường hợp cụ thể này như sau:

  • Hệ thống bắt đầu với một giỏ hàng trống.
  • Hệ thống hiển thị danh sách găng tay hiện có
  • Tôi lựa cho găng tay mà mình thích thêm nó vào giỏ hàng. Hệ thống  ghi nhận đơn đặt hàng của tôi.
  • Tôi kiểm tra
  • Tôi nhập chi tiết thông tin giao hàng và phương thức thanh toán thanh toán. Hệ thống sẽ lưu các thông tin này.
  • Hệ thống hiển thị bản tóm tắt đơn đặt hàng.
  • Tôi xác nhận. Hệ thống bắt đầu vận chuyển đơn đặt hàng của tôi.

Sau vài ngày, tôi có găng tay mang

Còn đây là câu chuyện tôi muốn đọc trong code

Chương 1: use cases

Chương đầu tiên của câu chuyện là về các use case. Khi tôi đọc code tôi muốn có thể làm theo từng bước cho đến khi ra kết quả mong đợi

Từ góc độ người dùng, tôi muốn biết hệ thống phản ứng thế nào khi gặp vấn đề. Dưới góc nhìn của một user.

Tôi cũng muốn hiểu sự thay đổi có thể xảy ra xuyên suốt quá trình.

Ví dụ: người dùng thường cố gắng quay trở lại chi tiết hóa đơn thanh toán với thông tin vận chuyển, để biết:  Điều gì đã xảy ra? Thậm chí điều gì đó có thể xảy ra hay không?

Tôi muốn hiểu tường tận về code để có thể giải quyết vấn đề trong mọi trường hợp

Vậy một use-case sẽ có những thành phần nào?

Phần cơ bản của một use-case là “step” – các bước mang  người dùng tới gần hơn kết quả mong đợi

Ví dụ: “Hệ thống hiển thị danh sách găng tay.”

Không phải tất cả người dùng đều có thể đi thẳng một bước đạt được kết quả kỳ vọng. Chỉ có một nhóm người dùng nhất định (actors) bao gồm: những khách hàng mua găng tay, những nhà marketing cung cấp găng tay mới tham gia vào hệ thống.

Hệ thống cũng có thể tự chạy một số “Step”.  Giống như việc hiển thị danh sách găng tay, hệ thống tự chạy một số bước mà  người dùng không cần thực hiện thêm bất cứ thao tác nào.

Hoặc, một “Step” là sự tương tác với người dùng. Hệ thống sẽ đưa ra những phản ứng khi có event cho customer. Ví dụ: user điền thông tin vào mục shipping, hệ thống sẽ tự dộng lưu lại những thông tin đó.

Tôi muốn biết được loại data nào cần trong những event đó. Thông tin về Shipping thì sẽ bao gồm tên người dùng, địa chỉ , số điện thoại, etc.

Và người dùng phải thực hiện tuần tự các bước. Ví như: người dùng chỉ có thể thanh toán sau khi cung cấp đầy đủ thông tin vận chuyển. Rõ ràng, có một “flow” các bước diễn ra tuần tự trong trường hợp này. Ngoài ra, còn có những điều kiện được đặt ra để cho phép hệ thống có những phản ứng thích hợp.

Để hiểu về code, bạn cần có một cách học thật tốt để biết về nhiều thứ

Đối với 1 use-case tương tự như trường hợp  “mua găng tay”

  • Tuần tự các bước

Đối với mỗi bước:

  • Actors nào có quyền truy cập  (có nghĩa là nhóm người nào sử dụng )
  • Điều kiện để hệ thống phản ứng
  • Nếu bước này là tự động, hoặc dựa trên sự tương tác của người dùng
  • Phản ứng của hệ thống

Đối với mỗi tương tác từ người dùng:

  • Các user event (như “người sử dụng nhập thông tin vận chuyển”)
  • Dữ liệu đi kèm với tương tác

Một khi tôi biết nơi để tìm một use-case và các phần của nó trong code, tôi sẽ có thể đi sâu hơn nữa.

Chương 2: chia nhỏ thành các bước thông qua components

Trách nhiệm của components:

Tạm xem các thành phần tạo nên software là các component. Vậy  mỗi Component sẽ đảm nhận những chức năng riêng, góp phần tạo nên solfware

Một component có thể là:

  • Component kỹ thuật như database,
  • Một dịch vụ như “dịch vụ giỏ hàng”
  • Một entity trong domain model

Điều đó phụ thuộc vào thiết kế phần mềm của bạn. Nhưng bất kể là gì: bạn cũng thường cần một vài component để biết được một bước của 1 use-case.

Hãy nhìn vào system reaction của step. Khi hệ thống hiển thị một danh sách găng tay. Bạn cần phải phát triển ít nhất hai chức năng: tìm thấy găng tay trong cơ sở dữ liệu và chuyển danh sách găng tay vào trang web.

Khi đọc code tôi muốn hiểu những điều sau đây:

  • Chức năng của từng thành phần là gì?

Ví dụ: “find gloves” cho database.

  • Inputs/outputs của mỗi chức năng là gì?

Ví dụ :

  • Inputs: tiêu chí để tìm găng tay.
  • outputs : danh sách găng tay.
  • Ai đang cùng chịu trách nhiệm chức năng này

Ví dụ: Đầu tiên tìm găng tay. Chuyển kết quả sang trang web thứ hai.

Chương 3: Nhiệm vụ của component là gì?

Code của component sẽ đảm nhận mọi nhiệm vụ.

Vốn là điều hay xảy ra đối với các mô hình miền có sử dụng thuật ngữ  liên quan trong lĩnh vực kinh doanh.

Ví dụ như các thuật ngữ găng tay, đặt hàng.

Với domain model mô tả data về găng tay gồm có: có màu sắc, thương hiệu, kích thước, giá cả ,… Mô hình miền cũng thực hiện tính toán trên dựa trên data để đưa ra tổng giá trị đơn hàng người dùng phải chi trả .

Component có thể là một bộ phận kỹ thuật như kho dữ liệu. Code cần phải trả lời câu hỏi: Làm thế nào để khởi tạo, tìm kiếm, cập nhật và xóa các thông tin trong data?

Kể câu chuyện của bạn

Câu chuyện của bạn có thể giống hoặc không giống câu chuyện trên.

Dù câu chuyện của bạn là gì, ngôn ngữ lập trình vẫn cho bạn sự tự do tuyệt đối để kể câu chuyện của mình.

Điều đó giúp các developer thích nghi được với những hoàn cảnh và các yêu cầu  khác nhau.

Tuy nhiên, nó cũng tiềm ẩn nguy cơ khi các developer kể quá nhiều điều khác nhau khiến câu chuyện trở nên khó hiểu. Kể cả khi là để cho ra một sản phẩm. Vì thế mà ta luôn gặp phải việc đọc code của người khác viết cực kì khó khăn do nó quá rối rắm.

Một cách để giải quyết vấn đề này là sử dụng các design pattern có sẵn.Chúng cung cấp cho bạn cấu trúc code mà bạn cần. Nhờ đó mà team của bạn có thể đi đến tiếng nói chung về cấu trúc của code.

Ví dụ, khung Rails được dựa trên mô hình Model View Controller nổi tiếng

Model này là nơi lưu trữ các domain data.

The view ám chỉ phía client với giao diện người dùng, như các trang HTML. Đây là nguồn gốc của các user events

Các controller sẽ nhận các user events từ phía máy chủ. Nó chịu trách nhiệm điều phối flow.

Vì vậy, khi có nhiều developer sử dụng Rails, họ biết phần nào của code có chức năng gì, và cân nhắc sử dụng chúng một cách thích hợp.

Họ chia sẻ những hiểu biết của mình, khắc phục những vấn đề gặp phải, và thậm chí hưởng lợi từ những chia sẽ đó.

Nếu bạn thấy đến đây là ổn rồi thì cũng tốt. Nhưng tôi còn muốn đi xa hơn thế.

Requirements

Nhiều khách hàng hỏi tôi làm thế nào để giải quyết với vấn đề về tài liệu phần mềm với tầm nhìn dài hạn.

Khi làm việc trong một môi trường đòi hỏi sự nhanh nhạy, làm thế nào để bạn tạo documentation để thực hiện software maintenance?

Những yêu cầu nào đã được thực hiện?

Bạn tìm thấy vị trí được thêm vào ở đâu trong code?

Hàng hoạt câu hỏi được đặt ra cho tôi, lúc đầu tôi cũng không có câu trả lời thỏa mãn. Tất nhiên ngoại trừ: tầm quan trọng của các bài kiểm tra viết, tự động, code sạch, chia sẻ sự hiểu biết.

Nhưng một vài năm trước, tôi bắt đầu suy nghĩ: Nếu sự thật nằm bên trong code, thì code có thể nói lên sự thật . Nói cách khác: nếu bạn quan tâm đến việc kể câu chuyện của mình bằng code tại sao bạn phải diễn giải lại câu chuyện đó bằng lời?

Cần có một cách tốt hơn. Phải tạo ra tài liệu để kể câu chuyện đó một cách chính xác, mà ai cũng có thể hiểu. Và nó phải luôn được cập nhật thường xuyên.

Và như vậy thì chỉ có một nguồn duy nhất: đó là chính bản thân Code.

Sau nhiều thí nghiệm, tôi đã thu được kết quả. Nó đã được công bố trong dự án Github có tên  gọi là requirementsascode.

Cách thức mà nó hoạt động

  • Ví dụ: UseCasemodel định nghĩa các khái niệm về the actorsuse cases, their flowsand steps.  Như đã được giới thiệu ở phần đầu của bài viết.
  • Mô hình UseCaseModelRunner. Mỗi người dùng đều có những cách thức sử dụng khác nhau, bởi vì mỗi người dùng có thể đi theo những con đường khác nhau thông qua các mô hình use-case
  • Người dùng  tương tác với các user event thông qua giao diện tương tác được gọi là system reaction
  • Nhưng tương tác chỉ được thực hiện khi người dùng tuân thủ tuần tự các bước

Ví dụ: người dùng chỉ có thể cung cấp thông tin thanh toán nếu đã hoàn thành thông tin giao hàng

  • Hệ thống tương tác (systemreaction) là một phương pháp. Phương pháp này có nhiệm vụ phối hợp các bộ phận với nhau nhằm thực hiện các bước, như được mô tả trong chương 2.
  • Chương 3 nằm ngoài phạm vi của requirementsascode. Nó mang tính ứng dụng nhiều hơn. Điều đó làm cho các yêu cầu bằng code tương thích với các thiết kế phần mềm tùy ý.

Vì vậy, UseCaseModelRunner kiểm soát hành vi hiển thị của người sử dụng phần mềm. Dựa trên một UseCaseModel.

Với requirementsascodeextract, bạn có thể tạo ra tài liệu từ các mô hình use case tương tự. Bằng cách đó, tài liệu hướng dẫn luôn phản ánh cách phần mềm hoạt động.

Yêu cầu bằng code sử dụng FreeMarker template engine giúp bạn tạo ra bất kỳ tài liệu văn bản  nào bạn thích, ví dụ các trang HTML. Quá trình xử lý có thể biến nó thành các định dạng tài liệu khác như PDF.

Nguồn: blog.topdev.vn via Medium

Không thể bỏ lỡ: Bí kíp Digital Marketing tại ngày hội Vietnam Mobile Day

Vietnam Mobile Day là ngày hội thường niên lớn nhất trong lĩnh vực Ứng dụng Di động, cập nhật những kiến thức mới, chuyên sâu từ các diễn giả được mời về từ các công ty công nghệ tiên phong trong nước và quốc tế.

Để đáp ứng đầy đủ nhu cầu của người tham dự đa dạng từ Developer, Marketer, Designer đến đại diện các tập đoàn, các công ty Tech startup, sự kiện năm nay mở rộng đến hơn 120 chủ đề chuyên sâu, hơn 100 diễn giả đến từ nhiều lĩnh vực hoạt động trong ngành công nghiệp Mobile.

Cùng điểm qua các topic thú vị về Marketing sẽ xuất hiện tại Vietnam Mobile Day nhé!

Chủ đề #1: Cách tiếp cận làm Mobile app cho doanh nghiệp

Mobile app gần như đã thay đổi hoàn toàn cách doanh nghiệp giao tiếp với khách hàng, đối tác… Với khả năng đa dạng, từ cấu hình, giao diện đến sự tiện lợi, giá thành, Mobile app có thể tích hợp và truyền tải mọi giá trị của thương hiệu, của sản phẩm. Giờ đây, tất cả đã “thu bé lại vừa bằng vài thao tác trên màn hình cảm ứng”!

Đặc biệt, Mobile app còn có tính bảo mật cao, lưu trữ được rất nhiều data hữu ích từ hành vi của người dùng để hoàn thiện sản phẩm/ dịch vụ của mình, tối ưu hóa các hoạt động Marketing.

Nhưng, làm sao hiểu và làm được một app phù hợp với đối tượng khách hàng, nhằm tạo nên nhiều giá trị đồng thời thông qua đó xây dựng thương hiệu doanh nghiệp là điều rất khó!

Topic CÁCH TIẾP CẬN LÀM MOBILE APP CHO DOANH NGHIỆP của diễn giả Nguyễn Duy Vỹ – Marketing Director của Tugo.com.vn đã sẵn sàng hóa giải khó khăn này cho bạn. Với 10 năm kinh nghiệm làm Marketing, nắm giữ các chức vụ quan trọng tại những công ty đình đám như Thế giới di động, Yan TV, Lingo, anh Duy Vỹ sẽ trực tiếp đem ra “mổ xẻ” các cách tiếp cận Mobile app, đem đến cái nhìn thực tiễn và bài học quý giá cho mọi cá nhân, startup đang vận hành xoay quanh ứng dụng di động.

Chủ đề #2 Zero Cost Marketing for Mobile Startups

Dường như ai đang dấn thân theo nghiệp Startup cũng đều trải qua trăn trở: Làm thế nào để tối ưu hoá chi phí Marketing cho giai đoạn đầu phát triển của Startup.

người sáng lập viên của Umbala – công ty khởi nghiệp của người Việt đặt trụ sở tại Silicon Valley, đồng thời là nền tảng Video Gameshow tương tác trực tuyến trên Mobile đầu tiên trên thế giới, diễn giả Nguyễn Minh Thảo sẽ giải quyết 2 câu hỏi lớn trong topic Zero Cost Marketing for Mobile Startup của mình. Đó chính là:

  • Lý do vì sao Mobile Startup cần phải tối ưu hoá chi phí Marketing?
  • Cách thức để có thể thực hiện được các chiến thuật Zero Cost Marketing?

“Hy vọng sẽ có thể trao đổi những câu chuyện nghe phi lý nhưng thực sự có giá trị cho các bạn làm khởi nghiệp, vì để hiểu được điều này mình phải trả giá khá nhiều” – Anh Minh Thảo cho biết.

Chủ đề #3: Các bước xây dựng truyền thông cho 1 ứng dụng di động

Có 1 ứng dụng di động được đưa lên thành công trên App Store là 1 điều tuyệt vời với các lập trình viên Mobile, nhưng điều đó chưa đủ! Chiến trường App Store khốc liệt, đòi hỏi đơn vị sản xuất phải có kế hoạch Marketing hợp lý, hiệu quả để thu hút lượt tải khách hàng hoặc đưa ứng dụng lên vị trí top đầu.

Hiện đang là Marketing Manager của Appota – một trong những start-up lớn nhất hiện nay trong mảng Mobile Business tại Việt Nam, anh Đặng Thái Sơn sẽ truyền tải 5 năm kinh nghiệm lĩnh vực Truyền thông ứng dụng & phát hành Game đến người tham dự Vietnam Mobile Day qua chủ đề Các bước xây dựng truyền thông cho 1 ứng dụng di động!

Chủ đề sẽ hướng dẫn bạn các bước đơn giản để xác định sự khác biệt hóa, đối tượng truyền thông, từ đó xây dựng tài liệu truyền thông phù hợp. Đặc biệt, anh Thái Sơn còn bật mí các chiến thuật truyền thông ứng dụng hiệu quả đến người dùng.

Chủ đề #4: Xu hướng Mobile Marketing

Hoạt động trong lĩnh vực Marketing, có 1 thực tế “phũ phàng” rằng bạn phải liên tục cập nhật những thay đổi của ngành nếu không muốn bị “bỏ rơi” giữa bể kiến thức mênh mông bất tận. Đặc biệt, khi công nghệ nói chung & xu hướng smartphone dần trở thành “nếp sống” của đại bộ phận người trẻ, các Marketer lại càng phải đối mặt với nhiều thách thức để bắt kịp được nhu cầu thị trường, tiêu biểu nhất chính là công cụ MOBILE MARKETING.

Nhắc đến Mobile Marketing, ngoài SMS Marketing phổ biến lâu đời, 1 số hình thái mới đang nảy sinh thu hút sự quan tâm của các nhà làm dịch vụ như: Internet Mobile Marketing, Game/ Ứng dụng, Location based services (Dịch vụ trên nền tảng định vị), Google Mobile Ads…

Vậy trong năm này, xu hướng Mobile Marketing nào sẽ lên ngôi? Xu hướng nào xứng đáng để Marketer đầu tư chi phí, công sức?

Nhân vật được BTC Vietnam Mobile Day trao gửi chủ đề Mobile Marketing nóng này, chính là anh Phan Thế Anh – người có kinh nghiệm nghiên cứu sinh tiến sĩ Quản trị marketing tại Hàn Quốc và hiện đang học tiến sĩ Quản trị Kinh doanh tại Đài Loan, từng là diễn giả trẻ nhất tại 4th Asian SME Conference (Indonesia).

Chủ đề #5: 9 lý do khiến bạn làm thương hiệu cá nhân thất bại

Hầu hết mọi người chưa đánh giá đúng tầm quan trọng của Personal Branding và không phải ai xây dựng Personal Branding cũng đều như ý. Đặc biệt khi các thiết bị di động đang không ngừng thay đổi thói quen của đại bộ phận giới trẻ – những người vừa là khách hàng của các ứng dụng Mobile vừa là những người âm thầm phát triển nên các ứng dụng sáng tạo đột phá, liệu các kinh nghiệm về khẳng định bản thân, tìm kiếm một chỗ đứng trong xã hội có còn giá trị và được áp dụng ra sao trong công việc hằng ngày?

Anh Nguyễn Ngọc Long – Người sáng lập của Truyền Thông Trăng Đenđồng thời là một blogger có góc nhìn đặc sắc đối với nhiều vấn đề gai góc trong xã hội sẽ là nhân vật “cầm cân nảy mực” cho chủ đề 9 lý do khiến bạn làm thương hiệu cá nhân thất bại tại Vietnam Mobile Day.

Đến với chủ đề, bạn sẽ hiểu rõ tại sao Personal Branding của mình chưa tốt, làm thế nào để tránh được những thất bại “đã được báo trước”, để từ đó khẳng định được giá trị của bản thân trong công việc và cuộc sống.

Ngày Hội Di Động Toàn Quốc – Vietnam Mobile Day quy tụ những tên tuổi hàng đầu trong trong ngành Truyền thông – Marketing, sẽ mở ra cho người tham dự những cơ hội giao lưu, học hỏi, phát triển networking quý giá!

  • Thời gian & địa điểm:
    – 20/05/2017 tại Trung tâm hội nghị 272, Võ Thị Sáu, Q.3, Hồ Chí Minh
    – 27/05/2017 tại Trung tâm hội nghị và tiệc cưới Forevermark, 614 Lạc Long Quân, Quận Tây Hồ, Hà Nội
    – 03/06/2017 tại One Opera Danang hotel, 115 Nguyễn Văn Linh, Q. Hải Châu, Đà Nẵng
  • Website thông tin chi tiết: http://mobileday.vn
  • Mọi chi tiết thắc mắc xin liên hệ
    ngoc.do@applancer.net (Ms. Ngọc) | 0944 685 243
    event@applancer.net (Event Team) | 08 6273 3497

Bí kíp tạo website nhờ vào GitHub và Cloudflare

Bạn nên đọc bài viết này nếu…

  1. Bạn muốn setup redirect hoặc server configuration theo ý mình và hoàn toàn miễn phí
  2. Bạn muốn đưa site mình lên HTTPS nhưng chả biết phải làm gì
  3. Bạn thấy bị choáng bởi vô số lựa chọn cho bạn (như là Netlify, Surge, BitBalloon, Now)

Tại sao lại chọn Github?

  1. Dễ dàng trong setup cũng như là để bắt đầu với các trang trên Github
  2. Ngay lập tức deploy khi new code được đưa ra

Tham khảo việc làm GIT lương cao tại TopDev

Tại sao lại là Cloudflare?

  1. Do nó Miễn phí
  2. Bởi vì nó có hỗ trợ cho SSL (HTTPS) (Vào đây xem nguyên nhân tại sao HTTPS lại quan trọng)
  3. Quản lí DNS cực kì dễ dàng
  4. Cho phép được điều chỉnh  browser cache expiration cho các tài nguyên của mình
  5. Tự động giảm thiểu tài nguyên sử dụng để tránh lãng phí
  6. Rules cho các custom page cho việc setup redirect (vd như luôn HTTPS)
  7. HTTP2/SPDY hỗ trợ cho trình duyệt web
  8. Cho phép setup  HSTS (HTTP Strict Transport Security)

Trước khi ta bắt đầu, bạn sẽ cần có một vài thứ sau:

  1. Một tài khoản trên Github
  2. Một tài khoản trên Cloudflare
  3. Quyền truy cập vào một custom domain. Bạn có thể mua nó từ bất cứ Domain Name Registrar nào như: Namecheap, GoDaddy, BigRock

Nếu bạn đã sẵn sàng thì hãy bắt đầu:

Bước 1: Tạo ra Github repo với code của bạn

  • Vào trang https://pages.github.com
  • Chọn vào mục Project Site để tìm hướng dẫn về việc tạo một trang cơ bản từ đầu hoặc bằng cách sử dụng theme tự chọn.

Bước 2: Cài đặt Github page cho repository

Vào mục setting của repository. Trong mục lục của Github Page, chọn master branch để phục vụ cho website của bạn. Sau khi xong, bạn có thể vào https://<yourgithubusername>.github.io/repository để xem website của mình hoạt động như thế nào.

Bước 3: Thêm custom domain

Thêm custom domain mà bạn vừa mới mua vào và nhớ là save nó lại. Từ giờ, website của bạn đã sẵn sàng với custom domain của chính mình.

Như vậy là đã hoàn thành các setup bên Github rồi. Giờ chúng ta sẽ tiếp tục setup cho bên Cloudflare  nhằm trang bị cho website mình các tính năng mạnh mẽ mà tôi đã đề cập đến ở đầu bài viết.

Bước 4: Setup domain của bạn trên Cloudflare

Đăng nhập vào Cloudflare. Nếu đây là lần đầu tiên bạn sử dụng nó, thì bạn sẽ thấy một bảng hiện ra như hình trên. Còn nếu đã dùng vài lần rồi, thì giờ bạn cứ kiếm mục Add Site trên navigation bar ở phía trên bên phải màn hình để thêm domain mới. Hãy điền tên domain mà bạn muốn quản lí và click nút Begin Scan.

Bước 5: Setup DNS record cho domain

Trong bước này, chúng ta sẽ cho Cloudflare biết là ta muốn kết nối domain của ta với

Github Pages server bằng cách sử dụng 2 A Record DNS entry:

  1. 192.30.252.153
  2. 192.30.252.154

Sau khi đã làm xong, thì tất cả những yêu cầu đến domain của bạn sẽ được chuyển về trang web trên Github ở bước 3.

Trước khi qua bước tiếp theo, chúng ta cần có một sub-domain www cho trang web của mình. Vì thế bạn sẽ cần thêm vào một CNAME record DNS entry với công dụng kết nối sub-domain (www) tới domain chính của bạn (@).

NOTE: Đừng có thử truy cập vào trang web của bạn ngay lúc này. Không hoạt động được đâu. Bởi chúng ta chỉ mới hoàn thành Cloudflare cho Github setup. Bạn còn cần phải có DNS Registrar -> Cloudflare setup, vốn sẽ được nói đến trong bước 7.

Giờ thì click continue để tới bước tiếp theo.

Bước 6: Chọn Free Cloudflare plan

Những Free plan dành cho Cloudflare bao gồm các lựa chọn khác nhau khá là hay mà vốn đã được tôi đề cập trong phần vì sao lại là Cloudflare? ở đầu bài viết.

Tiếp theo là click vào continue

Bước 7: Nâng cấp tên server trên DNS Registrar của bạn

Khi đã đến được trang này rùi, hãy giữ nó luôn mở trong một tab riêng và truy cập trang DNS Registrar của bạn (nơi mà bạn mua cái domain ấy). Nếu bạn sử dụng một trong các Registrar do tôi đưa ra thì cứ click vào một trong các nguồn sau đây để hiểu thêm về cách thay đổi tên của server:

  1. Bigrock
  2. Namecheap
  3. GoDaddy

Bạn sẽ cần thay đổi tên của server trong domain setting bằng tên của trong trang Cloudflare mà bạn đã để sẵn ở tab riêng.

Và thế là bạn đã thành công trong việc setup custom domain của mình để sử dụng Cloudflare như một DNS provider. Bạn có thể tới mục Overview ở phía trên và bạn sẽ thấy rằng việc đổi tên cho server vẫn đang chờ để được thực hiện.

Lúc Overview tab hiện ra dòng Status: Active, thì bạn đã có thể truy cập vào trang web của mình nhờ vào custom domain.

Bước 8: Điều chỉnh Minification

Ở mục Speed setting, trong phần Auto Minify, bạn hãy chọn auto-minify everything: Javascript, CSS, HTML. Nhờ đó Cloudflare sẽ tự động cached mỗi lần các asset có thay đổi.

Điểm mạnh của minification chính là ở việc các file thông tin đưa đến trình duyệt của bạn sẽ có kích cỡ giảm đi nhiều nhờ đó mà sẽ tăng hiệu năng xử lí và cải thiện trải nghiệm người dùng.

Bước 9: Tinh chỉnh Browser Cache Expiration

Nếu bạn scroll down trên cùng một trang của Auto Minify, bạn sẽ thấy phần Browser Cache Expiration. Thường thì nó sẽ được setup ở mức 30 ngày/ 1 tháng, để WebpageTest không phải đưa ra một lời warning nào cho bạn. Cái mức thời gian này thể hiện việc khi trang web của bạn được load trên bất cứ trình duyệt nào, thì trình duyệt web đó sẽ không yêu cầu thêm những asset lần thứ 2 cho đến khi hết cái khoảng thời gian trên.

Trước khi qua bước tiếp theo, bạn hãy kiểm tra mục Crypto setting trên Cloudflare. Nó sẽ hiện ra dòng Active Certificate tại mục SSL (Note: nếu không thấy thì thử reload lại trang để nó update). Ở 2 bước tiếp theo, chúng ta sẽ khiến cho website của bạn luôn chạy thông qua HTTPS. Để làm được điều đó, bạn cần phải có tài khoản với active certificate trên Cloudflare.

Bước 10: điều chỉnh nguyên tắc hoạt động của trang web

Ở bước này, chúng ta cần làm 2 điều sau:

  • Chuyển hướng tất cả các request cho www.yourcustomdomain.com đến yourcustomdomain.com
  • Chuyển hướng tất cả các request cho http://yourcustomdomain.com đến https://yourcustomdomain.com

Sau đó đến mục Page Rules setting và click vào Create Page Rule.

Để hoàn thành việc chuyển hướng từ www.yourcustomdomain.com đến yourcustomdomain.com, thay tweetify.io với tên của yourcustomdomain.com. Sau đó click Save and Deploy.

Để hoàn thành việc chuyển hướng từ http://yourcustomdomain.com đến https://yourcustomdomain.com,  thay tweetify.io với tên của yourcustomdomain.com. Sau đó click Save and Deploy.

Bước 11: Tinh chỉnh HSTS

Vào mục Crypto setting và scroll down đến phần HTTP Strict Transport Security (HSTS). Click vào Enable HSTS. Khi đó bạn sẽ được hỏi rằng “bạn có biết mình đang làm gì không”. Trước khi bạn nhấn vào là I understand, tôi sẽ giải thích cho bạn vì sao ta phải làm như vậy:

Nếu một người dùng đã từng truy cập vào website của bạn, thì kể từ đó, bất cứ khi nào người dùng muốn quay trở lại, họ sẽ luôn được truy cập vào phiên bản HTTPS của trang web. Nhờ  đó mà site của bạn sẽ load nhanh hơn một chút đối với các người dùng hay truy cập bởi nhờ vào việc chuyển hướng từ HTTP đến HTTPS đối với client thay vì phải qua Cloudflare Page Rule như ở bước 10

Sau khi hoàn thành tất cả, bạn sẽ xe được một list các tinh chỉnh setting như hình dưới. bạn có thể đọc thêm chi tiết tại đâyđây.

Chúc mừng bạn trong việc tạo ra một website thành công. Giờ đã đến lúc khoe hàng với thế giới rồi.

Nguồn: blog.topdev.vn via medium

Xem ngay tin đăng tuyển lập trình viên đãi ngộ tốt trên TopDev

JavaScript Arrays và Objects thật ra không khác gì sách và báo

Khi bạn vừa mới bắt đầu JavaScript, sẽ rất khó để tìm ra cách sắp xếp và lưu trữ dữ liệu tốt nhất đối với bạn.

Mặt khác, bạn hẳn cũng đã làm quen với arrays từ việc học vòng lặp “loop”. Tuy nhiên khi bạn cố nhồi nhét đống dữ liệu vào array, thì nó cũng trở nên vô cùng hổ lốn và việc review đống code thì y như nhiệm vụ bất khả thi bởi đọc xong cũng chả hiểu.

Vì thế mà việc lựa chọn giữa object và array sẽ chở nên đơn giản hơn nếu bạn xác định được mục đích của chúng. Array thì giống như sách còn Object thì là báo vậy.

Arrays: Thứ tự của dữ liệu mới là quan trọng nhất

Dưới đây là một phần của cuốn sách cực ngắn, trong hình thức array:

var book = ['foreword', 'boyWhoLived', 'vanishingGlass', 'lettersFromNoOne', 'afterword'];

Thôi được rồi, nó là 3 chường đầu của quyển Harry Porter thứ nhất. Dưới đây là dạng hình ảnh của array:

Bạn sẽ muốn dùng array khi mà thứ tự là điều quan trọng nhất để sắp xếp dữ liệu. Chả có ai lại nhìn vào tên các chương của quyển sách rồi nghĩ “chương 3 tên nghe ngầu vãi, thôi đọc chương 3 ngay và luôn!” – Các chương đã được sắp theo thứ tự để bạn biết đọc như nào.

Khi ta lấy thông tin lại từ array, bạn sẽ cần tới index của từng phần. Các array là 0-indexed, chúng bắt đầu đềm từ số 0 chứ không phải là 1.

Như vậy nếu bạn muốn lấy thông tin từ index 0 của array (chứa thông tin về 1 chương của quyển sách), bạn sẽ phải ghi như thế này:

books[0]

Và kết quả bạn nhận được là:

‘foreword’

Bạn chọn đọc dựa vào thứ tự của chương chứ không là tên của chúng.

Tìm việc làm Javascript lương cao trên TopDev

Object: Tên của dữ liệu mới là quan trọng nhất

Dưới đây là cách một tờ báo được thể hiện bằng Object

var newspaper= {
  sports: 'ARod Hits Home Run',
  business: 'GE Stock Dips Again',
  movies: 'Superman Is A Flop'
}

Một góc nhìn khác, thể hiện bằng hình ảnh

Object được sử dụng khi bạn muốn sắp xếp dữ liệu dựa vào tên của chúng. Bởi khi ta đọc báo, đôi khi không theo một trình tự nhất định mà cứ tin nào hay thì đọc trước. Không cần biết thông tin đó ở vị trí nào, bạn có thể lật tới ngay để xem. Vốn khác hoàn toàn so với sách bởi bạn cần đọc theo một thứ tự rõ ràng.

Object sắp xếp dữ liệu thông tin dựa vào key/value pairs. Nó sẽ trông như thế này

key: value

Chẳng hạn nếu bạn muốn vào xem phần “Business” của tờ báo, bạn sẽ phải dùng key như sau

newspaper[‘business’]

hoặc

newspaper.business

Khi đó thông tin sẽ được chuyển lại cho bạn là value “giá vàng lại giảm” chẳng hạn. Vì thế nên khi bạn thấy việc sắp xếp dữ liệu dễ dàng hơn dựa vào tên thì hãy dùng object.

  9 lỗi JavaScript các lập trình viên hay gặp

Kết hợp cả Object và Array

Nãy giờ, chúng ta chỉ nói về cách sắp xếp string dựa vào Object hoặc Array. Giờ thì bạn còn có thể dùng kết hợp cả hai lại:

  1. Array trong Object
  2. Object trong Array
  3. Array trong Array
  4. Object trong Object

Đây là lúc mọi chuyện chở nên rối rắm. Tuy nhiên, trong đời thực, bạn sẽ luôn luôn phải dùng cách kết hợp ít nhất 2 cách sắp xếp để lưu trữ dữ liệu một cách tốt nhất. Ngoài ra, nó còn phải tiện cho bạn để mỗi lần review code sau một tuần làm việc thì bạn còn hiểu được mình đã viết cái gì.

  Giới thiệu về Reactive Programing trong javascript

Quay về với ví dụ sách ở trên. Giả sử bạn còn muốn lưu trữ thông tin của từng trang của từng phần của quyển sách thì sao? Đó là lúc bạn nên sử dụng cáchObject trong Array, như thế này:

var book =[
  [‘foreword’, 14],
  [‘boywholived’, 18]
]
var book = [
  {name:'foreword', pageCount: 14},
  {name:'boyWhoLived', pageCount: 18},
  {name:'vanishingGlass', pageCount: 13},
  {name:'lettersFromNoOne', pageCount: 17},
  {name:'afterword', pageCount: 19}
];

Bạn vẫn giữ được thứ tự của từng chương và giờ lại có thêm tính năng đánh số từng trang. Và nếu bạn muốn biết số trang thì cứ thêm dòng này.

book[1][‘pageCount’]

Kết quả sẽ là value với 18.

Giờ ví dụ như bạn muốn biết list xếp hạng những tác giả sách hay nhất dựa theo tuổi của họ trong bài báo thì sao. Đây là lúc bạn dùng Array trong Object rồi đấy:

var newspaper= {
  sports: 'ARod Hits Home Run',
  sportsWriters: ['Miramon Nuevo', 'Rick Reilly', 'Woddy Paige'],
  business: 'GE Stock Dips Again',
  businessWriters: ['Adam Smith', 'Albert Humphrey', 'Charles Handy'],
  movies: 'Superman Is A Flop',
  moviesWriters: ['Rogert Ebert', 'Andrew Sarris', 'Wesley Morris']
}

Array lúc này trở nên vô cùng phù hợp bởi list xếp hạng cần có thứ tự. Tương tự, ta cũng có thể có array list các vận động viên trong object sport.

Tìm việc làm Javascript TP Hồ Chí Minh đãi ngộ tốt trên TopDev

Một vài thử thách dành cho bạn

Bạn đang làm một web app có phần quiz, yêu cầu người xem phải điền vào một list các câu hỏi và xem số điểm mình ghi được là bao nhiêu ở cuối bài. Bạn sẽ muốn lưu trữ tất cả các câu trả lời của người dùng và kiểm tra chúng sau khi đã hoàn thành bài test. Vậy thì ta nên dùng phương thức nào để lưu trữ những câu trả lời của user trước khi kiểm tra nó? Tại sao?

Thí dụ bạn cho phép user tạo profile của mình trên trang web của bạn, bao gồm tên, họ, email và mật khẩu. Bạn sẽ muốn lưu trữ những thông tin đó trước khi gởi nó đến back end. Như vậy bạn sẽ chọn phương thức nào để lưu trữ những thông tin về user? Tại sao?

Giờ bạn đang phải tạo ra một forum site, công việc của bạn là xếp hạng các comment dựa trên số vote chúng có. Vậy thì phải xài cách nào khi bạn phải theo dõi cả nội dung của comment và số vote của chúng? Gợi ý: Đó là một phương thức kết hợp.

Nguồn: tổng hợp

Tham khảo tin tuyển dụng lập trình viên mới nhất trên TopDev

Mobile Day năm nay – Bạn sẽ không còn cô đơn

Ai mà chưa từng trải qua thời ngẩn ngơ với thông điệp Connecting People của Nokia để rồi ao ước sở hữu trong tay 1 chiếc điện thoại phím số kết nối với những người mà ta yêu thương?

Ai mà không biết, trong thập kỉ qua, Facebook đã không ngừng cải tiến, phát triển vì khao khát trao quyền chia sẻ, xóa nhòa khoảng cách địa lý, giúp thế giới trở nên mở mang và kết nối hơn?

Khi cụm từ IoT – Kết nối vạn vật trở thành thông điệp chính của công nghệ trong những thập niên tới, cùng lúc ấy, cũng rất tự nhiên, chúng ta có bản năng tìm về những giá trị kết nối truyền thống nhất, chân thực nhất.

Còn gì tuyệt vời hơn nếu có thể cùng bạn bè, đồng nghiệp – những “thần dân” đang sống & làm việc giữa kỉ nguyên Mobile – hoài niệm về 1 thời đã qua và chứng kiến những bước tiến mới trong ngành công nghiệp này?

Với sứ mệnh kết nối cộng đồng đã xây dựng suốt 7 mùa đã qua, BTC Vietnam Mobile Day trân trọng gửi tặng bạn MÃ CODE GIẢM GIÁ 100.000 VNĐ/ CẶP VÉ STANDARD để bạn không còn đơn thân lẻ bóng khi đi tham dự sự kiện nữa!

vietnam mobile dayCác bước đơn giản để nhận được mã code:

Hạn chót: 11h sáng thứ 5, ngày 11/05/2017

THAM GIA NGAY HÔM NAY VÌ 1 MÙA MOBILE DAY KHÔNG CÔ ĐƠN CỦA BẠN

  • Thời gian & địa điểm sự kiện
    – 20/05/2017 tại Trung tâm Hội nghị 272 Võ Thị Sáu, Q.3, Tp.HCM
    – 27/05/2017 tại Trung tâm Hội nghị Forevermark, 614 Lạc Long Quân, Q. Tây Hồ, Hà Nội
    – 03/06/2017 tại OneOpera Hotel, 115 Nguyễn Văn Linh, Q.Hải Châu, Tp. Đà Nẵng
  • Website: http://mobileday.vn/
  • Hotline:
    Ms. Ngọc Đỗ
    Điện thoại: 08 6273 3497 | 0944 685 243
    Email: ngoc.do@applancer.net

9 ứng dụng tuyệt vời được viết bằng React Native

9 thương hiệu nổi tiếng viết app bằng React Native - bạn đã biết?

Ý tưởng tạo ứng dụng chỉ sử dụng một kiểu mẫu cho tất cả các nền tảng có vẻ không thực tế chút nào. Tuy nhiên, React Native, mặc dù chưa thật sự hoàn thiện, nhưng cho phép đẩy nhanh quá trình xây dựng các ứng dụng trên các nền tảng khác nhau, nhờ khả năng sử dụng lại hầu hết các code giữa chúng. Dưới đây là danh sách những công ty nổi tiếng có app viết bằng React Native

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

Facebook

React Native bắt đầu khi dự án hackathon của Facebook phát triển để đáp ứng nhu cầu của công ty. Facebook muốn mang lại tất cả các lợi ích của phát triển web – chẳng hạn như lặp đi lặp lại nhanh và có một đội xây dựng toàn bộ sản phẩm – di động. Đó là cách React Native đã được đưa vào cuộc sống và tận dụng trong phát triển ứng dụng dành cho thiết bị di động cho cả ứng dụng iOS và Android.

Nhóm lập trình đã chuyển đổi tính năng Events Dashboard trong ứng dụng Facebook cho iOS sang React Native để kiểm tra hiệu suất ứng dụng, chẳng hạn như thời gian khởi động, điều này rất quan trọng trong loại hình ứng dụng này. Đây là một phần quan trọng trong ấn tượng ban đầu của người dùng về ứng dụng và xác định liệu chúng có tồn tại hay ra đi không. Những gì họ đạt được là cắt giảm thời gian tìm hiểu thị trường một nửa. Đọc về cuộc hành trình của họ với React Native tại đây.

Skype

Skype gần đây đã thông báo rằng họ đang thử nghiệm một ứng dụng Android mới được viết bằng React Native. Đó là một thông tin khá tốt cho tất cả người dùng, vì ứng dụng hiện tại gặp nhiều vấn đề. Phiên bản mới hoàn toàn được cải tiến bắt đầu từ các icon cho toàn bộ bố cục, thêm một vài tính năng gọn gàng nữa. Như Microsoft cũng đã thông báo, Skype Preview cho iOS đã có sẵn với số lượng giới hạn thông qua TestFlight của Apple dành cho Skype Insiders.

Cũng cần lưu ý rằng GitHub repo với plugin React Native cho Universal Windows Platforms gần đây đã được chuyển sang Microsoft. Điều đó có nghĩa là không chỉ Skype cho iOS mà còn là một phiên bản dành cho máy tính để bàn, đây sẽ là dự án React Native lớn đầu tiên của Windows. Đây là một dấu hiệu tốt cho nền tảng này. Sớm thôi chúng ta sẽ có thể thấy React Native hoạt động khá tốt trên Windows.

Facebook Ads

Nền tảng mạng xã hội không phải là ứng dụng React Native duy nhất được phát triển dưới mái nhà của Facebook. Quảng cáo trên Facebook thực sự là ứng dụng React Native đầu tiên dành cho Android và là ứng dụng React Native hoàn chỉnh đầu tiên được xây dựng trong công ty. Framework dường như hoàn toàn phù hợp với rất nhiều business logic phức tạp cần thiết để xử lý chính xác các định dạng quảng cáo, múi giờ, định dạng ngày, tiền tệ, công ước tiền tệ, vân vân, đặc biệt là một đoạn lớn đã được viết bằng JavaScript. Trên hết, việc thực hiện các UI nhiều dữ liệu sẽ dễ dàng hơn với React Native.

Nhiều thành phần được phát triển cùng với ứng dụng Facebook Ads rất hữu ích cho các nhà phát triển khác trong việc xây dựng ứng dụng của họ.

Đọc thêm về ứng dụng React Native hoàn chỉnh đầu tiên từ Facebook.

Instagram

Instagram đã vượt qua thử thách để tích hợp React Native vào ứng dụng gốc hiện tại của họ, bắt đầu từ chế độ xem đơn giản nhất mà bạn có thể tưởng tượng: chế độ Push Notifications đã được triển khai thực hiện dưới dạng WebView. Nó không yêu cầu xây dựng cơ sở hạ tầng navigation, vì UI khá đơn giản.

Đội ngũ lập trình tại Instagram đã phải đối mặt với một số vấn đề trong quá trình, nhưng họ đã cải thiện đáng kể tốc độ phát triển. 85% đến 99% code được chia sẻ giữa các ứng dụng Android và iOS, tùy thuộc vào sản phẩm, do đó nhóm đã có thể cung cấp ứng dụng nhanh hơn nhiều so với các giải pháp thông thường.

Đọc thêm tại blog kỹ thuật của Instagram.

Walmart

Walmart nhằm tới mục đích thực sự cao, khao khát trở thành nhà bán lẻ trực tuyến lớn nhất thế giới. Với những mục tiêu lớn như vậy, công ty cần phải có những hành động táo bạo có nguy cơ cao hơn để đạt được lợi thế cạnh tranh. Đó là lý do tại sao họ luôn tìm cách cải thiện trải nghiệm của khách hàng bằng cách thử các công nghệ mới. Walmart đã chứng minh khả năng sáng tạo của mình khi giới thiệu Node.js vào stack của họ. Một vài năm sau, họ cũng viết lại ứng dụng trên thiết bị di động của họ thành React Native.

Walmart đã cải thiện hiệu suất của ứng dụng trên cả iOS và Android bằng cách sử dụng ít tài nguyên hơn và trong khoảng thời gian ngắn hơn. 95% codebase được chia sẻ giữa các nền tảng trong khi các kỹ năng và kinh nghiệm của các lập trình viên đã được tận dụng trong toàn công ty. React Native cho hiệu suất tuyệt vời, gần như giống với các ứng dụng gốc, và hình động cực kỳ mượt.

Đọc thêm về câu chuyện thành công của họ.

Airbnb

Airbnb cũng đã tích hợp React Native vào ứng dụng di động của họ. Những gì họ nhận thấy lần đầu tiên khi làm việc với framework này là chi phí tích hợp với các ứng dụng gốc hiện tại rất cao, nhưng với không sao. React Native rất dễ bắt đầu, nhưng một số thách thức đã xuất hiện trên đường phát triển. Vấn đề chính là những người mới sử dụng React đã gặp phải một số khái niệm về quản lý trạng thái trong một ứng dụng React. Lợi thế lớn nhất, là khả năng sử dụng lại code. Hầu hết các thành phần đều có thể tái sử dụng được. Hơn nữa, React đã tạo code rất dễ dàng để tái cấu trúc và lặp lại.

Xem thêm về hoàn thiện React Native của Airbnb trong cuộc trò chuyện công nghệ này.

SoundCloud Pulse

SoundCloud Pulse là một ứng dụng dành cho người sáng tạo giúp họ quản lý tài khoản và giữ cho cộng đồng của họ sôi động. Khi công ty bắt đầu thiết kế bộ ứng dụng gốc thứ hai, họ phải đối mặt với một vài trở ngại. Không thể tìm thấy các lập trình viên iOS và họ không muốn có một khoảng cách lớn giữa bản phát hành iOS và Android. Do đó, một nhóm nghiên cứu độc lập đã bắt đầu chạy các phiên thử nghiệm người dùng bằng các nguyên mẫu dựa trên React Native.

Mặc dù có một số điểm yếu mà nhóm nghiên cứu tại SoundCloud nhận thấy, tuy nhiên kinh nghiệm của họ với framework này nhìn chung là tích cực. Các lập trình viên thấy rằng dễ dàng làm việc trên một ứng dụng dựa trên React hơn trên một ứng dụng nguyên thuỷ. Hơn nữa, họ có khả năng xây dựng ứng dụng mà không có đầu vào thường xuyên từ các nhà phát triển điện thoại di động chuyên dụng. Đọc thêm về cuộc hành trình của họ trên blog công nghệ của họ.

Yeti Smart Home

Nhóm lập trình tại Yeti Smart Home đã phải đối mặt với một vấn đề tương tự như ở SoundCloud. Họ thiếu lập trình viên phát triển iOS và Android nhưng họ thực sự muốn bắt đầu xây dựng các ứng dụng “gốc”. Đó là lý do tại sao họ chuyển sang React Native, là framework tốt hơn là học từ đầu, để tạo ra những trải nghiệm tốt trên Swift và Java. Lúc đầu không phải đơn giản, vì React Native vẫn còn chưa hoàn thiện. Nhưng với thời gian và sự đóng góp của cộng đồng mã nguồn mở đang phát triển, dự án phát triển nhanh và nhanh hơn nữa, sau đó họ có thể vượt khỏi màn hình di động để thiết kế các thành phần có thể kiểm soát các thiết bị khác nhau. React Native nhờ cách xây dựng module của nó, đã làm cho nó có khả năng tái sử dụng những “viên gạch nhỏ” để xây dựng lại giao diện. Đọc thêm về trải nghiệm của họ với React Native tại đây.

Uber Eats

Uber gần đây đã chia sẻ thông tin chi tiết của họ về việc tận dụng React Native trong kỹ thuật của ứng dụng phân phối thực phẩm của họ. Không giống như ứng dụng Uber chuẩn, thị trường Uber Eats liên quan đến ba bên: nhà hàng, người giao hàng và người dùng. Mô hình như vậy đòi hỏi một bảng điều khiển bổ sung cho các nhà hàng. Bảng điều khiển Nhà hàng ban đầu đã được xây dựng cho web và nó cung cấp truy cập hạn chế các chức năng thiết bị gốc, chẳng hạn như thông báo âm thanh là một vấn đề quan trọng cho trải nghiệm của người dùng. Vì nhóm đã có thí nghiệm sử dụng React nhưng giới hạn số lần hiển thị iOS / Android nên họ đã quyết định xây dựng lại bảng điều khiển bằng React Native. Mặc dù framework chỉ là một phần nhỏ của công nghệ được sử dụng trong Uber Eats nhưng các lập trình viên đánh giá tốt về khả năng và năng lực của nó, có thể giúp họ đáp ứng nhu cầu khi thị trường phát triển.

Đương nhiên, có rất nhiều ứng dụng được viết bằng React Native và chúng ta có thể thấy rằng một mảnh đất ngày càng tăng cho framework trong tương lai phát triển. Mặc dù chưa hoàn thiện và lỗi, nhưng nó mang lại một loạt các khả năng. Với sự tăng trưởng của cộng đồng và sự phổ biến rộng hơn, chúng ta có thể thấy nhiều ứng dụng React Native hơn xuất hiện trong tương lai gần.

Tham khảo thêm các vị trí tìm việc it lương cao tại Topdev.

Đọc thêm:

Nguồn: Techtalk via Netguru

Lập trình hướng chức năng đang thống trị mảng UI với Pure Views

Những năm gần đây đã chứng kiến sự cải thiện rất lớn trong cách UI được phát triển bằng cách sử dụng Purely Functional Views. Trong lập trình hướng chức năng “pure function” là một trong số function khi chạy, trả về một giá trị nhưng không thay đổi bất cứ điều gì (còn được gọi là side-effect free function). Điều này làm giảm đáng kể việc load cognitive và permutations trong các ứng dụng để có thể giảm được rất nhiều bug (xem trường hợp nghiên cứu), dễ hiểu, dễ tương tác và ổn định vô cùng.

David Nolen có một trong những cách giải thích tốt nhất cho kiểu phát triển UI này, ƒ (d) = V. Đó là một chức năng nhận dữ liệu làm đầu vào của nó và trả về dưới chế độ view. Không scoping, binding, subclassing, truy cập từ bên ngoài vào các biến hoặc bất kỳ tác dụng phụ. Điều này làm cho nó trở nên rất có thể đoán được chỉ cần nhìn qua Pure View được chạy. Trong thế giới JavaScript bạn có thể nói, Cho bất kỳ JSON nào cũng sẽ tạo ra các trình listener HTML, CSS và sự kiện tương tự.

Tại sao Pure Views khác với các kiểu UI khác?

Để hiểu kỹ về điều này, chúng ta cần phải hiểu những gì chúng ta đã ngầm làm trong nhiều năm trong code của chúng ta. Code được viết như một chuỗi các permutation phức tạp. Mỗi chức năng chúng ta call đều thay đổi một cái gì đó bên ngoài phạm vi private. Sau đó chúng ta call một hàm khác thay đổi cái gì đó khác. Nếu dữ liệu hoặc thứ tự của các chức năng này call deviate trong bất kỳ cách nào bug sẽ đến bất ngờ. Hãy suy nghĩ về những lần bạn fix bug được tạo ra bởi một cái gì đó dường như không liên quan trong class khác hoặc server một nơi nào đó. Đây là những vấn đề lớn về permutation.

Hãy xem bảng dưới đây. Đây là cách chúng tôi suy nghĩ về nội bộ của các ứng dụng.

Cách chúng tôi “nghĩ” cách ứng dụng của chúng tôi hoạt động.

Rất rõ ràng, phải không? Call “login ()”, rồi “getUser ()” rồi “getCart ()”. Trong thực tế luồng ứng dụng của chúng tôi bao gồm các đường dẫn lỗi, các giá trị bất ngờ, network và luồng. Nếu chúng trở lại với một thứ tự hơi khác hoặc dữ liệu hơi khác nhau hoặc dữ liệu bị biến đổi bởi nhiều class trong ứng dụng của chúng tôi, chúng sẽ tạo ra bug. Đây là mô hình chính xác hơn về các nhánh:

Cách ứng dụng của chúng tôi hoạt động thực sự.

Nếu bất cứ điều gì không đi theo hướng dự kiến vào thời gian dự kiến chúng tôi nhận được bug. Lớp OOP được cho là dữ liệu đóng gói, sự kiện và biến đổi bên trong ranh giới của nó để làm việc này mà không có bug. Rõ ràng chúng ta đều có thể gặp bug. Nhưng hệ thống rất khó bởi vì chúng phức tạp để tạo ra bug.

Đơn giản dễ dàng

Đối với bất cứ ai đã học về Gang of Four and Object-Oriented Patterns nhưng chưa xem bài nói chuyện của Rich Hickey “Simple Made Easy” hãy xem nó ngay bây giờ. Khái niệm cốt lõi mà Hickey nói đến là làm thế nào mà quá nhiều yếu tố bên ngoài là một lý do chính tại sao chúng ta không hiểu rõ code của chúng ta đang làm gì khi chúng ta đọc nó. Không dễ vì quá nhiều điều được thực hiện cùng một lúc. Ngôn ngữ hướng đối tượng có các pattern cố gắng giảm sự phức tạp đó bằng cách sử dụng encapsulation. Các ngôn ngữ chức năng, có khả năng cao composability là tính năng chính để giảm sự phức tạp. Một sự kết hợp tốt hơn của cả hai là cần thiết để có được kiểm soát tốt hơn UI của chúng tôi.

Pure Views mang lại một số lợi ích của ngôn ngữ chức năng cho thế giới OO mà hầu hết các lập trình viên sử dụng. Trong ngôn ngữ chức năng, pure function chỉ làm một điều và không có tác dụng phụ (không tác dụng phụ có nghĩa là nó không ảnh hưởng đến bất cứ điều gì, chỉ trả về một giá trị mới). Nhiều chức năng đơn giản có thể được tạo ra theo nhiều cách khác nhau để tạo ra nhiều loại dữ liệu đầu ra. Để giải thích Rich Hickey, đơn giản có nghĩa là làm một việc. Dễ dàng có nghĩa là chúng ta có thể hiểu được tổng quan. Trong trường hợp của Pure View, nhìn vào chức năng render chúng ta có thể hiểu được tất cả các đầu ra tiềm năng. Nó làm giảm yêu cầu hiểu toàn bộ cơ sở code để biết làm thế nào nó có thể có tác dụng đến một chức năng duy nhất.

Đây là cách chế độ Pure View sẽ hoạt động:

Pure Views là những biến đổi đơn giản mà không có tác dụng phụ.

Đây là một khái niệm vô cùng mạnh mẽ. Thay vì phải truyền thông qua chức năng, sự kiện và các network stack và thay đổi ở mọi nơi, chỉ cần chụp nhanh dữ liệu và hiển thị với chế độ view. Chế độ view sẽ có tất cả các bố cục, trình xử lý sự kiện và các điểm truy cập để người dùng tương tác với các dữ liệu cơ bản. Điều này có nghĩa là để có đến được bất kỳ vị trí trong ứng dụng, chỉ phụ thuộc là một mô hình dữ liệu tĩnh. Nói chung các Pure View này được kết hợp với các phương pháp vòng đời để hiểu rõ hơn khi nào, tại sao và dữ liệu thay đổi như thế nào. Ví dụ: hãy xem một số code thực sự của Pure View:

createView({
  getDefaultProps(){
    return {
      selectedIds: [1, 10],
      banks: [/* bank data here */]
    };
  } 
  render(){ 
    let selectedBanks = this.props.banks.filter(function(bank){
      return this.props.selectedIds.indexOf(bank.id) > -1;
    });
    let bankItems = [];
    for (let i=0; i < selectedBanks.length; i++){
      bankItems.push(
        el("BankItem", {key:i, bank:selectedBanks[i]})
      );
    }
    return el("div", null,
             el("h1", null, "Selected Banks"),
             bankItems,
             el("a", {href:"/install", "Next")
           );
  }
})

View này encapsulate các thuộc tính được chuyển bởi parent của nó. Khi chức năng render được call, nó không yêu cầu bất cứ điều gì ngoài phạm vi chính của view. Tất cả mọi thứ có thể ảnh hưởng đến đầu ra tất cả đều trong một chức năng duy nhất. Cho đến khi chức năng render kết thúc, props và state cũng không thể thay đổi. Điều này làm cho nó dễ dàng hiểu lý do về những gì sẽ xảy ra trên mỗi lần chạy. Bất cứ khi nào parent gửi dữ liệu mới, nó sẽ kích hoạt chức năng render để chạy lại.

Mở rộng khả năng mà không cần phức tạp thêm

Bởi vì Pure View chỉ làm một việc và không ảnh hưởng gì đến những ngoài phạm vi của nó, nó làm cho nó trở nên cực kỳ linh hoạt mà không có sự phức tạp. Có một vài trường hợp cho thấy sức mạnh thực sự của Pure View.

Việc đầu tiên được gọi là Hot Module Replacement. Nếu bạn nghĩ rằng điều này cũng giống như Live Reloading trong trình duyệt, bạn sẽ không còn hứng thú nữa. Ngay khi bạn lưu file trong editor, chỉ có code mới cập nhật được gửi đến app của bạn, thay thế code cũ, chức năng hiển thị cho chế độ view được chạy và chỉ HTML khác thay đổi. Toàn bộ data layer của ứng dụng không bị ảnh hưởng. Điều này làm việc với layout, view hierarchy và xử lý sự kiện. Dữ liệu trong app không thay đổi vì vậy bạn đang được xem dữ liệu cập nhật theo thời gian thực. Có thư viện để hỗ trợ điều này trong trình duyệt, ứng dụng iOS, Android, Windows và Mac. Khi thời gian lặp giữa việc thực hiện thay đổi code và nhìn thấy đầu ra gần 0, nó thay đổi hoàn toàn quy trình code của bạn.

Tiếp theo là Time Travel Debugging. Nó thực sự tuyệt vời như cái tên. Nếu không có Pure View, lưu trữ tất cả các sự kiện propagation và tác động của nó đến view là impossible load cho hầu hết các hệ thống. Với Pure Views tất cả những gì cần thiết là có một mảng và đẩy một bản sao của dữ liệu mới mỗi khi nó thay đổi. Nếu bạn hiểu cấu trúc dữ liệu liên tục hoạt động, công việc thậm chí còn ít hơn để lưu mọi thay đổi trong app của bạn. Khi gỡ lỗi, chỉ cần scrub back và forth giống như một VCR. (Công nghệ UI những năm 80,  Yeah những năm 80 và hầu hết các UI framework không có debug toolkit như ngày hôm nay). Application state thậm chí có thể được xếp theo thứ tự và lưu trên máy chủ trong quá trình sản xuất để có được các bước repo đầy đủ về mọi lỗi trong ứng dụng của bạn.

Khả năng chuyên dụng cuối cùng là Resiliency Over Rigidity. Dữ liệu không được gắn với UI. Rõ ràng tách biệt là điều cần quan tâm. Data layer ứng dụng của bạn có thể tập trung về chức năng, chuyển đổi dữ liệu và cache mà không cần phải suy nghĩ về tất cả những mối quan tâm mà người dùng có thể có. Về phần lớn các dự án business logic hầu như không thay đổi; Code cho một giỏ mua hàng comm khá nhiều có các yêu cầu tương tự. Nhưng trên View layer, các nhà thiết kế luôn tìm ra cách mới để giải thích hoặc làm rõ giao diện hoặc tăng doanh thu. Các bài kiểm tra đơn vị và tích hợp có thể tập trung vào việc kiểm tra lưu lượng ứng dụng trong dữ liệu thuần túy, đơn giản. Vì View chỉ là một phép biến đổi đơn giản và phản ánh dữ liệu ở bất kỳ trạng thái nào, nó ít bị ảnh hưởng bởi complexity hoặc bug. Điều này cũng có nghĩa là khi người thiết kế hoặc giám đốc kinh doanh yêu cầu thay đổi chế độ view, nó có thể được thực hiện mà không ảnh hưởng đến chức năng của luồng dữ liệu.

Quay trở lại với thực tế

Pure View đang phát triển. Có rất ít, nếu có bất kỳ tiện ích truyền thống view layer trên Pure View. Framework mở rộng hơn như Backbone bạn có thể trao đổi ra các hệ thống templating string cho Pure View. Ngày càng có nhiều tác giả framework đang nhìn thấy những lợi thế và hướng đến Pure Views. Một vài framework đáng chú ý thực sự là Elm, Ember 2, Om Next, ReactJS.

Để tận dụng lợi thế của một số khả năng mở rộng Pure View cung cấp thì có một số công cụ out-of-the-box mà dễ dàng hơn để tích hợp. Đối với Hot Module Replacement, Webpack và React là lựa chọn tuyệt vời. Tôi duy trì một bộ starter kit được gọi là Megatome, cái này sẽ giúp bạn bắt đầu và chạy một dự án mới trong vòng 2 phút. Đối với Time Travel Debugging xem như Redux với data layer  được xây dựng để làm việc với React.

Lưu ý cuối cùng là dành cho tất cả những người xem xét kỹ lưỡng cú pháp (ví dụ như Lisps hoặc JSX): không đánh giá một cuốn sách qua trang bìa của nó. Nếu bạn không nhìn kỹ hơn, bạn hoàn toàn có thể bỏ qua các khả năng và sức mạnh có thể đến từ một cái gì đó khác nhau. Nhìn lại đoạn code ở trong Pure View ở trên. Đó là tất cả các code hợp lệ mà không cần phải transpilation, quản lý package hoặc bất kỳ bước build bổ sung nào. Điều duy nhất mà mất là:

let el = React.createElement;
let createView = React.createClass;

Techtalk via Freecodecamp

GraphQL – Công nghệ mới cho web developer

GraphQL là gì? Nếu bạn cũng như tôi, một tín đồ về lập trình thì hẳn bạn cũng trải qua 3 khung cảm xúc mỗi khi nghe tin công nghệ mới xuất hiện:

1.Chán nản:

Lại thêm một JavaScript library?! Sao không xài jQuery quách cho rồi?

2.Quan tâm:

Hmm, cũng được đấy, để check thử cái library mới này xem sao?

3.Hoảng loạn:

Thôi chết rồi, hoặc là phải biết xài thằng này không thì chỉ có nước hửi khói tụi khác!

Cách để giữ bạn không phải phát điên lên khi trải qua 3 giai đoạn trên là phải học được những thứ mới mẻ ngay giữa giai đoạn 2 và 3, khi mà bạn đã có hứng thú về nó nhưng công nghệ vẫn còn mới mẻ chưa được biết đến nhiều.

Vì thế mà bây giờ là thời điểm hoàn hảo để học về GraphQL mà mọi người luôn bàn tán gần đây.

GraphQL là gì?

GraphQL là một cú pháp mô tả cách yêu cầu lấy dữ liệu, và thường được dùng để load data từ một server cho client.

GraphQL bao gồm 3 điểm đặc trưng bao gồm cho phép client xác định chính xác những gì dữ liệu họ cần, làm cho việc tổng hợp dữ liệu từ nhiều nguồn dễ dàng hơn và nó sử dụng một type system để mô tả dữ liệu.

Vấn đề

GraphQL bắt đầu từ ông lớn Facebook, thế nhưng ngay cả những app đơn giản đôi khi vẫn gặp phải trường hợp “nghẽn cổ chai” do sự hạn chế của REST APIs.

Thí dụ bạn muốn hiển thị một list posts, và ở dưới mỗi post là một list like, bao gồm cả tên người dùng và avatar. Cách giải quyết đơn giản là thay đổi API của ‘posts’ để nó bao gồm a ‘like’ array chứa thông tin về người dùng.

  10+ tools và extensions tuyệt vời cho GraphQL APIs
  Cùng tìm hiểu về GraphQL

graphql

Thế nhưng khi làm như vậy cho các app mobile thì bạn sẽ phát hiện ra tốc độ của chúng chạy quá chậm. Vì thế mà giờ đây bạn sẽ cần tới 2 endpoints, một với likesvà một thiếu chúng.

Giờ thì còn có thêm một vấn đề khác xuất hiện: trong khi postsđược lưu trữ trong một MySQL database thì likes lại được lưu tại Redis store! Bạn biết mình phải làm gì trong trường hợp nào không?

Mở rộng vấn đề trên ra với việc Facebook phải quản lí vô số data source và API clients thì cũng là điều dễ hiểu khi REST APIs bị đánh giá là cũ kĩ bởi những hạn chế của nó.

Giải pháp

Giải pháp mà Facebook đưa ra đến từ một ý tưởng rất đơn giản: Thay vì có đến hàng tá “endpoint” ngu ngốc, sao lại không dùng chỉ một “endpoint” thông minh với khả năng tiếp thu những Query phức tạp rồi đưa ra output data với loại type tùy theo yêu cầu của client.

Thế tế mà nói, GraphQL như là một layer nằm giữa client và data source, sau khi nhận yêu cầu của client thì nó sẽ kiếm những thông tin cần từ các data source và đưa lại cho client theo format họ muốn. Vẫn chưa hiểu? Thế thì đến lúc dùng ví dụ ẩn dụ rồi đây!

  GraphQL - Công nghệ mới cho web developer
Xây dựng forum bằng GraphQL, React, Apollo và Prisma – Part 1 :Application Introduction and Technologies Overview”]

  Tại sao bây giờ là thời điểm thích hợp để học GraphQL?

Như bạn thấy đấy, REST model cũ giống y như việc bạn đặt cái bánh Pizza, rồi gọi ship hàng online và kêu bên tiệm giặt ủi đem đồ đến cho bạn. Tất cả diễn ra với 3 cuộc gọi và 3 cửa hàng.

graphql

GraphQL mặt khác lại giống như là thư kí riêng của bạn vậy: Sau khi bạn đưa địa chỉ của 3 cửa hàng và nói yêu cầu của bạn thì GraphQL sẽ làm hết mọi chuyện còn lại trong khi bạn chỉ việc chờ chúng được chuyển đến cho mình.

graphql

Nói cách khác GraphQL tạo ra một ngôn ngữ chuẩn (standard language) để thực hiện những công việc này.

graphql

GraphQL API được tạo ra từ 3 phần chính: schema, queries, và resolvers

Queries

Những yêu cầu bạn đặt ra cho thư kí của mình, GraphQL, được gọi là query và nó giống như thế này:

query {
  stuff
}

Chúng ta tuyên bố một ‘query’ mới sử dụng keyword query , và đặt tên cho field đó là stuff. Điều thú vị của GraphQLquery là có support các nested fields. Thế nên chúng ta có thể đi sâu vào hơn:

query {
  stuff {
    eggs
    shirt
    pizza
  }
}

Như bạn thấy đấy, client khi đưa ra những yêu cầu và tạo ra query sẽ không cần lo data đến từ source nào. Chỉ việc hỏi và GraphQLserver  sẽ lo hết mọi thứ khác.

Cũng đáng lưu ý là việc các query field còn có khả năng chỉ đến các array

query {
  posts { # this is an array
    title
    body
    author { # we can go deeper!
      name
      avatarUrl
      profileUrl
    }
  }
}

Query field còn support cả argument. Nếu bạn muốn đưa ra một post riêng, thì chỉ cần thêm id argument cho post field.

query {
  post(id: "123foo"){
    title
    body
    author{
      name
      avatarUrl
      profileUrl
    }
  }
}

Cuối cùng, nếu bạn còn muốn id argument đó đặc biệt hơn, bạn có thể tạo ra một variable và tái sử dụng chúng bên trong query (nhớ là ta phải đặt tên cái query đó luôn)

query getMyPost($id: String) {
  post(id: $id){
    title
    body
    author{
      name
      avatarUrl
      profileUrl
    }
  }
}

Một cách thực hành khá tốt là sử dụng GitHub’s GraphQLAPI Explorer. Hãy thử query sau:

query {
  repository(owner: "graphql", name: "graphql-js"){
    name
    description
  }
}

graphql

Bạn sẽ thấy rằng việc bạn thử đặt tên cho một field ở bên dưới description, IDE sẽ tự động gợi ý cho bạn những tên field có sẵn hoặc tự tạo bởi chính GraphQLAPI ! Khá hay đúng không?

lập trình web

Resolvers

Cho dù có là thư ký giỏi nhất quả đất cũng không thể đi lấy quần áo cho bạn nếu không có địa chỉ của tiệm giặt đồ.

Tương tự vậy, GraphQLserver sẽ không biết phải làm gì với query bạn đưa ra trừ khi nó biết được resolver.

Resolver nói cho GraphQL biết nơi và cách thức để lấy data cần thiết cho field của query mà bạn yêu cầu. Sau đây là một resolver cho field `post` ở trên (sử dụng Apollo’s GraphQL-Tools schema generator):

Query: {
  post(root, args) {
    return Posts.find({ id: args.id });
  }
}

Ta đặt resolver ngay trong Query bởi vì ta muốn query cho post ngay lập tức. Tuy nhiên, bạn vẫn có thể dùng resolver trong sub-field, như author field của post

Query: {
  post(root, args) {
    return Posts.find({ id: args.id });
  }
},
Post: {
  author(post) {
    return Users.find({ id: post.authorId})
  }
}

Nhớ lưu ý rằng resolver sẽ không bị giới hạn bởi trong số lượng thông tin được đưa về nên bạn sẽ muốn thêm commentsCount cho Post type:

Post: {
  author(post) {
    return Users.find({ id: post.authorId})
  },
  commentsCount(post) {
    return Comments.find({ postId: post.id}).count() 
  }
}

Điều quan trong bạn cần hiểu ở đây là với GraphQL, API schema của bạn và database schema sẽ bị chia ra riêng biệt. Nói cách khác, có thể sẽ không có bất kì author và commentsCount nào trong database của mình nhưng ta vẫn có thể “mô phỏng” chúng nhờ vào resolver.

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

Bạn có thể viết bất kì code gì trong resolver, vì thế mà bạn có thể dùng chúng để sửa đổi nội dung của database, vốn còn được gọi là mutation resolver.

Schema

Tất cả mọi thứ hay ho trên đều nhờ vào hệ thống GraphQL’s typed schema. Vì mục đích bài viết này chỉ là đơn giản giới thiệu nên tôi sẽ không có giải thích thêm cho rắc rối.

Tuy vậy, tôi khuyên bạn nên vào đọc GraphQLdocumentation nếu như có hứng thú.

Câu hỏi thường gặp

Mối quan hệ giữa GraphQL và graph database là như thế nào?

Thật ra là chẳng nhiều, như họ hàng rất xa ấy, GraphQL chả có dính dáng gì tới graph database như Neo4j. Phần “graph” đến từ ý tưởng theo dõi API graph bằng field và subfield trong khi “QL” ám chỉ cho “query language”

Rest vẫn còn tốt chán, sao lại phải chuyển qua GraphQL?

Nếu như bạn vẫn chưa bị phiền bởi sự hạn chế của Rest thì tốt thôi! Bởi việc dùng GraphQL thay vì REST chắc cũng sẽ không ảnh hưởng đến trải nghiệm người dùng từ app của bạn thế nên việc thay đổi cũng không phải mang tính sống còn hay gì. Tuy vậy, tôi vẫn khuyến khích bạn thử GraphQL trong một project nhỏ nếu có cơ hội.

Liệu tôi có thể dùng GraphQL mà không cần tới React/Relay/Các loại library?

Tất nhiên là được! Bởi GraphQL chỉ đơn giản là một kỹ thuật, bạn có dùng nó trên bất cứ library và platform nào bạn thích cùng với client hoặc tự tạo ra một GraphQL server.

GraphQL tạo ra bởi Facebook mà tôi thì chả tin vào Facebook

Lần nữa, GraphQL chỉ là một kĩ thuật, điều đó có nghĩa là bạn có thể dùng những ứng dụng của GraphQL mà không phải chạy bất kì một dòng code nào của Facebook.

Đồng thời với sự giúp đỡ của Facebook quả là một điểm cộng cho ecosystem của GraphQL, tại thời điểm này tôi tin rằng cộng đồng phát triển đã đủ lớn để GraphQL tiếp tục sống cho dù Facebook có ngưng xài nó.

Cả cái mô hình kinh doanh “để client yêu cầu data mà họ cần” nghe có vẻ không an toàn….

Tại bạn là người viết ra resolver, nó hoàn toàn phụ thuộc vào bạn để đưa ra những cách thức an ninh.

Nếu bạn cho phép client được phép truy cập một số các thông tin đặc biệt thì bạn sẽ muốn hạn chế số lượng nhằm tránh việc client yêu cầu quá nhiều.

Vậy tôi nên bắt đầu từ đâu đây?

Thông thường mà nói, bạn sẽ cần 2 thứ sau để có thể chạy một app tạo ra từ GraphQL:

  • một GraphQL server với mục đích phục vụ cho API của bạn
  • một GraphQL client để kết nối với endpoint của bạn

lập trình web

GraphQL Servers

Điều đầu tiên bạn cần là một GraphQL server. Bản thân GraphQL chỉ là một kĩ thuật thế nên vẫn còn nhiều khoảng trống cho việc cải thiện.

GraphQL-JS (Node)

Vốn là nguồn tham khảo để cải thiện cho GraphQL. Bạn có dùng nó kèm với express-graphql để tạo ra API server cho mình.

GraphQL-Server (Node)

Nhóm Apollo có riêng hẳn một GraphQL server implementation, tuy là không được biết đến nhiều như bản chính nhưng vẫn phát triển cực kì nhanh.

Các Platform khác

GraphQL.org có hẳn một list về các implementation của GraphQL trên các platform khác nhau

GraphQL Clients

Relay

Relay là bộ GraphQL toolkit của chính Facebook. Tôi vẫn chưa xài đến nó, nhưng theo những gì nghe được thì có vẻ Relay được tạo ra dựa trên những yêu cầu của Facebook thế nên nó có vẻ hơi đòi hỏi quá mức kĩ thuật so với đại đa số người dùng.

Apollo Client

Dù chỉ mới xuất hiện nhưng đã nhanh chóng soán ngôi bá chủ, Apollo client thường bao gồm 2 yếu tố sau:

  • Apollo Client, dùng để chạy GraphQL query trên các trình duyệt web cũng như lưu trữ data của họ.
  • Một kết nối cho front-end framework của bạn (React-Apollo, Angular-Apollo, etc.)

Cần nhớ rằng nếu để ở chế độ default, Apollo-client sẽ lưu dữ liệu của nó bằng Redux, một library khá tốt với hệ ecosystem đa dạng.

lập trình web

Open-Source Apps

Dù rằng GraphQL vẫn còn khá mới, đã có kha khá các open-source apps tận dụng nó:

VulcanJS

topdev

Đầu tiên tôi cần nói trước rằng tôi hiện tại đang là lead maintainer cho VulcanJS. Tôi tạo ra VulcanJS nhằm để mọi người tận dụng sức mạnh của React/GraphQL stack mà khỏi mất công viết code quá nhiều. Cứ nghĩ đơn giản nó giống như là “đường ray cho modern web ecosystem”, giúp bạn tạo ra những CRUD app (Kiểu như vầy) chỉ trong vài tiếng đồng hồ.

Gatsby

Là một trang generator cho React static, giờ đã được cung cấp bởi GraphQL kể từ phiên bản version 1.0. Dù nghe có vẻ là sự kết hợp lạ lùng nhưng nó thật sự cực kì mạnh mẽ. trong quá trình building, Gatsby có thể thu thập data đến từ nhiều nguồn của GraphQLAPI sau đó sử dụng chúng để tạo ra một static client-only React app hoàn chỉnh.

Một số GraphQL Tool khác

GraphiQL

GraphiQL cực kì hữu dụng cho trong trình duyệt IDE cho query GraphQL endpoints

topdev

DataLoader

Bởi vì các GraphQLquery kết nối với nhau như mạng lưới, một query cũng có khả năng kích hoạt hàng loạt các database call khiến cho performance bị giảm mạnh do lag spike.

Để tránh trường hợp đó, bạn có thể sử dụng những library DataLoader, vốn được phát triển bởi chính Facebook.

Create GraphQL Server

Create GraphQL Server là một command line utility nhằm giúp triển khai nhanh một GraphQLserver nhờ vào Node server và Mongo database.

GraphQL-up

Tương tự như Create GraphQLServer, GraphQL-up cho phép bạn tạo ra GraphQL back-end cực nhanh nhờ vào GraphCool.

GraphQL Services

Cuối cùng, hiện tại đã có một số công ty thuộc dạng chuyên cung cấp “GraphQL-backend” dịch vụ sẽ lo cho bạn phần server nhờ đó mà việc tham gia vào

GraphQLecosystem cũng trở nên đáng để thử hơn.

Graphcool

Một backend platform khá linh hoạt với sự kết hợp giữa GraphQL và AWS Lambda.

topdev

Scaphold

Thêm một dịch vụ GraphQLbackend với nhiều tính năng tương tự như Graphcool.

Resources

Đã có khá nhiều nguồn trên mạng cho bạn thỏa thích dùng

GraphQL.org

Trang web chính chủ của GraphQL với khá nhiều tài liệu hữu ích cho bạn để bắt đầu làm quen với GraphQL.

LearnGraphQL

LearnGraphQL là một khóa học tương tác được tạo bởi các thành viên tại Kadira.

LearnApollo

LearnApollo cũng tương tự như LearnGraphQL và là một khóa dạy học miễn phí được tạo ra bởi Graphcool.

The Apollo Blog

The Apollo blog có hàng ngàn tư liệu và bài viết kĩ lưỡng về Apollo cũng như GraphQL.

GraphQL Weekly

Một newsletter về GraphQL được sưu tập bởi Graphcool team.

topdev

Sau khi đã trang bị cho mình những kiến thức về GraphQL thì bạn sẽ dùng chúng như thế nào? Hãy thử một số combo sau:

Apollo + Graphcool + Next.js

Nếu bạn đã làm quen với Next.js và React, ví dụ sau sẽ cho phép bạn set up một GraphQLendpoint nhờ vào Graphcool rồi query nó nhờ vào Apollo.

VulcanJS

Vulcan tutorial sẽ hướng dẫn bạn cách tạo ra một GraphQLdata layer đơn giản, trên cả server và client. Do Vulcan là một all-in-one platform, cách tốt nhất là bắt đầu từ số 0. Nếu bạn cần sự giúp đỡ thì đừng ngại gì mà hãy vào đây.

GraphQL & React Tutorial

Chroma blog bao gồm 6 phần hướng dẫn cách tạo ra một React/GraphQL app dựa trên cách tiếp cận phát triển theo từng thành phần.

topdev

Nó có vẻ sẽ khá phức tạp khi bạn mới nhìn vào bởi nó là một kĩ thuật dựa trên nhiều lĩnh vực khác nhau của công nghệ hiện đại. Tuy nhiên, nếu bạn kiên tri học hỏi thì tôi tin rằng bạn sẽ hiểu được nó một cách tường tận.

Vì thế cho dù bạn có dùng nó hay không thì cũng đều đáng bỏ thời gian ra để làm quen với nó. Hiện nay, càng ngày càng có nhiều công ty và framework sử dụng nó, rất có thể chắc hẳn nó sẽ trở thành một phần không thể thiếu cho các web developer trong tương lai.

Bài viết gốc tại: medium

Có thể bạn muốn xem thêm:

Xem thêm Top Việc làm web Developer trên TopDev

[Hot] 515 khóa học Programming & Computer Science miễn phí nên bắt đầu ngay bây giờ! (phần 1)

515 khóa học Programming & Computer Science miễn phí

Nếu cách đây 5 năm, chỉ có 1 số trường ĐH lớn như MIT và Standard mở những khóa học online miễn phí cho cộng đồng thì hiện nay, đã có hơn 700 trường trên thế giới mở hàng ngàn khóa học free.

Dưới đây là 515 khóa học free mà mà bạn nên bắt đầu nghiên cứu ngay bây giờ! Danh sách tinh gọn từ 7000 khóa của Class Central, trên mỗi khóa tôi cũng đều đánh giá chất lượng.

515 khóa được lọc theo 3 cấp độ:

  • Beginner – Mới bắt đầu
  • Intermediate – Trung cấp
  • Advanced – Cao cấp

BEGINNER (81)

  1. An Introduction to Interactive Programming in Python (Part 1) – Rice University via Coursera
  2. Programming for Everybody (Getting Started with Python) – University of Michigan via Coursera
  3. Introduction to Computer Science – Harvard University via edX
  4. Intro to Computer Science – University of Virginia via Udacity
  5. Introduction to Programming with MATLAB – Vanderbilt University via Coursera
  6. An Introduction to Interactive Programming in Python (Part 2) – Rice University via Coursera
  7. Introduction to HTML5 – University of Michigan via Coursera
  8. Learn to Program: Crafting Quality Code – University of Toronto via Coursera
  9. Programming Foundations with JavaScript, HTML and CSS – Duke University via Coursera
  10. Introduction to CSS3 – University of Michigan via Coursera
  11. Usable Security – University of Maryland, College Park via Coursera
  12. Introduction to Web Development – University of California, Davis via Coursera
  13. Learn to Program: The Fundamentals – University of Toronto via Coursera
  14. Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course) – Hebrew University of Jerusalem via Coursera
  15. Internet History, Technology, and Security – University of Michigan via Coursera
  16. Creative Programming for Digital Media & Mobile Apps – University of London International Programmes via Coursera
  17. How To Create a Website in a Weekend! (Project-Centered Course) – State University of New York via Coursera
  18. HTML, CSS, and Javascript for Web Developers – Johns Hopkins University via Coursera
  19. Introduction to the Internet of Things and Embedded Systems – University of California, Irvine via Coursera
  20. Ruby on Rails: An Introduction – Johns Hopkins University via Coursera
  21. Introduction to Cyber Security – The Open University via FutureLearn
  22. Cyber Security: Protecting Yourself and Your Data – IEEE via edX
  23. HTML, CSS and JavaScript – The Hong Kong University of Science and Technology via Coursera
  24. Python Programming: A Concise Introduction – Wesleyan University via Coursera
  25. CODAPPS: Coding mobile apps for entrepreneurs – EMLYON Business School via Coursera
  26. How to Code: Simple Data – The University of British Columbia via edX
  27. Intro to Java Programming – San Jose State University via Udacity
  28. DB: Introduction to Databases – Stanford University via Stanford OpenEdx
  29. Programming Foundations with Python – via Udacity
  30. Intro to HTML and CSS – via Udacity
  31. JavaScript Basics – via Udacity
  32. How to Use Git and GitHub – via Udacity
  33. Intro to Relational Databases – via Udacity
  34. Networking: Introduction to Computer Networking – Stanford University via Stanford OpenEdx
  35. CS101: Computer Science 101 – Stanford University via Stanford OpenEdx
  36. MyCS: Computer Science for Beginners – Harvey Mudd College via edX
  37. Learn Swift Programming Syntax – via Udacity
  38. Linux Command Line Basics – via Udacity
  39. Introduction to VBA/Excel Programming – Cal Poly Pomona via Open Education by Blackboard
  40. Computing: Art, Magic, Science – ETH Zurich via edX
  41. Computing: Art, Magic, Science — Part II – ETH Zurich via edX
  42. Learn to Program Using Python – University of Texas Arlington via edX
  43. Introduction to jQuery – Microsoft via edX
  44. Introduction to Linux – Linux Foundation via edX
  45. Object-Oriented Programming – Indian Institute of Technology Bombay via edX
  46. Introduction to Cloud Computing – IEEE via edX
  47. Programming in Scratch – Harvey Mudd College via edX
  48. CS For All: Introduction to Computer Science and Python Programming – Harvey Mudd College via edX
  49. The Computing Technology Inside Your Smartphone – Cornell University via edX
  50. Web Accessibility – Google via Udacity
  51. Mobile Web Development – Google via Udacity
  52. Think. Create. Code – University of Adelaide via edX
  53. Programming Basics – Indian Institute of Technology Bombay via edX
  54. Java Programming Basics – via Udacity
  55. HTML5 Introduction – World Wide Web Consortium (W3C) via edX
  56. HTML5 Part 1: HTML5 Coding Essentials and Best Practices – World Wide Web Consortium (W3C) via edX
  57. AP® Computer Science Principles – Harvard University via edX
  58. Android Basics: Make Your First App – Google via Udacity
  59. Paradigms of Computer Programming — Fundamentals – Université catholique de Louvain via edX
  60. Introduction to Programming with Java 1: Starting to Code with Java – Universidad Carlos iii de Madrid via edX
  61. Web Applications for Everybody – via Independent
  62. Python for Everybody — Exploring Information – via Independent
  63. AP Computer Science A: Java Programming Data Structures and Loops – Purdue University via edX
  64. Java Programming for GCSE and A-Level – University of Wolverhampton via Canvas Network
  65. Introduction to Programming with Java 2: Writing Good Code – Universidad Carlos iii de Madrid via edX
  66. CSS Introduction – Microsoft via edX
  67. Paradigms of Computer Programming — Abstraction and Concurrency – Université catholique de Louvain via edX
  68. Swift for Beginners – via Udacity
  69. Android for Beginners – via Udacity
  70. Introduction to R – via Datacamp
  71. Intro to Python for Data Science – via Datacamp
  72. Java Fundamentals for Android Development – Galileo University via edX
  73. Intro to JavaScript – via Udacity
  74. Introduction to Computing using Python – Georgia Institute of Technology via edX
  75. Object-Oriented Programming – Indian Institute of Technology Bombay via edX
  76. Programming Basics – Indian Institute of Technology Bombay via edX
  77. Android App Development for Beginners – Galileo University via edX
  78. Introduction to Linux – Linux Foundation via edX
  79. Introduction to jQuery – Microsoft via edX
  80. Introduction to Bootstrap — A Tutorial – Microsoft via edX
  81. Introduction to HTML and Javascript – Microsoft via edX

INTERMEDIATE(333)

  1. Machine Learning – Stanford University via Coursera
  2. Programming Languages, Part A- University of Washington via Coursera
  3. Python Data Structures – University of Michigan via Coursera
  4. Using Python to Access Web Data – University of Michigan via Coursera
  5. Using Databases with Python – University of Michigan via Coursera
  6. Introduction to Big Data – University of California, San Diego via Coursera
  7. Principles of Computing (Part 1) – Rice University via Coursera
  8. Principles of Computing (Part 2) – Rice University via Coursera
  9. A Crash Course in Data Science  – Johns Hopkins University via Coursera
  10. R Programming – Johns Hopkins University via Coursera
  11. The Data Scientist’s Toolbox – Johns Hopkins University via Coursera
  12. Getting and Cleaning Data – Johns Hopkins University via Coursera
  13. Exploratory Data Analysis – Johns Hopkins University via Coursera
  14. Practical Machine Learning – Johns Hopkins University via Coursera
  15. Object Oriented Programming in Java – University of California, San Diego via Coursera
  16. Hadoop Platform and Application Framework – University of California, San Diego via Coursera
  17. Concurrent Programming in Erlang – University of Kent via FutureLearn
  18. Statistical Inference  – Johns Hopkins University via Coursera
  19. Regression Models – Johns Hopkins University via Coursera
  20. Reproducible Research – Johns Hopkins University via Coursera
  21. Algorithmic Toolbox – University of California, San Diego via Coursera
  22. Data Science in Real Life – Johns Hopkins University via Coursera
  23. Algorithmic Thinking (Part 1) – Rice University via Coursera
  24. Software Security – University of Maryland, College Park via Coursera
  25. Responsive Web Design – University of London International Programmes via Coursera
  26. Advanced Styling with Responsive Design – University of Michigan via Coursera
  27. Data Visualization and Communication with Tableau – Duke University via Coursera
  28. Java Programming: Solving Problems with Software – Duke University via Coursera
  29. AngularJS: Advanced Framework Techniques – Microsoft via edX
  30. Introduction to DevOps – Microsoft via edX
  31. C++ For C Programmers, Part B – University of California, Santa Cruz via Coursera
  32. Android App Components — Intents, Activities, and Broadcast Receivers – Vanderbilt University via Coursera
  33. Global Warming II: Create Your Own Models in Python – The University of Chicago via Coursera
  34. Testing with Agile – University of Virginia via Coursera
  35. Google Cloud Platform Fundamentals: Core Infrastructure – Google via Coursera
  36. Introduction to Meteor.js Development – University of London International Programmes via Coursera
  37. Programming Languages, Part B – University of Washington via Coursera
  38. A developer’s guide to the Internet of Things (IoT) – IBM via Coursera
  39. Building Data Visualization Tools – Johns Hopkins University via Coursera
  40. Running Product Design Sprints – University of Virginia via Coursera
  41. Internet of Things for Active Aging – Taipei Medical University via FutureLearn
  42. Responsive Website Tutorial and Examples – University of London International Programmes via Coursera
  43. Introduction to Neurohacking In R – Johns Hopkins University via Coursera
  44. Database Management Essentials – University of Colorado System via Coursera
  45. iOS App Development Basics – University of Toronto via Coursera
  46. Fundamentals of Visualization with Tableau – University of California, Davis via Coursera
  47. Cybersecurity and Mobility – University System of Georgia via Coursera
  48. Cloud Computing Applications, Part 1: Cloud Systems and Infrastructure – University of Illinois at Urbana-Champaign via Coursera
  49. Data Structures – University of California, San Diego via Coursera
  50. Server-side Development with NodeJS – The Hong Kong University of Science and Technology via Coursera
  51. Building R Packages – Johns Hopkins University via Coursera
  52. Front-End JavaScript Frameworks: AngularJS – The Hong Kong University of Science and Technology via Coursera
  53. The R Programming Environment – Johns Hopkins University via Coursera
  54. Big Data Integration and Processing – University of California, San Diego via Coursera
  55. Android App Components — Services, Local IPC, and Content Providers – Vanderbilt University via Coursera
  56. Data Science Math Skills – Duke University via Coursera
  57. Java Programming: Arrays, Lists, and Structured Data – Duke University via Coursera
  58. Algorithmic Thinking (Part 2) – Rice University via Coursera
  59. Introduction to Architecting Smart IoT Devices – EIT Digital via Coursera
  60. Internet of Things: Communication Technologies – University of California, San Diego via Coursera
  61. Fundamentals of Computer Architecture – EIT Digital via Coursera
  62. Interactivity with JavaScript – University of Michigan via Coursera
  63. Advanced R Programming – Johns Hopkins University via Coursera

Chi tiết xem Nguồn medium

Bí kíp tạo ra một tokenizer về toán học bằng Javascript

Hồi trước, tôi đã rất hứng thú với việc viết ra một app chuyên giải các vấn đề liên quan tới toán học. Tôi cũng học được rằng mình phải phân tích cú pháp, yêu cầu thành một Cây cú pháp trừu tượng (abstract syntax tree). Vì vậy mà một bản thử đã được tạo ra bằng Javascript. Trong quá trình làm việc, tôi nhận ra rằng tokenizer cần phải được làm ra trước tiên. Vì thế mà hôm nay tôi sẽ chỉ bạn cách làm nó (Thấy có vẻ khó vậy thôi nhưng nó dễ lắm!)

Tokenizer là cái gì vậy?

Tokenizer  là một chương trình chuyện phân chia một yêu cầu, hiển thị (expression) thành nhiều unit nhỏ gọi là Token. Nếu giờ tôi tự nói mình là “Thằng developer mập béo ụ” thì ta có thể sử dụng tokenizer theo nhiều cách sau:

Sử dụng từ ngữ giống như token:

 

0 => I’m
1 => a
2 => big
3 => fat
4 => developer

Sử dụng chữ cái làm token:

0 => I
1 => ‘
2 => m
3 => a
4 => b
…
16 => p
17 => e
18 => r

 

Hoặc là bao gồm luôn cả những kí hiệu khác như dấu phẩy, chấm và khoảng cách space:

0 => I
1 => ‘
2 => m
3 => (space)
4 => a
5 => (space)
6 => b
…
20 => p
21 => e
22 => r

 

Bạn hiểu rồi đúng không?

Tokenizers (còn gọi là lexer) được dùng cho việc phát triển của compiler cho ngôn ngữ lập trình. Nó giúp cho compiler tạo ra được những cấu trúc dựa theo những gì chúng ta muốn. Trong bài viết này thì đó là về cách biểu thị những thuật toán.

Tuyển dụng Javascript lương cao

Tokens

Một biểu thị thuật toán tốt bao gồm các token của thuật toán, mà trong project này thì sẽ là Literals, Variables, Operators hoặc Functions.

Một số điều cần lưu ý:

  • Literal là một cái tên khá hoa mỹ cho một con số (trong ví dụ này). ta sẽ chỉ cho phép số ở dạng toàn bộ hoặc thập phân.
  • Variable chính là các ẩn biến ta hay dùng trong toán: x,y,z,b,c. Cho project này, thì tất cả các variable sẽ chỉ hiện thị một chữ cái thôi. Đây cũng là cách để ta có thể token một biểu thị như ma là kết quả kết hợp từ hai variable m và a.
  • Operator hoạt động trên Literal và Variable cũng như là kết quả của function. Chúng ta sẽ cho phép những operator +, -, *, /, và ^.
  • Function giống như là phiên bản cao cấp của Operator. Nó bao gồm sin(), cos(), tan(), min(), max(), etc.

Ta cũng sẽ thêm vào 2 token vốn thường không được cho là token nhưng sẽ giúp ta dễ hơn trong việc quan sát: Left Right Parentheses.

Một số điều cần lưu ý

Phép nhân ngầm (Implicit Multiplication)

Implicit multiplication đơn giản là cho phép người viết rút ngắn cách ghi ra phép tính nhân, 5x thay vì 5*x. Đi xa hơn nữa, nó cũng cho phép với những function như (5sin(x) = 5*sin(x)).

 

Không chỉ thế, 5(x) và 5(sin(x)) cũng đều làm được. Tất cả đều tùy vào chúng ta có cho phép nó hay không thôi. Vậy thì có bất lợi gì không? Việc không dùng nó thật ra lại giúp quá trình tokenize diễn ra nhanh hơn cũng như cho phép variable có tên với nhiều kí tự hơn (những cái tên như price) Còn nếu bạn cho phép thì sẽ giúp platform dễ nhìn hơn cho người dùng, cho thêm thách thức để bạn chứng minh bản lĩnh. Tôi thì sẽ cho phép nó.

Syntax

Mặc dù chúng ta không phải là đang tạo ra một ngôn ngữ lập trình mới, nhưng cũng phải có một vài rules qui định cho các biểu thị đúng, để người dùng biết phải điền vào như thế nào mà ta cũng biết cái gì cần để lên kế hoạch. Nói chính xác hơn, các token toán học phải được kết hợp dựa theo những qui tắc của thuật toán để đưa ra những biểu thị đúng. Sau đây là những qui tắc của tôi:

Token có thể được chia cắt bởi o hoặc dùng khoảng trống space nhiều lần.

2+3, 2 +3, 2 + 3, 2 + 3 are all OK 
5 x - 22, 5x-22, 5x- 22 are all OK

 

Nói cách khác, khoảng cách không quan trọng.

Các hàm function sẽ phải được đặt trong ngoặc đơn (sin(y), cos(45), chứ không phải sin y, cos 45) (Tại sao? chúng ta sẽ lược bỏ tất cả các dấu space ra khỏi string vì thế mà bạn sẽ muốn thấy được khi nào hàm bắt đầu và kết thúc)

Phép nhân ngầm chỉ được dùng giữa Literals Variables hoặc Literals Functions, theo đúng thứ tự đó (Literal luôn được ưu tiên trước) và được quyền có hoặc không ngoặc đơn. Điều đó cũng có nghĩa:

  • a(4) sẽ được xem là một hàm – function hơn là a*4
  • a4 không được cho phép
  • 4a và 4(a) thì lại được

Giờ thì thử thực hành cái nào!

Đầu tiên ta sẽ bắt đầu với cơ bản trước với ví dụ này: 2y + 1

Để biểu thị dãi trên trong một array với các token sẽ như thế này:

0 => Literal (2)
1 => Variable (y)
2 => Operator (+)
3 => Literal (1)

 

Trước tiên, ta sẽ xác định một token class để cho nó dễ:

 

function Token(type, value) {
   this.type = type;
   this.value = value
}

Algorithm – Thuật toán

Giờ thì tới phần khung xương cho chức năng của tokenizer.

Tokenizer của chúng ta sẽ đi qua từng kí tự của str array và tạo ra token dựa trên những gì nó thu thập được.

[Ta sẽ tự cho là người dùng đã đưa những bài toán và biểu thị đúng nên việc sử dụng hình thức xác nhận sẽ không cần đưa vào trong xuyên suốt project này]

function tokenize(str) {
  var result=[]; //array of tokens
  
  // remove spaces; remember they don't matter?
  str.replace(/\s+/g, "");
  // convert to array of characters
  str=str.split("");
  str.forEach(function (char, idx) {
    if(isDigit(char)) {
      result.push(new Token("Literal", char));
    } else if (isLetter(char)) {
      result.push(new Token("Variable", char));
    } else if (isOperator(char)) {
      result.push(new Token("Operator", char));
    } else if (isLeftParenthesis(char)) {
      result.push(new Token("Left Parenthesis", char));
    } else if (isRightParenthesis(char)) {
      result.push(new Token("Right Parenthesis", char));
    }
  });
  return result;
}

 

Đoạn code trên rất là cơ bản. Những helper như isDigit() , isLetter(), isOperator(), isLeftParenthesis(), and isRightParenthesis() sẽ được

function isDigit(ch) {
 return /\d/.test(ch);
}
function isLetter(ch) {
 return /[a-z]/i.test(ch);
}
function isOperator(ch) {
 return /\+|-|\*|\/|\^/.test(ch);
}
function isLeftParenthesis(ch) {
 return /\(/.test(ch);
}
function isRightParenthesis(ch) {
 return /\)/.test(ch);
}

 

[Bạn có thể thấy không hề có isFunction(), isLiteral() hoặc isVariable() functions bởi chúng ta sẽ kiểm tra các character từng đứa một]

Và giờ đây parser của chúng ta đã thật sự hoạt động. Hãy thử tất cả những phép tính sau: 2 + 3, 4a + 1, 5x+ (2y), 11 + sin(20.4).

Tất cả đều chạy tốt?

Không hẳng.

Bạn sẽ thấy với phép tính cuối, 11 sẽ được báo là 2 Literal tokens chứ không phải 1. Ngoài ra sin cũng được báo là có 3 token chứ không phải 1. Tại sao?

đó vì khi tokenize, một số token có nhiều kí tự. Literals có thể là 5, 7.9, .5 trong khi Functions thì là sin, cos etc. Variables thì mặc dù chỉ được hiện dùng 1 kí tự nhưng lại là chuyện hoàn toàn khác trong implicit multiplication. Vậy làm cách nào để sửa nó?

Buffers

Bằng cách dùng một buffer ta có thể giải quyết những vấn đề này. Và trong ví dụ thì trên ta sẽ cần đến 2. một buffer sẽ dùng cho các kí tự của Literal (số và dấu thập phân), và một cái khác cho chữ cái (bao gồm cho cả variables và functions).

Buffer hoạt động như thế nào? Khi tokenizer gặp một số/dấu thập phân hoặc chữ cái, nó sẽ đặt chúng vào buffer thích hợp và quá trình đó lặp đi lặp lại cho đến khi nó tiến vào một operator hoàn toàn khác. Đồng thời hành động của tokenizer cũng thay đổi tùy vào từng operator.

Đối với một phép toán sau 456.7xy + 6sin(7.04x), thì ta sẽ có được như dưới đây:

read 4 => numberBuffer
 read 5 => numberBuffer
 read 6 => numberBuffer
 read . => numberBuffer
 read 7 => numberBuffer
 x is a letter, so put all the contents of numberbuffer together as a Literal 456.7 => result
 read x => letterBuffer
 read y => letterBuffer
 + is an Operator, so remove all the contents of letterbuffer separately as Variables x => result, y => result
 + => result
 read 6 => numberBuffer
 s is a letter, so put all the contents of numberbuffer together as a Literal 6 => result
 read s => letterBuffer
 read i => letterBuffer
 read n => letterBuffer
 ( is a Left Parenthesis, so put all the contents of letterbuffer together as a function sin => result
 read 7 => numberBuffer
 read . => numberBuffer
 read 0 => numberBuffer
 read 4 => numberBuffer
 x is a letter, so put all the contents of numberbuffer together as a Literal 7.04 => result
 read x => letterBuffer
 ) is a Right Parenthesis, so remove all the contents of letterbuffer separately as Variables x => result

 

Hoàn tất. Giờ thì bạn đã hiểu được rồi đúng không?

Đây là lúc mà bạn sẽ phải suy nghĩ kĩ về thuật toán và mô hình hóa dữ liệu

của mình. Sẽ có chuyện gì xảy ra nếu kí tự hiện tại lại là một operator, và Buffer cho số lại không empty? Liệu cả 2 buffer đều có thể cùng lúc /lần lượt không empty không?

Từ đó chúng ta sẽ rút ra được kết quả sau (giá trị ở bên trái của mũi tên miêu tả kí tự/nhân vật hiện tại của chúng ta (ch), NB=numberbuffer, LB=letterbuffer, LP=left parenthesis, RP=right parenthesis)

loop through the array:
  what type is ch?
  digit => push ch to NB
  decimal point => push ch to NB
  letter => join NB contents as one Literal and push to result, then push ch to LB
  operator => join NB contents as one Literal and push to result OR push LB contents separately as Variables, then push ch to result
  LP => join LB contents as one Function and push to result OR (join NB contents as one Literal and push to result, push Operator * to result), then push ch to result
  RP => join NB contents as one Literal and push to result OR push LB contents separately as Variables, then push ch to result
end loop
join NB contents as one Literal and push to result OR push LB contents separately as Variables,

2 điều cần lưu ý

  • Bạn có thấy tôi đã thêm vào “push Operator * to result” không? Đó là cách chúng ta chuyển đổi phép nhân ẩn thành phép nhân rõ ràng. Và khi làm trống nội dung của các LB riêng biệt như Variable, ta cần phải chèn multiplication Operator vào giữa chúng.
  • Tại cuối function loop, ta cũng phải làm trống tất cả những gì còn sót lại trong buffer.

Giờ thì chuyển nó thành code thôi!

Tổng hợp lại tất cả, tokenize function của bạn sẽ nhìn như thế này:

function Token(type, value) {
   this.type = type;
   this.value = value;
}

function isDigit(ch) {
 return /\d/.test(ch);
}

function isLetter(ch) {
 return /[a-z]/i.test(ch);
}

function isOperator(ch) {
 return /\+|-|\*|\/|\^/.test(ch);
}

function isLeftParenthesis(ch) {
 return /\(/.test(ch);
}

function isRightParenthesis(ch) {
 return /\)/.test(ch);
}

function tokenize(str) {
  str.replace(/\s+/g, "");
  str=str.split("");
  
  var result=[];
  var letterBuffer=[];
  var numberBuffer=[];
  
str.forEach(function (char, idx) {
    if(isDigit(char)) {
      numberBuffer.push(char);
    } else if(char==".") {
      numberBuffer.push(char);
    } else if (isLetter(char)) {
      if(numberBuffer.length) {
        emptyNumberBufferAsLiteral();
        result.push(new Token("Operator", "*"));
      }
      letterBuffer.push(char);
    } else if (isOperator(char)) {
      if(numberBuffer.length) {
        emptyNumberBufferAsLiteral();
      }
      if(letterBuffer.length) {
        emptyLetterBufferAsVariables();
      }
      result.push(new Token("Operator", char));
    } else if (isLeftParenthesis(char)) {
      if(letterBuffer.length) {
        result.push(new Token("Function", letterBuffer.join("")));
        letterBuffer=[];
      } else if(numberBuffer.length) {
        emptyNumberBufferAsLiteral();
        result.push(new Token("Operator", "*"));
      }
      result.push(new Token("Left Parenthesis", char));
    } else if (isRightParenthesis(char)) {
      if(letterBuffer.length) {
        emptyLetterBufferAsVariables();
      } else if (numberBuffer.length) {
        emptyNumberBufferAsLiteral();
      }
      result.push(new Token("Right Parenthesis", char));
    }
  });
  if (numberBuffer.length) {
    emptyNumberBufferAsLiteral();
  }
  if(letterBuffer.length) {
    emptyLetterBufferAsVariables();
 }
 return result;
 
 function emptyLetterBufferAsVariables() {
        var l = letterBuffer.length;
        for (var i = 0; i < l; i++) {
          result.push(new Token("Variable", letterBuffer[i]));
          if(i< l-1) { //there are more Variables left
            result.push(new Token("Operator", "*"));
          }
        }
        letterBuffer = [];
 }
 
 function emptyNumberBufferAsLiteral() {
   result.push(new Token("Literal", numberBuffer.join("")));
   numberBuffer=[];
 }
 
}

var tokens = tokenize("89sin(45) + 2.2x/7");
tokens.forEach(function(token, index) {
  console.log(index + " => " + token.type + "(" + token.value + ")");
});

Thấy chưa? Nó hoạt động rồi đấy!

Tổng kết

Đến giờ phút này thì là lúc bạn sẽ phân tích function của mình và xem nó làm những gì so với những gì bạn muốn. Hãy luôn tự hỏi bản thân, “Liệu nó có hoạt động đúng như mục tiêu đặt ra không?” và “Liệu mình đã dự đoán hết trường hợp có thể xảy ra chưa?”

Tiếp theo bạn sẽ phải chạy nhiều bài test khác nhau cho function. Nếu bạn thấy hài lòng với kết quả thì mới bắt đầu suy nghĩ về hướng cải thiện nó thêm.

Nguồn: topdev.vn via Medium

Tuyển dụng IT đãi ngộ tốt trên TopDev

Hiểu Mobile Dev sợ gì để giành vé VIP dự sự kiện công nghệ!

Trào lưu “Chị làm/chị ở… nhưng không dám nói, chị sợ…” vẫn chưa giảm nhiệt suốt thời gian qua trong cộng đồng mạng!

Vậy tại sao không tận dụng cơ hội này đưa trí tưởng tượng bay cao bay xa hơn, để giành lấy những chiếc vé tham dự Ngày Hội Di Động Toàn Quốc – Vietnam Mobile Day sắp tới?

Luật chơi

  • Comment vế sau của bức ảnh => càng bựa, càng chất, càng ra dáng dev càng tốt vì sẽ ảnh hưởng đến khả năng “giật” giải của bạn!
  • Like bài post này & share public https://www.facebook.com/topdevvietnam/posts/1271236786258782/
  • Danh sách trúng giải sẽ được ước tính theo SỐ LƯỢT LIKE COMMENT tính từ trên xuống

Thời gian chơi

20h tối ngày 25/04/2017 đến 11h sáng ngày 03/05/2017

Giải thưởng

  • 1 giải đặc biệt – 1 VÉ VIP tham dự Vietnam Mobile Day 2017 trị giá 1.000.000 VNĐ
  • 2 giải nhất – Mỗi giải 1 VÉ STANDARD tham dự Vietnam Mobile Day 2017 trị giá 250.000 VNĐ/ vé
  • 10 giải nhì – Mỗi giải 1 MÃ CODE GIẢM GIÁ 50%/ vé Standard tham dự Vietnam Mobile Day 2017
  • 40 giải ba – Mỗi giải 1 MÃ CODE GIẢM GIÁ 50.000 VNĐ/ vé Standard tham dự Vietnam Mobile Day 2017

SÁNG TÁC ẢNH – RINH QUÀ KHỦNG ngay thôi!

  • Thời gian & địa điểm:
    – 20/05/2017 tại Trung tâm Hội nghị 272 Võ Thị Sáu, Q.3, Tp.HCM
    – 27/05/2017 tại Trung tâm Hội nghị Forevermark, 614 Lạc Long Quân, Q. Tây Hồ, Hà Nội
    – 03/06/2017 tại OneOpera Hotel, 115 Nguyễn Văn Linh, Q.Hải Châu, Tp. Đà Nẵng
  • Website: http://mobileday.vn
  • Thông tin hợp tác:
    Ms. Ngọc Đỗ
    Điện thoại: 08 6273 3497 | 0944 685 243
    Email: ngoc.do@applancer.net

5 bài học từ việc phát triển app cho web

Lần đầu tiên tôi viết ra được một app dành cho web là khi làm cho project cuối khóa khi còn học đại học. Thay vì phát triển ra một ứng dụng chỉ để hoàn thành project, tôi quyết định tạo ra một app mang tính thực tiễn, có thể áp dụng vào đời sống luôn. Thế là  Cyber Manager, một hệ thống quản lí online cho các quán cyber cafe, được ra đời. Chỉ trong năm 2011, có tới hơn 3,000 lượt download kể từ khi tôi up nó lên SourceForge.net. Trong bài viết này, tôi sẽ kể cho bạn 5 bài học tôi rút ra được trong quá trình tạo ra Cyber Manager, hi vọng sẽ giúp bạn trên con đường lập trình app cho web.

Bài học 1: Đừng kiếm ý tưởng cho project. Hãy kiếm vấn đề để giải quyết

Nếu bạn muốn thử sức với việc viết ra một web app, thay vì cứ tìm kiếm ý tưởng “độc” để phát triển, hãy nghĩ về vấn đề cần được giải quyết. Một vấn đề từ thế giới thật sẽ đặt ra thử thách cho bạn cũng như mở ra cơ hội để mở rộng những kĩ năng của mình và trở nên thật chuyên nghiệp. Nó cũng sẽ giúp ích bạn trong quá trình kiếm việc bởi những kinh nghiệm từ việc coding giải quyết những vấn đề trong thế giới thực. Hơn nữa, bạn cũng sẽ hiểu rõ hơn về code.  

Bài học 2: Giải pháp luôn đến từ xung quanh bạn.

Khi tôi vẫn còn ở đại học, tôi thường ghé quán cyber cafe của một người bạn để học về lập trình web qua các khóa online. Có lúc, tôi dành tới hàng tiếng mỗi ngày, vài ngày mỗi tuần chỉ ở quán cafe. Tất nhiên, là tôi cũng phụ bạn quản lí quán khi anh ta nghỉ ngơi. Nhờ đó mà ý tưởng về cyber manager xuất hiện.

Bài học 3: Lựa chọn phương pháp phát triển dựa vào open source tool.

Sau khi đã quyết định bạn sẽ làm cái gì, việc tiếp theo là bạn phải tập trung vào cách phát triển project đó.  ASP.NET là một lựa chọn được khá nhiều sinh viên yêu thích, cũng như Java. Riêng tôi thì quyết định dùng PHP, Apache và MySQL, một open source language stack khá nổi tiếng và an toàn. Việc dùng cả 3 tool trên cũng cho tôi thêm kinh nghiệm làm việc với các cộng đồng online.

Bài học 4: người cố vấn, chỉ dạy còn quan trọng hơn cả technology stack.

Khi bạn bắt đầu project của mình, hãy ưu tiên việc kiếm một người thầy, cố vấn giỏi hơn cả technology stack. Công nghệ chỉ là một công cụ để hoàn thành project nhưng thầy cố vấn thì lại giúp hoàn thiện con người bạn – thầy giỏi sẽ khiến bạn làm ra được những ứng dụng tốt, giúp bạn phát triển trở thành một pro IT. Mặc dù nhiều trường đại học hiện nay có dịch vụ cố vấn cho học sinh nhưng bạn cũng nên dựa vào nguồn bên ngoài mà kiếm thêm người chỉ dạy.

Tôi rất may mắn khi được một người bạn làm thầy chỉ dạy khi làm project cho năm cuối. Anh ta là một pro PHP developer và là một entrepreneur. Tôi luôn dành thời gian bàn luận cùng với anh ấy và nhận được rất nhiều lời khuyên quí giá cho việc phát triển project. Anh cũng theo sát quá trình phát triển và luôn chạy test app để tìm ra bug cũng như vấn đề hiệu năng. Nhờ đó mà ứng dụng của tôi được cải thiện lên rất nhiều.

Bài học 5: Hãy để người dùng thật sự test và sử dụng app của bạn.

App chỉ thật sự hoàn thiện khi nó đã được test và dùng bởi nhóm người dùng mà bạn muốn nhắm vào. Để kết quả của một project chính xác, đáng tin cậy thì bạn cần phải thu thập feedback khi cho một nhóm người dùng, thuộc thị trường bạn đang nhắm vào, test sản phẩm của mình. Đây là điều vô cùng quan trọng bởi nó cải thiện chất lượng của app cũng như đóng vai trò then chốt cho sự phát triển của một project cũng như sản phẩm mà người dùng yêu thích nó.

Hãy xem sản phẩm app của tôi – Cyber manager:

Cyber Manager là một hệ thống quản lí web-based dành cho cyber cafe được tạo ra nhờ vào PHP/MySQL.

Cyber Manager

Như bạn thấy trong hình, nó bao gồm 9 section khác nhau:

Quản lí khách hàng: theo dõi quá trình sử dụng của khách hàng thông qua một online database.  Admins có thể add, edit, search, và xóa thông tin lưu trữ về khách hàng.

screenshot of Manage Customer view

Khách hàng Login: Cho phép khách hàng sử dụng một máy tính của quán. Ngay khi người quản lí cho phép khách hàng log/đăng nhập vào một máy tính thì đồng hồ tính giờ cũng sẽ chạy cho đến khi logout bởi người quản lí. Dựa vào tổng thời gian xài máy tính mà người quản lí sẽ tính bill cho khách hàng.

customer login module view

Quản lí bill/invoice: Tự động tính và tạo ra bill cho khách hàng. Số tiền sẽ được dựa theo số thời gian sử dụng máy tính cũng như khách hàng dùng thêm các dịch vụ khác. Ngoài ra nó còn lưu trữ các bill nhằm phục vụ cho việc kiểm tra để quản lí.

manage bills

Quản lí dịch vụ: Thêm, sửa hoặc xóa các dịch vụ có trong quán. Người quản lí có thể in ra một bản list những dịch vụ và giá thành của chúng.

manage services

Print Rate Card: In thẻ giá service có ghi rõ các loại service cũng như giá của nó.

Xem thẻ khách hàng: tạo và xem membership của khách hàng bao gồm tên, ngày sinh, ID và ngày hết hạn.

customer membership card

Thông báo membership hết hạn: List các khách hàng có ID card hết hạn và không được phép sử dụng dịch vụ của quán. Người quản lí cũng được quyền gửi email để thông báo cho người dùng về vấn đề trên để mở lại tài khoản hoặc thêm thời gian.

expired memberships

Nguồn: blog.topdev.vn via Opensource