読者です 読者をやめる 読者になる 読者になる

インラインで計算可能なiOSキーボードTwo By Two

ちょっと残念な点があるものの、同種のアプリの中ではあまりなかった機能を持っている感じがしたのでご紹介。

アプリを切り替えなくてもキーボード側で計算ができる、いわゆる電卓機能付きキーボードです。

同ジャンルの他アプリはキーボード内で計算して計算結果をエディタに出力します。しかし、Two By Twoは、計算式を普通にエディタ上に出力した後に計算できるのです。

▽例えば「324.25 / 4」と入力して4の直後にカーソルがある状態で「=R」ボタンを押すと「324.25 / 4 = 81.0625」に変換されます。

これにより、すでに他のアプリで入力済みの計算式も計算できますし、計算式の再利用も容易になります。

その他にも[ ]部分を無視して計算してくれるコメント機能だったり、自動カッコ補完だったり、いろいろ良さげな機能があります。


しかしながら、冒頭で述べたように、ちょっと残念な点も。。。

logとlnが逆

ln(10)=1、log(e)=1になります。
例えば小数点を,か.のどちらにするか的な、国によって異なるものは設定から変更可能ですが、logとlnはそういうことはないはずです。おそらくバグです。

!と√が記号に見えて単なる飾り

!(5)=5、√(4)=4になります。これもおそらくバグではないかと。√の代わりには逆数乗4∨2=2を使うのがいいかも。

不正な数式を入力した場合どこまで計算対象として認識されたか分かりにくい

「π=3.1416」であれば4πは?
「4π=3.1416」と計算されてしまいます。正しくは4*π。これはカーソル位置から左方向に計算式として妥当な箇所までしか計算対象とならないためです。


以上、Two By Twoのご紹介でした。
全然関係ない余談ですが、iOS10のホーム画面3Dタッチからの共有にOpenerを使うと、アプリをApp Storeで開いたり、ホーム画面に追加したWebページを好きなブラウザで開いたりが、手軽にできていい感じです。

Opener ‒ open links in apps

Opener ‒ open links in apps

  • tijo, inc.
  • ユーティリティ
  • ¥240

YouTubeフィルタ検索URLジェネレータ

フィルタやソートを選択すると、それらを指定した時のYouTube検索URLが下部に表示されます。*1


キーワード

アップロード日

タイプ

時間

特徴

並べ替え


*1:バイル版ではフィルタの内容を表示してくれませんが、アップロード日と並び替え以外は検索結果に反映されると思います。

テーブルを表示するHandyFlowyスクリプトConv2table

WorkFlowyは基本的に一対多の親子関係を表現します。
多対多の関係を表現したいときは、テーブルの方が適しているでしょう。

また、WorkFlowyでは画像を表示可能。
Get WorkFlowy Inline Images out of your System in 2016 – WorkFlowy Blog
であれば、テーブルだって表示できるはずです。

と考えてHandyFlowyスクリプトを作りました。

HandyFlowy

HandyFlowy

  • Michinari YAMAMOTO
  • 仕事効率化
  • 無料

"@table"が1行目に記述されているノートに対し、2行目以降をテーブルに変換してノートの直上に描画します。
区切り文字は","で。変換はリアルタイムに行われます。

Conv2tableをMemoFlowy経由で登録

function do_parseTbl() {
    $(this).prevAll(".content-tbl").remove();
    var lines = $(this).text().split("\n");
    if ( !/@table/.test(lines[0]) ) return;
    var tbl = '';
    for (var i = 1; i < lines.length; i++) {
        var line = lines[i];
        if (line == '') continue;
        var td = i==1 ? 'th' : 'td';
        tbl += '<tr><' + td + '>';
        tbl += line.split(',').join('</' + td + '><' + td + '>');
        tbl += '</' + td + '></tr>';
    }
    tbl = '<table class="content-tbl">' + tbl + '</table>';
    $(this).before(tbl);
}

function parseTbl() {
    $("div.notes div.content").bind("DOMSubtreeModified", do_parseTbl);
    $("div.notes div.content").each(do_parseTbl);
    $("#expandButton,parentArrow").live("click", function() {
        $("div.notes div.content").each(do_parseTbl);
    });
};

$(window).bind("load hashchange", parseTbl);

var stylesheet = document.styleSheets.item(0);
stylesheet.insertRule(" .content-tbl td,.content-tbl th { border:1px #777 solid;padding:5px; font-size:13px; } ", stylesheet.cssRules.length);

parseTbl();

※2016.05.28 スマホ版の折り畳みボタンタップ時も表示されるように修正

HandyFlowyで日本語タグも一覧表示するTagListUni

こちらのTagListスクリプトのカスタマイズ版です。
d.hatena.ne.jp

HandyFlowy

HandyFlowy

  • Michinari YAMAMOTO
  • 仕事効率化
  • 無料

TagListUniではTagListから以下の箇所を変更しました。
・日本語(含むUnicode)タグも表示されるようにした
・縦方向のリストでなく羅列する形式にした
・文字の大きさのlarge指定をなくし普通の文字サイズにした

使い方はTagListと同じですのでTagListの記事を参照ください。

TagListUniをMemoFlowy経由で登録

url="https://workflowy.com/get_initialization_data";
q=new XMLHttpRequest();
q.open("get",url,false);
q.send(null);
data=q.responseText;
data = data.replace(/((?:\\\\)*)\\(u[0-9a-f]{4})/g, function(arg0,arg1,arg2){return arg1+"%"+arg2});
data=unescape(data);
list=new Array();
tag="@";
for(k=0;k<2;k++){
  d=data.split(tag);
  for(i=1;i<d.length;i++){
    s=d[i].split(" ")[0].split("\"")[0].split("\\")[0];
    if(s && !/[;{)\/\+]/.test(s) && list.indexOf(tag+s)==-1) list.push(tag+s);
  }
  tag="#";
}
list.sort();

listwidth=320;
listleft=(window.innerWidth-listwidth)/2;
html="";
for(i=0;i<list.length;i++){
  html+="<div onclick=Select("+i+") style=padding:5px;overflow:hidden;white-space:nowrap;display:inline-block;>"+list[i]+"</div>";
}

e=document.createElement("div");
e.innerHTML=html;
e.style.cssText="color:black;background:beige;font-family:Hiragino Sans;font-weight:bold;position:fixed;overflow:scroll;text-align:left;height:72%;top:14%;left:"+listleft+"px;width:"+listwidth+"px;z-index:99;border:1px white solid;box-shadow:5px 5px 5px 5px rgba(0,0,0,0.2);";
document.body.appendChild(e);

function Select(x){
  document.body.removeChild(e);
  location="https://workflowy.com/#/?q="+list[x].replace(/#/,"%23");
}

XMLHttpRequestを使わずdocument_view.js内で使われている関数などを使って実装すれば、タグの正確な抽出と高速化ができそうですが、処理の流れを追いきれませんでした。

あとがき

機能拡張スクリプトライブラリ作成計画、良さそうですね。

スクリプトのインポート自体にリスクがある上、MemoFlowy経由のインポートは敷居が高かったり手間取ったりするので、審査済みのスクリプトライブラリからワンタップインポートできたら安全性も利便性も高まりそうです。

ライブラリへの掲載や記事へのリンクの許可については、今のところwineroses氏のコバンザメスクリプトしか作れていないので、右に倣います。

HandyFlowy上でJavaScriptやCSSの動作確認を手軽に行うスクリプトTester

wineroses氏のScriptMakerStylenoteに触発されまして。

HandyFlowy

HandyFlowy

  • Michinari YAMAMOTO
  • 仕事効率化
  • 無料

HandyFlowyの機能拡張スクリプトiPhoneでぽちぽち作成しようとすると、登録するまで挙動がわからず作成中のテストスクリプトをいくつも登録する事態に陥ります。

Testerはテストスクリプトとして登録することなくJavaScriptCSSの挙動を確認できる機能拡張スクリプトです。

window.onerror = function(mes, src, line, col, err) {
  alert('['+line+'] '+mes);
};
(function(){
  var p = pageContainer.getElementsByClassName("project selected noted")[0];
  if(!p){
    alert("No script in Note.");
    return;
  }
  var s = p.getElementsByClassName("notes")[0].innerText;
  var t =  /\}\s*$/.test(s) ? "style" : "script";
  var e = document.createElement(t);
  e.innerHTML  = s;
  document.body.appendChild(e);
})();

TesterをMemoFlowy経由でインポート

MemoFlowy

MemoFlowy

  • Michinari YAMAMOTO
  • 仕事効率化
  • 無料

使い方

ノートにCSS*1を書いてTesterを実行するとスタイルが反映されます。

ノートにJavaScriptを書いてTesterを実行するとJavaScriptが実行されます。

JavaScriptの変数を初期化したりCSSを適用前に戻したりするには右ペインのリロードボタンで。

ついでにJavaScriptで文法ミスなどエラーがあった場合は行番号とエラー内容を表示するようにしました。Workflowy自体のエラーも拾うので必要なくなったらリロードして解除してください。

Testerで色々試した後にScriptMakerやStylenoteで登録、の流れはいかがでしょう。

あとがき(要望)

HandyFlowyはスクリプトを登録するURLスキームが内部でしか使えず、共有するにしても修正するにしても手間がかかるので

  • handyflowy://importを外部から使える
  • 登録時にスクリプトの内容を確認して保存するかを決められる
  • 登録後もスクリプトの確認や修正が出来る

が実現されたらいいなと思いました。

*1:最後の文字が}である場合CSSと判断します。

iOSアプリのアイコンを多種多様なファイル形式で1ピクセル刻みに取得する

iTunes Search APIで取得できるアプリアイコンのURL形式がいつの間にか変わっていたのでテストしてみました。いつの間にか使えなくなるかもしれませんが、現状の記録ということで。

説明用サンプル

iTunes Uのidをlookupして得られるartworkUrl60

のファイル名「60x60bb.jpg」を元に説明します。

60x60

ファイル名の●x●の部分を変えることで1ピクセル刻みの正方形で大きさを指定して取得できます。

  • 基本的には指定したピクセル数の画像が返されます:512x512→512ピクセル
  • 異なる数字を指定した場合、小さい方の値が優先されます:512x60→60ピクセル
  • 上限は1024です:10000x10000→1024ピクセル
  • 片方に0を指定した場合、他方の長さが優先されます:0x60→60ピクセル
  • 両方0を指定した場合でも、0になりません:0x0→1ピクセル

bb

わざと誤った文字を指定したとき(例:aa)に表示されるメッセージによるとImage Resize Styleというパラメータのようです。
やや拡大して元の大きさで切り取ったような画像を取得できます。
指定するアルファベットは何でもよいわけでなく、取得できたものは
bb, bf, cc, cx, fa, fb, fc, fe, ff, fg, fh, ss
でした。bbからfhまでの画像は以下の通り(左上から右方向の順)です。

またssは●x●の指定によらず1024ピクセルの画像を返します。

.jpg

拡張子の文字列を変更すると、一般的な画像形式を含めかなりの数のファイル形式に変換できます。
3文字の拡張子*1のうち取得できた(ステータスコードが200である)ものを列挙しておきます。

art, arw, avi, avs, bmp, cgm, cin, crw, dcm, dcr, dcx, dib, dng, dot, dpx, emf, epi, eps, ept, exr, fax, fig, fpx, gif, hrz, ico, jng, jpc, jpg, man, mat, mng, mpc, mpr, mrw, msl, mtv, mvg, nef, orf, otb, pam, pbm, pcd, pcl, pcx, pdb, pdf, pef, pfa, pfb, pfm, pgm, pix, png, pnm, ppm, psd, pwp, rad, raf, rgb, rla, sct, sfw, sgi, sid, svg, tga, tif, tim, ttf, txt, wmf, wpg, xbm, xcf, xpm, xwd

*1:jpeg, tiff, pictなど3文字でない拡張子でも取得できるものもあります。

iOSウィジェットから書式クリアする2つの方法

MyScripts Workflow

1つ目。以前、bold italic underlineやその他諸々の書式をクリアする方法としてMyScriptsを使った手法を取り上げました。
iOSメモアプリへコピペする時にサクッと書式クリアする - aitatena

MyScripts

MyScripts

  • Takeyoshi Nakayama
  • 仕事効率化
  • ¥360
MyScriptsはURLスキームでスクリプトを呼び出せます。書式クリアの場合、呼び出しURLは次の形です。*1

myscripts://run?title=%E6%9B%B8%E5%BC%8F%E3%82%AF%E3%83%AA%E3%82%A2

これをS Launcherなどのウィジェットランチャーアプリに登録すると、いつでも呼び出せます。

S Launcher - Launches anything in one second

S Launcher - Launches anything in one second

  • Manh Nguyen Tien
  • ユーティリティ
  • 無料

対象文字列をカットして、ウィジェットから呼び出して、iOS9で搭載された左上のGo Backで戻ってペースト。
これで書式クリアされます。


2つ目。Workflowを使います。

Workflow: Powerful Automation Made Simple

Workflow: Powerful Automation Made Simple

  • DeskConnect, Inc.
  • 仕事効率化
  • ¥480

インポートはこちら:書式クリア

対象文字列をカットして、ウィジェットをタップして、ウィジェットを閉じてペースト。アプリを起動することなく完結します。

お好きな方法でどうぞ。

*1:スクリプトを長押しして表示されるメニューから リンクを作成…>スクリプト実行用(クリップボード) と進むとコピーされます