пятница, 25 мая 2012 г.

Life: Как сконвертировать djvu?

Как сконвертировать DJVU в PDF? Например, если нужно загрузить в читалку.

По старинке обычно рекомендуют мелкие утилитки. Хотя уже давно есть куча сайтов, которые конвертируют прямо в онлайне. Docspal, например.

вторник, 22 мая 2012 г.

Books: Паттерны, сэр!

Кто-то издаёт толстенные тома, в которых переводит стандартные паттерны из известной книжки на C#, Java, Python...

А кто-то новые печёт!

понедельник, 21 мая 2012 г.

Tools: Remove whitespaces at the end of lines in Visual Studio

Известный поисковый запрос, вынесенный в заголовок - одна из самых навязчивых проблем Visual Studio.

Опытные пользователи знают, что в поиске-замене есть свой RegExp. Но работает он не так, как у людей.

Что делать? Искать готовые решения.

Например:

:Zs#$ - все пробелы на конце строк
^:d+ - все цифры в начале строк (например, из какого-нибудь блога код скопировал)

Список будет пополняться.

пятница, 18 мая 2012 г.

Philosophy: Паттерны - 2

Wolfgang Pree из Зальцбурга тоже исследовал паттерны и написал про них книжку. В отличии от писаний "банды четырёх", в Рунете про неё почти никто не слышал.

Даже перевода нет.

Зато есть конспект на английском.

ASP.Net: Текущая страница из ASCX

Как узнать текущую страницу из ASCX? Например, для какой-нибудь компоненты из недр sitecore layout?

Вот так:

String.Format("{0}://{1}{2}",
                Request.ServerVariables["HTTPS"] == "on" ?
                    "https" :
                    "http",
                Request.ServerVariables["SERVER_NAME"],
                Request.RawUrl.ToString());

четверг, 17 мая 2012 г.

Script: Popup по центру экрана

Как поставить кнопки Facebook/Twitter/Google со своими иконками? Берём и ставим a с соответствующими href:

Twitter:
https://twitter.com/intent/tweet?url={PageUrl}&text={PageUrl}

Показываеть Twitter как blank - не надо. Если вставить сакральную мантру:

!function(d, s, id)
< script type="text/javascript" >
{ 
  var js, fjs = d.getElementsByTagName(s)[0];
  if (!d.getElementById(id))
  {
    js = d.createElement(s);
    js.id = id;
    js.src = "//platform.twitter.com/widgets.js";
    fjs.parentNode.insertBefore(js, fjs); 
 } 
} (document, "script", "twitter-wjs");
< /script >
< script type="text/javascript" src="//platform.twitter.com/widgets.js" >< /script >

 то он сам всё найдёт и откроет. Попытаешься повесить скрипт - начнёт показывать 2 окна.

Facebook:
http://www.facebook.com/sharer.php?t={PageTitle}&u={PageUrl}

По необъяснимой причине он не видит PageTitle, если запускать с локального сервера.

Google Share (не путать с Google +1!):
https://plus.google.com/share?url={PageUrl}

Pinterest:
http://pinterest.com/pin/create/button/?url={PageUrl}&media={PageImage}&description={PageTitle}

А открывать это надо через _blank и по центру экрана:

function PopupCenter(pageURL, title, w, h) {
   var left = (screen.width / 2) - (w / 2);
   var top = (screen.height / 2) - (h / 2);
   var targetWin = window.open(pageURL, title, 'menubar=no, toolbar=no, resizable=yes, scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);
} 

Функцию для открывания окна взял у Нимы.

И ещё - если во втором параметре window.open будет пробел, Internet Explorer его не откроет. Такие дела.