<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:wfw="http://wellformedweb.org/CommentAPI/"
     >
  <channel>
    <title>mojavy.com</title>
    <link>http://mojavy.com/blog</link>
    <description></description>
    <pubDate>Fri, 07 Mar 2014 00:09:26 GMT</pubDate>
    <generator>Blogofile</generator>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>自炊した書籍のpdfのコントラストを3clickくらいで上げる方法 on Mac OS X</title>
      <link>http://mojavy.com/blog/2014/03/07/high-contrast-pdf-osx/</link>
      <pubDate>Fri, 07 Mar 2014 00:09:26 JST</pubDate>
      <category><![CDATA[osx]]></category>
      <category><![CDATA[mac]]></category>
      <guid isPermaLink="true">http://mojavy.com/blog/2014/03/07/high-contrast-pdf-osx/</guid>
      <description>自炊した書籍のpdfのコントラストを3clickくらいで上げる方法 on Mac OS X</description>
      <content:encoded><![CDATA[<p><img alt="preview app" src="/images/20140307/preview200.png" /> </p>
<p>スキャンしたpdf書籍だと、自炊業者にやってもらったとしても、どうしても文字が薄くなってしまいます。
業者によっては補正オプションがついてたりもしますが、<code>preview.app</code>のexport機能を使えば簡単にコントラストをあげられます。</p>
<p>メニューバー ＞ ファイル ＞ 書き出す ＞ Quartzフィルタ ＞ Lightness Decrease</p>
<p>で適当なところに保存。</p>
<p><img alt="menu" src="/images/20140307/menu1.png" /> <img alt="menu2" src="/images/20140307/menu2.png" /> </p>
<p>以下は実行前後のサンプル。これだけだとわかりにくいかもしれないけど、文字がぎっしりしたページだとコントラストが高い方が断然読みやすい。</p>
<p><img alt="before" src="/images/20140307/before300.png" />  <img alt="after" src="/images/20140307/after300.png" /> </p>
<p>大きいファイルサイズのpdfだとそれなりに時間(数分くらい)はかかるので注意。</p>
<p>参考： <a href="http://osxdaily.com/2011/10/24/increase-the-contrast-of-a-pdf-to-sharpen-darken-text/">http://osxdaily.com/2011/10/24/increase-the-contrast-of-a-pdf-to-sharpen-darken-text/</a> </p>]]></content:encoded>
    </item>
    <item>
      <title>Mach-Oバイナリのライブラリロードパスをカスタマイズする方法</title>
      <link>http://mojavy.com/blog/2013/05/17/mach-o-rpath/</link>
      <pubDate>Fri, 17 May 2013 19:46:31 JST</pubDate>
      <category><![CDATA[osx]]></category>
      <category><![CDATA[unix]]></category>
      <category><![CDATA[elf]]></category>
      <category><![CDATA[mach-o]]></category>
      <guid isPermaLink="true">http://mojavy.com/blog/2013/05/17/mach-o-rpath/</guid>
      <description>Mach-Oバイナリのライブラリロードパスをカスタマイズする方法</description>
      <content:encoded><![CDATA[<p><img alt="matrix" src="/images/matrix3.png" /></p>
<p>ライブラリの単体テストをするときとかに、実行プログラムがロードする共有ライブラリのパスを任意のディレクトリで上書きしたいときがある。</p>
<p>例えば以下のようなディレクトリ構成で、<code>project/t/mytest</code>というバイナリをビルドするときに<code>project/src/libmy.so</code>をリンクするようにしておけば作業しやすい。</p>
<div class="pygments_borland"><pre>└── project
    ├── src
    │   ├── libmy.a
    │   ├── libmy.so -&gt; libmy.so.1
    │   ├── libmy.so.1
    │   ├── Makefile
    │   ├── mylib.c
    │   ├── mylib.h
    │   └── mylib.o
    └── t
        ├── Makefile
        ├── mytest
        ├── mytest.c
        └── mytest.o
</pre></div>

<p>こういうときは、<code>mytest</code>をビルドするときに以下のようにしてrpathを相対パスで追加していた。</p>
<div class="pygments_borland"><pre>$ cc -I../src -L../src -Wl,-rpath=../src *.c -lmy -o mytest
$ readelf -d mytest
Dynamic section at offset 0xe30 contains 22 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libmy.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x000000000000000f (RPATH)              Library rpath: [../src]
 0x000000000000000c (INIT)               0x4004c8
 0x000000000000000d (FINI)               0x4006f8
 0x000000006ffffef5 (GNU_HASH)           0x400298
 0x0000000000000005 (STRTAB)             0x4003c0
 0x0000000000000006 (SYMTAB)             0x4002d0
 0x000000000000000a (STRSZ)              134 (bytes)
 0x000000000000000b (SYMENT)             24 (bytes)
 0x0000000000000015 (DEBUG)              0x0
 0x0000000000000003 (PLTGOT)             0x600fe8
 0x0000000000000002 (PLTRELSZ)           48 (bytes)
 0x0000000000000014 (PLTREL)             RELA
 0x0000000000000017 (JMPREL)             0x400498
 0x0000000000000007 (RELA)               0x400480
 0x0000000000000008 (RELASZ)             24 (bytes)
 0x0000000000000009 (RELAENT)            24 (bytes)
 0x000000006ffffffe (VERNEED)            0x400460
 0x000000006fffffff (VERNEEDNUM)         1
 0x000000006ffffff0 (VERSYM)             0x400446
 0x0000000000000000 (NULL)               0x0
</pre></div>

<p>しかし、OSXの場合は上記のように単に実行バイナリ側にrpathを追加しただけだと、ローダがrpathを設定するコマンドより先にライブラリをロードするコマンドを実行しようとして該当ファイルがみつけられなくて以下のようなエラーになってしまう.</p>
<div class="pygments_borland"><pre>dyld: Library not loaded: libmy.1.dylib
  Referenced from: /Users/path/to/project/t/./mytest
  Reason: image not found
zsh: trace trap  ./mytest
</pre></div>

<p><code>otool -l &lt;executable file&gt;</code>でロードコマンドの詳細をみると以下のようなエントリがみつかるが、ここのnameの値はライブラリ側の<code>install_path</code>が設定される。</p>
<div class="pygments_borland"><pre>-- 中略
Load command 11
          cmd LC_LOAD_DYLIB
      cmdsize 40
         name libmy.1.dylib (offset 24)
   time stamp 2 Thu Jan  1 09:00:02 1970
      current version 1.0.0
compatibility version 0.0.0
</pre></div>

<p><code>install_path</code>は<code>soname</code>のかわりのようなもので、なにも指定しなければ出力ファイル名になる。
ここに<code>@executable_path</code>や<code>@rpath</code>をつかうことによって、このダイナミックライブラリをリンクする側のバイナリに応じて挙動をかえることができる。
これらの変数(?)の詳細は参考リンクに解説がある。</p>
<p>要は、ELFのrpathとおなじような挙動にしたければ、 <code>-Wl,-install_name,@rpath/libmy.1.dylib</code> というようなオプション付きでライブラリをビルドすればよい。</p>
<p>また、<code>-Wl,-install_name,@executable_path/../src/libmy.1.dylib</code>のようにすると実行ファイルからの相対パスにすることができる。</p>
<p>この情報はリンクされる側のライブラリに埋めこまれている点に注意。</p>
<p>ELFに比べると柔軟にロードパスを制御することができると思われるが、うまく活用するのはちょっと難しそう。</p>
<h4 id="_1">参考リンク</h4>
<ul>
<li><a href="https://wincent.com/wiki/@executable_path,_@load_path_and_@rpath">@executable_path, @load_path and @rpath </a> </li>
<li><a href="https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/DynamicLibraryDesignGuidelines.html">DynamicLibraryDesignGuidelines</a> </li>
</ul>]]></content:encoded>
    </item>
  </channel>
</rss>
