Showing posts with label mac. Show all posts
Showing posts with label mac. Show all posts

2011/10/31

數位中樞

今年初(2011)在考慮資料問題, 腦中閃過一個字詞 "data hub", 而後 data 範圍擴大, 改為 digital。在網路搜尋 "digital hub", 赫然發現 10 年前已在某個場合上提出

賈伯斯先生當時提出 digital hub 是 Mac, 圍繞 hub 周圍的是音樂播放器, 手機, 數位相機/攝影機, 影音播放, PDA, ... 等等設備。

Digial Hub

看了一會, 難免感嘆即使同個字詞, 在不同背景產生的意義與結果是完全不同。特別是 hub 旁邊的設備已被征戰過一輪, 圖片的戰略意義更能凸顯出來。

上禮拜和某長輩聊到創業的話題, 提到 digital hub。再搜尋一次, 果然有人把該圖視為霸業的開端, 而在今年中 digital hub 向雲端轉進

另外, 也看到我們的 B 社, 相隔 2 年, 在 2002 年末就追上驥尾, 推出產品, 其實算快了。但和韓國的 S 社比較, 就很堪玩味。

最後心得是 ... 如果常留意業界資訊, 應該就不會去想 digital hub 這組字詞。

2011/10/02

泛 Markdown 編輯器

Markdown 專治滑鼠過動, 加持文件檔案撰寫。主要功效是運鍵如飛, 也能有好看好編的文件。

即便使用 Markdown 只要能輸入文字的編輯器都行, 然後再加工處理。先前找相關軟體, 只有少數編輯器, 網誌特用編輯器, 還有就是深具實驗性但得常重開程式的佛心開源類。現在相關應用已遍地開花, 這幾天在更新一些軟體, 就發覺 Markdown 被普遍支援且種類繁多, 也因此補入一些工具 …

BBEdit TextMate Espresso MarsEdit nvALT Scrivener Byword Marked
格式 MD MD/MMD MD MD MMD MMD MMD MMD
預覽 即時 手動 手動 即時 即時 批次 手動 唯讀
用途 通用編輯器 網誌庫 文件庫 專寫
(M)MD擋
專看
(M)MD擋
特色 老牌 現代 網頁 網誌 Simplenote
同步
寫作 好看 方便
$ $$ $$ $$$ $$ 0 $$ $ $

這樣看下來, 剛開始入門的首選非 nvALT 莫屬, 有看到不少都是 Byword + Marked 組合搭配使用。個人是習慣所有文件與工作日誌都放在 Scrivener, 因為分門別類/關聯/搜尋/輸出都便利。檔案編寫原本用 BBEdit, 正試用 Byword + Marked。另外 nvALTSimplenote 同步的特性, 方便文件跨平台與透過瀏覽器分享, 也置入工作流程中 …

2010/08/31

Bonjour 你好

Bonjour蘋果zeroconf 免設定網路產品, 協助使用者更容易用網路。

雖然 Bonjour 與 zerconf 目標是各種網路服務, 這裡的範圍限制在網頁。免設定網路目前解決三個問題: 設備(名稱)的IP(網路位置)指定, 自動取得名稱與IP關連(廣播法 mDNS), 自動取得網路服務(dns-sd)。

技術上有點繞口, 實務上就如同一個 Wiki 工具 Voodoo Pad 寫妥許多內容, 要分享只要點選 Start 按鈕:
voodoopad_web.png

其他人利用 Safari 的書籤頁就可以看到:
safari_bonjour.png

不用網址、埠號、目錄, 看到名稱點下去, 立即瀏覽網頁。

除 Safari 外, Firefox 的 BonjourFoxy Plug-in 有相同功能, 目前支援 Windows 與 OSX。(Windows 安裝前須先裝妥 Apple Bonjour 套件)
bonjourfoxy.png

BonjourFoxy 另附有 Bonjour Browser 可觀察 dns-sd 詳細內容:
bonjour_browse.png

寫到這裡都是使用者操作面上。手上也有許多各式各樣網頁, 是否能建立 Bonjour 項目瀏覽資料?

最簡單方法大概利用 OSX 中 /usr/bin/dns-sd (Bonjour 套件) 在 Terminal 下指令:

$ dns-sd -R "Plone" _http._tcp "" 7070 "Plone 4 Here"

會佔住 Terminal, 要結束就直接按 ctrl-C。

dns-sd 除了為本機建立 Bonjour 服務項目, 也可代理(Proxy):

$ dns-sd -P "Zoo Keeper" _http._tcp local 80 hadoop.apache.org "" path=/zookeeper "你好 Zoo Keeper"

注意 path 可指定 URL 主機、埠號後的部份。

分享網址除了剪貼、美味書籤、社群工具, Bonjour 也是個方式, 而且是立即的。

2010/08/27

ZKFuse 與 macfuse

zkfuse 可能會被歸在玩具類, 是網路控制中心 ZooKeeper 把資料暴露在 FUSE 下。但與 macfuse 不符(API 差異), 就游進去解決一下 ...

參考網誌 HowTo Mount ZooKeeper using FUSE 的做法。

zkfuse 需要 fuse(macfuse 2.0.3), boost, log4cxx ... 都用 macports 裝妥。

取得 zookeeper-3.3.1.tar.gz 解開到 <zookeeper3>。

按照 /src/c/README 編 zookeeper:
$ cd zookeeper3
$ ant compile_jute
$ cd src/c/
$ ./configure
$ make
$ sudo make install
(預設安裝到 /usr/local/include/ 與 /usr/local/lib/)

到 zkfuse/ 目錄下:
$ cd ../contrib/zkfuse/
$ autoreconf -if
$ export LDFLAGS="-L/usr/local/lib -L/opt/local/lib"
$ export CXXFLAGS="-I/opt/local/include -I/usr/local/include"
$ export LIBS="-lzookeeper_mt"
$ ./configure

由於 macfuse 與 fuse 差異, 修改 src/mutex.h:
--- mutex.h.original    2010-08-27 10:38:10.000000000 +0800
+++ mutex.h 2010-08-27 10:38:20.000000000 +0800
@@ -34,7 +34,7 @@
public:
Mutex() {
pthread_mutexattr_init( &m_mutexAttr );
- pthread_mutexattr_settype( &m_mutexAttr, PTHREAD_MUTEX_RECURSIVE_NP );
+ pthread_mutexattr_settype( &m_mutexAttr, PTHREAD_MUTEX_RECURSIVE );
pthread_mutex_init( &mutex, &m_mutexAttr );
}
~Mutex() {

修改 src/zkfuse.cc:
--- zkfuse.cc.original  2010-08-27 10:28:37.000000000 +0800
+++ zkfuse.cc 2010-08-27 10:30:01.000000000 +0800
@@ -27,7 +27,7 @@

extern "C" {
#include
-#include
+// #include
}
#include
#include
@@ -4171,16 +4171,17 @@
int zkfuse_lock(const char *path, struct fuse_file_info *fi, int cmd,
struct flock *lock)
{
- (void) path;
- return ulockmgr_op(fi->fh, cmd, lock, &fi->lock_owner,
- sizeof(fi->lock_owner));
+ return 0;
+// (void) path;
+// return ulockmgr_op(fi->fh, cmd, lock, &fi->lock_owner,
+// sizeof(fi->lock_owner));
}

static
void init_zkfuse_oper(fuse_operations & fo)
{
- memset(&fo, 0, sizeof(fuse_operations));
+// memset(&fo, 0, sizeof(fuse_operations));
fo.getattr = zkfuse_getattr;
fo.fgetattr = zkfuse_fgetattr;
// fo.access = zkfuse_access;
@@ -4204,7 +4205,7 @@
fo.open = zkfuse_open;
fo.read = zkfuse_read;
fo.write = zkfuse_write;
- fo.statfs = zkfuse_statfs;
+// fo.statfs = zkfuse_statfs;
fo.flush = zkfuse_flush;
fo.release = zkfuse_release;
fo.fsync = zkfuse_fsync;

改完繼續做出 zkfuse:
$ make

產生 src/zkfuse ... 然後繼續: (開始用 zkfuse 前要先啟動 zookeeper)
$ mkdir 123
(要 mount 的入口點)
$ src/zkfuse -z localhost:2181 -m 123 -d
(要加 -d, 否則不能用 ... 但終端機會被佔住)

開另一個終端機看 123/ 目錄內容:
$ ls zookeeper3/src/contrib/zkfuse/123
zookeeper