最近の変更サイトマップ

P4コマンドでファイルが変更済みかどうかを判定する

Perforceでチェックアウト中のファイルに変更があるかどうか──P4Vで言えば、チェンジリストのファイルアイコンが青くなってるかどうか、を調べるにはp4 diff -sr /path/to/fileを使う。ファイルに変更があれば何も返ってこず、変更がなければ与えたファイルのフルパスが返って来る。

■ファイルに変更がある場合
$ p4 diff -sr modified_file.cpp
$

■ファイルに変更がない場合
$ p4 diff -sr no_changes_file.cpp
/path/to/no_changes_file.cpp
$

もっと直接的に確認できる方法は無いのだろうか・・・?

参考サイト

ZFSでディスクを交換する時はgpart backup/restoreが便利

ZFSのプールを構成するHDDを交換する時など、新旧のHDDでパーティション構成をそっくりそのまま同じにしたい場合がある。gpart addでチマチマ目コピーしてもいいのだが、というか今まで自分はそうしてたのだが、gpart backupgpart restoreでパーティション情報をコピー出来ると知った。

使い方は以下のログを見ればご理解頂けるかと。

$ gpart show ada1
=>        34  5860533101  ada1  GPT  (2.7T)
          34           6        - free -  (3.0K)
          40  5858435944     1  freebsd-zfs  (2.7T)
  5858435984     2097151        - free -  (1.0G)

$ gpart show ada2
gpart: No such geom: ada2.

# gpart backup ada1 | gpart restore ada2

$ gpart show ada2
=>        34  5860533101  ada2  GPT  (2.7T)
          34           6        - free -  (3.0K)
          40  5858435944     1  freebsd-zfs  (2.7T)
  5858435984     2097151        - free -  (1.0G)

ada1のパーティションテーブルをada2にコピーしている。typoで変なパーティションを作る事もないし、マジ便利。便宜上「ZFSで〜」というタイトルにしたが、勿論ZFS以外でも有用な技だ。

WindowsのインストーラUSBメモリの作成はWindows USB/DVD Download Toolが便利

Windows 10更新ウイルスが猛威を振るう今日この頃、皆様におかれましてはいかがお過ごしでしょうか。私はと申しますと、メイン環境はMacで未だ10.9でございますので全く関係ない・・・かと思いきや、リビングのサブマシンがWindows 7で殆どまっさらの状態のため、どうせならWindows 10をクリーンインストールして環境構築をしようと思った次第であります。

専用ダウンローダでWindows 10のインストールイメージを取得するわけですが、保存先としてISOイメージかUSBメモリのインストーラを作成するかが選べるわけでございますが、オールドタイプな人間と致しましては何かあった時のためにISOがあれば心強いと思うのでありますな。かといって、インストールにあたっては間違いなくUSBメモリの方が早いし便利なので、ISOイメージからインストーラUSBが作れれば最強ってなところでMS純正?のWindows USB/DVD Download Toolの登場でござる。

ISOイメージとUSBメモリを指定するだけの簡単操作で、WindowsのインストーラUSBメモリが作れちゃう。ブータブルUSBメモリの作成方法を探すとコマンドプロンプトでdiskpartやら何やらしてる例もあるが、このツールの手にかかればどーんなもんだい!てなもんで作れちゃう。Windows 7/8向けとはなっているが、Windows 10のISOイメージからも問題なく作れる。

お試しあれ〜。

Firefoxのフォントレンダリング調整はAnti-Aliasing Tunerが便利

Windowsの最大の欠点と言っても過言ではないのが、フォントのレンダリング品質の低さだ。低いなんて生ぬるいものではなく、スマホはおろかガラケーのフォント描画さえも下回る最低最悪レベルの品質だと思う。

Anti-Aliasing Tuner

気にならない人は気にならないんだろうが、個人的には超気になる。僕はただ、アンチエイリアシングの掛かった綺麗な画面を見たいだけなのに、Windowsだけは未だに最適解が得られないという残念さ。2016年にもなって、何故こんな非生産的な事で悩まなきゃならないのか…。まぁ、MSが問題視してないからどうしようもないよね。レンダラーのみならずフォントそのものがアレだしね、メイリオUIとか、游ゴシック体とか(游ゴそのものは悪く無いがゲイツレンダラとの相性が最悪だと思うのよね)。そんなんだからMacにシェアを奪(ry

と、こんな感じでWindowsのフォント環境についての悪口は幾らでも溢れ出てくるが、愚痴った所で改善されるわけもなし。ここからが本題で、よく使うFirefoxのフォントだけでも綺麗にしようではありませんか。それにはAnti-Aliasing Tunerアドインを使うと便利だ。

ちょっとググっただけでFirefoxのフォントレンダリング設定の情報は様々出てくるが、基本はabout:configで項目をチマチマいじらなければならない。ぶっちゃけ面倒だし、変化もよく分からんしでトライ・アンド・エラーもやり難かった。

本プラグインでは、アンチエイリアシングモードとレンダリングモードを選んでApplyすれば、即座に設定が反映されて非常に便利だ。殆どの場合、これら2つのモードの組み合わせで、好みのレンダリング結果を得られるんじゃなかろうか。どうしても気に入らないって人は、ガンマやコントラストの詳細パラメータを弄ればおk。

自分の環境では、ClearType + Natural Symmetricの組み合わせがよさ気だった。参考程度に調整前と調整後のスクリーンショットを掲載しよう。

C#でローカルのDTDファイルを使うXMLリゾルバを作る

以前、C#でXmlDocumentを作る時にリゾルバでタイムアウトすると書いたが、ようやくローカルのDTDファイルを使ったXMLリゾルバが作れたので、コードをまるっと公開。尚、.NET Framework 4では殆ど同じことを行うXmlPreloadedResolverクラスが追加されているので、使えるならそっちを使うのが良い。悲しいかな、うちは.NET 3.5なのさ……

using System;
using System.Collections.Generic;
using System.Xml;
using System.IO;
 
namespace ProductionKusoGA
{
    class LocalXmlResolver : XmlResolver
    {
        public LocalXmlResolver()
        {
        }
 
        public override System.Net.ICredentials Credentials
        {
            set {  }
        }
 
        public override Uri ResolveUri(Uri baseUri, string relativeUri)
        {
            Uri uri = DocTypeManager.Instance.GetDTDURI(relativeUri);
            return uri != null ? uri : base.ResolveUri(baseUri, relativeUri);
        }
 
        public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn)
        {
            object entity = DocTypeManager.Instance.GetDTDStream(absoluteUri.AbsoluteUri);
            if (entity == null)
            {
                XmlUrlResolver resolver = new XmlUrlResolver();
                entity = resolver.GetEntity(absoluteUri, role, ofObjectToReturn);
            }
            return entity;
        }
 
        class DocTypeManager
        {
            public static readonly DocTypeManager Instance = new DocTypeManager();
 
            public Uri GetDTDURI(string inFPI)
            {
                Uri dtdURI = null;
                URIForFPI.TryGetValue(inFPI, out dtdURI);
                return dtdURI;
            }
 
            public FileStream GetDTDStream(string inURI)
            {
                FileStream stream = null;
                if (DTDStreamForURI.TryGetValue(inURI, out stream) == false)
                {
                    string dtdFile = null;
                    if (DTDFileForURI.TryGetValue(inURI, out dtdFile))
                    {
                        string RESOURCE_DIR = "...";
                        stream = new FileStream(Path.Combine(RESOURCE_DIR, dtdFile), FileMode.Open);
                        DTDStreamForURI.Add(inURI, stream);
                    }
                }
                return stream;
            }
 
            DocTypeManager()
            {
                URIForFPI = new Dictionary<string,Uri>();
                DTDFileForURI = new Dictionary<string,string>();
                DTDStreamForURI = new Dictionary<string, FileStream>();
 
                AddDTD("-//W3C//DTD XHTML 1.0 Strict//EN",      @"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd",       @"path/to/xhtml1-strict.dtd");
                AddDTD("-//W3C//DTD XHTML 1.0 Trasitional//EN", @"http://www.w3.org/TR/xhtml1/DTD/xhtml1-trasitional.dtd",  @"path/to/xhtml1-trasitional.dtd");
                AddDTD("-//W3C//DTD XHTML 1.0 Frameset//EN",    @"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd",     @"path/to/xhtml1-frameset.dtd");
                AddDTD("xhtml-lat1.ent", @"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent", @"path/to/xhtml-lat1.ent");
                AddDTD("xhtml-symbol.ent", @"http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent", @"path/to/xhtml-symbol.ent");
                AddDTD("xhtml-special.ent", @"http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent", @"path/to/xhtml-special.ent");
            }
 
            ~DocTypeManager()
            {
                foreach (var pair in DTDStreamForURI)
                {
                    if (pair.Value != null)
                    {
                        pair.Value.Dispose();
                    }
                }
            }
 
            void AddDTD(string inFPI, string inURI, string inFilepath)
            {
                URIForFPI.Add(inFPI, new Uri(inURI));
                DTDFileForURI.Add(inURI, inFilepath);
            }
 
            Dictionary<string, Uri> URIForFPI { get; set; }
            Dictionary<string, string> DTDFileForURI { get; set; }
            Dictionary<string, FileStream> DTDStreamForURI{ get; set; }
        }
    }
}

DTDファイルのパスを適宜変更し、xmlDocument.Resolver = new LocalXmlResolver();ってな感じで設定してやればおk。DTDを増やしたいときはAddDTDを増やす。DTDが内部で参照しているファイル(上記コードで言えばxhtml-lat1.entとか)も漏れなく追加する必要がある。

一応、コードのライセンスはパブリックドメインってことで。煮るなり焼くなりお好きにどうぞ。

start.txt · 最終更新: 2016-05-07 17:46 by decomo
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0