Web design principals – notes


  1. Visual Hierarchy: what are important things, what are less important
  2. Divine Proportions: golden ratio
  3. Hick’s Law: priority, filtering things
  4. Fitt’s Law: rule of target size
  5. Rule of Thirds: in image
  6. Gestalt Design Laws: the whole exists independently from the parts.
  7. Law of Proximity: things that do NOT go together, are not perceived as one
  8. Law of Similarity: We group similar things together
  9. Law of Closure: We seek completeness
  10. Law of Symmetry
  11. Law of Common Fate
  12. Law of Continuity
  13. White space and clean design
  14. Occam’s Razor: simplest solution is usually best

Web programming – Notes from the book Building Scalable Websites

Design Rules

OGF <—- sanity —> OPP

OPP has maintainability at the expense of flexibility. OGF is reverse.

Tips: use Smarty – an abstract templating engine helps to separate presentation logic and business logic

Three steps to separate presentation layer out:

  1. Sparate logic code form markup code
  2. Split markup code into one file per page
  3. Switch to a templating system

Then we need to separate page logic from business logic (Smarty)

Dev environments

3 rules:

  1. Versioning
  2. One-step build: develop, comit and stage, deploy
  3. Bugs tracking: bugs, features, operations. Priority: S1, S2, S3. Some issue-tracking softwares: Mantis bug tracker, request tracker, Bugzilla

Should not automate db schema, software/hardware changes, use script instead

Testing: automated testing (e.g., regression test) vs manual testing (identify main functions, test ideal path first, boundary testing)

Internationalization & Localization

Unicode encoding: fixed-width encoding – 4 bytes (UTF-32, UCS2) vs variable-length encoding (UTF-7,UTF-8, UTF-16).

UTF-8 use bwn 1-4 bytes. UTF-7 is 7  bit safe encoding

All unicode encoding are loss-less –> can convert bwn each others

UTF-8 Web app

html: charset=utf-8 represents both character set and encoding.

Add the AddCharset directive to either httpd.conf or .htaccess: AddCharset UTF-8 .php

Output html header (recommended): header(“Content-Type: text/html, charset=utf-8″);

Added to meta tag: <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>

For XML document: <?xml version=”1.0″ encoding=”utf-8″?>

Notes: careful with UTF-8 in PHP

  • Binary safe string = can store any byte values in a “string” and will always get exactly the same bytes back
  • Some (non-safe) operations do not work with UTF-8: substr(), wordwrap() chunk_split()
  • Other safe operations (multibyte string): mb_substr() overloads substr()

UTF-8 with JavaScript

Need an escape() function for UTF-8 data (e.g., URL)

Spatial Crowdsourcing and Applications

Spatial crowdsourcing is a new mobile platform which extends crowdsourcing beyond the digital domain and link it to tasks in the physical world. One of my favorite examples to explain spatial crowdsourcing is a real story in Beijing, China. A young Chinese girl, named Ling Yifan, initiated a love campaign to make granpa’s last days delightful moments (he was diagnosed with limph cancer). She created a campaign on the Internet, “Taking Grandpa Around the World”. Consequently, she received 20,000+ replies with photos of her grandfather’s portrait at many beautiful places around the world, such as Switzerland, Italy, Germany, San Francisco. As a result, her grandfather lived his last days with joys and fun, watching beautiful pictures. Let come back to this example later.

So what is spatial crowdsourcing? let break the term into three parts 1) outsourcing 2) crowd and 3) spatial.

First of all, outsourcing is the contract out of an internal business process to a third-party organization (wiki). For example, Apple ships the task of making iphone cases to China due to cheaper labors or Japanese software companies outsource parts of their softwares development to Vietnam for the same reason. More examples can be found in the book “The World is Flat”.

Second, why crowd? There is a whole research area in crowd-related topics, such as group think, crowdfunding, crowdsourcing. Most of those research were based on the claim that a group of people is more intelligent than individuals because of the diversity of ideas. This probably a reason why we have group meetings, group discussions, etc, to collect intelligence from people or generally the crowd. A book named “The Wisdom of Crowds” discusses this. From my understanding, the concept of crowdsourcing is essentially taking the idea of crowd to the outsourcing business. In 2006, Jeff Howe first tossed the term crowdsourcing in Wired Magazine. He defined crowdsourcing as a process of outsourcing is the act of a company taking a function performed by employees and outsourcing it to an undefined (and generally large) network of people in the form of an open call. There are various examples of crowdsourcing examples. Mturk.com and Odesk.com are of the biggest crowdsourcing Internet marketplaces. The idea of these crowdsourcing platforms is to utilize human computation to perform tasks that computers are currently have not been able to solve effectively yet, such as labeling pictures. Other examples could be threadless.com, which is a company outsourcing the tasks of designing t-shirt to the crowd (they made money out of it) or innocentive.com, whose idea is to outsource the task of solving scientific problems to the crowd.

Finally, how does the spatial aspect play a role in crowdsourcing? To make it simple, spatial means a location with latitude and longitude. With spatial crowdsourcing, the users need to physically present at the task location in order to perform the task. That is, the users not only interact with each others on the Internet but also on the physical world. A main reason makes crowdsourcing a successful business model is the popularity and convenience of Internet; gathering workforce from the crowd becomes easy than ever. However, with spatial crowdsourcing, physically travel to a location is an impediment to the practicality and applications of spatial crowdsourcing. People are not likely to drive 30 miles to do some simple tasks. It just does not work. To make spatial crowdsourcing applications work, the tasks shouldn’t take much time from the users. One way to make this happen is to allow users to solve tasks while traveling. So the potential users of spatial crowdsourcing are the ones who travel a lot. An example spatial crowdsourcing is Waze.com, which is a free GPS navigation app on iphone/android with spatial-crowdsourced features. The users (drivers) can report traffic jam, accident or police so that the other users who are driving ahead this road be aware of those incidents in advance. Another feature is to report the prices of gas stations (in U.S you can save a few bucks by going to a cheap gas station). Note that the users can do these tasks without much effort. Other successful examples include but not limited to Uber – taxi ride-sharing app, TaskRabbit, GigWalk – crowdsourcing household tasks or recently Google shopping express.

The question is why suddenly spatial crowdsourcing become popular?

The reason is that smartphones are now so popular and there are many sensors within them. Also, the network quality is getting higher, like 4G LTE. Those three enable us to develop SC applications listed in the Figure below.


Examples of Spatial Crowdsourcing Applications

Recently, we developed an app named iRain [1] that utilizes spatial crowdsourcing technology to enable human workers to report precipitation condition, particularly rain level/no-rain observation to improve real-time global satellite precipitation estimation. Basically, researchers can specify a set of locations they want rain information, our system crowdsource the tasks (i.e., a set of locations) to nearby users using push notifications. When notified users get the tasks, they just need to report, let say “heavy rain”. All the reports from users are then usable for the researchers.

[1] Hien To, Liyue Fan, Luan Tran, and Cyrus Shahabi, Real-Time Task Assignment in Hyperlocal Spatial Crowdsourcing under Budget Constraints, In Proceeding of IEEE International Conference on Pervasive Computing and Communications (PerCom 2016), Sydney, Australia, March 14-18, 2016


Minh dang doc cuốn sách “The Lean Startup” của Eric Ries. Tác giả cho rằng Startup = Experiment, là một quá trình lặp lại các bước Build-Measure-Learn. Trong đó build nghĩa là biến ý tưởng thành sản phẩm, measure nghĩa là xem người dùng phải hồi lại sản phẩm như thế nào và Learn nghĩa là cần phải thay đổi sản phẩm như thế nào.

Môi trường startup ở Mỹ

Trước mình chỉ quan tâm đến ranking về research của trường thì thấy UCB, MIT, Stanford ngang nhau, nhưng nói về startup thì stanford là nhất, điển hình kà Google rồi gần đây là Instagram. Có hai loại startups, Technology và Traction. Google từng là một technology startup bởi họ sở hữu công nghệ là giải thuật PageRank. Nhờ có kết quả tìm kiếm tốt hơn mà Google dần chiếm thị phần của các search engine đã đình đám trước đó là AltaVista và Excite. Ngược lại, Facebook đã từng là một traction startup, Hồi mới thành lập FB chỉ là một trang web đơn giản và không hề sở hữu một công nghệ đặc biệt nào. Điều đặc biệt ở FB là đã tạo được một sức hút lớn đối với người dùng nhờ các chức năng social như profile, wall status, comments. Nếu bạn có một startup idea thuộc một trong hai loại này thì thật tuyệt vời. Nhưng thực tế số lượng startup dạng này thì rất ít so với một loại khác là các Technology startup nhỏ mà được acquired bởi một công ty khác lớn hơn. Một số acquired startups thuộc dạng này như Instagram (CEO Kevin Systrom) (acquired by FB – $1G), AsterData (acquired by Teradata (CEO Michael F. Koehler) – $263M – mình đi intern hè 2012), Geosemble (Acquired by TerraGo – $unknown – startup của giáo sư mình Prof. Cyrus Shahabi). Một số người cho rằng startup bị acquired là fail startup, nhưng số đông còn lại thì cho là thành công bởi nhiều lý do như được rất nhiều tiền, có thể có một chỗ đứng tốt ở một công ty lớn, có điều kiện tiếp xúc với một lượng lớn khách hàng tiềm năng của công ty lớn… Việc acquisitions các IT startups là một xu hướng tất yếu bởi sự phát triển chóng mặt của các startups – nhiều như “lá mùa thu rụng”. Mình sẽ phân tích sâu hơn về cái tất yếu này ở phần sau.


Thường thì những startup loại 3 này tập trung vào một lĩnh vực hẹp nào đó, tạo ra một sản phẩm công nghệ (Technology) mới, bởi vậy có thể xem nó là một tập con của Technology startup. Để khiến các công ty khác phải chú ý, thì các startup này thường có những ý tưởng mới, duy nhất, táo bạo mà nhiều người hay nói là disruptive idea. Ví dụ AsterData từng là một công ty startup công nghệ về database – mining unstructured data with map-reduce. Điểm khác biệt là AsterData xây dựng một Analytics Layer on top of the map-reduce architecture và cho phép “hybrid query” vừa SQL vừa map-reduced related queries. Bởi vậy Teradata – một global corp về data warehousing và data analytics đã mua lại AsterData vì muốn sở hữu công nghệ này. Một mặt khác của việc sát nhập này là Teradata muốn quảng cáo cho khác hàng là chúng tôi có nền tảng analytics cho cả dữ liệu có kiến trúc truyền thống (structured data) sử dụng Teradata Relational Database và cả nền tảng analytics cho dữ liệu không cấu trúc (unstructured data) sử dụng Map-reduce framework with the analytics layers on top of it. Ví dụ thứ nhất này là win-win, “người có tiếng và người có miếng”. Teradata thì có tiếng, còn AsterData thì có điều kiện tiếp cận một lượng khách hàng dồi dào sẵn có của Teradata. Chú ý rằng có nhiều sát nhập được cho là không thành công cho cả “người bán” và “người mua” nhưng không đuợc đề cập ở đây. Ví dụ thứ hai về Geosemble acquisition. TerraGo đã mua lại Geosemble một phần vì về công nghệ tìm kiếm thông tin về dữ liệu địa lý – spatial content discovery, phần khác vì không muốn có một startup cạnh tranh khách hàng với mình.


Mình cũng đã từng đặt câu hỏi “Tại sao các công ty lớn thay vì mua lại các startup với cái giá “không rẻ”, họ không tự đầu tư cho research để làm startup?” Startup và các acquisitions là tất yếu mà mình đã bỏ ngỏ ở trên là gợi ý cho câu hỏi này. Sự thật là nếu có một startup idea, các công ty lớn sẽ không làm tốt bằng một nhóm nhỏ startup! Lý do thứ nhất là các công ty lớn và lâu đời như Microsoft, IBM, Oracle, Teradata thường ngại mạo hiểm khi đầu tư vào một sản phẩm mới mà họ không dám chắc là sẽ đem lại thành công trong khi startup chứa đầy rủi ro; ngược lại một nhóm nhỏ startup lại chẳng có gì để mất mà không mạo hiểm. Các công ty lâu đời thường sợ thất bại nên họ thường không muốn mạo hiểm mà chỉ tập chung vào xây dựng và cải thiện những cái đã có sẵn hay những giá trị cốt lõi của công ty. Thứ hai khi bắt tay vào một sản phẩm hoàn toàn mới thì một nhóm startup với những người có kinh nghiệm, có “thừa” động lực sáng tạo và quyết tâm sẽ thường làm tốt hơn một nhóm cũng những con người cũng với trình độ ấy nhưng quen với việc làm một nhóm các sản phẩm lâu năm và ít đổi mới. Lý do cuối cùng là kinh tế. Lấy một ví dụ có 100 startups về mining unstructured data using Hadoop-mapreduce, chỉ có 10 startups tồn tại sau 2 năm và đạt được ít nhiều thành tựu, một ông lớn như Teradata muốn sở hữu công nghệ đó chỉ việc mua lại startup nào tốt nhất. Kết quả là họ có công nghệ tốt nhất mà không phải quan tâm 100 startups ban đầu đã cạnh tranh nhau như thế nào để cuối cùng có 10 startup cùng chia nhau “miếng bánh” như thế nào. Vậy tóm lại so sánh đầu tư tiền của cho một nhóm người đang làm công việc của mình chuyển sang làm một công việc khác mà không chắc thành công với việc mua lại công nghệ tốt nhất thì cái nào hợp lý hơn? Google keyword “entrepreneur’s dilemma” để hiểu rõ hơn về startup và acquisition.

Các bước để startup

Cuốn sách “The Lean Startup” viết Startup = Experiment, tuy nhiên theo mình startup khó hơn làm PhD. Nếu ví startup cũng giống như viết một paper thì điểm khác biệt lớn là bạn có thể tạo nên những giải thuyết có thể chưa có thật để bài toán của bạn trở nên valid, ngược lại mọi bước trong xây dựng một sản phẩm đều phải dựa trên những dữ liệu thực tế, những phản ứng của người dùng. Vấn đề là là những thông tin bạn có thường bất định – uncertainty. Startup là một quá trình gian nan gồm nhiều bước, có thể được giản hóa thành 3 bước Build-Measure-Learn. Tuy nhiên mình không đi sâu vào phân tích các bước startup như thế nào vì chưa có kinh nghiệm. Nhưng để bắt đầu một startup như thế nào cũng khá quan trọng. Tổng kết lại thì bất kì một startup nào đều gồm 3 nội dung chính cần được chuẩn bị đồng thời:

  1. People
  2. Customer
  3. Funding

Ba thành phần này giống như một cái kiềng 3 chân, thiếu một trong 3 đều không được. Thứ nhất, con người luôn là một yếu tố chủ chốt trong mọi tổ trức, đặc biệt với một technology startup thì việc xây dựng một core engineering team là quan trọng nhất. Họ cũng sẽ là những nhân tố chủ chốt trong công ty sau này nếu tiếp tục phát triển. Startup là một quá trình gian nan bởi vậy đội ngũ engineering team này cần phải có những người có nhiều kinh nghiệm. Kinh nghiệm ở đây không chỉ là một người 5 năm làm việc với Zoomla, có thể xây dựng một website khá trong 1 tuần. Kinh nghiệm ở đây còn được đánh giá bởi khả năng giải quyết vấn đề, đặc biệt là những vấn đề không lường trước của những startups mà luôn gắn liền với uncertainty. Ví dụ release một feature mới vào trong core product gây ra delay chương trình khá lâu (an unexpected situation) hoặc tìm giải pháp phù hợp để scale the core product ra nhiều máy vì hệ thống hiện tại trên một máy không đáp ứng một lượng người gia tăng trong tương lai gần (scaling).


Thứ hai, khi bạn xây dựng một phần mềm, trước đó bạn phải có câu trả là ai sẽ dùng sản phẩm của bạn. Bạn có thể tìm khách hàng ngay trong quá trình trình chuẩn bị, tìm kiếm con người và funding. Nhiều startup fail vì lý do làm xong sản phẩm nhưng không có đủ khách hàng để duy trì hoạt động. Việc tìm kiếm khách hàng ngay từ đầu có nhiều thuận lợi như làm quen và xây dựng được một mối quan hệ với các đối tác. Mình có cơ hội được nói chuyện với anh Christopher Nguyen (CEO Yatown – a local neighborhood social networks) có nói là phần lớn các VC (Venture Capital) ở Mỹ giờ funds cho các tổ trức B2B (Business To Business) thay vì B2E (Bussiness To End user) như những năm trước. Mình lấy dẫn chứng này để muốn nói là việc tìm kiếm khách hàng của một B2B startup không giống như B2E startup. Khách hàng của B2B startup là các tổ trức, các công ty nên tạo dựng mối quan hệ là tốn thời gian bởi thủ tục hành chính, giấy tờ, đàm phán… nên cần được chuẩn bị từ trước khi startup. Ngược lại một B2E startup thì khách hàng chính là người dùng cuối nên việc tìm kiếm khách hàng là dễ dàng hơn và ít mất thời gian hơn. Ví dụ, Teradata từng là một B2B startup, và để có đuợc khoảng 1000 khách hàng trên toàn cầu như ngày nay Teradata đã trải qua hơn 30 năm kinh nghiệm quan hệ với khách hàng và  giờ có những khách hàng thân thiết như Walmart, Apple. Ngược lại Facebook đã từng là một B2E startup đang hướng tới khách hàng thứ 1 tỷ sau chỉ 8 năm hoạt động.

Venture Capital/Startup

Nội dung cuối cùng là tìm kiếm funding từ các VC, là bước cuối này sẽ giúp realize idea startup của bạn. Mình không biết nhiều về phần này nhưng nếu bạn có một ý tưởng tốt, submit proposal, trình  bày ý tưởng với VCs và chỉ ra được rằng bạn có một team tốt, có những khách hàng tiềm năng. Bạn sẽ có cơ hội nhận được funding. Tất nhiên kiếm funding là quá trình tạo dựng các mối quan hệ.

Startup ở Việt Nam

Ở Việt Nam thì theo mình biết phần lớn vẫn là các startup theo kiểu ship công nghệ từ nước ngoài, chẳng hạn 5-6 năm trước thì nổi rộ lên các trang web mua bán hàng trực tuyến như vatgia.com, 123mua.vn có mô hình giống amazon.com, 2-3 năm trước thì rộ lên các trang web đấu giá như daugia.vn, daugia247.com 5giay.vn thì giống ebay.com. Nói như vậy có nghĩa là cứ ship một idea kinh doanh ở nước ngoài áp dụng cho Việt Nam cũng có thể dẫn đến thành công. Các bạn có kinh nghiệm gì về startup ở Việt Nam thì chia sẻ?

Suy ngẫm

Nếu bạn muốn startup thì bạn sẽ “chọn” con đường nào để đi? (phần này mang nhiều ý kiến chủ quan của mình). Mình nghĩ là luận văn tốt nghiệp của mình chắc cũng sẽ không có tầm ảnh hưởng như PageRank nên không theo Technology startup không sát nhập được. Về Traction startup, nhiều người cũng phải công nhận là Mark Zuckerberg rất may mắn vì làm trang facebook đúng thời điểm phát triển mạnh mẽ của Web 2.0 cùng với nhu cầu kết nối của người dùng là rất lớn (không phủ nhận là những cái mới của FB so với các social network khác như MySpace là đáng kể). Làm sao biết trước được trào lưu của Internet cũng thật là khó. Chỉ còn loại startup còn lại là phổ biến nhất, cần nghĩ ra một startup idea mới nào đó mà chưa ai làm, ý tưởng thật disruptive, làm hết mình rồi đợi có công ty nào thấy rằng à cái technology này valuable rồi mua lại 🙂

Cám ơn các bạn đã đọc đến đây, kể cả các bạn đọc đoạn đầu và skip đoạn giữa. Nếu bạn nào hỏi sao nhiều lỗi chính tả thế thì mình trả lời trước là đã không học lớp 1. Vô cùng cám ơn nếu các bạn chỉ ra lỗi chính tả cho mình 🙂


Bạn nào quan tâm đến startup, muốn trao thì contact với mình qua mail ubriela@gmail.com hoặc skype ubriela. Mình muốn trong 2-3 năm tạo được một engineering team làm việc cùng nhau theo một mục đích chung, khi đã có idea rồi thì và kế hoạch cụ thể rồi thì bắt đầu hoạt động chính thức. Ý định của mình là muốn “đầu tư” lại về Việt Nam càng sớm càng tốt thay vì tiết kiệm một cục tiền để khi về Việt Nam mua một cái ô tô! Vì chênh lệch về mức sống nên lương hàng tháng của một sinh viên PhD bên U.S (đã trừ đi chi phí sinh hoạt bản thân) có thể trả lương fulltime cho hai sinh viên mới ra trường (khoảng 10 triệu mỗi tháng mỗi người). Nếu ai đó chăm đi intern thì còn hơn.

2012 summer intern at Teradata

I was my great honor to have my fantastic-three-months-summer internship at Query Optimizer Group, Teradata @Segundo. During my time there, I not only learnt how to work on a specific topic, how to conduct experiments, how to write a scientific paper and more importantly how Teradata run their business successfully as a leading global company in data warehousing and data analytics.

I was assigned a very challenging but interesting topic namely Multidimensional Cardinality Estimation (I would say selectivity estimation is one type of cardinality estimation in which trying to estimate the number of results returned by a particular query). I was so fascinated in this topic that I was able to understand the concept and implement a naive approach with some encouraging deliverable results during the first week. My motivation to work on this topic was how cardinality estimation play an important role in the relational database (Teradata database, Oracle, MySQL..). To be simple, there are two steps when a query is being executed, including query parsing, query processing (happened in the database manipulation language (DML) layer). There can be multiple ways to execute a query, so called query execution plans; however, there is only one optimal plan which is executed in the shortest time. Importantly, if we know the number of results returned by a query in advanced (by estimation), it is more likely we can choose the optimal plan or close-to-optimal plan. Let give an example, there are three execution plans of the query: Plan A takes 10 days to complete, Plan B takes 1 days to complete, Plan C takes 1 hour to complete. If the number of results in advanced is given, we know Plan C is the best plan. However; we don’t know the result set size. It likes chicken and egg problem! So we try to estimate the result sets’s size; the more accurately the result set size is estimated, the more likely the query optimizer choose the optimal plan. So the problem now becomes estimating the result set size of a query – so called selectivity estimation. Note that a little improvement in selectivity estimation could result in a great difference in business execution (10 days vs 1 hour).

I then dug deeper into histogram – a specific approach in selectivity estimation, implemented various histogram algorithms, came up with our own algorithms. Extensive experiments on various datasets have shown the superiority of our algorithms to the current approaches.

My mentor

My mentor

In the second part of this post, I would like to share my working experience at Optimizer Group, mostly logistic. As an internship position, I was in charge of a research problem. I was supported by a Mentor and a Manager. I worked directly with the mentor, talked to him every couple of days about ideas, and executions. Then I reported my progress to my manager, cced the mentor every week and received feedbacks from both of them. Although I am solely responsible for the project, in term of reading materials and coding; the supports from my mentor and my manager helped me to constantly move forward. Fortunately, my project caught an attentions of the director and the architect of the Optimizer Group. They also joined in many weekly meeting and actively contributed their ideas to the project. Their supports turned out one of the main reason I worked hard and tried to deliver good results.

The director
The director

I also valued the opportunities to attend every seminar of the Optimizer Group, the presentations of the CEO, Vice Presidents…  to the interns like me. From what I observed, Teradata is indeed a leading corporation in data warehousing and data analytics with their biggest customers are in the top 500 companies, such as Apple, Walmart… As a global trends, Teradata recently acquired other companies, for example Aster-data with an ambition to explore and then lead a new area of unstructured data like text analytics.

Geocoding technology

Geocoding is a technique to find associated geographic coordinates from other geographic data, such as addresses and zip codes (wiki). For example, given an address “100 Vermont, Los Angeles”, we need to return the latitude/longitude of that address. The problem becomes more complex when we don’t have enough information. For example, we don’t have city name and there might be multiple cities has Vermont street. Having the zip code can clarify this ambiguity. If we know the location of the address, where should we assign the geographic coordinates? the gate or the center of a building?. and so on.

We also have a reverse technique namely reverse geocoding, where we convert  a geographic coordinates to an address. This feature is so popular in Google Map, this is when we tap on a map, the system automatically suggest or return a correct address.

Geocoding is so important because it is a fundamental problem, which has a lot of applications in mapping, GIS… Geocoding has catching attentions from both research and industry. ESRI – a GIS company even organizes a conference in this area: http://geocodingconference.com/. I attended this conf one time. There are hundred of researchers attended the conf, they were talking about improving the accuracy of geocoding technology, geocoding applications: crime mapping, surveillance, urban planing,..

We need people work in this area in Vietnam, collecting more location data. Currently, Google Maps and others mapping services don’t have enough location data in Vietnam, which explains why Seri does not work in Vietnam 🙂