суббота, 28 марта 2009 г.

Коды основных символов HTML

Часто используемые
    неразрывный пробел
  короткий пробел
  длинный пробел
­ ­ мягкий перенос
— длинное тире
– короткое тире
… многоточие
« « левая кавычка елочка
» » правая кавычка елочка
© © (c)
® ® (R)
™ TM
Математические
± ± +-
× × умножить
≠ не равно
&lt; < <
&gt; > >
&le; <=
&ge; >=
&radic; квадратный корень
&sup2; ² квадрат, вторая степень
&sup3; ³ куб, третья степень
&frac14; ¼ 1/4
&frac12; ½ 1/2
&frac34; ¾ 3/4
&infin; бесконечность
Стрелки
&larr; стрелка влево
&uarr; стрелка вверх
&rarr; стрелка вправо
&darr; стрелка вниз
&harr; стрелка влево и вправо
&crarr; стрелка вниз, потом влево, как Enter
&lArr; стрелка двойная влево
&uArr; стрелка двойная вверх
&rArr; стрелка двойная вправо
Прочие
&amp; & амперсанд
&euro; ? евро
&prime; '
&Prime; ''
&middot; · точка на середине высоты строки
&oline; Надчерк
&deg; ° градус

jQuery Tabs. Ajax загрузка в один и тот же div контейнер

Эта статья будет полезна тем, кто использует такую мощную штуку как jQuery UI, в частности элемент интерфейса Tabs. jQuery Tabs позволяет в несколько строчек кода создавать удобный и быстрый набор вкладок на HTML странице.

Контент в каждой из вкладок может быть как статическим,так и динамически загружаемым при помощи ajax-а. Все доступные опции и методы этого элемента управления неплохо расписаны на официальном сайте jQuery, поэтому я углубляться не буду.

Приведу пример использования:

<div id="contacttabs">
  <ul>
    <li><a href="all.html"><span>Все контакты</span></a></li>
    <li><a href="friends.html"><span>Друзья</span></a></li>
    <li><a href="invisible.html"><span>Список невидящих</span></a></li>
    <li><a href="ignore.html"><span>Список игнорируемых</span></a></li>
  </ul>
</div>

<script type="text/javascript">
  $(document).ready(function() {
    $("#contacttabs").tabs({
      spinner: 'загрузка...'
});
  }
</script>

После загрузки страницы создастся четыре вкладки, содержимое, в каждую из них, будет загружено динамически ajax-ом. Все недостающие контейнеры, в которые загружать содержимое вкладок, jQuery создаст сам. Эта часть будет выглядеть приблизительно вот так (содержимое div-ов опущено для упрощения восприятия):

<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
...
</ul>
<div id="ui-tabs-16" class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"></div>
<div id="ui-tabs-27" class="ui-tabs-panel ui-widget-content ui-corner-bottom"></div>
<div id="ui-tabs-29" class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"></div>
<div id="ui-tabs-31" class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"></div>

Вкладок четыре, соответственно DIVов-контейнеров тоже четыре. У меня проблема возникла вот в чём. В данном конкретном примере, содержимое вкладок было одинаковым по структуре, но различным по смыслу. Появлялась ситуация, когда элементы HTML-страницы имеющие одни и те же ID-шники появлялись на разных вкладках.

В текущий момент времени пользователь видит только активную вкладку, и может взаимодействовать только с элементами, находящимися в контейнере выбранной вкладки. Все остальные имеют атрибут hidden. Это значит, что элементы загружены в DOM для каждой из вкладок, хотя и не видны в данный момент времени, и если обратиться по уникальному ID-шнику элемента на вкладке, то может возникнуть «коллизия», и селектор выберет совсем не тот элемент, который хотелось из активной вкладки.

Единственным выходом для меня было – подчищать содержимое контейнеров неактивных вкладок, дабы не возникало дублирование ID-шников. Такой опции в jQuery Tabs, я найти не смог, пришлось написать небольшой hook. Я навесил на событие select, возникающее в Tabs, в момент переключения активной вкладки, очистку всех неактивных контейнеров <div>.

<script type="text/javascript">
  $(document).ready(function() {
    $("#contacttabs").tabs({
      spinner: 'загрузка...',
      select: function(event, ui) {
        /*clear all divs content except active one*/
        fakes = ui.panel.parentNode.getElementsByTagName('div');
        for(i=0;i<fakes.length;i++){
          if(fakes[i] != ui.panel){
            fakes[i].innerHTML = '';
          }
        }
      }
    });
  });
</script>

И тогда всё заработало, как следует..

четверг, 5 марта 2009 г.

Смешные комментарии в коде

Насобирал отличную подборочку смешных комментариев в коде, думаю, программисты оценят свою же лирику (=


// sometimes I believe compiler ignores all my comments

// drunk, fix later

return 1; //returns 1

// Magic. Do not touch.

const int TEN=10; // As if the value of 10 will fluctuate...

//This code sucks, you know it and I know it. Move on and call me an idiot later.

doRun.run(); // ... "a doo run run".

try {
} finally { // should never happen
}

/* These magic numbers are fucking stupid. */

/* TODO: this is obviously not right ... this whole fucking module sucks anyway */

/* FIXME: please god, when will the hurting stop? Thus function is so fucking broken it's not even funny. */

//I am not sure why this works but it fixes the problem.

// I am not sure if we need this, but too scared to delete.

// I have to find a better job

// Remove this if you wanna be fired

if (case1) { // trivial
...
}
else { // we are screwed
/* fill in later */
}

if (/*you*/ $_GET['action']) { //celebrate

Замедляет ли Google Analytics сайт?

Если вы используете Google Analytics для отслеживания посещений на вашем блоге, то вы можете быть удивлены скоростью загрузки страниц, по-крайней мере в Европе точно заметно. Народ начал замечать, что в так называемые «часы-пик» использования Web-а код JavaScript от Google Analytics грузится на 97% медленнее по сравнению с обычной нагрузкой. Это справедливо для Европы. Для США такое падение в скорости тоже имеет место, но не такое заметное, разница составляет всего лишь 27%.

Чем это обусловлено – сложно сказать. Скорее всего, просто большинство серверов Гугла расположено не в Европе, и поэтому большое количество пользователей даёт такую усадку по скорости загрузки. Конечно, это не означает, что нужно перестать пользоваться этим прекрасным сервисом, и боятся за скорость загрузки вашего сайта. Всё это некритично.

Есть конечно и ряд других аналогичных некоммерческих сервисов для отслеживания посещений на вашем сайте. Сегодня один из моих друзей показал мне такую вещь как Woopra (http://www.woopra.com). На данный момент сервис находится в стадии бета-тестирования, но багов мной не было замечено, можно смело пользоваться. По возможностям сервис превосходит аналогичный GA (Google Analytics). Единственный недостаток – у них большая нагрузка на сервера и поэтому можно ждать около месяца пока ваш аккаунт утвердят. Что сразу бросилось в глаза – Woopra может отслеживать посещения и анализировать поведение пользователей вплоть до отдельного индивидуума, такого GA, конечно, не предоставляет.

Кого заинтересовало, думают стоит разобраться более детально, там много ещё чего интересного. А какими сервисами пользуетесь вы для отслеживания и анализа посещений на ваши сайты?

Рекоммендую

Попробуйте надёжный хостинг от Scala Hosting