それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Windowsでシンボリックリンクを作る方法

C:\>mklink
シンボリック リンクを作成します。

Windowsでもシンボリックリンクが作れます

C:\>mklink /D c:\programfiles "c:\Program Files"
c:\programfiles <<===>> c:\Program Files のシンボリック リンクが作成されました

"Program files"という半角スペースフォルダが鬱陶しいので、シンボリックリンクで逃げます.
プログラミングをしていると意外と重要なハックだったりします.Windowsの半角スペースの既定ディレクトリ避け.

昔からアレコレ試したが,シンボリック リンクが手軽で良い.

シンボリックリンクとショートカット作成を比べてみる

プロパティーを比べてみても違う


dir コマンドで見てみても違う

C:\>dir
 ドライブ C のボリューム ラベルは SSD です
 ボリューム シリアル番号は 8813-3EF9 です

 C:\ のディレクトリ

2009/06/11  06:42                24 autoexec.bat
2009/06/11  06:42                10 config.sys
2009/07/14  11:37    <DIR>          PerfLogs
2011/08/30  11:03    <DIR>          Program Files
2011/08/30  14:30               960 Program Files - ショートカット.lnk 
2011/08/30  14:18    <SYMLINKD>     programfiles [c:\Program Files]
2011/02/08  05:00    <DIR>          Users
2011/07/28  14:53    <DIR>          Windows
               3 個のファイル                 994 バイト
               5 個のディレクトリ  32,773,091,328 バイトの空き領域

二つを見比べてみる

2011/08/30  14:30               960 Program Files - ショートカット.lnk #タダのファイル
2011/08/30  14:18    <SYMLINKD>     programfiles [c:\Program Files]    #ディレクトリ扱いのシンボリックリンク

ちゃんとCDが出来ます.

cd C:\programfiles
C:\programfiles>

ショートカット作成とは違うのだよ.ショートカット作成とは


cygwin で symlink はwindowsから作ると便利!ってエントリ書いたのに作り方を忘れていたので再掲

ちなみにmklink コマンドの使い方

C:\>mklink
シンボリック リンクを作成します。

MKLINK [[/D] | [/H] | [/J]] リンク ターゲット

        /D          ディレクトリのシンボリック リンクを作成します。既定では、
                    ファイルのシンボリック リンクが作成されます。
        /H          シンボリック リンクではなく、ハード リンクを作成します。
        /J          ディレクトリ ジャンクションを作成します。
        リンク      新しいシンボリック リンク名を指定します。
        ターゲット  新しいリンクが参照するパス (相対または絶対)
                    を指定します。


シンボリックリンクより実体ディレクトリ臭い動きをするならジャンクションやハードリンクも使えますね.symbolic link もっと普及すると良いのに.

http://d.hatena.ne.jp/takuya_1st/20110705/1309896867

OperaでAmazonのショッピングカートが「今は買わない」「カートに戻す」が動かない問題

2012-01-18追記

Amazonが年明けから仕様変更になってまた動作不良になりました。


以下の情報は古いです。

現在は、「完全にFireFoxとして認識させる。」で動くようです。

AmazonではまともにJavaScriptを扱えない人が仕事しているようです。

OperaFireFoxで動く。っていうかUserAgent単位で配信JS変えているなら、はじめからOpera用にそれを送れば良いのに。

以下は昔の資料。

アマゾンでショッピングカートがOperaで動かない.

「削除」「今は買わない」「カートに戻す」が動かない.

削除は困らないが,今は買わないが困る.AmazonのJPの人の所為だと思うんですけど・・・・何ともなりそうにないので,対策する.

原因をし調べた結果

Amazonの問題でOperaが誤作動しているっぽいjQueryのロードに失敗しているのですね

なのでUser JavaScriptjQueryをロードすればいい

Amaoznのカートボタン修正用.js

// ==UserScript==
// @include http://www.amazon.co.jp/gp/cart/*
// ==/UserScript==
document.addEventListener('DOMContentLoaded', function() {
  //実行したい処理
  src     = "https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js";
  sc      = document.createElement("script")
  sc.type = "text/javascript"
  sc.src = src
  document.body.appendChild(sc);
},false);


jQueryのロードが何で失敗したかは分らない.でもjQueryオブジェクトが見つからないエラーが出ているのでコレで解決ですね.

これで明日からまたブイブイ買い物できます.

tidyコマンドでXMLインデント整形する

tidy 便利です.XMLも整形できます.送ってもらったXMLがインデントなしで、CDATAがあふれかえっているので、チョッと困ったので整形することにした.

XML整形で一番よく使うオプション

tidy --indent-cdata true -xml -utf8 -i ./sample.xml 

上に,出力ファイル名を加えたもの

tidy --indent-cdata true -xml -utf8 -i -o sample_out.xml ./sample.xml 

XMLを整形してインデントして,CDATAを整形してインデントしてくれる

たとえば

<?xml version="1.0"?><a><b/><content><![CDATA[これはテスト]]></content></a>

<?xml version="1.0"?>
<a>
  <b />
  <content>
    <![CDATA[これはテスト]]>
    </content>
</a>

になり格段に見やすくなる

出力ファイルは、入力ファイルより前に置くのがミソ

出力が入力より先なのでビックリする

--XXXX true オプションは全ての -X より前に置くのがミソ

--config-name value は -i などよりも前に置くとウマく解釈してくれる

ちなみに整形済みを元に戻すなら

 tidy  -xml -utf8 ./out.xml 2>/dev/null| tr -d '\n' > reverse.xml

かなぁ
tr 活用で,改行削除して スペースなしの一行XMLを作る.

折り返し無し

tidy のXML整形は、68を超えた行分はそこに収まるように 属性を折り返してくれる。attribute まで折り返さなくても良いんですが.そもそも折り返しはあんまり要らなかったりする.極端に多量の属性使うならノード使う方が良いよね?XMLって

tidy --wrap 0 --indent-cdata true -xml -utf8 -i 

wrap 0で折り返しを無効にする.出力は属性の折り返しなしで,1ノードが1行に収まって、インデントついて便利

tidy のインストール

本家からダウンロード
HTML Tidy Project Page

windows は

Windows版

linux

Linux は yum / apt から

cygwin

ビルド

ビルド方法

cygwin には tidy が無かったのでmake しました

コマンド

wget -O tidy.tar.gz http://tidy.cvs.sourceforge.net/viewvc/tidy/?view=tar
tar zxvf tidy.tar.gz
/bin/sh build/gnuauto/setup.sh
./configure
make
make install

setup.sh で configure を作るあたりがチョッとつまりどころ

やりたいこと。はXML整形

tidy でXMLを整形して読みやすくする

tidy のヘルプを読んでみる

./tidy -h
>tidy [option...] [file...] [option...] [file...]
>Utility to clean up and pretty print HTML/XHTML/XML
>See http://tidy.sourceforge.net/
>
>Options for HTML Tidy for Cygwin released on 25 March 2009:
>
>File manipulation
>-----------------
> -output <file>, -o  write output to the specified <file>                      
> <file>                                                                        
> -config <file>      set configuration options from the specified <file>       
> -file <file>, -f    write errors and warnings to the specified <file>         
> <file>                                                                        
> -modify, -m         modify the original input files                           
>
>Processing directives
>---------------------
> -indent, -i         indent element content                                    
> -wrap <column>, -w  wrap text at the specified <column>. 0 is assumed if      
> <column>            <column> is missing. When this option is omitted, the     
>                     default of the configuration option "wrap" applies.       
> -upper, -u          force tags to upper case                                  
> -clean, -c          replace FONT, NOBR and CENTER tags by CSS                 
> -bare, -b           strip out smart quotes and em dashes, etc.                
> -numeric, -n        output numeric rather than named entities                 
> -errors, -e         show only errors and warnings                             
> -quiet, -q          suppress nonessential output                              
> -omit               omit optional end tags                                    
> -xml                specify the input is well formed XML                      
> -asxml, -asxhtml    convert HTML to well formed XHTML                         
> -ashtml             force XHTML to well formed HTML                           
> -access <level>     do additional accessibility checks (<level> = 0, 1, 2, 3).
>                     0 is assumed if <level> is missing.                       
>
>Character encodings
>-------------------
> -raw                output values above 127 without conversion to entities    
> -ascii              use ISO-8859-1 for input, US-ASCII for output             
> -latin0             use ISO-8859-15 for input, US-ASCII for output            
> -latin1             use ISO-8859-1 for both input and output                  
> -iso2022            use ISO-2022 for both input and output                    
> -utf8               use UTF-8 for both input and output                       
> -mac                use MacRoman for input, US-ASCII for output               
> -win1252            use Windows-1252 for input, US-ASCII for output           
> -ibm858             use IBM-858 (CP850+Euro) for input, US-ASCII for output   
> -utf16le            use UTF-16LE for both input and output                    
> -utf16be            use UTF-16BE for both input and output                    
> -utf16              use UTF-16 for both input and output                      
> -big5               use Big5 for both input and output                        
> -shiftjis           use Shift_JIS for both input and output                   
> -language <lang>    set the two-letter language code <lang> (for future use)  
>
>Miscellaneous
>-------------
> -version, -v        show the version of Tidy                                  
> -help, -h, -?       list the command line options                             
> -xml-help           list the command line options in XML format               
> -help-config        list all configuration options                            
> -xml-config         list all configuration options in XML format              
> -show-config        list the current configuration settings                   
>
>Use --optionX valueX for any configuration option "optionX" with argument
>"valueX". For a list of the configuration options, use "-help-config" or refer
>to the man page.
>
>Input/Output default to stdin/stdout respectively.
>Single letter options apart from -f may be combined
>as in:  tidy -f errs.txt -imu foo.html
>For further info on HTML see http://www.w3.org/MarkUp
>

めんどくさそう・・・・

tidy でXMLのインデントを修正してみる

help ファイルを元にコマンドを考えてみる.

tidy -i -xml -utf8 sample.xml

CDATAがインデントされなくて崩壊する

出力ファイルを指定する
tidy -o out.xml -i -i -utf8 sample.xml
  • o オプションはインプットファイルより前に指定しないと動かなかった.

更に調べると,

より細かいオプションは

 tidy --input-xml true

のように --option-name true
または、 --option-name value

で指定する.とわかる

--XXXは何か

より詳細なオプションと言う位置づけっぽい

詳細オプションを全部見てみる

./tidy -show-config

>
>Configuration File Settings:
>
>Name                        Type       Current Value                           
>=========================== =========  ========================================
>accessibility-check         enum       0 (Tidy Classic)                       
>add-xml-decl                Boolean    no                                     
>add-xml-space               Boolean    no                                     
>alt-text                    String                                            
>anchor-as-name              Boolean    yes                                    
>ascii-chars                 Boolean    no                                     
>assume-xml-procins          Boolean    no                                     
>bare                        Boolean    no                                     
>break-before-br             Boolean    no                                     
>char-encoding               Encoding   ascii                                  
>clean                       Boolean    no                                     
>css-prefix                  String                                            
>decorate-inferred-ul        Boolean    no                                     
>doctype                     DocType    auto                                   
>doctype-mode                Integer   *1                                      
>drop-empty-paras            Boolean    yes                                    
>drop-font-tags              Boolean    no                                     
>drop-proprietary-attributes Boolean    no                                     
>enclose-block-text          Boolean    no                                     
>enclose-text                Boolean    no                                     
>error-file                  String                                            
>escape-cdata                Boolean    no                                     
>fix-backslash               Boolean    yes                                    
>fix-bad-comments            Boolean    yes                                    
>fix-uri                     Boolean    yes                                    
>force-output                Boolean    no                                     
>gnu-emacs                   Boolean    no                                     
>gnu-emacs-file              String                                            
>hide-comments               Boolean    no                                     
>hide-endtags                Boolean    no                                     
>indent                      AutoBool   no                                     
>indent-attributes           Boolean    no                                     
>indent-cdata                Boolean    no                                     
>indent-spaces               Integer    2                                      
>input-encoding              Encoding   latin1                                 
>input-xml                   Boolean    yes                                    
>join-classes                Boolean    no                                     
>join-styles                 Boolean    yes                                    
>keep-time                   Boolean    no                                     
>language                    String                                            
>literal-attributes          Boolean    no                                     
>logical-emphasis            Boolean    no                                     
>lower-literals              Boolean    yes                                    
>markup                      Boolean    yes                                    
>merge-divs                  AutoBool   auto                                   
>merge-spans                 AutoBool   auto                                   
>ncr                         Boolean    yes                                    
>new-blocklevel-tags         Tag names                                         
>new-empty-tags              Tag names                                         
>new-inline-tags             Tag names                                         
>new-pre-tags                Tag names                                         
>newline                     enum       LF                                     
>numeric-entities            Boolean    no                                     
>output-bom                  AutoBool   auto                                   
>output-encoding             Encoding   ascii                                  
>output-file                 String                                            
>output-html                 Boolean    no                                     
>output-xhtml                Boolean    no                                     
>output-xml                  Boolean    no                                     
>preserve-entities           Boolean    no                                     
>punctuation-wrap            Boolean    no                                     
>quiet                       Boolean    no                                     
>quote-ampersand             Boolean    yes                                    
>quote-marks                 Boolean    no                                     
>quote-nbsp                  Boolean    yes                                    
>repeated-attributes         enum       keep-last                              
>replace-color               Boolean    no                                     
>show-body-only              AutoBool   no                                     
>show-errors                 Integer    6                                      
>show-warnings               Boolean    yes                                    
>slide-style                 String                                            
>sort-attributes             enum       none                                   
>split                       Boolean    no                                     
>tab-size                    Integer    8                                      
>tidy-mark                   Boolean    yes                                    
>uppercase-attributes        Boolean    no                                     
>uppercase-tags              Boolean    no                                     
>vertical-space              Boolean    no                                     
>word-2000                   Boolean    no                                     
>wrap                        Integer    68                                     
>wrap-asp                    Boolean    yes                                    
>wrap-attributes             Boolean    no                                     
>wrap-jste                   Boolean    yes                                    
>wrap-php                    Boolean    yes                                    
>wrap-script-literals        Boolean    no                                     
>wrap-sections               Boolean    yes                                    
>write-back                  Boolean    no                                     
>
>
>Values marked with an *asterisk are calculated 
>internally by HTML Tidy
>

オプションが反映される様子

オプションをつけたら値が反映されることを確認.

tidy --indent-cdata true -show-config  > ./tidy.config

以上からXMLの整形は細かく指定できる

tidy --tab-size 2 --input-encoding utf8 --input-xml true --indent-cdata true -show-config  > ./tidy.config

などとすればオプションが変えられる
オプションの名前を間違えると,オプション値が入力ファイル名に解釈されるので注意が必要

Cygwinを使ってWindowsのHomeとLinuxっぽくHomeを共有する

Cygwin 使ってると,WindowsのユーザーホームとCygwinのUserホームが違ってて不便なんですよね。

  • Cygwinで c:\users が /home にしたい
  • ~/desktop が c:\users\desktop ならWindowsのファイル操作もCygwinで出来るのに

ってことでやっています.

NTFSファイルシステムCygwinを上手に共存する

/etc/fstab
  5 C:/Users/ /home/ ntfs  override,binary,auto 0 0
  6 C:/Users/takuya /home/takuya ntfs  override,binary,auto 0 0
  7 C:/Users/takuya/AppData/Local/Temp/cygwin /tmp ntfs  override,binary,auto 0     0
  8 /cygdrive/c      /c          bind 0     0

fstab を書いておくと、Windowsファイルシステムと、Cygwinのホームディレクトリがウマく対応します.もう気持ち悪くないんですね.

これでWindowsCygwinがウマく対応する

/home        ====> C:\Users\
/home/takuya ====> C:\Users\takuya

こうしておけば、CygwinWindowsのシェルに見えてくれる.Mac要らないかもね

cd ~ が C:\users\takuya であり /home/takuya

takuya@letsnote:~$ cd ~
takuya@letsnote:~$ pwd
/home/takuya
takuya@letsnote:~$ cygpath -w `pwd`
C:\Users\takuya

これで、ファイル操作がやりやすくなります。

cygwinrubypython が便利になる

cygwinrubypython

open "~/desktop/test.rb"

したらちゃんとWindowsのデスクトップから読み込むのよね.コレすっごく便利だと思う


やっちゃいけないおおざっぱな設定

C:/ / ntfs  override,binary,auto 0 0

windows のc:\(ディレクトリルート)と cygwin の ルート(/) をマッピングさせるのはスグ思いつくけど,すぐカオスになりそうって気づくよね.だからオススメしないです.

Cygwin紹介記事で呼んだことあるんだけど、cygwinwindowsディレクトリを一致させるのはオススメしないって。そいうふうか書いてるのはルート共有の話であって・・・Cygwin1.7以降なら、fstabがファイルになっていて、便利になってる.Linuxっぽくなるのでかなり便利に活用できます.僕は好き。ディレクトリのマウントの改良がCygwin1.7の大きな進化だと思います。

と言うわけで、必要な箇所に絞ってディレクトリを一致させるのはマジオススメ

/var/www と E:\web\apache\htdocs 

みたいなマウントも便利だと思います.