如果不喜歡Unity介面,想用傳統介面,用下列方式安裝
GNOME 3 首頁:http://www.gnome.org/gnome-3/
在終端機中下指令:
sudo add-apt-repository ppa:gnome3-team/gnome3
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install gnome-shell
後來發現,不太對~~則再新增另一PPA,並安裝套件,如下:
sudo add-apt-repository ppa:webupd8team/gnome3
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install gnome-shell-extensions-alternate-tab
sudo apt-get install gnome-shell-extensions-alternative-status-menu
sudo apt-get install gnome-shell-extensions-user-theme gnome-tweak-tool
sudo apt-get install gnome-shell-extensions-apps-menu
source:http://dinohsieh.blogspot.com/2011/10/ubuntu-1110-gnome3.html
2012年3月6日 星期二
2011年12月28日 星期三
Dhcp Server 架設
在追Dhcp問題時,順便架設了Dhcp Server,記錄一下,以免以後忘了
1、安裝Dhcp 伺服器
出現 * check syslog for diagnostics. [fail]
這是自動啟用失敗,需要正確後再啟用。
2、修改 /etc/dhcp/dhcpcd.conf,設定參照如下,網段可自行設定
3、修改 /etc/default/dhcp3-server
4、指定IP給eth0
最後啟動DHCP
★注意一點,最好使用root 權限
1、安裝Dhcp 伺服器
# apt-get install dhcp3-server
出現 * check syslog for diagnostics. [fail]
這是自動啟用失敗,需要正確後再啟用。
2、修改 /etc/dhcp/dhcpcd.conf,設定參照如下,網段可自行設定
ddns-update-style none;
option domain-name "test.com";
option domain-name-servers 10.1.1.1, 10.1.1.2;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 10.1.1.0 netmask 255.255.255.0 {
range dynamic-bootp 10.1.1.41 10.1.1.50;
option broadcast-address 10.1.1.255;
option routers 10.1.1.1;
}
3、修改 /etc/default/dhcp3-server
INTERFACES="eth0" <<設定要listen 的interfaces
4、指定IP給eth0
ifconfig eth1 10.1.1.0 netmask 255.255.255.0
最後啟動DHCP
/etc/init.d/dhcp3-server start
★注意一點,最好使用root 權限
2011年12月1日 星期四
Synchronized
使用時機
Synchronized的使用時機很難定義,比較常見的情況是,當程式中會取出某一個共用的物件且會判斷物件內容值,再更新物件內容,此情況大部分都需要synchronized保護。
Synchronized的使用時機很難定義,比較常見的情況是,當程式中會取出某一個共用的物件且會判斷物件內容值,再更新物件內容,此情況大部分都需要synchronized保護。
1. Synchronized Method :鎖定Method所屬物件,如Method被 new 超過1個以上,會保護不到Method內的程式。
2. Synchronized Static Method :此種synchronized用法鎖定的物件為Method所屬的物件的Class,不管被new幾次,都能夠保證同一個時間只會有一個Thread在執行此Method。
3. Synchronized(this) :應用同2,也是在鎖定Method
4. Synchronized(SomeObject) :此種synchronized用法鎖定的是SomeObject,如果SomeObject是同一個Class的兩個不同Instance,那 synchronized區塊內就有可能被同時執行。如果每一個Synchronized的SomeObject都是同一個Instance(或者 SomeObject本身就是Static),就可以保證區塊內同時間只會有一個Thread執行。
當使用Synchornized(SomeObject)時,SomeObject本身處於被Lock狀態,但此時其他的Thread是可以去更改SomeObject裡面的值,Lock只是同步化的狀態,不表示不能更改資料。
當使用Synchornized(SomeObject)時,SomeObject本身處於被Lock狀態,但此時其他的Thread是可以去更改SomeObject裡面的值,Lock只是同步化的狀態,不表示不能更改資料。
2011年11月28日 星期一
android - 電源管理 與 飛航模式控制
這次研究的是在android 進S3時要切到飛航模式(Airplane Mode)避免耗電,而這個自動切換又不受使用者自行啟用飛航模式影響,也就是如果是使用者自行開啟,不自動去開關。
●何謂S3
以電源管來說主要區分S0->S5 下面逐一說明
S0:正常狀態,即為RUNTIME模式
S1:CPU停止工作,即為待機(Standby)
S2:CPU關閉,和S1相同(Power Standby)
S3:Suspend to RAM,即為「睡眠」,將所有狀態資料儲存在記憶體中,進入「假關機」,
所有設備除了記憶體之外都斷電了。
S4:Suspend to Disk,將所有狀態資料儲存至硬碟中,即為「休眠」。
S5:Shutdown...就是關機的意思啦。
在Embedded中,可以對下列路徑下命令系統進入各種狀態
用cat 可取得kenerl支持哪些休眠方式
●Airplane Mode
這次是以修改 PowerManagerService,來進飛航模式,因應S3狀態即要自動開始
首先先暸解如何切換飛航模式,範例程式如下:
記得在AndroidManifest.xml 加上權限
●PowerManagerService
在需要設定切換飛航模式增加程式,增加地方如下:
SCREEN_BRIGHT:
SCREEN_OFF:
reallyTurnScreenOn = true;
我們主要是在android 原始碼的service加上我們的切換程式,這樣在重新build image前,要記得 api也重新再make一次,避免發生android辨示不出我們增加的副程式 (正確應該避免修改android service,要將我們的副程式獨立出來用import方式處理。)
另外該如何去區分何時該自動開啟飛航模式呢?
我採用的方式是利用android frameworks中的providers,來儲存是否為USER自行開啟,這樣在進入休眠時會一並存入記憶體中,並在PowerManagerService 內增加判斷。
路徑如下
frameworks/base/packages/SettingProvider/src/com/android/providers/settings/DatabaseHelper.java
增加provider
●補充說明,android 是如何呼叫進入suspend流程。
上層 → goToSleep() → goToSleepLocked() →setPowerState() → setScreenStateLocked() → Power.setScreenstate(on) //android_os_power.cpp →Power.c
http://www.thinksrc.com/2010/04/18/suspend-cn.html
http://abgne.tw/android/android-code-snippets/android-control-airplane-mode-enabled.html
●何謂S3
以電源管來說主要區分S0->S5 下面逐一說明
S0:正常狀態,即為RUNTIME模式
S1:CPU停止工作,即為待機(Standby)
S2:CPU關閉,和S1相同(Power Standby)
S3:Suspend to RAM,即為「睡眠」,將所有狀態資料儲存在記憶體中,進入「假關機」,
所有設備除了記憶體之外都斷電了。
S4:Suspend to Disk,將所有狀態資料儲存至硬碟中,即為「休眠」。
S5:Shutdown...就是關機的意思啦。
在Embedded中,可以對下列路徑下命令系統進入各種狀態
# echo standby > /sys/power/state
用cat 可取得kenerl支持哪些休眠方式
# cat /sys/power/state
●Airplane Mode
這次是以修改 PowerManagerService,來進飛航模式,因應S3狀態即要自動開始
首先先暸解如何切換飛航模式,範例程式如下:
import android.content.Context;
import android.provider.Settings;
public static boolean isAirplaneModeOn(Context context){
return Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) != 0;
}
import android.content.Context;
import android.content.Intent;
import android.provider.Settings;
public static void setAirplaneMode(Context context, boolean status){
// 先判斷目前是已否開啟飛航模式
boolean isAirplaneModeOn = isAirplaneModeOn(context);
if((status && isAirplaneModeOn) || (!status && !isAirplaneModeOn)){
return;
}
int mode = status ? 1 : 0;
// 設定飛航模式的狀態並廣播出去
Settings.System.putInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, mode);
Intent i = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
i.putExtra("state", mode);
context.sendBroadcast(i);
}
記得在AndroidManifest.xml 加上權限
●PowerManagerService
在需要設定切換飛航模式增加程式,增加地方如下:
SCREEN_BRIGHT:
SCREEN_OFF:
reallyTurnScreenOn = true;
我們主要是在android 原始碼的service加上我們的切換程式,這樣在重新build image前,要記得 api也重新再make一次,避免發生android辨示不出我們增加的副程式 (正確應該避免修改android service,要將我們的副程式獨立出來用import方式處理。)
# export TARGET_PRODUCT=xxxxxx ==>xxxxxx為產品代碼
# make update-api
另外該如何去區分何時該自動開啟飛航模式呢?
我採用的方式是利用android frameworks中的providers,來儲存是否為USER自行開啟,這樣在進入休眠時會一並存入記憶體中,並在PowerManagerService 內增加判斷。
路徑如下
frameworks/base/packages/SettingProvider/src/com/android/providers/settings/DatabaseHelper.java
增加provider
loadBooleanSetting(stmt, Settings.System.AIRPLANE_USER_MODE_ON,R.bool.def_airplane_mode_on);
●補充說明,android 是如何呼叫進入suspend流程。
上層 → goToSleep() → goToSleepLocked() →setPowerState() → setScreenStateLocked() → Power.setScreenstate(on) //android_os_power.cpp →Power.c
http://www.thinksrc.com/2010/04/18/suspend-cn.html
http://abgne.tw/android/android-code-snippets/android-control-airplane-mode-enabled.html
2011年11月8日 星期二
如何控制GPS 開關
如何控制GPS
為能節省電力,要在沒網路時將GPS關,查了一下以下面方法可以達到
此方法 API Level 8(即Android 2.2)才開始提供
如有遇到權限問題請試著在AndroidManifest.xml 增加
參考資料:http://www.isomobile.com/read.php?tid-277.html
Android Developers
為能節省電力,要在沒網路時將GPS關,查了一下以下面方法可以達到
setLocationProviderEnabled (ContentResolver cr, String provider, boolean enabled)
此方法 API Level 8(即Android 2.2)才開始提供
如有遇到權限問題請試著在AndroidManifest.xml 增加
參考資料:http://www.isomobile.com/read.php?tid-277.html
Android Developers
2011年10月28日 星期五
Android adb 介紹與使用
全名:Android Debug Bridge
這工具可以在設備開啟「USB偵錯」進行debug
透過adb可以輕鬆的執行Linux Shell命令,進入設備,執行各種Linux的命令
先 cd 至 /SDK/platform-tools 下再執行下列指令進入 (這邊會建議以linux進行,如在window需要安
裝設備driver)
# ./ adb kill-server
# ./adb devices ==> 確認設備是否連線
# ./adb shell ==> 連線進入設備
# ./adb install XXX.apk ==>安裝 apk 進設備中,但 apk 要放在 platform-tools 不然就另外指定路徑
其他更多指令請參考官方網站。
參考資料
2011年10月18日 星期二
Android 3.2 WIFI 與 行動上網 控制
這次要來實作wifi與3g切換時,要自動關閉另一個上網的功能,且不影響網路功能
也就是說
開啟wifi時要自動關閉3g,開啟3g時要自動關閉wifi
所以有要在2個地方增加程式來切換。
(1)修改 \packages\apps\Phone\src\com\android\phone\Settings.java
這隻主要是控制3g按鈕enable動作,找到3g按鍵enable那段程式增加下列程式
(2)修改 \packages\apps\Settings\src\com\android\settings\wifi\WifiEnabler.java
在public boolean onPreferenceChange(Preference preference, Object value) 最後增加
重新build image
參考資料來源:
http://developer.android.com/reference/android/provider/Settings.html
http://developer.android.com/reference/android/net/wifi/WifiManager.html
也就是說
開啟wifi時要自動關閉3g,開啟3g時要自動關閉wifi
所以有要在2個地方增加程式來切換。
(1)修改 \packages\apps\Phone\src\com\android\phone\Settings.java
這隻主要是控制3g按鈕enable動作,找到3g按鍵enable那段程式增加下列程式
WifiManager mWifiManager =
(WifiManager)getBaseContext().getSystemService(Context.WIFI_SERVICE);
mWifiManager.setWifiEnabled(false);
(2)修改 \packages\apps\Settings\src\com\android\settings\wifi\WifiEnabler.java
在public boolean onPreferenceChange(Preference preference, Object value) 最後增加
if (enable == true) {
ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
cm.setMobileDataEnabled(false);
}
重新build image
參考資料來源:
http://developer.android.com/reference/android/provider/Settings.html
http://developer.android.com/reference/android/net/wifi/WifiManager.html
2011年10月7日 星期五
ubuntu apt-get update Failed
當執行apt-get update 失敗時,有可能是mirror網址出了問題,可以依下列方式來修改連結
1.Failed msut modify /etc/apt/source.list
2.edit all website
<例如>
http://tw.archive.ubuntu.com/ubuntu/ lucid universe
to
http://us.archive.ubuntu.com/ubuntu/ lucid universe
3.save file
4.#apt-get update successful
失敗原因如下
1.Failed msut modify /etc/apt/source.list
2.edit all website
<例如>
http://tw.archive.ubuntu.com/ubuntu/ lucid universe
to
http://us.archive.ubuntu.com/ubuntu/ lucid universe
3.save file
4.#apt-get update successful
失敗原因如下
Err http://tw.archive.ubuntu.com lucid/restricted Sources Unable to connect to tw.archive.ubuntu.com:http: Err http://tw.archive.ubuntu.com lucid/universe Packages Unable to connect to tw.archive.ubuntu.com:http: Err http://tw.archive.ubuntu.com lucid/universe Sources Unable to connect to tw.archive.ubuntu.com:http: Err http://tw.archive.ubuntu.com lucid/multiverse Packages Unable to connect to tw.archive.ubuntu.com:http: Err http://tw.archive.ubuntu.com lucid/multiverse Sources Unable to connect to tw.archive.ubuntu.com:http: Err http://tw.archive.ubuntu.com lucid-updates/main Packages Unable to connect to tw.archive.ubuntu.com:http: Err http://tw.archive.ubuntu.com lucid-updates/restricted Packages Unable to connect to tw.archive.ubuntu.com:http: Err http://tw.archive.ubuntu.com lucid-updates/main Sources Unable to connect to tw.archive.ubuntu.com:http: Err http://tw.archive.ubuntu.com lucid-updates/restricted Sources Unable to connect to tw.archive.ubuntu.com:http: Err http://tw.archive.ubuntu.com lucid-updates/universe Packages Unable to connect to tw.archive.ubuntu.com:http: Err http://tw.archive.ubuntu.com lucid-updates/universe Sources Unable to connect to tw.archive.ubuntu.com:http: Err http://tw.archive.ubuntu.com lucid-updates/multiverse Packages Unable to connect to tw.archive.ubuntu.com:http: Err http://tw.archive.ubuntu.com lucid-updates/multiverse Sources Unable to connect to tw.archive.ubuntu.com:http: W: Failed to fetch http://tw.archive.ubuntu.com/ubuntu/dists/lucid/Release.gpg Could not connect to tw.archive.ubuntu.com:80 (140.112.8.139). - connect (110: Connection timed out) W: Failed to fetch http://tw.archive.ubuntu.com/ubuntu/dists/lucid/main/i18n/Translation-en_US.bz2 Unable to connect to tw.archive.ubuntu.com:http: W: Failed to fetch http://tw.archive.ubuntu.com/ubuntu/dists/lucid/restricted/i18n/Translation-en_US.bz2 Unable to connect to tw.archive.ubuntu.com:http: W: Failed to fetch http://tw.archive.ubuntu.com/ubuntu/dists/lucid/universe/i18n/Translation-en_US.bz2 Unable to connect to tw.archive.ubuntu.com:http:
2011年10月6日 星期四
error:unknown filesystem
試著在電腦中裝雙系統,WINDOW、LINUX(以下以ubuntu為例)…
但因為想保留WINDOW再移除LINUX中發生了個問題
正常來說在移除LINUX前要先移除MBR中的GRUB 再進WINDOW格式化ubuntu分割區
但因為不知道情況下,先在WINDOW中移除了ubuntu造成在重開機時發生了
「error : unknow filesystem」情況,
基本上是以光碟開機,然後重寫MBR (1) XPE 20090909 或用(2)spdfdisk
那我是採用USB方式因為,因為當時手上根本沒有光碟或遇到沒有光碟機的機器
下面記錄解決方法:
(1)準備一支USB並將設定能開機、SPFDISK.exe放到USB中
準備方式參考http://blog.xuite.net/choubee/blog/39074139 來製作
(2)先將USB插在電腦上,進BIOS設定USB開機,重啟電腦
(3)找到SPFDISK.EXE然後執行他,接著進磁碟分割工具,按下TAB鍵,選擇「重建MBR」
(4) 重新開機,如果出現英文詢問時,按下YES即可。
(5) 完成
參考資料來源:
http://blog.xuite.net/choubee/blog/39074139
http://www.slime.com.tw/nctu/teach/SPFDISK/SPFDISK/SPFDISK.htm
但因為想保留WINDOW再移除LINUX中發生了個問題
正常來說在移除LINUX前要先移除MBR中的GRUB 再進WINDOW格式化ubuntu分割區
但因為不知道情況下,先在WINDOW中移除了ubuntu造成在重開機時發生了
「error : unknow filesystem」情況,
基本上是以光碟開機,然後重寫MBR (1) XPE 20090909 或用(2)spdfdisk
那我是採用USB方式因為,因為當時手上根本沒有光碟或遇到沒有光碟機的機器
下面記錄解決方法:
(1)準備一支USB並將設定能開機、SPFDISK.exe放到USB中
準備方式參考http://blog.xuite.net/choubee/blog/39074139 來製作
(2)先將USB插在電腦上,進BIOS設定USB開機,重啟電腦
(3)找到SPFDISK.EXE然後執行他,接著進磁碟分割工具,按下TAB鍵,選擇「重建MBR」
(4) 重新開機,如果出現英文詢問時,按下YES即可。
(5) 完成
參考資料來源:
http://blog.xuite.net/choubee/blog/39074139
http://www.slime.com.tw/nctu/teach/SPFDISK/SPFDISK/SPFDISK.htm
2011年9月30日 星期五
Calendar.MONTH 需要加1的原因
Java中對日期的處理需要用到Calendar類,其中有幾個方法在使用時需要新手注意。
在獲取月份時,Calendar.MONTH + 1 的原因
Java中的月份遵循了羅馬曆中的規則:當時一年中的月份數量是不固定的,第一個月是
JANUARY。而Java中Calendar.MONTH返回的數 值其實是當前月距離第一個月有多少個月份的數
值,JANUARY在Java中返回“
資料來源:http://www.nixiaofeng.com/348.html
2011年9月29日 星期四
Import Project Error
在 Import 別人的 Project 時會發生 Import 完成後無法 Run 的情況,且在 Problems 裡會出現
「Android requires compiler compliance level 5.0. Please fix project properties.」
解決方法如下:
■對有問題 project 按「右鍵」 -> android tools -> Fix Project
如果上述方法還是不行試試下面的方法
■檢查 Project -> Properties -> Java Compiler 確認 JDK compliance 被設置為1.6,且enable specific seetings.
參考資料來源:懶人工作室
「Android requires compiler compliance level 5.0. Please fix project properties.」
解決方法如下:
■對有問題 project 按「右鍵」 -> android tools -> Fix Project
如果上述方法還是不行試試下面的方法
■檢查 Project -> Properties -> Java Compiler 確認 JDK compliance 被設置為1.6,且enable specific seetings.
參考資料來源:懶人工作室
2011年9月28日 星期三
blogger 增加程式框架SyntaxHighlighter
先下載 SyntaxHighlighter 檔案,然後找個網路空間上傳
1、先進入後台管理至 設計->修改html
2、找到 </hend> 將下列程式碼貼在</head>前,記得將連結網址變更至你上傳的網頁路徑
3、儲存範本。
使用方法:
C#:class="brush: c-sharp"
C++:class="brush: cpp" 或 class="brush: c"
Diff:class="brush: diff" 或 class="brush: patch"
Java:class="brush: java"
Python:class="brush: python"
XML:class="brush: xml"
1、先進入後台管理至 設計->修改html
2、找到 </hend> 將下列程式碼貼在</head>前,記得將連結網址變更至你上傳的網頁路徑
3、儲存範本。
使用方法:
<pre class="brush: js"> ..貼上code.. </pre>
其他語言更改class的設定即可
Bash / shell:class="brush: bash" 或 class="brush: shell" C#:class="brush: c-sharp"
C++:class="brush: cpp" 或 class="brush: c"
Diff:class="brush: diff" 或 class="brush: patch"
Java:class="brush: java"
Python:class="brush: python"
XML:class="brush: xml"
訂閱:
文章 (Atom)
