— marex blog

marex / tumblr

大学時代からやっていた tumblr のデザインを marex / model とかと統一させたくて今回始めて tumblr のテーマを作ってみた。
tumblr ではネットで見つけた他のクリエイタのデザイン、写真、動画など日々インスピレーションになっているものをシェアしている。

marex / model 用に作った自作のjQueryのプラグインを使いたかったけれども、まだまだ未熟な作りで複雑なことができないのとアウトプットの速度重視だったので今回は jQuery の masonryinfinitescroll を使用した。
tumblr でテーマ用の外部ファイル(CSS,JS)を使うときに「Tumblr upload static file」ここでファイルを tumblr へアップロードできる。アップロード時に出力されるURLをコピペしてテーマで使用。

また、masonry と infinitescroll の連携は下記のサイトから大体の感じはコピペで作れてしまう。。

[Tumblr] Masonry + Infinite scrolling ‘overlap’ bug

リンク切れになった時にソースが見れないと困るので引用しておきます。

<script>
    $(function(){

      var $container = $('#content');

      $container.imagesLoaded( function(){
        $container.masonry({
          itemSelector : '.feed',
          isAnimated: true,
        });
      });

      $container.infinitescroll({
        navSelector  : '.navigation',    // selector for the paged navigation
        nextSelector : '.nav-previous a',  // selector for the NEXT link (to page 2)
        itemSelector : '#content .feed',     // selector for all items you'll retrieve
        },

        // call Masonry as a callback
        	function( newElements ) {
        		var $newElems = $( newElements ).css({ opacity: 0 });
        		// ensure that images load before adding to masonry layout
        		$newElems.imagesLoaded(function(){
          		// show elems now they're ready
         	    $newElems.animate({ opacity: 1 });
          		$container.masonry( 'appended', $newElems, true );
        	});
        }
      );
    });
</script>

Read More

marex / model

以前からjquery.masonry.jsみたいなレイアウトが実現できる実装方法が気になっていたので今回ざっくりjQueryプラグインとして作ってみた。本家のように複雑なことはできない。簡単なレイアウトだけのプラグイン。ソースが気になる方は下記から。
ソース : jquery.gridlayout.js

最近、一番重要視しているアウトプットのスピード。今回作ったプラグインに関して現段階でIEとかどうでもいいし、見た目が崩れていてもどうでもいいし、コードが汚いとかどうでもいいっす。今後、そのへんを徐々にブラシュアップ出来ればと考えている。と言っても、IEでもチェックはもちろんしているので変なことをやらなければ崩れたり変なことになったりしないと思う。

すごい基本的なことかもしれないけど、レイアウトを行うときに下記のようにfor文内で位置の計算と配置を同時に行うと処理時間が長くなる。
(このソースは初期状態のものであって最新のものではない、まただいぶ処理を端折っている)

// do the layout.
for (i = 0; i < max; i++) {
    // get items top position.
    var tmpTop = heightList[pointer];

    // move item.
    $(this.items[i]).css({
        position: 'absolute',
        top     : tmpTop +'px',
        left    : ( leftStart + (this.itemWidth + this.options.offset) * pointer ) +'px'
    });
    // stock height.
    heightList[pointer] = tmpTop + $(this.items[i]).outerHeight() + this.options.offset;
}
this.$elem.height( Math.max.apply(null, heightList) - this.options.offset );

上記を下記のように位置を計算するfor分と配置するfor文を分けたほうが処理時間が短くなった。

// do the layout.
for (i = 0; i < max; i++) {
    // get items top position.
    var tmpTop = heightList[pointer];

    // Stock position
    posList.push( { top: tmpTop, left: leftStart + (this.itemWidth + this.options.offset) * pointer} );

    // stock height.
    heightList[pointer] = tmpTop + $(this.items[i]).outerHeight() + this.options.offset;
}
this.$elem.height( Math.max.apply(null, heightList) - this.options.offset );

this.items.css({ position: 'absolute' });

for (i = 0; i < max; i++) {
    $(this.items[i]).css({
        top     : posList[i].top +'px',
        left    : posList[i].left +'px'
    });
}

参考になるかわからないし、環境によってもだいぶ違うのだろうけど、
空のdivが500個ある状態でIE6〜8でチェックした時に、処理時間がだいたい 1700ms → 90ms くらいまでになった。

Read More

久々に写真が撮りたくなって、しかもずっと単焦点で撮りたいと思っていたから家に7年前の800万画素のボディでかなり古いけど、衝動買いで新しくレンズを購入してみた。
将来的にもっと良いボディを買う前提でいるけど、しばらくはこのレンズで遊んで腕磨きをするつもりでいる。

このレンズ、評判通りで安いのになかなかいいボケ具合が再現されてちょっとビックリで色々撮影に行きたくなるモチベーションにさせてくれる。
ボディが古いのかピントがあうのが遅くてなかなかいい写真が撮れない。マニアルでもいいんだけど。写真の大半がピンボケになってします。カメラマンの腕がヘボだからな・・・

Read More