[Django][Python]寫出一個存放資料庫並且輸出qrcode的Django App

image

前言: 想要試著做做看一個簡單的相機資料管理系統,並且可以顯示QRCode到該相機資料庫並且顯示JSON資料. 主要也是趁個機會把Django再拿出來複習一下.雖然也是有打算用Golang來寫,但是Golang沒有找到比較方便的QRcode 模組就先緩些時間.

步驟:

  • 把相關的模組與設定加到原來的Django網站. 這部分可以參考Django toturial 恢復記憶
    source venv/bin/activate
    //Install related component
    pip install django-qrcode
    //Write back to requirement.ext
    pip freeze > requirements.txt
    //Crete new app for this website
    python manage.py startapp cam_qrcode
  • 接下來要設定資料庫,這裡資料庫相當簡單,相機就只有名稱而已.並且有一個XMPP 賬戶做IOT(Internet Of Thing)使用.
class Camera(models.Model):
    camera_id = models.IntegerField()
    camera_name = models.CharField(max_length=200)
    camera_xmpp_account = models.CharField(max_length=200)
    camera_xmpp_password = models.CharField(max_length=200)
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
    def __unicode__(self):
        return self.camera_name
  • 關於QRCode產生的部分,我使用的是 Django-qrcode.使用上相當簡單,而且很方便.
  • 可以顯示之後就是要準備產生Json,這裡我是用Simplejson 來使用
    cam = get_object_or_404(Camera, pk=cam_id)
    response_data = {}
    response_data['cam_id'] =  cam.camera_id
    response_data['camera_name'] = cam.camera_name
    response_data['camera_xmpp_account'] = cam.camera_xmpp_account
    response_data['camera_xmpp_password'] = cam.camera_xmpp_password
    out_obj = json2.dumps(response_data)

這樣就完成了,作品在Heroku上面.大概花費四五個小時…

image

遇到問題:

列出來所遇到的一些問題:

  • Django 升級後反而不能跑
    • 已試過把Django從1.6.2 升級到 1.7,就發現無法正常執行伺服器. 這部分先採取downgrade處理,之後有空再看.
     pip install django 1.6.2
  • ‘function’ object has no attribute ‘dumps’
    • 這個主要是json似乎跟某個版本搞混,所以無法獲得正常的json.
    • 我解決方法是使用simplejson 並且更改名稱到json2
    
import simplejson as json2

參考資料:

[C++][MySQL]修改對應程式碼來避免SQL Injection

image

最近在做伺服器檢查的時候,發現公司內所寫的幾個背景程式經常莫名其妙出問題.於是開始下來檢查一下,就像前幾篇提到的一樣,我有加上HipChat當做是看門狗的程式來監視並且確實的回報資訊給我.

但是,就算有收到回報訊息.找出容易發生問題的地方才是重點.後來有查到當使用者自己從手機上輸入資料傳到伺服器的時候.就會發生MySQL Query Error ,以下面的範例:

 "SELECT * FROM `test_sql` WHERE `account` LIKE '".$account."' AND `password` LIKE '".$password."'"

如果這時候,使用這輸入加上有 “ ‘ “的字元,就會產生MySQL Query Error.甚至於會SQL Injeect就是輸入以下的內容:

   "' OR ''=''#"  

這時候唯一的方式就是講 “’“ 轉換成 “'”才不會讓SQL Qeury發生錯誤或是不可預期的狀態.

其實這相關的方式,在PHP裡面相當的簡單就是加上addslashes函式.但是在用C++直接存取MySQL的時候,可就沒那麼方便.

找了一下相關的文章,後來在MySQL API Document 裡面有找到mysql_escape_string,順便也找到有人寫的範例程式可以使用. 引用自這裡http://www.3dbuzz.com/forum/threads/146155-C-version-of-addslashes

/** 
* escapes the mysql string 
* note running on the entire SQL screws it so just run it on elements to be inserted 
* @param string sql 
* @author D.Busby 
*/ 
char *db_connection::escape_string(string sql) 
{ 
        char *s = new char[sql.size()*2 + 1]; 
        mysql_escape_string(s, const_cast<char *>(sql.c_str()), sql.size()); 
        return s; 
}  

接下來只要將每個要帶入查詢的內容先加上這個函式就可以.

相關資源:

[學習心得]來玩玩Hipchat.. 第一篇

image

主要是在管的一些伺服器會有莫名其妙的service中斷的狀況,本來有在增加一些log.不論是在MySQL還是程式本身.但是除了要找出原因之外,要能夠迅速的回復服務也是一個方式.

其中想過不少方法,不過也都有撞牆的狀況:

  • 使用SMTP,寄送Email (用Gmail account)
  • 使用XMPP (或是使用Facebook Chat)
    • 其實Facebook 的聊天有支援XMPP的,使用Pidgin也可以順利登入.但是考量到Aliyun在大陸內部臉書被擋.放棄!
    • 參考一下Facebook Chat
  • 還是回過頭來使用最被大家所推薦的Hipchat,不僅僅支援的服務多.也可以自己再去手動修改.
    • 裡面比較需要注意的是 API Token 有分 1.0 跟 2.0,大部分外面的應用都是使用API 1.0
    • 這邊有一個比較好用的 CLI的方式,可以直接傳送訊息 Hipchat-cli

這才剛開始.. 希望能把自動化弄得更容易…

參考link

由iPhone4轉到iPhone6 Plus無圖片的開箱經驗談

我的iPhone4 也使用了三年半,這次iPhone6變大了實在很對我的胃口. 難得搶到中華電信的第二波領機專案,所以就順便攜碼過來,但是攜碼卻比想像中的困難.

開箱不會有開箱照,不過倒是有一些注意跟提醒,如果你跟我一樣是從iPhone4 轉到 iPhone6.

特別是如果你是攜碼(NP)的用戶,要注意:

電話資訊的轉移:

這裡給需要使用到itune備份與還原的人,使用到icloud的人代表也不太需要把資料轉過去.

  • 先使用舊的iPhone4 連接到你的itune
    • 選擇備份”到這個電腦”
    • 建議把app與購買項目一併備份起來.
  • 打開你的iPhone6
    • 記得把一些初始設定都先跑完,到達一般使用的狀態
    • 連接itune,自然會出現”歡迎使用新的iPhone”
    • 選擇”從此備份回復”

這樣就可以了….. 簡單又快速..(就算我32G 用到幾乎滿,轉過去也大概20 mins)

電話帳號的轉移:

這邊比較需要提一下的是,先註明一下iPhone4 是 micro-sim 而 iPhone6/6Plus 使用的是 nano-sim 還有,中華電信的攜碼(NP)門號要有10天的作業時間.於是你可能得繼續使用你舊的門號.可是呢? 聽中華電信的小姐說,如果你先申辦攜碼(NP)的話,可能原來的電信商就比較不會主動幫你做卡片更換的動作.

所以,這邊可能要請還沒領機的人先注意一下,正常程序如下:

  • 先到原電信商申請nano-sim 卡
  • 這個時候可能會用遺失或是換卡處理,所以你最好順便拿一下 nano-sim 轉 micro-sim 的轉卡,不然短時間會沒卡
  • 到中華電信去領機
  • 使用原來電信商的卡片

不要跟我一樣,直接跑到了中華電信發現卡片還沒換.結果櫃檯人員好心的等我去對面把卡換過之後繼續領機的過程.途中還發現某電信傷的nano卡缺貨,還跑到第二家才有.

大螢幕真棒…. 一次升上 128G

[Moocs]Programming Mobil Aplication on Android Platform (1)

image

前言:

這本來是Moocs上面一系列關於Java/Android課程Mobile Cloud Computing with Android的第二門課程.由於最近我把第二階段的課上完了.也在想說要不要學一下.先開始follow看看…

其實對於Android 我還是處於不是很熟悉的狀態.雖然當初已經把一些簡單的相機功能有寫出來.但是整個還是架構不熟悉.也順便來學習一下.

關於環境使用:

關於Emulator的Shell使用,由於我使用的是Genymotion.稍微玩了一下,發現command幾乎都不太一樣.

  • Genyshell 必須在Genymotion模擬器跑起來之後再用
    • genymotion capabilities 可以查詢所有支援的指令
      • 就算你查到camera/accleronmeter可以使用,但是其實因為是模擬器.其實是不能用的.
    • battery getlevel/setlevel 來設定電源目前使用量
    • gps setaltitude/setlatitude 可以來設定目前gps地點資訊
  • Emulator Call
    • 這個部分使用AVD(Android Virtual Device)可以,但是我還沒找到如何使用Genymotion來做.
  • DDMS Perspective
    • 這個部分我比較沒有在使用,不過這次的教學也會清楚地教導如何使用DDMS.主要在Hierachy View 還有 Methond profiling.

關於Activity Lifecycle

筆記一些我比較沒有注意的部分:

  • OnResume 發生的時間點是最多的,基本上就是Activity 出現前就會發生.所以以下情況都會發生:
    • 第一次執行OnCreate之後
    • 離開App回來之後
    • OnPause與OnRestart的返回
  • OnPause 發生在準備要離開Activity的時候,緊接著是OnStop會收到
  • OnStop 會出現在 OnPause之後,所以不一定會被呼叫到,如果user使用kill app.這時候只會有OnPause
  • 旋轉手機的時候,OnCreate,OnStart跟OnResume都會發生
  • 其他更多可以在這裡看到 http://developer.android.com/training/basics/activity-lifecycle/index.html

[GTUG][GDG]#11 Google Tag Manager 介紹

心得:

原本想說要休息一兩個禮拜專心趕Mooc的作業,只是剛好作業進度都超前加上許久不見的Marx也會去,順便去了解一下.

「Google Tag Manager 」對我而言是完全新的東西,雖然我比較常用Google Adsense跟Google Analytics.

簡介GTM

做電子商務的網站的人都了解,如何有效地分析使用者的動作跟流量一直是一個很大的問題.所以這時候會在網頁上面加上許多的JS.但是每次類似的修改都得要動到網頁本身,對於有CDN作為cache的商家而言,是一個很困擾的事情.

Google Tag Manager(GTM)本身就是一個異地的library,可以寫在原本的網站的裡面.幫助作為網站分析與電子商務廣告的部分.

原本你想要增加新的功能(比如說增加Google Analytics,或是增加新的追蹤)是需要去修改原本的程式碼.

但是使用了GTM之後,就再也不用去修改原本的網站部分.只需要去管理頁面增加一些標記,規則或是巨集.也不用擔心cache與CDN造成的delay.

速記:

  • 加上GTM前注意:
    • 最後的”dataLayer”要移除掉,因為這個東西很常被其他JS使用.
  • Checking Pixel
    • 利用 1 pixel 的圖片,來帶參數以達到廣告作用.(偵測流量)
  • Google Tag Manager主要有三個可以加入的東西
    • 標記
      • 增加或是搭配其他的服務(Google Analytics)
    • 規則
      • 增加許多規則,可以是網頁參數,可以是JS參數.
    • 巨集
      • 可以使用Regular Expression 來處理更多事情.
  • 標記的”點擊接聽 “
    • 可以監聽所有網頁上的點擊動作(button 甚至是其他…)
    • 可以利用console 去查看dataLayer網頁上的點擊動作.
  • Google Tag Manager的優點
    • 加上了Google Tag Manager他會加上亂數去破壞cache,對於有 使用CDN的網站而言.這樣才能達到及時更新的效果.
    • 也俱有程式碼最佳化,與瀏覽器的相容性問題
    • 本身也具有版本控管,不過講者建議使用Git(把code自行複製出來再貼到git)
  • Google Analytics的進階使用:
    • 原本使用IP,現在使用session 可以偵測跨網域的使用者

參考資料: