Sabtu, 10 Maret 2012

Ilmuwan Ungkap Fosil Ikan Pemakan Burung

| |
0 komentar
(Image source: msn.com)

BERLIN - Sebuah fosil ikan kuno ditemukan dalam posisi menyerang dan menenggelamkan sebuah pterosaurus. Hal ini menggambarkan bahwa reptil bersayap itu menjadi mangsa ikan karnivora.

Selama zaman dinosaurus, pterosaurus mendominasi wilayah udara. Namun, ternyata terbang tidak selalu menjamin keamanan hewan prasejarah tersebut. Demikian dilansir Live Science, Sabtu (10/3/2012).

Para ilmuwan telah menemukan lima contoh dari Rhamphorhychus atau pterosaurus ekor panjang di dalam rahang ikan kuno berperisai, yang disebut Aspidorhynchus. Fosil-fosil yang digali di Bavaria itu berusia sekira 120 juta tahun.

Semua pterosaurus yang ditemukan memiliki rentang sayap sekira 27 inci (70 sentimeter), dalam posisi sedemikian rupa sehingga sayap mereka berada di dekat mulut seekor ikan predator berukuran 25 inci (65 sentimeter).

Ini menunjukkan bahwa ikan predator itu bisa saja mencengkeram membran sayap pterosaurus. Dalam salah satu contoh fosil pun terlihat bahwa tulang sayap pterosaurus sebenarnya tertangkap di antara rahang ikan.

Para peneliti menduga ikan Aspidorhynchus menyerang pterosaurus ketika sedang terbang tepat di atas permukaan air, tepat setelah burung prasejarah itu menangkap seekor ikan dari dalam laut.

"Hewan ini biasanya tidak berhubungan satu sama lain. tapi rupanya pertemuan bisa berakibat fatal bagi keduanya," kata Eberhard Frey, ahli paleozoologi di State Natural History Museum di Karlsruhe, Jerman.

Dia juga menjelaskan bahwa ikan tidak bisa menelan pterosaurus atau membebaskan rahang mereka, karena pterosaurus punya jaringan serat tubuh yang kuat. Sayapnya yang kasar akan menjerat gigi ikan.

Setelah bertarung dengan pterosaurus, ikan itu akan cenderung tenggelam ke dasar air yang kadar oksigennya rendah, kemudian mati lemas.
Read More

Senin, 27 Februari 2012

Memunculkan Deskripsi Blog Ketika Share di Facebook

| |
0 komentar
Sebelumnya saya telah mengulas tentang Open Graph Facebook yang berguna untuk optimasi SEO blog di Facebook. Dan ternyata Open Graph telah mempengaruhi Facebook dalam membaca script meta description pada blog, sehingga ketika kita sharing di Facebook yang terlihat hanya gambar dan judul postingan dan tidak memuat deskripsi postingan kita. Nah sekarang saya akan memberikan solusi kepada sobat blogger agar deskripsi postingan dapat terlihat saat anda share di Facebook.

Cara yang harus dilakukan adalah sbb:
1. Login ke Blogger Dasbor > Rancangan > Edit HTML
2. Centang Expand Template Widget
3. Cari kode <data:post.body/>
4. Simpan kode berikut ini diatas kode <data:post.body/>
(di template saya ada 4 kode <data:post.body/>, pilih kode no. 2)
<b:if cond='data:blog.pageType == "item"'>
<b:if cond='data:post.snippet'>
<meta expr:content='data:post.snippet' name='description'/>
</b:if>
</b:if>
5. Kemudian setelah itu pasang tag <p> dan penutupnya di semua  kode <data:post.body/>, contoh seperti dibawah ini:
 <p><data:post.body/></p>
6. Save Template
7. Selesai...

Contoh sebelum dan sesudah di edit:

 

Note: Perubahan yang kita lakukan baru akan berpengaruh kurang lebih sekitar 24 jam. Untuk mengatasinya anda dapat memasukkan link posting secara manual agar lebih cepat ke Facebook Debugger.

Read More

Minggu, 26 Februari 2012

Meta Tag Open Graph Facebook

| |
0 komentar
Open Graph Protocol adalah skema FBML untuk media sosial sharing seperti facebook misalnya agar link bisa di masukkan ke facebook dengan gampang. Hal ini sangat berguna untuk optimasi SEO blog di Facebook.
Memasang meta tags untuk Open Graph Protocol di Blogger:
1. Login ke blogger Dasboar >Rancangan> Edit HTML,
2. Cari kode:
xmlns:expr='http://www.google.com/2005/gml/expr'>
3. Tambahkan kode Open Graph Protocol ini sebelum kode penutup >
xmlns:og='http://ogp.me/ns#'
4. Sehingga hasilnya akan terlihat seperti ini:
<html ...... xmlns:expr='http://www.google.com/2005/gml/expr' xmlns:og='http://ogp.me/ns#'>
5. Cari kode <head> dan simpan kode meta tag berikut ini dibawah kode <head> atau dibawah kode meta tag yang sudah ada sebelumnya.
<b:if cond='data:blog.pageType != &quot;item&quot;'>
<meta expr:content='data:blog.title' property='og:title'/>
<meta expr:content='data:blog.homepageUrl' property='og:url'/>
<meta content='blog' property='og:type'/>
<b:else/>
<meta expr:content='data:blog.pageName' property='og:title'/>
<meta expr:content='data:blog.url' property='og:url'/>
<meta content='article' property='og:type'/>
</b:if>
<b:if cond='data:blog.postImageThumbnailUrl'>
<meta expr:content='data:blog.postImageThumbnailUrl' property='og:image'/>
<b:else/>
<meta content='http://example.com/logo blog.jpg' property='og:image'/>
</b:if>
<meta content='Nama Blog' property='og:site_name'/>
<meta content='Your-App-ID' property='fb:app_id'/>

<meta content='Facebook-profile-ID' property='fb:admins'/>
(ganti tulisan warna merah sesuai dengan blog kamu)
6. Save Template, Selesai.

Untuk memeriksa apakah Anda telah menerapkan semua tag <META> dengan benar, kunjungi Facebook Debugger for Developers.

Note: Open graph ini juga berguna untuk menampilkan gambar atau logo blog kamu ketika di share, like atau send ke facebook jika artikel yang di posting tidak memiliki gambar.
Read More

Script Anti Copas - Copy Paste

| |
0 komentar
Cara memasukkan script anti copy paste di blog :

1.Login ke akun blogger kamu.
2.Klik Rancangan lalu klik Edit HTML.
3.Tandai Expand Template Widget pada bagian Edit Template.
4.Cari kode </head>
5.Jika sudah ketemu, masukkan script berikut ini diatas kode </head>
<SCRIPT type="text/javascript">
if (typeof document.onselectstart!="undefined") {
document.onselectstart=new Function ("return false");
}
else{
document.onmousedown=new Function ("return false");
document.onmouseup=new Function ("return true");
}
</SCRIPT>
6.Lalu klik Simpan Template dan lihat hasilnya.
7.Selesai.
Read More

Jumat, 24 Februari 2012

Mengatasi Tombol Reply Yang Tidak Bisa di Klik Alias Error

| |
0 komentar
Tadi saya ingin membalas sebuah komentar di blog ini dan saya menemukan masalah bahwa fitur tombol reply yang ada di blog ini tidak berfungsi dan tidak berpengaruh apa-apa saat di klik, walhasil saya tidak jadi membalas komentar tersebut, hehehe..
Setelah mencari info, ternyata ada perubahan pada JavaScript thread comment. Nah untuk mengatasi masalah tersebut, Lakukan langkah-langkah berikut ini:

1. Login ke Dasbor Anda >> Rancangan >> Edit HTML
2. Centang Expand Template Widget
3. Untuk menjaga hal-hal yang tidak diinginkan saya sarankan backup dulu template blog anda dengan mengklik Download Full Template.
4. Cari kode:
<b:includable id='threaded_comment_js' var='post'>
  <script defer='defer' expr:src='data:post.commentSrc' type='text/javascript'/>

  <script type='text/javascript'>
    (function() {
      var items = <data:post.commentJso/>;
      var msgs = <data:post.commentMsgs/>;
      var postId = &#39;<data:post.id/>&#39;;
      var feed = &#39;<data:post.commentFeed/>&#39;;
      var authorName = &#39;<data:post.author/>&#39;;
      var authorUrl = &#39;<data:post.authorUrl/>&#39;;
      var blogId = &#39;<data:top.id/>&#39;;
      var baseUri = &#39;<data:post.commentBase/>&#39;;

// <![CDATA[
      feed += '?alt=json&v=2&orderby=published&reverse=false&max-results=50';
      var cursor = null;
      if (items && items.length > 0) {
        cursor = parseInt(items[items.length - 1].timestamp) + 1;
      }

      var bodyFromEntry = function(entry) {
        if (entry.gd$extendedProperty) {
          for (var k in entry.gd$extendedProperty) {
            if (entry.gd$extendedProperty[k].name == 'blogger.contentRemoved') {
              return '<span class="deleted-comment">' + entry.content.$t + '</span>';
            }
          }
        }
        return entry.content.$t;
      }

      var parse = function(data) {
        cursor = null;
        var comments = [];
        if (data && data.feed && data.feed.entry) {
          for (var i = 0, entry; entry = data.feed.entry[i]; i++) {
            var comment = {};
            // comment ID, parsed out of the original id format
            var id = /blog-(\d+).post-(\d+)/.exec(entry.id.$t);
            comment.id = id ? id[2] : null;
            comment.body = bodyFromEntry(entry);
            comment.timestamp = Date.parse(entry.published.$t) + '';
            if (entry.author && entry.author.constructor === Array) {
              var auth = entry.author[0];
              if (auth) {
                comment.author = {
                  name: (auth.name ? auth.name.$t : undefined),
                  profileUrl: (auth.uri ? auth.uri.$t : undefined),
                  avatarUrl: (auth.gd$image ? auth.gd$image.src : undefined)
                };
              }
            }
            if (entry.link) {
              if (entry.link[2]) {
                comment.link = comment.permalink = entry.link[2].href;
              }
              if (entry.link[3]) {
                var pid = /.*comments\/default\/(\d+)\?.*/.exec(entry.link[3].href);
                if (pid && pid[1]) {
                  comment.parentId = pid[1];
                }
              }
            }
            comment.deleteclass = 'item-control blog-admin';
            if (entry.gd$extendedProperty) {
              for (var k in entry.gd$extendedProperty) {
                console.log(entry.gd$extendedProperty[k].name + ' - ' + entry.gd$extendedProperty[k].value);
                if (entry.gd$extendedProperty[k].name == 'blogger.itemClass') {
                  comment.deleteclass += ' ' + entry.gd$extendedProperty[k].value;
                }
              }
            }
            comments.push(comment);
          }
        }
        return comments;
      };

      var paginator = function(callback) {
        if (hasMore()) {
          var url = feed;
          if (cursor) {
            url += '&published-min=' + new Date(cursor).toISOString();
          }
          window.bloggercomments = function(data) {
            var parsed = parse(data);
            cursor = parsed.length < 50 ? null
                : parseInt(parsed[parsed.length - 1].timestamp) + 1
            callback(parsed);
            window.bloggercomments = null;
          }
          url += '&callback=bloggercomments';
          var script = document.createElement('script');
          script.type = 'text/javascript';
          script.src = url;
          document.getElementsByTagName('head')[0].appendChild(script);
        }
      };
      var hasMore = function() {
        return !!cursor;
      };
      var getMeta = function(key, comment) {
        if ('iswriter' == key) {
          var matches = !!comment.author
              && comment.author.name == authorName
              && comment.author.profileUrl == authorUrl;
          return matches ? 'true' : '';
        } else if ('deletelink' == key) {
          return baseUri + '/delete-comment.g?blogID=' + blogId + '&postID=' + comment.id;
        } else if ('deleteclass' == key) {
          return comment.deleteclass;
        }
        return '';
      };

      var replybox = null;
      var replyUrlParts = null;
      var replyParent = undefined;

      var onReply = function(commentId, domId) {
        if (replybox == null) {
          // lazily cache replybox, and adjust to suit this style:
          replybox = document.getElementById('comment-editor');
          if (replybox != null) {
            replybox.height = '250px';
            replybox.style.display = 'block';
            replyUrlParts = replybox.src.split('#');
          }
        }
        if (replybox && (commentId !== replyParent)) {
          document.getElementById(domId).insertBefore(replybox, null);
          replybox.src = replyUrlParts[0]
              + (commentId ? '&parentID=' + commentId : '')
              + '#' + replyUrlParts[1];
          replyParent = commentId;
        }
      };

      var tok = 'comment-form_';
      var hash = window.location.hash || '';
      var startThread = hash.indexOf(tok) == 1 ? hash.substring(tok.length + 1) : undefined;

      // Configure commenting API:
      var configJso = {
        'maxDepth': 2
      };
      var provider = {
        'id': postId,
        'data': items,
        'loadNext': paginator,
        'hasMore': hasMore,
        'getMeta': getMeta,
        'onReply': onReply,
        'rendered': true,
        'initReplyThread': startThread,
        'config': configJso,
        'messages': msgs
      };

      var render = function() {
        if (window.goog && window.goog.comments) {
          var holder = document.getElementById('comment-holder');
          window.goog.comments.render(holder, provider);
        }
      };

      // render now, or queue to render when library loads:
      if (window.goog && window.goog.comments) {
        render();
      } else {
        window.goog = window.goog || {};
        window.goog.comments = window.goog.comments || {};
        window.goog.comments.loadQueue = window.goog.comments.loadQueue || [];
        window.goog.comments.loadQueue.push(render);
      }
    })();
// ]]>
  </script>
</b:includable>
5. Ganti semua kode tersebut dengan kode dibawah ini:
<b:includable id='threaded_comment_js' var='post'>
  <script async='async' expr:src='data:post.commentSrc' type='text/javascript'/>

  <script type='text/javascript'>
    (function() {
      var items = <data:post.commentJso/>;
      var msgs = <data:post.commentMsgs/>;
      var config = <data:post.commentConfig/>;

// <![CDATA[
      var cursor = null;
      if (items && items.length > 0) {
        cursor = parseInt(items[items.length - 1].timestamp) + 1;
      }

      var bodyFromEntry = function(entry) {
        if (entry.gd$extendedProperty) {
          for (var k in entry.gd$extendedProperty) {
            if (entry.gd$extendedProperty[k].name == 'blogger.contentRemoved') {
              return '<span class="deleted-comment">' + entry.content.$t + '</span>';
            }
          }
        }
        return entry.content.$t;
      }

      var parse = function(data) {
        cursor = null;
        var comments = [];
        if (data && data.feed && data.feed.entry) {
          for (var i = 0, entry; entry = data.feed.entry[i]; i++) {
            var comment = {};
            // comment ID, parsed out of the original id format
            var id = /blog-(\d+).post-(\d+)/.exec(entry.id.$t);
            comment.id = id ? id[2] : null;
            comment.body = bodyFromEntry(entry);
            comment.timestamp = Date.parse(entry.published.$t) + '';
            if (entry.author && entry.author.constructor === Array) {
              var auth = entry.author[0];
              if (auth) {
                comment.author = {
                  name: (auth.name ? auth.name.$t : undefined),
                  profileUrl: (auth.uri ? auth.uri.$t : undefined),
                  avatarUrl: (auth.gd$image ? auth.gd$image.src : undefined)
                };
              }
            }
            if (entry.link) {
              if (entry.link[2]) {
                comment.link = comment.permalink = entry.link[2].href;
              }
              if (entry.link[3]) {
                var pid = /.*comments\/default\/(\d+)\?.*/.exec(entry.link[3].href);
                if (pid && pid[1]) {
                  comment.parentId = pid[1];
                }
              }
            }
            comment.deleteclass = 'item-control blog-admin';
            if (entry.gd$extendedProperty) {
              for (var k in entry.gd$extendedProperty) {
                if (entry.gd$extendedProperty[k].name == 'blogger.itemClass') {
                  comment.deleteclass += ' ' + entry.gd$extendedProperty[k].value;
                }
              }
            }
            comments.push(comment);
          }
        }
        return comments;
      };

      var paginator = function(callback) {
        if (hasMore()) {
          var url = config.feed + '?alt=json&v=2&orderby=published&reverse=false&max-results=50';
          if (cursor) {
            url += '&published-min=' + new Date(cursor).toISOString();
          }
          window.bloggercomments = function(data) {
            var parsed = parse(data);
            cursor = parsed.length < 50 ? null
                : parseInt(parsed[parsed.length - 1].timestamp) + 1
            callback(parsed);
            window.bloggercomments = null;
          }
          url += '&callback=bloggercomments';
          var script = document.createElement('script');
          script.type = 'text/javascript';
          script.src = url;
          document.getElementsByTagName('head')[0].appendChild(script);
        }
      };
      var hasMore = function() {
        return !!cursor;
      };
      var getMeta = function(key, comment) {
        if ('iswriter' == key) {
          var matches = !!comment.author
              && comment.author.name == config.authorName
              && comment.author.profileUrl == config.authorUrl;
          return matches ? 'true' : '';
        } else if ('deletelink' == key) {
          return config.baseUri + '/delete-comment.g?blogID='
               + config.blogId + '&postID=' + comment.id;
        } else if ('deleteclass' == key) {
          return comment.deleteclass;
        }
        return '';
      };

      var replybox = null;
      var replyUrlParts = null;
      var replyParent = undefined;

      var onReply = function(commentId, domId) {
        if (replybox == null) {
          // lazily cache replybox, and adjust to suit this style:
          replybox = document.getElementById('comment-editor');
          if (replybox != null) {
            replybox.height = '250px';
            replybox.style.display = 'block';
            replyUrlParts = replybox.src.split('#');
          }
        }
        if (replybox && (commentId !== replyParent)) {
          document.getElementById(domId).insertBefore(replybox, null);
          replybox.src = replyUrlParts[0]
              + (commentId ? '&parentID=' + commentId : '')
              + '#' + replyUrlParts[1];
          replyParent = commentId;
        }
      };

      var hash = (window.location.hash || '#').substring(1);
      var startThread, targetComment;
      if (/^comment-form_/.test(hash)) {
        startThread = hash.substring('comment-form_'.length);
      } else if (/^c[0-9]+$/.test(hash)) {
        targetComment = hash.substring(1);
      }

      // Configure commenting API:
      var configJso = {
        'maxDepth': config.maxThreadDepth
      };
      var provider = {
        'id': config.postId,
        'data': items,
        'loadNext': paginator,
        'hasMore': hasMore,
        'getMeta': getMeta,
        'onReply': onReply,
        'rendered': true,
        'initComment': targetComment,
        'initReplyThread': startThread,
        'config': configJso,
        'messages': msgs
      };

      var render = function() {
        if (window.goog && window.goog.comments) {
          var holder = document.getElementById('comment-holder');
          window.goog.comments.render(holder, provider);
        }
      };

      // render now, or queue to render when library loads:
      if (window.goog && window.goog.comments) {
        render();
      } else {
        window.goog = window.goog || {};
        window.goog.comments = window.goog.comments || {};
        window.goog.comments.loadQueue = window.goog.comments.loadQueue || [];
        window.goog.comments.loadQueue.push(render);
      }
    })();
// ]]>
  </script>
</b:includable>
6. Save Template dan lihat hasilnya
Read More

Jumat, 17 Februari 2012

Cara Membuat Fitur Reply Comment Seperti Wordpress di Blogger - Terbaru

| |
0 komentar
Kita mungkin iri melihat fitur reply comment pada blog wordpress teman-teman yang lain, nah blogger jg tidak mau kalah dengan fitur seperti itu dan sekarang di blogger juga sudah bisa ditambahkan fitur comment reply atau thread comments. Sebenarnya cara ini sangat mudah dilakukan, tinggal mengubah sedikit kode template html anda.
Disini saya akan mejelaskan cara yang paling simple dengan mengedit template.
1. Login ke Dasbor Anda ---> Edit HTML
2. Jangn lupa centang Expand Template Widget
3. Cari kode ini:
<b:include data='post' name='comments'/>
 (di template saya ada 4 kode seperti itu)
4. Ganti semua kode diatas dengan :
<b:if cond='data:post.showThreadedComments'>
<b:include data='post' name='threaded_comments'/>
<b:else/>
<b:include data='post' name='comments'/>
</b:if>
 5. Save.

Dan hasilnya akan seperti ini:



Sampai disini, fitur replay comment atau thread comments blogger anda sudah jadi.
Semoga bermanfaat...
Read More

Labels

Tips n Trick (41) tutorial blog (37) Software (20) Tips Blogging (20) RF PrivateServer (17) tutorial (17) Information (14) Tips Blog (14) tips (14) Blogger (13) blog (12) Free Domain (10) Wordpress (10) Games (8) facebook (8) tools (6) tutorial facebook (6) About SEO (5) Movie (5) Skin RF Online (5) media sosial (5) Operation System (4) Webdesign (4) iklan (4) komentar (4) news (4) video (4) custom domain (3) internet tools (3) script (3) youtube (3) Google Apps (2) back to top (2) custom domain 2012 (2) domain (2) domain gratis (2) emoticon (2) facebook chat (2) hacking (2) internet (2) intuit (2) photoshop (2) science (2) time line (2) widget (2) Block Quote (1) CPM (1) Google Drive (1) Lirik Lagu (1) Popads (1) Sail Komodo 2013 (1) Winrar (1) Wisata Indonesia (1) adsense (1) alternatif adsense (1) animal (1) anti copas (1) aplikasi portable (1) backup template (1) berita nasional (1) chat (1) cinta Indonesia (1) convert (1) custom (1) data backup (1) dofollow (1) domain.com (1) event Indonesia (1) feedburner (1) feedburner. subscribe (1) form contact us (1) foto (1) gambar berjalan (1) google insight (1) google plus (1) hosting (1) hosting gratis (1) lebaran (1) marquee text (1) media player (1) musik (1) next page (1) nofollow (1) open source (1) pasang lagu (1) pesawat (1) pilkada (1) pramugari (1) search (1) seo (1) shukoi (1) simbol (1) tabel (1) tampilan blogger baru (1) teks berjalan (1) template (1) tombol like (1) top ranking 1 google (1) top ranking di halaman 1 Google (1) twitter (1) unfriend (1) upload template (1)

attribut