2011年7月17日日曜日

XPERIA acroにインストールしたアプリ

題名のとおりインストールしたアプリのメモとか。

他の夏モデルのauのアンドロイド機を触ってみたが、アプリによっていろいろ個性があるものだね。
これはほしいと思ったアプリはステータスバーからWiFiやBluetooth、バッテリー状況などの設定をするアイコンや起動中のアプリの表示、終了できるアプリかな。(XPERIA acroだけなかった)

ウィジット

  • S2 カレンダーウィジェット2
    カレンダーを表示するウィジット。日本の休日とかにもバッチリ対応しているところが決めて。
  • Yahoo!天気情報
    天気予報を表示するウィジット。地域や更新間隔が設定できるしアイコンもシンプルでいい。

メディア

  • radiko.jp for Android v2 (NEW)
    公式のサイマルラジオ視聴アプリ。サービス域内の人は入れても損はないかも。
  • Skiftaベータ
    DLNAクライアント。一番安定しているらしい。
  • ³
    デザインにこだわった音楽プレイヤー。
  • ウバ 無音 カメラ Free
    シャッター音を消した状態で撮影できる。お店で周りを気にしないで料理を撮影できますね。
  • PCM録音
    高音質で録音してくれるレコーダ。
  • Reduce Photo Size
    でかいサイズの写真しか撮れないのでTwitterなどに投稿する場合はこのソフトを使って縮小できます。
  • FxCamera
    いろいろな効果で撮影できるアプリ。

ツール

  • KeepScreen 
    指定したアプリに対してスリープ状態を解除してくれる。
  • URLを短くして共有する
    URLを共有すると勝手にURL先のタイトルとURL短縮して別のソフトへ共有できる。
  • ES ファイルエクスプローラー
    SDカード、無線LAN、ftpクライアント機能が使えるファイルマネージャ。ちょっとしたファイルのやり取りならわざわざPCに繋げずにこのソフトで十分。
  • QRコードスキャナー
    ガラケー機能にも対応といいながらQRコードスキャナーが標準で付いてないんだよね。これが一番評判がいいっぽい。
  • Tiny Flashlight + LED
    カメラのフラッシュを懐中電灯にするアプリ。
  • Google 翻訳
    音声入力にも対応したGoogle謹製の翻訳アプリ。
  • ローテーション設定ウィジェット
    ステータスバーから画面の回転設定ができるアプリ。
  • Task Switcher
    ホームボタンを押すと起動中のタスクを切り替えられるソフト。
  • ES Task Manager
    メモリを空けたりバッテリーを節約するためにタスクを強制終了させるアプリ。2.3になってタスク管理が賢くなったらしいので必要性はあまりないらしいが・・・。
  • Adobe® Reader®
    やっぱりPDFを見るなら本家が一番?でも見る機会あまりないけどね。
  • CamScanner -スキャン・PDF作成
    カメラをスキャナがわりにするソフト。

通信

  • 2chMate
    2ちゃんねるブラウザ。数あるソフトでは一番使いやすいのかな。
  • twicca
    Androidで一番使いやすいtwitterクライアントかな。
  • Dolphin Browser HD
    標準ブラウザに比べて使いやすいかな。ジェスチャーにも対応。
  • Google Reader
    Google Reader公式アプリ。サービスを利用している人にとっては悪くはないのでは?
  • GBookmark
    Googleブックマークのクライアント。使いやすいよ。
  • Yahoo!ヘッドライン
    ニュースから天気予報、スポーツと情報満載。ケータイならお金取られるレベルだよね。

ゲーム

  • Angry Birds
    世界中でヒットしているゲームだが遊んで一言。引越し奉行のパク・・・インスパイアされたゲームなのかな。
  • 麻雀 雷神 -Rising-
    無料にしてはよく出来ていた麻雀ソフト。バッテリー食いまくるのが難点か?
  • Snes9x EX
    まだ試していないけど(笑)、ケータイでエミュができる時代とはね。

エンターテイメント

2011年7月12日火曜日

YouTubeからの動画ダウンロードメモ

よく忘れるのでメモ。

GreaseMonkeyのYousableTubeFix(Chromeの場合はYousableTubeFix for Chrome)を導入すると動画の下にDownloadという項目ができるので、ダウンロードしたい形式を選べば保存ができます。
YouTube以外の動画サイト(DairyMotionとか)はFirefox + FlashGotを使えば簡単にダウンロードできる。

YouTubeはほとんどの画質でmp4でダウンロードできるので問題ないが480p(854x480)のみはFLV形式しかないみたいなのでmp4形式に変換する場合は、SUPER©を使って変換します。
VideoとAudioの項目のStream Copyにチェックを入れれば無劣化で変換できる。

2011年7月11日月曜日

XPERIA acroメモ

ついに購入してしまったスマートフォン。
出たはいいが予想通り微妙な端末(というかソフト)しか出せなかったあう。
やっと問題ないレベルのラインナップになったので買ってもいいかなと。

ちなみにDocomoとauとではアルファベットが大文字小文字で微妙に違うんだよね。 (知ってた?)

適当に感想とか・・・。

 

液晶

液晶はフルカラー液晶なので綺麗。はじめのうちは少し黄色っぽかったがそのうち問題ないレベルになる。
あと、天気の良い外でも良好で普通に問題なく見れる。
ただし、視野角が狭い。店頭で見る限りINFOBAR A01のほうが(なぜか)よく見えるんだよね。
あとたまにちらつきが・・・。(照度センサーが悪さしているらしい)

カメラ

Exmor R for Mobile搭載810万画素のカメラ搭載。
スナップショットを撮ると考えれば優秀な部類かなと。ソフトも機能はとりあえずは揃っているので問題ないかと。
だが、少しわかりにくく使いにくい。(マニュアル読めばいいだけだが)
問題は、カメラの解像度が画素数2M、6M、8Mからしか選択できないこと。これでは写真とってソーシャルメディアに投稿するだけなのにでかい画像が保存されちゃうよ。

ポータブルオーディオプレイヤーレベルの音質はあるかと。手元にあるiPod(nano 3rd)と同等かやや上かな?。
ブルートゥースからの再生も問題ない。カーナビのAUXにステレオミニジャックで接続可能。
標準のソフトにイコライザーも付いているので普通に満足できるレベルかと。(Androidでこれぞ決定版というプレイヤーがまだ現れていないだけなのだが。)

その他

通話の音質はもともと電話をよくするわけではないのでパス。
連絡先のアドレス帳がグループ分け出来ない。他のソフトでもできないらしい?のでたぶん端末側のソフトに問題があるのかな。(未調査)
一番気になるのは通知用のLEDランプが眩しすぎる。通電中はずうっと付きっぱなしなので暗い部屋でも眩しいくらいに光る。PCパーツなどにこれでもかと鬱陶しいくらいに青く光るLEDと同じ問題です。
文字入力はPOBox。arcとの違いはフリック入力ができるようになったことくらいかな。
バッテリーに関しては結構もつ方っぽいですね。INFOBAR A01なんかバッテリー持たないと死屍累々・・・。

2011年6月4日土曜日

FrameMaker 10とExtendedScriptのeSeminar

FrameMaker 10とExtendedScriptのセミナーがAdobe eSeminarであったみたいです。

その時のサンプルデータとスライドが下のブログに上がっています。 http://frameautomation.com/2011/05/31/framemaker-10-extendscript-slides/

オブジェクトチェックにObjectValid()というメソッドがあったのか。
あと、イベント処理とかもいけるのか。

2011年5月11日水曜日

ESTKを使ってFrameMakerのイラスト挿入

スクリプトを使ってカーソルの位置にアンカー枠を作成してその中に画像を挿入する例。
オブジェクトビュアーの列挙型の情報がアレなので結局FDKリファレンスを見たほうが早いという罠。

(function(){
    // Insert illust filename
    var InsertFile = "hogehoge.jpg";

    var docObj = app.ActiveDoc;
    if (docObj.id === 0)
    {
        Alert("select document", Constants.FF_ALERT_CONTINUE_NOTE);
        return;
    }
    
    var selObj = docObj.TextSelection;
    if (selObj.beg.obj.id === selObj.end.obj.id && selObj.beg.offset === selObj.end.offset)
    {
        // Add Anchored frame
        var aframeObj = docObj.NewAnchoredAFrame(selObj.beg);
        aframeObj.AnchorType = Constants.FV_ANCHOR_BELOW;
        aframeObj.FP_Alignment = Constants.FV_ALIGN_CENTER;
        
        // Insert illust in anchored frame
        var graphicObj = docObj.NewGraphicObject (Constants.FO_Inset, aframeObj);
        graphicObj.InsetFile = InsertFile;
        graphicObj.InsetDpi = 150;
        
        // Fit anchored frame
        aframeObj.Width = graphicObj.Width;
        aframeObj.Height = graphicObj.Height;
    }
    else
    {
        Alert("select text insert location", Constants.FF_ALERT_CONTINUE_NOTE);
    }
})();

2011年4月30日土曜日

iTextで移動先の設定する方法

PDF間で特定の位置にリンクする場合、移動先名を設定しないとできません。

iTextで作成する場合、PdfDestinationで飛び先の位置を設定を予め作成したあとにそれぞれのページに追加します。 PdfContentByteもしくはPdfWriterのどちらかから追加できます。また一括でAddNamedDestinationsを使って一括に登録することが可能です。

次は新規文書に移動先を設定する例です。

using System;
using System.Drawing;
using iTextSharp.text;
using iTextSharp.text.pdf;
 
namespace ConsoleApplication1
{
    class Program
    {
        const float pt2mm = 72f / 25.4f;
 
        static void Main(string[] args)
        {
            string savePdf = "hogehoge.pdf";
            string loadPdf = "fugafuga.pdf";
 
            // 新規から作成
            string outputPath = @"hogehoge.pdf";
            Document pdoc = new Document(PageSize.A4);
            PdfWriter pw = PdfWriter.GetInstance(pdoc, new FileStream(outputPath, FileMode.Create));

            // 移動先の場所を設定
            PdfDestination dest = new PdfDestination(PdfDestination.XYZ, 105 * pt2mm, 148.5F * pt2mm, 0);
            
            // コンテンツの書き出し
            pdoc.Open();
            PdfContentByte pcb = pw.DirectContent;
            pcb.LocalDestination("name1", dest);        // 移動先名の作成
            Paragraph p = new Paragraph("Hello World");
            pdoc.Add(p);
            pcb.ClosePath();

            pdoc.NewPage();

            pw.AddNamedDestination("name2", 2, dest);   // 移動先名の作成
            pcb.ClosePath();
            pdoc.Close();
        }
    }
}

だが既存のPDFに追加する場合、新規から作成する場合と同じ設定を行ってもバグなのか分からないが追加することはできません。

仕方が無いので直接命令を書き込みます。
移動先の設定はCatalog→Names→Dests→Namesで取得できます。

PdfReader pdf = new PdfReader(@"hogehoge.pdf");
PdfDictionary root = pdf.Catalog;
PdfDictionary pDests = root.GetAsDict(PdfName.NAMES).GetAsDict(PdfName.DESTS);
PdfArray pDestNames = pDests.GetAsArray(PdfName.NAMES);
if (pDestNames == null)
{
    // 移動先の設定がない場合、作成する
    pDests.Put(PdfName.NAMES, new PdfArray());
    pDestNames = pDests.GetAsArray(PdfName.NAMES);
}

配列に移動先名、移動先の設定の順番に書き込みます。

PdfDestination dest = new PdfDestination(PdfDestination.XYZ, 0, 0, 0);
dest.AddPage(pdf.GetPageOrigRef(1));
pDestNames.Add(new PdfString("name1"));
pDestNames.Add(dest);

まとめると次のとおりになります。

using System;
using System.Drawing;
using iTextSharp.text;
using iTextSharp.text.pdf;
 
namespace ConsoleApplication1
{
    class Program
    {
        const float pt2mm = 72f / 25.4f;
 
        static void Main(string[] args)
        {
            string sourcePdf = @"hogehoge.pdf";
            string outputPath = @"fugafuga.pdf";

            PdfReader pdf = new PdfReader(sourcePdf);
            PdfStamper stamper = new PdfStamper(pdf, new FileStream(outputPath, FileMode.Create));

            // 既存PDFにあれこれ追加
            PdfContentByte cb = stamper.GetUnderContent(1);
            cb.BeginText();
            cb.SetFontAndSize(BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED), 18);
            cb.ShowTextAligned(Element.ALIGN_LEFT, "Sample", 30, 600, 0);
            cb.EndText();

            // 移動先の生成
            PdfDestination dest = new PdfDestination(PdfDestination.XYZ, 0, 0, 0);
            if (dest.HasPage())
                dest.ArrayList[0] = pdf.GetPageOrigRef(2);
            else
                dest.AddPage(pdf.GetPageOrigRef(2));

            // 移動先を設定
            PdfDictionary root = pdf.Catalog;
            PdfDictionary pDests = root.GetAsDict(PdfName.NAMES).GetAsDict(PdfName.DESTS);
            PdfArray pDestNames = pDests.GetAsArray(PdfName.NAMES);
            if (pDestNames == null)
            {
                pDests.Put(PdfName.NAMES, new PdfArray());
                pDestNames = pDests.GetAsArray(PdfName.NAMES);
            }
            pDestNames.Add(new PdfString("name"));
            pDestNames.Add(dest);

            stamper.Close();
            pdf.Close();
        }
    }
}

2011年4月24日日曜日

FDKサンプルからスクリプトに移植1

FM10のスクリプトはサンプルファイルがほとんど無く、リファレンスガイドすらない状態なので調査も兼ねてFDKサンプルのtextを移植してみました。
移植してみた雑感としては
  • 基本はFDKの仕様をオブジェクト化したという感じ(F_ObjHandleTの数値は各オブジェクトのidプロパティにある)
  • F_Printfに対応する命令がない?(今回はalertでごまかしてある)
  • alert(Javascript)とAlert(FrameMaker)とは違う
  • やっぱりポインタを気にすることないので非常に楽(特に文字列!)
XML読み書きのアプリケーションやDDE、COM、Win32APIを利用したいという場面以外ではFDKを使用するということはなくなるのではないだろうか。
var mMenu = app.GetNamedMenu("!MakerMainMenu");
var nMenu = mMenu.DefineAndAddMenu("APIMenu", "TextApi");

nMenu.DefineAndAddCommand(1, "GetTextCmd", "Get Text","");
nMenu.DefineAndAddCommand(2, "AddTextCmd","Insert Text","\\!GT");
nMenu.DefineAndAddCommand(3, "DeleteTextCmd", "Delete Text", "\\!IT");
nMenu.DefineAndAddCommand(4, "ColorTextCmd", "Color Text", "\\!DT");
nMenu.DefineAndAddCommand(5, "FontSizeCmd", "Change Font Size", "\\!CT");

UpdateMenus();

function Command(command)
{
    var doc = app.ActiveDoc;
    if(doc.id === 0)
        Alert("Please selected Document.", Constants.FF_ALERT_CONTINUE_WARN);

    switch(command)
    {
    /* Get text from selection. */
    case 1: 
        var tr = doc.TextSelection;
        
        if (tr.beg.obj.id === 0 || ((tr.beg.obj.id === tr.end.obj.id) && (tr.beg.offset === tr.end.offset)))
        {
            Alert("Please select some text and try again.", Constants.FF_ALERT_CONTINUE_WARN);
            break;
        }
        var textItems = doc.GetTextForRange(tr, Constants.FTI_String);
        alert(CreateStringFromTextItems(textItems));
        break;
        
    /* Add text. */
    case 2:
        var tr = doc.TextSelection;
        if (tr.beg.obj.id === 0)
        {
            Alert("Please select an insertion point and try again.", Constants.FF_ALERT_CONTINUE_WARN);
            break;
        }
        if (!((tr.beg.obj.id === tr.end.obj.id) && (tr.beg.offset === tr.end.offset)))
        {
            if (Alert("Do you wish to overwrite the selected text?", Constants.FF_ALERT_NO_DEFAULT))
                break;
        }
        doc.AddText(tr.beg, "The new CoffeeTool\011");
        break;

    /* Delete selected text. */
    case 3:
        var tr = doc.TextSelection;
        if (tr.beg.obj.id === 0 || ((tr.beg.obj.id === tr.end.obj.id) && (tr.beg.offset === tr.end.offset)))
        {
            Alert("Please select some text and try again.", Constants.FF_ALERT_CONTINUE_WARN);
            break;
        }

        doc.DeleteText(tr);
        break;

 /* Change the color of selected text to Red. */
 case 4:
        var tr = doc.TextSelection;
        if (tr.beg.obj.id === 0 || ((tr.beg.obj.id === tr.end.obj.id) && (tr.beg.offset === tr.end.offset)))
        {
            Alert("Please select some text and try again.", Constants.FF_ALERT_CONTINUE_WARN);
            break;
        }
        var color = doc.GetNamedObject(Constants.FO_Color, "Red");  // Color name is different in each language.
        var props = doc.GetTextProps(tr.beg);
        var i = GetPropIndex(props, Constants.FP_Color);
        props[i].propVal.obj = color;
        doc.SetTextProps(tr, props);
        break;

    /* Change the font size of the selected text to 30 points. */
    case 5:
        var tr = doc.TextSelection;
        if (tr.beg.obj.id === 0 || ((tr.beg.obj.id === tr.end.obj.id) && (tr.beg.offset === tr.end.offset)))
        {
            Alert("Please select some text and try again.", Constants.FF_ALERT_CONTINUE_WARN);
            break;
        }
        /* Allocate memory for the property list. */
        props = AllocatePropVals(1);
        /* Set up the properties. */
        props[0].propIdent.num = Constants.FP_FontSize;
        props[0].propVal.ival = 30 * 65536;
        props[0].propVal.valType = Constants.FT_Metric;
        /* Apply the property list to the text selection. */
        doc.SetTextProps(tr, props);
        break;
    }
}

/***************************************************************
* Create a string from an TextItems structure.
****************************************************************/
function CreateStringFromTextItems(textItems)
{
    var s = "";
    for (var i = 0; i < textItems.length; i++)
    {
        if (textItems[i].dataType === Constants.FTI_String)
        {
            s += textItems[i].sdata;
        }
    }
    
    return s;
}