來源: ChinaUnix博客 日期: 2008.07.06 21:39
http://blog.chinaunix.net/u2/72995/showart_1074534.html
誰再說Linux易用我要抽他了...
1,開啟手機藍牙
2,找到藍牙MAC和SyncMLClient的Chanel
hcitool scan
找到手機的藍牙位址,然後運行
sdptool browser
在結果中找到SyncMLClient一段:
Service Name: SyncMLClient
Service RecHandle: 0x10023
Service Class ID List:
UUID 128: 00000002-0000-1000-8000-0002ee000002
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 10
"OBEX" (0x0008)
Language Base Attr List:
code_ISO639: 0x454e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"" (0x00000002-0000-1000-8000-0002ee000002)
Version: 0x0100
注意其中的Channel 10
3,測試:
export MAC=藍牙地址
export CHANNEL=10
syncml-obex-client -b $MAC $CHANNEL --slow-sync text/x-vcard Contacts --wbxml --identifier "PC Suite"
syncml-obex-client -b $MAC $CHANNEL --slow-sync text/x-vcalendar Calendar --wbxml --identifier "PC Suite"
4,使用msynctool和evolution
msynctool --addgroup mysync
msynctool --addmember mysync syncml-obex-client
msynctool --addmember mysync evo2-sync
配置syncml-obex-client
msynctool --configure mysync 1
主要是修改:
填寫你的藍牙MAC
填寫10
在檔最後前面填寫這一段:
Contacts
contact
vcard30
Calendar
event
vevent20
evo2-plugin不需要配置,如果需要配置就用msynctool --configure mysync 2
5,發現syncobj,否則會提示錯誤:
msynctool --discover mysync 1
msynctool --discover mysync 2
6,同步
msynctool --sync
2009年2月4日 星期三
BCB中使用Libcurl
很多OpenSource的程式有支援Window系統
也有很多是以VS開發的
當然...大部份的DLL套件也都是為VS而開發
而BCB要使用這些DLL套件必須要有BCB可以看得懂的點LIB
不然就要自已動態載入要用的Funcution這樣十分的費工
這邊用的方法就是直接產生Lib檔方便讀取的方法
首先到官網下載新的libcurl的binary
先把include中的curl放到系統中的BCB中的include資料夾中
然後將bin資料夾中的.dll檔一一做出對應的.lib檔...做法為
implib -a -c -f xxx.lib xxx.dll ::a switch force add _ alias to MS cdecl
接著把這些檔案放到你的程式的目錄中
並將這些.lib檔加入專案之中
就可以開始用libcurl開發程式了
這方法在其他的套件應該也適用
也有很多是以VS開發的
當然...大部份的DLL套件也都是為VS而開發
而BCB要使用這些DLL套件必須要有BCB可以看得懂的點LIB
不然就要自已動態載入要用的Funcution這樣十分的費工
這邊用的方法就是直接產生Lib檔方便讀取的方法
首先到官網下載新的libcurl的binary
先把include中的curl放到系統中的BCB中的include資料夾中
然後將bin資料夾中的.dll檔一一做出對應的.lib檔...做法為
implib -a -c -f xxx.lib xxx.dll ::a switch force add _ alias to MS cdecl
接著把這些檔案放到你的程式的目錄中
並將這些.lib檔加入專案之中
就可以開始用libcurl開發程式了
這方法在其他的套件應該也適用
2008年9月6日 星期六
[Python]透過DBUS調整螢幕亮度
今天研究了一下Screenlets的BrightnessScreenlet.py這支程式
發現到他調整螢幕亮度的方式是由DBus來控制的
在這邊把主要重點的部份寫出來
發現到他調整螢幕亮度的方式是由DBus來控制的
在這邊把主要重點的部份寫出來
#載入DBUS
import dbus
#設定Bus
bus = dbus.Bus(dbus.Bus.TYPE_SESSION)
hal_object = bus.get_object('org.freedesktop.PowerManagement','/org/freedesktop/PowerManagement/Backlight')
#設置interface
hal_interface = dbus.Interface(hal_object,'org.freedesktop.PowerManagement.Backlight')
#由這dbus的interface去設定亮度(0~100)
hal_interface.SetBrightness(brightness)
[C/C++]滑鼠手勢...
今天一進公司就看到Steven和Jacky在討論東西...
在我才剛按下開機鍵準備坐上我的座位時
就聽見Steven說...”這就交給kie做吧! 反正他這麼閒“ .....(= =ll)雖然真的很閒也不用這麼大聲的講出來吧!
好啦...切入重點...他們在討論的就是一個簡單的滑鼠手勢的程式的演算法
其實真的是非常的簡單...Coding的部份也不過幾行而已...
重點是他們都把演算法都討論的差不多了...於是希望我實做出來..
好吧...於是就有了這一篇文章啦.....
這個程式呢...基本上應該算是一個Funtion
所以呢...我就不把全部的程式貼出來了
做法是
先按下左鍵取得起點...接著比對每一點座標
當位移量超過誤差的範圍就記錄為一個動作
並記下完成的點的位置
當比對和上次的動作相同時就不記錄
當放開左鍵時動作結束
以下為重點的Source Code
首先我在主程式加入了4個全域變數
Direction ..存上一次得到的方向
X.........記錄起始點的X座標
Y.........記錄起始點的Y座標
Range.....容許手殘畫歪的範圍
接著就是在程式中加入了3個事件
MouseDown...當然就是滑鼠按下的事件...這是為了取得開始的位置...你總要知道什麼時候開始畫手勢嘛
MouseMotion..滑鼠移動的事件.......都說是滑鼠手勢了...當然就是滑鼠動的時候要有記錄丫
MouseLeft.....滑鼠放開的事件......有始有終囉
然後...有coding的部份當然除了給初始值外就是這3個事件囉
以下為三個事件的Souse Code ... 有興趣就看看吧..
在我才剛按下開機鍵準備坐上我的座位時
就聽見Steven說...”這就交給kie做吧! 反正他這麼閒“ .....(= =ll)雖然真的很閒也不用這麼大聲的講出來吧!
好啦...切入重點...他們在討論的就是一個簡單的滑鼠手勢的程式的演算法
其實真的是非常的簡單...Coding的部份也不過幾行而已...
重點是他們都把演算法都討論的差不多了...於是希望我實做出來..
好吧...於是就有了這一篇文章啦.....
這個程式呢...基本上應該算是一個Funtion
所以呢...我就不把全部的程式貼出來了
做法是
先按下左鍵取得起點...接著比對每一點座標
當位移量超過誤差的範圍就記錄為一個動作
並記下完成的點的位置
當比對和上次的動作相同時就不記錄
當放開左鍵時動作結束
以下為重點的Source Code
首先我在主程式加入了4個全域變數
Direction ..存上一次得到的方向
X.........記錄起始點的X座標
Y.........記錄起始點的Y座標
Range.....容許手殘畫歪的範圍
接著就是在程式中加入了3個事件
MouseDown...當然就是滑鼠按下的事件...這是為了取得開始的位置...你總要知道什麼時候開始畫手勢嘛
MouseMotion..滑鼠移動的事件.......都說是滑鼠手勢了...當然就是滑鼠動的時候要有記錄丫
MouseLeft.....滑鼠放開的事件......有始有終囉
然後...有coding的部份當然除了給初始值外就是這3個事件囉
以下為三個事件的Souse Code ... 有興趣就看看吧..
/*!
* wxEVT_LEFT_DOWN event handler for ID_HELLOMOUSE
*/
void HelloMouse::OnMouseLeftDown( wxMouseEvent& event )
{
X = event.m_x;
Y = event.m_y;
printf("oh...%d,%d\n",X,Y);
}
/*!
* wxEVT_MOTION event handler for ID_HELLOMOUSE
*/
void HelloMouse::OnMouseMotion( wxMouseEvent& event )
{
if(event.m_leftDown)
{
if(abs(X-event.m_x)>Range)
{
if((X>event.m_x)&&(Direction != 'L'))
{
Direction = 'L';
printf("L");
}
if((X {
Direction = 'R';
printf("R");
}
X = event.m_x;
Y = event.m_y;
}
if(abs(Y-event.m_y)>Range)
{
if((Y>event.m_y)&&(Direction != 'U'))
{
Direction = 'U';
printf("U");
}
if((Y {
Direction = 'D';
printf("D");
}
X = event.m_x;
Y = event.m_y;
}
}
}
/*!
* wxEVT_LEFT_UP event handler for ID_HELLOMOUSE
*/
void HelloMouse::OnMouseLeftUp( wxMouseEvent& event )
{
X = 0;
Y = 0;
Direction = NULL;
printf("\n");
}
2008年8月28日 星期四
電腦猜數字....
最近無聊上班太無聊
所以開始研究些有的沒的東西
於是想說研究看看電腦猜數字的程式的演算法是怎麼做到的
昨天大概想了一下還是不知道該如何下手
於是上Google找了一下...結果還真的是很多丫....
而且還人家還附上原始碼呢!!
參考網址:http://www.javaworld.com.tw/jute/post/view?bid=35&id=35423&sty=1&tpg=1&age=0
其實這方法的邏輯非常的簡單...
只分幾個步驟如下
Step1:
產生一個陣列存放所有可能的答案
如:{0123,0124,0125,.......,9875,9876}
Step2:
從所有可能中找出一個數來猜
如:第一個0123
Step3:
由玩家所填入的?A?B去判斷所有答案中符合這條件的所有的數
因為....由正解和你猜的數分析會是?A?B那也表示反推也是一樣的答案
然後將不符合條件的數設為-1
如:假設答案是5432
則0123得到0A2B
如果把0123當解答的話 你猜5432得到的也是0A2B
所以說你現在是反推的方式去想...只有和0123比較會得到0A2B的數才有可能是解答
也就是說其他不可能的數就可以刪除掉了
Step4:
重覆Step2~Step3就可以很快的得到答案了
所以一切就是這麼的簡單....
所以開始研究些有的沒的東西
於是想說研究看看電腦猜數字的程式的演算法是怎麼做到的
昨天大概想了一下還是不知道該如何下手
於是上Google找了一下...結果還真的是很多丫....
而且還人家還附上原始碼呢!!
參考網址:http://www.javaworld.com.tw/jute/post/view?bid=35&id=35423&sty=1&tpg=1&age=0
其實這方法的邏輯非常的簡單...
只分幾個步驟如下
Step1:
產生一個陣列存放所有可能的答案
如:{0123,0124,0125,.......,9875,9876}
Step2:
從所有可能中找出一個數來猜
如:第一個0123
Step3:
由玩家所填入的?A?B去判斷所有答案中符合這條件的所有的數
因為....由正解和你猜的數分析會是?A?B那也表示反推也是一樣的答案
然後將不符合條件的數設為-1
如:假設答案是5432
則0123得到0A2B
如果把0123當解答的話 你猜5432得到的也是0A2B
所以說你現在是反推的方式去想...只有和0123比較會得到0A2B的數才有可能是解答
也就是說其他不可能的數就可以刪除掉了
Step4:
重覆Step2~Step3就可以很快的得到答案了
所以一切就是這麼的簡單....
2008年8月22日 星期五
[Python]用DBus和Pidgin通訊
要用Python呼叫正在執行中的Pidgin其實非常的簡單
只要你的Pidgin的DBus的Function正常執行
可以用這行程式檢查
這是監聽DBus上由"im.pidgin.purple.PurpleInterface"所發出的訊號
看得到回應就是有,看不見就是沒有
如果你的DBus Function正常執行的話
你只要在Python 的前面import 進dbus
再加點設定就OK了
就像這樣
接著就能在程式中呼叫pidgin中的Dbus函式了
如以下是一個登入的function
其他的參考資訊可在Pidgin官網查到
http://developer.pidgin.im/wiki/DbusHowto
只要你的Pidgin的DBus的Function正常執行
可以用這行程式檢查
$dbus-monitor type=signal interface="im.pidgin.purple.PurpleInterface"這是監聽DBus上由"im.pidgin.purple.PurpleInterface"所發出的訊號
看得到回應就是有,看不見就是沒有
如果你的DBus Function正常執行的話
你只要在Python 的前面import 進dbus
再加點設定就OK了
就像這樣
import dbus bus = dbus.SessionBus()
obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
接著就能在程式中呼叫pidgin中的Dbus函式了
如以下是一個登入的function
def login(account_protocol, account_name, account_pass):
account = purple.PurpleAccountNew(account_name, account_protocol)
purple.PurpleAccountSetPassword(account, account_pass)
purple.PurpleAccountsAdd(account) purple.PurpleAccountSetEnabled(account,"gtk-gaim",1)
purple.PurpleBlistSetVisible(1)
其他的參考資訊可在Pidgin官網查到
http://developer.pidgin.im/wiki/DbusHowto
2008年6月21日 星期六
[Python]Glade加Python的GUI設計入門
已經有一段時間沒有用Glade和Python寫程式了
為了怕自己忘記...所以還是記錄下來好了
首先在開始之前....要先安裝以下套件
Python....這是一定要的...不然程式不可能會Run
Glade3.... 這在開發階段是必須的...方便視窗的制作...當然還有別的方法可以做...那之後再討論
PyGtk.... 這也是必要的圖形介面的API
然後就是一步一步的開始程式設計
首先開啟Glade3

產生一個Frame

接著產生一個box(hbox或vbox都可以差別在直的排列或橫向排列)
設定切成幾份...這是切三份
然後放入元件...這邊放了一個Label和一個Text加一個hbox
在hbox中再放入兩個button...如此一來畫面就差不多完成了

接下來設定事件
這是完成的畫面...
為了怕自己忘記...所以還是記錄下來好了
首先在開始之前....要先安裝以下套件
Python....這是一定要的...不然程式不可能會Run
Glade3.... 這在開發階段是必須的...方便視窗的制作...當然還有別的方法可以做...那之後再討論
PyGtk.... 這也是必要的圖形介面的API
然後就是一步一步的開始程式設計
首先開啟Glade3

產生一個Frame

接著產生一個box(hbox或vbox都可以差別在直的排列或橫向排列)
設定切成幾份...這是切三份然後放入元件...這邊放了一個Label和一個Text加一個hbox

在hbox中再放入兩個button...如此一來畫面就差不多完成了

接下來設定事件

最後就可以開始程式設計了...
程式碼如下:
#!/bin/python
import gtk.glade
import gtk
import pygtk
class View:
def __init__(self):
#載入glade檔
self.UI = gtk.glade.XML("View.glade")
#載入視窗
self.window = self.UI.get_widget("window1")
#戴入元件
self.btn1 = self.UI.get_widget("eventbox1")
self.btn2 = self.UI.get_widget("eventbox2")
#顯示視窗畫面
self.window.show_all()
#設定事件
dic = {"on_window1_destroy": gtk.main_quit,
"on_btn1_button_press_event":self.on_btn1_button_press_event,
"on_btn2_button_press_event":self.on_btn2_button_press_event
}
#連接事件
self.UI.signal_autoconnect(dic)
#事件的Function
def on_btn1_button_press_event(self,widget,event):
print "hello"
def on_btn2_button_press_event(self,widget,event):
print "world"
#以下為程式進入點
def main():
gtk.main()
if __name__ == "__main__":
tvexample = View()
main()
這是完成的畫面...
訂閱:
文章 (Atom)