[Ubuntu] Macbuntu

參考

http://www.techbang.com.tw/posts/3906-macbuntu-change-ubuntu-default-theme-to-mac-style

另外裝好之後, 啟動Compiz Fusion

在裡面選擇啟動以下的plugin

  • Ring Switcher (shortcut: windows key + tab
    • browse application on the work space
  • Scale (shortcut: windows key + w
    • browse all applications at once
  • Expo (shortcut: windows key + e) 
    • browse work space
  • Show Desktop
    • mouse move left

 

 

Advertisements

[Pyramid] Openid support

最近在pyramid 使用openid login

https://github.com/tomlikestorock/pyramid_openid

我稍微比對了這套的寫法跟python-openid 裡面附得django example

發現其實flow都蠻像的

在使用這個library你需要先設定一些東西

在你的application (通常是__init__.py), 加入你之後要redirect的page (在下面的例子是dologin.html), 並且把他的view handler指定回verify_openid

__init__.py

config.add_route('verify_openid',
  pattern='/dologin.html',
  view='pyramid_openid.verify_openid')


並且在development.ini or production.ini之中加入一些相關設定

development.ini


</em></pre>
# openid setting
# 設定存檔的方式
openid.store.type = file
openid.store.file.path = %(here)s/sstore
# 這是設定login成功之後的callback function
# openid.success_callback = <you app name>.<sub module>:<call back function name>
openid.success_callback = app.views:remember_me

首先你需要從某個頁面(pyramid叫做view) 讓使用者選擇要使用的openid provider (ex: google, yahoo),
這個你可以利用一些現成的project (ex: http://code.google.com/p/openid-selector/),
當使用者選取好他要使用的openid provider之後,
就可以把你之前產生出來的openid url submit到/dologin.html這裡
(預設是要存在openid這個variable,
不過也可以透過修改development.ini裡面的openid.param_field_name 來改變你要submit過去存放openid url的variable名稱

而在pyramid_openid.verify_openid這個function裡面, flow是這樣子走得


pyramid view —> verify_openid —–> process_incoming_request
(這是送出request 到openid provider, 並且告訴openid provider 之後要redirect 回哪個url)

接下來就會redirect到openid provider login page, 在使用者登入之後,
又會redirect回剛剛告訴openid provider要redirect回來的page, 所以又回到verify_openid這個view

openid provider —-> verify_openid —-> process_provider_response
(這邊確認login success之後就會呼叫你之前註冊的callback, 預設是不處理)

所以接下來我們就可以在你剛剛設定的 remember_me callback 處理該做的事情了,
像是把session記下來 或是在redirect到別的page (view)

views.py (example)
=======================================
# This the callback function which will be call after openid login is success
def remember_me(context, request, data):
  session = request.session
  username = session['username'] = request.params.get('form.username', u'')
  redirectURL = request.application_url + '/xxx'
  if 'form.remember' in request.params:
  session['remember'] = True
    headers = remember(request, username)

  return HTTPFound(location=redirectURL, headers=headers)