2012年9月13日 星期四

申請 iOS Developer Program 之 Company 版

iOSDeveloperProgram02


申請 iOS Developer Program 流程說真的挺費時又耗工,比較大的變化是 2012.05 底左右,Apple 開始要求 Company 需提供 B&D D-U-N-S 編號,中譯為鄧白氏環球編碼 ,這編號常用於貿易公司,類似第三方機構驗證公司狀況,據說有這編號可以促進交易過程的流暢等等。


原先粗略猜測的流程:


取得 D&B D-U-N-S 帳號 (免錢30天, 付費7天) > 等待 D&B 資料庫與 Apple 資料庫同步(14天以內) > 註冊 Apple ID (數分鐘) > 填寫 iOS Develop Program 之 Company 版申請單(數分鐘) > 等待驗證通知(數天),之後傳真公司文件 > 等待 Apple 驗證公司資料(數天) > 信用卡繳款(數分鐘) > 開通(一天)


實際體驗流程:


註冊 Apple ID 、選擇購買 iOS Developer Program Company 版 (數分鐘) -> 資料填寫卡在 D-U-N-S Number (數天) -> 搞懂後從 Apple 提供的 D-U-N-S Lookup 頁面申請免費的 D-U-N-S Number (約一天收到 D&B 申請回音,約五天收 D&B 給的 D-U-N-S Nubmer ) -> 等待 D&B 全球資料庫同步 (大概5天就可以在 Apple D-U-N-S Lookup 查到資料,但致電Apple客服後仍發現無法進行,所以最後等了14天後,才在請Apple客服處理,也才發現因為之前 try 太多而被 ban 掉了) -> 隔天收到 email 通知,由於無法電話連絡上公司負責人,所以要求回電給 Apple 客服,純粹用電話口頭確認(約10分鐘) -> 進行後續 iOS Developer Program 申請流程、繳費 (約 10分鐘內搞定) -> 收到 iOS Developer Program 信件(啟動)通知 (無需激活,約四小時) 


Total 天數...若不包含查資料的話,大概 21 天內搞定,包含申請免費 D-U-N-S Number (5天)+等待D&B資料庫同步(14天)+等待電話驗證(1天)+等待 iOS Developer Program 啟用通知(1天)


首先要註冊一個公司用的 Apple ID ,接著在 iOS Developer Program 註冊網頁上選用 Company 版,接著需用英文填寫一些資料表:


First Name: 公司負責人名字
Last Name: 公司負責人姓氏
Title: 職稱(如董事長、執行長等等)
Phone: 公司負責人電話 (+886…, 常跟公司電話一致?!)
Email: 公司負責人電子信箱


公司資料:


Organization Type: Company
Legal Entity Name: CompanyName Inc.
D-U-N-S® Number: 9個數字
Website: 官方網站
Work Email: 官方信箱
Headquarters Phone: 總部電話


其中 D-U-N-S® Number 可真是個 Magic Number,網路上打滾了一會,在 www.dnb.com 可得免費申請(需耗時30天),也可以付錢快速取的。結果進去看後,才發現填的表格有的地區限制,僅限美國,結果就是香港就到 www.dnb.com.hk、英國就到 http://www.dnb.co.uk/ 申請等等,接著跑到台灣 www.dnb.com.tw 逛了一下,就看到取得一組最低要價年費 16,800 !! 當然,在 CocoaChina 討論版上,也可以看到一堆哀號聲 XD 普遍都花 1500 甚至數千塊人民幣。後來忍不住就致電給 Apple 客服,想多問看看後,才發現 Apple 有提供申請頁面:D-U-N-S Number Lookup,通常都是先查完沒看到才申請,所以就試看看這樣免費的申請吧!文件上說大概要等待 30 天才知道有沒通過。


若填寫的 D-U-N-S Number 跟所填的 Legal Entity Name 批配的話,就可以進入下一個階段,若一直無法過而顯示以下資訊,那代表 D-U-N-S 尚未同步,或是嘗試太多次而被 ban 掉囉:


Your D&B information was not accepted.


而沒被 ban 掉或是打電話給 Apple 客服請他們幫你解除後,正確申請應該會看到這個驗證流程:


iOSDeveloperProgram01


接著依著流程進行,就會看到一些畫面,以及最後等待公司驗證的資訊:


iOSDeveloperProgram03


iOSDeveloperProgram04


接著就會收到 Email 通知信:


iOSDeveloperProgram05


過個幾天,負責人就會收到電話通知,簡易的電話口頭確認後(無需傳真資料回美國),即可進行下一步:


iOSDeveloperProgram06


iOSDeveloperProgram07


信用卡繳款,別忘了公司統一編號用一下


iOSDeveloperProgram08


iOSDeveloperProgram09


幾小時後,可以收到信件通知


iOSDeveloperProgram10


接著登入後就等同開通,不需像一些文章說的還要去激活 XD


iOSDeveloperProgram11


2012年9月11日 星期二

[OSX] 免費的系統溫度查看軟體 - MacPorts XRG @ Mac OS X 10.8

XRG-View

最近天氣很熱,連 MBP 也熱當過幾次。所以就想找一套監控軟體看看到底多燙,最後想翻翻 MacPorts 找到 XRG 這套軟體囉。

$ sudo port install xrg

XRG-Preferences

此軟體可顯示的還不少(左下角有一堆選項),由於我只需要溫度就只勾幾項啦。使用 XRG 的主因之一是可以單純透過 MacPorts 安裝,想說這樣好像軟體比較有人認證過?安心一點點。不過說真的,就算看到溫度很高好像也沒啥解決方式 XD 只能吹冷氣了吧!?

2012年9月6日 星期四

[Windows] TortoiseGit : git did not exits cleanly(exit code 128) @ Windows 7

 + 


最近在 Windows 7 安裝 Git 時都會蹦出 libiconv-2.dll 找不到的訊息,當下草率解決,直到使用 TortoiseGit 時顯示 git did not exits cleanly(exit code 128) 時,才正式去處理 XD


簡單的說,當 TortoiseGit + PuTTYgen 無法正常存取 git 時,我則改用 MinGW32 的指令,才發現 libiconv-2.dll 的問題未完整解決 :p 總之,處理完 libiconv-2.dll 問題後,TortoiseGit 就能正常使用。


環境簡介,安裝順序:



  1. 安裝 msysgit - Git for Windows (msysGit-fullinstall-1.7.11-preview20120620.exe)

  2. 安裝 TortoiseGit (TortoiseGit-1.7.12.0-64bit.msi)


解法:


假設安裝 msysgit 目錄在 D:\msysgit 時,那只要把 D:\msysgit\mingw\bin\libiconv-2.dll 複製到 D:\msysgit\libexec\git-core\ 即可解決。


2012年9月5日 星期三

[Linux] 使用 Git + Gitolite + Gitweb 架設 Git Server @ Ubuntu 12.04

 


這半年算正式接觸 git 的使用,開始從 svn 轉過去了吧?! :P 接著則架設公司用的 Git Server 服務,就挑選了 Gitolite 套件,以打造像 github.com 服務,並透過 htpasswd 管理,提供簡易的 GitWeb 版,讓公司成員可以透過 Web 進行下載、瀏覽程式碼,而開發成員可以同時且分散式地開發程式。


在這邊就不多說 Git 的使用,而著重在 Gitolite 跟 GitWeb 的部份,其中 Gitolite 則是透過綁定一個系統帳號,而眾人存取都是透過 SSH Key-pair 來進行,只要把 keys 命名及綁定權限,就可以決定哪隻 key 可以讀寫、哪隻 key 只能讀取,達成簡易的權限管理。


Gitolite 的安裝及設定(採用 gitolite 系統帳號):


$ sudo apt-get install gitolite
$ sudo adduser gitolite
$ sudo su gitolite
$ whoami
gitolite


建立管理者(綁在一個 key):


$ cd /path
$ ssh-keygen -t rsa -P '' -f gitolite
$ ls
gitolite gitolite.pub 


初次設定 Gitolite:


$ whoami
gitolite
$ gl-setup /path/gitolite.pub
The default settings in the rc file (/home/gitolite/.gitolite.rc) are fine for most
people but if you wish to make any changes, you can do so now.
hit enter...

creating gitolite-admin...
Initialized empty Git repository in /home/gitolite/repositories/gitolite-admin.git/
creating testing...
Initialized empty Git repository in /home/gitolite/repositories/testing.git/
[master (root-commit) #######] start
2 files changed, 6 insertions(+)
create mode 100644 conf/gitolite.conf
create mode 100644 keydir/gitolite.pub


新增使用者帳號(請對方產生Key-pair後,把 public key 交給你,此例是 alice.pub):


$ git clone gitolite@localhost:gitolite-admin.git
(需使用當初登記為管理者的 key 來存取) 


$ cd gitolite-admin 
$ ls
conf keydir
$ cp /path/alice.pub keydir
$ git add keydir/alice.pub
$ git commit -m 'add users: alice' 
$ git push 


如此一來,該使用者 (alice.pub) 就能夠透過 git clone gitolite@localhost:testing.git 進行存取測試,且新增使用者可遠端進行


新增專案(proj.git) & 設定權限(alice):


$ cd ~/ && ls
projects.list  repositories
$ ls ~/repositories
gitolite-admin.git  testing.git


$ git clone gitolite@localhost:gitolite-admin.git


(需使用當初登記為管理者的 key 來存取) 


$ cd gitolite-admin
$ vim conf/gitolite.conf
repo gitolite-admin
    RW+ = gitolite

repo testing
    RW+ = @all

repo proj
    RW+ = alice
    R      = @all
$ git commit -a -m 'add projects: proj.git' 
$ git push 
...
...
remote: creating proj...
remote: Initialized empty Git repository in /home/gitolite/repositories/proj.git/

$ ls ~/repositories
gitolite-admin.git proj.git testing.git  


如此一來,Alice 就可以拿著自己的 key 用 git clone gitolite@localhost:proj.git 取出來讀寫了,並提供其他人讀取的權限,且新增專案、設定權限皆可遠端進行


架設 Gitweb:


$ sudo apt-get install apache2 gitweb
$ sudo usermod -a -G gitolite www-data
$ sudo vim /etc/gitweb.conf


$projectroot = "/home/gitolite/repositories"; 
$feature{'highlight'}{'default'} = [1];
# 提供系統 loadavg check,若系統繁忙,逛 gitweb 只會看到 503 - The load average on the server is too high 訊息
$maxload = 500; 


設定 repo 建立權限為 0750,如此一來 www-data 才可以存取:


$ vim /home/gitolite/.gitolite.rc
REPO_UMASK = 0027; 


接著設定 htpasswd 來管理 gitweb 的使用:


$ sudo htpasswd -cb /etc/appach2/gitweb.htpasswd ID PASSWD
$ sudo vim /etc/apache2/conf.d/gitweb
Alias /gitweb /usr/share/gitweb
<Directory /usr/share/gitweb>
  Options FollowSymLinks +ExecCGI
  AddHandler cgi-script .cgi
 
  AuthUserFile /etc/apache2/gitweb.htpasswd
  AuthName "GitWeb"
  AuthType Basic
  require valid-user
  Order allow,deny
  Allow from 127.0.0.0/255.0.0.0 10.0.0.0/8 192.168.0.0/16 ::1/128
  satisfy any
</Directory>


如此一來,公司內部(10.0.0.0/8, 192.168.0.0/16) 可以直接逛 gitweb,而外部連線進來則需要 id/passwd 的確認才能瀏覽。如果不想要把某些 project 被 gitweb 讀取的話,就把它 chmod 700 吧 ($ chmod 700 /home/gitolite/repositories/gitolite-admin.git )


@ 2012-09-06 補充:


Ubuntu 12.04 內建的 Gitolite 版本為 2.2-1,尚不支援 Admin Defined Commands (ADC) ?! 故先從 https://github.com/sitaramc/gitolite 取下後來安裝 Gitolite 3.x ,粗略升級流程:



    1. 移除系統 Gitolite


      • $ sudo apt-get remove gitolite


    2. 備份舊版 Gitolite & admin key-pair


      • $ sudo cp -r /home/gitolite /home/gitolite-2.2-1
        $ sudo chown -R gitolite:gitolite /home/gitolite-2.2-1 
        $ mv /home/gitolite-2.2-1/repositories/gitolite-admin.git /home/gitolite-2.2-1/gitolite-admin.git
        $ mv /home/gitolite-2.2-1/repositories/testing.git /home/gitolite-2.2-1/testing.git 


    3. 下載和安裝最新版 Gitolite (在此換掉原先的 gitolite.pub)


      • $ whoami
        gitolite
        $ rm -rf ~/* ~/.gitolite* ~/.ssh
        $ cd ~/
        $ git clone https://github.com/sitaramc/gitolite.git
        $ mkdir ~/.ssh ~/bin
        $ ssh-keygen -t rsa -P '' -f ~/.ssh/gitolite
        $ ls ~/.ssh
        gitolite    gitolite.pub
        $ mv ~/.ssh/gitolite ~/.ssh/id_rsa
        $ gitolite/install -to $HOME/bin
        $ ~/bin/gitolite setup -pk ~/ssh/gitolite.pub
        ...
        $ ls ~/
        bin  gitolite  projects.list  repositories 


    4. 設定 Gitolite.rc 與 Gitweb 的部份


      • $ vim ~/.gitolite.rc
        UMASK   =>   0027,    # = 0750 


    5. 恢復原先 repositories 跟 keys


      • $ cp -r /home/gitolite-2.2-1/repositories/* ~/repositories/ 
        $ cd ~/ 
        $ git clone /home/gitolite-2.2-1/gitolite-admin.git old-gitolite-admin
        $ git clone gitolite@localhost:gitolite-admin.git
        $ rm ~/old-gitolite-admin/keydir/gitolite.pub
        $ cp ~/old-gitolite-admin/keydir/* ~/gitolite-admin/keydir/
        $ cp ~/old-gitolite-admin/conf/gitolite.conf ~/gitolite-admin/conf/gitolite.conf
        $ cd ~/gitolite-admin
        $ git add .
        $ git commit -a -m 'restore init'
        $ git push 



測試 ADC(需設定 ~/.gitolite.rc 的 COMMANDS 清單,預設只有幾項 commands 可以用):


$ ssh gitolite@localhost help
hello gitolite, this is gitolite3 v3.04-15-gaec8c71 on git 1.7.9.5

list of remote commands available:

D
desc
help
info
perms
writable


遠端指定 repo myproj 進行刪除:


$ ssh gitolite@git-server D unlock myproj
$ ssh gitolite@git-server D rm myproj


遠端建立 repo myproj 方式,有兩種方式:



    1. 編輯 gitolite-admin/conf/gitolite.conf,直接新增未存在的 repo 後,git push 後則會自動建立

    2. 在 gitolite-admin/conf/gitolite.conf 給定 C 權限,如此一來,在 git clone 不存在的專案則會自動建立


      • $ vim gitolite-admin/conf/gitolite.conf

        @admin = user1 user2 user3

        repo [a-zA-Z0-9].*
            C  =  @admin
            RW+D  = CREATOR
            R  = @all 

      • $ git clone gitolite@git-server:myproject.git
        ...
        若 myproject.git 不存在,則會自動建立 myproject.git,並且建立者有 D 的權限,可以透過 ssh gitolite@git-server D rm myproj 來刪除



此外,公司常將一些內部使用的服務擺在防火牆後透,並透過 port forwarding 來處理對外連線,這時候需指定 port 連線,常用的有 ssh, git 跟 scp 指令,用法如下:


$ git clone ssh://gitolite@git-server:port/myproject.git
$ ssh -p port gitolite@git-server help
$ scp -r -P port input user@git-server:output 


@ 2012-09-07 搭配使用者自動管理專案之 ADC 常用方式:


編輯 gitolite-admin/conf/gitolite.conf ,提供使用者自動建立 public projects 和 private projects 功能:


repo priv/CREATOR/[a-zA-Z0-9].*
  C = @RDs
  RW+D = CREATOR
  RW = WRITERS
  R = READERS


# Update bin/Gitolite/Rc.m Or add into ~/.gitolte.rc :
# $REPOPATT_PATT        = qr(^\@?[[0-9a-zA-Z\(^][-0-9a-zA-Z._\@/+\\^$|()[\]*?!={},]*$);
repo ^(?!priv/)[0-9a-zA-Z]+$
  C = @RDs
  RW+D = CREATOR
  RW = WRITERS  
  R = @all


當使用者直接用 $ git clone gitolite@git-server:myproj.git 時,若 myproj.git 不存在則自動建立,此屬性屬於第二個,也就是對全體帳號預設都可以 Read 的;如果是用 $ git gitolite@git-server:priv/UserID/myprivate.git 時,這時 myprivate.git 預設是只有建立者可以讀取跟寫入。此外,這些專案的創立者也可以砍掉專案。


至於要對專案開放權限,則可以使用 perms 指令:


增加讀寫權限:


$ ssh gitolite@git-server perms myproject + WRITERS coworker_name


增加讀取權限:


$ ssh gitolite@git-server perms myproject + READERS coworker_name


移除讀寫(讀取)權限:


$ ssh gitolite@git-server perms myproject - WRITERS coworker_name
$ ssh gitolite@git-server perms myproject - READERS coworker_name 


列出權限清單:


$ ssh gitolite@git-server perms -l myproject


刪除專案:


$ ssh gitolite@git-server D unlock myproject
$ ssh gitolite@git-server D rm myproject


移到垃圾桶和還原操作:


$ ssh gitolite@git-server trash myproject
'myproject' moved to trashcan
$ ssh gitolite@git-server list-trash
myproject/2012-09-07_21:45:25
$ ssh gitolite@git-server restore myproject/2012-09-07_21:45:25
'myproject/2012-09-07_21:45:25' restored to 'myproject' 


2012年9月2日 星期日

使用 iTunes 批次更新歌曲資訊 @ Mac OS X

song_itunes02


用 Mac 有一陣子了,最近整理以前買的日劇音樂合輯共有兩片 CD,弄成 MP3 後,卻發現在 iTunes 上顯示為兩張專輯,仔細確認後,原來 iTunes 對歌曲進行分類專輯時,有用到歌曲的敘述,因此就碰到需要更改歌曲內容來達成擺在同一張專輯,故需要批次整理一堆歌曲的方式。


所幸內建 iTunes 可以處理,可以先把專輯名稱改成一樣,會強制把歌曲擺在同一張專輯,接著再把全選所有歌曲,透過簡介方式可以批次更改。


song_itunes01