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

Posted by Nosaer | 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 Nosaer | Posted in

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