星期三, 9月 27, 2017

如何讓行動裝置專案輸出不同名稱

由於最近要交付二個不同平台的App出去,在開發上必需要比較有彈性。

以往的作法是,一個專案的名稱叫 myApp,那它輸出的app 名稱就叫作 myApp。

若是要改名稱,以我的作法,會把專案刪除了,另外創一個新的名稱的專案。

使得它輸出的名稱跟調整後的名稱是一樣的。

這樣的笨方法其實是不可行的,由其是專案越來越大的時候,不太可能為了一個app 名稱去刪除專案。

依照系統設計的邏輯,一定有什麼地方是可以調整輸出app 名稱。

Android的設定是在:

app->main->res->values->string.xml

<string name="app_name">app name you want</string>

iOS的設定是在:

Info.plist->Bundle display name -> Value -> app name you want

就可以解決問題。

解決因調整程式執行編碼,導致其它程式出現亂碼的問題。

為了解決程式輸入產生亂碼的問題,我把啟動前端程式的JVM的編碼參數移除。

使得JVM啟動程式時使用系統預設編碼。但這個導致了我們呼叫服務器get function回傳的中文值是亂碼。

為了要解決這個亂碼問題,我們打算先了解各系統使用的編碼本質,偵測程式碼如下:

String enc = System.getProperty("file.encoding");
System.out.println(enc);

得到的不是UTF-8,而是繁中系統所使用的MS950。

由於服務器系統回傳的是UTF-8,如果不使用UTF-8接收,直接用MS950接收,會產生亂碼。

於是我們將HttpURLConnection回傳的Inputstream,使用編碼為UTF-8的InputStreamReader接收。

這樣就可以解決MS950與UTF-8之間串接所造成的亂碼問題。程式碼如下,紅字部份為重點:

public static String doGet(String urlString, String contentType, String charset) throws IOException {
URL url = new URL(urlString);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setConnectTimeout(30000);
con.setRequestMethod("GET");
con.setRequestProperty("Content-Type", contentType);
con.setRequestProperty("charset", charset);
//
int http_status = con.getResponseCode();
if (http_status == 200) {
StringBuilder sb = new StringBuilder();
BufferedReader bfrd = new BufferedReader(new InputStreamReader(con.getInputStream(),"UTF-8"));
String temp = null;
while ((temp = bfrd.readLine()) != null) {
sb.append(temp);
sb.append("\r\n");
}
bfrd.close();
return sb.toString();
} else {
throw new IOException("Http Connection Error: " + http_status);
}
}

星期四, 7月 27, 2017

無名小站創辦人簡志宇演講的心得

拖了有點久,最近才看完。
簡志宇演講的心得:
無名小站的發跡歷程:
高中吊車尾進數理資優班,排不上前段保送台大的隊伍。
發現有個資訊奧林比亞競賽可以報名,人也很少,順立拿到教育部獎狀,保送交大資工。
念研究所時只想當竹科新貴,但是高手太多。
宅宅交不到女朋友,只能看同學跟正妹女友出遊的照片。
開始架設自已上照片的站,只是為了看正妹照片。
研究不得志,被教授猛K。
上傳照片的網站開始有流量,但是只想早早讓硬碟爆了,認真做研究。
硬碟爆了,有人打電話到系辦要求修好,不然要告簡志宇。
決定休學一年創業。
學了一堆跟公司有關的事情,法務、會計、行銷、公關、喝酒?
簡志宇的英文沒有很好。
被Yahoo收購。以為可以好好當溫拿。
到矽谷二三次,意識到從矽谷發展出來的東西,
像是FB,Twitter,放到全世界之後,會碾過當地國家的社群網站。
台灣:無名、日本:Mixi。
無名小站會倒。
加強英文申請內調到矽谷。
在美國矽谷,每天都在想新的市場,怎麼去Redifine,怎麼去幹掉對手。
拼一個從來沒有的概念。
因為商業模式每天都在變,大公司為了要馬上有人才做產品,會Overpay去挖一個員工。
一個相當於台灣中字輩的美國大學,大學部畢業後,就可以拿到10萬鎂年薪以上的Offer。
在矽谷,年薪10萬鎂以下算是低收入戶。
矽谷的貧富差距是44倍,但因為Overpay的關係,社會壓力較小。人人有希望。
台灣的貧富差距是11倍,但沒有因為Overpay的關係,社會壓力較大。
矽谷有51%的人在家中不是講英文,因為渴望外國人才到矽谷。
改做VC。
簡志宇的台風比PTT好很多。

星期四, 5月 11, 2017

Ptt 杜奕瑾的演講

今天公司邀請Ptt來演講,在這邊做個筆記。

















為什麼建立ptt會成功?
當初學網剛出來,他就拿open source的東西在玩,
覺得好玩就架了ptt(做別人沒做過的事,而且是要第一個做)
1995的年代,父母親會說,怎麼會把時間都放在網路上?
被嘲笑、批評也沒有關係,重點是經驗。
另外一點是,要先有錢挹注的環境先練習,類似一個培養皿上面做事。
這樣第一手經驗都是自已的。


後來去美國微軟發展。

剛到美國,有些工作要求美國公民,甚至要身家調察到符合安全。
如何進去這樣子的工作? 缺少資格的話,就先做你認為對的事情
重點是把技術應用在一個專門的地方
到後面碩士跟PhD學歷只是保證你不會被人事過濾掉。
人家會問你之前實際做過了什麼。

為什麼要回台灣?
沒有明講,只是說對台灣有深厚的感情。
希望把小孩留在美國接受Informative的教育,而不是台灣的填壓式教育。


軟體工程師在乎的是環境,因為軟體的移動性很高。
到哪裡做都一樣,只要有網路跟雲就好。
剩下的就是考慮生活環境的問題。
其實不管是軟體工程師,其它的工作也一樣。
要善待人才

在微軟做過許多項目,其中Cortana是比較多可以講的。
Cortana就是微軟的Siri
語音辨識不是AI,裡面沒有智慧的東西。
重點是東西做出來之後,如何幫助傳統產業把問題解決(最後一哩)
機器要徹底了解人的潛在需求
Apply to business logic.

微軟幫麥當勞做自動點餐系統(得來速)
一個人對著麥克風講,系統就邊講邊分析(展開語意樹),自動點餐。很酷
OS 不重要,重要的是一個對的體驗
做對體驗,全世界就會跟著你轉。
去想如何增進自己周圍的使用體驗,是一個最好的練習機會。

不是說有了搜索引擎就不用背書
不是說有了人工智慧就不用判斷
不是說有了掃地阿姨就不要老婆

瀏覽器廣告
擋廣告的人就是各大廣告商想要找的對象。
尤其是找出對的廣告來推銷

提到大數據。
資料只要夠多就好,過多的資料只會造成over fitting

提到台灣是不是有人才可以做AI
台灣的大學,有高質量的教授與實驗室可以培養人才。

是不是人口多才可以做AI?
新加玻都要投錢做AI了,人口少不是問題。

AI不是為了只是某個問題而已,而是要用想像力去看整個面向的事情。

總結

Big data
Model
Experience

團隊有在找人,不過他不想找VC不想要有老闆(自由無價)

提問
一個講話都不太清楚的老頭:「你知道最近的補教業的事情嗎? 如何看待這裡面的Disorder?
:知道,我有看八卦版()
正反兩面都有辦法闡述意見時其實就是好的
因為在Ground truth 不知的情況就不知怎麼做Leveling


星期一, 5月 08, 2017

使用Maven jboss plugin 進行佈署

Maven 有很多的外掛軟體可以使用,能夠幫助管理專案的建置與佈署。

這邊介紹的是Maven jboss plugin。

先將 jboss eap 6 打開。

設定值為:


<plugin>
<groupId>org.jboss.as.plugins</groupId>
<artifactId>jboss-as-maven-plugin</artifactId>
<version>7.9.Final</version>
<configuration>
<hostname>127.0.0.1</hostname>
<port>9999</port>
</configuration>
</plugin>

把這個設定值加入到POM檔之後,輸入Maven指令。

mvn jboss-as:deploy-only

啟動後,就會發現jboss會跳出正在deploy的訊息,而且它會把舊的專案更新成新的專案。

底下這個是由Maven產生出的訊息,Build Success表示沒有錯誤,WAR檔更新成功。

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building xxx0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- jboss-as-maven-plugin:7.9.Final:deploy-only (default-cli)
五月 08, 2017 9:48:46 上午 org.xnio.Xnio <clinit>
INFO: XNIO Version 3.0.7.GA
五月 08, 2017 9:48:46 上午 org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.0.7.GA
五月 08, 2017 9:48:47 上午 org.jboss.remoting3.EndpointImpl <clinit>
INFO: JBoss Remoting version 3.2.12.GA
Authenticating against security realm: ManagementRealm
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.156 s
[INFO] Finished at: 2017-05-08T09:48:53+08:00
[INFO] Final Memory: 12M/190M
[INFO] ------------------------------------------------------------------------

git 無法推送到遠端git lab 的問題

由於自己架git 的repository 沒有像svn來的方便,但是又不能將客戶的程式碼放到github作為公開使用,所以我選了gitlab使用。但是當我用git push 時得到下面的訊息,程式碼就沒有推送上去。

$ git push
Counting objects: 9292, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2136/2136), done.
error: RPC failed; result=22, HTTP code = 411
fatal: The remote end hung up unexpectedly
Writing objects: 100% (8222/8222), 1.27 MiB | 837 KiB/s, done.
Total 8222 (delta 6060), reused 8181 (delta 6033)
fatal: The remote end hung up unexpectedly
Everything up-to-date

輸入以下指令,調整git系統使用的buffer size

git config http.postBuffer 524288000


之後再下git push 就可以確實將程式碼上傳到gitlab上。 

Android Wear Preview 使用注意事項

1.必須要用gmail帳號申請一個Preview用的sample code 程式碼。

2.必須要有一個可以跑android 版本 4.4.2的手機或是平板。

3.要下載google android wear preview專用的一個app。

4.啟動後的android wear 裝置不支援聲音輸入。

5.將手機裝置與android wear裝置連線後可以用preview app 對wear 裝置發送訊息。

6.訊息有很多種,有文字訊息、圖片訊息、可回復的訊息......等。  

星期四, 5月 04, 2017

MySQL Universal date format transform

由於一開始沒有控管日期的格式如何,資料蒐集起來有點雜亂。

但是MySQL沒有像Oracle資料庫系統有比較好用的日期處理Function,在經過不斷嘗試後終於找到一個適合的方法。

使用UNIX_TIMESTAMP這個function,就可以同時把不同格式的日期一併轉成是統一的格式。

不會再有一種格式轉出來是正常的,另外一種格式轉出來卻是null的情況發生。

select count(callDate) from DeliverLog where from_unixtime(UNIX_TIMESTAMP(callDate),'%Y-%m-%d %H:%i:%s')

>= STR_TO_DATE('2016-12-01 00:00:00', '%Y-%m-%d %H:%i:%s') and from_unixtime(UNIX_TIMESTAMP(callDate),'%Y-%m-%d %H:%i:%s') < STR_TO_DATE('2017-01-01 00:00:00', '%Y-%m-%d %H:%i:%s')

select count(*)

deliverTime from DeliverLog where deliverTime is not null and TIME_TO_SEC(TIMEDIFF(STR_TO_DATE(deliverTime, '%Y-%m-%d %H:%i:%s') ,STR_TO_DATE(pickTime, '%Y-%m-%d %H:%i:%s'))) < 14400 and

STR_TO_DATE(deliverTime, '%Y-%m-%d %H:%i:%s') >= STR_TO_DATE('2016-11-01 00:00:00', '%Y-%m-%d %H:%i:%s') and STR_TO_DATE(deliverTime, '%Y-%m-%d %H:%i:%s') < STR_TO_DATE('2016-12-01 00:00:00', '%Y-%m-%d %H:%i:%s')