先日変更したMT6ではMovable Type Data APIというAPIが使用できるようになり、それを使ってsix apartが提供している公式MT管理アプリがMT for iOS


MT5まではブラウザをホーム登録してapp likeに使うしかできなかったけど、今回のはちゃんとアプリ!

遂に欲しかったものが出てくれました。
そんなわけで、MT for iOSから投稿してみる。

テキストや写真はブロック毎に書き分けられるし、リッチテキストエディタも十分なレベル。

文字を太くしたり
斜めにしたり
打ち消し線も
アンダーラインも
色変えも

見出しだって思いのまま


カスタムフィールドにも対応してるから、俺の食レポブログも大丈夫w

何よりプレビューとローカル保存は良いよね。
旅先とかで電波なくても記事は作り始められる。

そんなわけで、これからはもう少しちゃんとブログ書こうかなw


不満があるとしたら、リッチテキストエディタだとやっぱり少しだけタグ構造が気に入らない。自分の考えているスマートなHTMLになっていないことかな。
あと、一度公開にした後の修正で、ブロックやリッチテキストエディタが使えないこと。修正する時こそリッチテキストエディタでやりたいんだけど。タグ毎修正とか面倒くさすぎでしょ。
今後の改善を期待しています!

Movable Type 6が出てしばらく経つが、MTの内部のHTMLをいじりまくったせいと、sakuraサーバのcgi権限設定が微妙に違うせいで、いつもVerのメジャーアップデートに伴い、Verを上げるとバグるので暫く静観していた。

とはいえ、脆弱性の問題もあるし、サポートできなくなるよって言われたら上げざるをえず、遂にアップデートする事に。

ずっと5.Xだったので、6をすっ飛ばして6.1へ。

最近のアップデートは物凄く簡単になってて、最新のソースをDLしてきて、サーバにアップして、自分で後追加したプラグインとかは流石に追加必要だけど、あとはログイン画面叩けば勝手にアップデートしてくれる。

で、アップデートした結果。。。

はい、出ました、エラー
昔使ってたプラグインが新Verに対応してなかったらしく、削除。

再度更新。

今度はすんなり成功。

で、全部再構築して崩れチェックするが、今のところ問題なさそう。

ふむ。。。今回は怖いくらいすんなりですな。

MT3のSQLiteからMySQLにしつつフォルダ構成変更しつつMT4にした時の地獄はもう見なくてよさそうです。
そりゃそうか。。。

そんなわけで30分くらいで完了。
今のところ1番面倒なのは大量のファイルをバックアップする所くらいですね。

ありがとうSix Apart!

追記:いつの間にかリンクが別ウィンドウで開くをリッチエディタで可能になっている! サイト内遷移か外部遷移かで分けたかったので、今までtarget _blankを自分で入れるの面倒だったんだよね。これは嬉しい。

Google docsのスプレッドシートを使っていて、文字が変更された際、その文字に応じていくつかのセルの背景色を変更したいなと思い、エクセルと同じく条件付き書式で設定しようとした。
が、Googleスプレッドシートの条件付き書式は変更したセル単体しか色変えできないらしく、目的のものを実行するにはJavascript(正確にはGoogle Apps Script)でスクリプトを書く必要があるらしい。。。

。。。おぉっふ。。。

ってことで、以下作業のメモ書き。

実装したいこと

タスク管理シートでステータス欄を終了とするとその横一列(3列目~9列目)の背景色がグレーになる

参考にしたサイト

GoogleApps スプレッドシートのスクリプト|C.A.S.菅野のブログ

作業手順

1.スプレッドシートメニューの「ツール」 → 「スクリプトエディタ」でエディタを開く

2.ソースを入力
今回のソースは以下の通り

function onEdit(event) { //onEditでシートを更新した時に動く
  rowColor();
}

function rowColor() {
  var range = SpreadsheetApp.getActiveRange(); //変更されたセルを取得
  var col = range.getColumnIndex(); //変更のあったセルの列を取得
  var row = range.getRowIndex(); //変更のあったセルの行を取得
  
  if(col == 5){ //ステータス欄がある列 この場合はE列
    value = range.getValue(); //変更されたステータスの値
    if(value == "終了"){ //変更されたステータスが終了の場合
      var ss = SpreadsheetApp.getActiveSpreadsheet(); //アクティブなシートを取得
      var rowRange = ss.getSheets()[0].getRange(row, 3, 1, 9); //背景色変更範囲(row,何列目から,何行分,何列目まで)
      SpreadsheetApp.setActiveRange(rowRange); //変更する範囲をアクティブにする
      rowRange.setBackgroundColor("#999999"); //変更したい色
    }else{ //ステータスが終了以外の場合
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var rowRange = ss.getSheets()[0].getRange(row, 3, 1, 9);
      SpreadsheetApp.setActiveRange(rowRange);
      rowRange.setBackgroundColor("#ffffff");
    }
  }
  SpreadsheetApp.setActiveRange(range);
}

3.「ツール」 → 「スクリプトマネージャ」 → 「実行」

これで完了!

普段あまり新聞を見る事が無いぶん、ニュースサイトをかなり見る。あと、ネタ系のニュースとか2chのまとめサイトも面白いよね。そしてちょっと前から「NAVERまとめ」をちょこちょこ見ます。

しかし、もちろんなんだけど、どれもインターネットに繋がってないと見る事がでない。地下鉄に乗っている時間を有効活用しようとする場合、駅に着いた一瞬で少しだけ読み込むんだけど、読み込み途中で止まっちゃって、結構題目だけ見て内容見れずにイライラなんて良くある。最近、ようやく地下鉄内でも電波が入る様になってきたけど、まだまだ入っていないところが多いのも事実。もちろん飛行機では更新なんかできません。

かといって事前にEvernoteとかに取り込むの?っていうと、それはそれで面倒だし、リアルタイム感はかなりない。

それを解消するアプリが「SmartNews」


i_2012122220300090.jpg

上に書いた問題を解消するアプリが遂に出た。

それが
→「SmartNews」←

もちろんこれもどこかで読み込まなければならないのだが、事前に設定した時間で自動的に読み込んでくれている。さらに現時点の最新情報が欲しければ、一度電波が繋がるところで読み込みすると全てのチャンネルを一括で読み込んでくれる。
それはエンタメやグルメから国内国外のニュース、コラム、2chまとめまで興味有る無しに関わらず、最新の話題のニュースが取り込まれる。

このアプリも、他のニュースアプリ同様、ニュースの一覧で気になるものがあればクリックすると実際のWEBを読み込みにいく。しかし、電波が無い場合や急いで読みたい場合、その画面に出ている「smartモードで読む」というボタンを押すと、事前に読み込まれたテキストを見る事ができるのだ!
これで電波がなくてもニュースを見たいのに〜!ギリギリ(歯ぎしり)という気分にならなくて済むのだ。

さらに秀逸なのがスワイプなどの指の動きでのニュース遷移。コンテンツタブの移動やダブルクリックで直接smartモードでの閲覧など、指の動きでかなりスムーズな操作を可能にしている。


SNSへの投稿も楽

もはやニュースアプリでは基本機能になってきつつあるが、twitterやfacebookなどのSNSへはもちろん、Evernoteにも簡単にクリップできる。これはさすがに電波が繋がるところでだけれども、ニュースアプリ毎にtwitterやfacebookのアカウント設定しなくていいし、ブラウザで認証を聞かれることもない。

ここを改善して欲しい

このアプリの電波が無い場所での「smartモード」というキャッシュされたニュースを読む場合はテキストしか読めない。電波があればその画面にも画像を出してくれるのだが、画像ありきで話が進んでいるようなニュースだとちょっと困る。

と、いうわけで、一括読み込みの際に画像も読み込んでくれていると助かります。まぁ、アプリが相当重くなるかもだけどそこをなんとか!

MovableType(MT5)で、WEBページやブログを多言語化するあたって、言語別にフォルダを作成し切り分けようと考えた。そのため、各国言語の国旗バナーやリンクをクリックしたら現在のURLにフォルダ名を差し込む方法を探していた。

まぁ、普通に考えて、MTのタグで差し込みますよね。現在のURLに任意のフォルダ名を差し込むのは厳しそうなので、現在のファイル名を取得し、絶対パスでリンクを作成することに。
グーグル先生で聞いてみると以下の様なタグで実現できると出てきた。

<$MTPageBasename$>

そのままヘッダーやナビゲーション等のテンプレートモジュールで使用すると以下の様にエラーが出る

テンプレート「ブログのメインページ」の再構築中にエラーが発生しました: タグでエラーがありました: モジュール「ヘッダー」でエラーが発生しました: テンプレート「ヘッダー」の再構築中にエラーが発生しました: タグでエラーがありました: mtPageBasenameをPageのコンテキスト外で利用しようとしました。MTPagesコンテナの外部に配置していませんか?

更に調べると以下の様にmt:Pagesで括ると使えるとか。

<mt:Pages>
<mt:PageBasename />
</mt:Pages>

が、これだと、全ページの名前を配列で取得し、無駄に他のページの名前も出力される。
モディファイアのid="entry_id"でこのページだけ指定できるので、既にナビゲーションで使われているnav_onを使用してみたが、何故か効かない。もちろん<mt:If>タグで、数字を一つずつ入れていけば上手く分岐できるが、ページが増えた場合に都度変更を加えるのはスマートじゃない。

そんなわけで、解決策

アーカイブテンプレートのウェブページの上部に以下を差し込み。

<mt:SetVarBlock name="this_basename"><$MTPageBasename$></mt:SetVarBlock>

テンプレートモジュールの表示部分に以下を差し込み。

<mt:If name="main_index">
<a href="/"><img src="/img/jp.png" alt="日本語">日本語</a>
<a href="/en/"><img src="/img/gb.png" alt="English">English</a>
<a href="/zh/"><img src="/img/zh.png" alt="中文">中文</a>
<mt:Else>
<a href="/<$mt:GetVar name="this_basename"$>.html"><img src="/img/jp.png" alt="日本語">日本語</a>
<a href="/en/<$mt:GetVar name="this_basename"$>.html"><img src="/img/gb.png" alt="English">English</a>
<a href="/zh/<$mt:GetVar name="this_basename"$>.html"><img src="/img/zh.png" alt="中文">中文</a>
</mt:If>

要するに、テンプレートモジュールでは使えないから、アーカイブテンプレートで<MTSetVarBlock name="name_foo">hogehoge</MTSetVarBlock>を使用し変数をセット、テンプレートモジュール側は<$mt:GetVar name="hogehoge"$>で変数を表示。

<mt:If>タグで分岐したのはindexページ。どうやらインデックステンプレートでも<$MTPageBasename$>タグは使用できないようだ。

1  2  3  4  5  6  7