ZAGG folio

3月末あたりにライフハッカーさんの記事をみて、iPad3用の「ZAGG folio」が欲しくなって注文した。
アメリカ製のため、カーボンだと粗雑に作られている可能性を考慮して、あえて少々高めのレザーケースにしてみた。
iPad2用のは輸入され日本の業者も取り扱っているが、iPad3用のものはZAGG社で直接注文するしか現段階では方法がなかったのでpaypalで安心決済。
注文してしばらく連絡がなかったので不安になっていたところ、「遅くなってごめん」という英語のメールが送られてきた。
おそよ1か月待ちの状態のようで、かなり人気なのだろうか。到着が楽しみである。

(他参考ページ)
http://blog.drikin.com/2011/12/zagg.html
http://lifehacking.jp/2011/12/zagg-folio-for-ipad2/
http://ascii.jp/elem/000/000/630/630992/
http://d.hatena.ne.jp/eamazone/20120322/LogitechKeyboardCasebyZAGGfortheNewiPadAndZAGGfolioiPad3

SharePoint2007で発行ページを最大限に活用する(3)〜新規ページ作成〜

 ドキュメントライブラリでもページを配置できるようになったとして、やはり新規にページを作成する際も便利に使いたいものだ。デフォではドキュメントライブラリの新規ボタンでページを選択しても、デフォルトでは「Pages」固定であるためにページライブラリにできてしまう。できれば今いるドキュメントライブラリのフォルダ階層にページを作成したいところである。

どうやってやるのか当時は思案していたが、結局似たようなことをやっている先人の方にお世話になりました。但し、この方のやり方だとWebサイトにある大方のドキュメントライブラリ内にある全フォルダをサーチしてリスト化し、ドロップダウンから選択させる方法であるため、新規ページを作る時点で多少の時間がかかるし、エンドユーザーがたくさんのリストの中から選択するので手間である。そこで私の方で一手間かけ、もっと便利に「現在のドキュメントライブラリのカレントディレクトリにページを作成」するようカスタムしたものを以下に紹介する。
Why should 'one' always save publishing pages in "Pages" list in MOSS !!! Bend It !!!!
How to Customize (Add, Delete or Replace ) the "Site Action" menu items in Publishing site

なお、デフォルトだと、サーバーサイドスクリプト(<script runat="server"/>で記述)はセキュリティの観点からプロジェクトサイトでは動作できないようになっている。これはシェアポイントハイブ内にaspxファイルを配置&iisresetなどをする必要がある(システム管理者との協議・調整が必要)。

==============
[手順]
(前提)SharePointサイトが以下の条件を満たしていることを確認。
 ・サイトコレクションの機能
   「Office SharePoint Server 発行インフラストラクチャ」がアクティブ
 ・サイトの機能
   「Office SharePoint Server 発行機能」がアクティブ
 ・ドキュメントライブラリ
   ページを配置したいドキュメントライブラリに、発行ページに必要な「コンテンツタイプ」と「列」が定義されていること
   (全部を手動でやるのはキツいので、一度ページライブラリでダミーの発行ページを作成し、これをWindowsエクスプローラを使って対象のドキュメントライブラリへコピーすれば、そのときに自動で作成される)
   「新規ボタンの順序と規定のコンテンツタイプ」でページをライブラリから作成できるボタンが押せるようになっていること

(1)CustomCreatePage.aspxの作成
 シェアポイントハイブ(大抵は"C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\")に行き、「CreatePage.aspx」をコピーして、「CustomCreatePage.aspx」ファイルを同ディレクトリに作成する。
 ここからいくつかの変更を行っていく。

 ・OnLoad関数の追加(25行目あたりの<script runat="server">の直後)
  ここでCustomCreatePage.aspxが呼ばれたときに付加されているクエリ文字列を取得します。RootFolderを取得することで、どこのドキュメントライブラリのどのフォルダから「新規ページ作成」アクションが呼ばれたかがわかります。なお、このaspxが呼ばれた時点で(ドキュメントライブラリではなく)既にページライブラリを指していますので、「SPList list = SPContext.Current.List;」を使うのは無意味です。また、参考までに現在のリストライブラリを取得する方法は「string listID = (string)Request.QueryString["List"]; SPList list = SPContext.Current.Web.Lists[new Guid(listID)];」となります。

     // mizop customize
     protected override void OnLoad(EventArgs e)
     {
          base.OnLoad(e);

          // クエリ文字列から"RootFolder"を取得し、アイテムとして追加 --> これがページ作成先のディレクトリとなる
          string rootFolder = (string)Request.QueryString["RootFolder"];
          ddlDocLib.Items.Add(new ListItem(rootFolder, rootFolder));
     }

 ・OnCustomSubmit関数のオーバーライド
  ページ作成ボタンを押した時に呼ばれる関数です。ページをカレントディレクトリに作成し、リダイレクトするよう変更しています。

    protected void OnCustomSubmit(Object sender, EventArgs e)
    {
         //Response.Write("In the same way it should work for other page");
         string newPageUrl = "";
         SPWeb web = SPContext.Current.Web;
         PublishingWeb publishingWeb = PublishingWeb.GetPublishingWeb(web);
         PageLayout[] layouts = publishingWeb.GetAvailablePageLayouts();
         
         int layoutItemId = Convert.ToInt32(pageTemplatePicker.SelectedValue);
         
         //SPListItem itemById = publishingWeb.Web.Site.RootWeb.GetCatalog(SPListTemplateType.MasterPageCatalog).Items.GetItemById(layoutItemId);

         PageLayout layout = FindLayoutById(layoutItemId,publishingWeb);

        // = layouts[itemById];

         string pageName = urlNameTextBox.Text + ".aspx";
         
       //  PublishingPage newPage = publishingWeb.GetPublishingPages().Add(ddlDocLib.SelectedItem + "/" + pageName, layout);
         PublishingPage newPage = publishingWeb.GetPublishingPages().Add(ddlDocLib.SelectedItem.Value + "/" + pageName, layout);
         newPageUrl = web.Url + "/" + newPage.Url;
         
         newPage.Title = titleTextBox.Text;

         newPage.Description = descriptionTextBox.Text;

         newPage.Update();
         Response.Redirect(newPageUrl);
    }

 ・FindLayoutById関数の追加
  クリックイベントで使われるメソッドです。これも追加してください。

    protected PageLayout FindLayoutById(int layoutItemId, PublishingWeb localPublishingweb)
    {
         SPListItem itemById = localPublishingweb.Web.Site.RootWeb.GetCatalog(SPListTemplateType.MasterPageCatalog).Items.GetItemById(layoutItemId);
         if (itemById == null)
         {
             return null;
         }
         return new PageLayout(itemById);
    }

 ・<asp:Label ID="parentUrlLabel" runat="server" />ラベルを探し、Visibleパラメータを"false"に変更します。ここは"Pages"リストがハードコーディングされているラベルです。背後のクラスがプログラム内で参照しているので、このラベルは削除してはいけません(エラーとなるでしょう)。

<asp:Label ID="parentUrlLabel" runat="server" Visible="false" />

 ・上記"parentUrlLabel"ラベルの直後に以下を追加してください。これを追加することでドロップダウンリストを表示できます。

<asp:DropDownList ID="ddlDocLib" runat="server"></asp:DropDownList>

 ・最後に最下行あたりにある、カスタムイベント用の発行ページ作成ボタンServerclickプロパティを変更します。

<asp:Button runat="server" class="ms-ButtonHeightWidth" OnClick="OnCustomSubmit" Text="<%$Resources:cms, createpage_createbutton%>" id="buttonCreatePage" AccessKey="<%$Resources:cms,createbutton_accesskey%>"/>

(2)iisreset
 ・システム担当者に「iisreset」コマンドを実行してもらい、Webサーバ、SharePointサーバの再起動をかけてもらう。
  (これ以降、CustomCreatePage.aspxを変更した後、反映する度に再起動が必要となる)

(3)ページ作成時のテンプレート設定(各ドキュメントライブラリごと)
 ドキュメントライブラリの設定>リストコンテンツタイプ>ページ>詳細設定と辿り、「既存のドキュメントテンプレートのURLを入力する」欄を以下のように変更する。

/_layouts/CustomCreatePage.aspx

(4)本当はCustomSiteAction.xmlの編集も必要とのことだったが、(3)をやれば必要ないみたい(CustomSiteAction.xmlは何も変更せずに新規ページがちゃんとカレントディレクトリに作成できている)。

SharePoint2007で発行ページを最大限に活用する(2)〜ドキュメントライブラリの改造〜

(3年前の記事の転用)

 通常の場合、「発行ページ」は発行機能が有効なサイトのページライブラリでしか利用できない。しかも、ページライブラリの「新規ページ」の作成場所を見ると「Pages」直下しか選べないようになっている。Microsoftが想定している使い方として1階層にどんどん作っていくことを想定しており、フォルダ階層は何も意識していないようだ。
ただ、普通にWebサイトを作る場合、エンドユーザーが用途に応じてフォルダ分けなどをし、パスをいくつも用意して利用するのが一般的だ。従って、ここでフォルダ階層のカスタムが生じてくる。また、一般的にはWebページと合わせて、画像やテキスト、Office文書などが混在した形が普通だ。したがって、ページライブラリではなく、ドキュメントライブラリで発行ページが利用できるのが望ましい(カスタム2)。
 このため、まず実験を行ったのが、「発行ページ」をフォルダ分けできるのかどうかということである。新規ページは相変わらずページライブラリのルートに作成されるが、ページライブラリをWindowsエクスプローラで開き、先ほど作成したページをフォルダ内に移動すると、問題なく移動され表示も移動前と比べて問題ないことがわかった。その次にドキュメントライブラリへ移植できるのかどうか実験したが、発行ページで必要なコンテンツタイプが移動先のドキュメントライブラリに存在していれば、問題なく移動できる(私の環境の場合、「ページ」「アーティクルページ」「ウェルカムページ」の3つ)。このコンテンツタイプは予めドキュメントライブラリごとに設定しておく必要があるので、サイト構築を始める前にドキュメントライブラリのカスタムテンプレートやサイトのカスタムテンプレートをあらかじめ作成しておいて、標準ではなくカスタムを使って作成しておくことが望ましい。
 また、ドキュメントライブラリのカスタムテンプレートに、雛形のページをいくつかテンプレートファイルとして用意しておくといいだろう。(3)でもっといいカスタムを紹介するが、Windowsエクスプローラを利用するユーザであれば、わざわざページライブラリで新規ページを作成しなくても同一のドキュメントライブラリ内で作業が完結する。

<補足>
 なお、SharePoint2007には発行ページと似て非なるものとして「Wiki」がある。Wikiは元々階層ごとに整理するといった概念はなく、フラットにどんどんとファイルが作成されていく(階層に移動すると挙動もちょっとおかしくなる(そんな使い方は想定外というところだろう))。手軽に利用できる反面、上記の使い方ができないし、ページレイアウトでデザイン管理もできないので私は採用しなかった。

SharePoint2007で発行ページを最大限に活用する(1)〜概要〜

(3年前の記事の転用)

 私は以前からSharePoint2007のプロジェクトサイトの管理者の一人(技術担当)なので、エンドユーザー(プロジェクトメンバー)にSharePointを活用してもらえるよう、色々と工夫しなければならない立場におかれてきた。普通のWebサイトと比べ、Microsoftの独自機能が満載なため、使う側からするととっつきにくいという意見が当初多かったからだ。
 SharePointで積極的に活用したいものとして以前から使用し続けているものに「発行ページ」機能がある。これは一般的にはCMS用に使われるものではあるが、
ーーーーーーーーー
(1)リッチHTMLフィールドがページに埋め込まれている
 ・このフィールドはすぐに編集が可能
 ・書きこんだHTMLはページに埋め込まれるので、移動しても情報が無くなる事はない
 ・このHTMLフィールドと類似するものとして「コンテンツエディタWebパーツ」があるが、エンドユーザーから見ても、このWebパーツのHTMLを変更するためには三回ぐらいボタンを押さないと変更できない不便さがある
 ・また運用面からみてもページをWindowsエクスプローラでコピー/移動したりDLすると、当然Webパーツは無くなってしまうのでメンテしにくいというデメリットがある

(2)タイトルやナビゲーションバーがトップ/サイドに表示された状態でページが表示されるので、見やすい
 ・HTMLだとaspは処理できないのでこうはいかない

(3)必要であればWebパーツをいくらでも追加できる
 ・管理者側でページレイアウトはいくつか用意し、よく使われるものは構成をフレキシブルにしておく

(4)SharePointと連動し、チェックイン/チェックアウト機能が利用しやすい
 ・ページ上で編集可能なので、いちいちライブラリのリストを表示してチェックイン/チェックアウトをしなくてよい

(5)ページレイアウトの管理下に置く事ができる
 ・ページレイアウトのデザインを変更すれば、一括してページのレイアウトを変更できる
  (ただし、もともと備えていたWebパーツ領域を削除すると、エンドユーザーが設定していたWebパーツが軒並み消えてしまうので注意(追加か領域変更ぐらいにとどめておくべき))
ーーーーーーーーー
という利点があり、1プロジェクトの情報をWebにまとめるには良いとして、この機能を推進してきた。ただし、いくつか使い勝手の悪いところがあったため、色々とカスタマイズしている(これについては別途、述べていくことにする)。

Windows7おれおれ設定

Windows7をいつまたインストールしなおすかわからないので、ここに書き連ねておく。昔は自分で運営していたWSS3.0サーバー+光回線でこういった情報を管理していたものだが、公開してもぜんぜんかまわないものなのでここに記載しようと思いました。
(この記事は徐々に増やしていく予定)
=================================================

ランチャー

BlueWind(XP SP3互換)

 キーバインドWindows7では設定できないっぽいので(設定しても元に戻ってしまう・・)、WinXPで使用していた設定をそのままzipで固めてコピー。
 Alt+QでBlueWind窓起動に割り当てている。
 管理者として実行にチェックを入れる。
 スタートアップに登録しておく。

バージョン管理

git

Git UTF8版のインストール(標準だとパスワード部分でハングして落ちるので)
TortoiseGit x64版の最新をインストール(日本語化は行わない(英語のまま利用))
 必要なリポジトリを全てBitBucket/GitHubからクローンする。

ブラウザ

IE9

メニューバー、ステータスバーを出す。
 楽天ツールバーのインストール。
 ダウンロードダイアログのオプションを開き、DL先をデスクトップへ変更。
あまり使わないブラウザだが、SharePointサイトを閲覧・編集する時にどうしても必要になる。

FireFox

 デフォブラウザに設定。
 楽天ツールバーのインストール。
 DL先をデスクトップへ変更。
起動したときは「前回終了時のウィンドウとタブを表示する」に設定。
IEエンジンも動作するよう、IE Tab V2を入れておくこと(IE Tab + 2.0じゃない)。

アーカイバ

lhaz(x64)

 可能なすべての拡張子を関連付けする。

開発ツール

Visual Studio 2008 Express Edition(x64)

WebインストーラーをDLして実行すれば、環境に応じてx86/x64の適切な方をインストールしてくれる。インストールが完了したら、念のためVisual Studioを起動しておくこと。

クラウド

EvernoteFirefox Pluginも)

 クラウドはもう一つ、YahooBoxも使っているがYahooBB会員につき容量が50GBあるので、こっちはWebのみで利用とする。

エディター

Vim(Kaoriya)

-->メインエディタ

Sakura

 -->文字コード変換のみで使っている

ファイラー

WinFD(XP SP3互換)

 管理者として実行にチェックを入れる。
 スタートアップに登録。
 右クリックのコンテキストメニュー、フォルダアイコン表示、フォントを少し大きく設定。
 Susie、WinFD Toolでゴミ箱利用+Ctrl+C/Ctrl+Vを利用可能にする。
 デザイン的に透過をいれる。

エクスプローラ

 
 右図のように辿りメニューバーを出す。詳細ウィンドウとナビゲーションウィンドウも表示させておく。
 メニュー>ツール>フォルダーオプション>「表示」タブを選択して、一覧の中から「登録されている拡張子は表示しない」のチェックをはずす。
 メニュー>表示>一覧に変更。
 そのまま、メニュー>ツール>フォルダーオプションを開き、「表示」タブから「フォルダーに適用」ボタンを押して、全ての階層において一覧で表示されるようにする。
 また、「隠しファイル、隠しフォルダー、および隠しドライブを表示する」の方にラジオボタンを設定しておく。

(※Vistaの頃からずっと思っているのだが、なぜMicrosoftは自社製品のレイアウトをコロコロ変えたりしてしまうんでしょう、毎回ほんとに混乱してしまう。あとなぜメニューをデフォルトでオフに設定し始めたのでしょう。シンプルさを強調して誰でも使えるということをアピールしているのだろうが、非常に困ります)

トリプルディスプレイ

家のiMacは27インチのMC814J/Aなので、Thunderboltポートが2つあり普通にトリプルディスプレイを実現できていて、非常に快適だ(BootCampのWindows7Proは2つ)。
だが、Endeavor Pro5000ではトリプルは無理なようだ。ZOTAC GeForce GTX 580というグラボが載っているが、実験したところ3つのディスプレイを認識するも同時には2ディスプレイまでの仕様だった。
===============================
Endeavor Pro5000
http://shop.epson.jp/pc/pro5000/point/
ZOTAC GeForce GTX 580
http://pdjp.zotac.com/index.php?page=shop.product_details&flypage=flypage_images.tpl&product_id=293&category_id=129&option=com_virtuemart&Itemid=1

nFringe

Visual Studio 2008 Express Edition + 2008shell + nFringe(非商用ライセンス)を試してみた。
いくつかのバージョンを試したが、ver1.2 preview版でないとデバッグ機能が動作しなかった。
またver1.2では、ライセンスマネージャーで非商用の登録をする必要があり、これをしないとデバッグ機能を利用することができない(登録しない状態では、「UScriptプロジェクトの作成」「デバッグなしで実行」などは可能)。

非商用ライセンスの場合、デバッグ機能はUDK環境に限定して使用可能(UE3ライセンシーの環境では非商用ライセンスで(ほかは行えるが)デバッグは行えない。商用ライセンスを購入する必要あり)。

今のところ、Visual Studio 2008でnFringe 2.x系を使うのがベストと思われる。Visual Studio 2008だとちゃんとシンタックスハイライトされ、ソース内のクラスや関数の定義にジャンプすることができる。Visual Studio 2010だと、私の環境では(デバッグは可能だが)どちらも機能しなかった。

(古いバージョンでは、相対パスだとうまくいかず絶対パスを入れる必要があったり、
そもそもコンパイルしてくれなかったり、ブレークポイントを置いた状態でデバッグ実行するとUDK.exeがハングするという散々な結果に)

しかし、これはいいツールだ!