├── _posts ├── hidden │ └── .gitkeep ├── read_sf_lf │ └── .gitkeep ├── read_sf_plf │ └── .gitkeep ├── 2024-02-06-spotify.markdown ├── 2024-12-15-fun-projects.markdown ├── 2025-02-04-ros-topics.markdown ├── 2024-12-29-quest-for-peace.markdown ├── 2024-12-07-gold-watch.markdown ├── 2024-12-27-paradox-of-suffering.markdown ├── 2024-12-21-the-turn.markdown ├── 2024-12-19-awaken.markdown ├── 2024-12-24-ignition.markdown ├── 2024-12-28-analysis-of-paradox-of-suffering.markdown ├── 2024-12-22-the-prestige.markdown ├── 2024-12-14-story-bachelor.markdown └── 2024-12-20-the-pledge.markdown ├── CNAME ├── ads.txt ├── img ├── 404-bg.jpg ├── about-bg.jpg ├── archive.jpg ├── bg-walle.jpg ├── dataflow.png ├── favicon.ico ├── home-bg-o.jpg ├── home-bg.jpg ├── bg-material.jpg ├── contact-bg.jpg ├── home-bg-art.jpg ├── icon_wechat.png ├── liminality.jpg ├── post-bg-css.jpg ├── post-bg-rwd.jpg ├── post-bg-web.jpg ├── blog-desktop.jpg ├── blog-keynote.jpg ├── blog-md-navbar.gif ├── blog-sidebar.jpg ├── home-bg-geek.jpg ├── post-bg-2015.jpg ├── post-bg-e2e-ux.jpg ├── post-bg-kuaidi.jpg ├── post-bg-miui6.jpg ├── in-post │ ├── forcify.jpg │ ├── post-kuaidi-1.jpg │ ├── post-kuaidi-2.jpg │ ├── post-metro-ui.jpg │ ├── post-f-f-weibo.png │ ├── post-metro-real.jpg │ ├── post-wmu │ │ ├── maoyan.jpg │ │ ├── wepiao.jpg │ │ └── question.jpg │ ├── post-c-u-ali-memo.jpg │ ├── post-c-u-ali-team.png │ ├── open-source-license.png │ ├── post-c-u-ali-079717.png │ ├── post-metro-panorama.jpg │ ├── post-eleme-pwa │ │ ├── eleme-at-io.jpg │ │ ├── Architecture.png │ │ ├── Lighthouse-after.png │ │ ├── after-skeleton.jpg │ │ ├── before-skeleton.jpg │ │ ├── nextTick-&-Load.png │ │ ├── thisTick-&-Load.png │ │ ├── Lighthouse-before.png │ │ ├── msite-After-Optim.png │ │ ├── msite-Before-Optim.png │ │ ├── PUSH-link-rel-preload.jpg │ │ └── PRECACHE-future-routes.jpg │ ├── post-nextgen-web-pwa │ │ ├── sw-sw.png │ │ ├── sw-race.png │ │ ├── PWAR-007.jpeg │ │ ├── ios2-a2hs.gif │ │ ├── qcon-trend.png │ │ ├── flipkart-1.jpeg │ │ ├── flipkart-2.jpeg │ │ ├── flipkart-3.jpeg │ │ ├── sw-lifecycle.png │ │ ├── PWAR-014+PWA.jpeg │ │ └── qcon-hybridzation.png │ ├── post-js-version │ │ ├── javascript-java.jpg │ │ └── keep-calm-and-learn-javascript.png │ └── post-alitrip-pd │ │ ├── post-alitrip-pd.013.jpg │ │ ├── post-alitrip-pd.014.jpg │ │ ├── post-alitrip-pd.016.jpg │ │ ├── post-alitrip-pd.018.jpg │ │ ├── post-alitrip-pd.019.jpg │ │ ├── post-alitrip-pd.020.jpg │ │ ├── post-alitrip-pd.021.jpg │ │ ├── post-alitrip-pd.023.jpg │ │ ├── post-alitrip-pd.026.jpg │ │ ├── post-alitrip-pd.028.jpg │ │ ├── post-alitrip-pd.029.jpg │ │ ├── post-alitrip-pd.030.jpg │ │ └── post-alitrip-pd.031.jpg ├── post-bg-alibaba.jpg ├── post-bg-alitrip.jpg ├── post-bg-android.jpg ├── post-bg-dreamer.jpg ├── post-bg-halting.jpg ├── post-bg-infinity.jpg ├── post-bg-ios9-web.jpg ├── post-bg-miui-ux.jpg ├── post-bg-os-metro.jpg ├── post-bg-universe.jpg ├── bg-little-universe.jpg ├── post-bg-js-module.jpg ├── post-bg-js-version.jpg ├── post-bg-re-vs-ng2.jpg ├── post-bg-see-u-ali.jpg ├── post-bg-unix-linux.jpg ├── post-sample-image.jpg ├── post-bg-apple-event-2015.jpg ├── post-bg-digital-native.jpg ├── post-bg-farewell-flash.jpg └── post-bg-nextgen-web-pwa.jpg ├── pwa ├── icons │ ├── 128.png │ └── 512.png └── manifest.json ├── fonts ├── glyphicons-halflings-regular.eot ├── glyphicons-halflings-regular.ttf ├── glyphicons-halflings-regular.woff └── glyphicons-halflings-regular.woff2 ├── Gemfile ├── .gitignore ├── less ├── variables.less ├── sidebar.less ├── mixins.less ├── side-catalog.less ├── search.less ├── highlight.less └── snackbar.less ├── _includes ├── friends.html ├── multilingual-sel.html ├── ads.html ├── short-about.html ├── mathjax_support.html ├── search.html ├── featured-tags.html ├── about │ └── en.md ├── sns-links.html ├── head.html ├── nav.html ├── intro-header.html └── footer.html ├── search.json ├── offline.html ├── 404.html ├── _layouts ├── default.html ├── page.html ├── keynote.html └── post.html ├── package.json ├── js ├── hux-blog.min.js ├── sw-registration.js ├── snackbar.js ├── jquery.tagcloud.js ├── hux-blog.js ├── animatescroll.min.js ├── archive.js ├── simple-jekyll-search.min.js └── jquery.nav.js ├── feed.xml ├── about.html ├── index.html ├── Rakefile ├── Gruntfile.js ├── README.md ├── archive.html └── _config.yml /_posts/hidden/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | blog.rangonomics.com -------------------------------------------------------------------------------- /_posts/read_sf_lf/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_posts/read_sf_plf/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ads.txt: -------------------------------------------------------------------------------- 1 | google.com, pub-6487568398225121, DIRECT, f08c47fec0942fa0 -------------------------------------------------------------------------------- /img/404-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/404-bg.jpg -------------------------------------------------------------------------------- /img/about-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/about-bg.jpg -------------------------------------------------------------------------------- /img/archive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/archive.jpg -------------------------------------------------------------------------------- /img/bg-walle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/bg-walle.jpg -------------------------------------------------------------------------------- /img/dataflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/dataflow.png -------------------------------------------------------------------------------- /img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/favicon.ico -------------------------------------------------------------------------------- /img/home-bg-o.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/home-bg-o.jpg -------------------------------------------------------------------------------- /img/home-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/home-bg.jpg -------------------------------------------------------------------------------- /pwa/icons/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/pwa/icons/128.png -------------------------------------------------------------------------------- /pwa/icons/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/pwa/icons/512.png -------------------------------------------------------------------------------- /img/bg-material.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/bg-material.jpg -------------------------------------------------------------------------------- /img/contact-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/contact-bg.jpg -------------------------------------------------------------------------------- /img/home-bg-art.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/home-bg-art.jpg -------------------------------------------------------------------------------- /img/icon_wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/icon_wechat.png -------------------------------------------------------------------------------- /img/liminality.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/liminality.jpg -------------------------------------------------------------------------------- /img/post-bg-css.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-css.jpg -------------------------------------------------------------------------------- /img/post-bg-rwd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-rwd.jpg -------------------------------------------------------------------------------- /img/post-bg-web.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-web.jpg -------------------------------------------------------------------------------- /img/blog-desktop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/blog-desktop.jpg -------------------------------------------------------------------------------- /img/blog-keynote.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/blog-keynote.jpg -------------------------------------------------------------------------------- /img/blog-md-navbar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/blog-md-navbar.gif -------------------------------------------------------------------------------- /img/blog-sidebar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/blog-sidebar.jpg -------------------------------------------------------------------------------- /img/home-bg-geek.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/home-bg-geek.jpg -------------------------------------------------------------------------------- /img/post-bg-2015.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-2015.jpg -------------------------------------------------------------------------------- /img/post-bg-e2e-ux.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-e2e-ux.jpg -------------------------------------------------------------------------------- /img/post-bg-kuaidi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-kuaidi.jpg -------------------------------------------------------------------------------- /img/post-bg-miui6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-miui6.jpg -------------------------------------------------------------------------------- /img/in-post/forcify.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/forcify.jpg -------------------------------------------------------------------------------- /img/post-bg-alibaba.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-alibaba.jpg -------------------------------------------------------------------------------- /img/post-bg-alitrip.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-alitrip.jpg -------------------------------------------------------------------------------- /img/post-bg-android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-android.jpg -------------------------------------------------------------------------------- /img/post-bg-dreamer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-dreamer.jpg -------------------------------------------------------------------------------- /img/post-bg-halting.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-halting.jpg -------------------------------------------------------------------------------- /img/post-bg-infinity.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-infinity.jpg -------------------------------------------------------------------------------- /img/post-bg-ios9-web.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-ios9-web.jpg -------------------------------------------------------------------------------- /img/post-bg-miui-ux.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-miui-ux.jpg -------------------------------------------------------------------------------- /img/post-bg-os-metro.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-os-metro.jpg -------------------------------------------------------------------------------- /img/post-bg-universe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-universe.jpg -------------------------------------------------------------------------------- /img/bg-little-universe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/bg-little-universe.jpg -------------------------------------------------------------------------------- /img/post-bg-js-module.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-js-module.jpg -------------------------------------------------------------------------------- /img/post-bg-js-version.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-js-version.jpg -------------------------------------------------------------------------------- /img/post-bg-re-vs-ng2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-re-vs-ng2.jpg -------------------------------------------------------------------------------- /img/post-bg-see-u-ali.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-see-u-ali.jpg -------------------------------------------------------------------------------- /img/post-bg-unix-linux.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-unix-linux.jpg -------------------------------------------------------------------------------- /img/post-sample-image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-sample-image.jpg -------------------------------------------------------------------------------- /img/in-post/post-kuaidi-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-kuaidi-1.jpg -------------------------------------------------------------------------------- /img/in-post/post-kuaidi-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-kuaidi-2.jpg -------------------------------------------------------------------------------- /img/in-post/post-metro-ui.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-metro-ui.jpg -------------------------------------------------------------------------------- /img/in-post/post-f-f-weibo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-f-f-weibo.png -------------------------------------------------------------------------------- /img/in-post/post-metro-real.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-metro-real.jpg -------------------------------------------------------------------------------- /img/in-post/post-wmu/maoyan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-wmu/maoyan.jpg -------------------------------------------------------------------------------- /img/in-post/post-wmu/wepiao.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-wmu/wepiao.jpg -------------------------------------------------------------------------------- /img/post-bg-apple-event-2015.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-apple-event-2015.jpg -------------------------------------------------------------------------------- /img/post-bg-digital-native.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-digital-native.jpg -------------------------------------------------------------------------------- /img/post-bg-farewell-flash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-farewell-flash.jpg -------------------------------------------------------------------------------- /img/post-bg-nextgen-web-pwa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/post-bg-nextgen-web-pwa.jpg -------------------------------------------------------------------------------- /img/in-post/post-c-u-ali-memo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-c-u-ali-memo.jpg -------------------------------------------------------------------------------- /img/in-post/post-c-u-ali-team.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-c-u-ali-team.png -------------------------------------------------------------------------------- /img/in-post/post-wmu/question.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-wmu/question.jpg -------------------------------------------------------------------------------- /img/in-post/open-source-license.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/open-source-license.png -------------------------------------------------------------------------------- /img/in-post/post-c-u-ali-079717.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-c-u-ali-079717.png -------------------------------------------------------------------------------- /img/in-post/post-metro-panorama.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-metro-panorama.jpg -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /img/in-post/post-eleme-pwa/eleme-at-io.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-eleme-pwa/eleme-at-io.jpg -------------------------------------------------------------------------------- /img/in-post/post-nextgen-web-pwa/sw-sw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-nextgen-web-pwa/sw-sw.png -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem 'jekyll-paginate' 3 | 4 | gem "jekyll", "~> 4.0" 5 | gem "rake" 6 | 7 | gem "webrick", "~> 1.7" 8 | -------------------------------------------------------------------------------- /img/in-post/post-eleme-pwa/Architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-eleme-pwa/Architecture.png -------------------------------------------------------------------------------- /img/in-post/post-nextgen-web-pwa/sw-race.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-nextgen-web-pwa/sw-race.png -------------------------------------------------------------------------------- /img/in-post/post-eleme-pwa/Lighthouse-after.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-eleme-pwa/Lighthouse-after.png -------------------------------------------------------------------------------- /img/in-post/post-eleme-pwa/after-skeleton.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-eleme-pwa/after-skeleton.jpg -------------------------------------------------------------------------------- /img/in-post/post-eleme-pwa/before-skeleton.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-eleme-pwa/before-skeleton.jpg -------------------------------------------------------------------------------- /img/in-post/post-eleme-pwa/nextTick-&-Load.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-eleme-pwa/nextTick-&-Load.png -------------------------------------------------------------------------------- /img/in-post/post-eleme-pwa/thisTick-&-Load.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-eleme-pwa/thisTick-&-Load.png -------------------------------------------------------------------------------- /img/in-post/post-js-version/javascript-java.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-js-version/javascript-java.jpg -------------------------------------------------------------------------------- /img/in-post/post-nextgen-web-pwa/PWAR-007.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-nextgen-web-pwa/PWAR-007.jpeg -------------------------------------------------------------------------------- /img/in-post/post-nextgen-web-pwa/ios2-a2hs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-nextgen-web-pwa/ios2-a2hs.gif -------------------------------------------------------------------------------- /img/in-post/post-nextgen-web-pwa/qcon-trend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-nextgen-web-pwa/qcon-trend.png -------------------------------------------------------------------------------- /img/in-post/post-eleme-pwa/Lighthouse-before.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-eleme-pwa/Lighthouse-before.png -------------------------------------------------------------------------------- /img/in-post/post-eleme-pwa/msite-After-Optim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-eleme-pwa/msite-After-Optim.png -------------------------------------------------------------------------------- /img/in-post/post-eleme-pwa/msite-Before-Optim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-eleme-pwa/msite-Before-Optim.png -------------------------------------------------------------------------------- /img/in-post/post-nextgen-web-pwa/flipkart-1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-nextgen-web-pwa/flipkart-1.jpeg -------------------------------------------------------------------------------- /img/in-post/post-nextgen-web-pwa/flipkart-2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-nextgen-web-pwa/flipkart-2.jpeg -------------------------------------------------------------------------------- /img/in-post/post-nextgen-web-pwa/flipkart-3.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-nextgen-web-pwa/flipkart-3.jpeg -------------------------------------------------------------------------------- /img/in-post/post-nextgen-web-pwa/sw-lifecycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-nextgen-web-pwa/sw-lifecycle.png -------------------------------------------------------------------------------- /img/in-post/post-alitrip-pd/post-alitrip-pd.013.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-alitrip-pd/post-alitrip-pd.013.jpg -------------------------------------------------------------------------------- /img/in-post/post-alitrip-pd/post-alitrip-pd.014.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-alitrip-pd/post-alitrip-pd.014.jpg -------------------------------------------------------------------------------- /img/in-post/post-alitrip-pd/post-alitrip-pd.016.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-alitrip-pd/post-alitrip-pd.016.jpg -------------------------------------------------------------------------------- /img/in-post/post-alitrip-pd/post-alitrip-pd.018.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-alitrip-pd/post-alitrip-pd.018.jpg -------------------------------------------------------------------------------- /img/in-post/post-alitrip-pd/post-alitrip-pd.019.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-alitrip-pd/post-alitrip-pd.019.jpg -------------------------------------------------------------------------------- /img/in-post/post-alitrip-pd/post-alitrip-pd.020.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-alitrip-pd/post-alitrip-pd.020.jpg -------------------------------------------------------------------------------- /img/in-post/post-alitrip-pd/post-alitrip-pd.021.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-alitrip-pd/post-alitrip-pd.021.jpg -------------------------------------------------------------------------------- /img/in-post/post-alitrip-pd/post-alitrip-pd.023.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-alitrip-pd/post-alitrip-pd.023.jpg -------------------------------------------------------------------------------- /img/in-post/post-alitrip-pd/post-alitrip-pd.026.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-alitrip-pd/post-alitrip-pd.026.jpg -------------------------------------------------------------------------------- /img/in-post/post-alitrip-pd/post-alitrip-pd.028.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-alitrip-pd/post-alitrip-pd.028.jpg -------------------------------------------------------------------------------- /img/in-post/post-alitrip-pd/post-alitrip-pd.029.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-alitrip-pd/post-alitrip-pd.029.jpg -------------------------------------------------------------------------------- /img/in-post/post-alitrip-pd/post-alitrip-pd.030.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-alitrip-pd/post-alitrip-pd.030.jpg -------------------------------------------------------------------------------- /img/in-post/post-alitrip-pd/post-alitrip-pd.031.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-alitrip-pd/post-alitrip-pd.031.jpg -------------------------------------------------------------------------------- /img/in-post/post-eleme-pwa/PUSH-link-rel-preload.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-eleme-pwa/PUSH-link-rel-preload.jpg -------------------------------------------------------------------------------- /img/in-post/post-nextgen-web-pwa/PWAR-014+PWA.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-nextgen-web-pwa/PWAR-014+PWA.jpeg -------------------------------------------------------------------------------- /img/in-post/post-eleme-pwa/PRECACHE-future-routes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-eleme-pwa/PRECACHE-future-routes.jpg -------------------------------------------------------------------------------- /img/in-post/post-nextgen-web-pwa/qcon-hybridzation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-nextgen-web-pwa/qcon-hybridzation.png -------------------------------------------------------------------------------- /img/in-post/post-js-version/keep-calm-and-learn-javascript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guilyx/guilyx.github.io/HEAD/img/in-post/post-js-version/keep-calm-and-learn-javascript.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | _site 2 | _posts/_draft 3 | _posts/_archive 4 | _archive 5 | node_modules 6 | .vscode 7 | *.log 8 | *.lock 9 | *.sh 10 | .DS_Store 11 | .jekyll-cache 12 | */.DS_Store 13 | */*/.DS_Store 14 | -------------------------------------------------------------------------------- /less/variables.less: -------------------------------------------------------------------------------- 1 | // Variables 2 | 3 | @brand-primary: #0085a1; 4 | @brand-gray: #a3a3a3; 5 | 6 | @gray-dark: lighten(black, 25%); 7 | @gray-light: lighten(black, 75%); 8 | 9 | @white-faded: fade(white, 80%); 10 | -------------------------------------------------------------------------------- /_includes/friends.html: -------------------------------------------------------------------------------- 1 | {% if site.friends %} 2 |
3 |
FRIENDS
4 | 9 | {% endif %} -------------------------------------------------------------------------------- /_includes/multilingual-sel.html: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /_includes/ads.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | -------------------------------------------------------------------------------- /search.json: -------------------------------------------------------------------------------- 1 | --- 2 | layout: null 3 | --- 4 | [ 5 | {% for post in site.posts %} 6 | { 7 | "title" : "{{ post.title | escape }}", 8 | "subtitle" : "{{ post.subtitle | escape }}", 9 | "tags" : "{{ post.tags | join: ', ' }}", 10 | "url" : "{{ site.baseurl }}{{ post.url }}", 11 | "date" : "{{ post.date }}" 12 | } {% unless forloop.last %},{% endunless %} 13 | {% endfor %} 14 | ] -------------------------------------------------------------------------------- /offline.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "STAY CALM AND DON'T FREAK OUT" 4 | hide-in-nav: true 5 | description: "Love the improv bit this page does not exist. Take it from the top and try again." 6 | header-img: "img/404-bg.jpg" 7 | permalink: /offline.html 8 | --- 9 | 10 | 11 | 12 | {% include intro-header.html type="page" %} 13 | 14 | 17 | -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "STAY CALM AND DON'T FREAK OUT" 4 | hide-in-nav: true 5 | description: "Love the improv bit this page does not exist. Take it from the top and try again." 6 | header-img: "img/404-bg.jpg" 7 | permalink: /404.html 8 | --- 9 | 10 | 11 | 12 | {% include intro-header.html type="page" short='true' %} 13 | 14 | 17 | -------------------------------------------------------------------------------- /_includes/short-about.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
ABOUT ME
4 |
5 | {% if site.sidebar-avatar %} 6 | 7 | {% endif %} 8 | {% if site.sidebar-about-description %} 9 |

{{site.sidebar-about-description}}

10 | {% endif %} 11 | 12 | {% include sns-links.html %} 13 |
14 |
-------------------------------------------------------------------------------- /pwa/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Rango Blog", 3 | "short_name": "Rango Blog", 4 | "description": "Yet another software engineer oversharing.", 5 | "icons": [{ 6 | "src": "icons/128.png", 7 | "sizes": "128x128", 8 | "type": "image/png" 9 | }, { 10 | "src": "icons/512.png", 11 | "sizes": "512x512", 12 | "type": "image/png" 13 | }], 14 | "background_color": "#fff", 15 | "theme_color": "#000", 16 | "start_url": "/", 17 | "display": "standalone", 18 | "orientation": "portrait" 19 | } 20 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% include head.html %} 5 | 6 | 7 | 8 | 9 | {% include nav.html %} 10 | {% include search.html %} 11 | 12 | {{ content }} 13 | 14 | {% include footer.html %} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /_includes/mathjax_support.html: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /_includes/search.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | 6 | 7 |
8 |
9 |
10 |
11 |
12 | 13 | 14 |
15 |
16 |
17 |
18 |
-------------------------------------------------------------------------------- /_posts/2024-02-06-spotify.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "A cool spotify card" 4 | author: "Rango" 5 | catalog: true 6 | header-img: "img/post-bg-digital-native.jpg" 7 | header-mask: 0.4 8 | tags: 9 | - Web 10 | - JavaScript 11 | --- 12 | 13 |

14 | 15 |

16 | 17 |

18 | 19 |

20 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hux-blog", 3 | "title": "Hux Blog", 4 | "author": "Hux ", 5 | "version": "1.8.2", 6 | "homepage": "http://huxpro.github.io", 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/Huxpro/huxpro.github.io" 10 | }, 11 | "bugs": "https://github.com/Huxpro/huxpro.github.io/issues", 12 | "devDependencies": { 13 | "grunt": ">=1.3.0", 14 | "grunt-banner": "~0.2.3", 15 | "grunt-contrib-less": "^2.0.0", 16 | "grunt-contrib-uglify": "^4.0.1", 17 | "grunt-contrib-watch": "^1.1.0" 18 | }, 19 | "scripts": { 20 | "start": "bundle exec jekyll serve", 21 | "dev": "grunt watch & npm run start", 22 | "boil": "git push boilerplate boilerplate:master", 23 | "push": "git push origin master --tag" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /js/hux-blog.min.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function(){$("table").wrap("
"),$("table").addClass("table")}),$(document).ready(function(){$('iframe[src*="youtube.com"]').wrap('
'),$('iframe[src*="youtube.com"]').addClass("embed-responsive-item"),$('iframe[src*="vimeo.com"]').wrap('
'),$('iframe[src*="vimeo.com"]').addClass("embed-responsive-item")}),jQuery(document).ready(function(i){var a,o;1170 3 | {% endcomment %} 4 | 5 | {% if site.featured-tags %} 6 |
7 | {% if include.bottom %} 8 | 9 | {% endif %} 10 |
FEATURED TAGS
11 |
12 | {% capture tags %} 13 | {% comment %} 14 | there must be no space between for and if otherwise this tricky sort won't work. 15 | url_encode/decode is for escaping otherwise extra will get generated 16 | but it will break sort... 17 | {% endcomment %} 18 | {% for tag in site.tags %}{% if tag[1].size > site.featured-condition-size %} 19 | {{ tag[0] }}__SEPARATOR__ 23 | {% endif %}{% endfor %} 24 | {% endcapture %} 25 | {{ tags | split:'__SEPARATOR__' | sort }} 26 |
27 |
28 | {% endif %} -------------------------------------------------------------------------------- /less/sidebar.less: -------------------------------------------------------------------------------- 1 | @import "variables.less"; 2 | 3 | // Sidebar Components 4 | 5 | // Large Screen 6 | @media (min-width: 1200px) { 7 | .post-container, 8 | .sidebar-container { 9 | padding-right: 5%; 10 | } 11 | } 12 | @media (min-width: 768px) { 13 | .post-container { 14 | padding-right: 5%; 15 | } 16 | } 17 | 18 | // Container of Sidebar, also Friends 19 | .sidebar-container { 20 | color: @gray-light; 21 | font-size: 14px; 22 | h5 { 23 | color: @brand-gray; 24 | padding-bottom: 1em; 25 | a { 26 | color: @brand-gray !important; 27 | text-decoration: none; 28 | } 29 | } 30 | a { 31 | color: @gray-light !important; 32 | &:hover, 33 | &:active { 34 | color: @brand-primary !important; 35 | } 36 | } 37 | .tags { 38 | a { 39 | border-color: @gray-light; 40 | &:hover, 41 | &:active { 42 | border-color: @brand-primary; 43 | } 44 | } 45 | } 46 | .short-about { 47 | img { 48 | width: 80%; 49 | display: block; 50 | border-radius: 5px; 51 | margin-bottom: 20px; 52 | } 53 | p { 54 | margin-top: 0px; 55 | margin-bottom: 20px; 56 | } 57 | .list-inline > li { 58 | padding-left: 0px; 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /feed.xml: -------------------------------------------------------------------------------- 1 | --- 2 | layout: null 3 | --- 4 | 5 | 6 | 7 | {{ site.title | xml_escape }} 8 | {{ site.description | xml_escape }} 9 | {{ site.url }}{{ site.baseurl }}/ 10 | 11 | {{ site.time | date_to_rfc822 }} 12 | {{ site.time | date_to_rfc822 }} 13 | Jekyll v{{ jekyll.version }} 14 | {% for post in site.posts limit:10 %} 15 | 16 | {{ post.title | xml_escape }} 17 | {{ post.content | xml_escape }} 18 | {{ post.date | date_to_rfc822 }} 19 | {{ post.url | prepend: site.baseurl | prepend: site.url }} 20 | {{ post.url | prepend: site.baseurl | prepend: site.url }} 21 | {% for tag in post.tags %} 22 | {{ tag | xml_escape }} 23 | {% endfor %} 24 | {% for cat in post.categories %} 25 | {{ cat | xml_escape }} 26 | {% endfor %} 27 | 28 | {% endfor %} 29 | 30 | 31 | -------------------------------------------------------------------------------- /about.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "About" 4 | description: "When you’re just too socially awkward for real life, a blog welcomes you with open arms." 5 | header-img: "img/about-bg.jpg" 6 | header-mask: 0.3 7 | multilingual: true 8 | --- 9 | 10 | {% include multilingual-sel.html %} 11 | 12 | 13 |
14 | {% capture about_en %}{% include about/en.md %}{% endcapture %} 15 | {{ about_en | markdownify }} 16 |
17 | 18 | 19 | {% if site.disqus_username %} 20 | 21 |
22 |
23 | 24 |
25 |
26 | 27 | 28 | 29 | 41 | 42 | {% endif %} 43 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | description: "Home Page" 4 | --- 5 | 6 | {% for post in paginator.posts %} 7 |
8 | 9 |

10 | {{ post.title }} 11 |

12 | {% if post.subtitle %} 13 |

14 | {{ post.subtitle }} 15 |

16 | {% endif %} 17 |
18 | {% if post.lang == 'en' %} 19 | {{ post.content | strip_html | truncate:300 }} 20 | {% else %} 21 | {{ post.content | strip_html | truncate:200 }} 22 | {% endif %} 23 |
24 |
25 | 28 |
29 |
30 | {% endfor %} 31 | 32 | 33 | {% if paginator.total_pages > 1 %} 34 | 46 | {% endif %} 47 | -------------------------------------------------------------------------------- /_includes/about/en.md: -------------------------------------------------------------------------------- 1 | Hey, I am Rango (a.k.a. _@rangonomics_, _@wardn_). I am a Robotics Engineer by degree, but I consider myself a Software Engineer at the core and have not limited myself to Robotics and its transversal fields. I have deployed web apps for blockchain analytics, trading (don't use it) bots, investment analytics apps, web3 and many more projects. 2 | 3 | In the past, I have led the development of Serena's Autonomous Navigation (ROS2, C++) stack at [Coalescent Mobile Robotics](https://cm-robotics.com/), worked at [Hiventive](https://www.hiventive.com/en/) both as a Back-End Software Engineer (Go, PostgreSQL) and as a Embedded Software Engineer (C++, C). 4 | 5 | I have also been part of the Real Time Systems research team at [LS2N](https://ls2n.fr) for AI Planning, in which I have developed [pymapf](https://github.com/APLA-Toolbox/pymapf) (Multi-Agents Pathfinding Toolbox) and [pyddl](https://github.com/APLA-Toolbox/pythonpddl) (PDDL Parser/Planner). 6 | 7 | I have interned at [Ingeniarius](https://ingeniarius.pt/), where I have worked on [STOP](http://stop.ingeniarius.pt/), [SAFE](http://safeforest.ingeniarius.pt/) and [SEMFIRE](http://semfire.ingeniarius.pt/). 8 | 9 | I completed my BSc. in Electronics from [Nantes Université](https://english.univ-nantes.fr/), followed by a Master's in Embedded Systems at [Bordeaux Ynov Campus](https://www.ynov.com/campus/bordeaux). I then transfered for a Control and Robotics Master's at [Ecole Centrale Nantes](https://www.ec-nantes.fr/english-version), a top 5 graduate school in the country. 10 | 11 | I now started the process of learning Blockchain Technology as well as their web integrations with web3. 12 | 13 | ##### Projects 14 | 15 | - [Trackdrop][1] · A Footprint Tracker on Ethereum's Rollups · 2023 16 | - [Python-Nexo][2] · A Python Wrapper for Nexo Pro's API · 2022 17 | 18 | [1]: https://trackdrop.xyz/ 19 | [2]: https://github.com/guilyx/python-nexo 20 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | require "rubygems" 2 | require 'rake' 3 | require 'yaml' 4 | require 'time' 5 | 6 | SOURCE = "." 7 | CONFIG = { 8 | 'version' => "12.3.2", 9 | 'themes' => File.join(SOURCE, "_includes", "themes"), 10 | 'layouts' => File.join(SOURCE, "_layouts"), 11 | 'posts' => File.join(SOURCE, "_posts"), 12 | 'post_ext' => "md", 13 | 'theme_package_version' => "0.1.0" 14 | } 15 | 16 | # Usage: rake post title="A Title" subtitle="A sub title" 17 | desc "Begin a new post in #{CONFIG['posts']}" 18 | task :post do 19 | abort("rake aborted: '#{CONFIG['posts']}' directory not found.") unless FileTest.directory?(CONFIG['posts']) 20 | title = ENV["title"] || "new-post" 21 | subtitle = ENV["subtitle"] || "This is a subtitle" 22 | slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '') 23 | begin 24 | date = (ENV['date'] ? Time.parse(ENV['date']) : Time.now).strftime('%Y-%m-%d') 25 | rescue Exception => e 26 | puts "Error - date format must be YYYY-MM-DD, please check you typed it correctly!" 27 | exit -1 28 | end 29 | filename = File.join(CONFIG['posts'], "#{date}-#{slug}.#{CONFIG['post_ext']}") 30 | if File.exist?(filename) 31 | abort("rake aborted!") if ask("#{filename} already exists. Do you want to overwrite?", ['y', 'n']) == 'n' 32 | end 33 | 34 | puts "Creating new post: #{filename}" 35 | open(filename, 'w') do |post| 36 | post.puts "---" 37 | post.puts "layout: post" 38 | post.puts "title: \"#{title.gsub(/-/,' ')}\"" 39 | post.puts "subtitle: \"#{subtitle.gsub(/-/,' ')}\"" 40 | post.puts "date: #{date}" 41 | post.puts "author: \"Hux\"" 42 | post.puts "header-img: \"img/post-bg-2015.jpg\"" 43 | post.puts "tags: []" 44 | post.puts "---" 45 | end 46 | end # task :post 47 | 48 | desc "Launch preview environment" 49 | task :preview do 50 | system "jekyll --auto --server" 51 | end # task :preview 52 | 53 | #Load custom rake scripts 54 | Dir['_rake/*.rake'].each { |r| load r } 55 | -------------------------------------------------------------------------------- /less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | 3 | .transition-all() { 4 | -webkit-transition: all 0.5s; 5 | -moz-transition: all 0.5s; 6 | transition: all 0.5s; 7 | } 8 | 9 | .background-cover() { 10 | -webkit-background-size: cover; 11 | -moz-background-size: cover; 12 | background-size: cover; 13 | -o-background-size: cover; 14 | } 15 | 16 | .monospace () { 17 | font-family: "Fira Code", Menlo, Monaco, Consolas, "Courier New", monospace; 18 | } 19 | 20 | .serif() { 21 | font-family: 'Lora', 'Times New Roman', serif; 22 | } 23 | 24 | .sans-serif () { 25 | /* Hux learn from 26 | * TypeIsBeautiful, 27 | * [This Post](http://zhuanlan.zhihu.com/ibuick/20186806) etc. 28 | */ 29 | font-family: 30 | // System Font // https://www.webkit.org/blog/3709/using-the-system-font-in-web-content/ 31 | -apple-system, // OSX ^10.11 & iOS ^9 San Francisco & 苹方 for Safari 32 | BlinkMacSystemFont, // OSX ^10.11 & iOS ^9 San Francisco & 苹方 for Blink 33 | 34 | // English First 35 | "Helvetica Neue", // OSX 36 | "Arial", // Win "Helvetica" 37 | //" Segoe UI", // Win ^8 38 | 39 | // Chinese Fallback 40 | "PingFang SC", // OSX ^10.11 & iOS ^9 苹方(华康信凭黑) 41 | "Hiragino Sans GB", // OSX ^10.6 冬青黑体 42 | "STHeiti", // OSX <10.6 & iOS <9 华文黑体 43 | "Microsoft YaHei", // Win 微软雅黑 44 | "Microsoft JhengHei", // Win 微软正黑 45 | "Source Han Sans SC", // SourceHan - begin 思源黑体 46 | "Noto Sans CJK SC", 47 | "Source Han Sans CN", 48 | "Noto Sans SC", 49 | "Source Han Sans TC", 50 | "Noto Sans CJK TC", // SourceHan - end 51 | "WenQuanYi Micro Hei", // Linux 文泉驿微米黑 52 | SimSun, // Win old 中易宋体 53 | sans-serif; // System Fallback 54 | 55 | line-height: 1.7; 56 | } 57 | -------------------------------------------------------------------------------- /less/side-catalog.less: -------------------------------------------------------------------------------- 1 | // Directory Section 2 | 3 | .catalog-container { 4 | padding: 0px; 5 | } 6 | 7 | .side-catalog { 8 | &.fixed { 9 | position: fixed; 10 | top: -21px; 11 | } 12 | &.fold { 13 | .catalog-toggle::before { 14 | content: "+"; 15 | } 16 | .catalog-body { 17 | display: none; 18 | } 19 | } 20 | .catalog-toggle::before { 21 | content: "−"; 22 | position: relative; 23 | margin-right: 5px; 24 | bottom: 1px; 25 | } 26 | display: block; 27 | overflow: auto; 28 | height: 100%; 29 | padding-bottom: 40px; 30 | width: 195px; 31 | .catalog-body { 32 | position: relative; 33 | list-style: none; 34 | height: auto; 35 | overflow: hidden; 36 | padding-left: 0px; 37 | padding-right: 5px; 38 | text-indent: 0; 39 | li { 40 | position: relative; 41 | list-style: none; 42 | a { 43 | padding-left: 10px; 44 | max-width: 180px; 45 | display: inline-block; 46 | vertical-align: middle; 47 | height: 30px; 48 | line-height: 30px; 49 | overflow: hidden; 50 | text-decoration: none; 51 | white-space: nowrap; 52 | text-overflow: ellipsis; 53 | } 54 | } 55 | .h1_nav, 56 | .h2_nav { 57 | margin-left: 0; 58 | font-size: 13px; 59 | font-weight: bold; 60 | } 61 | .h3_nav { 62 | margin-left: 6px; 63 | font-size: 13px; 64 | font-weight: bold; 65 | } 66 | .h4_nav { 67 | margin-left: 12px; 68 | font-size: 12px; 69 | a { 70 | max-width: 170px; 71 | } 72 | } 73 | .h5_nav .h6_nav { 74 | margin-left: 18px; 75 | font-size: 12px; 76 | a { 77 | max-width: 170px; 78 | } 79 | } 80 | .active { 81 | a { 82 | color: #0085a1 !important; 83 | } 84 | border-radius: 4px; 85 | background-color: #f5f5f5; 86 | } 87 | } 88 | } 89 | 90 | @media (max-width: 1200px) { 91 | .side-catalog { 92 | display: none; 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /less/search.less: -------------------------------------------------------------------------------- 1 | .search-page { 2 | position: fixed; 3 | top: 0; 4 | right: 0; 5 | bottom: 0; 6 | left: 0; 7 | z-index: 100; 8 | background: #fff; 9 | -webkit-transition: all 400ms cubic-bezier(0.32, 1, 0.23, 1); 10 | transition: all 400ms cubic-bezier(0.32, 1, 0.23, 1); 11 | -webkit-transform: translate(0, 100%); 12 | -ms-transform: translate(0, 100%); 13 | transform: translate(0, 100%); 14 | opacity: 0; 15 | 16 | &.search-active { 17 | opacity: 1; 18 | -webkit-transform: translate(0, 0) scale(1, 1); 19 | -ms-transform: translate(0, 0) scale(1, 1); 20 | transform: translate(0, 0) scale(1, 1); 21 | .search-main { 22 | opacity: 1; 23 | } 24 | } 25 | 26 | .search-main { 27 | padding-top: 80px; 28 | height: 100%; 29 | opacity: 0; 30 | -webkit-transition: all 400ms cubic-bezier(0.32, 1, 0.23, 1) 250ms; 31 | transition: all 400ms cubic-bezier(0.32, 1, 0.23, 1) 250ms; 32 | .row, 33 | .row > div { 34 | height: 100%; 35 | } 36 | } 37 | 38 | .search-icon-close-container { 39 | position: absolute; 40 | z-index: 1; 41 | padding: 16px; 42 | top: 0; 43 | right: 2px; 44 | i { 45 | font-size: 20px; 46 | } 47 | } 48 | 49 | #search-input { 50 | .monospace; 51 | 52 | // poorman's reset 53 | border: none; 54 | outline: none; 55 | padding: 0; 56 | margin: 0; 57 | // poorman's reset end 58 | 59 | width: 100%; 60 | font-size: 30px; 61 | font-weight: bold; 62 | color: @gray-dark; 63 | 64 | @media only screen and (min-width: 768px) { 65 | margin-left: 20px; 66 | } 67 | } 68 | 69 | #search-results { 70 | overflow: auto; 71 | height: 100%; 72 | -webkit-overflow-scrolling: touch; 73 | padding-bottom: 80px; 74 | } 75 | } 76 | 77 | .search-icon a, 78 | .search-icon-close { 79 | cursor: pointer; 80 | font-size: 30px; 81 | color: #311e3e; 82 | -webkit-transition: all 0.25s; 83 | transition: all 0.25s; 84 | } 85 | 86 | .search-icon a:hover, 87 | .search-icon-close:hover { 88 | opacity: 0.8; 89 | } 90 | 91 | .search-icon, 92 | .search-icon-close { 93 | font-size: 16px; 94 | } 95 | -------------------------------------------------------------------------------- /js/sw-registration.js: -------------------------------------------------------------------------------- 1 | /* =========================================================== 2 | * sw-registration.js 3 | * =========================================================== 4 | * Copyright 2016 @huxpro 5 | * Licensed under Apache 2.0 6 | * Register service worker. 7 | * ========================================================== */ 8 | 9 | // SW Version Upgrade Ref: 10 | 11 | function handleRegistration(registration){ 12 | console.log('Service Worker Registered. ', registration) 13 | /** 14 | * ServiceWorkerRegistration.onupdatefound 15 | * The service worker registration's installing worker changes. 16 | */ 17 | registration.onupdatefound = (e) => { 18 | const installingWorker = registration.installing; 19 | installingWorker.onstatechange = (e) => { 20 | if (installingWorker.state !== 'installed') return; 21 | if (navigator.serviceWorker.controller) { 22 | console.log('SW is updated'); 23 | } else { 24 | console.log('A Visit without previous SW'); 25 | createSnackbar({ 26 | message: 'App ready for offline use.', 27 | duration: 3000 28 | }) 29 | } 30 | }; 31 | } 32 | } 33 | 34 | if(navigator.serviceWorker){ 35 | // For security reasons, a service worker can only control the pages 36 | // that are in the same directory level or below it. That's why we put sw.js at ROOT level. 37 | navigator.serviceWorker 38 | .register('/sw.js') 39 | .then((registration) => handleRegistration(registration)) 40 | .catch((error) => {console.log('ServiceWorker registration failed: ', error)}) 41 | 42 | // register message receiver 43 | // https://dbwriteups.wordpress.com/2015/11/16/service-workers-part-3-communication-between-sw-and-pages/ 44 | navigator.serviceWorker.onmessage = (e) => { 45 | console.log('SW: SW Broadcasting:', event); 46 | const data = e.data 47 | 48 | if(data.command == "UPDATE_FOUND"){ 49 | console.log("UPDATE_FOUND_BY_SW", data); 50 | createSnackbar({ 51 | message: "Content updated.", 52 | actionText:"refresh", 53 | action: function(e){location.reload()} 54 | }) 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /js/snackbar.js: -------------------------------------------------------------------------------- 1 | /** 2 | * SnackBar.js 3 | * 4 | * This small component is borrowed from 5 | * https://codepen.io/wibblymat/pen/avAjq 6 | */ 7 | 8 | 9 | var createSnackbar = (function() { 10 | // Any snackbar that is already shown 11 | var previous = null; 12 | 13 | /* 14 |
15 | 16 | This is a longer message that won't fit on one line. It is, inevitably, quite a boring thing. Hopefully it is still useful. 17 |
18 | */ 19 | 20 | return function(config) { 21 | var message = config.message, 22 | actionText = config.actionText, 23 | action = config.action, 24 | duration = config.duration; 25 | 26 | if (previous) { 27 | previous.dismiss(); 28 | } 29 | var snackbar = document.createElement('div'); 30 | snackbar.className = 'paper-snackbar'; 31 | snackbar.dismiss = function() { 32 | this.style.opacity = 0; 33 | }; 34 | var text = document.createTextNode(message); 35 | snackbar.appendChild(text); 36 | if (actionText) { 37 | if (!action) { 38 | action = snackbar.dismiss.bind(snackbar); 39 | } 40 | var actionButton = document.createElement('button'); 41 | actionButton.className = 'action'; 42 | actionButton.innerHTML = actionText; 43 | actionButton.addEventListener('click', action); 44 | snackbar.appendChild(actionButton); 45 | } 46 | setTimeout(function() { 47 | if (previous === this) { 48 | previous.dismiss(); 49 | } 50 | }.bind(snackbar), duration || 5000); 51 | 52 | snackbar.addEventListener('transitionend', function(event, elapsed) { 53 | if (event.propertyName === 'opacity' && this.style.opacity == 0) { 54 | this.parentElement.removeChild(this); 55 | if (previous === this) { 56 | previous = null; 57 | } 58 | } 59 | }.bind(snackbar)); 60 | 61 | 62 | 63 | previous = snackbar; 64 | document.body.appendChild(snackbar); 65 | // In order for the animations to trigger, I have to force the original style to be computed, and then change it. 66 | getComputedStyle(snackbar).bottom; 67 | snackbar.style.bottom = '0px'; 68 | snackbar.style.opacity = 1; 69 | }; 70 | })(); 71 | -------------------------------------------------------------------------------- /_layouts/page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | 6 | {% include intro-header.html type='page' %} 7 | 8 | 9 |
10 |
11 | {% if site.sidebar == false %} 12 | 13 | 14 |
16 | {{ content }} 17 |
18 | 19 | 27 | {% else %} 28 | 29 | 30 | 31 |
33 | {{ content }} 34 |
35 | 36 | 50 | {% endif %} 51 |
52 |
53 | 54 | {% if site.page-mathjax %} 55 | 56 | 57 | 58 | 72 | 74 | {% endif %} 75 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | 3 | // Project configuration. 4 | grunt.initConfig({ 5 | pkg: grunt.file.readJSON('package.json'), 6 | uglify: { 7 | main: { 8 | src: 'js/<%= pkg.name %>.js', 9 | dest: 'js/<%= pkg.name %>.min.js' 10 | } 11 | }, 12 | less: { 13 | expanded: { 14 | options: { 15 | paths: ["css"] 16 | }, 17 | files: { 18 | "css/<%= pkg.name %>.css": "less/<%= pkg.name %>.less" 19 | } 20 | }, 21 | minified: { 22 | options: { 23 | paths: ["css"], 24 | cleancss: true 25 | }, 26 | files: { 27 | "css/<%= pkg.name %>.min.css": "less/<%= pkg.name %>.less" 28 | } 29 | } 30 | }, 31 | banner: '/*!\n' + 32 | ' * <%= pkg.title %> v<%= pkg.version %> (<%= pkg.homepage %>)\n' + 33 | ' * Copyright <%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' + 34 | ' */\n', 35 | usebanner: { 36 | dist: { 37 | options: { 38 | position: 'top', 39 | banner: '<%= banner %>' 40 | }, 41 | files: { 42 | src: ['css/<%= pkg.name %>.css', 'css/<%= pkg.name %>.min.css', 'js/<%= pkg.name %>.min.js'] 43 | } 44 | } 45 | }, 46 | watch: { 47 | scripts: { 48 | files: ['js/<%= pkg.name %>.js'], 49 | tasks: ['uglify'], 50 | options: { 51 | spawn: false, 52 | }, 53 | }, 54 | less: { 55 | files: ['less/*.less'], 56 | tasks: ['less'], 57 | options: { 58 | spawn: false, 59 | } 60 | }, 61 | }, 62 | }); 63 | 64 | // Load the plugins. 65 | grunt.loadNpmTasks('grunt-contrib-uglify'); 66 | grunt.loadNpmTasks('grunt-contrib-less'); 67 | grunt.loadNpmTasks('grunt-banner'); 68 | grunt.loadNpmTasks('grunt-contrib-watch'); 69 | 70 | // Default task(s). 71 | grunt.registerTask('default', ['uglify', 'less', 'usebanner']); 72 | 73 | }; 74 | -------------------------------------------------------------------------------- /js/jquery.tagcloud.js: -------------------------------------------------------------------------------- 1 | (function($) { 2 | 3 | $.fn.tagcloud = function(options) { 4 | var opts = $.extend({}, $.fn.tagcloud.defaults, options); 5 | tagWeights = this.map(function(){ 6 | return $(this).attr("rel"); 7 | }); 8 | tagWeights = jQuery.makeArray(tagWeights).sort(compareWeights); 9 | lowest = tagWeights[0]; 10 | highest = tagWeights.pop(); 11 | range = highest - lowest; 12 | if(range === 0) {range = 1;} 13 | // Sizes 14 | if (opts.size) { 15 | fontIncr = (opts.size.end - opts.size.start)/range; 16 | } 17 | // Colors 18 | if (opts.color) { 19 | colorIncr = colorIncrement (opts.color, range); 20 | } 21 | return this.each(function() { 22 | weighting = $(this).attr("rel") - lowest; 23 | if (opts.size) { 24 | $(this).css({"font-size": opts.size.start + (weighting * fontIncr) + opts.size.unit}); 25 | } 26 | if (opts.color) { 27 | // change color to background-color 28 | $(this).css({"backgroundColor": tagColor(opts.color, colorIncr, weighting)}); 29 | } 30 | }); 31 | }; 32 | 33 | $.fn.tagcloud.defaults = { 34 | size: {start: 14, end: 18, unit: "pt"} 35 | }; 36 | 37 | // Converts hex to an RGB array 38 | function toRGB (code) { 39 | if (code.length == 4) { 40 | code = jQuery.map(/\w+/.exec(code), function(el) {return el + el; }).join(""); 41 | } 42 | hex = /(\w{2})(\w{2})(\w{2})/.exec(code); 43 | return [parseInt(hex[1], 16), parseInt(hex[2], 16), parseInt(hex[3], 16)]; 44 | } 45 | 46 | // Converts an RGB array to hex 47 | function toHex (ary) { 48 | return "#" + jQuery.map(ary, function(i) { 49 | hex = i.toString(16); 50 | hex = (hex.length == 1) ? "0" + hex : hex; 51 | return hex; 52 | }).join(""); 53 | } 54 | 55 | function colorIncrement (color, range) { 56 | return jQuery.map(toRGB(color.end), function(n, i) { 57 | return (n - toRGB(color.start)[i])/range; 58 | }); 59 | } 60 | 61 | function tagColor (color, increment, weighting) { 62 | rgb = jQuery.map(toRGB(color.start), function(n, i) { 63 | ref = Math.round(n + (increment[i] * weighting)); 64 | if (ref > 255) { 65 | ref = 255; 66 | } else { 67 | if (ref < 0) { 68 | ref = 0; 69 | } 70 | } 71 | return ref; 72 | }); 73 | return toHex(rgb); 74 | } 75 | 76 | function compareWeights(a, b) 77 | { 78 | return a - b; 79 | } 80 | 81 | })(jQuery); 82 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [Hux Blog](https://huangxuan.me) 2 | ================================ 3 | 4 | > I never expect this becomes popular. 5 | 6 | ![](http://huangxuan.me/img/blog-desktop.jpg) 7 | 8 | 9 | [User Manual 👉](_doc/Manual.md) 10 | -------------------------------------------------- 11 | 12 | ### Getting Started 13 | 14 | 1. You will need [Ruby](https://www.ruby-lang.org/en/) and [Bundler](https://bundler.io/) to use [Jekyll](https://jekyllrb.com/). Following [Using Jekyll with Bundler](https://jekyllrb.com/tutorials/using-jekyll-with-bundler/) to fullfill the enviromental requirement. 15 | 16 | 2. Installed dependencies in the `Gemfile`: 17 | 18 | ```sh 19 | $ bundle install 20 | ``` 21 | 22 | 3. Serve the website (`localhost:4000` by default): 23 | 24 | ```sh 25 | $ bundle exec jekyll serve # alternatively, npm start 26 | ``` 27 | 28 | ### Development (Build From Source) 29 | 30 | To modify the theme, you will need [Grunt](https://gruntjs.com/). There are numbers of tasks you can find in the `Gruntfile.js`, includes minifing JavaScript, compiling `.less` to `.css`, adding banners to keep the Apache 2.0 license intact, watching for changes, etc. 31 | 32 | Yes, they were inherited and are extremely old-fashioned. There is no modularization and transpilation, etc. 33 | 34 | Critical Jekyll-related code are located in `_include/` and `_layouts/`. Most of them are [Liquid](https://github.com/Shopify/liquid/wiki) templates. 35 | 36 | This theme uses the default code syntax highlighter of jekyll, [Rouge](http://rouge.jneen.net/), which is compatible with Pygments theme so just pick any pygments theme css (e.g. from [here](http://jwarby.github.io/jekyll-pygments-themes/languages/javascript.html) and replace the content of `highlight.less`. 37 | 38 | 39 | ### Interesting to know more? Checkout the [full user manual](_doc/Manual.md)! 40 | 41 | 42 | Other Resources 43 | --------------- 44 | 45 | Ports 46 | - [**Hexo**](https://github.com/Kaijun/hexo-theme-huxblog) by @kaijun 47 | - [**React-SSR**](https://github.com/LucasIcarus/huxpro.github.io/tree/ssr) by @LucasIcarus 48 | 49 | [Starter/Boilerplate](https://github.com/huxpro/huxblog-boilerplate) 50 | - Out of date. Helps wanted for updating it on par with the main repo 51 | 52 | 53 | License 54 | ------- 55 | 56 | Apache License 2.0. 57 | Copyright (c) 2015-present Huxpro 58 | 59 | Hux Blog is derived from [Clean Blog Jekyll Theme (MIT License)](https://github.com/BlackrockDigital/startbootstrap-clean-blog-jekyll/) 60 | Copyright (c) 2013-2016 Blackrock Digital LLC. 61 | -------------------------------------------------------------------------------- /_includes/sns-links.html: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | @param {Boolean} center 3 | {% endcomment %} 4 | 5 | {% if include.center %} 6 |
    7 | {% else %} 8 | -------------------------------------------------------------------------------- /archive.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Archive 3 | layout: default 4 | description: "It's cold in the archives, and there's nobody there. I belong in the archives. I am cold too." 5 | header-img: "img/archive.jpg" 6 | --- 7 | 8 | 12 | 13 | {% include intro-header.html type='page' short=true %} 14 | 15 | 16 |
    17 |
    18 |
    19 | 20 |
    21 | 22 | Show All 23 | {{site.posts.size}} 24 | 25 | 26 | {% capture tags %} 27 | {% for tag in site.tags %} 28 | 31 | {{ tag[0] }} 32 | {{tag[1].size}} 33 | __SEPERATOR__ 34 | {% endfor %} 35 | {% endcapture %} 36 | {{ tags | split:'__SEPERATOR__' | sort }} 37 |
    38 | 39 | 40 |
    41 | {%- assign _sorted_list = site.posts -%} 42 | {%- assign _sorted_list = _sorted_list | sort: 'date' -%} 43 | {%- assign _sorted_list = _sorted_list | reverse -%} 44 | 45 | 46 | {%- for _article in _sorted_list -%} 47 | {%- assign _tags = '' -%} 48 | {%- for _tag in _article.tags -%} 49 | {%- assign _tag_encode = _tag | strip | url_encode -%} 50 | {%- if forloop.last -%} 51 | {%- assign _tags = _tags | append: _tag_encode -%} 52 | {%- else -%} 53 | {%- assign _tags = _tags | append: _tag_encode | append: ',' -%} 54 | {%- endif -%} 55 | {%- endfor -%} 56 | 57 | {% comment %} group by year {% endcomment %} 58 | {%- assign _currentdate = _article.date | date: '%Y' -%} 59 | {%- if _currentdate != _date -%} 60 | {%- unless forloop.first -%}{%- endunless -%} 61 |
    62 | 63 | {{ _currentdate }} 64 | 65 | {%- assign _date = _currentdate -%} 66 | {%- endif -%} 67 | 68 |
    69 | 70 |

    71 | {{ _article.title }} 72 |

    73 | {% if _article.subtitle %} 74 |

    75 | {{ _article.subtitle }} 76 |

    77 | {% endif %} 78 |
    79 |
    80 |
    81 | {%- if forloop.last -%} 82 |
    {%- endif -%} 83 | {% endfor %} 84 |
    85 |
    86 |
    87 |
    88 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # Site settings 2 | title: Rango's Blog 3 | SEOTitle: Rango Blog 4 | header-img: img/home-bg.jpg 5 | email: rangonomics@gmail.com 6 | description: "Rango's Blog Page | Learning, Lifestyle, Experiences" 7 | keyword: "Rango, Rango Blog, Github Pages, Web, JavaScript, React, React Native" 8 | url: "guilyx.github.com" # your host, for absolute URL 9 | baseurl: "" # for example, '/blog' if your blog hosted on 'host/blog' 10 | 11 | # Publish posts or collection documents with a future date. 12 | future: true 13 | 14 | # SNS settings 15 | RSS: false 16 | github_username: guilyx 17 | twitter_username: rangonomics 18 | #facebook_username: huxpro 19 | #linkedin_username: huxpro 20 | 21 | # Build settings 22 | # from 2016, 'pygments' is unsupported on GitHub Pages. Use 'rouge' for highlighting instead. 23 | highlighter: rouge 24 | permalink: pretty 25 | paginate: 10 26 | exclude: 27 | [ 28 | "less", 29 | "node_modules", 30 | "Gruntfile.js", 31 | "package.json", 32 | "README.md", 33 | ] 34 | anchorjs: true # if you want to customize anchor. check out line:181 of `post.html` 35 | # If you have timezone issue (e.g. #68) in China, uncomment to use this: 36 | #timezone: CN 37 | 38 | # Gems 39 | # from PR#40, to support local preview for Jekyll 3.0 40 | # make sure you have this gem installed 41 | # `$ gem install jekyll-paginate` 42 | plugins: [jekyll-paginate] 43 | 44 | # Markdown settings 45 | # replace redcarpet to kramdown, 46 | # although redcarpet can auto highlight code, the lack of header-id make the catalog impossible, so I switch to kramdown 47 | # document: http://jekyllrb.com/docs/configuration/#kramdown 48 | markdown: kramdown 49 | kramdown: 50 | input: GFM # use Github Flavored Markdown !important 51 | syntax_highlighter_opts: 52 | span: 53 | line_numbers: false 54 | block: 55 | line_numbers: true 56 | start_line: 1 57 | 58 | # Disqus settings 59 | # disqus_username: hux 60 | 61 | # Netease settings 62 | netease_comment: false 63 | 64 | # Analytics settings 65 | # Baidu Analytics 66 | # ba_track_id: [your track id] 67 | 68 | # Google Analytics 69 | ga_track_id: "G-L60Z89VR35" # Format: UA-xxxxxx-xx 70 | ga_domain: guilyx.github.io 71 | 72 | # Sidebar settings 73 | sidebar: true # whether or not using Sidebar. 74 | sidebar-about-description: "Rango
    Swarm Team @ ATRC" 75 | sidebar-avatar: https://github.com/guilyx.png # use absolute URL, seeing it's used in both `/` and `/about/` 76 | 77 | # Featured Tags 78 | featured-tags: true # whether or not using Feature-Tags 79 | featured-condition-size: 1 # A tag will be featured if the size of it is more than this condition value 80 | 81 | # Progressive Web Apps 82 | chrome-tab-theme-color: "#000000" 83 | service-worker: true 84 | 85 | # MathJax rendering for layout:page (e.g. post preview) 86 | page-mathjax: false 87 | 88 | # Friends 89 | friends: 90 | [ 91 | { title: "Open PR to be featured!", href: "https://github.com/guilyx/guilyx.github.io/pulls" }, 92 | ] 93 | -------------------------------------------------------------------------------- /js/hux-blog.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Clean Blog v1.0.0 (http://startbootstrap.com) 3 | * Copyright 2015 Start Bootstrap 4 | * Licensed under Apache 2.0 (https://github.com/IronSummitMedia/startbootstrap/blob/gh-pages/LICENSE) 5 | */ 6 | 7 | /*! 8 | * Hux Blog v1.6.0 (http://startbootstrap.com) 9 | * Copyright 2016 @huxpro 10 | * Licensed under Apache 2.0 11 | */ 12 | 13 | // Tooltip Init 14 | // Unuse by Hux since V1.6: Titles now display by default so there is no need for tooltip 15 | // $(function() { 16 | // $("[data-toggle='tooltip']").tooltip(); 17 | // }); 18 | 19 | 20 | // make all images responsive 21 | /* 22 | * Unuse by Hux 23 | * actually only Portfolio-Pages can't use it and only post-img need it. 24 | * so I modify the _layout/post and CSS to make post-img responsive! 25 | */ 26 | // $(function() { 27 | // $("img").addClass("img-responsive"); 28 | // }); 29 | 30 | // responsive tables 31 | $(document).ready(function() { 32 | $("table").wrap("
    "); 33 | $("table").addClass("table"); 34 | }); 35 | 36 | // responsive embed videos 37 | $(document).ready(function() { 38 | $('iframe[src*="youtube.com"]').wrap('
    '); 39 | $('iframe[src*="youtube.com"]').addClass('embed-responsive-item'); 40 | $('iframe[src*="vimeo.com"]').wrap('
    '); 41 | $('iframe[src*="vimeo.com"]').addClass('embed-responsive-item'); 42 | }); 43 | 44 | // Navigation Scripts to Show Header on Scroll-Up 45 | jQuery(document).ready(function($) { 46 | var MQL = 1170; 47 | 48 | //primary navigation slide-in effect 49 | if ($(window).width() > MQL) { 50 | var headerHeight = $('.navbar-custom').height(), 51 | bannerHeight = $('.intro-header .container').height(); 52 | $(window).on('scroll', { 53 | previousTop: 0 54 | }, 55 | function() { 56 | var currentTop = $(window).scrollTop(), 57 | $catalog = $('.side-catalog'); 58 | 59 | //check if user is scrolling up by mouse or keyborad 60 | if (currentTop < this.previousTop) { 61 | //if scrolling up... 62 | if (currentTop > 0 && $('.navbar-custom').hasClass('is-fixed')) { 63 | $('.navbar-custom').addClass('is-visible'); 64 | } else { 65 | $('.navbar-custom').removeClass('is-visible is-fixed'); 66 | } 67 | } else { 68 | //if scrolling down... 69 | $('.navbar-custom').removeClass('is-visible'); 70 | if (currentTop > headerHeight && !$('.navbar-custom').hasClass('is-fixed')) $('.navbar-custom').addClass('is-fixed'); 71 | } 72 | this.previousTop = currentTop; 73 | 74 | 75 | //adjust the appearance of side-catalog 76 | $catalog.show() 77 | if (currentTop > (bannerHeight + 41)) { 78 | $catalog.addClass('fixed') 79 | } else { 80 | $catalog.removeClass('fixed') 81 | } 82 | }); 83 | } 84 | }); -------------------------------------------------------------------------------- /_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | {% case page.layout %} 14 | {% when 'post' %} 15 | 16 | 17 | {% if page.date %} 18 | 19 | {% endif %} 20 | {% if page.author %} 21 | 22 | {% endif %} 23 | {% for tag in page.tags %} 24 | 25 | {% endfor %} 26 | {% else %} 27 | 28 | 30 | {% endcase %} 31 | 32 | 33 | 34 | 35 | {% if page.title %}{{ page.title }} - {{ site.SEOTitle }}{% else %}{{ site.SEOTitle }}{% endif %} 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 57 | 58 | 59 | 60 | 61 | 65 | 66 | 67 | 68 | 69 | 70 | 72 | 73 | -------------------------------------------------------------------------------- /_posts/2024-12-15-fun-projects.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "A testimony to my work" 4 | author: "Rango" 5 | catalog: true 6 | header-img: "img/post-bg-rwd.jpg" 7 | header-mask: 0.4 8 | tags: 9 | - Portfolio 10 | - Software 11 | - Personal 12 | --- 13 | 14 | ## LINKS 15 | 16 | - 💾 My Blog: guilyx.github.io 17 | - 🧑‍💻 My GitHub: github.com/guilyx 18 | - 🤖 Hunter (AI Agent): drpxbt.xyz 19 | - 💡 Send requests to help build Hunter: drpxbt.featurebase.app 20 | - 📈 Track your L2 Activity: trackdrop.xyz 21 | - 💰 Generate Ethereum Wallets: etherspawn.xyz 22 | - 🔎 Dune Analytics: dune.com/rangonomics 23 | 24 | ## More fun projects by me (don’t fit in my bio) 25 | 26 | - Contributed to Planning Algorithms in TheAlgorithms/Python 27 | - Contributed to Planning Algorithms in AtsushiSakai/PythonRobotics 28 | - Maintainer of APLA-Toolbox/PythonPDDL, a PDDL solver based on the works of ztangent at MIT 29 | - Lejeune, E. & Saakar, S. (2023). Survey of the Multi-Agent Pathfinding Solutions 30 | - Decentralized Acceleration-Based Bird-Inspired Flocking, published at IROS2024 31 | - VirtualSTM32: a functional virtual prototype of STM32s using QEMU, SystemC, and a virtualized weather station 32 | 33 | ## Challenges 34 | 35 | When I talk about all this building—spinning up AI tools, writing scripts, or coding random prototypes—I usually get asked: “But how much money do you make from it?” The answer, most of the time, is “none.” And that seems to leave people puzzled, like a hobby without a financial motive doesn’t make sense. 36 | But let’s be real. We wouldn’t knock someone who enjoys playing basketball just because they’re not aiming to join the NBA. The same logic applies here. Even if I occasionally do this stuff during work hours, I’m not doing it for a direct payday—I’m doing it because the creative process is fun. I still have a life; I go out, catch movies, grab drinks, and hang at the beach. But I also love the late-night grind, the frustration, the “aha!” moments. If that makes me a sicko, so be it. 37 | 38 | ## The Shonen Spark 39 | I realized quite some time ago that my love for building - or anything in this world than includes grinding - mirrors what anime fans call the Shonen Spirit. In series like Naruto, One Piece, Dragon Ball, you see heroes training relentlessly for the sheer thrill of self-improvement. They don’t always chase fame or fortune; they chase the next level—new forms, new power-ups. And it’s not just about power; it’s about resilience, kindness, obsession, and that carefree determination. 40 | So, yes, I might not be hauling hundred-ton weights or launching Kamehameha waves, but I’m on my own training arc when it comes to software and product creation. Each new project is like discovering a different “quirk”—and I train it until it’s second nature. 41 | 42 | ## Final Thoughts 43 | You don’t have to profit from something to love it. You don’t have to be a prodigy to find passion. And you definitely don’t need everyone’s approval to keep going. There’s joy in the process, in the challenge itself, and in measuring your growth against who you were yesterday. If that aligns with Shonen Spirit, then I guess I’m living my own anime arc. 44 | 45 | Whether you’re building code, exploring your own unique quirk, or grinding out personal bests in sports, the goal is the same: keep training, keep learning, and keep being you. Another thing that makes it 10x better is finding people with the same mindset, surround yourself with them and build together. I know this might be a loner activity for most builders, but I've found sharing (even if I build my own thing and not as a group) experiences with these people transformative. That, in my book, is where the real fun begins. 46 | -------------------------------------------------------------------------------- /js/animatescroll.min.js: -------------------------------------------------------------------------------- 1 | /* Coded by Ramswaroop */ 2 | (function(e){e.easing["jswing"]=e.easing["swing"];e.extend(e.easing,{def:"easeOutQuad",swing:function(t,n,r,i,s){return e.easing[e.easing.def](t,n,r,i,s)},easeInQuad:function(e,t,n,r,i){return r*(t/=i)*t+n},easeOutQuad:function(e,t,n,r,i){return-r*(t/=i)*(t-2)+n},easeInOutQuad:function(e,t,n,r,i){if((t/=i/2)<1)return r/2*t*t+n;return-r/2*(--t*(t-2)-1)+n},easeInCubic:function(e,t,n,r,i){return r*(t/=i)*t*t+n},easeOutCubic:function(e,t,n,r,i){return r*((t=t/i-1)*t*t+1)+n},easeInOutCubic:function(e,t,n,r,i){if((t/=i/2)<1)return r/2*t*t*t+n;return r/2*((t-=2)*t*t+2)+n},easeInQuart:function(e,t,n,r,i){return r*(t/=i)*t*t*t+n},easeOutQuart:function(e,t,n,r,i){return-r*((t=t/i-1)*t*t*t-1)+n},easeInOutQuart:function(e,t,n,r,i){if((t/=i/2)<1)return r/2*t*t*t*t+n;return-r/2*((t-=2)*t*t*t-2)+n},easeInQuint:function(e,t,n,r,i){return r*(t/=i)*t*t*t*t+n},easeOutQuint:function(e,t,n,r,i){return r*((t=t/i-1)*t*t*t*t+1)+n},easeInOutQuint:function(e,t,n,r,i){if((t/=i/2)<1)return r/2*t*t*t*t*t+n;return r/2*((t-=2)*t*t*t*t+2)+n},easeInSine:function(e,t,n,r,i){return-r*Math.cos(t/i*(Math.PI/2))+r+n},easeOutSine:function(e,t,n,r,i){return r*Math.sin(t/i*(Math.PI/2))+n},easeInOutSine:function(e,t,n,r,i){return-r/2*(Math.cos(Math.PI*t/i)-1)+n},easeInExpo:function(e,t,n,r,i){return t==0?n:r*Math.pow(2,10*(t/i-1))+n},easeOutExpo:function(e,t,n,r,i){return t==i?n+r:r*(-Math.pow(2,-10*t/i)+1)+n},easeInOutExpo:function(e,t,n,r,i){if(t==0)return n;if(t==i)return n+r;if((t/=i/2)<1)return r/2*Math.pow(2,10*(t-1))+n;return r/2*(-Math.pow(2,-10*--t)+2)+n},easeInCirc:function(e,t,n,r,i){return-r*(Math.sqrt(1-(t/=i)*t)-1)+n},easeOutCirc:function(e,t,n,r,i){return r*Math.sqrt(1-(t=t/i-1)*t)+n},easeInOutCirc:function(e,t,n,r,i){if((t/=i/2)<1)return-r/2*(Math.sqrt(1-t*t)-1)+n;return r/2*(Math.sqrt(1-(t-=2)*t)+1)+n},easeInElastic:function(e,t,n,r,i){var s=1.70158;var o=0;var u=r;if(t==0)return n;if((t/=i)==1)return n+r;if(!o)o=i*.3;if(u 2 | {% if page.nav-style == "invert" or page.header-style == "text" %} 3 |