もともとIEとFireFoxのお気に入りをGoogleツールバーで管理していた。そこにChromeが入ってきて、てっきり同じように管理できるものだと思っていたら、お気に入り同期機能は統合されなかった。 ナゼ?
各ブラウザでなんとかお気に入りを統合して管理できないかと、思っていたがXmarksという拡張機能がよさそうなので試してみた。
もともとFireFox用のプラグインでFoxMarksとして開発されていたらしく、FireFox向けのものが一番完成度が高い。Chromeに新規でインストールしたところ、ブックマークバーのお気に入りが同期されない状態が発生したが、FireFox上のプラグインからサーバーのお気に入りを上書きし、Chromeにてローカルのお気に入りを上書きしたところ正しく同期できた。
あと、Chrome上で同期に失敗していた時は裏でダイアログが出ている事に気付かなかった事が原因だったもよう。
とりあえず、Googleのお気に入り同期を無効にして運用できそう。
IE用のプラグインはタスクバーに表示されるのが予想外だったw
GGoogle ChromeでGoogle Bookmarksを使うのに一番好さそうなExtensionはBoogleMarks。
設定画面はこんな感じで、区切り文字とか、ソート基準を指定できるのが最高。

複数のPDFファイル一つのファイルにまとめるにはiTextSharpを使う。こちらを参考にさせて頂きました。これによって、結合できるがWebアプリ上でテンポラリファイルを生成とかカッコ悪い。
ということで、MemoryStreamに対応させました。が・・・copy.close時にMemoryStreamが閉じられてしまう。とりあえず、doc.close();とcopy.close();をコメントにしてみると、ファイル上で結合したものと比較して末尾が切れてる。
結局、
copy.CloseStream = false
がポイントでした。
public static void fnJoinPdf(MemoryStream ms1, MemoryStream ms2, MemoryStream msJoin)
{
Document doc = null; // 出力ファイルDocument
PdfCopy copy = null; // 出力ファイルPdfCopy
MemoryStream[] aryMsStream = { ms1, ms2 }; // 入力ファイルを配列化
try
{
//-------------------------------------------------------------------------------------
// ファイル件数分、ファイル結合
//-------------------------------------------------------------------------------------
for (int i = 0; i < aryMsStream.Length; i++)
{
// リーダー取得
PdfReader reader = new PdfReader(aryMsStream[i].ToArray());
// 入力ファイル1を出力ファイルの雛形にする
if (i == 0)
{
// Document作成
doc = new Document(reader.GetPageSizeWithRotation(1));
// 出力ファイルPdfCopy作成
copy = new PdfCopy(doc, msJoin);
copy.CloseStream = false;
// 出力ファイルDocumentを開く
doc.Open();
// 文章プロパティ設定
doc.AddKeywords((string)reader.Info["Keywords"]);
doc.AddAuthor((string)reader.Info["Author"]);
doc.AddTitle((string)reader.Info["Title"]);
doc.AddCreator((string)reader.Info["Creator"]);
doc.AddSubject((string)reader.Info["Subject"]);
}
// PDFコンテンツを取得、copyオブジェクトに追加
for (int iPageCnt = 1; iPageCnt <= reader.NumberOfPages; iPageCnt++)
{
PdfImportedPage page = copy.GetImportedPage(reader, iPageCnt);
copy.AddPage(page);
}
// フォーム入力を結合
PRAcroForm form = reader.AcroForm;
if (form != null)
copy.CopyAcroForm(reader);
// リーダーを閉じる
reader.Close();
}
}
finally
{
if (copy != null)
copy.Close();
if (doc != null)
doc.Close();
}
}
- 最新技術や凝った作りこみをしない
- 同じ事ができるレベルまで部下を育てるのはコスト?
- それをメンテする人間も大変だ。
- 外部へ頼めない事をする
- 予算があったらその仕事は社外に出せるのでは?
- どんなシステムにして欲しいと思っているかを汲み取るべき。
- 運用開始してから、要望を聞いているか?
- 社内の調整はシステムの設計よりも重要。
- 利用する部署の和を持ってよしとする
- 利用できないシステムは作る必要も無い。
- 多くの部署で利用されるシステムほど調整も大変だが、メリットも大きい。
- 技術的な観点から、断らない事
- ユーザーの要望はあくまで理想。
- どこまで理想に近づけるかがポイント。
偉そうな事を書いてますが、残念ながら最近の反省です・・・。
メリット
- SQL Serverが稼働していれば、データ抽出が楽。
- ActiveDirectoryで認証できるハズ。
- WindowsLiveWriterで編集できる。
参考サイト

- まずDBをBlogEngineという名前で用意する
- \BlogEngine.Web\setup\SQLServer内にあるMSSQLSetup1.5.0.0.sqlを実行し必要なテーブルを作成
- BlogEngine(例)というユーザーを作成し、必要が権限を与える。
- \BlogEngine.Web\setup\SQLServer内にあるSQLServerWeb.Configを参考にWeb.configを修正する。
ActiveDirectoryでのユーザー認証はBlogEngineでActiveDirectory認証を参考にしたがうまく行かず。SQL Serverを利用するようにした設定とうまくかみ合ってないのかも。
LS-WH1.0TGL/R1あたりだと容量が足らなくなってきたのでNEC 5800/110Geをファイルサーバーにしてみることに。
NEC 5800/110Geの共有ドライブ
体感でもかなり速い。OSはFreeNASも考えたけど、諸事情でWindows Home Server。消費電力を考えるとNASだけど、NASの容量が足らなくなってNAS2台とかよりは良いかな。
JavaScript上で扱うIDが自動生成となる為、ID指定部分をサーバー上で生成する必要がある。
test.aspx (変更前)
<A href="Javascript:TestProc(document.forms[0].textBox1.value, ‘AAAA’)" />
↓
test.aspx (変更後)
<A href="#" id="alnk1" runat="server"/>
test.aspx.vb
(フォームロードあたりで)
Me.alnk.HRef = ("Javascript:TestProc(document.forms[0]." & textBox1.ClientID & ".value, ‘AAAA’)"
※String.Formatを使った方が良いです。あくまでサンプルという事で。JavaでOpenしたWindowから制御させるには、Open時にオブジェクト名を渡してスクリプト生成。
FindControl("TextBox1") → Master.FindControl("コンテンツID").FindControl("TextBox1")
XPProの再インストールメモ。
あとひとつ不明なデバイスがあるけど、無視。音量ボタンとか、アプリケーションキー関係が動いてない。
秀丸などで、文字のエンコーディングをShift-JISなどからUTF-8へ*.aspxファイルを変更するとそれまで正常に表示できていたページも文字化けする。
原因は、BOMデータが無くなる為。Diffを見ると先頭行で相違が出る。テキストエディタがBOM対応していると違いが判らないのでちょっとハマった。

解決方法は、メモ帳で開いて上書き保存するだけ。
最近非常にのんびりしていますが、今年もよろしくお願いします。今年の個人的な目標は、
- Webサイトの構築
- サービスもしくはソフトウェアの公開
を目指したいと思います。
あとは、会社間を跨いで運用や開発のノウハウを集約できないかな・・・と漠然と考えていますが、先が見えません。一緒に悩んでくれる方募集中です。