<?xml version="1.0" encoding="EUC-JP"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
  <title>Daio Today</title>
  <link rel="alternate" type="text/html" href="http://psst.jp/syn/" />
  <modified>2012-04-14T11:42:38Z</modified>
  <tagline>SYNの日記であり備忘録でありロバの耳であります。</tagline>
  <id>tag:psst.jp,2012:/syn//1</id>
  <generator url="http://www.movabletype.org/" version="2.661">Movable Type</generator>
  <copyright>Copyright (c) 2012, syn</copyright>
  <entry>
    <title>iOS 5.1 の iPhone, iPad, iPod touch の UserAgent</title>
    <link rel="alternate" type="text/html" href="http://psst.jp/syn/archives/000236.html" />
    <modified>2012-04-14T11:42:38Z</modified>
    <issued>2012-04-14T20:42:38+09:00</issued>
    <id>tag:psst.jp,2012:/syn//1.236</id>
    <created>2012-04-14T11:42:38Z</created>
    <summary type="text/plain">Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3 Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3 Mozilla/5.0 (iPod; CPU iPhone OS 5_1 like...</summary>
    <author>
      <name>syn</name>
      <url>http://psst.jp/syn/</url>
      <email>shkr@wm.pdx.ne.jp</email>
    </author>
    <dc:subject>Develop</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://psst.jp/syn/">
      <![CDATA[<p>Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3<br />
Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3<br />
Mozilla/5.0 (iPod; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3<br />
</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Mac mini (Mid 2011) 購入</title>
    <link rel="alternate" type="text/html" href="http://psst.jp/syn/archives/000235.html" />
    <modified>2011-07-30T06:16:52Z</modified>
    <issued>2011-07-30T15:16:52+09:00</issued>
    <id>tag:psst.jp,2011:/syn//1.235</id>
    <created>2011-07-30T06:16:52Z</created>
    <summary type="text/plain">Mac mini (Mid 2011) をCTOで Core i7 2.7GHz にアップグレードして購入。 Z0M9/2.7GHz Dual-Core Intel Core i7/2x2GB/500GB/JPN...</summary>
    <author>
      <name>syn</name>
      <url>http://psst.jp/syn/</url>
      <email>shkr@wm.pdx.ne.jp</email>
    </author>
    <dc:subject>Mac/Apple</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://psst.jp/syn/">
      <![CDATA[<p>Mac mini (Mid 2011) をCTOで Core i7 2.7GHz にアップグレードして購入。<br />
Z0M9/2.7GHz Dual-Core Intel Core i7/2x2GB/500GB/JPN</p>]]>
      <![CDATA[<p><img src="http://psst.jp/syn/images/Mac%20mini%20Mid%202011.jpg" width="640" height="478" border="0" align="right" alt="Mac mini Mid 2011" />ベースになった機種はMC816J/A。Thunderboltポート搭載、OS X Lionプリインストール。<br />
CPU: 2コア2.7GHzのCore i7なので 2620M と思われる。2次キャッシュ4MBでVT-x・VT-d共に有効 http://ja.wikipedia.org/wiki/Intel_Core_i7#Core_i7_4<br />
RAM: 4GB (2x2GB)、1,333MHz DDR3<br />
GPU: AMD Radeon HD 6630M (256MB GDDR5メモリ)<br />
HDD: SATA 500GB (5,400 rpm)<br />
</p>]]>
    </content>
  </entry>
  <entry>
    <title>Nearbyブックマークレット</title>
    <link rel="alternate" type="text/html" href="http://psst.jp/syn/archives/000234.html" />
    <modified>2010-02-15T15:12:03Z</modified>
    <issued>2010-02-16T00:12:03+09:00</issued>
    <id>tag:psst.jp,2010:/syn//1.234</id>
    <created>2010-02-15T15:12:03Z</created>
    <summary type="text/plain">Google Maps の中心地点の座標で Twitter 検索するブックマークレット 使い方：下記の「Nearby」のリンクをブックマークバーにドラッグ＆ドロップ。Google Maps を表示している時に、ブックマークバーに作った「Nearby」をクリック Nearby ソース (下記を1行で) javascript:a=&apos;&apos;+gApplication.getMap().getCenter();a=a.replace(&apos;(&apos;,&apos;&apos;).replace(&apos;)&apos;,&apos;&apos;);window.location=&apos;http://twitter.com/search?q=near%3A%22&apos;+escape(a)+&apos;%22%20within%3A1mi&apos;...</summary>
    <author>
      <name>syn</name>
      <url>http://psst.jp/syn/</url>
      <email>shkr@wm.pdx.ne.jp</email>
    </author>
    <dc:subject>Develop</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://psst.jp/syn/">
      <![CDATA[<p>Google Maps の中心地点の座標で Twitter 検索するブックマークレット</p>
<p>使い方：下記の「Nearby」のリンクをブックマークバーにドラッグ＆ドロップ。Google Maps を表示している時に、ブックマークバーに作った「Nearby」をクリック</p>
<p><a href="javascript:a=''+gApplication.getMap().getCenter();a=a.replace('(','').replace(')','');window.location='http://twitter.com/search?q=near%3A%22'+escape(a)+'%22%20within%3A1mi'">Nearby</a></p>
<p>ソース (下記を1行で)<br />
<code>javascript:a=''+gApplication.getMap().getCenter();a=a.replace('(','').replace(')','');window.location='http://twitter.com/search?q=near%3A%22'+escape(a)+'%22%20within%3A1mi'</code></p>
]]>
      
    </content>
  </entry>
  <entry>
    <title>USERTrust Legacy Secure Server CA</title>
    <link rel="alternate" type="text/html" href="http://psst.jp/syn/archives/000233.html" />
    <modified>2010-01-07T12:32:43Z</modified>
    <issued>2010-01-07T21:32:43+09:00</issued>
    <id>tag:psst.jp,2010:/syn//1.233</id>
    <created>2010-01-07T12:32:43Z</created>
    <summary type="text/plain">Humeia経由で「StartSSL Standard」のSSLサーバ証明書を取得したら、 中間認証局が The USERTRUST Network の USERTrust Legacy Secure Server CA となっていた。 Not Before: Nov 26 20:33:13 2009 GMT となっているとおり新しい認証局のためか、Firefox 3.5 では不明な認証局となってしまう。（SafariやIEでは大丈夫） 仕方ないので、中間証明書を持って来てApacheにインストールした。...</summary>
    <author>
      <name>syn</name>
      <url>http://psst.jp/syn/</url>
      <email>shkr@wm.pdx.ne.jp</email>
    </author>
    <dc:subject>Develop</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://psst.jp/syn/">
      <![CDATA[<p>Humeia経由で「StartSSL Standard」のSSLサーバ証明書を取得したら、
中間認証局が The USERTRUST Network の <tt>USERTrust Legacy Secure Server CA</tt> となっていた。</p>
<p><tt>Not Before: Nov 26 20:33:13 2009 GMT</tt><br />
となっているとおり新しい認証局のためか、Firefox 3.5 では不明な認証局となってしまう。（SafariやIEでは大丈夫）<br />
仕方ないので、<a href="http://www.tbs-certificats.com/fom-serve/cache/556.html">中間証明書</a>を持って来てApacheにインストールした。</p>]]>
      <![CDATA[<pre>Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1184831531 (0x469f182b)
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority
        Validity
            Not Before: Nov 26 20:33:13 2009 GMT
            Not After : Nov  1 04:00:00 2015 GMT
        Subject: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, CN=USERTrust Legacy Secure Server CA
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (2048 bit)
                Modulus (2048 bit):
                    00:d9:4d:20:3a:e6:29:30:86:f2:e9:86:89:76:34:
                    4e:68:1f:96:44:f7:d1:f9:d6:82:4e:a6:38:9e:ee:
                    cb:5b:e1:8e:2e:bd:f2:57:80:fd:c9:3f:fc:90:73:
                    44:bc:8f:bb:57:5b:e5:2d:1f:14:30:75:36:f5:7f:
                    bc:cf:56:f4:7f:81:ff:ae:91:cd:d8:d2:6a:cb:97:
                    f9:f7:cd:90:6a:45:2d:c4:bb:a4:85:13:68:57:5f:
                    ef:29:ba:2a:ca:ea:f5:cc:a4:04:9b:63:cd:00:eb:
                    fd:ed:8d:dd:23:c6:7b:1e:57:1d:36:7f:1f:08:9a:
                    0d:61:db:5a:6c:71:02:53:28:c2:fa:8d:fd:ab:bb:
                    b3:f1:8d:74:4b:df:bd:bd:cc:06:93:63:09:95:c2:
                    10:7a:9d:25:90:32:9d:01:c2:39:53:b0:e0:15:6b:
                    c7:d7:74:e5:a4:22:9b:e4:94:ff:84:91:fb:2d:b3:
                    19:43:2d:93:0f:9c:12:09:e4:67:b9:27:7a:32:ad:
                    7a:2a:cc:41:58:c0:6e:59:5f:ee:38:2b:17:22:9c:
                    89:fa:6e:e7:e5:57:35:f4:5a:ed:92:95:93:2d:f9:
                    cc:24:3f:a5:1c:3d:27:bd:22:03:73:cc:f5:ca:f3:
                    a9:f4:dc:fe:cf:e9:d0:5c:d0:0f:ab:87:fc:83:fd:
                    c8:a9
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE, pathlen:0
            X509v3 Certificate Policies: 
                Policy: 1.3.6.1.4.1.6449.1.2.1.3.4

            Authority Information Access: 
                OCSP - URI:http://ocsp.entrust.net

            X509v3 CRL Distribution Points: 
                URI:http://crl.entrust.net/server1.crl

            X509v3 Subject Key Identifier: 
                AF:A4:40:AF:9F:16:FE:AB:31:FD:FB:D5:97:8B:F5:91:A3:24:86:16
            X509v3 Authority Key Identifier: 
                keyid:F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A

    Signature Algorithm: sha1WithRSAEncryption
        33:46:31:c3:2a:b7:b7:41:0e:aa:8e:93:14:2f:78:c3:4a:8e:
        16:5a:dc:72:32:94:96:57:9a:ac:bc:55:a8:57:cf:7c:e0:79:
        62:ff:31:ee:d5:9c:54:d0:c0:fd:87:e2:15:06:9e:be:a2:4a:
        d0:82:eb:6e:4a:58:6a:d9:1f:11:c0:c8:e3:9e:e3:d6:c5:4f:
        f7:ff:c3:ef:36:8a:68:aa:b2:50:92:ab:59:9d:ea:5b:27:1f:
        16:a9:3c:45:5f:eb:a5:2a:5d:56:29:8d:3a:14:0d:12:74:71:
        be:d6:ab:97:de:92:87:61:21:88:7b:41:46:3d:fc:3d:4f:d0:
        54:5b
-----BEGIN CERTIFICATE-----
MIIELTCCA5agAwIBAgIERp8YKzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wOTEx
MjYyMDMzMTNaFw0xNTExMDEwNDAwMDBaMH8xCzAJBgNVBAYTAlVTMQswCQYDVQQI
EwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRoZSBVU0VS
VFJVU1QgTmV0d29yazEqMCgGA1UEAxMhVVNFUlRydXN0IExlZ2FjeSBTZWN1cmUg
U2VydmVyIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2U0gOuYp
MIby6YaJdjROaB+WRPfR+daCTqY4nu7LW+GOLr3yV4D9yT/8kHNEvI+7V1vlLR8U
MHU29X+8z1b0f4H/rpHN2NJqy5f5982QakUtxLukhRNoV1/vKboqyur1zKQEm2PN
AOv97Y3dI8Z7HlcdNn8fCJoNYdtabHECUyjC+o39q7uz8Y10S9+9vcwGk2MJlcIQ
ep0lkDKdAcI5U7DgFWvH13TlpCKb5JT/hJH7LbMZQy2TD5wSCeRnuSd6Mq16KsxB
WMBuWV/uOCsXIpyJ+m7n5Vc19FrtkpWTLfnMJD+lHD0nvSIDc8z1yvOp9Nz+z+nQ
XNAPq4f8g/3IqQIDAQABo4HsMIHpMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8E
CDAGAQH/AgEAMBkGA1UdIAQSMBAwDgYMKwYBBAGyMQECAQMEMDMGCCsGAQUFBwEB
BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYDVR0f
BCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNybDAd
BgNVHQ4EFgQUr6RAr58W/qsx/fvVl4v1kaMkhhYwHwYDVR0jBBgwFoAU8BdiE1U9
s/8KAGv7UISX8+1i0BowDQYJKoZIhvcNAQEFBQADgYEAM0Yxwyq3t0EOqo6TFC94
w0qOFlrccjKUllearLxVqFfPfOB5Yv8x7tWcVNDA/YfiFQaevqJK0ILrbkpYatkf
EcDI457j1sVP9//D7zaKaKqyUJKrWZ3qWycfFqk8RV/rpSpdVimNOhQNEnRxvtar
l96Sh2EhiHtBRj38PU/QVFs=
-----END CERTIFICATE-----</pre>
]]>
    </content>
  </entry>
  <entry>
    <title>シェルスクリプト実行PHPコード</title>
    <link rel="alternate" type="text/html" href="http://psst.jp/syn/archives/000232.html" />
    <modified>2009-11-05T11:29:10Z</modified>
    <issued>2009-11-05T20:29:10+09:00</issued>
    <id>tag:psst.jp,2009:/syn//1.232</id>
    <created>2009-11-05T11:29:10Z</created>
    <summary type="text/plain"><![CDATA[シェルスクリプトをブラウザから実行するためのPHPコード。 このスクリプトを command.php などして保存し、同じディレクトリに command.sh を置く。 セキュリティホールになるのでSSL＋Basic認証が有効になっている場所で使うべき。 &lt;html&gt; &lt;head&gt; &lt;meta name=&quot;viewport&quot; content=&quot;width=640&quot;&gt; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt; &lt;title&gt;&lt;?php echo $_SERVER['PHP_SELF'] ?&gt;&lt;/title&gt; &lt;/htad&gt; &lt;body style=&quot;background-color:#ffffff&quot;&gt; &lt;h1&gt;php-com&lt;/h1&gt; &lt;?php if ( $_SERVER['REQUEST_METHOD'] != 'POST' ) { ?&gt; &lt;form method=&quot;POST&quot; action=&quot;&lt;?php echo $_SERVER['PHP_SELF'] ?&gt;&quot;&gt; &lt;p&gt;...]]></summary>
    <author>
      <name>syn</name>
      <url>http://psst.jp/syn/</url>
      <email>shkr@wm.pdx.ne.jp</email>
    </author>
    <dc:subject>Develop</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://psst.jp/syn/">
      <![CDATA[<p>シェルスクリプトをブラウザから実行するためのPHPコード。<br />
このスクリプトを command.php などして保存し、同じディレクトリに command.sh を置く。<br />
セキュリティホールになるのでSSL＋Basic認証が有効になっている場所で使うべき。</p>

<pre>&lt;html&gt;
&lt;head&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=640&quot;&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
&lt;title&gt;&lt;?php echo $_SERVER['PHP_SELF'] ?&gt;&lt;/title&gt;
&lt;/htad&gt;
&lt;body style=&quot;background-color:#ffffff&quot;&gt;
&lt;h1&gt;php-com&lt;/h1&gt;
&lt;?php if ( $_SERVER['REQUEST_METHOD'] != 'POST' ) { ?&gt;

&lt;form method=&quot;POST&quot; action=&quot;&lt;?php echo $_SERVER['PHP_SELF'] ?&gt;&quot;&gt;
&lt;p&gt;
    Attr1: &lt;input type=&quot;text&quot; name=&quot;attr1&quot;&gt;&lt;br&gt;
    Attr2: &lt;input type=&quot;text&quot; name=&quot;attr2&quot;&gt;&lt;br&gt;
    &lt;input type=&quot;submit&quot; value=&quot;Execute&quot;&gt;
&lt;/p&gt;
&lt;/form&gt;

&lt;?php } else { ?&gt;

&lt;pre style=&quot;border:1px solid #eee;background-color:#f8f8f8&quot;&gt;&lt;?php
    $command = './command.sh';
    $command .= &quot; &quot; . escapeshellarg( $_POST['attr1'] );
    $command .= &quot; &quot; . escapeshellarg( $_POST['attr2'] );
    $command .= &quot; 2&gt;&amp;1&quot;;
    print_r( htmlspecialchars( shell_exec( $command ) ) );
?&gt;&lt;/pre&gt;

&lt;?php } ?&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>]]>
      
    </content>
  </entry>
  <entry>
    <title>Perl の print と syswrite をベンチ</title>
    <link rel="alternate" type="text/html" href="http://psst.jp/syn/archives/000231.html" />
    <modified>2009-08-30T16:45:44Z</modified>
    <issued>2009-08-31T01:45:44+09:00</issued>
    <id>tag:psst.jp,2009:/syn//1.231</id>
    <created>2009-08-30T16:45:44Z</created>
    <summary type="text/plain">Perl でログメッセージをファイルへ書き出すのに、 print() と syswrite() のどちらを使うか迷ったので、参考にベンチマークを取ってみた。 バッファを無効にした print() と syswrite() を比較すると、内部で呼び出すシステムコールが少ない分、syswrite() が有利だとWebで読んだが、ベンチマークを取って確かめるとその通りの結果が出た。 ざっくりまとめると、syswrite() は、バッファリングを無効にした print() より 2割ほど速い。 ただし、バッファリングが有効な print() は、バッファリングを無効にした print() より 4.6倍速い。 はっきり言って微妙な差だが、互換性を取るなら print()、少しでもパフォーマンスを上げたいなら syswrite()、バッファを喪失するリスクを無視出来るならバッファ有りの print() を選ぶことになる。 syswrite() はファイルをロックしなくても排他書き込みをしてくれるという情報もあるので、ログの書き出しのような用途にはこちらが良いのかもしれない。...</summary>
    <author>
      <name>syn</name>
      <url>http://psst.jp/syn/</url>
      <email>shkr@wm.pdx.ne.jp</email>
    </author>
    <dc:subject>Develop</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://psst.jp/syn/">
      <![CDATA[<p>Perl でログメッセージをファイルへ書き出すのに、 print() と syswrite() のどちらを使うか迷ったので、参考にベンチマークを取ってみた。<br />
バッファを無効にした print() と syswrite() を比較すると、内部で呼び出すシステムコールが少ない分、syswrite() が有利だとWebで読んだが、ベンチマークを取って確かめるとその通りの結果が出た。</p>

<p>ざっくりまとめると、syswrite() は、バッファリングを無効にした print() より 2割ほど速い。<br />
ただし、バッファリングが有効な print() は、バッファリングを無効にした print() より 4.6倍速い。<br />
はっきり言って微妙な差だが、互換性を取るなら print()、少しでもパフォーマンスを上げたいなら syswrite()、バッファを喪失するリスクを無視出来るならバッファ有りの print() を選ぶことになる。<br />
syswrite() はファイルをロックしなくても排他書き込みをしてくれるという情報もあるので、ログの書き出しのような用途にはこちらが良いのかもしれない。</p>]]>
      <![CDATA[<p>Benchmark実行結果</p>

<pre>Benchmark: timing 1000000 iterations of              syswrite, print (buffering off), print (buffering on) ...
             syswrite:  6 wallclock secs ( 1.49 usr +  3.40 sys =  4.89 CPU) @ 204498.98/s (n=1000000)
print (buffering off):  7 wallclock secs ( 2.30 usr +  3.74 sys =  6.04 CPU) @ 165562.91/s (n=1000000)
print (buffering on) :  2 wallclock secs ( 1.30 usr +  0.01 sys =  1.31 CPU) @ 763358.78/s (n=1000000)</pre>

<p>ベンチマークに使用したコード</p>

<pre>#!/usr/bin/perl
use strict;
use Benchmark qw(timethese);
my $file1 = &quot;$0.f1&quot;;
my $file2 = &quot;$0.f2&quot;;
my $file3 = &quot;$0.f3&quot;;
open(F1, &quot;&gt; $file1&quot;) or die &quot;Can't open f1: $!&quot;;
open(F2, &quot;&gt; $file2&quot;) or die &quot;Can't open f2: $!&quot;;
open(F3, &quot;&gt; $file3&quot;) or die &quot;Can't open f3: $!&quot;;
select((select(F3), $| = 1)[0]);
my $sample = scalar(localtime) x 3;
timethese(1000000, {
        '             syswrite' =&gt; 'syswrite(F1, &quot;$sample\n&quot;)',
        'print (buffering  on)' =&gt; 'print {F2} (&quot;$sample\n&quot;)',
        'print (buffering off)' =&gt; 'print {F3} (&quot;$sample\n&quot;)',
});
close(F1);
close(F2);
close(F3);
unlink($file1, $file2, $file3);</pre>
]]>
    </content>
  </entry>
  <entry>
    <title>Snow Leopard で perl -v</title>
    <link rel="alternate" type="text/html" href="http://psst.jp/syn/archives/000230.html" />
    <modified>2009-08-29T16:06:16Z</modified>
    <issued>2009-08-30T01:06:16+09:00</issued>
    <id>tag:psst.jp,2009:/syn//1.230</id>
    <created>2009-08-29T16:06:16Z</created>
    <summary type="text/plain">mbair:~ syn$ perl -v This is perl, v5.10.0 built for darwin-thread-multi-2level (with 2 registered patches, see perl -V for more detail) Copyright 1987-2007, Larry Wall Perl may be copied only under the terms of either the Artistic License or the...</summary>
    <author>
      <name>syn</name>
      <url>http://psst.jp/syn/</url>
      <email>shkr@wm.pdx.ne.jp</email>
    </author>
    <dc:subject>Mac/Apple</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://psst.jp/syn/">
      <![CDATA[<pre>mbair:~ syn$ perl -v

This is perl, v5.10.0 built for darwin-thread-multi-2level
(with 2 registered patches, see perl -V for more detail)

Copyright 1987-2007, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using &quot;man perl&quot; or &quot;perldoc perl&quot;.  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.</pre>
]]>
      <![CDATA[<pre>mbair:~ syn$ perl -V
Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
  Platform:
    osname=darwin, osvers=10.0, archname=darwin-thread-multi-2level
    uname='darwin neige.apple.com 10.0 darwin kernel version 10.0.0d8: tue may 5 19:29:59 pdt 2009; root:xnu-1437.2~2release_i386 i386 '
    config_args='-ds -e -Dprefix=/usr -Dccflags=-g  -pipe  -Dldflags= -Dman3ext=3pm -Duseithreads -Duseshrplib -Dinc_version_list=none -Dcc=gcc-4.2'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='gcc-4.2', ccflags ='-arch x86_64 -arch i386 -arch ppc -g -pipe -fno-common -DPERL_DARWIN -fno-strict-aliasing -I/usr/local/include',
    optimize='-Os',
    cppflags='-g -pipe -fno-common -DPERL_DARWIN -fno-strict-aliasing -I/usr/local/include'
    ccversion='', gccversion='4.2.1 (Apple Inc. build 5646)', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='gcc-4.2 -mmacosx-version-min=10.6', ldflags ='-arch x86_64 -arch i386 -arch ppc -L/usr/local/lib'
    libpth=/usr/local/lib /usr/lib
    libs=-ldbm -ldl -lm -lutil -lc
    perllibs=-ldl -lm -lutil -lc
    libc=/usr/lib/libc.dylib, so=dylib, useshrplib=true, libperl=libperl.dylib
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags='-arch x86_64 -arch i386 -arch ppc -bundle -undefined dynamic_lookup -L/usr/local/lib'


Characteristics of this binary (from libperl): 
  Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV
                        PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP USE_64_BIT_ALL
                        USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES
                        USE_PERLIO USE_REENTRANT_API
  Locally applied patches:
        /Library/Perl/Updates/&lt;version&gt; comes before system perl directories
        installprivlib and installarchlib points to the Updates directory
  Built under darwin
  Compiled at Jun 24 2009 00:35:27
  @INC:
    /Library/Perl/Updates/5.10.0
    /System/Library/Perl/5.10.0/darwin-thread-multi-2level
    /System/Library/Perl/5.10.0
    /Library/Perl/5.10.0/darwin-thread-multi-2level
    /Library/Perl/5.10.0
    /Network/Library/Perl/5.10.0/darwin-thread-multi-2level
    /Network/Library/Perl/5.10.0
    /Network/Library/Perl
    /System/Library/Perl/Extras/5.10.0/darwin-thread-multi-2level
    /System/Library/Perl/Extras/5.10.0
    .</pre>
]]>
    </content>
  </entry>
  <entry>
    <title>TwitterにPOSTするのにJSONは要らない</title>
    <link rel="alternate" type="text/html" href="http://psst.jp/syn/archives/000229.html" />
    <modified>2009-08-27T02:29:51Z</modified>
    <issued>2009-08-27T11:29:51+09:00</issued>
    <id>tag:psst.jp,2009:/syn//1.229</id>
    <created>2009-08-27T02:29:51Z</created>
    <summary type="text/plain">PerlからTwitterにポストするためにNet::Twitterを使おうと思った。 レンサバで使うのに依存関係が少ないものを使いたいので、Net::Twitter::LiteとかNet::Twitterの古いバージョンとかを物色し、PurePerlなモジュールのみでなんとか準備した。 しかし、Net::Twitterの中身を良く見てみると、“つぶやき”を投稿するだけなら、内容をURIエンコードしてPOSTするだけなので、JSONは必要としない。 POSTが成功した時の応答bodyにJSONが使われているのだが、投稿が成功したかどうかはステータスラインを参照するだけで判断出来るので、実質必要ない。 結局、LWP::UserAgentをuseするだけで目的を達してしまった。...</summary>
    <author>
      <name>syn</name>
      <url>http://psst.jp/syn/</url>
      <email>shkr@wm.pdx.ne.jp</email>
    </author>
    <dc:subject>Develop</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://psst.jp/syn/">
      <![CDATA[<p>PerlからTwitterにポストするためにNet::Twitterを使おうと思った。</p>

<p>レンサバで使うのに依存関係が少ないものを使いたいので、Net::Twitter::LiteとかNet::Twitterの古いバージョンとかを物色し、PurePerlなモジュールのみでなんとか準備した。</p>

<p>しかし、Net::Twitterの中身を良く見てみると、“つぶやき”を投稿するだけなら、内容をURIエンコードしてPOSTするだけなので、JSONは必要としない。</p>

<p>POSTが成功した時の応答bodyにJSONが使われているのだが、投稿が成功したかどうかはステータスラインを参照するだけで判断出来るので、実質必要ない。</p>

<p>結局、LWP::UserAgentをuseするだけで目的を達してしまった。</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Foxmarksのjaロケール不具合対策スクリプト</title>
    <link rel="alternate" type="text/html" href="http://psst.jp/syn/archives/000228.html" />
    <modified>2008-08-16T13:55:41Z</modified>
    <issued>2008-08-16T22:55:41+09:00</issued>
    <id>tag:psst.jp,2008:/syn//1.228</id>
    <created>2008-08-16T13:55:41Z</created>
    <summary type="text/plain">Foxmarksをインストールしたら設定画面でxmlパースエラーが出た。 どうやら ja ロケールの foxmarks.dtd に不具合があるようで ja-JP ロケールの同名ファイルで上書きすれば直るらしい。 …というわけでコピースクリプトを作った。（Mac OS X専用）...</summary>
    <author>
      <name>syn</name>
      <url>http://psst.jp/syn/</url>
      <email>shkr@wm.pdx.ne.jp</email>
    </author>
    <dc:subject>Develop</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://psst.jp/syn/">
      <![CDATA[<p><a href="http://www.foxmarks.com/">Foxmarks</a>をインストールしたら設定画面でxmlパースエラーが出た。<br /><br />
どうやら ja ロケールの foxmarks.dtd に不具合があるようで ja-JP ロケールの同名ファイルで上書きすれば直るらしい。<br /><br />
…というわけでコピースクリプトを作った。（Mac OS X専用）</p>]]>
      <![CDATA[<pre>#!/bin/sh
cd ~/Library/Application\ Support/Firefox/Profiles
LS=`find . -name &apos;foxmarks\@kei\.com&apos;`
for P in $LS
do
        echo &quot;Find extensions in [$P]&quot;
        FA=${P}/chrome/chromeFiles/locale/ja-JP/foxmarks.dtd
        FB=${P}/chrome/chromeFiles/locale/ja/foxmarks.dtd
        cmp -s $FA $FB
        if [ $? -ne 0 ]
        then
                echo &quot;Files differ, then input your password for sudo command.&quot;
                sudo cp -p $FA $FB
        else
                echo &quot;Files not differ&quot;
        fi
done</pre>

<p>上記のスクリプトをホームフォルダなどに foxmarks-copy-dtd.sh のような名前で保存して、ターミナルから次のように起動する（例はホームフォルダに保存した場合）</p>

<p><kbd>sh ~/foxmarks-copy-dtd.sh</kbd></p>

<p>コピー対象のファイルが見つかった場合、sudo コマンドを経由してコピーするので、パスワードの入力を求められたら、ログインしているユーザーのパスワードを入力する。（rootユーザーのパスワードではない）</p>

<p>なお、このスクリプトには一切の保証は無く、また、このスクリプトを使ったことにより何らかの不具合や不利益を被ったとしても、当方は一切の責を負いませんので悪しからず。</p>]]>
    </content>
  </entry>
  <entry>
    <title>iPhone の UserAgent</title>
    <link rel="alternate" type="text/html" href="http://psst.jp/syn/archives/000227.html" />
    <modified>2008-07-21T20:07:03Z</modified>
    <issued>2008-07-22T05:07:03+09:00</issued>
    <id>tag:psst.jp,2008:/syn//1.227</id>
    <created>2008-07-21T20:07:03Z</created>
    <summary type="text/plain">Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A347 Safari/525.20...</summary>
    <author>
      <name>syn</name>
      <url>http://psst.jp/syn/</url>
      <email>shkr@wm.pdx.ne.jp</email>
    </author>
    <dc:subject>Develop</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://psst.jp/syn/">
      <![CDATA[<p>Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A347 Safari/525.20</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>YouTube API利用コードをPerlモジュール化してみた</title>
    <link rel="alternate" type="text/html" href="http://psst.jp/syn/archives/000226.html" />
    <modified>2008-03-13T17:11:16Z</modified>
    <issued>2008-03-14T02:11:16+09:00</issued>
    <id>tag:psst.jp,2008:/syn//1.226</id>
    <created>2008-03-13T17:11:16Z</created>
    <summary type="text/plain">「ゆーすけべー日記: Perl から YouTube の新API を使って動画をアップロードする」で公開されていたコードをほとんどそのまま利用させてもらってモジュールを作ってみた。 OO化してもあまり意味無さそうなので単にモジュール化しただけ。...</summary>
    <author>
      <name>syn</name>
      <url>http://psst.jp/syn/</url>
      <email>shkr@wm.pdx.ne.jp</email>
    </author>
    <dc:subject>Develop</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://psst.jp/syn/">
      <![CDATA[<p>「<a href="http://yusukebe.com/archives/08/03/13/123113.html">ゆーすけべー日記: Perl から YouTube の新API を使って動画をアップロードする</a>」で公開されていたコードをほとんどそのまま利用させてもらってモジュールを作ってみた。<br />
OO化してもあまり意味無さそうなので単にモジュール化しただけ。</p>
]]>
      <![CDATA[<p>個人的事情で IO::All を使っていた部分は IO::File を使うようにダサ方向に変更させてもらいました。すんません。<br />
オリジナルのコードにライセンスは明記されていなかったのだけど、このコードはオリジナルのコードに準じるという事にします。</p>

<p>追記: 時間を置いてトラックバックpingを2回送ってみたが、反映されないみたい</p>

<pre>package Net_YouTube;

use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Request::Common;
#use IO::All;
use IO::File;
use utf8;
use File::Basename;

sub upload {
    my %arg = @_;
    my $username = $arg{'username'} || die 'username is required';
    my $auth_token = $arg{'auth_token'} || die 'auth_token is required';
    my $developer_key = $arg{'developer_key'} || die 'developer_key is required';
    my $filename = $arg{'filename'} || die 'filename is required';
    my $video_detail = $arg{'video_detail'} || die 'video_detail is required';
    my $content_type = $arg{'content_type'} || die 'content_type is required';
    #my $data = io($filename)-&gt;binary-&gt;all;
    my $fh = IO::File-&gt;new($filename, 'r');
    $fh-&gt;binmode;
    my $data = '';
    my $buff;
    while ($fh-&gt;read($buff, 1024)) {
        $data .= $buff;
    }
    my $url =
      &quot;http://uploads.gdata.youtube.com/feeds/api/users/$username/uploads&quot;;
    my $request = HTTP::Request-&gt;new( POST =&gt; $url );

    $request-&gt;header(
        &quot;Authorization&quot; =&gt; &quot;GoogleLogin auth=$auth_token&quot;,
        &quot;X-GData-Key&quot;   =&gt; &quot;key=$developer_key&quot;,
        Slug            =&gt; basename($filename),
        Content_Type    =&gt; 'multipart/related',
    );
    $request-&gt;add_part(
        HTTP::Message-&gt;new(
            [ Content_type =&gt; 'application/atom+xml' ],
            $video_detail
        )
    );
    $request-&gt;add_part(
        HTTP::Message-&gt;new( [ Content_type =&gt; $content_type ], $data ) );

    my $ua = LWP::UserAgent-&gt;new( keep_alive =&gt; 1 );
    my $response = $ua-&gt;request($request);
    die $response-&gt;status_line unless ( $response-&gt;is_success );
    return $response-&gt;content;
}

sub auth {
    my %arg = @_;
    my $username = $arg{'username'} || die 'username is required';
    my $password = $arg{'password'} || die 'password is required';
    my $request = POST(
        &quot;https://www.google.com/youtube/accounts/ClientLogin&quot;,
        Content_Type =&gt; 'application/x-www-form-urlencoded',
        Content      =&gt; [
            Email   =&gt; $username,
            Passwd  =&gt; $password,
            service =&gt; &quot;youtube&quot;,
            source  =&gt; &quot;uploads&quot;,
        ],
    );
    my $ua = LWP::UserAgent-&gt;new( keep_alive =&gt; 1 );
    my $response = $ua-&gt;request($request);
    die $response-&gt;status_line unless ( $response-&gt;is_success );
    $response-&gt;content =~ /Auth=(.*?)\n/;
    return $1;
}

sub video_detail {
    my $param = shift;
    foreach my $key ( keys %$param ){
        utf8::encode($param-&gt;{$key}) if utf8::is_utf8($param-&gt;{$key});
    }
    my $title = $param-&gt;{title} || die &quot;title is required&quot;;
    my $description = $param-&gt;{description} || die &quot;description is required&quot;;
    my $category = $param-&gt;{category} || &quot;People&quot;;
    my $keywords = $param-&gt;{keywords} || die &quot;keywords is required&quot;;

my $video_detail = &lt;&lt; &quot;XML&quot;;
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;entry xmlns=&quot;http://www.w3.org/2005/Atom&quot;
 xmlns:media=&quot;http://search.yahoo.com/mrss/&quot;
 xmlns:yt=&quot;http://gdata.youtube.com/schemas/2007&quot;&gt;
    &lt;media:group&gt;
    &lt;media:title type=&quot;plain&quot;&gt;$title&lt;/media:title&gt;
    &lt;media:description type=&quot;plain&quot;&gt;$description&lt;/media:description&gt;
    &lt;media:category scheme=&quot;http://gdata.youtube.com/schemas/2007/categories.cat&quot;&gt;$category&lt;/media:category&gt;
    &lt;media:keywords&gt;$keywords&lt;/media:keywords&gt;
  &lt;/media:group&gt;
&lt;/entry&gt;
XML
   return $video_detail;
}

sub video_id {
    my ($xml) = @_;
    if ($xml =~ /&lt;id(?:[^&gt;]*)&gt;[^&lt;]+\/(\w+)&lt;\/id&gt;/) {
        return $1;
    }
    return undef;
}

sub video_url {
    my ($video_id) = @_;
    return sprintf('http://jp.youtube.com/watch?v=%s', $video_id);
}

1;
__END__
=head1 NAME

Net_YouTube - YouTube Video upload API

=head1 SYNOPSIS

 # account settings
 my $username = &quot;your_account&quot;;
 my $password = &quot;your_password&quot;;
 my $developer_key = &quot;your_developer_key&quot;;
 
 # video settings
 my $filename = &quot;/path/to/movie01.mpg&quot;;
 my $content_type = &quot;video/mpeg&quot;;
 my %detail = (
     title       =&gt; &quot;test&quot;,
     description =&gt; &quot;description&quot;,
     keywords    =&gt; &quot;tag1,tag2&quot;,
 );
 
 use Net_YouTube;
 
 # Get authentication token
 my $auth_token = Net_YouTube::auth(
     username =&gt; $username,
     password =&gt; $password,
 );
 
 # Get video detail
 my $video_detail = Net_YouTube::video_detail(\%detail);
 
 # Upload video
 my $result = Net_YouTube::upload(
     username =&gt; $username,
     auth_token =&gt; $auth_token,
     developer_key =&gt; $developer_key,
     filename =&gt; $filename,
     video_detail =&gt; $video_detail,
     content_type =&gt; $content_type,
 );

=head1 SEE ALSO

http://yusukebe.com/archives/08/03/13/123113.html

=cut</pre>
]]>
    </content>
  </entry>
  <entry>
    <title>MacBook Air と Boot Camp まとめ</title>
    <link rel="alternate" type="text/html" href="http://psst.jp/syn/archives/000225.html" />
    <modified>2008-02-16T19:00:44Z</modified>
    <issued>2008-02-17T04:00:44+09:00</issued>
    <id>tag:psst.jp,2008:/syn//1.225</id>
    <created>2008-02-16T19:00:44Z</created>
    <summary type="text/plain">MacBook Air で Boot Camp を使おうとして軽くハマったのでメモしておく。 Boot Camp 領域への Windows のインストールには「リモートディスク」機能は使えない。 手許にあった I-O DATA DVRP-UN8PL2 では失敗した。MacBook Air SuperDrive を用意するのが無難。 Apple USB Ethernetアダプタ の Windows 用ドライバは提供されていない（2008年2月16日時点）。しかし、野良ドライバで解決出来る。 Acronis True Image (Ver. 10) で Windows をインストールしたパーティションをバックアップし、元のパーティションにリストアすると、パーティションが使えなくなってしまった。原因不明。 Mac OS X で起動してディスクユーティリティで作成した（Windows をインストールした Boot Camp...</summary>
    <author>
      <name>syn</name>
      <url>http://psst.jp/syn/</url>
      <email>shkr@wm.pdx.ne.jp</email>
    </author>
    <dc:subject>Mac/Apple</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://psst.jp/syn/">
      <![CDATA[<p>MacBook Air で Boot Camp を使おうとして軽くハマったのでメモしておく。</p>

<ul>
<li><a href="http://docs.info.apple.com/article.html?artnum=307310-ja">Boot Camp 領域への Windows のインストールには「リモートディスク」機能は使えない。</a>
<ul>
<li>手許にあった I-O DATA DVRP-UN8PL2 では失敗した。<a href="http://store.apple.com/0120-APPLE-1/WebObjects/japanstore?productLearnMore=MB397G/A">MacBook Air SuperDrive</a> を用意するのが無難。</li>
</ul>
</li>
<li><a href="http://store.apple.com/0120-APPLE-1/WebObjects/japanstore?productLearnMore=MB442Z/A">Apple USB Ethernetアダプタ</a> の Windows 用ドライバは提供されていない（2008年2月16日時点）。しかし、<a href="http://tnkgrl.wordpress.com/2008/02/10/windows-drivers-for-apple-usb-ethernet-adapter/">野良ドライバ</a>で解決出来る。</li>
<li>Acronis True Image (Ver. 10) で Windows をインストールしたパーティションをバックアップし、元のパーティションにリストアすると、パーティションが使えなくなってしまった。原因不明。</li>
<li>Mac OS X で起動してディスクユーティリティで作成した（Windows をインストールした Boot Camp ボリュームの）ディスクイメージからは、（Windows をインストールした Boot Camp ボリュームを）復元して Windows を起動することができた。
<ul>
<li>ただし、他の Mac（私の場合は MacBook）の Boot Camp ボリュームをダンプしたディスクイメージを（MacBook Air の Boot Camp ボリュームに）復元した場合は Widnows は起動しなかった。</li>
</ul>
</li>
</ul>
]]>
      <![CDATA[<p>関連する一般的な情報</p>

<ul>
<li><a href="http://store.apple.com/0120-APPLE-1/WebObjects/japanstore?productLearnMore=MB397G/A">MacBook Air SuperDrive</a> はバスパワー専用なので、バスパワー専用のUSBハブを経由すると動作しない</li>
<li>ディスクユーティリティで作成したディスクイメージを復元に利用するには、予め（ディスクユーティリティのイメージメニューから）「復元するイメージをスキャン…」を行っておかなくてはならない</li>
<li>Boot Camp には Windows XP SP2 以降が必要</li>
<li>Windows インストール時、キーボードの選択になったら「S」キーを押し、その後で「日本語106キー」を選択する</li>
<li>Windows インストール時、Windows インストーラでCドライブ（Boot Camp ボリューム）を（NTFSかFAT32で）フォーマットする</li>
<li>Windwos で起動すると、2ボタンマウスを繋がない限り右クリックが出来ない</li>
<li>Boot Camp 領域へ Windows をインストールした後に「MacBook Air Mac OS X Install Disc 1」をマウントして Boot Camp 用ドライバ群をインストールする</li>
<li>Windows のアクティベーションをする前に、Parallelsからも起動して、Parallels 用ドライバもインストールされている状態にしておく（方がよいような気がする）</li>
<li>Windows のアクティベーションを Boot Camp で起動した状態で行うと、Parallels で起動した時に再度アクティベーションを求められ、認証回数オーバーで電話を掛けなくてはならなくなる。Boot Camp でアクティベーションする前に Parallels で起動した状態でアクティベーションしておけば回避出来たかもしれない。</li>
</ul>
]]>
    </content>
  </entry>
  <entry>
    <title>Mac mini の HDD が読めなくなった</title>
    <link rel="alternate" type="text/html" href="http://psst.jp/syn/archives/000224.html" />
    <modified>2008-02-12T13:44:25Z</modified>
    <issued>2008-02-12T22:44:25+09:00</issued>
    <id>tag:psst.jp,2008:/syn//1.224</id>
    <created>2008-02-12T13:44:25Z</created>
    <summary type="text/plain">Mac mini の起動ボリュームが読めなくなった。ディスクユーティリティを掛けると「キーが不正です」と言われてしまう。 このMac mini を買ったのは 2005年8月だが、確か現在使っている起動ボリュームを作ったのは一昨年の8月頃。 メイン機ではなかったので大したデータは無かったが、Webサーバとして使っていたので、バックアップしていないファイルがいくつかある。ただ、iTunesサーバとしても使っていたものの、音楽ファイルは別パーティションなので無事（のはず）。 あとは物理障害でない事を祈るのと、少しでもファイルが読み出せる事を祈るのみ。...</summary>
    <author>
      <name>syn</name>
      <url>http://psst.jp/syn/</url>
      <email>shkr@wm.pdx.ne.jp</email>
    </author>
    <dc:subject>Mac/Apple</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://psst.jp/syn/">
      <![CDATA[<p>Mac mini の起動ボリュームが読めなくなった。ディスクユーティリティを掛けると「キーが不正です」と言われてしまう。<br />
この<a href="http://psst.jp/syn/archives/000193.html">Mac mini を買ったのは 2005年8月</a>だが、確か現在使っている起動ボリュームを作ったのは一昨年の8月頃。</p>

<p>メイン機ではなかったので大したデータは無かったが、Webサーバとして使っていたので、バックアップしていないファイルがいくつかある。ただ、iTunesサーバとしても使っていたものの、音楽ファイルは別パーティションなので無事（のはず）。<br />
あとは物理障害でない事を祈るのと、少しでもファイルが読み出せる事を祈るのみ。</p>]]>
      <![CDATA[<p>2/18 追記:</p>

<p>ディスクユーティリティで何度も修復をかけても回復しないのでほとんど諦めかけていたが、ダメ元で<a href="http://d.hatena.ne.jp/seihiguchi/20060923/1159073184">ボリュームをリードオンリーでマウントする方法</a>を試したところあっさりマウントしてくれて殆どのデータを退避することが出来た。</p>

<pre># 書式: mount -r -t hfs デバイス マウントポイント
# 実際にはroot権限が必要になるので sudo を使う
sudo mount -r -t hfs /dev/disk0s3 /mnt/vol</pre>

<p>今回はこの方法でほぼ解決出来たのでよかったが、もっと深刻な障害が起こった時は Data Rescue や DiskWarrior といったツールが役に立つらしい。</p>

<p>データの退避には rsync を使い、外付けドライブにコピーしたシステムで起動して現在この追記を書いている。</p>

<p>参考サイト</p>

<ul>
<li><a href="http://d.hatena.ne.jp/seihiguchi/20060923/1159073184">PowerBook G4の破損した起動ディスクからデータを復旧する方法のまとめ - SEI’s INSIGHT　@スタンフォード大学・シリコンバレー</a></li>
<li><a href="http://kondou.comic.to/nobuo_Web/columns04.html">コラム4</a></li>
</ul>

<p>rsyncでコピー関連</p>

<ul>
<li><a href="http://javaflavor.cocolog-nifty.com/blog/2007/08/macbookhd250gb_aa87.html">JavaFlavor Weblog: MacBookの内蔵HDを250GBに交換</a></li>
<li><a href="http://d.hatena.ne.jp/tociyuki/20061112/1163353580">MacOS X 10.4.8 PPC の rsync は起動可能なクローン作成に利用できます - Tociyuki::Diary</a></li>
</ul>
]]>
    </content>
  </entry>
  <entry>
    <title>MacBook Air has come</title>
    <link rel="alternate" type="text/html" href="http://psst.jp/syn/archives/000223.html" />
    <modified>2008-02-08T08:20:58Z</modified>
    <issued>2008-02-08T17:20:58+09:00</issued>
    <id>tag:psst.jp,2008:/syn//1.223</id>
    <created>2008-02-08T08:20:58Z</created>
    <summary type="text/plain"> 今年の MacWorld Expo のキーノート終了直後にAppleStoreで買った MacBook Air が届いた。...</summary>
    <author>
      <name>syn</name>
      <url>http://psst.jp/syn/</url>
      <email>shkr@wm.pdx.ne.jp</email>
    </author>
    <dc:subject>Mac/Apple</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://psst.jp/syn/">
      <![CDATA[<p><img alt="MacBook_Air_has_come.jpg" src="http://psst.jp/syn/archives/images/MacBook_Air_has_come.jpg" width="320" height="240" border="0" /></p>

<p>今年の MacWorld Expo のキーノート終了直後にAppleStoreで買った MacBook Air が届いた。</p>]]>
      <![CDATA[<p>FireWireなしで移行アシスタントが使えるのか心配だったけど、なんと無線LAN経由で Remote Disk と同じ仕組みでやっつけるらしい。びっくり。</p>

<p>なにがびっくりって、移行終了まで「残り5時間3分」と出ていること…</p>

<p>開封時に取った動画を YouTube にアップした。</p>

<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/iKWst5-UR4Q"></param><embed src="http://www.youtube.com/v/iKWst5-UR4Q" type="application/x-shockwave-flash" width="425" height="350"></embed></object></p>

<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/o5HpACq-6W0"></param><embed src="http://www.youtube.com/v/o5HpACq-6W0" type="application/x-shockwave-flash" width="425" height="350"></embed></object><br />
</p>]]>
    </content>
  </entry>
  <entry>
    <title>POP,Flickr,Twitter</title>
    <link rel="alternate" type="text/html" href="http://psst.jp/syn/archives/000222.html" />
    <modified>2008-02-03T09:24:34Z</modified>
    <issued>2008-02-03T18:24:34+09:00</issued>
    <id>tag:psst.jp,2008:/syn//1.222</id>
    <created>2008-02-03T09:24:34Z</created>
    <summary type="text/plain">携帯で写真を撮ってメールに添付して送ると、写真をFlickrにアップし、FlickrのURLをTwitterにポストする…というスクリプトを作った。...</summary>
    <author>
      <name>syn</name>
      <url>http://psst.jp/syn/</url>
      <email>shkr@wm.pdx.ne.jp</email>
    </author>
    <dc:subject>Develop</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://psst.jp/syn/">
      <![CDATA[<p>携帯で写真を撮ってメールに添付して送ると、写真をFlickrにアップし、FlickrのURLをTwitterにポストする…というスクリプトを作った。</p>]]>
      <![CDATA[<p>自分用に作ったのだけれど、どうせなら公開してみる。</p>

<p><a href="http://homepage.mac.com/syn/.Public/MyApps/pft-1.0.tar.gz">pft-1.0.tar.gz</a></p>

<p>めんどうなので、<strong>サポートとかは一切なしです。</strong><br />
また、<strong>このスクリプトを使った／使えなかった事により不利益があったとしても私は責任を負いません。</strong><br />
Perlモジュールで依存するものがいくつかあるけれど、getlibs.shを起動すると最低限のものは勝手に取ってきます。それでも足りないものは自分でなんとかして下さい。</p>

<p>動作としては、POPサーバにアクセスし、From: に指定されたメールアドレスがあれば受信して、添付写真のFlickrへのアップロードとTwitterへのポストを行う。<br />
Flickrに投稿するにはAPIキーとトークンを作る必要があって、まずAPIキーとsecretを「<a href="http://flickr.com/services/api/">Flickr Services</a>」の<a href="http://flickr.com/services/api/keys/apply/">APIキー作成フォーム</a>（要ログイン）で作成し、その後でauth_tokenを作る。auth_tokenの作成方法は「<a href="http://web.sfc.keio.ac.jp/~shokai/archives/2006/09/flickrupload.html">s.h.log: Flickr::Uploadで写真をアップロード</a>」が参考になる。<br />
その他に必要なのは、TwitterのアカウントとPOPサーバのアカウント。</p>

<p>以上の全ての設定は pft.conf に記述し、cronを利用して定期的に稼働させる。</p>

<pre># crontab の例
10/* * * * *     /path/to/pft/pft.pl -f /path/to/pft/pft.conf</pre>

<p>Linuxだと、次のようにして起動するとデバッグ動作になる。</p>

<p><kbd>DEBUG=1 /path/to/pft/pft.pl -f /path/to/pft/pft.conf</kbd><br />
</p>]]>
    </content>
  </entry>

</feed>
