<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Work Notes on Fran Kuo | R&amp;D Leadership</title>
    <link>https://chenfu.ai/en/tags/work-notes/</link>
    <description>Recent content in Work Notes on Fran Kuo | R&amp;D Leadership</description>
    <generator>Hugo -- 0.157.0</generator>
    <language>en</language>
    <lastBuildDate>Wed, 12 Jun 2013 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://chenfu.ai/en/tags/work-notes/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>[Work Notes] Looking for a Solid Developer</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-looking-for-solid-developer/</link>
      <pubDate>Wed, 12 Jun 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-looking-for-solid-developer/</guid>
      <description>&lt;p&gt;Recently, I&amp;rsquo;ve become very busy due to taking over tasks from another site. The original coding work is still there, so I started looking for an outstanding developer to join us. In the first month, I tried to draw from my colleagues&amp;rsquo; and my own networks — but in vain. Now I&amp;rsquo;ve shifted the search to a headhunter and started conducting interviews.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve interviewed a lot of people at my first and second jobs. Interviewing candidates through a headhunter is a very different experience. Why? Many factors influence what kind of developer you&amp;rsquo;re actually looking for.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] The Study of WebRTC and SIP</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-the-study-of-webrtc-and-sip/</link>
      <pubDate>Mon, 08 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-the-study-of-webrtc-and-sip/</guid>
      <description>&lt;p&gt;&lt;em&gt;[This post is a placeholder — content was incomplete in the original.]&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Generating Makefile with Autotools and Makefile.am</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-process-to-generate-makefile-by-autotools-with-makefileam/</link>
      <pubDate>Tue, 19 Mar 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-process-to-generate-makefile-by-autotools-with-makefileam/</guid>
      <description>&lt;p&gt;Quick reference for generating a Makefile using the Autotools workflow:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# autoscan .                      // Scan the folder to generate configure.scan&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# cp configure.scan configure.ac  // Copy configure.scan to configure.ac&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# vi configure.ac                 // Edit configure.ac&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                  // Add: AM_INIT_AUTOMAKE&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;hello,1.0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                  // This is the required marco &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; automake
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# aclocal                         // Execute aclocal to generate aclocal.m4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# autoconf                        // Execute autoconf to generate configure&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# autoheader&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# automake --add-missing          // Run automake&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# touch NEWS; touch README; touch AUTHORS; touch ChangeLog  // Create required documents&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# automake --add-missing          // Run automake again&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ./configure                     // Execute configure to generate Makefile&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# make                            // Execute make&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Following these steps provides a good template to modify the related files for my specific target project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] GStreamer: Migrating from 0.10.x to 1.0.x in OpenWrt</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-gstreamer-from-010x-to-10x-in-openwrt/</link>
      <pubDate>Mon, 18 Mar 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-gstreamer-from-010x-to-10x-in-openwrt/</guid>
      <description>&lt;p&gt;I start to move the gstreamer version from 0.10.x to 1.0.x in openwrt. Two purpose, one is to get much more familiar with the gstreamer applications and plugins development, another one is to assist my colleagues for next schedule. Just make a quick note here.&lt;/p&gt;
&lt;p&gt;Official gstreamer packages version I use is 1.0.5:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gstreamer core → Modify Makefile and patch, compile ok.&lt;/li&gt;
&lt;li&gt;gst-plugins-base → Modify Makefile and patch, compile ok.&lt;/li&gt;
&lt;li&gt;gst-plugins-good → Modify Makefile and patch, compile ok.&lt;/li&gt;
&lt;li&gt;gst-plugins-ugly → To be check if required.&lt;/li&gt;
&lt;li&gt;gst-plugins-bad → Modify Makefile and patch, compile ok.&lt;/li&gt;
&lt;li&gt;gst-libav → To be check if required.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Proprietary plugins:&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] SIP Test of FreeSwitch by FSClient</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-sip-test-of-freeswitch-by-fsclient/</link>
      <pubDate>Wed, 13 Mar 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-sip-test-of-freeswitch-by-fsclient/</guid>
      <description>&lt;p&gt;In previous articles, I tried to build the pjsip package, but it&amp;rsquo;s hard to verify that the package works correctly without a solid understanding of SIP. So I decided to get more familiar with how SIP works by setting up a switch. There are two popular choices: &lt;strong&gt;Asterisk&lt;/strong&gt; and &lt;strong&gt;FreeSwitch&lt;/strong&gt;. I chose FreeSwitch because pre-compiled binaries for Windows 7 are already available.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://wiki.freeswitch.org/wiki/Installation_Guide&#34;&gt;http://wiki.freeswitch.org/wiki/Installation_Guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After installation, remember to allow the application through the firewall. Since this is just for testing, I ran FreeSwitch with the default configuration.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] PJSIP on Ubuntu</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-pjsip-on-ubuntu/</link>
      <pubDate>Tue, 12 Mar 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-pjsip-on-ubuntu/</guid>
      <description>&lt;p&gt;Before trying to make the pjsip work on my embedded device, I build the related libraries on PC as the reference. My environment is based Ubuntu 10.04. See the following guide.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://trac.pjsip.org/repos/wiki/Getting-Started/Autoconf&#34;&gt;http://trac.pjsip.org/repos/wiki/Getting-Started/Autoconf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The notes of packages building:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ALSA and OpenSSL libraries are optional and I do not install for first.&lt;/li&gt;
&lt;li&gt;SDL: download version 2.0 and do &lt;code&gt;./configure&lt;/code&gt;, &lt;code&gt;make; make install&lt;/code&gt; to install. Add &lt;code&gt;sudo&lt;/code&gt; if encountering privilege problems.&lt;/li&gt;
&lt;li&gt;FFMPEG: reference the official FFMPEG documentation at &lt;a href=&#34;https://ffmpeg.org/trac/ffmpeg/wiki/UbuntuCompilationGuide&#34;&gt;https://ffmpeg.org/trac/ffmpeg/wiki/UbuntuCompilationGuide&lt;/a&gt;. Follow the guide to build yasm, x264 and ffmpeg. The ffmpeg version (0.10.6) and building process follow the pjsip guide.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://chenfu.ai/img/Blogger/pjsip_ffmpeg.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://chenfu.ai/img/Blogger/pjsip_ffmpeg.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] PJSIP Package Build in OpenWrt</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-pjsip-package-build-in-openwrt/</link>
      <pubDate>Tue, 12 Mar 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-pjsip-package-build-in-openwrt/</guid>
      <description>&lt;p&gt;There is a default pjsip package in the openwrt but it links to the extension package of ltq-tapi and oss. What I need first is the package without extra packages. So I try to create the libraries using the latest version 2.1 for the experiment.&lt;/p&gt;
&lt;p&gt;First, the Makefile of the package:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-makefile&#34; data-lang=&#34;makefile&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;include&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;TOPDIR&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/rules.mk&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PKG_NAME&lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt;pjsip2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PKG_VERSION&lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt;2.1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PKG_RELEASE&lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PKG_SOURCE&lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt;pjproject-&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;PKG_VERSION&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;.tar.bz2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PKG_SOURCE_URL&lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt;http://www.pjsip.org/release/&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;PKG_VERSION&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PKG_MD5SUM&lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt;310eb63638dac93095f6a1fc8ee1f578
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PKG_INSTALL&lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PKG_BUILD_PARALLEL&lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PKG_BUILD_DIR&lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;BUILD_DIR&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;/pjproject-&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;PKG_VERSION&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;PKG_RELEASE&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;include&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;INCLUDE_DIR&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/package.mk&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;define&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;Package/pjsip2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  SECTION&lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt;lib
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  CATEGORY:&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Libraries
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  URL:&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;http://www.pjsip.org/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  MAINTAINER:&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;John Crispin &amp;lt;blogic@openwrt.org&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  TITLE:&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;pjsip2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  DEPENDS:&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;+libuuid
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;endef&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CONFIGURE_ARGS &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  --disable-floating-point &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  --disable-g711-codec &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  --disable-l16-codec &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  --disable-g722-codec &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  --disable-g7221-codec &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  --disable-gsm-codec &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  --disable-ilbc-coder &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  --disable-libsamplerate &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  --disable-ipp &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  --disable-ssl &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  --disable-oss &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  --disable-sound
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;define&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;Build/Configure&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;(cd&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;PKG_BUILD_DIR&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;autoconf&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;aconfigure.ac&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;aconfigure)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;call Build/Configure/Default&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;endef&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;define&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;Build/Compile&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CFLAGS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;TARGET_CFLAGS&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;EXTRA_CFLAGS&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;TARGET_CPPFLAGS&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;EXTRA_CPPFLAGS&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CXXFLAGS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;TARGET_CFLAGS&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;EXTRA_CFLAGS&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;TARGET_CPPFLAGS&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;EXTRA_CPPFLAGS&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LDFLAGS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;TARGET_LDFLAGS&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; -lc &lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;LIBGCC_S&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; -lm&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;MAKE&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;PKG_JOBS&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;-C&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;PKG_BUILD_DIR&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;endef&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;define&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;Build/InstallDev&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;INSTALL_DIR&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;1&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/usr/pjsip2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;CP&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;PKG_INSTALL_DIR&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/usr&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;1&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/usr/pjsip2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;endef&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;eval &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;call BuildPackage,pjsip2&lt;span style=&#34;color:#66d9ef&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We encounter the following problem:&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Liberated Networking Technology</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-liberated-networking-technology/</link>
      <pubDate>Wed, 27 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-liberated-networking-technology/</guid>
      <description>&lt;p&gt;Our company updated the homepage to a brand new look. There is the word &amp;ldquo;Liberated&amp;rdquo; used to describe the new networking technology we implemented.&lt;/p&gt;
&lt;p&gt;According to the dictionary, I&amp;rsquo;m most likely aligned with the description &amp;ldquo;free from traditional social restraints&amp;rdquo; — because we are trying to make fundamental changes in every domain we enter. It&amp;rsquo;s an interesting journey.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgqAbndB9kFBBtcnF4lTp3zRQbxMo1YJybLuYSDNq1GirN1besN8V4t4CUHdg1iq1xeOls3eqNU2CyFAv7RLB0kGkmLILv4vgEyEbG1ej_V6hHVHkCgnc_LIxdU2lyHt_QCqhGVLRc7WuB/s1600/ubnt_liberated.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://chenfu.ai/img/Blogger/ubnt_liberated.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Although it&amp;rsquo;s not 100% correct, I still want to record what I saw. I plotted the company&amp;rsquo;s product map based on personal observation from the webpage:&lt;/p&gt;</description>
    </item>
    <item>
      <title>[R&amp;D Notes] AirVision 2.0 Preview on Windows 7</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-airvision-20-preview-on-win7/</link>
      <pubDate>Mon, 18 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-airvision-20-preview-on-win7/</guid>
      <description>&lt;p&gt;Just before the Chinese Lunar New Year, I received the latest alpha version of &lt;strong&gt;AirVision 2.0&lt;/strong&gt;. It doesn&amp;rsquo;t just inherit the strengths of the previous version; it feels significantly faster and more stable. Here is a quick preview of the installation process and some of the main UI pages.&lt;/p&gt;
&lt;h3 id=&#34;installation-process&#34;&gt;Installation Process&lt;/h3&gt;
&lt;p&gt;After launching the Windows installer and following the setup steps, you&amp;rsquo;ll see a Windows Security alert. Make sure your firewall isn&amp;rsquo;t blocking the application.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Miracast in Surveillance System</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-miracast-in-surveillance-system/</link>
      <pubDate>Sun, 17 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-miracast-in-surveillance-system/</guid>
      <description>&lt;p&gt;Weeks ago, the supplier demo the Miracast function to us and my colleague told me maybe we can think if there are applications for surveillance system. At first I saw nothing special for surveillance application but I may find there is now.&lt;/p&gt;
&lt;p&gt;Here is a capture picture from the whitepaper of WiFi alliance.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEfz7cBaDm4VNf4yYqIMxq55stocSsmD75bUL5eF8MfXjE35i9620eRKzmbPEWgmwhyphenhyphenI7mL9lEsDBk52uNUiB6wRG1UNN_aFCP47HlqvGjlnxgD7g-tosxYyC1nfIHbFybJFyV3Gw3Si6v/s1600/miracast_topology.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://chenfu.ai/img/Blogger/miracast_topology.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Basically, Miracast is a protocol and this means Miracast can be over any kind of infrastructure. However, Miracast connections are expected to be predominantly established between Wi-Fi devices connected with each other directly, without an AP acting as an intermediary. According to the topology, what we can see is a source to a sink and it is a peer-to-peer connection.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Pure Public or Hybrid Cloud for Surveillance System?</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-pure-public-or-hybrid-cloud-for-surveillance-system/</link>
      <pubDate>Sat, 16 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-pure-public-or-hybrid-cloud-for-surveillance-system/</guid>
      <description>&lt;p&gt;The pure public cloud is no doubt building web services on a public infrastructure, while hybrid combines a private component. According to Wikipedia, the public cloud (aka external cloud) refers to services provided by a third party. A picture on Wikipedia describes this clearly.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1aWVqnt5oleV8PILxAwBuN9j36ezoA3f29PcPtdWLV-YnyTiQgDle2slLhsMOYjYBN78oHB1MNb_bHvo1BExEPatkMYG-Wbn0LIeWQ99CVNHFJNBbjCNYmzzDKgtbl5eGsNgzBU1k5Zw/s1600/Cloud_computing_types.svg.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://chenfu.ai/img/Blogger/Cloud_computing_types.svg.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Basically, there are four deployment models on Wikipedia. A private cloud can&amp;rsquo;t fully satisfy the requirements of a surveillance system. We also won&amp;rsquo;t discuss community cloud since it&amp;rsquo;s not realistic for surveillance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] I2S Bus Channels Setting in GStreamer alsasrc Plugin</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-i2s-bus-channels-setting-in-gstreamer-alsasrc-plugin/</link>
      <pubDate>Fri, 08 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-i2s-bus-channels-setting-in-gstreamer-alsasrc-plugin/</guid>
      <description>&lt;p&gt;My colleague did some experiments on GStreamer alsasrc and osssrc plugins and found that alsasrc consumes a lot of CPU resource (around 16% on the chip we use). He asked me why the test tool provided by the chip vendor is quite efficient (around 1~2%). It was a big gap and I started to investigate why.&lt;/p&gt;
&lt;p&gt;After hours of checking, I found that the plugin may cause a busy wait in a while loop when the parameters are set to non-blocking mode. I made a simple code modification and the CPU rate dropped to 12%. Still frustrating, but some improvement.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] RabbitMQ Setup and Test</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-rabbitmq-setup-and-test/</link>
      <pubDate>Thu, 07 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-rabbitmq-setup-and-test/</guid>
      <description>&lt;h2 id=&#34;rabbitmq-setup-and-test&#34;&gt;RabbitMQ Setup and Test&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Server side:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;My desktop PC is Windows 7. Download the RabbitMQ server from &lt;a href=&#34;http://www.rabbitmq.com/&#34;&gt;http://www.rabbitmq.com/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Installation guide: &lt;a href=&#34;http://www.rabbitmq.com/install-windows.html&#34;&gt;http://www.rabbitmq.com/install-windows.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I use an extra Ethernet card with IP address set to 192.168.1.19, and make sure the firewall doesn&amp;rsquo;t block port 5672.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Client side:&lt;/strong&gt; (both send and listen on the same device)&lt;/p&gt;
&lt;p&gt;I use the package from &lt;a href=&#34;https://github.com/alanxz/rabbitmq-c&#34;&gt;https://github.com/alanxz/rabbitmq-c&lt;/a&gt;. Follow the guide in the link to cross-build and install on the embedded device.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHTw8Ub1MaZFtfYCkmY460xeqSKhTvYunsgfS2CtZEl1rWttRuFNl2K9D-blyTHtWVtGodjmvku3vEZEm6eKQjYJyX8lKlhgMatFhgCngrOLP6reLFAi4UoB0h4msJMBDABF4VrspeXZY2/s1600/Image1.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://chenfu.ai/img/Blogger/Image1.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] The Realtime of Transport Stream on Miracast</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-the-realtime-of-transport-stream-on-miracast/</link>
      <pubDate>Wed, 06 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-the-realtime-of-transport-stream-on-miracast/</guid>
      <description>&lt;p&gt;When I google the internet with realtime and transport stream, I could not find the information I want. The word &amp;lsquo;realtime&amp;rsquo; must construct on the relative thinking. For example, there is camera and screen and the camera&amp;rsquo;s video can be showed on the screen with quite small latency. We assume the latency is under 150ms or 300ms whatever and we can call this is realtime or not when we can have comparisons.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[R&amp;D Notes] Airplay, DLNA and Miracast</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-airplay-dlna-and-miracast/</link>
      <pubDate>Tue, 05 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-airplay-dlna-and-miracast/</guid>
      <description>&lt;p&gt;Today, a supplier visited our company to introduce their solutions with DLNA and Miracast support. After some research on these protocols, it seems there are three main standards competing in the market for wireless display and media streaming.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;DLNA&lt;/strong&gt;: This has been around for a long time. Apple was originally a member of the DLNA alliance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Airplay&lt;/strong&gt;: Apple eventually left DLNA to create its own proprietary &amp;ldquo;Airplay&amp;rdquo; protocol, building a walled garden for seamless ecosystem integration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Miracast&lt;/strong&gt;: Created by the Wi-Fi Alliance. It appears the Android camp is rallying around Miracast to challenge Apple&amp;rsquo;s dominance in this space.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It will be interesting to see how these standards evolve and which one will eventually dominate the user experience.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] STL Notes</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-stl-notes/</link>
      <pubDate>Tue, 05 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-stl-notes/</guid>
      <description>&lt;p&gt;An overseas engineer uses the Boost C++ library for related project development. Seeing the STL syntax in their code made me realize I should take some time to study this — at minimum, to be able to read the code properly.&lt;/p&gt;
&lt;p&gt;From Wikipedia: &lt;a href=&#34;http://en.wikipedia.org/wiki/Standard_Template_Library&#34;&gt;http://en.wikipedia.org/wiki/Standard_Template_Library&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Standard Template Library (STL) is a C++ software library that influenced many parts of the C++ Standard Library. It provides four components called algorithms, containers, functional, and iterators.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Linux Quick-Reference Notes</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-linux%E5%B7%A5%E5%85%B7%E5%B0%8F%E8%A8%98%E9%8C%84/</link>
      <pubDate>Mon, 04 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-linux%E5%B7%A5%E5%85%B7%E5%B0%8F%E8%A8%98%E9%8C%84/</guid>
      <description>&lt;h2 id=&#34;patch-commands&#34;&gt;Patch Commands&lt;/h2&gt;
&lt;p&gt;Create a patch file:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;diff -Naur &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;from-file&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;to-file&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &amp;gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;YourFileName.patch&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-N&lt;/code&gt;: If a file is only in one directory, treat it as present but empty in the other&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-a&lt;/code&gt;: Treat all files as text&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-u&lt;/code&gt;: Use unified output format&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-r&lt;/code&gt;: Recursively compare subdirectories&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;svn--remove-all-svn-directories&#34;&gt;SVN — Remove all .svn directories&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ rm -rf &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;find . -type d -name .svn&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;git--remove-git&#34;&gt;Git — Remove .git&lt;/h2&gt;
&lt;p&gt;Only need to remove the &lt;code&gt;.git&lt;/code&gt; directory at the root of the project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] msgpack-idl How-To</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-msgpack-idl-howto/</link>
      <pubDate>Mon, 04 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-msgpack-idl-howto/</guid>
      <description>&lt;h2 id=&#34;msgpack-idl-how-to&#34;&gt;msgpack-idl How-To&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Get the msgpack-idl&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git clone git://github.com/msgpack/msgpack-idl.git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Install the required Ruby tool&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo apt-get install ruby1.9.1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Go to msgpack-idl folder&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo gem install msgpack-idl
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sudo msgpack-idl --install java
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Create a sample file &lt;code&gt;sample&lt;/code&gt; with the following content:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;message Node {
  1: string address
  2: map&amp;lt;string,string&amp;gt; properties
  3: optional string? description
}
message StorageNode &amp;lt; Node {
  4: long capacity
  5: optional int weight = 1
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; Generate Java code with the following commands:&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Git Clone Error: &#34;Problem with the SSL CA cert (path? access rights?)&#34;</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-git-clone-error-error-problem-with-the-ssl-ca-cert-path-access-rights/</link>
      <pubDate>Thu, 31 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-git-clone-error-error-problem-with-the-ssl-ca-cert-path-access-rights/</guid>
      <description>&lt;p&gt;Our company&amp;rsquo;s git server does not support SSL verify but does support username/password authentication. Git enables SSL verification by default when accessing HTTPS URLs.&lt;/p&gt;
&lt;p&gt;You may encounter the following error:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;error: Problem with the SSL CA cert (path? access rights?) while accessing
https://tw.ubnt.com/git/example.git/info/refs
fatal: HTTP request failed
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To fix this, disable SSL verification globally:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global http.sslVerify false
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then clone again:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ git clone https://tw.ubnt.com/git/example.git
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Cloning into &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;test&amp;#39;&lt;/span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Username &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://tw.ubnt.com&amp;#39;&lt;/span&gt;: name
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Password &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://name@tw.ubnt.com&amp;#39;&lt;/span&gt;: password
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;remote: Counting objects: 1054, &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;remote: Compressing objects: 100% &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;674/674&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;remote: Total &lt;span style=&#34;color:#ae81ff&#34;&gt;1054&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;delta 390&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;, reused &lt;span style=&#34;color:#ae81ff&#34;&gt;747&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;delta 290&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Receiving objects: 100% &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;1054/1054&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;, 14.45 MiB | &lt;span style=&#34;color:#ae81ff&#34;&gt;377&lt;/span&gt; KiB/s, &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Resolving deltas: 100% &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;390/390&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Done!&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Protocol Buffer and Message Pack — Initial Study</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-protocol-buffer-and-message-pack-initial/</link>
      <pubDate>Thu, 31 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-protocol-buffer-and-message-pack-initial/</guid>
      <description>&lt;p&gt;When I had an engineering discussion with an overseas engineer, I found that he uses a third-party library called MessagePack for binary serialization in internet applications.&lt;/p&gt;
&lt;p&gt;More detailed information about MessagePack is here:
&lt;a href=&#34;http://msgpack.org/&#34;&gt;http://msgpack.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not sure yet what the full differences are between these two libraries, and I couldn&amp;rsquo;t find a detailed comparison online. So I&amp;rsquo;ll spend some time studying both.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Protocol Buffer Examples</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-protocal-buffer-examples/</link>
      <pubDate>Wed, 30 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-protocal-buffer-examples/</guid>
      <description>&lt;p&gt;There is protobuf and protobuf-c website:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://code.google.com/p/protobuf/&#34;&gt;http://code.google.com/p/protobuf/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://code.google.com/p/protobuf-c/&#34;&gt;http://code.google.com/p/protobuf-c/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We are implementing remote control from back-end applications using protobuf-c. The protobuf-c has extensions from Google&amp;rsquo;s protobuf for RPC functionality.&lt;/p&gt;
&lt;p&gt;The first experiment is using the message directly by packing messages into shared memory between the server and the client. Both sides can get the message without issues.&lt;/p&gt;
&lt;p&gt;Our target is to use the RPC approach that protobuf-c provides. First, we create a &lt;code&gt;.proto&lt;/code&gt; file — here&amp;rsquo;s an example &lt;code&gt;statusapi.proto&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Heading Toward Ten Years</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E9%82%81%E5%90%91%E5%8D%81%E5%B9%B4/</link>
      <pubDate>Tue, 29 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E9%82%81%E5%90%91%E5%8D%81%E5%B9%B4/</guid>
      <description>&lt;p&gt;While organizing earlier blog posts from 2008, I notice how immature I was back then — but looking at the transitions and broader experiences since, it seems I&amp;rsquo;ve grown, even if just a little.&lt;/p&gt;
&lt;p&gt;In January 2011, just before hitting my seventh year, I made a major decision: to leave a very familiar work environment. In some ways, it meant stepping out of my comfort zone — essentially resetting myself. What guided the decision was an unexpected opportunity to work at a multinational foreign company. That opportunity matched a few things I&amp;rsquo;d been thinking about:&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] ncftp-3.2.1 Cross-Compiling</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-ncftp-321-cross-compiling/</link>
      <pubDate>Mon, 03 Mar 2008 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-ncftp-321-cross-compiling/</guid>
      <description>&lt;p&gt;ncftp is an FTP client. One of our projects needed FTP functionality, so I cross-compiled it for an ARM target.&lt;/p&gt;
&lt;h2 id=&#34;build-steps&#34;&gt;Build Steps&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Generate the Makefile. If you need curses support, add the relevant library — but for our project it&amp;rsquo;s not needed:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./configure --disable-ccdv --without-curses --without-ncurse
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Edit the Makefile — update CC and STRIP as follows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-makefile&#34; data-lang=&#34;makefile&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CROSS_COMPILE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;arm-unknown-linux-gnu-
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CC&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;CROSS_COMPILE&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;gcc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;STRIP&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;CROSS_COMPILE&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;strip
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Make it!&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>[Work Notes] A Good Article on the Surveillance Industry</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E5%AE%89%E5%85%A8%E7%9B%A3%E6%8E%A7%E7%94%A2%E6%A5%AD%E7%9A%84%E5%A5%BD%E6%96%87/</link>
      <pubDate>Sun, 23 Dec 2007 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E5%AE%89%E5%85%A8%E7%9B%A3%E6%8E%A7%E7%94%A2%E6%A5%AD%E7%9A%84%E5%A5%BD%E6%96%87/</guid>
      <description>&lt;p&gt;While searching for information online recently, I stumbled upon a blog discussing articles about the security and surveillance industry. It was quite unique — it&amp;rsquo;s rare to find blogs specifically covering this niche industry. Through Andy&amp;rsquo;s articles, I also made a new connection and shared some thoughts.&lt;/p&gt;
&lt;p&gt;Blog link: &lt;a href=&#34;http://febon.blogspot.com/&#34;&gt;http://febon.blogspot.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re interested in the security surveillance industry, feel free to drop by and join the discussion.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Eclipse IDE under Ubuntu</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-eclipse-ide-under-ubuntu/</link>
      <pubDate>Mon, 10 Dec 2007 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-eclipse-ide-under-ubuntu/</guid>
      <description>&lt;p&gt;Most of the following content is adapted from online resources, with some corrections based on issues I encountered during setup. Ubuntu&amp;rsquo;s default Java environment uses &lt;strong&gt;GCJ-1.4&lt;/strong&gt;, which has poorer performance. So the first step is to install the following packages using your preferred package manager (on Ubuntu, go to System → Synaptic Package Manager):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;sun-java6-jre&lt;/strong&gt; (required environment for running Java software)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;sun-java6-jdk&lt;/strong&gt; (needed only if you are a Java developer)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;eclipse-jdt&lt;/strong&gt; (Eclipse&amp;rsquo;s Java Development Tools package)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;eclipse-common-nls&lt;/strong&gt; (Eclipse&amp;rsquo;s localized language messages — install this for a Chinese interface)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;galternatives&lt;/strong&gt; (GUI frontend for &lt;code&gt;update-alternatives&lt;/code&gt;, used to change system default preferences)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Edit the following file: &lt;code&gt;vim /etc/jvm&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Live555 Streaming Server &#34;config.armlinux&#34; Fix</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-live555-streaming-server-quotconfigarmlinuxquot-%E8%A8%AD%E5%AE%9A%E6%AA%94%E4%BF%AE%E6%AD%A3/</link>
      <pubDate>Wed, 21 Nov 2007 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-live555-streaming-server-quotconfigarmlinuxquot-%E8%A8%AD%E5%AE%9A%E6%AA%94%E4%BF%AE%E6%AD%A3/</guid>
      <description>&lt;p&gt;The following lines in red need to be modified; otherwise you&amp;rsquo;ll get a flood of errors during linking:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-makefile&#34; data-lang=&#34;makefile&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CROSS_COMPILE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;        arm-unknown-linux-gnu-
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;COMPILE_OPTS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;INCLUDES&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt; -I. -O2 -DSOCKLEN_T&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;socklen_t -DNO_STRSTREAM&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; -D_LARGEFILE_SOURCE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; -D_FILE_OFFSET_BITS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;C &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;            c
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;C_COMPILER &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;CROSS_COMPILE&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;gcc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;C_FLAGS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;COMPILE_OPTS&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CPP &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;            cpp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CPLUSPLUS_COMPILER &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;CROSS_COMPILE&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;g++
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CPLUSPLUS_FLAGS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;COMPILE_OPTS&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt; -Wall -DBSD&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;OBJ &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;            o
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LINK &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;CROSS_COMPILE&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;g++ -o
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LINK_OPTS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;        -L.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CONSOLE_LINK_OPTS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;LINK_OPTS&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LIBRARY_LINK &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;CROSS_COMPILE&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;ld -o
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LIBRARY_LINK_OPTS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;LINK_OPTS&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt; -r -Bstatic
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LIB_SUFFIX &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;            a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LIBS_FOR_CONSOLE_APPLICATION &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LIBS_FOR_GUI_APPLICATION &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;EXE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>[Work Notes] The Choice Between Knowing and Not Knowing</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E5%9C%A8%E7%9F%A5%E8%88%87%E7%84%A1%E7%9F%A5%E9%96%93%E7%9A%84%E6%8A%89%E6%93%87/</link>
      <pubDate>Tue, 13 Nov 2007 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E5%9C%A8%E7%9F%A5%E8%88%87%E7%84%A1%E7%9F%A5%E9%96%93%E7%9A%84%E6%8A%89%E6%93%87/</guid>
      <description>&lt;p&gt;Recently, in the process of constantly trying new things — combined with ever-changing work assignments — I&amp;rsquo;ve started running an experiment of sorts: does a person need to &lt;em&gt;fully understand&lt;/em&gt; something before they can accomplish the work?&lt;/p&gt;
&lt;p&gt;From my observation so far, the answer is: you don&amp;rsquo;t need to fully understand in order to get something done. However, that&amp;rsquo;s a short-term view. From a long-term perspective, the hidden costs of &lt;em&gt;not knowing&lt;/em&gt; can be just as significant — sometimes even worse.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Visual C&#43;&#43; String to const char*</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-visualc-string%E8%BD%89%E6%88%90const-char/</link>
      <pubDate>Mon, 05 Nov 2007 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-visualc-string%E8%BD%89%E6%88%90const-char/</guid>
      <description>&lt;h2 id=&#34;converting-stdstring-to-const-char-in-visual-c&#34;&gt;Converting std::string to const char* in Visual C++&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Method 1: Convert to C-style string&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;string &lt;span style=&#34;color:#a6e22e&#34;&gt;str1&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hello world&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;c_str1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; str1.c_str();
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Method 2: Convert to array via data()&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;a_str1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;a_str1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; str1.data();
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Adding Development Tool Packages on Ubuntu/Debian</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E5%9C%A8ubuntudebian%E6%B7%BB%E5%8A%A0%E9%96%8B%E7%99%BC%E5%B7%A5%E5%85%B7package/</link>
      <pubDate>Wed, 31 Oct 2007 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E5%9C%A8ubuntudebian%E6%B7%BB%E5%8A%A0%E9%96%8B%E7%99%BC%E5%B7%A5%E5%85%B7package/</guid>
      <description>&lt;h2 id=&#34;adding-development-packages-on-ubuntudebian&#34;&gt;Adding Development Packages on Ubuntu/Debian&lt;/h2&gt;
&lt;p&gt;For general development:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt-get install build-essential
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For X window development:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt-get install x-window-system-dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For GNOME development:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt-get install gnome-devel
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For KDE development:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt-get install kde-devel
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Rapid Task Switching and Chaos</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E8%B6%85%E7%B4%9A%E8%AE%8A%E8%AE%8A%E8%AE%8A/</link>
      <pubDate>Mon, 29 Oct 2007 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E8%B6%85%E7%B4%9A%E8%AE%8A%E8%AE%8A%E8%AE%8A/</guid>
      <description>&lt;p&gt;Over the past few weeks, work has been changing at an absolutely ridiculous pace. Hence the title — &lt;em&gt;Super Transformation&lt;/em&gt;, like those charades-meets-variety-show segments on TV. It&amp;rsquo;s also fitting for the political sphere right now, where a better title might be &lt;em&gt;Super Deception&lt;/em&gt;, playing out like some endless animated Flash series. With elections in the next six months, that title would hold up. And while we&amp;rsquo;re at it — &lt;em&gt;Chang Ma-Bian&lt;/em&gt;, meaning someone who always lies.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Experience Premium HD Entertainment — Stepping into the Digital Life</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E9%AB%94%E9%A9%97%E9%A0%82%E7%B4%9A%E9%AB%98%E6%B8%85%E5%A8%9B%E6%A8%82%E4%BA%AB%E5%8F%97%E7%B2%BE%E5%BD%A9%E6%95%B8%E5%AD%97%E7%94%9F%E6%B4%BB/</link>
      <pubDate>Sun, 14 Oct 2007 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E9%AB%94%E9%A9%97%E9%A0%82%E7%B4%9A%E9%AB%98%E6%B8%85%E5%A8%9B%E6%A8%82%E4%BA%AB%E5%8F%97%E7%B2%BE%E5%BD%A9%E6%95%B8%E5%AD%97%E7%94%9F%E6%B4%BB/</guid>
      <description>&lt;p&gt;Recently I&amp;rsquo;ve been looking into the development of high-definition (HD) technology. What is HD? Those unfamiliar might not know — the first image that comes to my mind is&amp;hellip; the God of Gamblers movie character! I think I&amp;rsquo;ve been brainwashed too thoroughly. The second thing that comes to mind is a company name. And then finally I understood: HD = High Definition, the same HD that appears in all those &amp;ldquo;HD high-quality digital TV&amp;rdquo; ads!&lt;/p&gt;</description>
    </item>
    <item>
      <title>[R&amp;D Notes] Troubleshooting Busybox 1.7.2 taskset.c Compilation Errors</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-busybox-172-tasksetc%E7%B7%A8%E8%AD%AF%E7%94%A2%E7%94%9Ferror/</link>
      <pubDate>Sun, 30 Sep 2007 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-busybox-172-tasksetc%E7%B7%A8%E8%AD%AF%E7%94%A2%E7%94%9Ferror/</guid>
      <description>&lt;p&gt;While compiling Busybox 1.7.2 using the default config (&lt;code&gt;make defconfig&lt;/code&gt;) with a specific ARM toolchain, I encountered two specific compilation errors. One was related to the &lt;code&gt;route&lt;/code&gt; applet, and the other was in &lt;code&gt;taskset.c&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I resolved the &lt;code&gt;taskset.c&lt;/code&gt; issue by disabling it temporarily, but later found a proper fix. The root cause lies in a mismatch between uClibc (which Busybox is primarily designed for) and glibc. Specifically, the number of arguments for &lt;code&gt;sched_getaffinity&lt;/code&gt; and &lt;code&gt;sched_setaffinity&lt;/code&gt; differs between the two.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Ubuntu Dash vs Bash</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-ubuntu-dash/</link>
      <pubDate>Tue, 25 Sep 2007 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-ubuntu-dash/</guid>
      <description>&lt;p&gt;To speed up the boot process, Ubuntu uses &lt;strong&gt;dash&lt;/strong&gt; as the default shell instead of the traditional &lt;strong&gt;bash&lt;/strong&gt;. You can verify this at &lt;code&gt;/bin/sh → /bin/dash&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If you want to switch back to the original bash, type the following at the prompt:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo dpkg-reconfigure dash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When the configuration window appears, select &lt;strong&gt;&amp;ldquo;No&amp;rdquo;&lt;/strong&gt; to revert back to bash.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Recommendation:&lt;/strong&gt; If you&amp;rsquo;re doing software development on Ubuntu and write shell scripts, it&amp;rsquo;s safer to switch back to bash for compatibility.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[R&amp;D Notes] Implementing Linux Daemons in Embedded Systems</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-daemon%E6%87%89%E7%94%A8%E6%96%BClinux%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%B5%B1%E5%AF%A6%E4%BD%9C/</link>
      <pubDate>Wed, 19 Sep 2007 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-daemon%E6%87%89%E7%94%A8%E6%96%BClinux%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%B5%B1%E5%AF%A6%E4%BD%9C/</guid>
      <description>&lt;p&gt;Implementing Daemons in Embedded Linux systems is a fundamental task for long-running services. Based on the excellent &lt;em&gt;Linux Daemon Writing HOWTO&lt;/em&gt; by Devin Watson, I have refactored several processes in my current project to run as background services (daemons).&lt;/p&gt;
&lt;p&gt;By backgrounding these processes, we ensure they remain resident in the system without blocking the console or being tied to a specific session.&lt;/p&gt;
&lt;h3 id=&#34;core-implementation-pattern&#34;&gt;Core Implementation Pattern&lt;/h3&gt;
&lt;p&gt;The following C snippet demonstrates the standard procedure for &amp;ldquo;daemonizing&amp;rdquo; a process: &lt;code&gt;fork()&lt;/code&gt; from the parent, create a new session with &lt;code&gt;setsid()&lt;/code&gt;, change the working directory, and close standard file descriptors.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Patch vs. Embedded Systems Development Notes</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-patch-vs-%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%B5%B1%E7%99%BC%E5%B1%95%E5%BF%83%E5%BE%97/</link>
      <pubDate>Wed, 19 Sep 2007 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-patch-vs-%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%B5%B1%E7%99%BC%E5%B1%95%E5%BF%83%E5%BE%97/</guid>
      <description>&lt;p&gt;Recently I was assigned to work on a streaming server. Working from the original development platform, we applied patches via shell scripts to transform source files — using patches on the original source code to generate modified files, then compiling those into the required libraries or executables.&lt;/p&gt;
&lt;p&gt;At first I didn&amp;rsquo;t think much about why this approach was used, but I&amp;rsquo;ve recently started to appreciate its advantages.&lt;/p&gt;
&lt;p&gt;The original source files we need are open-source packages downloadable from the internet. To track our modifications, we use the &lt;code&gt;diff&lt;/code&gt; command to create patch files. When we combine multiple application components together, we end up with a collection of tarballs and patch files. We then manage them with shell scripts organized into three types:&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Patch Files in Linux</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-patch-file-in-linux/</link>
      <pubDate>Fri, 14 Sep 2007 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-patch-file-in-linux/</guid>
      <description>&lt;h2 id=&#34;creating-a-patch-file&#34;&gt;Creating a Patch File&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;diff -Naur old-dir-or-file new-dir-or-file &amp;gt; patchfile.patch
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;how-to-apply-a-patch&#34;&gt;How to Apply a Patch&lt;/h2&gt;
&lt;p&gt;There are two common ways to apply a patch:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Method 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cat new-patch | patch -p0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Method 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;patch -p0 &amp;lt; new-patch
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;understanding-the--p-strip-parameter&#34;&gt;Understanding the &lt;code&gt;-p&lt;/code&gt; (strip) Parameter&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;-p&lt;/code&gt; parameter specifies how many leading directory components to strip from paths in the patch file.&lt;/p&gt;
&lt;p&gt;For example, if a patch file begins with:&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Registering ActiveX Components on Windows</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E5%9C%A8windows%E4%B8%8B%E7%99%BB%E9%8C%84activex%E5%85%83%E4%BB%B6%E6%96%B9%E5%BC%8F/</link>
      <pubDate>Thu, 13 Sep 2007 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E5%9C%A8windows%E4%B8%8B%E7%99%BB%E9%8C%84activex%E5%85%83%E4%BB%B6%E6%96%B9%E5%BC%8F/</guid>
      <description>&lt;h2 id=&#34;registering-an-activex-component&#34;&gt;Registering an ActiveX Component&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-batch&#34; data-lang=&#34;batch&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;regsvr32 mcscal.ocx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;unregistering-an-activex-component&#34;&gt;Unregistering an ActiveX Component&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-batch&#34; data-lang=&#34;batch&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;regsvr32 /u mcscal.ocx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>[Work Notes] Embedding an OCX Component in a Webpage</title>
      <link>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E5%B0%87ocx%E5%B5%8C%E5%85%A5%E7%B6%B2%E9%A0%81%E4%B9%8B%E7%8B%80%E6%B3%81%E6%8F%8F%E8%BF%B0/</link>
      <pubDate>Wed, 12 Sep 2007 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/en/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E5%B0%87ocx%E5%B5%8C%E5%85%A5%E7%B6%B2%E9%A0%81%E4%B9%8B%E7%8B%80%E6%B3%81%E6%8F%8F%E8%BF%B0/</guid>
      <description>&lt;p&gt;An &lt;code&gt;.ocx&lt;/code&gt; component is provided by a third party and can be embedded in a webpage. This particular component has limited built-in functionality, so to extend its capabilities, the &lt;code&gt;.ocx&lt;/code&gt; file needs to be wrapped in a wrapper function before adding the extra features we need.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s always a bit challenging the first time you do something new. While I have a clear concept of what needs to be done, the tools themselves are quite unfamiliar — Windows application development is an area where I have very little experience.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
