2015年10月16日 星期五

「分享」專案管理心得

專案的分配並不是只單純的分割工作,除了監督還必須了解同伴是否有遇到困難,

以及功能切割是否有前後順序,誰做都無所謂,最重要是團隊成就,不可能永遠

是一個獨立coder 。



前輩點出我管理及分割專案的弱點,我太樂觀,專案不是成員說保證做完就可以放心,

你要去追,去督促,不是對方一句急什麼打槍你,或是做到最後發現成員中熟悉度不足

而最後在趕火車。


分割專案必須要注意功能面的隅合問題,有些功能就像課程的擋修,必須先處理其他的功能

,才能來做這個功能,用功能面來切,會發生時間先後的問題。也不要把功能面切的太大,

導致專案完成的時間不容易精確估計,只要一個功能DELAY,後面的時間拖到會很可觀。


分割專案的人必須去協調,而不是單純的相信成員一定會在時間內做完,凡事都會有意外,

更何況是寫程式。

「智語」人感受到掙扎跟抗拒的時候

人感受到掙扎跟抗拒的時候,也就同時是在成長的時候

2015年10月15日 星期四

[分享] ios app上架後注意事項

在app 上架後,如果開發者帳號到期沒付錢,app 會消失在app store看不到。

2015年10月13日 星期二

2015年10月11日 星期日

「智語」命中有時終須有,命中若無莫強求

你命裡有的,任何人都不能破壞,任何人都不能夠奪取。凡是別人會破壞、別人會奪取的,是你命裡頭沒有的。

 “命裡有時終須有,命裡無時莫強求”,強求到的,還是你命裡頭有的,你說冤不冤枉!明白這個道理,積功累德就好。佛菩薩之果地,是要積功累德才能修成。所謂“德”,就是存心利益眾生;能夠捨己為人、利益眾生,常存此心,這是德!



資料來源:
http://blog.xuite.net/scorpigodess/blog/217197716-%E6%B7%A8%E7%A9%BA%E6%B3%95%E5%B8%AB%E6%B3%95%E8%AA%9E%EF%BC%9A%E5%91%BD%E4%B8%AD%E6%9C%89%E6%99%82%E7%B5%82%E9%A0%88%E6%9C%89%EF%BC%8C%E5%91%BD%E8%A3%A1%E7%84%A1%E6%99%82%E8%8E%AB%E5%BC%B7%E6%B1%82%EF%BC%81

2015年10月5日 星期一

「Swift」Swift建構與解構

Swift建構子是init() ,解構子是deinit ,在學Swift之前,我真的沒聽過解構這名詞。


class Employee
{
    var Name : String = ""
 
    init()
    {
        print("建構了")
    }
    
    deinit
    {
        print("解構了")
    }
}

然候建構及解構


var emp : Employee?

emp = Employee()
emp!.Name = "boywhy"
emp = nil

注意宣告時,必須把型別宣告成Employee? (Optional),最後才能被指定成nil

輸出結果為

建構了解構了

「swift」set 及 get用法

今天假如我有一個變數,需要做計算屬性 ,

假如某個員工薪水低於30K,就給員工30K。

我們先用Swift建立一個class叫做Employee


public class Employee
{
    var Name : String = ""
    private var _Salary : Int = 0
    var Salary : Int{
        set {
            if newValue < 30000
            {
                self._Salary = 30000
            }
            else
            {
                self._Salary = newValue
            }
        }
        get
        {
            return self._Salary
        }
    }
}
然候我們初始化員工的資料


var emp : Employee

emp = Employee()
emp.Name = "boywhy"
emp.Salary=23000
print("Name:\(emp.Name) Salary :\(emp.Salary)")

輸出結果為 Name:boywhy Salary :30000

「Android」OOM

最近遇到一個問題,弄了俺一個小時,明明前一分鐘還是好好的,

正所專案一大,一個不注意就有可能發生這個情況,從錯誤訊息中

看不出來那裡導致它掛了。
























最明顯的一行就是

Throwing OutOfMemoryError "Failed to allocate a 28 byte allocation with 571832 free bytes and 558KB until OOM

由上面一行,我可以知道是因為Out Of Memorry 造成的錯誤,一開始以為是資源檔太大

後面發現,原來是因為自己犯傻囉,我們先來看一下底下的示範CODE

MainActivity.java


public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Func1 f1=new Func1();
    }
}

Func1.java

public class Func1 {

    public Func1()
    {
        Func2 f2=new Func2();
    }
}

Func2.java


public class Func2 {


    public Func2()
    {
        Func1 f1=new Func1();
    }
}

沒錯,Fun1.java在建構子中呼叫Func2的建構子,Func2的建構子中

也呼叫了Func1的建構子,不斷的糾結下去就爆了,一啟動APP就立刻

crash的不明不白。


參考來源:

我自己

「Android」InetAddress.isReachable

最近在工作上需要用到PING的功能,查詢了一下

InetAddress.isReachable(Timeout)

這個是JAVA去實作ICMP的功能,後面的Timeout

指的是即使對方有應PING,但回應的時間超過Timeout

這個函式依然會回傳false.


但是在Android上使用,發現不太對勁,上網爬了文

明明存在的IP確回傳false, 但在try一次,卻總是回傳true,

面對沒人用的IP,retry卻回傳TRUE 。





seems that isReachable() never worked well on Android b/c it tries to use ICMP, that usually needs a root privileges, and then it tries to establish connection to port 7, that's usually have no running services on modern systems.
you'd better check connectivity with establishing TCP connection to ports you know should be open.
來源:

http://stackoverflow.com/questions/16441620/android-inetaddress-getbynameip-isreachabletimeout-always-returns-false



he best way to test the availablity of any resource is to try to use it. The best way to detect whether any specific IP is accessible is to try to connect to it to do what you need to do. Don't use isReachable() as a prior test at all. It doesn't test the same things.

來源:
http://stackoverflow.com/questions/16441620/android-inetaddress-getbynameip-isreachabletimeout-always-returns-false


InetAddress.isReachable(int) returns true for unreachable addresses.

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4921816



最後改用了下面這一個方法使用PING,才比較正常。


Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com");
int returnVal = p1.waitFor();
boolean reachable = (returnVal==0);

參考來源:

http://shovachu-coding.blogspot.tw/2014/03/androidping.html

2015年10月4日 星期日

[分享]撰寫控制硬體程式心得

近來接觸控制硬體的案子,

硬體上只有個 mcu,

多執行緒在硬體上無法有效應用,

Mcu基本上只運作單一程序,

也許只有半雙工傳輸,

有時候指令間隔幾ms亦是危險的。

建議採用等待硬體response後

再發下一個指令,或是等候一個

安全間隙時間沒收到回應再重發送。

多給硬體一點時間,多一次機會。