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