As a context, we're building a web application for blended-learning, which is a learning paradigm where technology is used to aid offline learning. In our case, it's for K-12 students learning math. We're building a math tutoring center where each of the students studies by watching lecture videos and then exercising in their tablet. There is still a teacher, but his job is to help students who are confused. In other words, it's like a traditional math classroom on steroid: teachers no longer need to do repetitive task of teaching the same materials and grading exercises, but they can focus on giving personal attention to the students.
We need offline-to-online architecture because:
1. Internet access in the tutoring center is not reliable.
2. We want students to be able to continue studying anytime 24/7 (via Internet) outside of the tutoring center.
3. We want to analyze student data captured during tutoring session so that our remote team can improve the curriculum and prepare to better help the students on the next session.
So we basically have 2 kind of servers: cloud-server and class-server. A cloud-server is used to serve all the Internet access, and a class-server is used to serve a tutoring center exclusively.
First off, this is the specification:
1. Cloud-server and class-server both have single code-base. The only difference is the flag CLOUD set to true/false accordingly.
2. There's only 1 cloud-server. (we aren't worried about scalability yet :))
3. There are many class-servers, each for different tutoring center.
4. Database is MySQL
Our trick to keep it simple is by having only a single curriculum data source: the cloud-server. We update our curriculum (videos, exercises, etc) only on the cloud. The class-server is only allowed to mutate student-related tables (new students, new analytics, student's exercise submission, etc). Because of this design decision, we need to only implement class-to-cloud synchronization logic. We can get the reverse by forking off the cloud database. For example, to update a class server to have the latest curriculum, we only need to sync class-to-cloud, and then drop the class database and replace it with the cloud's using mysqldump.
The first thing needed is Synchronizations table, which looks like:
I love MySQL as it supports transactions, robust, well-tested, easy to set-up, and admittedly because I am familiar with syntax. However, being a relational database, when it comes to scaling up, it just couldn't do it easily out of the box like NoSQL solutions such as MongoDB which are designed for scalability from its conception. But does that mean SQL cannot be used for building a large-scale system?
Have you ever se-up an SSH server which turns out to be inaccessible due to ISP blockage or firewall? Or have you ever had trouble accessing your SSH server because your server IP address changes dynamically?
Men-submit Informasi Login, Pembayaran, atau Data Privat Lainnya? Hanya lakukan di website dengan HTTPS!
Sebuah website diakses melalui dua protokol umum: HTTP dan HTTPS. Mengakses website dapat dianalogikan seperti menelepon. HTTP adalah saluran telepon biasa yang tidak dilengkapi dengan enkripsi, sehingga mudah di-hack/disadap, sedangkan HTTPS adalah saluran yang terproteksi dengan enkripsi. Bila anda men-submit informasi penting ke Internet (login, pembayaran, dsb), pastikan anda hanya melakukannya di website dengan protokol HTTPS.
Di era yang sangat terkoneksi ini, memiliki website sangatlah penting. Melalui website, client-client baru dapat menemukan produk kita, mempelajari portofolio perusahaan kita, bahkan membandingkan kita dengan kompetitor. Selain itu, website juga dapat memberikan kredibilitas lebih terhadap bisnis kita.
Membangun website tidaklah selalu sulit, apalagi apabila website tersebut hanya sebatas company profile atau informasi produk. Pelajari kiat-kiat membangun website melalui artikel ini, agar anda bisa ber-negosiasi dengan lebih baik dengan konsultan IT.