2014年12月7日 星期日

ubuntu 新增應用程式桌面捷徑

sudo apt-get install gnome-panel
gnome-desktop-item-edit ~/Desktop/ --create-new

選擇應用程式、輸入捷徑名稱、選擇 icon

2014年9月9日 星期二

ubuntu 滑鼠靈敏度設定

打開終端機輸入

xinput --list

顯示結果如下,可以看到目前所有的輸入裝置

⎡ Virtual core pointer                     id=2 [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer               id=4 [slave  pointer  (2)]
⎜   ↳ Logitech USB Receiver                    id=12 [slave  pointer  (2)]
⎣ Virtual core keyboard                    id=3 [master keyboard (2)]
    ↳ Virtual core XTEST keyboard              id=5 [slave  keyboard (3)]
    ↳ Power Button                             id=6 [slave  keyboard (3)]
    ↳ Power Button                             id=7 [slave  keyboard (3)]
    ↳ Heng Yu Technology K108D                 id=8 [slave  keyboard (3)]
    ↳ Heng Yu Technology K108D                 id=9 [slave  keyboard (3)]
    ↳ USB2.0 Camera                            id=10 [slave  keyboard (3)]
    ↳ Logitech USB Receiver                    id=11 [slave  keyboard (3)]

要修改的是滑鼠的屬性,所以找尋 Virtual core pointer 下的滑鼠裝置,以我這邊的範例呢是 Ligitech USB Receiver。接著輸入以下指定來看看滑鼠裝置的屬性

xinput --list-props "Logitech USB Receiver"

我這邊因為是使用無線鍵鼠組,一個無線接收器可以收滑鼠跟鍵盤的訊號所以鍵盤、滑鼠都名稱相同,會使程式無法辨認,可改用 id 設定,我的滑鼠 id 為 12,指令如下

xinput --list-props 12

這時候會看到一大串滑鼠的屬性

Device 'Logitech USB Receiver':
 Device Enabled (145): 1
 Coordinate Transformation Matrix (147): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
 Device Accel Profile (275): 0
 Device Accel Constant Deceleration (276): 0.550000
 Device Accel Adaptive Deceleration (277): 1.000000
 Device Accel Velocity Scaling (278): 10.000000
 Device Product ID (262): 1133, 50478
 Device Node (263): "/dev/input/event6"
 Evdev Axis Inversion (279): 0, 0
 Evdev Axes Swap (281): 0
 Axis Labels (282): "Rel X" (155), "Rel Y" (156), "Rel Horiz Wheel" (272), "Rel Dial" (273), "Rel Vert Wheel" (274)
 Button Labels (283): "Button Left" (148), "Button Middle" (149), "Button Right" (150), "Button Wheel Up" (151), "Button Wheel Down" (152), "Button Horiz Wheel Left" (153), "Button Horiz Wheel Right" (154), "Button Side" (267), "Button Extra" (268), "Button Forward" (269), "Button Back" (270), "Button Task" (271), "Button Unknown" (265), "Button Unknown" (265), "Button Unknown" (265), "Button Unknown" (265), "Button Unknown" (265), "Button Unknown" (265), "Button Unknown" (265), "Button Unknown" (265), "Button Unknown" (265), "Button Unknown" (265), "Button Unknown" (265), "Button Unknown" (265)
 Evdev Middle Button Emulation (284): 0
 Evdev Middle Button Timeout (285): 50
 Evdev Third Button Emulation (286): 0
 Evdev Third Button Emulation Timeout (287): 1000
 Evdev Third Button Emulation Button (288): 3
 Evdev Third Button Emulation Threshold (289): 20
 Evdev Wheel Emulation (290): 0
 Evdev Wheel Emulation Axes (291): 0, 0, 4, 5
 Evdev Wheel Emulation Inertia (292): 10
 Evdev Wheel Emulation Timeout (293): 200
 Evdev Wheel Emulation Button (294): 4
 Evdev Drag Lock Buttons (295): 0

影響滑鼠靈敏度的屬性是 Device Accel Constant Deceleration,有點算是移動阻力的意思,數值愈大移動愈慢反之移動愈快。而設定屬性的方法如下,這裡我把它設定為 0.55

xinput --set-prop 12 "Device Accel Constant Deceleration" 0.55

或者也可以用屬性的編號

xinput --set-prop 12 276 0.55

修改完後再次輸入查看滑鼠屬性的指令就會發現 Device Accel Constant Deceleration 變成 0.55 了。

Reference


How can I set mouse sensitivity, not just mouse acceleration?
How to change mouse speed/sensitivity?

2014年8月1日 星期五

php 使用 header 下載檔案開頭多一個空白

我是個 php 菜鳥,最近常有朋友跟我抱怨,用 php 寫檔案下載的時候,下載回來的檔案都會損毀,如果是文字檔的話開頭會多個空白,我感到非常困惑。他們有一個共通點,用的方法都是透過 header 進行檔案下載。

然後我就股溝到了 stackoverflow 的這篇「using the browser prompt to download a file」,Anne 在回答中詳細了說明每個 header 參數的作用,完整 code 如下:

<?php
$file = 'monkey.gif';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>

我發現朋友們與 Anne 的 code 不同的地方主要就是 ob_clean() 和 flush(),叫他們加了這兩行後就好惹,Anne 針對這兩行的說明是“Make sure the headers are send to the browser before the download starts”,我實在看得不是很懂。經朋友測試表示,只要 ob_clean() 就可以解決問題了,想深入研究的話可以參考 「why ob_clean and flush ?」。

2014年7月31日 星期四

Ubuntu 語言支援消失了

問題


剛剛在 Ubuntu 安裝了 im-switch 之後發現系統設定值裡的語言支援不見了,雖然說輸入法可以透過 im-switch 進行改變,但系統的語言設定就不知道該怎麼辦了。

消失前

消失後

方法


股溝了一下,問題好像蠻簡單的,在 askubuntu 中也有人有相同的問題,原因就是 language-selector-gnome 被移除惹(安裝 im-switch 的時候被移除了),把她安裝回去就好了,指令如下。

sudo apt-get install language-selector-gnome


安裝回來後

參考資料




2014年5月31日 星期六

Ducky DK2108 拆解

還在保固範圍內的,有問題還是直接送原廠比較好,有顆螺絲上面有張貼紙,應該是判斷有沒有拆過用的吧




前言

昨晚不小心把威士忌打翻滲進 DK2018,當下想說酒精成分這麼高,理當揮發很快應該還好,就拿布擦一擦繼續用,沒管太多。睡夢中一直聽到電腦有怪聲,是那種按了無效鍵 windows 發出來的聲音,醒來後發現電腦莫名其妙開了一堆資料夾、程式,這時候才發現鍵盤快要爆炸惹……




目的

把鍵盤清一清、吹乾,看會不會恢復正常,順便洗洗鍵帽




拆解

要準備的工具如下:
  • 小十字螺絲起子
  • 小一字螺絲起子或可以拿來ㄍㄧㄠˇ的東西
  • 拔鍵器
因為打算把鍵帽洗一洗,所以首先把鍵帽全部拔起來,不拔鍵帽也是可以繼續拆的。拔ENTER鍵的時候要特別注意,他長得跟其他兄弟姊妹不太一樣。

接著翻過來背面,鍵盤殼沒有螺絲,僅靠周圍上下各四個卡榫密合,卡榫的位置在四個角落和稍微靠中間的地方,如下圖。



用一字螺絲起子往縫縫插一下卡榫就開了,解完八個卡榫後就可以輕鬆的拿起上蓋部分。



再翻回正面,拿出十字螺絲起子,如下圖所示,鬆掉位於 F5 和 F8 下方的兩顆螺絲,就可以把鍵盤本體跟殼完全分開。(不是鬆有線的那根螺絲,我也不知道那是啥)



接下來就可以開始清理鍵盤惹!這 PCB 板長的還蠻帥的,上面還印有鴨子的圖案






清洗鍵帽

我就直接把鍵帽丟進盒子裡 ,沖沖水搓一下,然後丟到我的洗衣籃……最後再用吹風機吹一下裝回去。






結果

全部弄好後接回電腦,檢查按鍵都可以按,唯獨空白鍵……他掛了。打電話去 Ducky 詢問,電話那端非常客氣的詢問我狀況,並跟我說如果只是一顆按鍵壞了,能夠免費換個軸試試看,但今天休假。

於是乎上網找了 SharpKeys 這軟體,把一顆 alt 鍵換成空白鍵先頂著用。





其他

這軸看上去還蠻像墳墓的



2014年4月9日 星期三

2014年3月17日 星期一

ASP.NET 使用 SqlCeConnection 例外 NotSupportedException : SQL Server Compact 並非設計供ASP.NET 開發使用。

在 ASP.NET 中使用 SqlCeConnection (3.5) 出現如下圖例外
















◎方法一
只要在使用 SqlCeConnection 前加上下面這行即可

AppDomain.CurrentDomain.SetData("SQLServerCompactEditionUnderWebHosting", true);

建議可加在 Global.asax 的 Application_Start 中,讓這行執行一次就可以了

◎方法二
使用 SqlCeConnection 4 或更高版本可避免此問題
但如果 sdf 是由舊版的 SQLCE 產生就只能繼續用 SqlCeConnection 3.5 了

參考 Exception when trying to connect to .sdf database

2014年3月13日 星期四

Android 移除標題、狀態列

移除標題 (寫在 Activity.onCreate() 內,setContentView() 之前)

移除狀態列 (寫在 Activity.onCreate() 內,setContentView() 之前)

HttpClient (Apache) - 在 Java 中模擬瀏覽器行為

HttpClient 官方:http://hc.apache.org/httpclient-3.x/

HttpClient 是由 Apache 開發的 lib,可以模擬真實的瀏覽器,取得回應資訊等。在 Android SDK 中目前有內建。

有時候對網頁進行登入或查詢動作時,對方伺服器會檢查 cookie 或其他有的沒的,這時候 HttpClient 就可以幫助模擬真實的瀏覽狀況,建立該有的資訊以通過伺服器的檢查。

2014年2月28日 星期五

Android java.lang.RuntimeException: Unable to instantiate activity ComponentInfo 解決方法

今天寫 Android 的時候,改了一下 package name,移動了一些 class 到新的 package
可想而知的,程式就 run 不起來了
compile 可以過,但出現 runtime 例外

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo

原因是更改了 activity 所在的 package 名稱
但 AndroidManifest.xml 內沒同步修改到

將標籤 manifest 的 package 屬性設定為 activity 所在的 package 即可

Java 取得正在執行的 function(method) 名稱

如提。一行以蔽之。

Thread.currentThread().getStackTrace()[2].toString()

參考 Getting the name of the current executing method

2014年2月14日 星期五

AndEngine Scene.detachChild(IEntity) exception : java.lang.IndexOutOfBoundsException 解決方法

事情是這樣的,用 AndEngine 開發遊戲的時候
想要移動一個 A 物件至 camera 外,並在移出後從 scene 刪掉

於是乎用了一個 MoveModifier 移動 A 物件的位置
並給了 Modifier 一個 IEntityModifierListener 並 override 了 onModifierFinished 這個方法
在這個方法中呼叫 Scene 的 detachChild() 來移除 A 物件

結果就出現例外了
FATAL EXCEPTION: UpdateThread
java.lang.IndexOutOfBoundsException: Invalid index 142, size is 142

google 了一下發現這是 thread 的 concurrency 問題
似乎是 Modifier 為另外的 thread 所操控
執行 detachChild() 時,須在 OnUpdate 的 thread 下執行

◎解決辦法
將 detachChild() 丟到以下位置即可

engine.runOnUpdateThread(new Runnable() {
@Override
public void run() {
scene.detachChild(entity);
}
});

Reference :
Exception while removing sprite from scene ( detachChild )

2014年2月12日 星期三

Eclipse Unhandled event loop exception No more handles 解決方法

『如果你有裝 Teamview 的話請直接拉到最下面看方法四』


小明有一天用 eclipse 寫 android 突然出現這樣的錯誤視窗
是一個例外,這個例外的詳細資訊長這樣

把這錯誤示窗關掉繼續 coding,沒幾下又彈出一樣的東西
幾次後發現好像點到 code 編輯器的地方就會出現
於是乎 google 了一下,找了一些解決方法

◎方法一
從中文的開始嘗試了這篇的方法
說是要刪掉 AppData\Local\Eclipse 目錄
不過我是用 Android ADT bundle 好像找不到這個目錄,不過還是列出來供大家參考

◎方法二
一樣是中文的
照著做發現我的 eclipse.ini 裡面已經有 -XX:MaxPermSize 了
另外加上 -XX:PermSize 也沒有用,一樣有例外跑出來

◎方法三
只好開始看英文的解決辦法了,找到了 stackoverflow 的這篇
按照一樓的說法是 Eclipse 預設的 Java 編輯器有 bug
改用 WindowBuilder 可以解決

於是乎從 Eclipse -> Help -> Install New Software 裡安裝 WindowBuilder
在 Work with 那欄填上 WindowBuilder 的網址即可下載安裝
Eclipse 4.2 的網址 http://download.eclipse.org/windowbuilder/WB/release/R201309271200/4.2/
Eclipse 4.3 的網址 http://download.eclipse.org/windowbuilder/WB/release/R201309271200/4.3/
安裝完之後到 Eclupse -> Window -> Preferences 內修改 Java Editor
選擇 *.java 然後在下方加入 WindowBuilder 並設為 Default 讓 WindowBuilder 爬到第一名

結果……問題依然存在

◎方法四
在 stackoverflow 中一個連結一個連結找,找到了 eclipse 的 bug 討論區
裡面什麼樣的可能解決辦法都有
有人說是雙顯示器的關係,有人說是ATI顯卡的關係……@#%^@#$
照著做把螢幕先切回只有一個,無效
更新顯卡驅動,無效

看到有人說把 Teamviewer 關掉,我就關掉,然後就好了  。:.゚ヽ(*´∀`)ノ゚.: 。:.゚ヽ(*´∀`)ノ゚.:。

本著實驗以及信任 Teamviewer 的精神,還是要來測試一下到底是哪裡出問題
直覺上第一個想到的就是會出現在視窗右上角的 "快速連線按鈕"
果然沒錯,把這個功能關掉就完全 OK 了
關掉的方法如下圖