peg-rstを書きました

公開してから日が空いてしまったのですが、 少し前にCのreStructuredTextパーサであるところの peg-rst をリリースしました。

「今までなかった情報は英語で記事を書く」みたいなことを言っておきながら、 英語書くの億劫だしなぁとか思ってたら日が経ってしまいました。 書かないぐらいならせめて日本語で書こうってことで、今キーボードを叩いてます。

以前、GoのreStructuredTextパーサ gorst を書いて、今もメンテナンスしていますが、 もともとCのMarkdownパーサからGoのMarkdownパーサに移植したものをベースにつくったので、 reStructuredTextでGoからCにまた移植できるかなぁと妄想しつつやっと手をつけた感じです。

まだまだバグは多いですが、細々とメンテナンスしていきたいなと思います。

バグ報告でもよいので、気軽に使ってフィードバックいただけるとありがたいです。

goremanを拡張してみた

foreman クローンであるところの goreman 便利ですよね。 よく使っています。

若干バッドノウハウな気もしますが、 コマンドの起動順序を制御したり、少し遅らせてコマンドを実行したい時があります。 以前は起動コマンドに sleep を挟んだりして対応していたのですが、 最近の変更(#41)で exec 経由でコマンドを実行するようになったため、 このワザが使えなくなってしまいました。

 web1: sleep 2.5; go run web.go
 web2: sleep 3.5; go run web.go

拡張する

起動順と起動までの時間を制御するためにforkして独自拡張を追加してみました。

https://github.com/hhatto/goreman

Procfileの記法は プロセス名: 実行コマンド のような形で作成するのですが、 プロセス名: の間に () 内に設定を記載できるようにしました。

具体的には以下の様な感じです。

オリジナルのProcfile

 web1: plackup --port $PORT
 web2: plackup --port $PORT
 web3: bundle exec ruby web.rb
 web4: go run web.go -a :$PORT

拡張後のProcfile

 web1: plackup --port $PORT
 web2(delay=1000): plackup --port $PORT
 web3(priority=2): bundle exec ruby web.rb
 web4(delay=2500,priority=-2): go run web.go -a :$PORT

インストールして使う。

 $ go get -u github.com/hhatto/goreman
 $ goreman start

今の所便利に使えています。 もちろんオリジナルのProcfile記法でもそのまま動きます。

[2017.07.14追記]

プロセスを終了する際のシグナルをしていできるようにしました。 goremanはデフォルトで SIGHUP でプロセス終了させるのですが、 redis-serverSIGHUP を無視しているので、他のシグナルで終了させたいなと。 sig=XXX のように指定できます。

Magick++ (GraphicsMagick) problems when using drawing text with DrawableFont() on macOS

Environment

  • MacOSX 10.11.6
  • GraphicsMagick 1.3.25 (installing with Homebrew)

If you get error when you specify "Arial" or "Microsoft Sans Serif" to font family. For example as following code:

 // drawfont.cpp
 #include <iostream>
 #include <Magick++.h>

 using namespace Magick;
 using namespace std;

 int main(int argc, char **argv)
 {
     try {
         InitializeMagick(*argv);
         Color bg_color = Color("red");

         Image image("1000x1000", bg_color);

         std::list<Magick::Drawable> drawList;

         drawList.push_back(DrawablePointSize(200));
         drawList.push_back(DrawableFont("Microsoft Sans Serif", AnyStyle, 400, AnyStretch));
         //drawList.push_back(DrawableFont("/Library/Fonts/Arial.ttf"));     // no problem
         drawList.push_back(DrawableText(10,150,"hello"));
         drawList.push_back(DrawableFont("Arial", AnyStyle, 400, AnyStretch));
         drawList.push_back(DrawableText(10,500,"hello"));

         image.draw(drawList);
         image.write("out.jpg");
     }
     catch(exception & error_)
     {
         cout<<"Caught exception : " << error_.what() << endl;
     }
 }

Error Message

I get the following error

 $ clang++ -std=c++11 -L/usr/local/lib -lGraphicsMagick++ -I/usr/local/include/GraphicsMagick -o drawfont drawfont.cpp
 $ ./drawfont
 Caught exception : Magick: Unable to read font (/usr/local/share/ghostscript/fonts/n019003l.pfb) reported by magick/annotate.c:1063 (RenderFreetype)

Solution

setup to type.mgk file.

script of generate type.mgk from system_profiler's font list (mgkgen.py)

setup sequence

$ system_profiler -xml SPFontsDataType > fontset.xml
$ python3 mgkgen.py fontset.xml > type.mgk
# backup if you need
$ cp /usr/local/Cellar/graphicsmagick/1.3.25/lib/GraphicsMagick/config/type.mgk /usr/local/Cellar/graphicsmagick/1.3.25/lib/GraphicsMagick/config/type.mgk.bk
$ cp type.mgk /usr/local/Cellar/graphicsmagick/1.3.25/lib/GraphicsMagick/config/type.mgk

check font list

 $ gm convert -list font
 Path: /usr/local/Cellar/graphicsmagick/1.3.25/lib/GraphicsMagick/config/type.mgk

 Name                             Family                  Style   Stretch  Weight
 --------------------------------------------------------------------------------
 .SFNSDisplay-Ultralight          System Font             normal  normal    400
 BigCaslon-Medium                 Big Caslon              normal  normal    400
 Silom                            Silom                   normal  normal    400
 .SFNSText-Light                  System Font             normal  normal    400
 Chalkduster                      Chalkduster             normal  normal    400
 STIXSizeThreeSym-Regular         STIXSizeThreeSym        normal  normal    400
 TimesNewRomanPSMT                Times New Roman         normal  normal    400
 AppleBraille-Pinpoint8Dot        Apple Braille           normal  normal    400
         :
 MalayalamMN                      Malayalam MN            normal  normal    400
 MalayalamMN-Bold                 Malayalam MN            normal  normal    400
 STIXSizeTwoSym-Regular           STIXSizeTwoSym          normal  normal    400
 AlTarikh                         Al Tarikh               normal  normal    400
 .AlTarikhPUA                     .Al Tarikh PUA          normal  normal    400
 DecoTypeNaskh                    DecoType Naskh          normal  normal    400
 .DecoTypeNaskhPUA                .DecoType Naskh PUA     normal  normal    400
 Farah                            Farah                   normal  normal    400
 .FarahPUA                        .Farah PUA              normal  normal    400

try again

 $ ./drawfont
 $ ls
 out.jpg

Lifelog 2017.03

Backpack

2016年のふりかえりとか

Older Blog Posts