PNG画像の最適化ツール

カテゴリー:  Tech  タグ:  image software

Webサイトに使用する画像では、JPEGだけでなくPNGを使用する事もあります。JPEG同様こちらも気をぬくとバカにならないサイズになってることがあるので、PNGファイルのダイエットについて少し調べてみました。

PNGファイルのダイエットには、パレットやフィルターの最適化と、減色して書き出す方法があります。前者の方法は小さくはなりますが、PNG自体は可逆圧縮なので早々は小さくなりません。

圧倒的に小さくするにはやはり減色してから書き出すに限ります。この時色数を減らしていくに従って、残った色では表せない中間色をいかにうまく残る色のドットの混ぜ方で表現できるかが減色エンジンのカギとなります。

ちょっと試してみようと思ったのですが、愛用している画像加工アプリのPixelmatorやAcornは写真画像の処理を志向していて減色などという旧時代の処理は入っていませんでした。時々使っているMacのアプリではToyViewerが減色に対応しているので確認してみました。また減色エンジンでは定評のあるOptPiXのOptPiX WebFree、海外のサービスであるPNG Optimizerで確認しました。

元の画像はMacの標準のデスクトップ画像として収録されているカエルが画像を、Pixelmatorで512 x 288ピクセルまで縮小した画像をPNGにしたものをオリジナルとしてそれぞれに処理してみました。ToyViewerとOptPiXは64色以下に減色しています。PNGOptimizerは色数を指定できず、256色以下になっています。

以下が結果です。

比較結果

さすが、OptPixは優秀ですね。ToyViewerのメディアンカット法で処理したものより明らかに階調がきれいに表現できており、部分によっては256色のPNG Optimizerに迫っています。

一方でファイルサイズを見ると、以下のようになっています。

処理方法 ファイルサイズ

Original 236.6KB
ToyViewer(62色) 50.2KB
OptPiX WebFree(63色) 54.6KB
PNG Optimizer(246色) 81.4KB

なお、減色せずにPNGファイルを最適化する場合は、Macの場合はImageOptimが良いでしょう。各種の画像の最適化ソフトを統合したものです。約1MBあった上の画像を処理したら35%程度小さくなりました。

今回テストしたファイルを置いておきます。

さくらのレンタルサーバーで 503エラーが出てしまったら

カテゴリー:  Tech  タグ:  web/tech

昨年末さくらのレンタルサーバーに移行を始めた時、MP3ファイルを置いてHTML5でアクセスするコード書いたら、一発で503で落ちました。ブラウザでは、以下のようなエラーが返ってきます。

Service Temporarily Unavailable The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

サポートにメールしたら程なく解決したので対応したのかと思っていたら、実際には一定時間が経ったので制限が自動的に解かれただけでサポートで対処してくれたわけではなかったようです。今日「複数のユーザが1台のサーバに同居する、いわゆる共用サーバサービスとなっております。 てめぇ何やってんだ?(とは書いてなかったけど)」というご注意メールをいただきました。

さくらのレンタルサーバはこの辺りは実にフェアでプランごとの転送量の制限を公開してくれています。【さくらのレンタルサーバ】基本仕様によると、わたしの利用するスタンダードプランでは転送量の上限は80GB/日です。いただいたメールによると、これを24時間で割った転送量になるよう1時間あたりの転送量を見直せとガイドされてました。すぐに制限されたのである一定の単位時間で見ているのでしょう。80GB/日だとざっくり60MB/分。問題になったMP3ファイルは約8MBで短時間にFTPでアップロード&HTTPでアクセスでもそこまでの転送量になりそうにありませんが、試用開始&当日申し込みだったので試用期間のもっと低い制限に引っかかったのかもしれません。

さて、503エラーが出てしまった場合の対処方法ですが、基本的にはありません。アクセスが収まって転送量が落ち着いて、制限が解除されるのを待つしかありません。わたしの場合FTPではアクセスできたので、問題になっているファイルが判明してFTPでアクセス可能であればそれを削除するというのが有効です。(静的にファイルを出力するMovable Typeでよかった)

事前の対応としては、アクセス数の増加や転送量の増加を時々確認して急増の兆候が見えたら、原因となる記事やファイルを取り除いておくかプランを上げることを考えるかです。転送量はさくらのコントロールパネルで3日くらいの転送量は確認できます。

しかし、まぁ60MB/分という数字は画像を含んだとしても普通の記事だけではそうそう到達する数字ではありません。このブログなんて移行したばかりとはいえ、1日の転送量なんて100MB程度です。わたしにとっては全くの杞憂ですわ。

それでも心配な人気ブログを運営されている方は、

動画や音声ファイルなどは他のサービスを利用する その他巨大なファイルはストレージ系のサービスを利用する 画像のダイエットを行う 画像のファイルサイズ縮小は、MacであればJPEGminiなどと使うとよいかと思います。

ストレッチポールで腰痛改善

カテゴリー:  Gadget  タグ:  health

ストレッチポールを購入しました。 本家のLPNストレッチポールでなく、正確には東急スポーツオアシスのリセットポールですが(笑)

ずっと腰痛で悩まされていますが、ストレッチポールを使うと体幹がリラックスして凝りが取れコアが安定するためか、自然と姿勢がよくなり腰痛も改善します。「あ、今日辛いな」って時は10分程度でもかなり効果があります。

DVDも付属していますが、あまりこだわらず我流でやっています。

わたしはまず体に沿っておいて、お尻をポールに乗せてそのまま上に寝ます。この状態でテレビを見ながらコロコロ。背骨が伸びてこれだけで気持ちいいです。両手をゆっっくり上げ下げしていくと、普段動かさない部分の胸郭を開くような感覚と肩甲骨がほぐれていくのがわかります。

次に座った状態で横置きにして腰より少し上の背中を乗せるようにして体を反らせます。わたしの場合、一番固い背中の部分がこれで開いていく感じがしてとても気持ちがよいです。

普段から姿勢を良くしていればよいんですが、ポールを使うと効率よく疲れた姿勢を正せますよ。

猿でも考える「猿の惑星 新世紀」

カテゴリー:  Entertainment  タグ:  films

「猿の惑星 新世紀(ライジング)」を見ました。

原題は”Dawn of the planet of the apes”。「猿の惑星の夜明け」かな。前作が”Rise of the planet of the apes”なので、さらに猿の惑星に近づいたってとこでしょうか。1960年代の旧シリーズを別な形で下敷きにしています。ティム・バートンが10年ほど前に作った作品とは全く別もので、前作が起点になって今回が2作目となっています。

旧作は3部作で時間で閉じているストーリーと第1作の衝撃の結末シーンでも印象的でしたが、前作から始まったシリーズも重厚でなかなか頑張っています。

今回は冒頭の10分くらい人間から離れて独自に集落を作っている猿たちの暮らしが描かれていますが、その間手話のみで全く会話がないシーンが続きます。本来は観客を引き込むためにも冒頭はもっとキャッチーなシーンや、前作のその後がもっと鳥瞰的にわかるエピソードを入れたいという誘惑があったでしょうが、ある意味地味に猿の生活が長時間描かれています。これはとても勇気がいる決定だったはずです。しかし、圧倒的なリアリティーで描かれる猿たちの安定した生活は、その描写でもって前作以降の時間がどう経過したか嫌が応でも観客は感じることになります。これだけでも見た甲斐があったと思います。

まぁ、その後は猿と人間の戦いになるのですが、8割がた猿の視点で描かれているのが特徴的です。旧作も猿は第三勢力の象徴とかいろいろと社会的なニュアンスを含んだ作品でしたが、今回もそれを感じます。

そして、後半でのシーザーの言葉がいろいろと考えさせられます。

Dawn of the Planet of the Apes: The Official Movie Novelization" title="Dawn of the Planet of the Apes: The Official Movie Novelization"> I always think… ape better than human. I see now… how much like them we are.

『 Dawn of the Planet of the Apes: The Official Movie Novelization

最終シーンでは、集団の意思、つまり政治とは個人の思いだけでもなんともならない場合もあるということがよく描かれています。冒頭シーンと同じようにシーザーの顔のアップでエンディングを迎えますが、冒頭シーンでは酋長だったシーザーがエンティングでは政治家の顔になっているのが印象的でした。

iPodなiPhoneケース

カテゴリー:  Gadget  タグ:  iphone mobile

iPhoneをiPodのような見栄えにするケースです。

iPod Coverというまだコンセプトモデルですが、iPhone5S用が出たら絶対に買います。

なんかノスタルジーを誘いますね。(まだiPodだって売ってますが)

Phoneへの充電を加速するLegion Meter

カテゴリー:  Gadget  タグ:  iphone mobile

Kickstarterで出資していたLegion Meterがやっと送られてきました。当初10月出荷の予定だったので2ケ月の遅れです。

Legion Meterはかなりコンパクトです。PC/Macや電源アダプタとUSBケーブルの間に差し込んで使います。

本体にはUser Interface Buttonがあり、押すと以下のように切り替わります。

  1. アンペア数
  2. ワット数
  3. mWhカウンター 
  4. Appleモード/Androidモードの表示。長押しで切り替わるようですが、自動認識してくれるの切り替える必要はないでしょう。
  5. 接続されているUSBポートのボルト数

mWhカウンターは長押しでリセットでき、バッテリーが無い状態で充電すれば電池の総容量がわかるという訳です。

側面には Accelerator/Data ProtectionモードとData Pass Throughモードを切り替えるスイッチがあります。A側だと充電加速が効くと同時に物理的にはUSBポートとの通信ができなくなります。最近話題になっている Juice Jackingなどへのハッキング対策ですね。同様の機能を持つUSBコンドームは海外では売れに売れて売り切れ状態が続いていた状況ですが、日本ではまだあまり認知されていないようです。

この切り替えスイッチは凹みの奥にありペンか何かがないと切り替えが効きません。まぁ、Data Pass ThroughモードでわざわざこのLegion Meterを使う意味がわかりませんがからこれはこれでよいかと思います。一つ問題は初期状態でData Pass Through モードになっていることですね。製品の位置付けと安全やスイッチの切り替えにくさを考えると A側にスイッチを入れておいて欲しかったです。

早速、iPhoneを充電してみました。 コンセントに差し込んでの充電ではデータでは20%程度は早くなるようですが、いま一つ体感できません。MacのUSBポートに直接繋いでみたところ、ワット数が倍近くになって確かに充電が早くなるようです。ところが、USB Hubを経由すると全然充電が進みません。うーん、わからん。

コンセントに差し込んでのテストでわかったことですが、うちはiPadもありKindleもあったりして電源アダプタをいい加減に使いまわしているので混在してしまっています。見ていると、iPad用の電源アダプタに刺した場合iPadを充電する場合は2A前後に、iPhoneを挿すと1A程度にコントロールしてくれているようです。

とりあえずは、外出時に持ち歩こうかと思います。 急速充電の機能もありますが、充電だけしたい場合にUSBコンドームだと思えば十分元が取れそうです。

日本では早速16,000円とかぼったくり通販している会社がありますが、開発元のPLX devices IncのWebサイトに行けば今なら$30引きの$38でゲットできます。(送料は別途かかります)

ざわちん(ZAWACHIN) ブログの脅威

カテゴリー:  Trivialities  タグ:  daily trivialities

なんとなく読んでいたニュースで「ざわちん、2014年ラストに大幅イメチェン」というニュースが気になり、本人のブログを見てみました。そこで目にしたのは脅威のブログ術。

ニュースのネタは本人の大晦日のツイートですね。

たしかに随分と印象が変わって話題になるのもわかりますね。

わたしが読んだ中では本人のInstgramへのリンクとブログへのリンクを掲載している記事がありました。ざわちんのInstgramはFollowerのみの公開となっているで、まずはブログを見てみました。たしかに「ニューざわちん(笑)」って記事があるんですが、最初まったく発見できませんでした(笑)。

その理由が以下です。 ブログのスクリーンショットです。25%に表示を縮小してうちの21インチのMacで表示可能な限り表示した状態です。ほぼ全面ご自身の関連商品のアフィリエイトのリンク画像で埋まっています。これでもまだ記事にたどり着けないんです。スクリーンショットの縦方向は960ピクセルくらいありますから、実際には記事に辿りつくには4,000ピクセルくらいはスクロールしなければなりません。なんかすごいなぁ。と

マレフィセントの楽しみ方

カテゴリー:  Entertainment  タグ:  films

お正月なのでDVDの「マレフィセント」を見てみました。

「茨姫」とか「眠れる森の美女」とか呼ばれる古いヨーロッパの民話で子供のころ読んでました。多分グリム童話だと思います。この映画で下敷きになっているのはディズニーの「眠れる森の美女」でしょう。

「眠れる森の美女」では、3人の妖精が順番に祝福を贈っているところにマレフィセントが来て呪いをかけてしまいます。丁度最後の妖精が祝福を贈っていなかったので「死ぬ」という呪いを「真の愛のキスで目覚める」と修正します。成長し16歳の誕生日に送別パーティのため苺を取りに行ったオーロラ姫はフィリップ王子に会い恋に落ちますが、マレフィセントに居場所が発見され呪いが実現してしまいます。悲しんだ3人の妖精は城の人も眠らせてしまいます。なんだかんだで妖精から武器を得たフィリップ王子は城に向かいドラゴンになったマレフィセントと戦って無事キスをしてオーロラを助けると。

というディズニー版を頭において「マレフィセント」をみると、なかなかに楽しめます。

なぜマレフィセントが呪いを掛けたか。招待されなかっただけで呪いをかけるなんていくら悪役でもあまりに理不尽だと思っていましたが、王により翼を盗まれたとうまく説明しています。しかも王に「I like your wing」と言われた翼をです。

最近のディズニー映画でテーマになることが多い「真実の愛のキス」もなかなかに納得の結末です。

これから、映画出演が少なくなるであろうアンジェリーナ・ジョリーの作品でもありさすがのクオリティーです。

さて、久しぶりにディズニー映画のDVDを買ったら、MovieNEXなるパッケージになっていました。これが悪名高いパッケージですね。DVDとBlue-Ray、デジタルコピー利用権のセットになっています。デジタルコピーはGoogle Playで利用するかniconicoで利用するか選ばないといけません。

面倒なので使わないと思います。

スマートWatch Pebbleを日本語で楽しもう

カテゴリー:  Gadget  タグ:  gadget watch

一昨年購入してあまり活用していなかったPebbleですが、その一つの原因に日本語対応していないことがありました。連動しているスマホのメールやメッセージの通知の閲覧できたりするんですが、日本語に対応していないためほとんどの文字が豆腐状態で意味不明なため通知としてあまり意味がありませんでした。

年末にやっと時間が取れたので、有志の皆さんが作った日本語ファームウェアを当ててみました。日本語ファームウェアはTextPressのページで公開されています。

サードパティー、しかも有志が開発したファームウェアと聞いて、なんだかマニアックで面倒臭いイメージがあったのですが、実際やってみるとシリアルを確認してダウンロードするバージョンさえ間違えなければガイドに従えば簡単にアップデートできます。

すべての漢字がサポートされているわけではないので時々化けますが、日常的にはほとんど困らないくらいのレベルです。通知はもちろん日本語化されますし、わたしはSmartwatch Pro for Pebbleというアプリを使っていて、これを使うとTwitterも閲覧できます。日本語で読めるとなると俄然実用的になってきます。

Apple Watchも待ち遠しいでしょうが、気軽に試せるスマートWatchをまず楽しみませんか?

Swift: StoryBoardからTableViewを使う

カテゴリー:  Tech  タグ:  programming software swift

データ用のクラスを用意する。

必須ではありませんが、今回は曲のデータとして曲名と曲の長さを持つようなクラスをTableViewに表示したいと思います。

class Song: NSObject {
    var title : String = "A Song"
    var duration : NSTimeInterval = 0.0

}

extension Song {

    func durationString() -> String {
        return NSString(format:"%i:%02i",Int(self.duration) / 60, Int(self.duration) % 60)
    }
}

TableViewを作る

StoryBoard上にTableViewをおきます。 TableView

以下の手順で設定します。

1.1列目の名前をTitle、2列目のタイトルをDurationにします。 2. Identity Inspectorで、1列目のIdentifierをTitle、2列目のIdentifierをDurationに設定します。いくつかのコンポーネントから構成されていますから、Outlineで間違えないように選んでください。 3. OutlineでTable Viewを選択して、Attribute Inspectorを開いて、Content ModeをCell Basedにします。 4. TableViewを選択したまま、Connections Inspectorを開いて dataSourceとdelegateとViewControllerを接続します。 5. StoryBoard上のTable Viewをコードエディタ上のViewControllerにドラッグして、NSTableViewのOutletを作成します。

TableView用の実装コード

NSTableViewのために2つのメソッドをViewController上に実装する必要があります。以下、コードの抜粋です。

  var songs : [Song] = []
    func numberOfRowsInTableView(aTableView: NSTableView) -> Int
    {
        return songs.count
    }

      func tableView(aTableView: NSTableView,
        objectValueForTableColumn aTableColumn: NSTableColumn?,
        row rowIndex: Int) -> AnyObject?
    {
        let titleOfSong = songs[rowIndex].title as NSString
        let durationOfSong = songs[rowIndex].durationString()
        let columnName = aTableColumn?.identifier

        if columnName == "Title" {
            return titleOfSong
        }
        else if columnName == "Duration" {
            return durationOfSong
        }
        return ""              
    }

      func tableViewSelectionDidChange(aNotification: NSNotification)
    {
        let row = tableView.selectedRow
        if row >= 0
        {
            let selected = songs[row].title as String
            NSLog("Selected: \(selected)")
        }
    }

numberOfRowsInTableView()では、songsにSongクラスの配列が格納されている前提でその数を返しています。 まず、各行と対応する配列内のSongオブジェクトを取り出しています。 次に渡ってきたTableColumn.identifierを元にどの列をデータが求められているか判断し、曲名と曲の時間を返すようにしています。

どうせならTableView上のカーソルの位置に従って曲を選択したアクションをしたいので、tablViewSelectionDidChange()を実装しました。コード例ではログに書き出しているだけですが。データを追加した後、表示を反映させるためには NSTableView.reloadData() を投げてやる必要があります。