XCode from SVN to Git (BitBucket), Step by Step

1.(Terminal) git svn clone http://svn.domain.com/svnroot/

2.(BitBucket) Create repository, get repository url

3.(XCode) Open project (cloned in step 1)

4.(XCode) Add Existing Remote

The Location was the URL you got in step 2 (on top right corner)

5.(XCode) Source Control -> Push

Posted in iOS development | Leave a comment

Android Studio from SVN to Git (BitBucket), step by step

1.(Terminal) git svn clone http://svn.domain.com/svnroot/

2.(BitBucket) Create repository, get repository url

3.(Android Studio) Open project (cloned in step 1)

4.(Android Studio) Android Studio -> Preferences -> Version Control -> Change none/SVN to Git

5.(Android Studio) VCS -> Commit

6.(Android Studio Terminal) git remote add origin http://abc.com/def/ghi.git
The URL was what you got in step 2.

7.(Android Studio) VCS -> git -> Push

Posted in Android | Leave a comment

2017 7月 薇閣 全家福 拍攝心得(有挑片技巧分享)

今年(2017)對我而言,是個蠻特殊的年份

於是想拍個全家福做為紀念

在網路上搜尋拍攝全家福的公司資訊

最後選定了台北市靠近松江南京的薇閣攝影

以下是一些拍攝心得供網友參考

 

1.拍攝費用

跟網頁上講的一模一樣,截圖如下

我最早選的是7,500的方案

結果因為意志不堅定

一下子就被說服改成 13,500 的方案

 

2.拍攝時間

原本預計是拍攝一個上午

後來實際拍攝完大概要到下午一兩點

中午有休息吃午飯的時間

 

真心建議選平日而非假日去拍

因為同時拍攝的客戶比較少

拍攝起來比較不會有擁擠感和壓力感

 

3.選擇相片(重要!這篇最重要的部份!必看!)

即使是拍全家福,但跟拍婚紗一樣

要從幾百張挑出你要的幾十張

而在挑片的過程中

隔一段時間就有人遊說「這張很好看」「這張不挑可惜」「這張非選不可」blah blah blah

越多人看就越多意見,猶豫不決,甚至會不高興

以下是我的挑片技巧

技巧一:看片之前先決定配額,例:四人合照x6, 三人合照x4, 兩人合照x6, 個人獨照x4

一定要在看片之前決定
否則一看片就很容易因為捨不得決定不了,然後多挑了組數
技巧二:挑片就是挑片,不是刪片。

攝影公司會教你操作軟體,要的相片在左邊的視窗,不要的相片在右邊的視窗。
一開始全部相片都在左邊,得刪掉幾百張,工程浩大又費時。
這裡有個技巧,就是「先把所有相片都刪掉,再挑要的部份」。
先把全部相片全部刪掉(即移到右邊(註1))
接著在每個「相同場景+相同的人組合」只挑一張到左邊
(不管照得多好多美,相同的場景+人的組合都只挑一張)
這樣子挑下來
就只剩下幾十張在左邊了(原始有幾百張)
接著再看左邊的幾十張
並且參照技巧一的配額
就可以決定最後的20組了

註1:攝影公司只會教刪一張的方法,就是「點一張相片,再點垃圾桶按鈕」
這裡告訴你全刪的方法,就是
「點第一張相片,滑鼠捲到最底下,(按著Shift鍵)點最後一張相片
(如果選成功的話,你會看到所有相片都有被選取的框框)
這時再點垃圾桶按鈕」
等一段時間(看相片組數多或少,可能會超過一分鐘),
然後就會全部移到右側的刪除區
技巧三:自己要有定見,不要耳根子軟

要拍幾組就幾組
挑片時要挑幾組就幾組
不要被話術影響,什麼「紀念價值」「機會難得」「男帥女美」...blah blah blah
只要是拍過婚紗的人
都聽過這套話術
就看自己能不能堅持住

(註二)
技巧四:最重要的一點,不要弄得不愉快

拍攝幾個小時下來,全部的人都會累,在拍攝過程中,不管任何問題,一定要忍住性子,
保持愉快的心情才能拍好相片。
挑片的時侯也是,一開始大家興緻勃勃,後來累了之後就會開始不耐煩。再加上攝影公司
的人在旁邊建議東建議西,就更容易弄得不愉快。

註二:

我一開始就是沒有堅定意志

就從 7,500 改成 13,500 的方案

接著在挑片時我就打定主意

拒絕了加價加組數的方案(忘了,好像加20幾組,加 10,000 還是 15,000 左右)

等到攝影公司覺得確定我不會再加組數了

就提出最後的方案

「拍攝所有的500多張相片的電子檔」,只要5,000元

當下實在很誘人

不過我仍然堅持不買(還有後續,見註三)

 

4.看修圖

挑完相片後大概過一兩個禮拜

攝影公司會通知去看修圖

讓客戶有最後調整修圖結果的機會

我是看不出來什麼問題,就全部確認了

註三:此時攝影公司那張電子檔光碟由5,000降價至3,000元,我出價0元和1,000元,

議價失敗,仍沒買光碟(還有後續,見註四)

 

5.拿成果

攝影公司通知取件

我去拿洗出來的相片和放大相片

註四:攝影公司提到:會保留我們電子檔一個月的時間,期間之內都可以回去買光碟,之後就刪掉

結論:

薇閣的服務、拍攝的過程和成果都令人滿意。

下次我不會加組數,我只會拍最少組數,或許加買電子檔光碟。

Posted in Misc | Tagged , , , , , , , , | Leave a comment

SVN command line usage sample

1.To checkout a verison in date 2017/12/25

svn co -r {2017-12-25} http://mydomin.com/svntree

2.To checkout a revision 168 in date 2017/12/25

svn co -r 168 http://mydomin.com/svntree

 

Posted in Uncategorized | Leave a comment

iOS – Click view to dismiss the keyboard

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(endEditing:)];
    tap.cancelsTouchesInView = FALSE;
    tap.delegate = self;
    [self.view addGestureRecognizer:tap];
Posted in iOS development | Leave a comment

keytool usage sample script for Android keystore

1.Generate keystore
keytool -genkey -v -keystore [keystore filename] -alias Release -keysize 2048 -validity 10000 -keyalg RSA -dname "CN=[CNName], OU=Mobile Development, O=[AuthorName], L=[CityName], ST=[StateName], C=[CountryName]" -keypass [password] -storekey [Storekey]

2.List keys information in keystore
keytool -list -v -keystore [keystore filename] -storepass [password]
Posted in Android development | Leave a comment

Android Studio 加 Admob 步驟(2016/12/09)

官網文件連結
https://firebase.google.com/docs/admob/android/quick-start

1.在Firebase建立新project
https://firebase.google.com/docs/android/setup
1.1設定
此處的 app id 要和 Android Studio 裡的 package name 完全相同
否則會錯
例:
1.2下載 google-services.json
1.3修改 專案層級 的 build.gradle
buildscript {
dependencies {
// Add this line
classpath ‘com.google.gms:google-services:3.0.0’
}
}
1.4修改 app 層級的 build.gradle

//Add to the bottom of the file
dependencies {
//    compile ‘com.google.firebase:firebase-ads:9.8.0’    //Admob
compile ‘com.google.firebase:firebase-ads:9.2.1’    //Admob
}

// Add to the bottom of the file
apply plugin: ‘com.google.gms.google-services’

1.5點 Android Studio 裡 gradle 的 Sync Now

2.修改 strings.xml
加這列
<string name=”banner_ad_unit_id”>ca-app-pub-1234581776212345/1234512345</string>

3.修改 layout/xxxActivity.xml
加 namespace
xmlns:ads=”http://schemas.android.com/apk/res-auto”
加 adView element
<com.google.android.gms.ads.AdView
android:id=”@+id/adView”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_centerHorizontal=”true”
android:layout_alignParentBottom=”true”
ads:adSize=”BANNER”
ads:adUnitId=”@string/banner_ad_unit_id”>
</com.google.android.gms.ads.AdView>

4.修改 MainActivity.java
import com.google.android.gms.ads.AdRequest;//Admob
import com.google.android.gms.ads.AdView;//Admob
import com.google.android.gms.ads.MobileAds;//Admob

protected void onCreate(Bundle savedInstanceState) {

//Add the following lines
//————————————
// Admob
//————————————
MobileAds.initialize(getApplicationContext(), getString(R.string.banner_ad_unit_id));//Admob
AdView mAdView = (AdView) findViewById(R.id.adView);
com.google.android.gms.ads.AdRequest.Builder builder = new com.google.android.gms.ads.AdRequest.Builder();
//        builder.addTestDevice(“12345123451234512345123451234512″);
//        AdRequest adRequest = new AdRequest.Builder().build();
com.google.android.gms.ads.AdRequest adRequest = builder.build();
mAdView.loadAd(adRequest);
}

5.修改 AndroidManifest.xml

<uses-permission android:name=”android.permission.INTERNET” /><!–<ff>for Admob</ff>–>

6.修改 layout/xxx.xml

<com.google.android.gms.ads.AdView
android:id=”@+id/adView”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_centerHorizontal=”true”
android:layout_alignParentBottom=”true”
ads:adSize=”BANNER”
ads:adUnitId=”@string/banner_ad_unit_id”>
</com.google.android.gms.ads.AdView>

Posted in Android development | Leave a comment

An App ID with Identifier is not available. Please enter a different string

invalid app id

在 adhoc build 時出現 Invalid app id 的錯誤訊息

奇怪的是很久之前可以,現在卻不行

解決方法是

將原來「由Xcode代為產生的 adhoc provision profile」全部刪掉

自己重新設定「adhoc provision profile」即可

app id 與原來的相同

Posted in iOS development | Tagged , , | Leave a comment

終於 – iTunes Connect 改善了

以前上架 iOS app 時

都要上傳各尺寸的螢幕截圖

3.5″ 4″ 4.7″ 5.5.” 四種大小

如果每個 5 張,就得要 5×4=20 張

今天上架時

發現只要上傳最大的解析度即可

5.5″ (1242×2208)

其他較小的尺寸預設就會自動套用

(當然,如果要自己上傳各尺寸也是可以)

真是 iOS Developer 的一大福音…

Posted in iOS development | Leave a comment

簡單學日語 下架了

由於此書的版權擁有者要求此 app 下架

否則提出侵權告訴

所以此 app 已經下架了

Posted in 簡單學日語, Uncategorized | Leave a comment