<?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>工作點滴 on Fran Kuo | 研發領導力</title>
    <link>https://chenfu.ai/tags/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4/</link>
    <description>Recent content in 工作點滴 on Fran Kuo | 研發領導力</description>
    <generator>Hugo -- 0.157.0</generator>
    <language>zh-tw</language>
    <lastBuildDate>Wed, 12 Jun 2013 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://chenfu.ai/tags/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>[工作點滴] Looking for solid developer</title>
      <link>https://chenfu.ai/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/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-looking-for-solid-developer/</guid>
      <description>&lt;p&gt;Recently, I become very busy due to take over the tasks from other site. The original coding things are still there and so I start looking for outstanding guy to join us. The first month, I try to have some candidates from my colleagues and myself&amp;rsquo;s database but in vain. Now I shift this job to head hunter and start some interview.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve interviewed lots of people in my first job and second one. It&amp;rsquo;s much more interesting to interview with the guys from head hunter at this moment. Why? Lots of the factor would effect which kind of developer you want.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] wireless module development newbie</title>
      <link>https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-wireless-module-development-newbie/</link>
      <pubDate>Tue, 23 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-wireless-module-development-newbie/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve started collecting the information around the end of 2010 because the wireless technology advanced to much higher bandwidth for multimedia streaming.&lt;br&gt;
There are two conditions of the development that I thought.&lt;br&gt;
1. To develop the whole wireless part by ourselves.&lt;br&gt;
2. To buy the module directly from the supplier.&lt;br&gt;
But some important factors that make me just &amp;lsquo;collect information&amp;rsquo; at that moment.&lt;br&gt;
For 1, the expense is very horrible.&lt;br&gt;
- We have to pay chip vendor for NRE.&lt;br&gt;
- We are new to be the player and we have no credit to the chip vendor.&lt;br&gt;
- We have no equipment and we have to invest a lot to do it.&lt;br&gt;
- There are lots of tasks need for the regulation.&lt;br&gt;
To sum up, this is a money game for surveillance company and we see no market at that moment.&lt;br&gt;
For 2, we could leverage a lot tasks to supplier but we still have to prepare equipment to verify the whole system and get the experience of the regulation. However, the module cost and performance ratio could not meet our requirement. It is quite challenge for me to persuade my boss to do it.&lt;br&gt;
So what I can do is just keep attention on wireless technology.&lt;br&gt;
Until now, I have the chance to do the development finally.&lt;br&gt;
Although I&amp;rsquo;m newbie for wireless, it&amp;rsquo;s not too hard to enter this area. The reason is the technology become much mature and we can make it work even we do not know much about wireless. So, let&amp;rsquo;s just do it.&lt;br&gt;
The module I use is based on Atheros AR6103 and AR6003. The driver of these two chips are similar.&lt;br&gt;
The documents I study is are mainly from Atheros. I also reference the IEEE specification and search on Google.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] the study of webrtc and sip</title>
      <link>https://chenfu.ai/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/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-the-study-of-webrtc-and-sip/</guid>
      <description>&lt;p&gt;qfqwefqwefq:&amp;mdash;-&lt;br&gt;
asdfadfqewfqfcdxcdf41t54rtfqf&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] rtmps in rtmpdump with hardware engine development</title>
      <link>https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-rtmps-in-rtmpdump-with-hardware-engine-development/</link>
      <pubDate>Mon, 01 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-rtmps-in-rtmpdump-with-hardware-engine-development/</guid>
      <description>&lt;p&gt;Evostream server&amp;rsquo;s configuration for rtmps test&lt;/p&gt;
&lt;p&gt;Add the following content in the acceptors part in config.lua.&lt;/p&gt;
&lt;p&gt;This is for Win7 configuration and remember that we have to use double &amp;lsquo;&#39; instead of single for path.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://chenfu.ai/img/Blogger/rtmp_openssl_01.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://chenfu.ai/img/Blogger/rtmp_openssl_01.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The cipherSuite parameter, we could reference &lt;a href=&#34;http://www.openssl.org/docs/apps/ciphers.html#CIPHER_SUITE_NAMES&#34;&gt;http://www.openssl.org/docs/apps/ciphers.html#CIPHER_SUITE_NAMES&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://chenfu.ai/img/Blogger/rtmp_openssl_02.png&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://chenfu.ai/img/Blogger/rtmp_openssl_02.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;RTMP library&lt;/p&gt;
&lt;p&gt;The library is main from rtmpdump. The webpage is &lt;a href=&#34;http://rtmpdump.mplayerhq.hu/&#34;&gt;http://rtmpdump.mplayerhq.hu&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The libssl library - SSLv23 method is used in the RTMPdump.&lt;/p&gt;
&lt;p&gt;- SSLv23 method&lt;/p&gt;
&lt;p&gt;A TLS/SSL connection established with these methods will understand the SSLv2, SSLv3, and TLSv1 protocol.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] process to generate makefile by autotools with Makefile.am</title>
      <link>https://chenfu.ai/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/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;I&amp;rsquo;ve search on internet and get quick steps for whole process to generate Makefile by Autotools.&lt;/p&gt;
&lt;h1 id=&#34;autoscan------------------------scan-the-folder&#34;&gt;autoscan .                      // scan the folder&lt;/h1&gt;
&lt;h1 id=&#34;cp-configurescan-configureac---copy-the-configurescan-to-configureac&#34;&gt;cp configure.scan configure.ac  // copy the configure.scan to configure.ac&lt;/h1&gt;
&lt;h1 id=&#34;vi-configureac------------------edit-the-configureac&#34;&gt;vi configure.ac                 // edit the configure.ac&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;                              // add AM_INIT_AUTOMAKE(hello,1.0) in configure.ac  


                              // this is required marco for automake  
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&#34;aclocal--------------------------execute-aclocal-to-generate-aclocalm4&#34;&gt;aclocal                         // execute aclocal to generate aclocal.m4&lt;/h1&gt;
&lt;h1 id=&#34;autoconf-------------------------execute-autoconf-to-generate-configure&#34;&gt;autoconf                        // execute autoconf to generate configure&lt;/h1&gt;
&lt;h1 id=&#34;autoheader&#34;&gt;autoheader&lt;/h1&gt;
&lt;h1 id=&#34;automake-add-missing-----------run-automake&#34;&gt;automake &amp;ndash;add-missing          // run automake&lt;/h1&gt;
&lt;h1 id=&#34;touch-news-touch-readme-touch-authors-touch-changelog---create-related-documents&#34;&gt;touch NEWS; touch README; touch AUTHORS; touch ChangeLog  // create related documents&lt;/h1&gt;
&lt;h1 id=&#34;automake-add-missing-----------run-automake-again&#34;&gt;automake &amp;ndash;add-missing          // run automake again&lt;/h1&gt;
&lt;h1 id=&#34;configure----------------------execute-the-configure-to-generate-makefile&#34;&gt;./configure                     // execute the configure to generate Makefile&lt;/h1&gt;
&lt;h1 id=&#34;make-----------------------------execute-make&#34;&gt;make                            // execute make&lt;/h1&gt;
&lt;p&gt;According to the steps, I get more hint to modify the related files for my target.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] gstreamer from 0.10.x to 1.0.x in openwrt</title>
      <link>https://chenfu.ai/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/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 -&amp;gt; Modify Makefile and patch, compile ok.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;- gst-plugins-base -&amp;gt; Modify Makefile and patch, compile ok.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] SIP test of Freeswitch by FSClient</title>
      <link>https://chenfu.ai/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/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 for me to make sure the package is work correctly because of my lacking knowledge of sip. Then I try to be more familiar with how the sip works. First, prepare a PC and install the switch on it. We have two popular choices, one is Asterisk and another one is Freeswitch. I choose the Freeswitch because there is a precompiled binaries for win7 already.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] pjsip on ubuntu</title>
      <link>https://chenfu.ai/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/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;p&gt;- ALSA and OpenSSL libraries are optional and I do not install for first.&lt;/p&gt;
&lt;p&gt;- SDL, I download the version 2.0 and do &amp;ldquo;./configure&amp;rdquo;, &amp;ldquo;make; make install&amp;rdquo; to install the package to system. If we encounter privilege problem, please add sudo.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] pjsip package build in openwrt</title>
      <link>https://chenfu.ai/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/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 link to the extension package of ltq-tapi and oss. But what I need first is the package without extra packages. So I try to create the libraries by using the latest version 2.1 for the experiment.&lt;/p&gt;
&lt;p&gt;First, the Makefile of the package as following.&lt;/p&gt;
&lt;h1 id=&#34;makefile-of-the-package&#34;&gt;Makefile of the package.&lt;/h1&gt;
&lt;p&gt;include $(TOPDIR)/rules.mk&lt;/p&gt;
&lt;p&gt;PKG_NAME:=pjsip2&lt;br&gt;
PKG_VERSION:=2.1&lt;br&gt;
PKG_RELEASE:=0&lt;/p&gt;
&lt;p&gt;PKG_SOURCE:=pjproject-$(PKG_VERSION).tar.bz2&lt;br&gt;
PKG_SOURCE_URL:=http://www.pjsip.org/release/$(PKG_VERSION)/&lt;br&gt;
PKG_MD5SUM:=310eb63638dac93095f6a1fc8ee1f578&lt;/p&gt;
&lt;p&gt;PKG_INSTALL:=1&lt;br&gt;
PKG_BUILD_PARALLEL:=1&lt;/p&gt;
&lt;p&gt;PKG_BUILD_DIR:=$(BUILD_DIR)/pjproject-$(PKG_VERSION).$(PKG_RELEASE)&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] Liberated networking technology</title>
      <link>https://chenfu.ai/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/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-liberated-networking-technology/</guid>
      <description>&lt;p&gt;Our company update the home page to a brand new picture. There is a name &amp;lsquo;Liberated&amp;rsquo; to describe the new networking technology we implemented.&lt;/p&gt;
&lt;p&gt;According to the dictionary, I&amp;rsquo;m most likely the description &amp;ldquo;free from traditional social restraints&amp;rdquo; because we are trying to make the fundamental change in different area that we enter. It&amp;rsquo;s an interesting journey to me.&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 here. I plot the company&amp;rsquo;s product map simply by personal thinking as follow from the webpage.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] AirVision 2.0 preview on Win7</title>
      <link>https://chenfu.ai/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/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-airvision-20-preview-on-win7/</guid>
      <description>&lt;p&gt;Before the Chinese Lunar New Year, I got the latest alpha version of the AirVision2. It does not only  inherit the pros from previous version but more quick and stable also. I just have some preview here about the installation and main pages showing.&lt;/p&gt;
&lt;p&gt;After double clicking the windows installer, following the step of installation. When executing the airVision2, there is a windows security information pop up, please make sure the firewall does not block your application.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] Miracast in surveillance system</title>
      <link>https://chenfu.ai/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/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;br&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;br&gt;
Go back to the topic we want to talk for surveillance. I plot a picture as follow, and this is just like a traditional surveillance system with cameras, recorder and monitor.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] pure public or hybrid cloud for surveillance system?</title>
      <link>https://chenfu.ai/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/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 that we build the web services on public and the hybrid combine the private part. According to the information on wiki, the public cloud aka external cloud is related to the service is provided by third party. There is a picture on wiki can describe exactly what we talk about.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1aWVqnt5oleV8PILxAwBuN9j36ezoA3f29PcPtdWLV-YnyTiQgDle2slLhsMOYjYBNj78oHB1MNb_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 wiki. The private cloud can&amp;rsquo;t satisfy the requirements of the surveillance system. We do not talk about the community cloud also because it&amp;rsquo;s not real on surveillance system.&lt;br&gt;
There is a famous network camera company named Dropcam that deployment as pure public cloud system. When we install the the devices, we have to create an account and register them. As I know, Dropcam use the Amazon Web Service as the infrastructure. I just plot some simple block diagrams to describe it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] I2S bus channels setting in gstreamer alsasrc plugin</title>
      <link>https://chenfu.ai/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/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 he found that alsasrc consume lots of cpu resource(around 16% on the chip we use). He asked me why the test tool that provided from chip vendor is quite efficient(around 1~2%). It was a big gap to me and I started to find why is that.&lt;br&gt;
After hours checking, I found that the plugin may cause a busy wait in a while loop when the parameters set to non-blocking mode. I do a simple code modification and execute again but the cpu rate just lower to 12%. I&amp;rsquo;m a little frustrated about it but still had some enhancement.&lt;br&gt;
So I started to try different parameters combination because he told that he found three differences from alsasrc plugin and the test code.&lt;br&gt;
1. The setting of alsasrc is non-block mode but the test code is set to block mode.&lt;br&gt;
2. The channels setting of alsasrc is 1 but the test code is set to 2.&lt;br&gt;
3. The buffer size is limit in test code but alsasrc do not have that limit.&lt;br&gt;
For 1: I thought the non-block mode should be much more efficient but the busy wait should change.&lt;br&gt;
For 2: This is really weird because when I set the channels to be 2 in alsasrc plugin, the cpu rate become quite low. So I start to wondering if this is the characteristics of the I2S bus. I googled on the internet but did not find any information to describe that we have to set the channels parameter to be 2 in alsasrc plugin of gstreamer when the audio data bus is I2S. So I&amp;rsquo;ll confirm it later.&lt;br&gt;
For 3: I think it&amp;rsquo;s reasonable to limit the buffer size.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] RabbitMQ setup and test</title>
      <link>https://chenfu.ai/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/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-rabbitmq-setup-and-test/</guid>
      <description>&lt;p&gt;RabbitMQ setup and test&lt;/p&gt;
&lt;p&gt;Server side:&lt;/p&gt;
&lt;p&gt;My desktop PC is windows 7 and we 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;The installation guide is here &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 extra ethernet card and set the ip address to be 192.168.1.19 and make sure the firewall would not block the port 5672.&lt;/p&gt;
&lt;p&gt;Client side: we put the send and listen on 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;. We can follow the guide in the link to cross build and install on the embedded device we use.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] The realtime of transport stream on Miracast</title>
      <link>https://chenfu.ai/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/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;br&gt;
The structure of the transport stream or what we call MPEG-TS is not that simple. What I say is compare with raw encoded media direct push to intermedia. Maybe the transport stream is design for broadcasting usage, so the media stream can be selected and video can be smooth played are much more important than realtime. Because people would not feel any latency happened when they just watch TV.&lt;br&gt;
If we want to convert raw encoded media to transport stream. First, we have to packetize the raw encoded media to packetized elementary stream(PES). Second, we handle the PES by the muxing, splitting to small slice AV data&amp;hellip;etc to program stream or what we call transport stream. Finally, we send the transport stream to internet or satellite for people to receive and watch it on display. These steps create lots of latency and make us feel it&amp;rsquo;s not realtime enough.&lt;br&gt;
Let&amp;rsquo;s go back to the definition of the Miracast. It is to convert the raw encoded media stream to transport stream and then encapsulate the stream to RTP. Finally go through the wifi directly to display. I&amp;rsquo;m not sure how many latency will be created? Maybe someone can tell me.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] Airplay, DLNA and Miracast</title>
      <link>https://chenfu.ai/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/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-airplay-dlna-and-miracast/</guid>
      <description>&lt;p&gt;Today, there is a supplier come to our company to introduce their solution with DLNA and Miracast support. I survey the internet and found three kinds of protocols are discussed on the market. The DLNA has been talked for a long time and Apple is DLNA member originally. But Apple left DLNA and create the proprietary Airplay protocol. The Miracast is created by Wifi Alliance. It seems that Android alliance choose the Miracast to fight with Apple?&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] STL notes</title>
      <link>https://chenfu.ai/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/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-stl-notes/</guid>
      <description>&lt;p&gt;國外工程師用boost c++ library來進行相關專案的開發, 進而看到一些相關的STL語法, 所以還是得抽空K一下相關資料, 至少要把code看懂.&lt;/p&gt;
&lt;p&gt;From wiki: &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;
&lt;p&gt;The STL provides a ready-made set of common classes for C++, such as containers and associative arrays, that can be used with any built-in type and with any user-defined type that supports some elementary operations (such as copying and assignment). STL algorithms are independent of containers, which significantly reduces the complexity of the library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] Linux工具小記錄</title>
      <link>https://chenfu.ai/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/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;p&gt;打patch的command&lt;/p&gt;
&lt;p&gt;diff -Naur [from-file] [to-file] &amp;gt; [YourFileName.patch]&lt;br&gt;
-N  In  directory comparison, if a file is found in only one directory, treat it as present but empty in the other directory.&lt;br&gt;
-a  Treat  all  files as text and compare them line-by-line, even if they do not seem to be text.&lt;br&gt;
-u  Use the unified output format.&lt;br&gt;
-r  When comparing directories, recursively compare any subdirectories found.&lt;/p&gt;
&lt;p&gt;SVN版本控制下要移除所有目錄底下.svn&lt;br&gt;
$ rm -rf &lt;code&gt;find . -type d -name .svn&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] message pack rpc install on openwrt</title>
      <link>https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-message-pack-rpc-install-on-openwrt/</link>
      <pubDate>Mon, 04 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-message-pack-rpc-install-on-openwrt/</guid>
      <description>&lt;p&gt;Message pack with RPC extension required 3 packages.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;msgpack&lt;/li&gt;
&lt;li&gt;msgpack-rpc&lt;/li&gt;
&lt;li&gt;mpio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The msgpack and mpio are required by msgpack-rpc. The following are openwrt makefiles that I use to build the packages.&lt;/p&gt;
&lt;p&gt;msgpack library&lt;/p&gt;
&lt;p&gt;include $(TOPDIR)/rules.mk&lt;/p&gt;
&lt;p&gt;PKG_NAME:=msgpack&lt;br&gt;
PKG_VERSION:=0.5.7&lt;br&gt;
PKG_RELEASE:=1&lt;/p&gt;
&lt;p&gt;PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz&lt;br&gt;
PKG_SOURCE_URL:=http://msgpack.org/releases/cpp/&lt;br&gt;
PKG_MD5SUM:=705106a9378c792fe22d285dba5c142c&lt;br&gt;
PKG_INSTALL:=1&lt;/p&gt;
&lt;p&gt;include $(INCLUDE_DIR)/package.mk&lt;/p&gt;
&lt;p&gt;define Package/msgpack&lt;br&gt;
SECTION:=libs&lt;br&gt;
CATEGORY:=Libraries&lt;br&gt;
TITLE:=Message Pack library&lt;br&gt;
URL:=http://msgpack.org&lt;br&gt;
endef&lt;/p&gt;
&lt;p&gt;define Package/msgpack/description&lt;br&gt;
MessagePack is an efficient binary serialization format.&lt;br&gt;
It lets you exchange data among multiple languages like JSON but it&amp;rsquo;s faster and smaller.&lt;br&gt;
endef&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] msgpack-idl howto</title>
      <link>https://chenfu.ai/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/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-msgpack-idl-howto/</guid>
      <description>&lt;p&gt;msgpack-idl howto&lt;/p&gt;
&lt;p&gt;Step1 get the msgpack-idl&lt;/p&gt;
&lt;p&gt;$ git clone git://github.com/msgpack/msgpack-idl.git&lt;/p&gt;
&lt;p&gt;Step2 install the ruby tool that required&lt;/p&gt;
&lt;p&gt;$ sudo apt-get install ruby1.9.1&lt;/p&gt;
&lt;p&gt;Step3 go to msgpack-idl folder.&lt;/p&gt;
&lt;p&gt;$ sudo gem install msgpack-idl&lt;/p&gt;
&lt;p&gt;$ sudo msgpack-idl &amp;ndash;install java&lt;/p&gt;
&lt;p&gt;Step4 create a sample file &amp;lsquo;sample&amp;rsquo; with content as follow.&lt;/p&gt;
&lt;h2 id=&#34;message-node----1-string-address---2-mapstringstring-properties---3-optional-string-description--message-storagenode--node----4-long-capacity---5-optional-int-weight--1-&#34;&gt;&lt;code&gt;message Node {&lt;/code&gt; &lt;code&gt;  ``1``: string address&lt;/code&gt; &lt;code&gt;  ``2``: map&amp;lt;string,string&amp;gt; properties&lt;/code&gt; &lt;code&gt;  ``3``: optional string? description&lt;/code&gt; &lt;code&gt;}&lt;/code&gt; &lt;code&gt;message StorageNode &amp;lt; Node {&lt;/code&gt; &lt;code&gt;  ``4``:&lt;/code&gt; &lt;code&gt;long&lt;/code&gt; &lt;code&gt;capacity&lt;/code&gt; &lt;code&gt;  ``5``: optional&lt;/code&gt; &lt;code&gt;int&lt;/code&gt; &lt;code&gt;weight =&lt;/code&gt; &lt;code&gt;1&lt;/code&gt; &lt;code&gt;}&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Step 5 generate the java code by following command&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] protocol buffer and message pack initial</title>
      <link>https://chenfu.ai/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/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 have engineer discussion with the abroad engineer, I found he use the 3rd party library name message pack for binary serialization for internet application.&lt;/p&gt;
&lt;p&gt;More detailed information of message pack is here.&lt;br&gt;
&lt;a href=&#34;http://msgpack.org/&#34;&gt;http://msgpack.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I do not sure what&amp;rsquo;s the total different between these two library and I could not get a detailed comparison from them. So I will spend some time to study it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] protocol buffer message</title>
      <link>https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-protocol-buffer-message/</link>
      <pubDate>Thu, 31 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-protocol-buffer-message/</guid>
      <description>&lt;p&gt;The statusapi.pb-c.h and statusapi.pb-c.c are generated. Only header file is printing here for further explaination.&lt;/p&gt;
&lt;p&gt;statusap.pb-c.h&lt;/p&gt;
&lt;p&gt;/* Generated by the protocol buffer compiler.  DO NOT EDIT! */&lt;br&gt;
#ifndef PROTOBUF_C_statusapi_2eproto__INCLUDED #define PROTOBUF_C_statusapi_2eproto__INCLUDED&lt;br&gt;
#include &amp;lt;google/protobuf-c/protobuf-c.h&amp;gt;&lt;br&gt;
PROTOBUF_C_BEGIN_DECLS&lt;/p&gt;
&lt;p&gt;typedef struct _Statusapi__StatusRequestType Statusapi__StatusRequestType; typedef struct _Statusapi__StatusResponseType Statusapi__StatusResponseType; typedef struct _Statusapi__StatusParams Statusapi__StatusParams;&lt;/p&gt;
&lt;p&gt;/* &amp;mdash; enums &amp;mdash; */&lt;/p&gt;
&lt;p&gt;/* &amp;mdash; messages &amp;mdash; */&lt;br&gt;
struct  _Statusapi__StatusRequestType {   ProtobufCMessage base; }; #define STATUSAPI__STATUS_REQUEST_TYPE__INIT \  { PROTOBUF_C_MESSAGE_INIT (&amp;amp;statusapi__status_request_type__descriptor) \      }&lt;/p&gt;
&lt;p&gt;struct  _Statusapi__StatusResponseType {   ProtobufCMessage base; }; #define STATUSAPI__STATUS_RESPONSE_TYPE__INIT \  { PROTOBUF_C_MESSAGE_INIT (&amp;amp;statusapi__status_response_type__descriptor) \      }&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] protocal buffer examples</title>
      <link>https://chenfu.ai/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/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 web site.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;     &amp;lt;http://code.google.com/p/protobuf/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;     &amp;lt;http://code.google.com/p/protobuf-c/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now we are implementing this way that can be remote control from back-end applications.&lt;br&gt;
The protobuf-c has some extension from google&amp;rsquo;s protobuf and we can add the RPC funtion for further.&lt;/p&gt;
&lt;p&gt;The first experiment is using the message directly. We pack the message into a share memory between the server and the client. Both side can get the message no problem.&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] 邁向十年</title>
      <link>https://chenfu.ai/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/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;在整理先前在2008年Blog的內容，深覺自己先前不的成熟，不過隨著轉職與更多的經歷時，感到自己似乎也有那麼一丁點的長大。&lt;br&gt;
2011年1月在即將滿七年時，我下了一個重大的決定，離開了非常熟悉的工作環境，在某種程度來說，也算是離開了舒適圈，讓自己幾乎是重置，對於新工作的決定，則是剛好有機會可以在跨國大企業外商中任職，而此機會恰好符合本身幾個想法，&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;跨國大企業以提昇眼界&lt;/li&gt;
&lt;li&gt;研發團隊以延續工作經驗&lt;/li&gt;
&lt;li&gt;團隊面臨轉變以大展身手&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;於是乎，就在這全新的環境中開始了工作的第二趟旅程，第一個月並沒有像新鮮人時期的那種不適應的狀況，而且還有點過度亢奮，大量的瀏覽公司內部的網站，一切都非常的新鮮有趣，而後在滿三個月時，就讓我實際接任Team Leader的工作，並帶領一個Team來跑案子，在這期間跟國外的con-call，依公司的的專案流程sop撰寫相關的技術文件。&lt;br&gt;
除了必要的工作之外，還持續規劃並找出可以研發且並無與其他的RD團隊有衝突的專案，目標也很簡單，想初步先成立一個韌體團隊以增加台灣研發團隊的競爭力。&lt;br&gt;
依第一個工作上的經驗，電子、機構及軟韌體的人才如果能齊備，加上產品為光機電整合，不但門檻墊高且可讓台灣研發團隊的可見度大大提升。&lt;br&gt;
2011年9月時，提出了一個這樣的案子看是否有辦法依我的目標去發生，不過可惜的是，公司當時的策略並無法讓這樣的案子成行，接下來能做的就是把現有的專案更完美的執行，增加籌碼，同時間可以再持續修正提案，待時機更加成熟時再進行。&lt;br&gt;
而後在11月中旬時，恰好有一個機會，跟現在公司的老闆見面，Robert很年輕，不是跟我同年或是小我一歲，其經營公司的方式讓我大開眼界且前所未見，即便是他自己本身也在經營上不斷的嘗試，積極且讓我有一起創業打拼的感覺，這時的想法只有一定要見識一下。研發的彈性大，靠的是工程師自律的研發，對於有想法且不斷自我實現的人可以有很大的發揮。所以最後還是毅然在12月離開到現在的公司，某種程度上挺對不住前公司，但因為與其未來操之於人，還是會想要未來由自己所掌握。&lt;br&gt;
新工作至今一年多，這段時間研發的速度發常的快速，台灣的團隊效率非常高，除此外從國外的研發團隊也得到很多新的概念，跟這樣的一群人工作非常有意思，不同背景、文化在想法上的出發點完全不同，雖常常有衝突，但激盪出的火花讓我覺得未來是有很大機會能持續成長。&lt;br&gt;
邁向第十年，期待自己更加成熟，讓眼界更上層樓。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] ncftp-3.2.1 cross-compiling</title>
      <link>https://chenfu.ai/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/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-ncftp-321-cross-compiling/</guid>
      <description>&lt;p&gt;ncftp是一個ftp client，因為剛好案子需要使用ftp功能，&lt;br&gt;
編譯步驟如下：&lt;/p&gt;
&lt;p&gt;1. 產生Makefile，如果要用到curses得加入相關library，但我們的案子不需使用到！&lt;br&gt;
./configure &amp;ndash;disable-ccdv &amp;ndash;without-curses &amp;ndash;without-ncurse&lt;/p&gt;
&lt;p&gt;2. 編輯Makefile，將CC跟STRIP修改如下&lt;br&gt;
CROSS_COMPILE=arm-unknown-linux-gnu-&lt;br&gt;
CC=${CROSS_COMPILE}gcc&lt;br&gt;
STRIP=${CROSS_COMPILE}strip&lt;/p&gt;
&lt;p&gt;3. Make it！！&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] 安全監控產業的好文</title>
      <link>https://chenfu.ai/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/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;我前陣子在網路上找尋資料時，不小心看到了一個Blog在討論關於安全監控產業的文章，還蠻特別的，平常在網路上看Blog，也沒看到針對這個產業而發表的文章，而且透過Andy的文章，就認識了一個朋友，也分享了一些心得，網址連結如下：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://febon.blogspot.com/&#34;&gt;http://febon.blogspot.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;如果對安全監控產業有興趣的，也可以一起來討論討論。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] Eclipse IDE under Ubuntu</title>
      <link>https://chenfu.ai/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/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-eclipse-ide-under-ubuntu/</guid>
      <description>&lt;p&gt;以下的大部份內容從網路上轉過來，再加上我在設定過程之中，碰到的問題做一點修正。原本 Ubuntu 在內定預設的是採用 &lt;strong&gt;GCJ-1.4&lt;/strong&gt; ，在執行上效能較不佳)，因此第一步請在您熟悉的套件管理工具裡安裝如下的套件，在Ubuntu下可透過System/Synaptic Package Manage來安裝相關套件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;sun-java6-jre&lt;/strong&gt;(執行 Java 軟體必要的環境)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;sun-java6-jdk&lt;/strong&gt;****(Java 程序開發者才需要安裝)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;eclipse-jdt&lt;/strong&gt; (Eclipse 的 Java 開發工具套件)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;eclipse-common-nls&lt;/strong&gt;****(Eclipse 的地區化語言訊息，想要中文的操作介面請裝它)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;galternatives&lt;/strong&gt; (update-alternatives 的 GUI 前端工具，用來變更系統預設偏好)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;編輯以下的檔案內容，直接vim /etc/jvm&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;/etc/jvm&lt;/strong&gt; (定義系統使用的 JAVA_HOME)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;檢查或增加下列在檔案的最前面&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/usr/lib/jvm/java-6-sun&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;先執行一次 Eclipse 再關閉，來自動產生家目錄中的 &lt;strong&gt;.eclipse/&lt;/strong&gt; 目錄，新增檔案及下面的內容到 ~/.eclipse/&lt;strong&gt;eclipserc&lt;/strong&gt; (各別使用者自訂的 JAVA_HOME)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;/usr/lib/jvm/java-6-sun&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;檢查 /etc/eclipse/java_home&lt;/strong&gt; (定義Eclipse搜尋 JAVA_HOME 的順序)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 7.10: (已有不用追加)&lt;/li&gt;
&lt;li&gt;Ubuntu 7.04: 必須手動增加下列在&lt;strong&gt;第一行&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;/usr/lib/jvm/java-6-sun&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;執行命令：&lt;strong&gt;galternatives&lt;/strong&gt; ，開啟應用程式後，往下尋找下列三個 Alternatives&lt;br&gt;
&lt;strong&gt;jar&lt;/strong&gt;**、java、javac**&lt;br&gt;
內容option 均挑選開頭為 &lt;strong&gt;/usr/lib/jvm/java-6-sun/&amp;hellip;..&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;驗證在終端機執行下列命令：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;打開 Eclipse 驗證使用的 JRE&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[Help]- &amp;gt;[About Eclipse Platform]-&amp;gt;[Configuration Detail]&lt;/strong&gt;&lt;br&gt;
看看是否有多個&amp;quot;&lt;strong&gt;/usr/lib/jvm/java-6-sun- 1.6.0 &amp;hellip;.&lt;/strong&gt; &amp;ldquo;字詞出現即為正確。如此即建立好&lt;strong&gt;Java &amp;amp; Linux開發環境&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] Live555 streaming server &amp;quot;config.armlinux&amp;quot; 設定檔修正</title>
      <link>https://chenfu.ai/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/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;紅字部份，不然在link的時候會出現一堆error&amp;hellip;&amp;hellip;&lt;/p&gt;
&lt;p&gt;CROSS_COMPILE=        arm-unknown-linux-gnu-&lt;br&gt;
COMPILE_OPTS =        $(INCLUDES) -I. -O2 -DSOCKLEN_T=socklen_t -DNO_STRSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64&lt;br&gt;
C =            c&lt;br&gt;
C_COMPILER =        $(CROSS_COMPILE)gcc&lt;br&gt;
C_FLAGS =        $(COMPILE_OPTS)&lt;br&gt;
CPP =            cpp&lt;br&gt;
CPLUSPLUS_COMPILER =    $(CROSS_COMPILE)g++&lt;br&gt;
CPLUSPLUS_FLAGS =    $(COMPILE_OPTS) -Wall -DBSD=1&lt;br&gt;
OBJ =            o&lt;br&gt;
LINK =            $(CROSS_COMPILE)g++ -o&lt;br&gt;
LINK_OPTS =        -L.&lt;br&gt;
CONSOLE_LINK_OPTS =    $(LINK_OPTS)&lt;br&gt;
LIBRARY_LINK =        $(CROSS_COMPILE)ld -o&lt;br&gt;
LIBRARY_LINK_OPTS =    $(LINK_OPTS) -r -Bstatic&lt;br&gt;
LIB_SUFFIX =            a&lt;br&gt;
LIBS_FOR_CONSOLE_APPLICATION =&lt;br&gt;
LIBS_FOR_GUI_APPLICATION =&lt;br&gt;
EXE =&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] 在知與無知間的抉擇</title>
      <link>https://chenfu.ai/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/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;這陣子，在不斷嘗試一些新東西的過程之中，配合著一直改變的工作內容，我開始做一些實驗，有的時候，究竟要不要完全了解一個東西，才有辦法去完成這個工作？目前在我的觀察之中，是不必需要了解，就可以去做，然而這是短線，在長線觀點來看，有的時候造成的損失，並不會比較小！可是在實際上，上面看的是短期的績效，不管你隱性的成果如何的優良，只要是看不到，那就是個屁，是的！就是紅衫軍拼出來的字！&lt;br&gt;
然而，我想實驗的，就是如何去創造出一個隱性的價值，去調整我所能掌握的組織，雖然我不甚認同在無知中去做事情，不過在實現產品的過程之中，完全拘泥於知這件事情上面，會造成許多延遲，而如何在知與無知之間，做很好的調整，真的是一件不容易的事情，但如果真的能好好的拿捏，我想我應該就更成長了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] VisualC string轉成const char</title>
      <link>https://chenfu.ai/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/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;p&gt;// 轉化成c風格&lt;br&gt;
string   str1(&amp;ldquo;hello   world&amp;rdquo;);&lt;br&gt;
const   char   *c_str1=str1.c_str();&lt;br&gt;
//轉化成數組&lt;br&gt;
const   char   *a_str1=0;&lt;br&gt;
a_str1=str1.data();&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] 在ubuntu/debian添加開發工具package</title>
      <link>https://chenfu.ai/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/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;p&gt;在ubuntu/debian添加開發工具package&lt;br&gt;
如果是 general development&lt;br&gt;
apt-get install build-essential&lt;/p&gt;
&lt;p&gt;如果是 X development&lt;br&gt;
apt-get install x-window-system-dev&lt;/p&gt;
&lt;p&gt;如果是 GNOME development&lt;br&gt;
apt-get install gnome-devel&lt;/p&gt;
&lt;p&gt;如果是 KDE development&lt;br&gt;
apt-get install kde-devel&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] 超級變變變</title>
      <link>https://chenfu.ai/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/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;最近幾個星期，工作內容轉換的速度真他X的有夠快，因此我把標題設定為超級變變變，就像在政治上的口水也可以把標題訂為超級騙騙騙，然後可以像網路上面的Flash動畫，製作出一連串的續集，反正接下來半年都是在選舉，用這個標題應該還不錯！剛好我又想到，長馬扁，就是常常騙人的意思。&lt;br&gt;
回歸正題，我不曉得是我家主管在考驗我還是怎樣，最近工作常常就是：那個Fran，我來分工合作一下，你寫streaming server，我來寫client。一星期後，那個Fran，我在想那個Streaming server我請S公司去問一下價格，那client這邊有VLC、MPlayer，然後還有樓下的CMS，我們就都Try看看，接著，我又被指派到看VLC應用程式，又一星期後，那個Fran，CMS修改已經整理到一個段落，那我們就用這個好了，我工作內容又變處理CMS的軟體，一下，三個星期就這麼過去了，只見一事無成的我，也許，他想讓我學會如何將我的人生multitasking，而上星期五，我的最新任務又來了，又變成要寫協助寫VHDL了……然而，板子有點問題，星期一，我又回去弄CMS了！&lt;br&gt;
因為這樣，我突然覺得有點Lost，可能主管們不知道系統不斷被中斷，一沒弄好就容易當機咩！我現在的日子就是這麼回事，而我也處於當機的邊緣…&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] 體驗頂級高清娛樂，享受精彩數字生活</title>
      <link>https://chenfu.ai/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/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;最近去看一些關於高清發展的相關消息，什麼是高清？沒接觸的人應該不曉得，我第一次看到這個名詞，我腦中第一個浮現的圖案是&amp;hellip;&amp;hellip;&amp;hellip;&amp;hellip;&amp;hellip;..賭神高進！看來我已經中毒甚深！第二個浮現的圖樣是一間公司，接下來的想法是，怎麼有人取一個讓人覺得有點台的公司名稱！最後，我終於了解了，高清=HD，就是High-Definition！就是廣告上常看到的HD高畫質數位電視的那個HD啦！&lt;br&gt;
標題是一間大陸公司產品使用手冊一開始的標題，看到這個，我真覺得這幾年大陸的發展真的是一日千里，當大陸那如火如荼的發展新一代的技術並開始試著去制定一些標準時，台灣相對上逐漸的落後了，現今來看台灣的競爭力仍然存在，但這個差距逐漸的縮小中。而大陸原本讓人覺得是低價次品牌的東西，慢慢開始為人所接受，因此我們該好好正視這個變化。&lt;br&gt;
無論如何，HD在數位家庭的位置上，隨著LCDTV的普及，開始有了許多對於高畫質的週邊需求，目前長期著力於HD發展的廠商非Sony莫屬，Sony的一系列規劃佈局，看來逐漸進入收網階段，不可否認，在Blueray和HD-DVD的競爭中，從佈局的配合度及廣度，Blueray在沒有其他特別的事件介入下，在我認為應該是佔了上風，而Sony在未來幾年有很大機會享受到HD所帶的甜美的果實，雖然在遊戲機上被Wii給突襲了！我覺得無損於Sony在這塊市場的發展，我們可以持續觀察這個市場的發展。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] Busybox 1.7.2 taskset.c編譯產生error</title>
      <link>https://chenfu.ai/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/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;在編譯busybox時，我用預設的config，即&lt;br&gt;
#make defconfig&lt;br&gt;
然後再用某toolchain，&lt;br&gt;
#make ARCH=arm CROSS_COMPILE=arm-linux-&lt;br&gt;
編譯之後會產生兩個狀況的error，此為其一，另一個為route，&lt;br&gt;
但我尚未找到解決方法，暫時將其disable就可以編譯過，&lt;br&gt;
而這個taskset.c我在網路上找到如下一篇文章，&lt;br&gt;
主要的問題是產生在sched_getaffinity與sched_setaffinity&lt;br&gt;
這兩個函式的參數個數，&lt;br&gt;
busybox主要為uclibc所設計，而在glibc底下剛好就發生了這個mismatch，&lt;br&gt;
而編譯的狀況跟source code修改如下，如此即可順利編譯成功！&lt;br&gt;
-&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;ndash;&lt;br&gt;
CC miscutils/taskset.o&lt;br&gt;
miscutils/taskset.c: In function &lt;code&gt;taskset_main&#39;:   miscutils/taskset.c:78: warning: passing arg 2 of &lt;/code&gt;sched_getaffinity&amp;rsquo;&lt;br&gt;
makes pointer from integer without a cast&lt;br&gt;
miscutils/taskset.c:78: error: too many arguments to function&lt;br&gt;
&lt;code&gt;sched_getaffinity&#39;   miscutils/taskset.c:86: warning: passing arg 2 of &lt;/code&gt;sched_setaffinity&amp;rsquo;&lt;br&gt;
makes pointer from integer without a cast&lt;br&gt;
miscutils/taskset.c:86: error: too many arguments to function&lt;br&gt;
`sched_setaffinity&amp;rsquo;&lt;br&gt;
make[1]: *** [miscutils/taskset.o] Error 1&lt;br&gt;
make: *** [miscutils] Error 2&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] ubuntu dash</title>
      <link>https://chenfu.ai/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/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-ubuntu-dash/</guid>
      <description>&lt;p&gt;Ubuntu 為了加速開機的速度使用了 dash 來取代傳統的 bash在/bin底下可以看到，/bin/sh -&amp;gt; /bin/dash，如果我們要改為原本傳統的bash，則可以在提示字元底下鍵入：&lt;br&gt;
sudo dpkg-recofigure dash&lt;br&gt;
出現了設定視窗之後選擇&amp;rsquo;No&amp;rsquo;即可改回原本的bash，建議有在ubuntu底下開發軟體的伙伴們，如有寫到關於shellscript的部份，還是改回bash比較保險。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] Daemon應用於Linux嵌入式系統實作</title>
      <link>https://chenfu.ai/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/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;Daemon應用於Linux嵌入式系統實作&lt;/p&gt;
&lt;p&gt;Daemon(或是service)對有玩linux的同好應該是耳熟能詳的東西，Daemon大陸翻譯為守護進程，而我在台灣找網站沒有找到什麼特別的翻譯，在Devin Watson先生的Linux Daemon Writing HOWTO中，有做詳細的入門簡介及一個範例，我透過這個範例將目前專案的幾個程序做了一個小改變，如此可以達到常駐於系統背景的功能，以下是我的一個程式片段，可供各位參考應用。&lt;/p&gt;
&lt;p&gt;int main(void)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    char message[20];  



    // Process ID and Session ID  

    pid_t pid, sid;  



    // Fork off the parent process.  

    pid = fork();  

    if (pid &amp;lt; 0) {  

            exit(EXIT_FAILURE);  

    }  



    // If we got a good pid, then we  

    // can exit the parent process.  

    if(pid &amp;gt; 0) {  

            exit(EXIT_SUCCESS);  

    }  



    // Change the file mode mask  

    umask(0);  



    // Open any logs here  

      

    // Create a new SID for the child process.  

    sid = setsid();  

    if(sid &amp;lt; 0) {  

            exit(EXIT_FAILURE);  

    }  

      

    // Change the working directory.  

    if((chdir(&amp;quot;/&amp;quot;)) &amp;lt; 0) {  

            exit(EXIT_FAILURE);  

    }  

      

    // Close out the standard file descriptors.  

    close(STDIN_FILENO);  

    close(STDOUT_FILENO);  

    close(STDERR_FILENO);  



    // Daemon-specific initialization goes here  

    // Set the GPIO.  

    // 這個部分是我所寫的初始化GPIO的應用程式。  

    system(&amp;quot;/usr/sbin/setgpio -il&amp;quot;);  



    while(1){  

            // 這個部份是透過網路上找的另一個程式，  

            // 如果可以透過system，去取得回應值並將之存於一個Buffer中  

            // 還蠻好用的。  

            // Get the status.  

            my_system(&amp;quot;/usr/sbin/getgpio --status&amp;quot;, message, 20);  

            if(message[17]==&#39;0&#39;){  

                    system(&amp;quot;/usr/sbin/setgpio -ol&amp;quot;);  

            }  

            else if(message[17]==&#39;1&#39;){  

                    system(&amp;quot;/usr/sbin/setgpio -oh&amp;quot;);  

            }  



            // Sleep for 5sec.  

            sleep(5);  

    }  



return 0;  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] Patch vs 嵌入式系統發展心得</title>
      <link>https://chenfu.ai/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/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;這陣子被Assign工作到弄stream server上面，從原本的發展平台上面，使用了patch加上shell script的方式來將檔案從原始碼，透過patch將原始碼變成修改過的檔案，再compile生成需要的聯結檔或著是執行檔，一開始的時後沒有仔細去想說為何要如此做，但最近開始有感覺如此做的好處。&lt;br&gt;
這些我們需要的原始檔案是可以透過網路方式去取得的open source，而這些檔案就是最初的原始檔，而修改過後的內容，我們透過diff的指令去製作出patch file，當我們一個個將不同功能的應用程式組合起來，我們可以得到一堆壓縮檔和一堆patch file，再透過shell script分別可以命名為，EXTAR：extract tarball，MAKE：make all application與BUILD：build to directory we want，以上三種方式來管理，如此可以讓整個專案的架構看起來很容易理解，目前，我正嘗試用此方式再reconstruct相同的東西，只是是各應用程式的升級版，如果可以順利build起來，那未來要升級相關程式應該是沒有太大的問題，當然這不是指在程式開發過程中，而是已經開發到一個程度之後，對整個專案做一個整理，如果要轉交工作給別人的時候，可以讓別人很快的清楚明白系統的架構。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] patch file in Linux</title>
      <link>https://chenfu.ai/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/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-patch-file-in-linux/</guid>
      <description>&lt;p&gt;&lt;strong&gt;建立patch檔案使用的命令&lt;/strong&gt;&lt;br&gt;
diff -Naur 舊目錄或檔案 新目錄或檔案 &amp;gt; patch檔案&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;如何使用patch&lt;/strong&gt; 對於一個patch檔案，有兩種常用使用方法：&lt;br&gt;
1. cat new-patch | patch -p0&lt;br&gt;
2. patch -p0 &amp;lt; new-patch&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;patch命令裡面的層數&lt;/strong&gt;&lt;br&gt;
參數-p來指定從第幾層開始比較。比如有一個patch檔案的開頭是：&lt;br&gt;
-&amp;ndash; old/modules/network JAN 26 12:11:36 2002&lt;br&gt;
+++ new/modules/network SEP 20 20:07:38 2003&lt;br&gt;
如果使用參數-p0，就表示從當前目錄，一直找到network的目錄。&lt;br&gt;
如果使用參數-p1，就代表忽略第一層，表示從當前目錄找modules目錄，一直找到network目錄。&lt;br&gt;
這樣會忽略掉patch檔案頭提到的old及new目錄。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;patch的結構：&lt;/strong&gt;&lt;br&gt;
分別由&amp;mdash;/+++開頭的兩行，表示要patch的檔案。&lt;br&gt;
一個patch檔案中的多個patch&lt;br&gt;
一個patch檔案中可能包含以&amp;mdash;/+++開頭的很多區塊，每一區塊用來形成一個patch。&lt;br&gt;
因此在一個patch檔案中可以包含好多個patch。&lt;br&gt;
區塊是patch中要修改的地方，通常由不用修改的東西開始和結束。&lt;br&gt;
他們只是用來表示要修改的位置。&lt;br&gt;
而區塊通常以**@@** 開始，&lt;br&gt;
結束於另一個區塊的開始或者一個新的patch head。&lt;br&gt;
區塊的縮進，區塊會縮進一列，&lt;br&gt;
而這一列是用來表示這一行是要增加還是要刪除的。&lt;br&gt;
區塊的第一列&lt;br&gt;
+號表示這一行是要加上的。&lt;br&gt;
-號表示這一行是要刪除的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[工作點滴] 在windows下登錄ActiveX元件方式</title>
      <link>https://chenfu.ai/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/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;p&gt;登錄ActiveX：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;regsvr32 mcscal.ocx
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;反登錄ActiveX：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;regsvr32 /u mcscal.ocx
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>[工作點滴] 將ocx嵌入網頁之狀況描述</title>
      <link>https://chenfu.ai/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/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;.ocx元件是由Third Party所提供的一個可嵌在網頁上的一個元件，然後這個元件的功能有所限制，因此，為了要擴展此一元件的功能，必需要將此ocx檔，包進一個包裏裡(wrapper function)後，再加上自己所需要的一些功能，沒做過的事情初次做果然都是困難重重，雖然大致上的概念已經想的清楚了，但工具的使用實在是不熟悉，視窗程式設計對我而言來說，算是經驗稀少的，待我再搞個幾天，再來發表一下心得…XD！&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
