wprintf конфликтует с printf

Как вы думаете, что напечатает следующий код?

#include <wchar.h>
#include <stdio.h>
 
int main()
{
    wprintf(L"wprintf\n");
    printf("printf\n");
    return 0;
}

Вот и не угадали! Напечатает он:

user@pogo tmp $ gcc test.c
user@pogo tmp $ ./a.out
wprintf

Оказывается, нельзя смешивать wide-character и character функции работы с одним и темже файлом. Люой открытый файл имеет аттрибут wide-character oriented либо byte oriented. И первый вызов функции I/O в файл устанавливает orientation аттрибут файла; в зависимости, что мы вызвали wprintf() или printf() файл пометится как wide-character или просто character oriented.

Резервное слово small в VisualStudio SDK

Адъ. Долго разбирался почему код не компилируется. Понял, что не нравится слово small. Но почему? Ответ оказался прост и ужасен:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\RpcNdr.h (149-155):

/**************************************************
 *  Other MIDL base types / predefined types:
 **************************************************/
 
#define small char
typedef unsigned char byte;
typedef byte cs_byte;
typedef unsigned char boolean;

Втихомолку резирвировать слово и включить это в свой SDK — Мелкософт, что ты курил?!

False positive vs false negative vs true positive vs true negative

Вечно путаю все эти виды ошибок. Поэтому записываю здесь, чтобы можно было быстро подсмотреть.

Итак, проводим эксперимент (или любое другое действо), где есть проверка (появления) некоторого события. Тогда, результат нашей проверки можно охарактеризовать сабжевыми словами исходя из следующей схемы:

True — правильно сделали, что …

False — лопухнулись, что …

Positive — нашли появление события

Negative — не нашли появление события

Все, теперь любая комбинация этих слов для меня будет легко интерпретирована на русский язык.

Разделитель для sed — вместо экранирования символов

Писал простенькое такое правило для sed. Нужно было заменить что-то на путь до текущей директории. Что-то вроде :

sed -e "s/foo.c/$PWD/" ...

проблема в том, что $PWD раскрывается в путь (например /space/user/me/) и символ ‘/’ там никак не заэкранирован. В результате ломается формат команды ‘s‘.

Решение очень простое — используем почти любой другой символ как разделитель, например ’#‘:

sed -e "s#foo.c#$PWD#" ...

Дело в том, что команда ‘s‘ считает символ, следующий сразу за ‘s‘, разделителем полей между заменяемым и заменяющим регулярными выражениями.

Как посмотреть все объявления cian.ru на одной большой Яндекс-карте

Вообще, мне нравится контора ЦИАН.РУ, там много объявлений, минимум рекламы. Более того, ЦИАН привязывает свои объявления к Yandex-карте. Это очень удобно. Можно задать кусок поиска прямо на Yandex-карте.

С другой стороны, хочется видеть на большой Yandex-карте все объявления сразу! Зачем задавать кусочек карты для поиска, когда можно сразу рассмотреть все приложения в любом месте карты?! И такой сервис есть в ЦИАН-е, только он сильно «спрятан». Значит надо его вытащить на поверхность!

Итак, вуаля:

cian.ru Общий вид карты

 

Все объявления о продаже/покупке земли и участков на одной большой карте! Удобно не правда ли?

Это немного переделанная страничка из ЦИАН-на умеет:

  • изменять масштаб в большем диапазоне
  • автоматически принимает размер окна вашего браузера
  • при клике на объявление открывает его в новом окне!
Чтобы воспользоваться нужно:
  • скачать запакованную версию → ОТСЮДА
  • распаковать и открыть (в браузере)

 

С помощью этой карты я легко отследил цены на участки и дома в нужном загородном районе. Выбирать недвижимость «на местности» зачастую бывает удобнее, чем долгим поиском по различным критериям.

Цены в килограммах :) :

 

cian.ru Увеличенный вид

Удачного поиска!

WordPress Popular Posts: удобная функция для получения популярных записей массивом

У меня установлен плагин для отслеживания популярных постов — WordPress Popular Posts. Однако, кроме возможности вывести виджет на sidebar‘е никакого другого удобного API нет. Конечно, можно сильно поизголяться над единственной функцией get_mostpopular(), но назвать ее функциональность удобной невозможно. В результате пришлось добавить еще одну функцию, get_mostpopular_array() которая работает почти так же, только возвращает массив эелементов типа $post. Это очень удобно, т.к. теперь есть быстрый доступ к любой(!) характеристике записи (post_title, ID, post_date, post_author, post_content, … полный список ТУТ). Мне это сильно облегчило жизнь, т.к. при таком подходе гораздо легче настроить вывод популярных записей в определнном стиле/разметке. Например:

<?php
$popular_posts = wpp_get_mostpopular_array('range=monthly&order_by=views');
foreach ($popular_posts as $post) {
?>
<div class="home_recent_post">
  <a href="<?php echo get_permalink($post->ID); ?>"
     title="<?php echo $post->post_title; ?>" />
    <?php echo $post->post_content; ?>
  </a>
</div>
<?php
}
?>

 

Для всех, кто тоже использует этот плагин и хочет иметь большую гибкость для вывода популярных записей своего wordpress блога, рекомендую попробовать этот новый метод. Для этого нужно:

  • скачать и распаковать файл wordpress-popular-posts.php (работает с плагином WordPress Popular Posts версии 2.2.1)
  • залить его сюда → <путь до вашего сайта>/wp-content/plugins/wordpress-popular-posts (там уже есть такой файл, придется его заменить на мой)
  • все!

Небольшой туториал по аргументам, которые может принимать функция get_mostpopular_array($args):

  • limit — максимальное количество популярных записей
  • range — за какой период искать популярные записи: »daily«, «weekly«, «monthly«, «all«
  • order_by — сортировка выводимых записей: »comments«, «views«, «avg» (просмотры в день)
  • cats_to_exclude — какие категории исключить, например: cats_to_exclude=»1,55,74″

Все эти аргументы хорошо описаны в Help секции плагина.

[Решено] chrome-auto-translate-plugin-dialog и Auto-Translate против HTML-Regex-Replace

Некоторое время назад, я писал, что Auto-Translate расширение для Chrome автоматически вставляет код ( chrome-auto-translate-plugin-dialog ) в редактор для WordPress. Теперь этому пришел конец! Представляю вам плагин HTML-Regex-Replace для WordPress, с помощью которого вы легко и просто сможете избавиться от этой проблемы. Конечно, он способен и на большее :) . Описание и сравнение с другими плагинами есть ТУТ.

Как пофиксить:

      1. Устанавливаем HTML-Regex-Replace плагин и активируем.
      2. Добавляем Regexp:
        <div id=.-chrome-auto-translate-plugin-dialog[^>]*>[\n ]*<div [^>]*><.div>[\n ]*<img [^>]*>[\n ]*<.div>
      3. Сохраняем изменения

Все, теперь Auto-Translate не помешает вам жить и работать под лучшей платформой WordPress!

 

Фантастические рассказы из журнала Юный Техник

Кто в юности не читал журнал Юный Техник?! Это был классный журнал, у меня дома скоплялись выпуски за несколько лет в виде больших стопок. Однако, со временем, их выкинули, о чем я до сих пор жалею. Отдельный интерес вызывали фантастические рассказы из Юного Техника. Короткие и интересные.

И вот наткнулся в сети на коллекцию этих рассказов. Смотрите сами → ТУТ!

Иногда, я печатаю их на работе и приношу почитать дома.

Disqus против IntenseDebate: тестируем обе системы вживую

Мне никогда не нравилась стандартная система комментариев в WordPress. Хотя она довольно проста, но имеет ряд недостатков. Первый из них — слабая система защиты от спама. Никакие капча и Akismet нормально не защищают. Более того, Akismet иногда ошибается и в итоге создает false positives. А это неприятно, когда нормальных людей записывают в спаммеров.

Решение более-менее очевидно, надо поставить стороннюю систему комментариев. На сегодня выбор можно делать, в основном, из двух систем: Disqus и IntenseDebate. Мне хотелось посмотреть на обе системы «в живую». Поэтому я не напрягся и создал два идентичных микро-блога для того, чтобы посмотреть на эти системы рядом.

Встречаем, DISQUS-ex и INTENSEDEBADE-ex — на каждом блоге установлена система комментариев соответственно названию блога :)

Правда, установлены они по-разному. IntenseDebate встроена в шаблон, а Disqus подгружается как виджет. Но в остальном все идентично.

Тестируйте и сравнивайте сами на здоровье!

Лично мне более понравилась Disqus и в скором времени, наверное, на нее и переключусь.