Raspberry Pi 上的 command line 生活
Raspberry pi 都可以做「安裝 linux 」以外的東西的
但你需要先熟習一下完全使用命令行的環境
官方建議的操作系統 - raspbian 預設是不會打開圖形介面的
而且沒有圖形介面之下,電路版「冷靜」了,也很穩定
現在的用途如下
1. 網路接入接橋
2. 命令行瀏覧器
3. 硬體開發平台
因為功耗低,長期啟動的 rpi 成為一個可行的接橋
從街外先連到 rpi, 再接橋到其他系統,裝置
網路安全便會小量提升,又可以如常連接到其他系統
在行動裝置上 ssh rpi 再到伺服器重啟,簡單調整都很方便
Android ssh keyboard
也發覺命令行上的瀏覧器也有可用的地方
建議使用 w3m 而非 lynx,更好的支持中文
(細階 o 可進入設定)
最後是一個快速硬體開發平台, SPI, IIC, GPIO 加上可用python, linux, over LAN
不再需要使用 USB 連接 arduino ,compile. I HATE COMPILE.
將會再分享 rpi 上設定 SPI 的方法
Attachment | Size |
---|---|
ws3m joetsuihk-com.png | 129.3 KB |
Custom Views argument Validator: views_plugin_argument_validate
Views 的 argument 是一個非常好用的 filter,
同一組 views 的顯示,條件但應用不同的內容類型,或者作者,或者建立日期等眾多的應用都可以體現到 arguments 的強大之處
而且還可以為 arguments 驗證,符合某些條件才會通過
例如 node 一定要是某個內容類型之類的
這次的需求是,Views 的 argument 傳入日期,例如 frontpage/20130320 就顯示三月二十日的內容
但這個 Views 只會提供七日前的內容,七日之後這個 Views 便會返回 403,存取權限不足 (單一 Node 的存取不在此限)
所以便寫了以下一個自定義的 argument validator:
<?php
//example.module 先提示 views 這個模組有使用 views 的 api:
function example_views_api() {
return array(
'api' => 3.0,
'path' => drupal_get_path('module', 'example') . '/includes',
);
}
?>
<?php
//includes/example.views.inc
//MODULENAME.views.inc 定義一個客制的 argument validator
function exmaple_views_plugins() {
return array(
'argument validator' => array(
'days_limit' => array(
'title' => t('7 days limit'),
'handler' => 'example_plugin_argument_validate_7_days_limit',
'path' => drupal_get_path('module', 'example') . '/includes',
),
),
);
}
?>
handler 會自己有一個檔案,需要在 example.info 中定義:
files[] = includes/example_plugin_argument_validate_7_days_limit.inc
真正實現的代碼:
<?php
//example_plugin_argument_validate_7_days_limit.inc
class example_plugin_argument_validate_7_days_limit extends views_plugin_argument_validate {
function construct() {
parent::construct();
}
function validate_argument($argument) {
global $user;
if (in_array('administrator', $user->roles)) {
return TRUE;
}
if(is_numeric($argument)) {
// as the argument is in form of CCYYMMDD, validate it should be no more than 7 days ago
$date = strtotime($argument);
$days_ago = strtotime("-7 day");
if($days_ago < $date) {
return TRUE;
}
}
return FALSE;
}
}
?>
Attachment | Size |
---|---|
views_plugin_argument_validate.png | 19.16 KB |
Drupal 8 CMI 設定管理
譯自 http://heyrocker.com/cmi-feature-freeze
我發現新功能凍結的期限已經過去了,正是一個好的時候更新一下大家設定管理大綱 (CMI)的近況了
TL;DR
CMI 的近況是非常好。我為此感到非常的驚喜和自豪,我們百人以上的合作者在過去兩年一起完成的工作。我們已經完成了全部的主要功能開發,沒有遺漏兩年前定下的目標。當然我們還有很多工作,特別是測試和文檔的部分。
Overview
兩年前我們開始的時候,我心中有一個大概的目標的:
- 將各種設定儲存在一個機器可讀的檔案,使其可以使用版本控制系統管理不同服務器環境
- 提供一個 API 處理設定的修改,和一個基本的介面執行這些更新
- 核心完全使用這個系統
- 多語言系統的支持
- 為開發者和使用者提供使用文檔
這看起來很少,但又非常多。現在功能凍結的期限已經過去了,可以看看這些目標的完成度如何
將各種設定儲存在一個機器可讀的檔案
這已經完成了,而且已經完成了一段時間。這個系統自第一個提交 (commit) 之後經過非常多的修改,包括一次大型的結構修改,由 XML 改為使用 YAML。但對外的 API 就一直幾乎沒有改變過。
核心的更新和介面
雖然 API 的接口很早已經定下了,但一些核心最複雜的部分還沒有完成,包括欄位和內容類型 (fields and node types) 還沒有非常完整地完成測試。這其中有一個可能令這個測試會帶來更多有關依賴關係的問題,有需要的話我們會處理。除了這個以外,還有一些需要幫忙和參與的:
介面在上年的大一月的 BADCamp 完成了,那是一個很基本的介面,但它給用戶看到有那些設定已經準備好匯入,可以一個按鈕就完成匯入。另外的一些條目正在進行中,目的是令介面整合更多功能。
核心完全使用設定系統
這個工作其實在上年 DrupalCon Denver 的時候已經開展,而且進度很好。其中一個比較大的問題是使用新的 ConfigEntity 處理比較 “即時” 的設定例如 Views, Fields, or Roles。一般的轉換圍繞三個區域:
- 轉換 system_settings_form 到 CMI ﹣ 還餘下兩個
- 轉換全部 variables 到 config and state systems ﹣ 核心中的 variable_get 已經少於 150 個了!其餘的大部分都會和 field/node 系統一齊處理
- 轉換設定上的資料到 ConfigEntity ﹣ 已經完成了很多工作,但這仍然是最大的未完成部分
這些是特別需要留意的:
我個已經完成了 80﹪的核心轉換,我覺得非常自豪和滿意。特別一提,Views 自從第一日提交到核心便已經完全使用 CMI
多語言和翻譯
這是整個 CMI 中最困難的部分。我們花了很多時間去找出一個可行的方案,而代碼花了更多時間才提交。但因為時間的問題,其中一些功能會對 D8MI 幫助很大的功能,例如管理設定的整合等,都放棄了。但現在看來我們差不多囡完成了。
加入了 context 系統令設定可以基於 context 修改,例如語言,或者 Domain Access
一個設定的 schema 系統提供可翻譯的設定。這個正在進行中,可以到 http://drupal.org/node/1910624 追蹤和參與
設定的 schema和 locale 模組的整合, 進行中 (http://drupal.org/node/1905152)
文檔
當然,這個部分通常都留到最後。但現在正是時候認真的開展這個工作了。我們有一個為開發者而設的 handbook 頁面,但它已經嚴重過時了。但由 Gábor 編寫的 schema and context 就完成度很高。
除了技術文檔,我們也需要一個一般使用者的文檔或者使用手冊,針對簡單使用和進階使用。我希望有經驗的技術作家可以帶領這個工作,所以如果你知道誰有興趣的話,請聯繫一下
進階題目
現在有一個激烈的討論有關模組安裝的時候設定的處理,和一個基本的問題,“誰擁有這個設定檔?” 其中一個經歷例子是 node.module 為 Drupal 主頁提供一個頁面 (View) ,這究竟是 node 還是 views 的設定?如果 node 卸除了,那個 views 怎麼辦?這個問題的詳細討論 (http://drupal.org/node/1776830) 這是餘下的一個最大的結構問題。現在我們是暫停了,直到我們為卸除的模組的處理定案為止 (http://drupal.org/node/1199946)
- url 別名設定,包括一些關於何為設定何為內容的討論
- 還有一些關於內容發佈,CMI 的討論
- UUIDs 現在是每一個 entity 的一部分,令開發環境和上線環境之間可以連接起來,不用理會那連續遞增的 ID
- 核心可以交互串列化冖後的 Entities
核心通過 REST 模組,也會支持基本的 CRUD 功能。所以提供一個完整的多環境發佈的基本的條件已經齊備,縱使其中一些部分不會完全包含在核心組件之中,但我覺得這不是一個問題。
參與其中
整合的預計期限是 2013年7月1日。那之前會有三個大型的 sprints:
- 全球性的Drupal sprint 週未,三月九,十日
- DrupalCon Portland 前後的兩個週未的 sprint,五月 18-19,24-26
- Drupal Dev Days Dublin 之前的整個星期,六月 24-27
感謝贊助
值得一提的是,我的工作都是由 ChipIn 的贊助者捐助的,還有以下的公司:
Acquia
Riot Games
Bluehost
Dennis Publishing
Pantheon
WebEnabled
Reload.dk
Annertech
Comm-press GmbH
Undpaul.de
感謝他們的支持,我會在 post-feature-freeze 之後再更新贊助和進度的
當然還要感謝每一個參與和提交代碼的貢獻者。將這個計劃帶到核心絕對是一個嘔心瀝血的工作,這絕不容易但我們已經完全得很好了。我為 CMI 最終整合到核心感到非常興奮。
Drupal 8 WSCCI update
翻譯自 http://groups.drupal.org/node/286108
Drupal 8 的功能凍結的日子已經到了,兩年間無數人們的努力之後,這正是時候停一停,談一談 Web Services and Context Core Initiative (WSCCI) ,還有看一看餘下的工作。
先總結:太扯了,我們已經完成了這麼多!太扯了,我們還有那麼多工作!
Drupal 8 的第一年我們沒有太多的新功能或者超凡的改變。我們修補了很多臭蟲,做了很多地基的工作,但最重的擔子要等到2012年2月才到達。那就是決定完全使用 Symfony2 的Components 作為 Drupal 8 的基本的 pipeline。這是一個多年來 Drupal 最大和最重要的決定,而且我相信完全是一個正確的決定。
直到現在的工作
WSCCI 基本上分成了 SCOTCH 和 WSCCI ,還有 WSCCI rebooted。也即是說過去一年的完成的工作有:
- 使用 Symfony2 HttpKernel component 和 model 處理請求
- 重寫 routing (路由) 系統,脫離自 menus
- 全新的 routing 系統以支持基於路徑路由 (routing by path), HTTP 方法,HTTP vs HTTPS,基本的 mime-based 路由,還有支持第三方的插件。這是一個劃時代的進化,帶來更多的可能性
- 全新的 routing 系統可以抽換成基於 non-SQL 的後台
- 全新的,更彈性的存取權限管理,支持一個路由有多個存取檢查點
- 新的串列化 (serialization)系統,可以輸出任何 entity 到一個標準的格式,例如 Atom, JSON, 或 HAL,支持現有的任何 entity,欄位組合
- 新的 rest.module,為任一 entity 對象提供一個 RESTful 存取方式
- REST/serialization 支持 Views,令 views 的結果變成一個串列化的資源
- 將 Guzzle 加到 core,一個完全支持 HTTP 1.1 的客戶端,比現在的 drupal_http_request()更強大和有彈性
雖然不是 WSCCI 的一部份,但我們對 Drupal 的影響很深遠,重組很多核心系統到整理好的新服務,帶來一個新的相依性容器 (Dependency Injection Container) 從而推動更加可測試的代碼,還有很多一般的 API 改進。側面的影響是,核心會更加模組化和更容易抽換核心的某些部份!
這當中有一些很久之前的功能請求,這些改變都是巨大的,觸及更遠的。Drupal 8 會是一個跨媒界 (Hypermedia) 的服務器,加上其他 Drupal 8 的工作,和 Drupal 作為一個 CMS 的歷史,我們看到一個巨大的可見未來。
等一下,是誰那麼神?
有很多人 involved 到 WSCCI 的工作,我不可能列出每一個人的名字,因為那太花時間了,但我想在此特別提到這些人:
- Alex Bronstein
- Lin Clark
- Michael Dowling (Guzzle)
- Niklas Fiekas
- Sascha Grossenbacher
- Sam Leathers
- Andrei Mateescu
- Georg Oechsler
- Fabien Potencier (Symfony)
- Klaus Purer
- Lukas Smith (Symfony)
- Chris Webber
- Daniel Wehner
當然還有 Kat Bailey,從 Drupal's bootstrap pipeline 的深湚中帶大家回到水面。
我也想提一下 Acquia 一直為 Klaus 和 Lin 提供經濟上的幫助去為串列化和 REST 模組的工作了數個月。沒有他的話,我們可能會有一個過於強大的路由系統而其中大部份都沒有用到。但這個工作還沒有完成,所以如果你覺得資助他們兩個令 Drupal 8 成為一個一流的 REST server 會幫助到你的話,他們現在正在找更多的資助資源去支持這個工作。
太好了,我們已經完成了?
呀。。還稱不上。過渡 Drupal 到一個新的基礎不是一年可以完成的工作。我們建好了地基,乾了水泥,埋了水管,裝了窗。那是一個大工程,但還有內部裝修,傢俱等的工作要完成。
也即是說,是時候過渡 Drupal 到 Drupal 8 了
WSCCI 團隊每個星期都在 IRC,星期二中午 US 東部時間在 #Drupal-WSCCI。如果你想參加,這是一個好的開始。我們的項目經理,Ashleigh Thevenet 會經常更新最新的重要單元。重要又影響闊的單元也會出現在核心 Initiatives 頁面
- 繼續完成 Routes 和 Menus的分離工作。我們已經開始了這個工作,餘下的部分我們需要其他人的幫忙.
- 完成使用 HAL 作為 Hypermedia 資源的預設格式
- 使用 REST 時匯入的 Entity References 的處理,令 REST 系統可以完成幅蓋輸入輸出,不同環境之間的步儲
- 使用 Symfony 的 session 處理機制,令我們可以除去很多的多餘代碼
- 完成轉換到 UrlGenerator 的工作,令向外的路徑更彈性,可暫存化,可插件化
- 向外的請求由使用drupal_http_request() 轉換到 Guzzle
- 大的一塊:Merge頁面緩存和區塊緩存,令其使用 HTTP caching 和 ESI,基於Symfony 新的 fragment pipeline
最後,將現有的 menu 轉換到新的 routing 系統。這是一個容易的,可以使用群體合作的部分,但我們要先完成上面所列的東西才可以
所以,我們還沒有完成,還有一大段路
OK 那和我有什麼關係?
全部都有關!Drupal 8 不會超凡的,除非我們完成這些工作。我們需要你的幫忙才可以
來參加 WSCCI 的頻道,我們也會很快開展轉換routing 系統文檔的工作。不要忘記我們下個星期還有一個世界性的大型 sprint!你所在的區域有嗎?你會否前往?你應該去的。這會是一個絕佳的機會參與到核心的開發,特別是 WSCCI 的工作。幾個 WSCCI 的工作人員會在他們的所在地提供幫助
如果你會來到 DrupalCon Portland,那都會有一個會議前和會議後的 sprints,WSCCI 也會參加。
Drupal 8 不會完成直至它被完成。一起努力吧。