<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://blog.tonyhhyip.me/feed.xml" rel="self" type="application/atom+xml" /><link href="https://blog.tonyhhyip.me/" rel="alternate" type="text/html" /><updated>2026-05-28T11:05:40+00:00</updated><id>https://blog.tonyhhyip.me/feed.xml</id><title type="html">Tony’s Blog</title><subtitle></subtitle><author><name>Tony Yip</name></author><entry><title type="html">Using Jupyter notebook for internal operator</title><link href="https://blog.tonyhhyip.me/2020/04/16/jupyter-notebook-operation.html" rel="alternate" type="text/html" title="Using Jupyter notebook for internal operator" /><published>2020-04-16T00:00:00+00:00</published><updated>2020-04-16T00:00:00+00:00</updated><id>https://blog.tonyhhyip.me/2020/04/16/jupyter-notebook-operation</id><content type="html" xml:base="https://blog.tonyhhyip.me/2020/04/16/jupyter-notebook-operation.html"><![CDATA[<p><img src="/assets/2020/04/16/Jupyter-1.webp" alt="Jupyter Logo" /></p>

<p>Since I am going to leave the company and I would like to provide the UI for internal operator who have no idea in coding, making it available on the Angular console would take up long time, so Jupyter came into my mind.</p>

<p>Using Jupyter, I could directly write script for operator. The operator could just click the “run” button the selected section of the script to perform what they would like to perform and modify the parameter easily thanks to the great easy-to-read syntax of Python.</p>

<p>In order to prevent caseless remove of detail operation script, I put those script into a Python module and import it in the notebook, so that the script display on the notebook for the operator is just a call of function.</p>

<p>Jupyter could be a kind of tool to provide a simple interface for those internal operator who don’t know coding, but though a well-designed web console would be great.</p>]]></content><author><name>Tony Yip</name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Auto Dependencies Injection in Golang</title><link href="https://blog.tonyhhyip.me/2020/03/20/golang-di.html" rel="alternate" type="text/html" title="Auto Dependencies Injection in Golang" /><published>2020-03-20T00:00:00+00:00</published><updated>2020-03-20T00:00:00+00:00</updated><id>https://blog.tonyhhyip.me/2020/03/20/golang-di</id><content type="html" xml:base="https://blog.tonyhhyip.me/2020/03/20/golang-di.html"><![CDATA[<p>Struct field and interface in Golang make it great to have dependencies injection. However, making out a deep-layered and highly customize configuration with dependencies injection would make it a hard time. Auto dependencies injection would be great for me.</p>

<p>In the old day, I was using <a href="https://github.com/facebookgo/inject">github.com/facebookgo/inject</a> for auto DI. However, playing with reflection in Golang is really harmful to the performance and boot time. If a long boot time would be acceptable, then I would just go with Spring and its DI.</p>

<p>Recently, I came across with <a href="https://github.com/google/wire">github.com/google/wire</a>. The dependencies injection is done at compile time. It makes use of the go parser for understanding the type to inject in the placeholder function with a different tag of <code class="language-plaintext highlighter-rouge">wireinject</code> and generate out the real function with non <code class="language-plaintext highlighter-rouge">wireinject</code> tag. It provides a good runtime performance and way for easy to debug and trace in the injection process.</p>

<p>wire is also used in <a href="http://gocloud.dev/">go-cloud</a>, a project by Google for enabling access different cloud in one interface. I think I will use wire for project in current.</p>]]></content><author><name>Tony Yip</name></author><summary type="html"><![CDATA[Struct field and interface in Golang make it great to have dependencies injection. However, making out a deep-layered and highly customize configuration with dependencies injection would make it a hard time. Auto dependencies injection would be great for me.]]></summary></entry><entry><title type="html">The rebuild of HKOSCon 2019 website whitepaper</title><link href="https://blog.tonyhhyip.me/2019/04/01/hkoscon-2019-rebuild.html" rel="alternate" type="text/html" title="The rebuild of HKOSCon 2019 website whitepaper" /><published>2019-04-01T00:00:00+00:00</published><updated>2019-04-01T00:00:00+00:00</updated><id>https://blog.tonyhhyip.me/2019/04/01/hkoscon-2019-rebuild</id><content type="html" xml:base="https://blog.tonyhhyip.me/2019/04/01/hkoscon-2019-rebuild.html"><![CDATA[<p>P.S. As due to some of the HKOSCon committee cannot stand for the original version, you are reminded that this is <strong>not</strong> a publishment of the HKOSCon official</p>

<p>Recently, the conference committee has updated and released the result of the call for paper on the website. And we, Team 404 Busters, found the website performance in some remote area and old mobile device is pretty poor, this leads us to deeply reflect on the design of the website.</p>

<h2 id="the-goal-of-the-re-design">The goal of the re-design</h2>

<p>The main goal of the re-build is to provide a great experience to everyone, no matter how poor is the network and how old is your mobile browser.</p>

<h3 id="the-reason-behind-the-problem">The reason behind the problem</h3>

<p>In order to archive the goal, we have made a lot of research and benchmarking in different network condition and device, and for a more accurate result, we measure it in a packed underground metro in both Hong Kong and Taipei during the peak hour.</p>

<p>The data collected during the research tell us the reason behind the issues: it is because the parsing engine of the browser is too slow while we current render the website with Vue.js. To overcome this, we have to make the page to be as simple as possible, so that the parsing engine wouldn’t take long to parse all the code.</p>

<h2 id="solution">Solution</h2>

<p>In order to overcome the problem, we have tried on making the whole page is in one small HTML with some style tag only. However, it stills takes much time to download for the poor network condition.</p>

<p>During the research, we come up with a new idea after reading <a href="https://medium.com/flutter-io/hummingbird-building-flutter-for-the-web-e687c2a023a8">an article published by Flutter</a>. Since Hummingbird is not yet published, so we decided using Rust Web Assembly to write our own implements of the Flutter embedding API.</p>

<p>With the power of Flutter, we are able to render the page as rendering engine itself while skipping the parsing process. The result is so great, the benchmark on metro test has dropped down to less than 0.1s for loading the whole page. After finish loading the page, you can drop offline and continue to browse the page.</p>

<p><img src="/assets/2019/04/01/HKOSCon2019-1.webp" alt="Masked Conference Brand New Landing Page due to the complaint of logo and conference name (ask me if you want to see the original one)" /></p>

<h2 id="conclusion">Conclusion</h2>

<p>Thanks for reading tills here and have a Happy April Fool. We are having some re-design of the page so that it would be able to reflect our brand image and core value.</p>

<p>Please give us a star to our repository if you walk by. And don’t be shy to submit any new idea and improvement to us.</p>

<p><a href="https://gitlab.com/404busters/hkoscon/hkoscon-2019">https://gitlab.com/404busters/hkoscon/hkoscon-2019</a></p>]]></content><author><name>Tony Yip</name></author><summary type="html"><![CDATA[P.S. As due to some of the HKOSCon committee cannot stand for the original version, you are reminded that this is not a publishment of the HKOSCon official]]></summary></entry><entry><title type="html">HKOSCon 2019 Website Phase 1 Release</title><link href="https://blog.tonyhhyip.me/2019/01/31/hkoscon-2019-phase-1-release.html" rel="alternate" type="text/html" title="HKOSCon 2019 Website Phase 1 Release" /><published>2019-01-31T00:00:00+00:00</published><updated>2019-01-31T00:00:00+00:00</updated><id>https://blog.tonyhhyip.me/2019/01/31/hkoscon-2019-phase-1-release</id><content type="html" xml:base="https://blog.tonyhhyip.me/2019/01/31/hkoscon-2019-phase-1-release.html"><![CDATA[<p>Team 404 Busters has finished on the building and deployment of the HKOSCon 2019 website.</p>

<p>HKOSCon 2019 Website is now online, check it out at <a href="https://hkoscon.org/2019/">https://hkoscon.org/2019/</a></p>

<p>In here, on behalf of Team 404 Busters, I would like to give some insight of content and technical update on the website</p>

<h2 id="content-update">Content Update</h2>

<h3 id="form-for-call-for-paper">Form for Call for Paper</h3>

<p>The call for paper has been started. A new CFP page has been added to the website. Check it out and submit your paper on <a href="https://hkoscon.org/2019/cfp/">https://hkoscon.org/2019/cfp/</a></p>

<h2 id="technical-update">Technical Update</h2>

<h3 id="upgrade-of-nodejs">Upgrade of Node.js</h3>

<p>As the LTS of node.js 10 is active since 30 Oct 2018, we have upgrade node.js to version 10. With the new version of V8 and new ES standard implements, we are able to roll faster in development progress.</p>

<h3 id="migrate-to-nuxtjs">Migrate to nuxt.js</h3>

<p>We have migrated from the custom-built site generator to <a href="https://nuxtjs.org/">nuxt.js</a>, so that we are able to enjoy the great ecosystem of Vue and great SEO from the pre-rendering jobs done by nuxt.js. Also, nuxt.js brings the Webpack 4 and babel 7 into the building and providing a smaller bundle and better performance.</p>

<h3 id="migrate-to-bulma">Migrate to Bulma</h3>

<p>Previously, we are using <a href="https://materializecss.com/">materialize</a> for the website and since <a href="https://bulma.io/">Bulma</a> is pure css framework, we are able to get more control on the component and reduce the rendering time of the browser.</p>

<h3 id="change-sass-implements">Change sass implements</h3>

<p>Since the old node-sass packages require a cpp binding, which brings inconveniently to developers and force them to install make, python, and g++. Moreover, <code class="language-plaintext highlighter-rouge">node-sass</code> is single-thread and blocking when rendering, this results in slow performance. As a result, we switch to <code class="language-plaintext highlighter-rouge">sass</code> which is an implementation written in <a href="https://www.dartlang.org/">Dart</a> and compile to js and provided better performance than before.</p>

<h2 id="call-for-contributor">Call for contributor</h2>

<p>Last but not least, we greatly welcome anyone come and contributes to the website. You can find the release repository at <a href="https://gitlab.com/hkoscon/2019">https://gitlab.com/hkoscon/2019</a> and the development repository, which is owned by Team 404 Busters, at <a href="https://gitlab.com/404busters/hkoscon/hkoscon-2019">https://gitlab.com/404busters/hkoscon/hkoscon-2019</a></p>]]></content><author><name>Tony Yip</name></author><summary type="html"><![CDATA[Team 404 Busters has finished on the building and deployment of the HKOSCon 2019 website.]]></summary></entry><entry><title type="html">HKOSCon 2018 Website Phase 1 Release</title><link href="https://blog.tonyhhyip.me/2018/02/25/hkoscon-2018-phase-1-release.html" rel="alternate" type="text/html" title="HKOSCon 2018 Website Phase 1 Release" /><published>2018-02-25T00:00:00+00:00</published><updated>2018-02-25T00:00:00+00:00</updated><id>https://blog.tonyhhyip.me/2018/02/25/hkoscon-2018-phase-1-release</id><content type="html" xml:base="https://blog.tonyhhyip.me/2018/02/25/hkoscon-2018-phase-1-release.html"><![CDATA[<p>As the start of call for paper of HKOSCon 2018, I have released the phase 1 of HKOSCon 2018 website. Something new is added into the website.</p>

<h2 id="result-of-call-for-communities">Result of Call for Communities</h2>

<p>The list of applied communities has been listed on the website. You may check it out at <a href="https://hkoscon.org/2018/cfc.html">https://hkoscon.org/2018/cfc.html</a></p>

<h2 id="form-for-call-for-paper">Form for Call for Paper</h2>

<p>The call for paper has been started. A new CFP page has been added to the website. Check it out and submit your paper on <a href="https://hkoscon.org/2018/cfp.html#apply">https://hkoscon.org/2018/cfp.html#apply</a></p>

<h2 id="offline-website">Offline Website</h2>

<p>Last year, Team 404 Busters has tried to add the progressive web app into the website in order to provide the schedule offline. However, it is not successfully done. In this year, it is my honour to announce that we have successfully made it! You can browse it offline after finishing your first loading. It make use of <a href="https://github.com/GoogleChromeLabs/sw-precache">sw-precache</a> to generate the Service Worker to provide the offline. Of course, support of Service Worker is required for this wonderful feature. Chrome 45 or above and Firefox 32 or above, as well as the Android Chrome can support it well.</p>

<blockquote>
  <p>Note: for iOS device, iOS Safari 11.3 which is not yet the main stream, may be able to support this feature.</p>
</blockquote>

<h2 id="call-for-contributor">Call for contributor</h2>

<p>Last but not least, we greatly welcome anyone come and contribute for the website. You can find the release repository at <a href="https://github.com/hkoscon/2018">https://github.com/hkoscon/2018</a> and the development repository, which is owned by Team 404 Busters, at <a href="https://github.com/404busters/hkoscon-2018">https://github.com/404busters/hkoscon-2018</a></p>]]></content><author><name>Tony Yip</name></author><summary type="html"><![CDATA[As the start of call for paper of HKOSCon 2018, I have released the phase 1 of HKOSCon 2018 website. Something new is added into the website.]]></summary></entry><entry><title type="html">Upgrade of Hong Kong Open Source Conference 2018 Website</title><link href="https://blog.tonyhhyip.me/2017/10/30/hkoscon-2018-website.html" rel="alternate" type="text/html" title="Upgrade of Hong Kong Open Source Conference 2018 Website" /><published>2017-10-30T00:00:00+00:00</published><updated>2017-10-30T00:00:00+00:00</updated><id>https://blog.tonyhhyip.me/2017/10/30/hkoscon-2018-website</id><content type="html" xml:base="https://blog.tonyhhyip.me/2017/10/30/hkoscon-2018-website.html"><![CDATA[<p>As the Call for Communities of Hong Kong Open Source Conference 2018 (HKOSCon 2018) has been released, Team 404 Busters has started working on the HKOSCon 2018 website. We keep the main tools from 2017 website in order to reduce the learning curve and time to work on it. In this article, I would state the part we change in the website building pipeline.</p>

<h2 id="upgrade-of-nodejs">Upgrade of Node.js</h2>

<p>As the LTS of node.js 8 is going to active on 31 Oct 2017, we have upgrade node.js to version 8. With the new node.js 8 supporting <code class="language-plaintext highlighter-rouge">async/await</code>, we replace the promise chain with async and await in the build script. This help in easier to maintain and debug. nvmrc file is added for the nvm users.</p>

<h2 id="change-in-building">Change in building</h2>

<h3 id="webpack-module-and-babel-preset">Webpack Module and Babel Preset</h3>

<p>Starting from Webpack 2, webpack come with support of ES6 module import and export, Babel module converting can be removed if only ES6 module is used. After the upgrade, babel-preset-env is used to replace the old preset which would apply the plugins on the environment requested.</p>

<h3 id="remove-of-gulp">Remove of Gulp</h3>

<p>Gulp did bring a hard time for us to maintain and having customisation in 2017. In 2018, we build all the assets with a single build script, which contain the call of webpack API and nunjucks only. The build time is 1 minutes faster by average on Travis CI.</p>

<h3 id="using-hash-assets-filename">Using Hash Assets Filename</h3>

<p>The output filename has added a content hash which help in skipping the step of waiting cache invalid in Cloudflare. To make add the assets easier, a new parameter <code class="language-plaintext highlighter-rouge">assets</code> is passed into the pages.</p>

<h2 id="change-in-development">Change in Development</h2>

<h3 id="change-in-command">Change in command</h3>

<p>At before, starting up the development server require for 2 parallel process. After the upgrade, it just required for 1 single process to handle all of these. In the new version, a setup command <code class="language-plaintext highlighter-rouge">yarn setup</code> is required for setting up environment for development. It would be required to run for every time the entry in webpack config has been changed. After the setting up, the only command required is <code class="language-plaintext highlighter-rouge">yarn dev</code>, the dev server would be ready for you at 8080 port.</p>

<h3 id="rebuild-of-development-server">Rebuild of development server</h3>

<p>The development server was painful with different problem in hot reload and restart, specially pair with gulp. We have removed the old <code class="language-plaintext highlighter-rouge">webpack-dev-server</code> and replaced with an <code class="language-plaintext highlighter-rouge">express</code> server with different middlewares. <code class="language-plaintext highlighter-rouge">webpack-dev-middleware</code> and <code class="language-plaintext highlighter-rouge">webpack-hot-middleware</code> is used to replace the old webpack dev server building. Page is render as template in order to save the time in rebuilding pages.</p>

<h3 id="bundling-stylesheet">Bundling stylesheet</h3>

<p>As gulp is removed, all scss files would be import by webpack with <code class="language-plaintext highlighter-rouge">sass-loader</code>. With webpack hot middleware, the style can be hot-reload and display on browser immediately.</p>

<h3 id="conclusion">Conclusion</h3>

<p>We have worked hard to improve on the website. Please open an issue or pull request on the <a href="https://github.com/404busters/hkoscon-2018">Github repository</a> if you find something can still be improved. Also the call for communities is lived now, you may visit and apply for it at <a href="https://hkoscon.org/2018/cfc.html">here</a>.</p>]]></content><author><name>Tony Yip</name></author><summary type="html"><![CDATA[As the Call for Communities of Hong Kong Open Source Conference 2018 (HKOSCon 2018) has been released, Team 404 Busters has started working on the HKOSCon 2018 website. We keep the main tools from 2017 website in order to reduce the learning curve and time to work on it. In this article, I would state the part we change in the website building pipeline.]]></summary></entry><entry><title type="html">Review on SITCON x HK 2016</title><link href="https://blog.tonyhhyip.me/2016/11/11/SITCONxHK-review.html" rel="alternate" type="text/html" title="Review on SITCON x HK 2016" /><published>2016-11-11T00:00:00+00:00</published><updated>2016-11-11T00:00:00+00:00</updated><id>https://blog.tonyhhyip.me/2016/11/11/SITCONxHK-review</id><content type="html" xml:base="https://blog.tonyhhyip.me/2016/11/11/SITCONxHK-review.html"><![CDATA[<p><img src="/assets/2016/11/11/SITCONxHK-1.webp" alt="" /></p>

<p>The SITCON x HK 2016 has come to an end on 22 / 10 / 2016. It had a bad weather on Friday, so we failed to prepare for the printed agenda. It was quite inconvenient for the attenders.</p>

<h2 id="preparing">Preparing</h2>

<p>Holding an event is always not an easy job, it involve lots of works to do.</p>

<h3 id="call-for-venue">Call for Venue</h3>

<p>First, we need a venue for holding the event. Thanks to the hard work of Clara and Maria from Techie Brain, CSS, CityU, we could hold the event in LT 16 and 17 in the City University of Hong Kong.</p>

<h3 id="call-for-sponsorship">Call for sponsorship</h3>

<p>Second, an event requires to finance to pay for expenditure of the event. We faced the problem of no company is interested in sponsoring an event which will have unknown participant and don’t much history succeed result. Thanks for the generous of Ben Cheung of Oursky Limited. And with the help of Tsundere Chen, we got the gift and material sponsor from Github Education.</p>

<h3 id="call-for-paper">Call for Paper</h3>

<p>Next, to provide a good quality talk to the students, we have to spend time to invite speakers and assign for the agenda. I am here to thanks all the speakers of giving great speech and teaching the students so much new and useful knowledge.</p>

<h3 id="call-for-helpers">Call for helpers</h3>

<p>Moreover, helpers is also a key element of holding an event. Thanks to the join of City U, HKBU and HKU, getting us enough helpers to operate the whole event.</p>

<h3 id="preparing-material">Preparing Material</h3>

<p>Hence, before the conference, many material had to be prepared. Thanks for Nicholas Yau and Wing Ng to prepare the awesome poster, roll-up stand, banner and other marketing and display material. Also, Clara and Maria helped lots in preparing those material.</p>

<h3 id="marketing-promotion">Marketing Promotion</h3>

<p>In addition, to invite more people to join, marketing promotion is required to boost the event. Thanks for Denny Huang, MouseMs and Philip Chou giving so much useful advice in marketing. Actually, I was studying in Marketing at that moment.</p>

<h3 id="planning-for-the-whole-day">Planning for the whole day</h3>

<p>Furthermore, we had to plan for the whole run down for the event, from setting up to cleaning up. Every single detail we miss, the event would be less awesome. As a result, we had to think through the whole event rundown not only once, but for at least three times. We carefully assigned everyone to a right place and ready for any accident. We hoped to give the attendees the best event we can offer.</p>

<p><img src="/assets/2016/11/11/SITCONxHK-2.webp" alt="" /></p>

<h2 id="review">Review</h2>

<p>The attendees is not as much as predict and make me a bit heart broken. The whole event ran smoothly and I am happy about this. The speakers were giving speech to the students which can help much in their career path in the IT industry, even I learnt so much from their talks. I knew there were much things to be improved and I hope you can tell me your opinion by leaving a comment below.</p>

<p><img src="/assets/2016/11/11/SITCONxHK-3.webp" alt="" /></p>

<h2 id="thanks-for-those-in-sitcon-x-hk-2016">Thanks for those in SITCON x HK 2016</h2>

<p>After that, to successfully held this event, we need different helpers to help in the preparation and on-day operations.</p>

<h3 id="co-organizers">Co-Organizers</h3>

<p>First, I have to thanks for the three other Co-Organizers apart from SITCON x HK Community:</p>

<ul>
  <li>Techie Brain, 31 st Executive Committee of Computer Science Society, City University of Hong Kong Students’ Union</li>
  <li>Computer Science Association, Engineering Society, HKUSU, and</li>
  <li>The Computer Science Society, Hong Kong Baptist University.</li>
</ul>

<h3 id="supporting-organization">Supporting Organization</h3>

<p>Moreover, apart from the Co-Organizers, I also need to thanks for the supporting organization:</p>

<ul>
  <li>Hong Kong Creative Open Technology Association</li>
  <li>Open Source Hong Kong</li>
  <li>Hong Kong Linux User Group</li>
  <li>SITCON — TW Community</li>
  <li>Electrical and Electronic Engineering Association, Engineering Society, HKUSU</li>
</ul>

<h3 id="sponsorship">Sponsorship</h3>

<p>Last but not least, thanks for the sponsorship. Without the sponsorship, no awesome event can held. They are:</p>

<ul>
  <li>Platinum Sponsor — <a href="https://oursky.com/">Oursky Ltd.</a></li>
  <li>Gift Sponsor — <a href="https://education.github.com/">Github Education</a></li>
</ul>

<h2 id="personal-special-thanks">Personal Special Thanks</h2>

<p>First, I am here to special thank you for the hard work of Clara and Maria, without these two pretty girls, there would not be SITCON x HK 2016. Next, thank you for the great helping hand of Koala Yeung, he helped so much in the whole organizing process. Last but not least, greatly thank you for Wing Hui keeping me alive till the end of SITCON x HK 2016 even she was in a great busy.</p>

<p><img src="/assets/2016/11/11/SITCONxHK-4.webp" alt="" /></p>

<h2 id="conclusion">Conclusion</h2>

<p>Finally, I have to say thank you to many who I did not mentioned in above. Thanks again for those who support SITCON x HK 2016. I hope to you may invite friends to join, help or even sponsor in SITCON x HK 2017 with you. I hope you can tell me your opinion by leaving a comment below.If you want to see more photos of SITCON x HK 2016, you can go to the <a href="https://www.flickr.com/photos/sitcon-x-hk/albums/72157675976822335">Flickr Album</a> to see more photos took on the event.</p>]]></content><author><name>Tony Yip</name></author><summary type="html"><![CDATA[]]></summary></entry></feed>