2010年3月31日水曜日

FriendFeed の 「Twitter 投稿の優先設定」を表示させるには – Twitter アカウントで登録した場合

1. ブログの更新を FriendFeed 経由で Twitter に投稿する

ブログを書いている友人が Twitter をはじめた。そこで、ブログの更新に合わせてタイトルを自動的に Twitter へ投稿するサービスとして FriendFeed を勧めた。

他にも同様のサービスは色々とある。FriendFeed を勧めた理由は、

  1. Twitter がサービスを停止したときに代理として使える
  2. FriendFeed でフォローした場合に画像のサムネイルが表示される

言うなれば、セカンド Twitter として利用できる。また、Twitter クライアントとして使える。

 

2. FriendFeed に Twitter アカウントで登録

Twitter に予めログインしておく。

その後、FriendFeed で Twitter アカウントを使って登録。

Twitter での認証画面が表示されたら「許可する」。

img03-31-2010[3]

 

3. Twitter の「投稿の優先設定」が表示されない

の説明に従い、FriendFeed にブログを登録。

続いて、Twitter の「投稿の優先設定」をしようと「設定」を見た。しかし、Twitter の設定が見つからず。 (+_+)

img03-31-2010[4]

自分の場合は、Twitter アカウントで FriendFeed に登録せず、メルアドで登録した後に Twitter を追加した。そのため、設定が表示されていたのかもしれない。

 

4. Twitter の「投稿の優先設定」を表示させる

一度、FriendFeed のホームに戻り、投稿フィールドをクリック。

Twitter のリンクが右下に表示されたらクリック。再度 Twitter での認証画面が表示されるので「許可」する。

img03-31-2010[5]

この後、先ほどの「設定」画面を表示したら、「Twitter 投稿の優先設定」が表示されるようになった。

img03-31-2010[6]

後は、「ブログの更新情報は『Friendfeed』で流すことにした - IDEA*IDEA ~ 百式管理人のライフハックブログ」の説明に従った。

Firefox で開いているタブを一覧して切り替える - 「タブプレビュー」の活用と、マウスジェスチャーへの割り当て

1. アドオン FoxTab を使うのをやめた

 FoxTab はタブを切り替えるための Firefox アドオン。タブを切り替えるときに、タブのサムネイルを一覧してくれる。

このアドオンにべた惚れだったけれど、最近利用していない。理由は、表示されるサムネイルがぼやけた画像になったため。

それ以来、普通にタブを切り替える方法に戻した。

しかし、ブラウズ中、たくさんのタブを開くことが多い。そのため、どの位置に何のサイトを開いたのか忘れてしまう。

開いているタブが多い場合は、内容を分類して、別のウィンドウへ移す。今のバージョンの Firefox は、タブを D&D で移動できる。直観的で扱いやすい。

それでも、多くのタブを開いていると、もっと自在にタブ間を行きしたい。

 

2. タブプレビュー機能を使う

アドオン Firefox Secrets を使うと、タブプレビューを表示させることができる。

窓の杜 - 【REVIEW】「Firefox」v3.6の隠し機能を手軽にON/OFFできる拡張機能「Firefox Secrets」 によると、

「Firefox」v3.6には機能自体は追加されたが、標準で無効化されており、通常の設定画面から有効化することもできない機能がいくつか存在する。…

ON/OFFできるのは、[Ctrl]+[Tab]キーによるタブのプレビュー表示機能、タブバー右端のボタンによるタブプレビュー機能、…

タブを選択するためのプレビュー表示機能の動作は、Vista の Aero と親和性の高いデザイン。

タブプレビューの上部には、タブをタイトルで抽出するための検索フィールドがある。プレビューウィンドウの上で、タブを閉じることもできて便利。 ^^

 

3. タブプレビューを有効にする

a. Firefox Secrets で設定する場合

上記の設定は about:config でも設定できる。

GUI を使って設定したい場合は、Firefox Secrets を利用すれば良い。

Firefox Secrets の設定画面で Settings において

  • Tab previews
  • Tabs previews menu button

の二つにチェックを入れた。

img03-31-2010[1]

 

b. Configuration Mania で設定する場合

アドオン Configuration Mania で設定する場合、

  • ブラウザ > タブブラウジング > タブのプレビュー表示

において、「タブの一覧表示」「Ctrl+TAB」にチェックを入れる。

SnapCrab_Configuration Mania_2013-1-12_15-5-12_No-00

 

4. タブ一覧をすぐに表示する方法

Ctrl + Tab

の入力により、タブの切り替え画面が表示される。ただし、多くのタブが開かれている場合、一部が表示される。これに対し、

Shift + Ctrl + Tab

を押すと、全てのタブがすぐに表示される。マウスによって選択しない限り、選択画面が消えることはない。

 

連続したキー入力

KeySwap などの、キーを入れ替えるアプリケーションで、CapsLocks に Ctrl を割りてておけば、

  1. Shift
  2. Ctrl
  3. Tab

という順にキーが並ぶ。そのため、キーの押下を素早く行える。

 

5. FireGestures でタブプレビューを表示する

FireGestures を使うと、タブプレビューを表示する操作を、マウスジェスチャーに割り当てることができる。

FireGestures の設定画面を開き、

スクリプトを追加

にあるスクリプトを貼り付け、ジェスチャーを割り当てた。

タブの切り替えはよく行う操作なので、マウスを上方向へ移動させる動作にした。

img03-31-2010[2]

ちなみに、マウスを下方向へ移動する動作は、「タブを閉じる」に割り当てている。

追記 (2010.6.6) :  マウスを上方向へ動かすジェスチャは「新規タブ」に戻した。

代わりに 下左 (DL) のジェスチャーをタブプレビューに割り当てた。

DL

というマウスの動きは、下方向、左方向へとカクカクと動かす必要はない。円を描くようなつもりでクルッとマウスを動かせばいいので、割とスムーズにタブプレビューを表示させることができる。

 

参考サイト

2010年3月27日土曜日

Haskell の sequence 関数 - foldr をイメージして

Haskell の mapM_ – foldr と (>>) を意識して」のつづき

1. mapM_ 関数を理解するには、sequence 関数の理解が不可欠

前回は、

mapM_ 関数

の動作について見た。しかし、どうも感覚的に全然身に付いていない。

mapM_ を使おうとすると、

「あれ?一体これ何してるんだっけ」

と考え込んでしまう。返り値に関心のある mapM にしても同じ。

多分、この関数のベースとなっている

をちゃんと理解してないために、頭の中にイメージを描けないと思う。 (+_+)

Prelude には、

sequence :: Monad m => [m a] -> m [a]

   Evaluate each action in the sequence from left to right, and collect the results.

型を見れば、わかるように、sequence 関数は、Monad が関わってくる。

ところで、モナドな計算について理解しようとすると、途端に具体的なものが、遠のき霧の中に隠されてしまう感覚を抱く。詳細なことを、一々考えないで済むのが抽象化のメリット。しかし、モナドに関しては、詳細を考えないで済ませることができない。共通の構造として存在するものを理解し、抽出する方法を学ばなけれど、いつまで経ってもブラックボックスをいじっているという感覚から抜け出せない。

 

2. モナドのイメージ

「モナドとは何か」について様々な説明がされる。

例えば、

モナドは値およびその値を使う計算の並びという観点からいえば、計算を構造化 する方法です。

(All About MonadsIntroduction より)

これをはじめて読んだとき、何が言いたいのかサッパリわからなかった。

しかし、今理解している範囲で「モナドのイメージってどんな感じ?」と言われたら、やはり Monad クラスの (>>=) の説明を元に想像している。

Sequentially compose two actions, passing any value produced by the first as an argument to the second.

(Prelude より)

「アクション」と言われるとわかりずらいので、「計算」 と置き換えて読んでいる。つまり、

二つの計算をつなげるとき、先行する計算の結果を、後続の計算の引数とする。

頭の中のイメージは、

img03-25-2010[1]

(>>=) による計算のつなげ方にはバリエーションがある。値を含む「包み」の種類によって計算の仕方が異なる。

例えば、以下のように、Maybe, [ ], State s の型コンストラクタが「包み」で、それぞれの型コンストラクタに応じて計算の方法が定義される。

img03-25-2010[2]

Prelude の Moand の説明では、

it is best to think of a monad as an abstract datatype of actions.

モナドを、アクションの抽象データ型の一種だと考えておけばよいと。

モナドと言われた場合、このような大雑把なイメージを頭に浮かべている。イメージが浮かぶから、ある程度わかった気になるれる。数学嫌いの文系人間なのでこの程度の想像で「まぁよし」と。

 

3. foldr の動作イメージ

モナドな計算のイメージはできているとして、mapM 関数に話を戻す。この関数をイメージできない原因となっている sequence 関数。

Source を見ると以下のように定義されている。

sequence       :: Monad m => [m a] -> m [a] 
sequence ms = foldr k (return []) ms
            where
              k m m' = do { x <- m; xs <- m'; return (x:xs) }

これを見て、すぐに理解できるほど、foldr 関数に馴染んでないので、もう一度ここから考え直し。 (+_+)

ところで、foldr をイメージをするとき一番参考になったのは下図だった。

リストの要素間に、関数を適用していく様子がイメージしやすい。

これを元に、具体的な場合に当てはめて考える。

 

リストの要素がモナドでない場合の foldr 関数の動作イメージ

まずは、リストの要素がモナドではない場合の概念的なイメージから。

例として次の場合。

foldr (+) 0 [1,2,3,4]

最初に、foldr の計算のためにツリーをイメージ。その後、対象であるリストの要素を木の左の葉に割り当てる。加えて、foldr の第 2 引数である 0 を木の一番下の右の葉へ。

img03-25-2010[3]

次に、二項演算子 (+) を一番下の二つの葉に適用して 4 という結果を生成。これを木のルートの方へ繰り返し最終的な結果を得る。

img03-25-2010[4]

 

sequence 関数における foldr の動作イメージ

sequence 関数の定義を再掲。

sequence       :: Monad m => [m a] -> m [a] 
sequence ms = foldr k (return []) ms
            where
              k m m' = do { x <- m; xs <- m'; return (x:xs) }

foldr が使われている行を見ると、k が二項演算子で、第 2 引数に、「空リストがモナドで包まれたもの」が与えられているのがわかる。これを先ほどと同じようにイメージする。

要素がモナドであるリストを、木の左の葉に割り当てる。次に、一番下の右の葉に、「モナドで包まれた空リスト」を置く。

img03-25-2010[5]

次に 二項演算子 k を一番下の葉に適用。

img03-26-2010[1]

関数 k の定義で、do 式を使わないなら、

img03-26-2010[2]

括弧を明示的に付けるなら、

img03-26-2010[3]

こうすると、関数が内側へ内側へとネストしつつ、 (>>=) で第 1 引数の計算の結果を第 2 引数の計算へと受渡している感じがつかみやすい。

最後の return に注目すると、左の葉のモナドな計算から結果を取り出し、それを右の葉のモナドな計算の結果から取り出したリストの先頭へ (:) を使って追加し、最後に return でまたモナドに包んで返しているのがわかる。

結局、大雑把に言って、sequence 関数は与えられたモナドのリストの個々の中身を取り出し、リストに追加したら、そのリストをまたモナドで包んで返すことを繰り返す。

 

4. 具体的な型で sequecne 関数を試す

Maybe  a

一番わかりやすい例は Maybe a 型のリストに sequence 関数を適用したとき。

*Main> sequence [Just 1, Just 2, Just 3, Just 4]
Just [1,2,3,4]

各々のJust で包まれた数値がリストにまとめられ、再び Just で包まれている。

img03-26-2010[5]

 

[a]

リストの場合は、

*Main> sequence [[1,2],[3,4,5]]
[[1,3],[1,4],[1,5],[2,3],[2,4],[2,5]]

むむむ…(@_@; 複雑な結果になった。

先ほどの foldr のイメージを思い出しながら考えると、最初の計算は以下のようになる。

*Main> [3,4,5] >>= \x -> return [] >>= \xs -> return (x:xs)
[[3],[4],[5]]

img03-26-2010[7]

次に、上記の結果を元にして、

*Main> [1,2] >>= \x -> [[3],[4],[5]] >>= \xs -> return (x:xs)
[[1,3],[1,4],[1,5],[2,3],[2,4],[2,5]]

 img03-26-2010[8]

 

State s a
B000ALF5AY

State モナドの場合は、「初期値と増分を持つカウンター」を対象にして考える。

以下の next 関数はカウンターの値を増分だけ増やす関数。返される値のタプルの第 1 要素は next により値を更新する前の値であるとして定義。これを State モナドで包んでリストにし、それに対して sequence 関数を適用する。

import Control.Monad.State

data Counter = Counter { val, step :: Int } deriving Show

next :: Counter -> (Int, Counter)
next (Counter v s) = (v, Counter (v+s) s)

main = let s = sequence [State next, State next, State next]
       in print $ runState s $ Counter 0 1

結果は、

([0,1,2],Counter {val = 3, step = 1})

State モナドの場合、State s a 型なので、State s が包みで a が計算をつなげると次に渡される結果。よって、タプルの第 1 要素がリストに集められ、第 2 要素は State モナドがつなげられるごとに背後で カウンタの状態が更新されていく。

img03-26-2010[9]

うーん、やはり sequence 関数の動作のイメージができても、個々のモナドの (>>=) による計算のつなぎ方もイメージできてないと難しいなぁ。。

 

関連記事

2010年3月24日水曜日

Inkscape で オブジェクト をパスに沿って配置する

1. オブジェクトを並べたい

circle 丸を描くツールで、複数の円を描いた。

img03-24-2010[12]

これを以下のようにパスに沿って配置したい。

img03-24-2010[20]

 

2. 方法

a. パスの合成

上記の全ての円を選択し、メニューの 「Path > Combine」で合成。 (Ctrl + K)

img03-24-2010[13]

合成すると、重なっていた部分が透けて見えるような格好になる。

img03-24-2010[14]

 

b. Path Effect Editor

パスにエフェクトを加えるためのエディタを表示するため、メニューより 「Path > Path Effect Editor ...」を選択。 (Shift + Ctrl + 7)

img03-24-2010[15]

 

c. Interpolate Sub-Paths

Path Effect Editor が表示されたら、上記で合成した円を選択し、Apply new effect で `Interpolate Sub-Paths’ を選び Add ボタンを押す。

img03-24-2010[16][4]

これにより、円が一列に重なった状態になる。

img03-24-2010[17][4]

次に、上記の円を選択した状態で、Path Effect Editor の Current effectEdit on-canvas アイコンをクリック。

img03-24-2010[16][6]

これにより、エフェクトをかけるためのパスが円の上に表示される。

img03-24-2010[19][4]

このパスをつかんで変形させると、それに伴い円がパスに沿って配置される。

img03-24-2010[20]

 

参考

Google ブックマーク で リスト の作成と共有

今は 開発停止してしまった Google Notebook についで利用率の高いサービスは Goolge ブックマーク。ブラウザ内蔵のブックマークは早々と使うのをやめ、オンラインブックマークに移行。Google を利用したのは公開して他人とつながるのが目的ではなく、完全にプライベートで利用したいため。Google 検索すると同時にブックマークも検索するスクリプトを使うようになってから、以前より早く目的地へ辿り着くことができるようになり依存度が高くなっている。

しかし、ちょっとしたブックマークのリストを友人と共有したいことがしばしばあり、完全にプライベートではなく共有する機能があると便利。そういうとき未だに Google Notebook を使っているけれど、ブックマークにいつの間にかリストを作成して共有する機能がついていた。まだ正式版ではないみたいだけれど。

 

リストの作成

Google ブックマーク の末尾に `l’ を付けた以下の URL にアクセス。

左上に自分の作成したリストと、他人と共有しているリストへのリンクが表示される。

img03-24-2010[1]

リストを作成するために左上にある Create new list ボタンをクリック。

img03-24-2010[7]

ダイアログが表示されるので、リストに名前を付けて Create list ボタンを押す。( Make Public でリストを公開することもできるようだ。)

img03-24-2010[3]

作成されたリストの画面を見ると、他人と共有するための Share ボタンと、コメントを追加できるのがわかる。

img03-24-2010[4][7]

 

リストへの追加

ブックマークのホームへ戻り、リストへ追加したいブックマークにチェックを付ける。

img03-24-2010[2]

ブックマーク一覧上部の Copy to list をクリックして、先ほど作成したリストを選択。

img03-24-2010[5]

これでリストにブックマークが追加された。

 

リストの共有

My lists をクリックして作成したリストを表示し、右上の Share ボタンをクリック。

img03-24-2010[6]

Google ドキュメントでおなじみの共有のための設定ダイアログが表示されるので、Invite People にメールアドレスを入力して、Invite ボタンを押す。

img03-24-2010[9]

招待された側は Google bookmarks のホーム画面で Shared with me をクリックすると共有されたリストが表示される。

img03-24-2010[8]

 

リストを公開したい場合は先ほどの Visibility タブをクリックし、PrivatePublic に変更して Save 。

img03-24-2010[10]

 

参考

2010年3月18日木曜日

Twitter の リストウィジェット を、Google サイト にガジェットとして貼り付ける

1. Twitter のリストをサイトに埋め込みたい

Twitter では、特定のユーザをまとめたリストを作成できる。作成したリストは、公開可能。

この機能を上手く利用しているのがソフトバンクの Twitter 。

Twitter / @SoftBank/sb2009 を見ると、複数のアカウントでキャラクターを使い分け、文章を読みやすくしている。

このようなリスト表示は、仲間内でサイトを運営している場合に便利。メンバーをリストに登録し、それをサイトに埋め込みたい。

Twitter、「リスト」機能の可能性を示す新ウィジェットを公開」 によると

Twitterが発表したList Widgetは、こうしたものがあれば良いのにと、まさに思っていたものだ。これを使えばお気に入りのリストをブログに貼り付けることができる。自分で作ったリストはもちろん、人の作ったリスト(公開リストに限る)でも使うことができるのだ。

 

2. Twitter でリストウィジェットの作成

前提 : Twitter でリストを作成していること。

List Widget に直接アクセス。もしくは、設定画面から辿りたい場合は以下の手順。

Twitter における、

  • 設定 > プロフィール > Web

の `あなたのWEBサイトにもTwitterを表示させよう’ をクリック。

img03-17-2010[3]

自分のサイト > List Widget を選択。

img03-17-2010[4]

ユーザ名を入力して、隣の find lists ボタンを押す。

List Name を選択。

下部の Test settings ボタンを押すと、右側に表示したいリストが表示される。

img03-17-2010[5]

後は左のメニューにある項目を適当に設定し、コードを取得し、サイトに貼り付ける。

※ サイズにおいて、横幅の auto width にチェックを入れておくと、幅一杯に広がってくれるので、後の扱いが楽かも。

 

3. Google Gadget Editor によるガジェットの作成

上記の手順で取得したコードは、JavaScript で記述されている。これを Google サイトに貼り付けたい。しかし、直接 JavaScript のコードを、Google サイトに埋め込むことはできない。そのため、JavaScript のコードを、ガジェットにする必要がある。

Gadgets API - Google Code によると、

ガジェットは、HTML と JavaScript で作成されたシンプルなアプリケーションで、ウェブページや他のアプリケーションに埋め込むことができます。…

作成したガジェットは、iGoogle、Google マップ、orkut など、多数のサイトや製品上で動作します。

 

Google Gadget Editor

Google Gadget Editor (GGE) を使うと、ガジェットを簡単に作成できる。

Google Gadget Editor (GGE)  にアクセスすると Hello, world! の雛形が表示される。

Twitter で作成したリストウィジェットから、ガジェットを作成するには、

Hello, world

と書かれた部分を、List Widget で取得したコードで置き換える。

ModulePrefes tilte 属性の値で、ガジェットのタイトルも変更しておく。

img03-18-2010[1]

エディタ上部の Preview タブに切り替えると、twitter のリストウィジェットが Google のガジェットとして表示される。

エディタ左上の File > Save で、作成したガジェットを保存。予め Google アカウントでログンインしておくこと。これにより作成したガジェットを Goolge がホストしてくれるようだ。

エディタ右隅のガジェットの名前をクリックして URL をコピーしておく。

 

4. Google サイトにガジェットを挿入

Google サイトで、ページの編集モードにして、メニューより

  • 挿入 > その他のガジェット

を選択。

左側のメニューにある 「URL を指定してガジェットを追加」 を選択。右側の URL を入力するフィールドに、先ほどコピーしておいたガジェットの URL を入力して追加。

img03-18-2010[2]

ガジェットのプロパティで 「高さ」 を指定する。おおよその目安として、Twitter のリストウジェットで指定した高さに +100 かな。

img03-18-2010[4]

※ 予めガジェットで高さの初期設定をしたい場合は、「ガジェットの高さの管理」を参照。

 

参考サイト