Read "Dynamo, Amazon’s Highly Available Key-value Store" Read "Bigtable, A Distributed Storage System for Structured Data" Read "Streaming Systems" 3, Watermarks Read "Streaming Systems" 1&2, Streaming 101 Read "F1, a distributed SQL database that scales" Read "Zanzibar, Google’s Consistent, Global Authorization System" Read "Spanner, Google's Globally-Distributed Database" Read "Designing Data-intensive applications" 12, The Future of Data Systems IOS development with Swift Read "Designing Data-intensive applications" 10&11, Batch and Stream Processing Read "Designing Data-intensive applications" 9, Consistency and Consensus Read "Designing Data-intensive applications" 8, Distributed System Troubles Read "Designing Data-intensive applications" 7, Transactions Read "Designing Data-intensive applications" 6, Partitioning Read "Designing Data-intensive applications" 5, Replication Read "Designing Data-intensive applications" 3&4, Storage, Retrieval, Encoding Read "Designing Data-intensive applications" 1&2, Foundation of Data Systems Three cases of binary search TAMU Operating System 2 Memory Management TAMU Operating System 1 Introduction Overview in cloud computing 2 TAMU Operating System 7 Virtualization TAMU Operating System 6 File System TAMU Operating System 5 I/O and Disk Management TAMU Operating System 4 Synchronization TAMU Operating System 3 Concurrency and Threading TAMU Computer Networks 5 Data Link Layer TAMU Computer Networks 4 Network Layer TAMU Computer Networks 3 Transport Layer TAMU Computer Networks 2 Application Layer TAMU Computer Networks 1 Introduction Overview in distributed systems and cloud computing 1 A well-optimized Union-Find implementation, in Java A heap implementation supporting deletion TAMU Advanced Algorithms 3, Maximum Bandwidth Path (Dijkstra, MST, Linear) TAMU Advanced Algorithms 2, B+ tree and Segment Intersection TAMU Advanced Algorithms 1, BST, 2-3 Tree and Heap TAMU AI, Searching problems Factorization Machine and Field-aware Factorization Machine for CTR prediction TAMU Neural Network 10 Information-Theoretic Models TAMU Neural Network 9 Principal Component Analysis TAMU Neural Network 8 Neurodynamics TAMU Neural Network 7 Self-Organizing Maps TAMU Neural Network 6 Deep Learning Overview TAMU Neural Network 5 Radial-Basis Function Networks TAMU Neural Network 4 Multi-Layer Perceptrons TAMU Neural Network 3 Single-Layer Perceptrons Princeton Algorithms P1W6 Hash Tables & Symbol Table Applications Stanford ML 11 Application Example Photo OCR Stanford ML 10 Large Scale Machine Learning Stanford ML 9 Anomaly Detection and Recommender Systems Stanford ML 8 Clustering & Principal Component Analysis Princeton Algorithms P1W5 Balanced Search Trees TAMU Neural Network 2 Learning Processes TAMU Neural Network 1 Introduction Stanford ML 7 Support Vector Machine Stanford ML 6 Evaluate Algorithms Princeton Algorithms P1W4 Priority Queues and Symbol Tables Stanford ML 5 Neural Networks Learning Princeton Algorithms P1W3 Mergesort and Quicksort Stanford ML 4 Neural Networks Basics Princeton Algorithms P1W2 Stack and Queue, Basic Sorts Stanford ML 3 Classification Problems Stanford ML 2 Multivariate Regression and Normal Equation Princeton Algorithms P1W1 Union and Find Stanford ML 1 Introduction and Parameter Learning

Migrate blog from Github Pages to Gitlab Pages



My Github Pro subscription expired a few days ago, which means although I can have private repo for my blog, it cannot publish new updates any more. Two choices for you from Github: either pay for Pro or change the repo to a public one.

I am happy to contribute to open source world. However, the repo contains some sensitive information, like Google analytics ID, or perhaps some passwords pushed by mistake in commit history.. Therefore I decided to find a free alternative instead of going along with Github.

Happy to find Gitlab Pages, which I think is a perfect replacement of Github Pages, or even better. However, there are still some caveats during migration. Here I will make a summary of this effort. Note that entire migration took me around 2 hours.

Where to push my code?

Gitlab provides an amazing CI/CD feature, which does CI/CD from external repo. So all you have to do is to create a new project in Gitlab by setting up the CI/CD from your Github repo. In this way, you don’t even have to change your local git settings like adding a new origin for Gitlab. But you can do it anyway.

Depending on what you choose, you can either push to Github or Gitlab. Both repos can be private.

How to generate static pages?

Github does this step automatically once receiving a new push. Gitlab needs some configurations for CI/CD (changes -> pages, not Github repo -> Gitlab), but this doesn’t mean it’s not as good as Github. Actually, I was surprised by this feature. It’s much more configurable and thus powerful.

For the example of Pages, add a new .gitlab-ci.yml file under the root directory with following configs. You can learn more about the config settings here.

image: ruby:2.3

    - export LC_ALL="C.UTF-8"
    - export LANG="en_US.UTF-8"
    - export LANGUAGE="en_US.UTF-8"

  stage: deploy
  - bundle install
  - bundle exec jekyll build -d public
    - public
  - master

Push the changes. In order to trigger the page generation pipeline, you need to manually run one in the project’s Pipelines page. The following changes will be generated automatically. You can even view the progress or download the generated html files.

Wait, what’s the url?

The default url will be, which may cause trouble if you didn’t have correct prefix for your assets’ url (css, pictures, etc). I recommend to do following in Project setting -> Advanced. It enables us to use custom domain easily. Without this, the homepage url with custom domain is yourcustom.domain/YOUT_PROJECT_NAME.

  • Rename your project to
  • Update its path to

After this, the url will be Custom domain will work as well.

With this setting, url prefix for all your assets in your project should be "" in your _config.yml. Otherwise, it has to be /YOUR_PROJECT_NAME. An example of asset path suffix could be /assets/web/web_design_workflow.png.

Custom domain is fancy

Easy to set up custom domain with HTTPS. Just follow instruction in Setting -> Pages. Server IP address is provided here. HTTPS support is built-in or you can use your own certificate.

Other caveats

  • You shouldn’t name one of your top level directories to public. This is a reserved name by Gitlab Page.

Creative Commons License
Melon blog is created by melonskin. This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
© 2016-2020. All rights reserved by melonskin. Powered by Jekyll.