2020年7月5日 星期日

從svn搬家到git上

前陣子有段時間跟另一個團隊合作開發一個專案
因為對方團隊的leader不願轉換到git
所以在交接程式給對方的過度期就需要不斷的把對方開發的程式先併入git再將程式提交給對方(其實併版完是可以直接merge回去的,但因為對方意見很多所以後來就直接匯出差異檔了)
不過上面都是題外話

重點是最近又有另一個專案要從svn搬過來
但偏偏幾個簡單的指令就是會忘記
所以這次就在這邊記錄一下

第一步-把svn的程式check out下來
git svn clone https://svn-server/MyProject
第二步-進入專案目錄
cd MyProject
第三步-加入git 位置,並提交
git remote add origin https://git-server/MyProject.git
git push origin master

這樣就成功把專案搬到git上了

2011年10月4日 星期二

Android修改system唯讀權限:remount

完整文章來源http://blog.csdn.net/lixinso/article/details/5835598

lixinso@lixinso-desktop:~$ adb shell
# mount
# mount -o remount /dev/block/mtdblock0 /system
# mount

mount完就可以任意修改删除拉~~~~


另一個更簡單的方法是直接
:~$adb remount

即可

2011年10月1日 星期六

將Google Appengine 的資料轉成 JSON格式輸出

將以下程式加入程式中
 
from google.appengine.ext import db
from google.appengine.ext.db import BadValueError
import datetime, time
from google.appengine.api import users

SIMPLE_TYPES = (int, long, float, bool, dict, basestring, list)

def to_dict(model):
    output = {}
    if isinstance(model, db.Query):
        output = []
        for v in model:
            output.append(to_dict(v))
        return output
    elif isinstance(model, list):
        output = []
        for v in model:
            output.append(to_dict(v))
        return output
 
    for key, prop in model.properties().iteritems():
        value = getattr(model, key)

        if value is None or isinstance(value, SIMPLE_TYPES):
            output[key] = value
        elif isinstance(value, datetime.date):
            output[key] = value.strftime("%Y/%m/%d %H:%M")
        elif isinstance(value, db.GeoPt):
            output[key] = {'lat': value.lat, 'lon': value.lon}
        elif isinstance(value, db.Model):
            output[key] = to_dict(value)
        elif isinstance(value, users.User):
            output = {}
            methods = ['nickname', 'email', 'auth_domain']
            for method in methods:
                output[method] = getattr(value, method)()
            return output  

        else:
            raise ValueError('cannot encode ' + repr(prop))
    return output

使用範例

import model


rooms= model.Room.all()
self.response.out.write(model.to_dict(rooms))

參考資料

GAE返回JSON数据
How to serialize db.Model objects to json
JSON serialization of Google App Engine models

2011年9月28日 星期三

[教學]用Facebook帳號登入你的網站

在開始之前...你必須先向facebook註冊你的網站

https://developers.facebook.com/



完成後即可得到你的

應用程式ID/API鑰匙=> 即後面會用到的client_id

網站URL=> 這應該是你自己設定的後面也會用到redirect_uri

應用程式密鑰=> 後面會用到的client_secret



完成註冊後就可以開始以下步驟了



Step1: 做登入的按鍵

這按鍵的只要加上這個超連結就行了

https://www.facebook.com/dialog/oauth?client_id=你的client_id&redirect_uri=http://www.7998.com.tw/



Step2: 在你的登入頁面需要加入一個code的參數 以便facebook將資料帶進來

在使用者按下登入的按鍵後facebook會讓使用者登入後再導回到你的網站並附帶一個code的參數


http://www.7998.com.tw/?code=2345eashdfhasdfjasdkfjasdlfjlasdj......這code是我亂打的 = ="



Step3: 利用facebook 傳來的code參數向facebook取得access_token

https://graph.facebook.com/oauth/access_token?client_id=應用程式ID/API鑰匙&redirect_uri=你的網址&client_secret=應用程式密鑰&code=2345eashdfhasdfjasdkfjasdlfjlasdj



會得到facebook 回傳的資料

access_token=asdfasdbja;ljserowjelrjlwjksejlfjsl....這當然也是我亂打的= ="



Step4: 利用access_token就可以取的使用者的資料了

https://graph.facebook.com/me?access_token=asdfasdbja;ljserowjelrjlwjksejlfjsl


詳細流程可以看facebook的官方說明
https://developers.facebook.com/docs/authentication/

2011年9月27日 星期二

[BCB] 視窗間傳遞物件訊息 SendMessage

在寫程式的時候有時候會需要和其他程式做溝通
這程式很有可能就在本機的電腦上的另一支程式
這時候就可以利用SendMessage這API來達成


首先先宣告結構
typedef struce _MYSTRUCT
{
char szChar[255];
int iInt;
}MyStruct;
在傳送端的部份

在.cpp中加入Send的function 當然最好在.h中先宣告
void Send()
{
AnsiString app_name = "要收到訊息的視窗";
AnsiString msg = "要傳送的訊息";
int type = 1; //要傳送的數字

HWND hWnd = FindWindow(NULL, app_name.c_str()); //找到視窗

if(hWnd)
{
MyStruct ms;
istrcpy(ms.szChar, msg.c_str());
ms.iInt=type;
COPYDATASTRUCT CopyData;
CopyData.dwData=0;
CopyData.cbData=sizeof(MyStruct);
CopyData.lpData=&ms;

SendMessage( hWnd, WM_COPYDATA, NULL, (LPARM)&CopyData);

}
}


在接受端的部份
在from.h的private:後面加入宣告

void __fastcall WMCopyData( TMessage &Message );

BEGIN_MESSGE_MAP
MESSAGE_HANDLER(WM_COPYDATA, TMessage, WMCopyData)
END_MESSAGE_MAP(TForm)

在.cpp中加入
void __fastcall TMainForm::WMCopyData(TMessage &Message)
{
COPYDATASTRUCT *CopyData = (COPYDATASTRUCT*) (Message.LParam);
if(CopyData->cbData == sizeof(MyStruct) )
{
MyStruct ms;
CopyMemory(&ms, CopyData->lpData, CopyData->cbData);
//ms.Int 即是接收到的數字
//ms.szChar即是要接收到的訊息
}
}

以上資料是從Delphi.Ktop找到的

2011年7月22日 星期五

7998住宿網

最近完成了一個網站架在Google的服務上, 提供日租訂房的服務,可提供日租套房,民宿等訂房服務。如果有房東看到這篇可以來試試看這個系統





網址:http://www.7998.com.tw/

2011年2月23日 星期三

Qt 動態載入 DLL

在Qt中要動態載入DLL檔可以用QLibrary來載入
首先

#include < QLibrary >
定義Function
typedef void (*Function_Name)(int 參數1,int 參數2 , ...);

然後在程式中載入的方法是

QLibrary testlib("DLL_Name"); //此處DLL_Name不用加.dll

if(test_lib.load())//載入dll並判斷是否成功
{
qDebug()<<"load dll ok.";
//宣告Function(DLL_Function_Name為DLL檔裡定義的Function名稱)
Function_Name test_function = (Function_Name)test_lib.resolve("DLL_Function_Name");
//現在可以使用Function了
if(test_function)
{
int a = 0;
int b = 0;

test_function( a, b );
}
}else{
qDebug()<<"load dll fail.";
}