Плагины для Blogger.

Posted by Reason89 | Posted in

   Решил немного времени выделить для блога, и добавить несколько расширений. Так сказать на встречу посещаемости.
   Социальные кнопки: 
   В связи с популярностью социальных сетей, первое чем решил заняться это добавление социальных кнопок. В Blogger есть стандартные социальные кнопки, но они какие то не особо примечательные. Да и не работают они в моем шаблоне. Поэтому пришлось воспользоваться сторонними скриптами, убрав из них все лишнее.
<b:if cond='data:blog.pageType == "item"'>
 <div class='sharebuttons'>
        <span style='padding:0px 70px;'>  </span>                                                                               
  <div align='center'>
  
<!--Twitter-->
   <a class='shareme' expr:href='data:post.sharePostUrl + "&target=twitter"' expr:title='data:top.shareToTwitterMsg' target='_blank'><img alt='в Twitter' src='http://lh4.googleusercontent.com/_IP8w9pw5oW0/TdKdx31qywI/AAAAAAAAAis/phfEobCbHRk/twitter.png' style='border: 0pt none;' title='Написать в Twitter'/></a>
<!--Живая лента Google-->
   <a class='shareme' expr:href='"http://www.google.com/buzz/post?url=" + data:post.url + "&title=" + data:post.title + "&srcURL=" + data:blog.homePageUrl + "&srcTitle=" + data:title' expr:onclick='"window.open(this.href, \"_blank\", \"height=390,width=710\"); return false;"' expr:title='data:top.blogThisMsg' rel='nofollow' target='_blank'><img alt='в Живую ленту' src='http://lh3.googleusercontent.com/_IP8w9pw5oW0/TdKdxo0yrqI/AAAAAAAAAik/HfHNe3FFhU0/google.png' style='border: 0pt none;' title='Написать в Живую Ленту'/></a>
<!--Вконтакте-->
   <a class='shareme' expr:href='"http://vkontakte.ru/share.php?url=" + data:post.url' expr:onclick='"window.open(this.href, \"_blank\", \"height=500,width=710\"); return false;"' expr:title='data:top.blogThisMsg' rel='nofollow' target='_blank'><img alt='в Вконтакте' src='http://lh4.googleusercontent.com/_IP8w9pw5oW0/TdKdyeKEOpI/AAAAAAAAAiw/Vv0S793-0IQ/vkontakte.png' style='border: 0pt none;' title='Опубликовать в ВКонтакте'/></a>
<!--Живой журнал-->
   <a class='shareme' expr:href='"http://www.livejournal.com/update.bml?subject=Ссылка: " + data:post.title + "&event=" + data:post.title + ": " + data:post.url' expr:onclick='"window.open(this.href, \"_blank\"); return false;"' expr:title='data:top.blogThisMsg' rel='nofollow' target='_blank'><img alt='в Живой Журнал' src='http://lh4.googleusercontent.com/_IP8w9pw5oW0/TdKdxsv3EpI/AAAAAAAAAig/o0NvQb5O0Qk/livejournal.png' style='border: 0pt none;' title='Опубликовать в ЖЖ'/></a>
<!--Мой мир-->
   <a class='shareme' expr:href='"http://connect.mail.ru/share?share_url=" + data:post.url ' expr:onclick='"window.open(this.href, \"_blank\", \"height=310,width=475\"); return false;"' expr:title='data:top.blogThisMsg' rel='nofollow' target='_blank'><img alt='в Мой мир' src='http://lh6.googleusercontent.com/_IP8w9pw5oW0/TdKdxy7ouBI/AAAAAAAAAio/wN3Xv9_DtJY/mailru.png' style='border: 0pt none;' title='Опубликовать в Моем Мире'/></a>
<!--Я.ру-->
   <a class='shareme' expr:href='"http://my.ya.ru/posts_add_link.xml?title=" + data:post.title + "&URL=" + data:post.url' expr:onclick='"window.open(this.href, \"_blank\", \"height=500,width=900\"); return false;"' expr:title='data:top.blogThisMsg' rel='nofollow' target='_blank'><img alt='в Я.ру' src='http://lh5.googleusercontent.com/_IP8w9pw5oW0/TdKdyXolWLI/AAAAAAAAAi0/vD5xZerIR9o/yandex.png' style='border: 0pt none;' title='Опубликовать в Я.ру'/></a>
<!--Facebook-->
   <a class='shareme' expr:href='"http://www.facebook.com/sharer.php?u=" + data:post.url ' expr:onclick='"window.open(this.href, \"_blank\", \"height=270,width=475\"); return false;"' expr:title='data:top.blogThisMsg' rel='nofollow' target='_blank'><img alt='в Facebook' src='http://lh6.googleusercontent.com/_IP8w9pw5oW0/TdKdxSR6RhI/AAAAAAAAAic/SqjB9CiCsUA/facebook.png' style='border: 0pt none;' title='Опубликовать в Facebook'/></a>
    </div>
 </div>
</b:if>
   Схожие по тематике посты:
   Ради увеличения количества переходов, решил транслировать в конце каждого поста, схожие с ним по тематике другие сообщения блога. Результат не заставил себя долго ждать. буквально за несколько дней количество просмотров увеличилось в трое.
   Пока скрипт работает не совсем корректно. Не смотря на то, что при настройке ему было указано сколько схожих постов отображать, а при отсутствии вообще ничего не отображать. Он постоянно, что то, да выводит. Причем для решения проблемы, нужно лезть и разбираться в самом API Blogger.
<b:if cond='data:blog.pageType == "item"'>
 <div class='similiar'>
 <div class='widget-content'>
 <br/>
 <div id='data2007840981'/>
 <div id='data2007840980'/><br/>
 <script type='text/javascript'>
 var headerN = "Похожие статьи:"; 
 var header1 = "Еще статьи из категории \"__LABEL__\":"; 
 var header0 = ""; /* Текст, выводимый, если нет ни одной метки и ссылки. */
 var homeUrl3 = "<data:blog.homepageUrl/>"; /* Адрес блога, откуда берём список постов. */
 var maxNumberOfPostsPerLabel = 2; /* Максимальное число постов, отображаемых для каждой метки. */
 var maxNumberOfLabels = 2; /* Максимальное число отображаемых меток. */
 var excludeEmptyLabels = true; /* Скрывать ли метки, для которых нет подходящих постов. true - скрывать, false - отображать. */
 var excludeLabels = []; /* Метки, которые не следует отображать. */

 var renameLabels = {};
 function is_in(item, array) {
 for (k in array)
 if (array[k] == item) return true;
 return false;
 }
 function label_title(label) {
 if (renameLabels[label])
 return renameLabels[label];
 return label;
 }
 totalLabels = 0;
 receivedReplies = 0;
 var receivedItems = [];
 var k_label;
 function labelReceived() {
 receivedReplies++;
 if (receivedReplies != totalLabels)
 return;
 var labelCount = 0;
 for (k_label in receivedItems) {
 var items = receivedItems[k_label];
 if (items.length == 0 && excludeEmptyLabels)
 continue;
 labelCount++;
 }
 var labelCount1 = 0;
 for (k_label in receivedItems) {
 var items = receivedItems[k_label];
 if (items.length == 0 && excludeEmptyLabels)
 continue;
 var ul = document.createElement('ul');
 var itemsCount = 0;
 for (var k_item in items) {
 item = items[k_item];
 var li = document.createElement('li');
 var a = document.createElement('a');
 a.href = item.href;
 var txt = document.createTextNode(item.title);
 a.appendChild(txt);
 li.appendChild(a);
 ul.appendChild(li);
 itemsCount++;
 if (itemsCount == maxNumberOfPostsPerLabel)
 break;
 }
 var txt = document.createTextNode(k_label);
 var h = document.createElement('b');
 h.appendChild(txt);
 var div1 = document.createElement('div');
 if (!(labelCount == 1 && header1.search && header1.search(/(LABEL)/) != -1))
 div1.appendChild(h);
 div1.appendChild(ul);
 document.getElementById('data2007840980').appendChild(div1);
 labelCount1++;
 if (labelCount1 == maxNumberOfLabels)
 break;
 }
 var txt;
 if (labelCount == 1 && header1)
 txt = document.createTextNode(header1.replace("__LABEL__", k_label));
 else if (labelCount)
 txt = document.createTextNode(headerN);
 else if (header0)
 txt = document.createTextNode(headerN);
 if (txt)
 {
 var h = document.createElement("h4");
 h.appendChild(txt);
 document.getElementById('data2007840981').appendChild(h);
 }
 }
 function receiveReply_123(json) {
 var label = "";
 for (var l = 0; l < json.feed.link.length; l++) {
 if (json.feed.link[l].rel == 'alternate') {
 var raw = json.feed.link[l].href;
 var label = raw.substr(homeUrl3.length+13);
 var k;
 for (k=0; k<20; k++)
 label = label.replace("%20", " ");
 label = decodeURI(label);
 break;
 }
 }
 var labelTitle = label_title(label);
 if (typeof receivedItems[labelTitle] != "object")
 receivedItems[labelTitle] = [];
 for (var k in json.feed.entry) {
 var entry = json.feed.entry[k];
 var href = "";
 for (var kl in entry.link) {
 if (entry.link[kl].rel == "alternate") {
 href = entry.link[kl].href;
 break;
 }
 }
 if(href != "" && href != location.href) {
 var item = { "href" : href, "title" : entry.title.$t};
 receivedItems[labelTitle].push(item);
 }
 }
 labelReceived();
 }
 function sendQueryForLabel(query, label) {
 var script = document.createElement('script');
 script.setAttribute('src', query + 'feeds/posts/default/-/'
 + label +
 '?alt=json-in-script&callback=receiveReply_123');
 script.setAttribute('type', 'text/javascript');
 document.documentElement.firstChild.appendChild(script);
 }
 var parsedlabels = [];
 var labelsCount = 0;
 function list_items(textLabel) {
 if (labelsCount >= maxNumberOfLabels ||
 is_in(textLabel, excludeLabels) ||
 is_in(textLabel, parsedlabels)) {
 labelReceived();
 return;
 }
 labelsCount++;
 parsedlabels.push(textLabel);
 sendQueryForLabel(homeUrl3, textLabel);
 }
 <b:loop values='data:posts' var='post'>
 <b:loop values='data:post.labels' var='label'>
 totalLabels++;
 </b:loop>
 </b:loop>
 <b:loop values='data:posts' var='post'>
 <b:loop values='data:post.labels' var='label'>
 list_items("<data:label.name/>");
 </b:loop>
 </b:loop>
 </script>
 </div>
 </div>
 </b:if>
 
    Красивое открывание изображений в Blogger:
   Ну и в последнюю очередь прицепил к Blogger расширение LightBox. А то вроде бы и решил заняться фотографией, а изображения в блоге открываются как то не солидно.
   С первого раза тоже возникли проблемы. Google Chrome некорректно отображал страницы блога. Пол экрана заливалось черным цветом, а в самом конце блога постоянно грузилось какое то изображение. Проблема была решена тем, что в Google Code, нашел более свежие JS скрипты, которые использует LightBox.
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js' type='text/javascript'/>
<style type='text/css'>
    /* jQuery lightBox plugin - Gallery style */
    #gallery {
        background-color: #444;
        padding: 10px;
        width: 520px;
    }
    #gallery ul { list-style: none; }
    #gallery ul li { display: inline; }
    #gallery ul img {
        border: 5px solid #3e3e3e;
        border-width: 5px 5px 20px;
    }
    #gallery ul a:hover img {
        border: 5px solid #fff;
        border-width: 5px 5px 20px;
        color: #fff;
    }
    #gallery ul a:hover { color: #fff; }
    </style>


<script src='http://dinhquanghuy.110mb.com/lightbox/jquery.lightbox-0.5.js' type='text/javascript'/>
<link href='http://dinhquanghuy.110mb.com/lightbox/jquery.lightbox-0.5.css' media='screen' rel='stylesheet' type='text/css'/>

<script type='text/javascript'>
$(function() {
$('a[rel*=lightbox]').lightBox();
});
</script>

   Все устанавливается элементарно просто. Для LightBox, вставляем выше указанный код перед тегом </head>. Другие два на свое усмотрение, но эффективнее они будут выглядеть в конце сообщения, т.е. после <data:post.body/>.
   П.С.Я думал сбой blogspot с ошибкой bX-kd9wlm от 12 мая прошел без особых изменений, а оказывается все-таки несколько нововведений было сделано. В частности загрузка и работа с изображениями теперь куда удобнее.  

Ontrack EasyRecovery

Posted by Reason89 | Posted in

   В последнее время часто приходится восстанавливать информацию с различных носителей. Первоначально это началось с того, что пошла эпидемия вирусов, которые затирают таблицу имен файлов, т.е. файлы на флешке вроде как бы и есть судя по занятому пространству, а вроде как и их нет. Затем было не совсем удачное форматирование мной чужого винчестера. Нечаянно затер не тот локальный диск, в результате чего человек остался без музыки, фотографий и файлов по учебе. Ну и пока остановились на самом интересном. При копировании файлов с внешнего винчестера, произошел сбой, в результате из папки пропали все файлы, а это примерно 40 Гб фотографий. Вместо всей этой картотеки красовался лишь один файл, с причудливым именем USB*...., который не удалить не переименовать нельзя.
   Обычно меня в этом плане выручала Recuva, шустрая программа, которая с легкостью вытаскивала файлы в первом и во втором случае. Но после того как я дал ей на растерзание винчестер на 500гб, то мало того, что она крутила его на протяжении суток, то так ничего и не нашла. Плюс пришлось еще начинать все сначала, после того как ноутбук не выдержал моего натиска, и элегантно потух от перегрева. Тут я решил воспользоваться программой Ontrack EasyRecovery, которая меня однажды слегка подвела в том плане, что восстановленные с ее помощью mp3 файлы, были черт знает как обрезаны.
   Главным ее преимуществом, кроме функционала в плане восстановления является возможность сохранения результата сканирования, для последующего продолжения работы. Ручной выбор с какого по какой сектор сканировать. Иными словами, я уже не особо боялся, что компьютер опять выключится, т.к. периодически делал бэкап. И затратил куда меньше времени, т.к. сканировал не все 500Гб.
   Несомненно так же радует русский интерфейс и большое количество способов восстановления, как с поврежденного носителя так и после различных видов удаления и форматирования. В плоть до того, что даже не известна файловая система, которая была ранее.
не все функции правда адекватно работают. Так при использовании функции по поиску файлов определенного типа, в моем случае это были изображения. Программа ищет заголовки этих файлов, не особо понимая где конец файла. В результате чего на выходе мы имеем изображения в 150Мб, а то и более.
   Стоит заметить, что восстановление файлов это не единственная особенность этой программы. Программу, которые справляется со всем я так и не нашел, но по моему Ontrack EasyRecovery Professional наиболее функциональнее в этом плане.