2021年9月14日 星期二

阿扁台南門事件

2021/9/13
陳致中(臉書):"家父母台南住家門外上週晚間遭不明人士放置可疑包裹物!已報警處理!因動機及企圖不明,我感到擔憂。"
https://news.ltn.com.tw/news/society/breakingnews/3670731
https://news.ltn.com.tw/news/politics/breakingnews/3670670

陳致中(臉書貼文留言):"公文紙袋是凱達格蘭基金會台北辦公室前幾天寄資料給父親的,資料取出後、紙袋就資源回收,推測是被不明人士從垃圾場撿回,裝入衣物、工具後放到父母住處門外顯眼處,很明顯是要讓父母帶回家裡..."
https://news.ltn.com.tw/news/politics/breakingnews/3670684
https://www.ctwant.com/article/139555

陳致中(臉書轉陳水扁聲明):"感謝警方今天傍晚才來詢問...距9月7日晚上請大樓管理中心幫忙報案,已事隔多日。因為今年是911事件20週年。 阿扁對收到不明郵包,衣服包藏有硬硬的東西,當然心生恐懼。阿扁怎麼知道該東西是不是危險物品,或者有沒有針對性。幾天過去了,沒有看到警方來到現場並訊問相關人等,阿扁才在昨晚去電派出所所長,並在早上要求大樓管理中心督導務請警方積極辦理....籲請警方充分瞭解當事人每天生活在恐懼之中的心情,從速偵辦為感!"
https://news.ltn.com.tw/news/society/breakingnews/3670731


2021/9/14
台南警方:"此包裹是9月7日當天,陳家女看護將家中不用紙袋放到一樓回收室,但她當時把一件回收衣服塞在紙袋後忘了取回,因紙袋上有陳水扁收的字樣,有人才將紙袋放回陳家住處前,目前仍在調查刷子(*)是誰放入的。"
https://udn.com/news/story/7315/5743999

台南市警察局第一分局分局長方國璽:"...經檢視監視器畫面比對後,發現紙袋內裝有衣服1件、毛刷(*)1支,不具危害性...警方受理此案後未能主動向報案者說明偵辦進度,造成陳水扁及家屬不安,他向陳水扁及家屬表達歉意,並已向市警局自請處分,分局後續將主動進行關懷慰問並加強周邊安全維護。"
https://www.cna.com.tw/news/asoc/202109140062.aspx
(*)參考其他新聞報導為鐵刷/電動刷子

台南市警察局長方仰寧:"...警方對於陳前總統家中放置牛皮紙袋的事没處理好,也沒有向陳報告偵辦進度表示歉意。並對台南市警一分局長方國璽記過處分,後續並由督察室調查,追究相關責任。"
https://udn.com/news/story/7315/5744260

台南市警察局新聞稿:"...前總統住處門口遭人置放牛皮紙袋案,本局第一分局受理報案後雖立即展開偵處,保全證物送驗...惟於偵辦過程中第一分局未依三線系統報告警察局,亦未適時向陳前總統說明案件之偵處進度,致讓陳前總統心生疑懼...分局長方國璽記過2次...查究相關人員疏失責任。"
https://udn.com/news/story/7315/5744260

不明好(or有)心人士:(缺述)

最後 "分局長記過2次"

2017年5月19日 星期五

Windows 7 SP1 Windows Update 檢查更新時 CPU 使用量過高或時間過長(卡住)

這幾天 WannaCry 病毒肆虐,您的 windows 有保持著更新修正嗎?好久以前我重灌 Windows 7 (因為跑越慢),安裝好開機後"偶然"發現其實我的 Windows Update 已經卡住不再自動更新....Google 討論後了解原因是"後"更新與"前"更新包衝突,身為 Windows 的使用者也算是一種悲哀 (Wana Cry) 吧...haha 就貼一下當時的筆記上來~

Windows 7 SP1 Windows Update 檢查更新時 CPU 使用量過高或時間過長(卡住)
(How to fix windows update stuck checking)

Windows 7 SP1 在某次更新之後或全新安裝的情況下,會發生 Windows Update 在檢查更新時,CPU 使用量會非常高,且掃描更新時間過長或卡住的狀況。

解決辦法:

    1. 先關閉 Windows Update 服務 (若不關閉,更新包有可能無法安裝)
        (控制台 > 系統及安全性 > Windows Updates > 變更設定 > 選 “永遠不檢查更新",後按確定)
    2. 重新開機
    3. 手動下載並安裝 Windows 7 和 Windows Server 2008 R2 的 2015 四月更新包 (KB3020369)
        32 位元 http://www.microsoft.com/zh-TW/download/details.aspx?id=46827
        64 位元 http://www.microsoft.com/zh-TW/download/details.aspx?id=46817
    4. 手動下載並安裝 Windows 7 和 Windows Server 2008 R2 的 2016 七月更新包 (KB3172605)
        32 位元 http://www.microsoft.com/zh-TW/download/details.aspx?id=53335
        64 位元 http://www.microsoft.com/zh-TW/download/details.aspx?id=53332
    5. 重開機後,恢復 Windows Update 服務並檢查更新

資料來源 (英文):

http://superuser.com/questions/951960/windows-7-sp1-windows-update-stuck-checking-for-updates
http://support.microsoft.com/en-us/kb/3200747

相關資料 (英文):

April 2015 servicing stack update for Windows 7 and Windows Server 2008 R2 – http://support.microsoft.com/en-us/kb/3020369
July 2016 update rollup for Windows 7 SP1 and Windows Server 2008 R2 SP1 – http://support.microsoft.com/en-us/kb/3172605

2017年5月12日 星期五

Cordova 初探筆記

-----------------------------------------------------------
0) 準備/前提
-----------------------------------------------------------
1. 你已經安裝好各平台"自身"的開發環境了

    MEMO: Android: https://cordova.apache.org/docs/en/latest/guide/platforms/android/
          iOS: https://cordova.apache.org/docs/en/latest/guide/platforms/ios/
          ...

    建議: Andriod Studio 安裝全部預設元件,並也用預設的路徑...參見 B) 的第 6 項 MEMO

2. 設置相關的環境變數,或之後檢查再設置...參見 B) 的第 6 項

-----------------------------------------------------------
A) 安裝 node.js(含npm), cordova
-----------------------------------------------------------
1. 安裝 node.js
    來源: http://nodejs.org/

    NOTE: 下面功能必須安裝
        [] Node.js runtime
        [] npm package manager
        [] Add to PATH


2. 驗證 node 安裝
    開啟命令提示字元,輸入 node,是否有執行並回應新行,顯示提示號 '>'
        C:\>node
    提示號 '>' 下輸入 1+2 ,檢查是否有回應 3 的答案
        C:\>node
        >1+2

    NOTE: node.js 是利用 google chrome v8 引擎執行, 如果出現 Windows 安全性警示,
          按下解除封鎖按鈕


3. 驗證 npm 安裝
    開啟命令提示字元,輸入 npm,是有否顯示 usage 訊息
        C:\>npm

4. 安裝 cordova
    開啟命令提示字元,輸入
        C:\>npm install -g cordova

    NOTE: 必須要有網路連線 npm 會下載安裝包
    NOTE: 建議全域安裝 '-g'


5. 驗證 cordova 安裝
    開啟命令提示字元,輸入 cordova,是否有顯示 synopsis 訊息
        C:\>cordova

6. (非必要) 更新 cordova
    開啟命令提示字元,輸入
        目前版本 (本地)
            C:\>cordova -v
        查最後版本 (網路)
            C:\>npm info cordova version
        升級
            C:\>npm update -g cordova  (沒法更新 7.0.0 -> 7.0.1?)
            或
            C:\>npm install -g cordova

    MEMO: 唯有更新 cordova 後,'platform update' 才能不指定版號更新,
          參見 C) 第 5 項


-----------------------------------------------------------
B) 建立新 cordova 專案
-----------------------------------------------------------
1. (非必要,只是多專案時都可以在一個父目錄下) 建立一個工作目錄 'work'

2. 在此工作目錄下開啟命令提示字元 (或開啟後進入此工作目錄)
    C:\work>

    NOTE: 以後全都要在命令提示模式下操作

3. 假設:專案目錄 myapp,反向域樣式識別碼 aaa.bbb.ccc.MyApp,應用程式的顯示標題 MyApp

    命令提示字元下執行
    C:\work>cordova create myapp com.mycompany.myteam.myapp MyApp

    MEMO: cordova create <PATH> [ID [NAME [CONFIG]]] [options]

    P.S. cordova 將在 C:\work\myapp 下生成專案檔案


4. 進入 C:\work\myapp 目錄下
    C:\work>cd C:\work\myapp
    C:\work\myapp>

    *** NOTE: 專案目錄建立後,以後所有 cordova 命令全都在專案目錄 (C:\work\myapp)
              下操作


5. 加入目標平台 android, ios ...
    c:\work\myapp>cordova platform add android ios

    NOTE: 你必須先安裝好該平台的開發環境 (browser 除外),否則會提示警告,並且之
          後跑執行(run)/建構(build)會失敗


    MEMO: cordova platform <command> [options]
    MEMO: cordova 7.0 之後,
'platform add' 自動加 '--save' 選項,參見下
          面 D) 的 NOTE 2,3

6. (非必要,但建議) 檢查是否滿足平台的開發環境需求
    c:\work\myapp>cordova requirements --verbose

    NOTE: 環境變數可能(*)須要手動設置...
          Android platform:
            JAVA_HOME
                ...
            ANDROID_HOME
                如果安裝在
                    C:\Program Files\Android\Android Studio
                    C:\Users\MyName\AppData\Local\Android\sdk
                則執行(臨時)
                    c:\work\myapp>set ANDROID_HOME=C:\Users\MyName\AppData\Local\Android\sdk
                或新增環境變數(永久)
                    控制台->進階系統設定->環境變數->系統變數, 新增...
            PATH
                (我沒做) 建議新增 C:\Users\MyName\AppData\Local\Android\sdk\platform-tools;C:\Users\MyName\AppData\Local\Android\sdk\tools;C:\Users\MyName\AppData\Local\Android\sdk\tools\bin

            Gradle 執行路徑可能(*)需要新增到 PATH 變數 (我沒做)

    MEMO: 經驗上這邊常常會檢查出錯 (這表示稍後建構應用程式也會失敗),錯誤的原因
          requirements 指令已經列出,如果是環境變數沒設置很容易解決,而正確設置還
          出錯是常常在網路社群 (like StackOverflow...) 被詢問的,如 Gradle 找不到
          最多人問...

          我發現終究原因是平台的 SDK/Tools 頻繁改版,但 SDK/Tools 與 Cordova
          platform 開發的人員是不同的一群人,Cordova platform 開發也會改版,並依據
          當前的 SDK/Tools 測試發行(*),唯沒法呼應全部玩家的環境及手上 SDK/Tools 的
          版本,所以建議一開始各抓最新版 (平台的 SDK 日期不要比 Cordova 新) 設置好
          如果測過,謹慎更新 SDK(*) 或 Cordova,再發生 requirements 有錯誤時,無法
          解決則最終就是回歸上次 ok 的版本..."_"


          如下有一個案例,更新 Android SDK Tools 後,Cordova 報 Gradle 找不到        
          因 Gradle 搬家了:
          C:\Users\MyName\AppData\Local\Android\sdk\tool
          到:
          C:\Program Files\Android\Android Studio\plugins\android\lib\templates\gradle\wrapper
          ...
          http://stackoverflow.com/questions/42613882/error-could-not-find-gradle-wrapper-within-android-sdk-might-need-to-update-yo

          (*)建議: 安裝 SDK/Tools 時預設元件不要核銷,Cordova platform 有時(**)
                   會用到...
                   並用預設的路徑,Cordova 優先會去那邊找...就可不用設置環境變數


          (**)P.S. 如我有一次更新 android platform 後,出現 cmd: Command failed with
                   exit code 1 Error output: 'avdmanager'....錯誤,研究發現這是新版
                   android platform 改用此 cmd tool (來自 android sdk tools) 來判定
                   android target,但我 ANDROID_HOME 下是沒這東西的,後重新安
                   Android Studio 時懷疑可能是我之前省硬碟空間沒裝虛擬機器選項?


-----------------------------------------------------------
C) 編輯 cordova 專案
-----------------------------------------------------------
1. 撰寫你的 html5 程式碼位於
    C:\work\myapp\www\

    NOTE: 此 www 目錄會在執行/建構時複製至目標平臺的子目錄中,如 platforms/ios/www 或
          platforms/android/assets/www,請編輯此處 www 目錄中的檔案,而不是位於平臺的
          子目錄下的檔案


2. (非必要) 如果需要安裝外掛
    c:\work\myapp>cordova plugin add cordova-plugin-inappbrowser
    c:\work\myapp>cordova plugin add cordova-plugin-camera
    ...etc

3. 執行
    c:\work\myapp>cordova run android

   構建指定平台
    c:\work\myapp>cordova build android

   或構建全部
    c:\work\myapp>cordova build

   或發行(簽署)
    c:\work\myapp>cordova run android --release -- --keystore=../my_release_key.keystore --storePassword=my_password --alias=my_alias_name --password=my_password

    c:\work\myapp>cordova build android --release -- --keystore="..\android.keystore" --storePassword=android --alias=mykey

    NOTE: 當使用上述 CLI(Command Line Interface) 去執行/建構應用程式 (或外掛重新安裝)
          ,專案目錄下 /platforms/ 裡面的某些檔案會被 CLI 覆蓋,所以除非知道哪些不會有影

          (如: platforms\android\src\com\ 下加入自己的 android java 程式...),不
          應該對裡面的文件做編輯修改

    MEMO: 簽署: https://cordova.apache.org/docs/en/latest/guide/platforms/android/index.html#signing-an-app

4. (非必要) 除錯
    MEMO: 除錯: https://cordova.apache.org/docs/en/latest/guide/platforms/android/index.html#debugging

5. (非必要) 更新
    cordova 本身
        更新參考 A) 的第 6 項

    查各平台最後版本 (網路)
        npm info cordova-android version
        npm info cordova-ios version
        ...etc

    專案目前安裝平台及版本
        cordova platform ls

    更新至最後(固定標記)版本
        cordova platform update android
        ...etc

    NOTE: 各 cordova 版本發行時會固定標記(pinned)一個預設平台版本號
          (available platforms), platform update/add 只會更新到/加入該版,除非指
          定版號(如下),或先更新 cordova


    更新至指定版本
        cordova platform update android@5.4.3
        ...etc

    NOTE: 可以任意指定網路上有的版本

    各外掛最後版本
        npm info cordova-plugin-inappbrowser version
        npm info cordova-plugin-whitelist version
        ...etc

    專案目前安裝外掛及版本
        cordova plugin ls

    更新至最後(固定標記)版本
        cordova plugin update cordova-plugin-inappbrowser (中文版文件你弄錯了吧?)
        或
        cordova plugin remove cordova-plugin-inappbrowser
        cordova plugin add cordova-plugin-inappbrowser
        ...etc


    更新至指定版本
        cordova plugin remove cordova-plugin-inappbrowser
        cordova plugin add cordova-plugin-inappbrowser@1.2.3
        ...etc

    安裝 cordova-check-plugins 可一次更新專案裡全部外掛 (https://github.com/dpa99c/cordova-check-plugins)
        npm install -g cordova-check-plugins

7. (非必要) 修改專案設置
    編輯下面文件
    c:\work\myapp\config.xml

-----------------------------------------------------------
D) 其他命令 (全都在 C:\work\myapp 下操作)
-----------------------------------------------------------
    cordova platform remove ios
    cordova plugin remove cordova-plugin-camera --save
    cordova emulate android

    NOTE: 如果移除平台 (platform remove), platforms/xx 將被刪除,所以任何你在裡面
          作的異動會消失!

    NOTE: When adding/removing plugins or platforms, use the '--save' flag to

          add/remove them to config.xml.

          Existing projects can use 'cordova plugin save' and 'cordova platform
          save' commands to save all previously installed plugins and platforms
          into your project's config.xml.

          Platforms and plugins will be autorestored when cordova prepare is run.


    NOTE: After Cordova 7.0 it will automatically save that platform or plugin to
          your config.xml and package.json. The --save flag is no longer required to
          save. Use --nosave to prevent saving.

    MEMO: 更多: https://cordova.apache.org/docs/en/latest/reference/cordova-cli/

-----------------------------------------------------------
E) 參考
-----------------------------------------------------------
https://cordova.apache.org/docs/en/latest/guide/cli/
https://cordova.apache.org/docs/en/latest/

2015年8月11日 星期二

(再度) 如何在 Synology NAS 設置 GIT 伺服器 (新版)

2013 年曾發表兩篇文章, 是多年前的老機器 DS107 的紀錄, 這台機器的 DSM 已經停止更新, 當時他是無法透過 DSM 安裝 GIT 套件, 所以只能手動(ipkg)安裝, 最近購入 DS214 發現新的 DSM 上已經有套件可以直接安裝, 如果你的 DSM 有支援線上安裝 GIT Server 可參考本文...

===================================================

NOTE: 這是我的私人記錄, 不是教學!

環境:

1. Synology DS214Play+ DSM 5.2-5592 版
2. 有實體 IP 11.22.33.44 (此為亂寫)

How to setup a GIT Server on a Synology NAS
-------------------------------------------
 
1. 先啟動 SSH 功能
   DSM-> 控制台 -> 進階模式 -> 終端機 & SNMP -> [v] 啟動 SSH 功能

   P.S. 安全起見建議你自訂連接埠!

2. 安裝 Git Server 套件
   DSM-> 套件中心 -> 收尋 "git" -> 找到 [Git Server] -> 點 [安裝套件]

   P.S. 要等待一下下安裝完成...

3. 啟動 Git Server 套件
   DSM -> 套件中心 -> 已安裝 -> 找到 [Git Server], 點選 -> 點 [動作] -> 啟動

4. 建立 git 庫(repository) 的位置, 假定 "git-repo"
   DSM -> 控制台 -> 共用資料夾 -> [新增] -> 名稱 "git-repo"

   P.S. 以上名稱可以自訂.

5. 建立 git server 使用者, 假定 "git.user", "blabla"...
   DSM -> 控制台 -> 使用者帳號 -> [新增] -> 名稱 "git.user", 密碼 "xxx" ->
   指定群組, 勾 "Users" (*) -> 在 "指派共用資料夾權限" 頁面, 在 "git-repo" 的 "可讀寫"
   打勾

   P.S. (*)可以把全部使用 git server 的使用者, 放在一個專用的群組.
   P.S. 以上名稱可以自訂.

6. 設置 Git Server 使用者
   DSM -> 主選單 -> Git Server -> "git.user" 的 "允許存取" 打勾

7. 建立 git 庫(repository), 假定 "test"

   [方法1] Only for Windows (or Mac?)

      前提:
        1. NAS 能位於 PC 相同的區域網域(**), PC 能連線 NAS 為網路磁碟(或資料夾)

           P.S: (**)實際上我的 NAS 都是放在區(內)網 192.168.0.x, 由 router 映射一個
                外部 ip:port 給 NAS 需要開放的服務, like
                11.22.33.44:1234 -> 192.168.0.x:22 (your SSH port in NAS)

        2. PC 有安裝 TortoiseGit, 或其他 Git clients.

      步驟:
        1. 啟動 NAS 的 Windows 檔案服務
              DSM -> 控制台 -> 檔案服務 -> [Windows 檔案服務] -> 啟動, 注意下面有寫 PC
              檔案總管如何存取...預設為 \\Diskstation

        2. PC -> 檔案總管 -> 選單, 連線網路磁碟機 -> 指定磁碟機代號, 資料夾輸入
           \\Diskstation\git-repo -> 輸入 DSM 的(管理員或 git.user)的登入名字與密碼

           或

           PC -> 檔案總管 -> 頁籤, 電腦 -> 滑鼠在 [網路位置] 上按右鍵選單 -> 新增一個網路
           位置 ->選擇自訂網路位置 -> 輸入 \\RICHSTATION\git-repo -> ...

        3. 如果你已經是 TortoiseGit 的能力者, 剩下就簡單並直覺了...
              a) 在 NAS 上新建 GIT 專案庫:
                 直接打開網路資料夾 git-repo -> 裡面新建一個資料夾 "test" ->
                 滑鼠在 "test" 資料夾上按右鍵選單 -> Git Create repository here... ->
                 勾 'Make It Bare' (***) -> OK.

         P.S: (***)這裡還蠻重要的, 因為是遠端庫, 不在庫目錄上直接工作, 不勾會導致每次本
                地 push 遠端時都發一個警告...

              b) 轉移既有(或備份)的 GIT 專案庫到 NAS:
                 不用多說了把既有的 GIT 專案庫(bared)複製到網路資料夾 git-repo 裡面!

   [方法2] SSH 登入 NAS

      步驟:
        1. PC 執行 SSH client(!), Host Name: 11.22.33.44, Port: 22 (或自訂過)
            P.S. (!) 我是用 PuTTY

        2. Login as: admin
            Password: (NAS 網頁管理頁面(admin)用的密碼)

        NOTE: 這裡登入名字建議不要用 'root', root 登入後若不切換帳號, 可能會導致後面建
                  test 資料夾權限只限 root 用戶可存取, 此時還要用 chmod 修改...
        NOTE: 如果密碼沒錯卻拒絕登入, 可以檢查:
 
                1. ip:port 是否正確, 路由 ip(router):port -> NAS:port 都正確? 
                2. 是否被 router(firewall) 封鎖 IP or port? 
                3. 是否被 NAS 封鎖 IP or port?
                4. NAS 的 SSH 服務已經已啟動?

        3. 接下來操作 shell commands
      Diskstation> cd /volume1/git-repo/
      Diskstation> pwd 

            (確認一下目前目錄為上面嗎)
            /volume1/git-repo
      Diskstation> mkdir test

            (建立新的資料夾擺放 test 專案的 Git 庫)
      Diskstation> ls -l
            (確認一下目錄的權限)
      ...
      drwxrwxrwx  7 admin users  4096 Aug 12 15:26 test
       ^^^^^^^^^          ^^^^^ 

       123456789 
       -> 123:admin 可讀寫執行, 456:users 可寫執行, 789:其他人也可
      NOTE: 權限不對, 會導致 git.user 在本地無法存取 /volume1/git-repo/test, 此時可
                用 chmod 修改, 或直接換用 git.user 身份建立資料夾... 
                參見 如何在 (老) Synology NAS 設置 GIT 伺服器 (2/2)

      Diskstation> cd test
      Diskstation> pwd

            (確認一下目前目錄為上面嗎)
            /volume1/git-repo/test
      Diskstation> git --bare init

            (建立初始 git 空庫)
            Initialized empty Git repository in /volume1/git-repo/test/


8. Clone Git 庫
   以步驟 7 的 test Git 庫, 其遠端的存取位置(URL)為

   ssh://git.user@11.22.33.44:22/volume1/git-repo/test

   NOTE:  1. git.user 為步驟 5 的建立的 git 使用者名字. 請替換為你的名字.
   NOTE:  2. :22 為預設 SSH 連接埠, 或是你有自訂其他的數值...

   操作 Git client 的 clone, 連線後會問 git.user 的密碼, 輸入後, 如正確無誤, 就開始複製
   檔案到本地, Git 的使用方法此處不多說了...

參考: Synology Git 套件說明

Q1: 每次本地操作 remote git 時都會出現 "Could not chdir to home directory /var/services/homes/git.user: No such file or directory"?

A1: 這是因為 DSM 操作新增 git.user 時並沒有建立其家目錄, 這只是警告不妨礙 Git 操作, 如果不愛, 可以用 SSH 登入 NAS, 操作 shell 指令方式, 重新指定 git.user 的家目錄, 參見
如何在 (老) Synology NAS 設置 GIT 伺服器 (2/2) 中, 步驟 15 有說明修改(改家目錄, shell 應該不用改).

2015年6月25日 星期四

Sublime Text and Uncrustify

I like to use Uncrustify to format the source codes and the Sublime Text to edit codes.. 

After discover packages in packagecontrol.io I can't find a plug-in that uses Uncrustify in Sublime Text *_*

The are some C/C++ formatter/beautifier for Sublime Text. But they aren't my favor Uncrustify!!

So I wrote myself....Everyone who likes Uncrustify and Sublime Text, Now I present to you the...... Sublime-Uncrustify ^_^

2014年2月12日 星期三

(再度) 安裝 andriod 開發環境

02/11/2014, 我重灌電腦, 再度安裝 andriod 開發環境, 發現 andriod 官網已經把下述之 Eclipse IDE 跟 SDK (step 7~21) 整合成一個 adt-bundle 了, 下載該包後, 解壓縮到硬碟任何地方即可以. (但前提 JRE 還是要先裝), 我沒有再新建專案, 去測試剩餘的步驟的有無差異.

以下我這一次的過程簡要...


1. 下載 JRE 的最後一版 (官網), 安裝.

2. 下載 andriod SDK (ADT Bundle) (官網), 解壓縮至 C: 為 C:\adt-bundle

3. 下載 andriod NDK (官網), 解壓縮至 C: 為 C:\android-ndk  (*)

4. 把之前的備份的 Cygwin 解壓縮至 C: 為 C:\cygwin  (**)

5. 執行 C:\adt-bundle\SDK Manager.exe 更新預設的 packages 至最新 (含安裝 Google USB driver)

6. 執行 C:\adt-bundle\eclipse\eclipse.exe, 指定新的 workspace 到 D:\my_workspace

7. 匯入老專案, File -> Import... -> Android  / Exist Android Code Into Workspace -> Browse 至 andriod project setting (project.properties?) 的 root 目錄

9. Build.... (***)

P.S.
(*) 此為我專案預設 ndk 的路徑

(**) 1. 先前已經把上次安裝的 Cygwin 備份了, 這東西是可攜式的. 因為只用到 bash, make etc沒特別要求最新版. 並透過 Cygwin setup 也能再更新安裝過的 packages.
2.  此為我專案預設 cygwin 的路徑.

(***) 因為我之前的 NDK Builder 的設定已在專案下一直保留著(.externalToolBuilders\NDK_Builder.launch) 了, 所以這次沒再設置 NDK Builder!




2014年1月16日 星期四

軟體小熊

好喜歡這張插圖, 道盡了軟體專案最無奈的一面, 不知這本書市面上還找的到嗎?

 "小男孩後頭帶著一隻小熊從樓梯上走下來,
可憐的小熊頭在樓梯上不斷的撞擊著台階。
盡這可憐的小熊所知,這是它唯一能夠下得了樓梯的辦法,
有時它覺得應該還有別的方法,
不過它的頭得先停止撞擊樓梯,才有可能想得出別的辦法來。
然而,他想,那個辦法大概不存在吧。"


2014年1月9日 星期四

Type R 錯誤?

Android 開發環境並不太完善, 所以常遇到怪問題....

"Type R cannot be resolved to a variable"

乍看之下這是什麼鬼阿, 一旦發生就會發生在幾百個 java 行裡!

可以查一下 StackOverflow, 我自己久久也會遇到一次, 有時太久了, 遇到反而熊熊不知道怎麼辦, 記錄一下...


關於 StackOverflow 該篇討論網友的描述, 有蠻多的見解, 以我的案例只有一個, 如下述

檢查 /res 目錄, 是不是有檔案錯誤, 通常是有新增的文件錯誤(名字不合規定, 格式錯誤, 多餘)或誤刪老文件導致 layout (XML) 失去對文件的參用等等, 所以無法產生出 R.java class (資源檔?), 以致於後續編譯 java 只要參用 res 的地方就會出現(一堆) "Type R" 錯誤.

例如, 剛剛我發現我在 res/drawables-mdpi 多了一個 xxx.psd 我編輯用的圖檔, 忘記這裡面不能亂放檔案(儘管專案本身沒用到), 但專案編譯過程會"一一"掃瞄裡面的全部文件, 砍掉後就正常了.

好希望 eclipse 是報告類似 "The res/drawables-mdpi/xxx.psd can't be identified!" arrrr~ 

2013年12月26日 星期四

錯誤! 請再猜一次!

 本篇是關於

1. 轉移 Google Play App 軟體到另外一個 Google 帳號
2. 申請 Google Wallet 商家資料

很早我就付了 US$25 的規費給 Google 所以可以在 Google Play 上架, 去年公司想要轉移一款客製的 Android 軟體至 Google Play 上公開下載, 我就用了我的個人帳號操作, 在 Developer Console 發行版本多次後, 熊熊才發現, App 是綁住我的帳號的, Google 的機制是全部(Google XX)都綁一個帳號互通資料, 所以該軟體準備做 Paid In App 機制, 也用我的 Google Wallet 裡面的資料做收付款!

Google Play Developer Console 上面並沒有看到任何轉移帳號的操作. 除了商家資料綁住我, 或是我離職了那怎麼辦?

想說有點麻煩了, 如果我重用新的 gmail 帳號來做, 此發行一年多的 App 是有唯一 ID 的, 另外帳號是無法使用同個 ID, 所以會變的多個 App 發行!

難道最後我的 gmail 帳號要送給公司, 早知道就不要自告奮勇...

前禮拜在 Google Play Developer Console 下方的 "說明中心", 竟然發現了 Google Play 有轉移 App 至另外一個帳號的機制

 Changing your sign-in address or account

所需要的是兩個 Developer 帳號付款的交易單號 Transaction ID, 這可以在各自的 Google Wallet (電子錢包) 裡面交易記錄找到, 然後在上面的網址填申請書. 此不多述, 我填好了欄位需要的資料, 指定 "ALL" 把我的帳號裡頭全部 App 轉移至新的帳號, 送出申請, 然後等 Google 人工省核, 約半天就 Google 某客服就寄 Email 給我, 回覆說成功轉移了.

本文重點是第二段申請 "商家帳戶"(Google Wallet Merchant)....
(注意這不是 "Google Wallet" 電子錢包, 但事實又有些關連如後述)

所以我接著要替新帳號(公司名義)申請 "商家帳戶", 以便 Paid In App 收款使用, 打開申請頁面有一些資料要填寫, 填好後按 "送出"...嗶~ (其實電腦沒出聲, 是我腦袋的 FUCK 的消音)

網頁上方一條紅色訊息 "聯絡人姓名必須包含姓氏與名字,例如:王小明 UNKNOWN_VALUE", 於是無法送出申請.

意思似乎是我寫的名字有問題? 我改了英文 嗶~, 或換了常見名字 嗶~, 不填 嗶~, 於是我改了 "王小明" .....

當然, 還是 嗶~ 不行 -_- !!

怎麼會這樣!? 難道是我網頁瀏覽器支援有問題, 我下載了 Google Chrome 測試還是一樣. 我之前的帳號是有連結商家帳戶的, 但那是多年前 Google Checkout 機制時代我申請的(但此機制本身有整合問題), 後來應該是 Google 換新機制, 自行轉移過了.

我想上面的紅色訊息應該是無解了, 查了 Google (哈~又是你), 有一封同我問題的討論但沒人回, 我想那就寫客服信吧....

但沒想到後面有意外的發展...

我檢視在新的帳號的 Google Wallet ( 電子錢包) 裡面, 我發現了舊有的付費時 (US$25 的時候, 公司另外同事付費的) 有個人資料 (在電子錢包設定可以找到), 也有一個姓名欄位 "法定全名", 名字寫錯成地址, 我不曉得他怎麼填的, 也許是用手機付費時填錯? 於是我就把他修正為公司的中文名字, 嗶~ 又來了 "法定全名無效", 還好二次我猜到了改英文不准中文!

A~ 接著我回到 "商家帳戶"(Google Wallet Merchant)申請網頁, 突發靈感, 把名字用同一個名字!

資料送出 PASS~

以上, 兩個等同的 "錯誤! 請再猜一次!" 錯誤訊息經驗, 提供參考.

p.s. 總結一下, 目前的過關答案

1. 聯絡人姓名必須包含姓氏與名字,例如:王小明 UNKNOWN_VALUE
-->請填入電子錢包個人資料的 "法定全名"
 2. 法定全名無效
-->只接受英文


2013年8月18日 星期日

Android facebook 貼文的小插曲

前些日子進行的一個 Android App (別人寫好的我進行維護擴充) 連結至 Facebook 貼文分享的新功能, 照往常先拜 Google 碼頭, 猜想了關鍵字 "android facebook post to wall", 很好一堆前人分享了重點方法或提供程式片段範例, 我開始下載了 Facebook SDK, 匯入專案, 並依前人程式片段寫了自己的版本(我第一次寫 android java)...

結果試了一下在我們自己的 App 切到 Facebook 授權成功後執行貼文動作, 卻遇到下面的畫面. "無法顯示你所要求的頁面。有可能是暫時無法使用...." 的錯誤訊息..


果然沒有一帆風順, 再拜一次 google 看有人遇到類似問題否, 結果提及相同的訊息都是一般用戶在自身 Facebook 使用上的問題, 並無有用的回覆, 搜了許久無程式人員在開發上提及此問題.

再一次看看  Facebook SDK 的文件說明, 是否我有哪裡做錯, 看了一下就放棄, 目前 SDK 是 3.0 版的 API, 原本我用的方法是 2.0 版的 API, 雖可以用但教學都是 3.0 版 API 方式, 3.0 版的方式更複雜些. google 的前人分享文大都是 2.0 版 API 的方式.

不過科學精神是, 試試看官方的範例(3.0)有沒有問題, 如果正常, 那我得考慮換方式寫, 於是花了一點時間 build 官方的 hello sample...結果還是一樣!

這...因為這畫面已經是 Facebook App(or Lib) 的畫面了, 錯誤在對方裡面, 我完全沒有任何更多的資訊, 而且這東西跟手機的 Facebook 登入 cache 有關, 又移除了 Facebook 使用者資料重做授權...

反覆查資料, 踹 (try) 程式, 移除授權, 重測試...整整一天沒任何進展.

第二天 "try" 到中午, 精神感應到...

我的手機 Facebook App 版本是多少? 查一下是 2.0.5, 再查一下目前 Facebook app 發行的版本是...哇是 3.5!!  該不會是新的 SDK 與舊的 Facebook app 相容有問題!?

更新了手機的 Facebook app 版本, 再跑一次 Facebook 官方 Sample 跟我的寫的部分都沒問題了...

以上修電腦前沒先看插頭插好沒的經驗, 分享給偶遇此問題的朋友~

2013年4月8日 星期一

如何轉移 SVN 專案為 GIT 管控

我有一個既有的專案由 SVN 管控(遠端 server 1), 因為(*)我想要以後改用 GIT 管控(遠端 server 2), 但仍希望在 GIT 裡面還能看到舊有 SVN 版本的歷史紀錄.

NOTE: (*) 任何理由, 我猜大部分是因為有某人堅持 ^^


其實這個的需求跟之前我發表的 SVN 與 GIT 協同工作是同一回事, 只是改另外一種 "不回頭" 的說法, 把原有的紀錄搬過來後, 原有的 SVN 庫不要了, 而且會以為一開始就是 GIT 管控...

所以不再詳細寫下步驟, 快速的紀錄一下重點 

Converting a Subversion repository to Git
-----------------------------------------

by TortoiseGit and TortoiseSVN

1. 原有的 SVN 庫, 必須要能用 URL 方式 like svn://xx.xx.xx.xx/oo 
   或 http://...方式存取, 而不是 file:///x:/xx/oo 這種檔案路徑方式, 
   如果 SVN 庫是放在本電腦用 file:// 方式, 請設置正確的 svn service 並
   啟動, 改用 SVN://...

2. 建立一個新的 folder A, 操作 TortoiseGit clone, URL 填 SVN://..., 
   下面 'From SVN Repository' 勾選, 把整個 SVN clone 至這個 folder,
   此時 folder A 為 GIT 管控, 但還與 SVN 庫連結著.

   這個(folder A as GIT)可以查到全部的 SVN 歷史紀錄

3. a) GIT 庫仍在本機: 建立另一個新的 folder B, 操作 TortoiseGit 在這裡

      建立一個新的 bare git 庫
   b) GIT 庫放在他機: 遠端放 Git 庫的 server, 建立好一個新的 bare git 庫

   此 git 庫就是以後你要送交的地方(remote).

4. 在 folder A 處開啟 TortoiseGit, settings -> Git -> Remote 新增
   一個 remote 為 step 3 的位置.

5. 把 folder A 全部的文件, push 至 step 4 新增 remote 的位置.

6. (**)建立另一個新的 folder C, 操作 TortoiseGit clone 自 step 4 的
   位置, 此 folder C 就是你最後要的工作路徑.

   NOTE: (**) 我後來想到, 如果直接在 folder A 裡的 remote 設置
          (as step 4 處), 把 original 的 SVN 的位置刪去, 不就好了?
          那就不需要在弄一個 folder C, 需再測試看看此法, 但建立
          folder C 新的 clone 也有順便測試以別人角色抓此 GIT 庫的好處.

7. 砍掉 folder A, 砍掉 SVN 庫....

8. 以後就在 folder C 工作, 可以提交本地端也可以 push 至遠端(***)...

   P.S. (***) 對啦, 堅持的人總是說這個理由啦...:)

參考: http://john.albin.net/git/convert-subversion-to-git

P.S. 上面參考是用 git 指令操作, 感覺很複雜, 也許我的方法缺陷沒測到, 先這樣以後再說...


如何在 (老) Synology NAS 設置 GIT 伺服器 (2/2)

NOTE: (08/11/2015) 本文是多年前的老機器 DS107 的紀錄, 這台機器的 DSM 已經停止更新, 當時他是無法透過 DSM 安裝 GIT 套件, 所以只能手動(ipkg)安裝, 最近購入 DS214 發現新的 DSM 上已經有套件可以直接安裝, 如果你的 DSM 有支援線上安裝 GIT Server 請不要再看本文, 參見 Synology Git 套件說明 或新版的 如何在 Synology NAS 設置 GIT 伺服器 (新版) ^^

========================================
接...如何在 Synology NAS 設置 GIT 伺服器 (1/2)

以上軟體都安裝好了, 接著設置一個共用的 SSH 帳號(*)能在 GIT 專案裡使用...

NOTE: (*) 此採取一個共用的 SSH 帳號登入而已, 但各自能以 GIT client 端設置自己的名字 commit.

14. 在 NAS 建立新使用者及共享目錄
 
   a) 進入 NAS WEB 管理頁面
   b) 控制台 -> 共用資料夾, "新增" 一個新共用資料夾, 名稱 "git-repo"
   c) 控制台 -> 使用者帳號, "新增" 一個新使用者, 名稱 "git.user"
      在 "權限設定 - 共用資料夾" 頁面, 在 "git-repo" 的 "可讀寫" 打勾.

   P.S. 以上各名稱可以自訂.

15. 修改 git.user 登入的家目錄, 跟 shell
  
   a) 在 Windows 下執行 SSH client (PuTTY) 以 'root' 登入至 NAS
      NOTE: 要求輸入密碼時請直接鍵入網頁管理頁面(admin)用的密碼.

   b) 編輯 /etc/passwd 文件.

      DiskStation> vi /etc/passwd

      P.S. 1. vi 預設一進入為 command mode, 左下方有一個 '-' 號
              移動游標 (方向鍵, 或 'h/j/k/l') 至想要編輯的地方
     
      2. 按 'i' (進入 insert mode, 左下方有一個 'I' 號)          
           3. 結束編輯後, 按 'Esc' key 回到 command mode
 
          4. 不存檔離開, 輸入 :q! 按 'Enter'
         
    存檔離開, 輸入 :wq 按 'Enter' 或直接輸入 ZZ

   c) 修改 "git.user" 那一行由
      git.user:x:1029:100:(描述):/var/services/homes/git.user:/sbin/nologin
      -->
      git.user:x:1029:100:(描述):/volume1/git-repo:/bin/ash

16. 設置 /volume1/git-repo 目錄

   NOTE: 建議修改 /volume1/git-repo 權限, 只有擁有者可讀寫.

      DiskStation> chmod 700 /volume1/git-repo

 
   a) 切換至 git.user
  
      DiskStation> su - git.user

   b) 確認此時家目錄已經為剛剛修改的路徑.
  
      DiskStation> pwd
      /volume1/git-repo

  
   c) NOTE: 參考網站此時有做建立 .profile .ssh authorized_keys 的動作, 但我沒做, 目前示每次連線都要輸入密碼, 不確定是否還有其他影響.

17. 測試建立一個新的 git 庫

DiskStation> mkdir test
DiskStation> cd test
DiskStation> git init --bare
Initialized empty Git repository in /volume1/git-repo/test/
DiskStation> ls
HEAD config hooks objects
branches description info refs

18. 測試連線抓上面的 git 庫

   Windows 端開啟 GIT Bash, 要求輸入密碼的地方(**), 輸入建立 git.user 時的私人密碼.

$git clone ssh://git.user@11.22.33.44/volume1/git-repo/test
Cloning into 'test'...
git.user@11.22.33.44's password:
warning: You appear to have cloned an empty repository.
$ls -a test/
. .. .git


或用 TortoiseGIT clone 頁面, URL 處輸入 "ssh://git.user@11.22.33.44/volume1/git-repo/test" 後按確定, 會彈出要求輸入密碼, 輸入後按
確定.

NOTE: (**)參考網站有一個步驟我沒有做, 應該可以避免每次連線都要輸入 SSH 密碼...Add public keys of your git users in...authorized_keys, 等下次有空再來試試看這個設置.

19. 測試 commit and push (to server)
   (這裡省略了, 就是那些基本的 git 操作...)


參考 How to setup a git server on a Synology NAS

2013年4月2日 星期二

如何在 (老) Synology NAS 設置 GIT 伺服器 (1/2)

NOTE: (08/11/2015) 本文是多年前的老機器 DS107 的紀錄, 這台機器的 DSM 已經停止更新, 當時他是無法透過 DSM 安裝 GIT 套件, 所以只能手動(ipkg)安裝, 最近購入 DS214 發現新的 DSM 上已經有套件可以直接安裝, 如果你的 DSM 有支援線上安裝 GIT Server 請不要再看本文, 參見 Synology Git 套件說明 或新版的 如何在 Synology NAS 設置 GIT 伺服器 (新版) ^^

========================================
本來想放棄用 NAS(with Linux) 這樣做, 但 google 了一下 GIT server 架在 Windows 或 Linux 給外網的人使用, 要搭 HTTP 或 SSH 等等, 安裝看來沒有誰比較簡單, 內網不管權限最簡單, 就是一個內部目錄位置就好了, 不然就是得用 FREE 或收費的 GIT HOST 雲端的服務. 所以還是嘗試看看...

NOTE: 這是我的私人記錄, 不是教學!

環境:

1. Synology DS107+ DSM 3.1-1636 版
2. 有實體 IP 11.22.33.44 (此為亂寫)

How to setup a GITserver on a Synology NAS
-------------------------------------------


1. 開啟 SSH

 
   a) 用瀏覽器打開 NAS 的網頁管理頁面 "11.22.33.44:5000"
   b) 打開 "控制台" -> "終端機" 在 "啟動SSH功能" 打勾,按 "確定".


2. 在 Windows 下執行 SSH client 以 'root' 登入至 NAS
   NOTE: 1. 要求輸入密碼時請直接鍵入網頁管理頁面(admin)用的密碼.

         2. 可以使用 Cygwin 的 ssh, 或是 PuTTY

$ ssh 11.22.33.44 -l root -p 22
root@11.22.33.44's password: xxxx

BusyBox v1.16.1 (2011-10-23 04:33:17 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.



NOTE: 一般 SSH 預設 port 為 22 如果沒有改過, -p 22 可以不用加.

3.  進入 /volume1/@tmp

DiskStation> cd /volume1/@tmp
DiskStation> ls -al
drwxrwxrwx    4 root     root          4096 Mar 25 15:25 .
drwxrwxrwx   12 root     root          4096 Apr  2 11:10 ..
drwxrwxrwt    3 root     root          4096 Mar 25 15:25 php
drwxrwxrwx    2 root     root          4096 Apr  1 18:53 webfm

4. 抓取 bootstrap
   NOTE: 1. bootstrap 是安裝 ipkg 的執行劇本, 各 CPU 不一樣, 請先看好機

            型的 CPU.
            What_kind_of_CPU_does_my_NAS_have
            看好要下載正確的 xsh 文件 URL 位置:

            Modifying_the_Synology_Server,_bootstrap,_ipkg_etc
         2. 為避免網址輸錯, 建議直接複製 xsh 文件的網址, 下面 wget 後面直

            接 "貼上".

DiskStation> wget http://ipkg.nslu2-linux.org/feeds/optware/syno-x07/cross/unstable/syno-x07-bootstrap_1.2-7_arm.xsh
--16:47:02--  http://ipkg.nslu2-linux.org/feeds/optware/syno-x07/cross/unstable/syno-x07-bootstrap_1.2-7_arm.xsh
           => `syno-x07-bootstrap_1.2-7_arm.xsh'
Resolving ipkg.nslu2-linux.org... 140.211.169.161
Connecting to ipkg.nslu2-linux.org|140.211.169.161|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 250,349 (244K) [text/plain]

100%[====================================>] 250,349      190.89K/s

16:47:04 (190.41 KB/s) - `syno-x07-bootstrap_1.2-7_arm.xsh' saved [250349/250349]

DiskStation> ls -al
drwxrwxrwx    4 root     root          4096 Apr  2 16:47 .
drwxrwxrwx   12 root     root          4096 Apr  2 11:10 ..
drwxrwxrwt    3 root     root          4096 Mar 25 15:25 php
-rw-rw-rw-    1 root     root        250349 Feb 20  2012 syno-x07-bootstrap_1.2-7_arm.xsh
drwxrwxrwx    2 root     root          4096 Apr  1 18:53 webfm

5. 改變 script 為可執行屬性

DiskStation> chmod +x syno-x07-bootstrap_1.2-7_arm.xsh

6. 執行 script

DiskStation> sh syno-x07-bootstrap_1.2-7_arm.xsh
Optware Bootstrap for syno-x07.
Extracting archive... please wait
bootstrap/
bootstrap/bootstrap.sh
bootstrap/ipkg-opt.ipk
bootstrap/ipkg.sh
bootstrap/optware-bootstrap.ipk
bootstrap/wget.ipk
1226+1 records in
1226+1 records out
Creating temporary ipkg repository...
Installing optware-bootstrap package...
Unpacking optware-bootstrap.ipk...Done.
Configuring optware-bootstrap.ipk...Setting up ipkg arch-file
Modifying /etc/rc.local
Done.
Installing ipkg...
Unpacking ipkg-opt.ipk...Done.
Configuring ipkg-opt.ipk...WARNING: can't open config file: /usr/syno/ssl/openssl.cnf
Done.
Removing temporary ipkg repository...
Installing wget...
Installing wget (1.12-2) to root...
Configuring wget
Successfully terminated.
Creating /opt/etc/ipkg/cross-feed.conf...
Setup complete.

BusyBox v1.16.1 (2011-11-26 14:58:46 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

7. 刪除 script

DiskStation> rm syno-x07-bootstrap_1.2-7_arm.xsh

8. 如果是 DSM 4.0 還需要修改 /root/.profile

   (....P.S. 我是 DSM 3.1 所以此處我是跳過)

   請參考下面連結, 第八步驟 NEW: If you have DSM 4.0 there is an additional step...
   Modifying_the_Synology_Server,_bootstrap,_ipkg_etc

9. 執行 ipkg update

DiskStation> ipkg update
Downloading http://ipkg.nslu2-linux.org/feeds/optware/syno-x07/cross/unstable/Pa
ckages.gz
Inflating http://ipkg.nslu2-linux.org/feeds/optware/syno-x07/cross/unstable/Pack
ages.gz
Updated list of available packages in /opt/lib/ipkg/lists/cross
Successfully terminated.

10. 執行 ipkg upgrade

DiskStation> ipkg upgrade
Nothing to be done
Successfully terminated.

11. 安裝 git

DiskStation> ipkg install git
Installing git (1.8.2-2) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/syno-x07/cross/unstable/git_1.8.2-2_arm.ipk
package git suggests installing git-manpages
Installing zlib (1.2.5-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/syno-x07/cross/unstable/zlib_1.2.5-1_arm.ipk
Installing openssl (0.9.7m-6) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/syno-x07/cross/unstable/openssl_0.9.7m-6_arm.ipk
Installing libcurl (7.24.0-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/syno-x07/cross/unstable/libcurl_7.24.0-1_arm.ipk
Installing diffutils (3.1-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/syno-x07/cross/unstable/diffutils_3.1-1_arm.ipk
Installing rcs (5.7-2) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/syno-x07/cross/unstable/rcs_5.7-2_arm.ipk
Installing expat (2.0.1-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/syno-x07/cross/unstable/expat_2.0.1-1_arm.ipk
Configuring diffutils
update-alternatives: Linking //opt/bin/cmp to /opt/bin/diffutils-cmp
update-alternatives: Linking //opt/bin/diff to /opt/bin/diffutils-diff
update-alternatives: Linking //opt/bin/diff3 to /opt/bin/diffutils-diff3
update-alternatives: Linking //opt/bin/sdiff to /opt/bin/diffutils-sdiff
Configuring expat
Configuring git
Configuring libcurl
Configuring openssl
Configuring rcs
Configuring zlib
Successfully terminated.

13. 設置 git 的各命令可以不帶路徑直接叫用
    P.S. 這是因為 ipkg 安裝 git 是放在 /opt/bin 下, 非系統的 $PATH 下能找到, 有兩個方法:


    a) 最簡單的方式是...建立檔案連結 ("有點" 像 Windows 的捷徑).

DiskStation> for f in `ls /opt/bin/git*`
> do
> ln -s $f /usr/bin    
> done

    b) 在建立 git user 後修改的 login 環境變數.

       (....我是用 a 法, 所以此處我沒試)

       請參考下面連結, 第6步驟 ..."git-upload-pack" on the NAS was not found in the $PATH....
           

14. 建立 git 帳號及共享目錄

繼續...如何在 Synology NAS 設置 GIT 伺服器 (2/2)

參考:
http://ti57.blogspot.tw/2013/01/how-to-setup-git-server-on-synology-nas.html
http://www.wonko.de/2010/04/set-up-git-on-synology-nas.html


2012年11月8日 星期四

關於 Collider 與 Ragidbody (碰撞體與剛體) 的碰撞偵測與怎麼做

(最近開始試用 Unity3D, 寫一下心得筆記, 但先說明不代表我的觀點是完全正確的, 畢竟我才用沒兩小時...)


關於 Collider 與 Ragidbody 的碰撞偵測與怎麼做

p.s. 一開始我有些不明白這兩個的差異, 我知道 Collider 是用在碰撞偵測, Ragidbody 是用在物理計算的需求, 但為什麼單純兩個有 Collider 的物體相撞沒有任何事件 (OnTriggerEnter)發生?

研究了一下, 此簡要設定碰撞事件的步驟:

1. 每個能被撞倒的物體(範例是隕石與子彈)都要有一個 Collider 元件 (檢查一下 Collider 元件有被啟動, 並調整好適合的大小/位置)

2. 每個移動(要去撞人家)物體, 除自己也要有 Collider 外, 還需附加 Ragidbody 元件(*)
   a) 先點選要附加元件的 GameObject
   b) Menu->Component->Physics->Ragibody
   c) 暫時不考慮重力加速度, 核銷 Ragibody 參數的 'Use Gravity' checkbox
  
NOTE: (*)
擁有 Ragidbody 的物體才會即時對場景中的每一個 Colliders 做偵測(要去撞人家), 沒有 Ragidbody 的物體, 儘管也許他能藉由程式碼操作被移動, 但 Unity3D 不考慮對其他的 Colliders 做偵測 (為了加速吧).

例如: 場景中有 A B C  三個物件, A 為 Ragidbody, B/C 非 Ragidbody,  則 Unity3D 偵測  A<->B, A<->C 有沒有碰撞, 不偵測 B<->C

所以下面說法是正確的:
                 
場景中 "只有" 兩個移動物體(各有 Collider), 只要一個有設 Ragidbody 就足夠發生碰撞了!


3. 隕石(有加入 Ragidbody 元件)的 Collider 參數中, 核選 'Is Trigger' checkbox(**)
  
   在 GameObject 物件中加入

public class meteor : MonoBehaviour {
   ...
   void OnTriggerEnter(Collider other)
   {
//      if (other.tag == "bullet")          // 物件參數裡有指定 Tag
        if (other.name == "Bullet(Clone)")  // 用類別的名字
        {
            print("hit by bullet");    
        }
   }
}


   處理被碰撞時做什麼事, 注意: OnTriggerEnter 兩個相撞物件各自都會呼叫

public class bullet : MonoBehaviour {
   ...
   void OnTriggerEnter(Collider other)
   {
        print("OnTriggerEnter: " + other.name + " tag=" + other.tag);
        ...
   }
}


NOTE: (**)
這表示此碰撞體為一個觸發器, 產生碰撞事件, OnTriggerEnter/Exit/Stay(Collider other) 會被呼叫, 時此 Ragidbody 物件不會加入物理引擎做運算(彈跳 etc).(***)

4. 移動中隕石與子彈如果發生碰撞各自 OnTriggerEnter 就被呼叫了.
    (實際只要選擇其中一個處理即可 )


NOTE: (***)
如果 'Is Trigger' 不用, 則會 Ragidbody 有物理作用, 此時碰撞改用 OnCollisionEnter/Exit/Stay(Collision collision)
注意此處傳遞的是 Collision 不是 Collider!
 
以上這樣子就明瞭了, Collider 的 'Is Trigger' 主要的用途了, 他一般是使用在類
似進入/離開/停留一個區域要'觸發'事件, 在那種不需要有物理推擠的時機.

P.S. 一個 GameObject 可以附加好幾個 Collider, 所以可以按需求不同的作用一起發
生.
 

2012年8月30日 星期四

用 Eclipse 每次編譯 (build) 時自動執行 bash & ndk-build 命令

這裡是之前的的紀錄 Eclipse+Android SDK/NDK 開發環境的過程 (2/2) 步驟 58~62 的附圖詳細說明, 今天 (離上次搞 andriod 有一段時間) 要弄一個別人的案子, 他沒有設置自動編譯 JNI, 對於要改 C 的我頗不方便, 我是少用 Eclipse 的人, 只想到可自動編譯阿, 但又忘了這些步驟, 而且是徹底沒印象怎麼做 :_ 還要回來找老文章 (還好我有留練習紀錄), 那...這次就將過程截圖下來吧, 並加上註解 ;-)

前提:

1. 你已經安裝好 cygwin + NDK 等環境了
2. 你已經做好手動建立 JNI 的 makefile 了 (或是拿別人的專案要改自動化NDK)

如非上述, 請忽略本文吧. 還是從我之前的 Eclipse+Android SDK/NDK 開發環境的過程 1 & 2 開始練起.

---------------------------------------------------------------------

58. (2) (用 Eclipse 每次編譯 (build) 時自動建立 libhello.so)

59. menu -> 'Project' -> 'Properties', 開啟 Properties for xx 對話盒

註: 如果在 Project Explorer 裡有多個專案, 請確認哪一個需要做自動執行 ndk-build, 先選好其中的一個 project, 也可以在其名字上按滑鼠右鍵彈出選單後, 選 'Properties'. 如果多個專案都需要自動執行 ndk-build, 那 "各自" 都要做下面的步驟!

   

60. 點選 Builders 項目, 按下 'New...', 開啟 Choose configuration type
    對話盒


61. 點選 Program 項目, 按下 'OK', 開啟 Edit launch configuration
    properties 對話盒

    Name: 隨你高興        (建議取有意義的字, 我都用 'NDK Builder')

    Main 標籤頁下 (如下圖):

        Location: C:\cygwin\bin\bash.exe
        Working Directory: (留白)
        Arguments: --login -c "/cygdrive/c/android-ndk/ndk-build -C `cygpath -u '${build_project}' `"

    NOTE: 1. 以上 cygwin 及 android-ndk 路徑, 請依真實情況修改
          2. 另外一種 Arguments 寫法:

--login -c "cd '${project_loc}' && /cygdrive/c/android-ndk/ndk-build"


註: 這裡非常重要, 就是實際手動執行 bash, ndk-build 的方式在此輸入好.




    Refresh 標籤頁下 (如下圖):

        Refresh resources upon completion    打勾

註:告知當 ndk-build 執行完畢後, 要接著刷新專案的哪些資源, 一般我們只選因為 ndk-build 執行後所影響(變更)的文件 (如 libs...), 這樣專案其他不相關的文件不會重新又編譯一次.

        選取下方的
        The Entire workspace
        或
        Specific resources 項目
        按 'Specify Resources...' 按鈕, 將專案中的 libs 目錄(*)  打勾

 註: (*) 第一次建立時, 若沒有編譯 jni 過, 可能沒有 libs 目錄, 建議編譯過 jni 後改選這個.

        Recursive include sub-folders        打勾




    Environment 標籤頁下 (如下圖):

        (留白)



     Build Options 標籤頁下 (如上圖):

        Allocate Console       打勾
        File                   不勾

        Launch in background   打勾

        After a "Clean"        打勾 (或不勾看你習慣)
        During manual builds   打勾
        During auto builds     打勾 (或不勾看你習慣)
        During a "Clean"       不勾 (或勾看你習慣)

        Specify working set of relevant resources  打勾

 註: Eclipse help 裡說鑑於效能考量, 不建議 During auto builds 打勾, 我是覺得還好啦. 看你習不習慣 Eclipse 自動(暗自)啟動 ndk-build 囉.



    按 'Specify Resources...' 按鈕, 將專案中的 jni 目錄打勾

註: 這樣子只有 jni 資源目錄下的文件有變更時才會啟動自動編譯, 或是依你需求可以加選擇其他的資源目錄. (例如把 C/C++ source files 放在另外一個目錄, 如果不選 Specify working set of relevant resources 則專案內任一資源變動都會啟動自動編譯)



    設置好後, 按 'Finish' 回到上一層對話盒, 再按 'OK'



62. 此時, 你的 makefile 會依 Run the builder 的指定時機自動編譯, 或手動在選單->Project->Clean + Build Project

    注意 NDK Builder 編譯的時候, Eclipse 的 Console 視窗會同手動一樣顯示 ndk-build 結果,下圖, Console 顯示 bash 執行 NDK Builder...


註: 我經驗上, 以上是設置好了, 但 console 視窗卻沒有出現上圖執行過程...原因

1. 確認步驟 61 的 bash ndk-build 路徑有沒有正確...
2. Eclipse 認定不需要執行 NDK Builder (也許因為你已經手動執行過一次了, 之後沒有再修改 C sources 或 makefile), 試著強制從選單-> clean project 看看...
P.S. 我都是修改一下 jni 的 makefile 內容, 多加一個空白按儲存, 就 (或按 F5 Refresh) 判定需要重新編譯了~
3. C sources 的檔案應該要放到 Project Explorer 裡得 jni folder (或 working set of relevant resources 之處) 才能有相依關連.


後記:
以上的設置 Eclipse 會放在 .externalToolBuilders 下 (NAME).launch, 我的是 NDK_Builder.launch, 這個文件可以直接編輯, 我把此文件隨著專案檔案控管, 當專案其他的成員 check out 時也能直接使用(或修改一下路徑)而不是重複以上的 NDK 環境設置.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration
..略...
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="--login -c &quot;/cygdrive/c/android-ndk/ndk-build -C `cygpath -u '${build_project}' `&quot;"/>
..略...
</launchConfiguration>


2012年8月21日 星期二

Visual Studio (as C/C++) 20xx 問題與解決 1

在我使用 VC6 至今(*) VS2010 已經數十年頭, 有些問題常常遇到但很多不知所以然....

(*) sorry, 其實 m$ 在 vs200x 的時候我都還堅守 VC6 啦, 最近才開始混用 VC6 and VS2010


問題1:編譯時遇到下面訊息

xx.lib(oo.obj) : warning LNK4204: 'C:\..\Debug\vc100.pdb' is missing debugging information for referencing module; linking object as if no debug info

原因:
Reason:

1)
這警告是因為要去建立除錯版本時, 使用到外部的某一個程式庫卻沒有該庫對應的 xx.pdb (program database) 檔案, 這檔案包含了一些除錯需要的型別及符號的資訊.

像是你編譯除錯版 (Debug) 的應用程式, 但你引用程式庫全都是發行 (Release) 版, 這樣你無法取得這些庫的偵錯資訊.

It was warning about debugging with particular external lib but without its xx.pdb ( program database) file which contains the type and symbolic debugging information.

It would appear that you're compiling your application in a Debug configuration, but the libraries you referenced are all Release builds, meaning there is no debug information for them.

2)
另外一個可能性是... 該程式庫跟另外一個程式庫用的 .pdb 名字相同 (大多發生在採用預設的 vcx0.pdb), 但在拷貝中檔案被覆蓋過去了.

or in the same name (default as vcx0.pdb) with another .pdb file and been overwrote while copying into.

3)
這也發生在一個 'rebuild solution' 之後, 如果有兩個以上 .vcproj 檔案, 他共享相同的暫時輸出 (intermediate-output) 目錄, 而發生存取相同名字的 'Program Database File Name' (vcx0.pdb) 衝突.

It is also seen after a 'rebuild solution', if two .vcproj files share the same intermediate-output directory and there is a conflict in accessing the same 'Program Database File Name' (vcx0.pdb).


解決 1 和 2:
Solution for 1 and 2:

1)
就忽略這些警告吧 (大家都這樣吧...)

just ignored these warnings (you should already now...)

2)
建立一個程式庫, 把偵錯訊息嵌入進去 (也就是不用 .pdb)

在 Visual Studio 2005/2008/2010 你可以在設定裡這樣做:

Project Properties -> C++ -> General -> Debug Information Format 改成 “/Z7″

一般這選項是預設為 “/ZI” 這樣把偵錯訊息產生在另外的檔案.

make the library to embed the debug information (aka without .pdb)

In Visual Studio 2005/2008/2010 one can do that by setting:

Project Properties -> C++ -> General -> Debug Information Format to “/Z7″

usually this option was set to “/ZI” which generates debug info to external file.

3)
否則找到該 'pdb' (含偵錯訊息) 檔案, 必須放置在跟程式庫相同的目錄下.

otherwise find the 'PDB' file (with debug info) must be placed in the same folder as the libaray.

more info: http://msdn.microsoft.com/en-us/library/958x11bc%28v=VS.100%29.aspx

4)
在 Visual Studio 2005 之前...

避免這個警告,試著按下面步驟建立自己的除錯模式的程式庫:

a) 把 "Debug Information Format" 從 /ZI 改成 Disabled <-- 注意:只有在 vs2005 更早的版本才有
b) 把 "Enable Minimal Rebuild" 從 /Gm 改成 Disabled
c) 改 "Basic Runtime Checks" 為 Default

這基本跟預設的發行磨是設定差不多,少了最佳化. 使用這些設定,你可以移除全部的 OBJ, PDB, 和 IDB 檔案並且使用這些程式庫不會有連結的警告.

before Visual Studio 2005...

To prevent these warnings, try the following to debug mode for my lib:

a) Switched the "Debug Information Format" from /ZI to Disabled <-- note: only available before vs2005
b) Switched the "Enable Minimal Rebuild" from /Gm to Disabled
c) Changed "Basic Runtime Checks" to Default

This is basically the same setup as the default release mode settings, minus the optimization. Using these settings, you can remove all of the OBJ, PDB, and IDB files from compilation and just use the LIB file with no linker warnings.


解決 3:
Solution for 3:

1)
為每一個 .vcproj 修改 Intermediate Output 目錄名字
(在 'Configuration Properties > General > Intermediate Directory' 之下)

change the Intermediate Output dir for one .vcproj
(under 'Configuration Properties > General > Intermediate Directory')

2)
修改 'Program Database File Name' 為另外一個非 VC70.pdb 的名字
(在 'Configuration Properties > C/C++ > Output Files > Program Database File Name' 之下)

change the name of the 'Program Database File Name' to something different than vc70.pdb.
(under 'Configuration Properties > C/C++ > Output Files > Program Database File Name')

2012年7月1日 星期日

如何在 Vistual Studio C++ 6 用其他的顯示字體

Visual Stdio C++ 6 算是有點老但是又常常在戰場上不退的編譯器. 因為相較他的繼承者, 她更小, 穩, 對於只寫 C/C++ MFC/Win32 的程式師, 她沒有過多的無用的功能, 是非常好用的. 我到現在還是繼續使用 (推薦加 Visual Assist X 的外掛).

跟大多數的編輯器一樣, 在程式碼編輯器上, 她永許你自訂使用不同的字體. 但不知道為什麼她的字體的設置, 不是把全部的系統安裝的字體全都列出來可供挑選. 我不知道她的選法, 就少少十幾種左右.


這些字體換了反而顯示效果更差, 把網路有很多漂亮的程式設計用的字體(稍後我會分享介紹) 安裝到系統, 但這裡的列表還是不會列出, 那要怎麼突破這個限制呢!

多年前我發現了一個方法, 這個方法我不曾在網路哪裡看過, 也許有人也知道, 秘而不宣, 或在網海中也很難搜尋到...今天就把他分享出來, 算是 "程式設計的藝術" 專題的 "前篇" 吧!

方法是利用修改 VC6 存在系統的 Register 表的設定值

詳細步驟如下:

首先我們要他在 Register 登錄表裡面產生一個自訂字體的項目

1. 在 VC6 選單 -> 'Tools' -> 'Option'

2. 選 'Format' 頁

3. 改變 'Category:' 到你想要自訂字體的項目 (如: Source Windows 或其他)

4. 改變 'Font:' 選擇列表裡面任何一個非預設的字體 (如: 細明體)

5. 以上 3,4 如果有不同視窗, 請各自都挑一個字體, 完成後, 按 'OK' 離開, 離開 VC6

接著我們要開始修改 Register 登錄表.

6. 在命令列(或 '開始' ->'執行')裡, 執行登錄編輯程式 regedit

7. 找到下面項目

    HKEY_CURRENT_USER\Software\Microsoft\Devstudio\6.0\Format

   打開, 在其下你會看到出現, 你剛剛修改(step 3)的 Source Windows 或其他視窗
 
8. 點上面的機碼, 修改下面的鍵值

   FontFace
   FontSize


   為你想到的字體與大小



  p.s. 字體的名字需要是已經安裝在系統字體的 "顯示名字", 很簡單你在其他的可以選擇字體的應用程式列出的名字

9. 重開 VS6 ^^

有圖有真相, 改用 Dina 字體 :-)


附未修改前的採預設字體的樣子



P.S. 我後來就把鍵值直接輸出為一個文件, 下次就直接點選改入~ 如果你懶惰的話....

 -------------------------------------
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Format]

[HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Format\Output Window]
"FontFace"="Dina"
"FontSize"=dword:0000000c

[HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Format\Source Browser]
"FontFace"="Dina"
"FontSize"=dword:0000000a

[HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Format\Source Window]
"FontFace"="Dina"
"FontSize"=dword:0000000c

[HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Format\Workspace Window]
"FontFace"="Dina"
"FontSize"=dword:0000000a
 -------------------------------------