2022年7月3日 星期日

[Docker]出現Got permission denied while trying to connect to the Docker daemon socket

當出現這個訊息時,代表當下沒有足夠權限去執行docker指令,只要在指令前面加sudo即可解決。 (通常執行docker指令都需要root權限)

2012年5月24日 星期四

android listview 的用法


public class BrowerUPnPonClingActivity extends Activity {
    /** Called when the activity is first created. */
private ListView listView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        listView=(ListView)findViewById(R.id.listView1);
       
        //加入ArrayList<>
        ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String,Object>>();
       
       for(int i=0;i<3;i++){
     
      HashMap<String, Object> maps = new HashMap<String, Object>();
      maps.put("name", i);
      list.add(maps);
       }
     
       
        SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.listview,new String[]{"name"},new int[]{R.id.textView1});
       
        listView.setAdapter(adapter);
       
    }
}

2012年5月23日 星期三

使用Cling API開發UPnP(一):Registry

Cling裡Registry的用途
1.維護UPnP Network裡的Device列表,如Add/Delete/Search/Update...。而這裡提到的Device,有可能是外來的(RemoteDevice),也有可能是自已建的(LocalDevice)
2.訂閱服務也是由Registry管理?但為什麼要透過controlpoint().excute(subscriptioncallback)去發?

2012年5月22日 星期二

使用Cling API開發UPnP(二):列出Device/Service/Action

Device
利用RegistryListener()裡的RemoteDeviceAdd可以得到Device


public void remoteDeviceAdded(Registry registry, RemoteDevice device) {
// TODO Auto-generated method stub

System.out.println(device);
RemoteService[] service = device.getServices();  //得到device的所有services
for(int n=0;n<service.length;n++){
System.out.println(service[n]); 
Action[] getAction = service[n].getActions();  //得到其中servide的所有actions
for(int m=0;m<getAction.length;m++){
System.out.println(getAction[m]);
}
}

}


2012年5月20日 星期日

使用Cling API開發UPnP(一):開始

一直以來都是用Cyberlink來當成開發UPnP的API,後來看到一篇論文是用Cling完成UPnP在Android平台的開發,想說來試試這套,或許也可以在自已的論文中比較這兩套的差異性。

話不多說,先去官網下載cling-distribution-1.0.5.zip,解壓縮後會有cling-core-1.0.5.jar及teleal-common-1.0.13.jar,將這兩個jar丟到java目錄的/lib/ext下。接著我們就可以先玩玩cling的workbench這支程式,其實就是一支UPnP ControlPoint,和Cyberlink比較起來,我還是比較喜歡Cyberlink的,畫面設計的比較面善,log吐出來的資訊較完整。至於功能面目前看來還差不多(還在研究中...)

依官網頁面Getting Strated先來試試看程式的結構性,恩!感覺好像要先啟一個UPnPService,這個Service可以是ControlPoint 或 Device?繼續看下去囉!

1.UpnpService upnpService = new UpnpServiceImp();
-實作一個UPnP Stack,有了這個stack,可以拿來做controlpoint(cling指client)及device(cling指server)
-不要了,就upnpService.shutdown()來切斷所有upnp network連線並通知大家byebye

2.兩個建構子
UpnpService upnpService = new UpnpServiceImp(RegisterListener...)
-馬上實作一個instance
UpnpService upnpService = new UpnpServiceImp(new DefaultUpnpServiceConfiguration(8081))
-DefaultUpnpServiceConfiguration也是一個介面




3.實作controlpoint
upnpService.getControlPoint()
若要search device
-upnpService.getControlPoint.search(new STAllHeader())  ->找所有device
(效果和upnpService.getControlPoint.search()一樣)
-upnpService.getControlPoint.search(new UDNHeader(udn)) ->針對某個udn


4.UDA vs. namespace
UDA是followUPnP Device Architecture下的命名規則
namespace則是依照vendor自行定義的




UPnP Service下有兩個重要元件
-state variable
-action





















2012年5月16日 星期三

android handler+message 之使用

之前在寫一支程式,為了將Cyberlink UPnP API的 NotifyListener 有SSDP message丟進來時,將其丟至UI Thread,但會出現Only the original thread that created a view hierarchy can touch its views.錯誤訊息。大致上是說非UI Thread不能去更新View(參考),需利用handler來處理。

package com.example;

import java.util.Timer;
import java.util.TimerTask;

import org.cybergarage.upnp.ControlPoint;
import org.cybergarage.upnp.device.NotifyListener;
import org.cybergarage.upnp.ssdp.SSDPPacket;

import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.method.ScrollingMovementMethod;
import android.widget.TextView;

public class UPnPOnAndroid3Activity extends Activity {
    /** Called when the activity is first created. */
private MyHandler mHandler;
private TextView tView;
private int i=0;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tView=(TextView)findViewById(R.id.textView1);
        tView.setMovementMethod(ScrollingMovementMethod.getInstance()); //textview可以捲動(參考)
        mHandler = new MyHandler();
        ControlPoint cPoint = new ControlPoint();
        if(cPoint.start()){
        tView.append("Start...\n");
        }else{
        tView.append("Stop...\n");
        cPoint.stop();
        }
        cPoint.addNotifyListener(new NotifyListener() {

public void deviceNotifyReceived(SSDPPacket arg0) {
// TODO Auto-generated method stub
Message msg = new Message();
        msg.obj=arg0; //將送來的SSDPPacket丟到msg.obj
mHandler.sendMessage(msg); //透過Handler來傳message

}
});
    }
   
    private class MyHandler extends Handler{
   
    public void handleMessage(Message msg){
   
    super.handleMessage(msg);  //透過Handler收message
    tView.append(msg.obj + "\n");  //print至textview
   
    }
    }
}

2012年5月15日 星期二

Endnote X5 上課心得

昨日上"博碩論文資料庫研習"時有提到Endnote這套參考文獻管理工具,聽起來蠻方便的,還可以節省不少word編排時間,今天剛好"智財權與參考文獻管理"有教,就來圖書館二樓資訊素養教室聽課囉!


一開始上課,老師先大致上說明"引用"與"抄襲"的差異(其實真的只有一線之隔),且目前校內有一套TurnItIn(反抄襲系統)供學生與老師使用,可以讓使用者了解我們寫的這篇論文,和別人的論文"相似度"多少,有些老師會規定相似度需要在多少百分比之下才可以接受。


接著老師提到寫論文時,參考文獻的格式也是很重要的。如文學院的論文會用Footnote,內文提到的參考文獻和這些參考文獻出處於同一頁面;而工學院的論會用Endnote,則是內文提到的參考文獻會放在論文的最後一頁。另外還有APA(商學院)、Chicago、IEEE(理工學院)等參考文獻格式。


來到今日的重頭戲了,Endnote的介紹,首先到學校網路教室下載Endnote X5(需要學號&密碼,所以校外人士只能去谷歌搜尋看看囉!)。解壓縮時需留意裡面會有一個license的檔,不能隨意砍掉,要不然會沒有版權而造成無法使用。


安裝好並開啟後(安裝時需將word關掉,因它會裝word plugin),我們在一般論文資料庫(台灣博碩士論文、IEEE、ACM...)找到的參考文獻,將它匯入endnote,通常在這些資料庫搜尋完,都有會有類似輸出論文的按鈕,這時我們選擇endnote格式(有些還需要選擇UTF-8格式),此時在endnote上就會出現我們想要的參考文獻囉!不過有些資料庫同時間可輸出多筆(台灣博碩士論文、IEEE、Web of Sciences...),有些只能點選單一論文,才能匯出(ACM、Springerlink...)。


最後我整理一下Endnote好用的地方:
1.參考文獻的輸出格式可以改(APA -> IEEE),當然也可以自行定義或修改IEEE格式裡的其中幾個欄位(


2. 可以附加全文(預設沒有),更好用的是,它可以自行搜尋全文,但如果Endnote找不到,也不一定就表示資料庫沒有提供,這時只好自已花點時間去找囉!


3.可以將pdf匯入Endnote,若PDF的格式Endnote可以辨識格式,它會主動將論文作者、出處、摘要等資訊加入相關欄位,但也不一定是百分之百可行,通常PDF裡有DOI(類似這篇PDF的身份證)成功機率比較大些。


4.若PDF匯入時,無法辨識格式,那可以利用PDF&QuickEdit來編輯相關欄位,也可以透過這個功能來study paper,因為它有注解、劃線的功能,還不錯。


5.若寫論文時花比較久的時間,有時這些文獻可能會被重覆匯入,此時可利用References -> Find Duplicates來刪除重覆的文獻。


6.和word做整合,當我們一邊寫論文時,就可以一邊利用Endnote將參考文獻插入內文中,並且會幫忙做格式的編排,但記得交卷時,需將格式轉成一般word格式,不要帶Endnote code在word裡,否則老師看你的論文若電腦沒有安裝Endnote,會出現亂碼。


感謝老師的教學,又長知識了。


PS:另外老師還提到,其實可以利用這篇參考文獻的"被參考次數及引用論文"和"此篇參考的其它文獻"來當成自已的資源,尤其是Web of Sciences,這方面做的不錯,且和Endnote整合度最高(據說是同一家軟體商寫的)