пятница, 25 сентября 2009 г.

Ubuntu: Firefox жует диск!

Видимо, когда высшие сферы раздавали суперсилу, автор этого блога рассказывал несмешной анекдот в курилке. Поэтому, Человек-Паук, к примеру, умеет раскачиваться на собственных соплях, а Супермен – не выглядеть геем в трениках; моим же ключевым талантом по-видимому является нахождение граблей там, где по замыслу Творца их и быть-то не должно.


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


Готы. Иногда не сделать смешнееИногда
слова не могут сделать картинку смешнее

Нет, ну ведь чудеса в решете. Да ты только на морду его «идейно и политически подкованную» посмотри! Ну как может такое не плохо работать?!

Железяка: Dell Inspiron 1501 laptop
AMD Turion 64 X2, 2Gb RAM
Система: Ubuntu 8.10 (Intrepid Ibex) x64
Браузер: Mozilla Firefox 3.5.3

А вот поди ж ты...


Вскоре проблема была «локализована»: общий упадок боевого духа компонентов системы наблюдался при появлении на арене театра боевых действий браузера Firefox. Причем, как выяснилось путем массовых расстрелов, дело было не в установленных дополнениях и даже, как выяснилось позже, не в самом браузере как таковом. А дело было во всем том хабаре, который накопился в профиле Огнелиса.


Теоретически, можно было воспользоваться одним из приемов разгона браузера Firefox и, например пережать базу sqlite. Но теперь это только теоретически. Поскольку я поступил как Настоящий Чак Норрис практик и попросту грохнул мозилловский профиль (расположен в директории пользователя /.mozilla), предварительно сохранив необходимые данные.


Чак Норрис. СкалаЧак Норрис
был здесь

После последовавшего запуска «чистого» Firefox вышеозначенные симптомы исчезли. Как бы то ни было, а точечные карательные зверства античеловеческих репрессий безбожно творят чудеса :).


---
Есть собственное коммутационное и серверное оборудование да негде разместить? Ты верно шутишь! Услуги colocation москва – размещай и пользуй!


Читать дальше »

понедельник, 21 сентября 2009 г.

Строгий редактор

Примат формы над содержанием

Примат формы над содержанием или почему я не использую обновленный редактор сообщений Blogger.


Несколько недель назад решил потестировать обновленный WYSIWYG редактор сообщений Blogger. Первое что бросилось в глаза – это отсутствие возможности загрузки изображений в режиме редактирования HTML. Сам я довольно широко использую HTML в тексте сообщений и необходимость переключения с одного режима на другой отнюдь не вдохновляла.


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


  1. При переключении с одного режима на другой (например, при необходимости загрузки изображения), «строгий редактор» преобразовывал все теги логической разметки в их аналоги физической разметки. Как то: <strong><b> и <em><i>.
    Набрано:

    У <strong>попа</strong> была <strong>собака</strong>,
    он ее <em>любил</em>.

    «Режиссерская версия»:
    У <b>попа</b> была <b>собака</b>,
    он ее <i>любил</i>.

  2. При открытии опубликованного сообщения, «строгий редактор», по некоторой одной ему известной причине, расставляет параграфы следующим образом.
    Набрано:

    <p>У попа была собака,
    он ее любил.</p>

    Отредактировано:
    <p>
    У попа была собака,
    он ее любил.</p>


И вновь все было реализовано по известному принципу «Google Blogger знает лучше».

Злой малышНет никакого тебя!
Есть только я.


Что ж, как бы то ни было, для себя я выбрал мир, в котором нет места обновленному редактору сообщений. А для желающих все же наступить на эти грабли, рассказываю где «лежат»: НастройкиОсновные сведенияОбщие настройки (Относятся ко всем вашим блогам), выбрать опцию «Обновленный редактор».


В конечном счете, выбор за тобой. Успехов!


---
А для владельцев домашних животных будет полезна такая услуга как вызов ветеринара на дом.


Читать дальше »

четверг, 3 сентября 2009 г.

Javascript и CSS в сообщениях Blogger

Довольно часто в конференциях проскакивают вопросы типа: «я написал функцию javascript. На отдельной странице работает, а в сообщении Blogger – нет». Это такие древние грабли, о которых я бы давно и забыл, поскольку «перешагиваю» уже на автомате. Но подобные вопросы всплывают снова и снова, поэтому проще один раз написать и избавить себя от головной боли в будущем.


Итак, как лечить. Дело в том, что у большинства пользователей Blogger активирована опция «Преобразовывать разрывы строк» (Настройки – Форматирование). Даже у меня, хотя если задуматься, она мне нафиг не нужна.


Все символы перевода строки в редактируемом сообщении \n преобразуются движком Blogger в теги <br />. И чтобы javascript не потерял работоспособность, код вида:

<script type="text/javascript">
function myBloggerFunction(){
/*...код функции...*/
}
</script>

в сообщении нужно утаптывать в одну строку:
<script type="text/javascript">function myBloggerFunction(){/*...код функции..*/}</script>


То же справедливо и для стилей CSS:

<style type="text/css">
.post-body blockquote {
font-style:italic;
color: #1A3457;
}
.post-body blockquote.myStyle {
border:1px dotted #1A3457;
}
</style>

Одной строкой:
<style type="text/css">.post-body blockquote {font-style:italic;color: #1A3457;}.post-body blockquote.myStyle {border:1px dotted #1A3457;}</style>


И еще один момент. Было замечено, что движок Блоггера ломает операции сравнения в javascript. Например, преобразует < в &lt; и > в &gt;. К сожалению (или к счастью), «на кошках» мне этот баг повторить не удалось. Возможно, что ошибка уже исправлена.


---
Увы, хворают не только скрипты; иногда болеют и домашние питомцы. Во втором случае – помощь окажут в ветеринарной клинике.


Читать дальше »

вторник, 23 июня 2009 г.

Google Chrome: баг с ифреймом

google chrome

Сегодня коллега попросил помочь разобраться со странным поведением браузера Chrome.


На странице два элемента <iframe>. В одном чат, в другом ротатор баннеров.

<!-- В этом фрейме работает флешевый чат -->
<iframe id="frame_chat" src="/userplane/chat" frameborder="no"></iframe>
<!-- В этом фрейме сторонний скрипт баннеро-ротатор -->
<iframe id="frame_ads" src="http://third_part_banner_rotator" frameborder="no"></iframe>


Скрипт приводить не буду. Действует так: через каждые 30 секунд создает frameset с фреймами. Во фреймах различные составные рекламные баннеры.


Все браузеры (даже IE!), как и задумано, перезагружают только содержимое ифрейма "frame_ads", а Chrome – страницу целиком.


Перекопано было все, что только можно, по ходу исправлено еще несколько неаккуратностей, а проблема решилась до безобразия просто. Переписал тег второго ифрейма в сокращенной XHTML форме:

<iframe id="frame_ads" src="http://third_part_banner_rotator" frameborder="no" />


И всё заработало :). Сыроват еще «Хром», сыроват...


Читать дальше »

MP-BIOS bug 8254 timer not connected. Исправление

Ubuntu

Проблема с убунтой все та же: MP-BIOS bug: 8254 timer not connected to IO-APIC и категорический отказ загружаться дальше. Прием, который я приводил по этому поводу в прошлый раз срабатывает так же часто, как сбываются лучшие ожидания.


Не так давно вычитал совет на одном из буржуйских форумов.

  1. На экране загрузки GRUB используй клавиши стрелок чтобы выбрать:
    kernel /boot/linuz-2.6.15-25-386 root=/dev/sda3 ro quiet splash
    (твои пути и цифры могут немного отличаться)
  2. Затем нажми “e” чтобы отредактировать опции загрузки. Ты перейдешь на другой экран;
  3. Добавь noapic в конец опций загрузки и жми “enter”;
  4. Жми “b” для загрузки.


У меня процедура немного отличалась от описанной, но все сработало.


Далее тот же камрад советует как сделать эти изменения постоянными:

  1. sudo gedit /boot/grub/menu.lst
  2. добавь noapic в строку “#defoptions=
  3. update grub
  4. перезагрузись.


Эту часть я пока не проверял.


Ссылка на исходное сообщение на убунтофоруме.


Читать дальше »

четверг, 18 июня 2009 г.

Miranda IM 0.8

Miranda IMИтак, увидел свет мультипротокольный мессенджер Miranda в своей 0.8-й инкарнации. Miranda – программа мгновенного обмена сообщениями для Microsoft Windows.


Радость по поводу выхода любимого клиента была недолгой.
Miranda 0.8 crash


А вот это всплыло при одном из запусков мессенджера. «ДОС фарева!» :)
Miranda DOS


Снос плагинов проблему решает. С другой стороны, очень уж вкусные были плагины; без них как-то скучно.


Новость узнал лично. Еще есть такое описание на Хабрахабре.

Читать дальше »

понедельник, 9 марта 2009 г.

Ошибка oTidyBrowser is not defined

Как справедливо подмечено неизвестно кем неизвестно где: «Трудности нас закаляют, а мелочи добивают». Крайний раз такой противной мелочью для меня стала ошибка javascript oTidyBrowser is not defined, случайным образом появляющаяся при просмотре различных сайтов.


Значительную часть своего рабочего времени я провожу за разработкой фронт-энда и любые красные значки в строке состояния браузера неприятно раздражают нежный орган моего профессионального обоняния. Независимо от того, работаю я в данный момент, гуглю или читаю блоги. А добрая часть времени, проведенная с накрученными в канат яйцами нервами, разумеется, не лучшим образом сказывается на качестве труда и отдыха. Или отдыха и труда.


Ошибка oTidyBrowser is not defined – это глюк Tidy, входящего в состав дополнения для Mozilla Firefox HTML Validator. Поскольку разработчик так и не пофиксил эту неожиданную «фичу», то для решения проблемы ошибки Tidy придется воспользоваться анекдотичным приемом «после сборки обработать напильником».


Решение проблемы “oTidyBrowser is not defined”


Исходная статья на английском языке расположена здесь: Hackzilla.org - Firefox Addon: Html Validator


  1. Перво-наперво, нужно найти файл tidyBrowser.js
    Точного пути указать не получится, поскольку он зависит от имени пользователя, установленной операционной системы и сгенерированного профайла Firefox. Автор указывает такой путь:
    C:\Users\Dan\AppData\Roaming\Mozilla\Firefox\Profiles\vqy7rs08.default\extensions\{3b56bcc7-54e5-44a2-9b44-66c3ef58c13e}\chrome
    В общем случае, в Windows XP путь будет выглядеть примерно так:
    C:\Documents and Settings\Имя пользователя\Application Data\Mozilla\Firefox\Profiles\профайл Firefox\extensions\{3b56bcc7-54e5-44a2-9b44-66c3ef58c13e}\chrome\
  2. В папке chrome ты обнаружишь файл tidy.jar
    На самом деле это zip-файл. Скопируй его и переименуй в “tidy.zip”
  3. Открой полученный файл прямо в менеджере архивов. Например, – в WinRAR.
  4. Открой в редакторе файл “content/tidyBrowser.js”. Начиная со строки 220 ты найдешь следующий код:
    if( oTidyBrowser.bTopLoadBusy==false )
    {
    oTidyUtil.tidy.log( ‘<javascript>tidyEndDocumentLoadObserver’ );
    oTidyBrowser.bTopLoadBusy = true;
    try
    {
    // Validate the 1rst request
    oTidyBrowser.bIgnorePageShow = true;
    oTidyBrowser.validateFrame( window.content );
    // oTidyBrowser.validateCache( subject.document, true );

    // Process the events that fired during the 1rst one
    // ex: page with frames.
    var doc = oTidyBrowser.oEventQueue.pop();
    while( doc )
    {
    oTidyBrowser.validateCache( doc, true );
    doc = oTidyBrowser.oEventQueue.pop();
    }
    }
    catch(ex)
    {
    tidyShowExceptionInConsole( ex );
    }
    oTidyBrowser.bTopLoadBusy = false;
    }
    else
    {
    // Parallel events are placed in a event queue.
    oTidyBrowser.oEventQueue.push( event.originalTarget );
    }

    Тебе просто нужно добавить проверку условия когда oTidyBrowser не определен:
    if( !window.oTidyBrowser )
    {
    // Do nothing
    }
    else if( oTidyBrowser.bTopLoadBusy==false )
    {
    oTidyUtil.tidy.log( ‘<javascript>tidyEndDocumentLoadObserver’ );
    oTidyBrowser.bTopLoadBusy = true;
    try
    {
    // Validate the 1rst request
    oTidyBrowser.bIgnorePageShow = true;
    oTidyBrowser.validateFrame( window.content );
    // oTidyBrowser.validateCache( subject.document, true );

    // Process the events that fired during the 1rst one
    // ex: page with frames.
    var doc = oTidyBrowser.oEventQueue.pop();
    while( doc )
    {
    oTidyBrowser.validateCache( doc, true );
    doc = oTidyBrowser.oEventQueue.pop();
    }
    }
    catch(ex)
    {
    tidyShowExceptionInConsole( ex );
    }
    oTidyBrowser.bTopLoadBusy = false;
    }
    else
    {
    // Parallel events are placed in a event queue.
    oTidyBrowser.oEventQueue.push( event.originalTarget );
    }

  5. Сохрани измененный файл tidyBrowser.js обратно в tidy.zip
  6. Теперь тебе нужно закрыть Firefox, поскольку работающая программа блокирует файл “tidy.jar”
  7. Удали или скопируй в другое место старый “tidy.jar”
  8. Переименуй отредактированный “tidy.zip” в “tidy.jar”
  9. Теперь можешь запустить Firefox

Больше глюк с ошибкой “oTidyBrowser is not defined” тебя не побеспокоит.


Читать дальше »

вторник, 3 марта 2009 г.

Grabr облажался!

Сервис для веб-мастеров Grabr сегодня прилюдно обделался несказанно облажался.


Совет для блоггера, использующего Grabr, но ценящего свое время:
Никогда не используй предварительный просмотр статьи!
Подозреваю, не так много людей использует подобные функции при отправке статей. Но тем не менее предупрежу:


  • Эта функция все равно не работает;
  • Grabr воспринимает предпросмотр как отправку нового сообщения, о чем тебя с радостью уведомляет, когда ты действительно захочешь опубликовать статью:
    Пока ваша карма меньше 10, вы не можете добавлять более одной статьи в час. До следующего добавления осталось:59 минут 32 секунды
  • Так и не отправленная статья нигде не сохраняется. Поэтому, если ты все же захочешь ее отправить, спустя 59 минут 32 секунды, придется набирать все ручками. Или приучи себя использовать «дедовский» метод постинга, разработанный еще в древности для отправки сообщений на говнофорумы глючные сервисы. Попросту копируй свой пост перед отправкой. Либо в текстовый файл, либо в буфер обмена.

Блоггер! Будь бдителен! Даже если ты обычно не пользуешься функцией предварительного просмотра. Положи рядом с собой здоровенную линейку и хуячь себе по пальцам каждый раз едва рука потянется к «порочной кнопке».


А если бы ты нес патроны?!! © Гоблин


Читать дальше »

вторник, 13 января 2009 г.

Top-25 самых опасных ошибок программирования CWE/SANS

SANS

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

В понедельник группа из 35 уважаемых организаций, в число которых вошли Microsoft, Symantec, Министерство национальной безопасности США (DHS) и подразделение по защите информации Агентства национальной безопасности, опубликовала список из 25 самых серьезных ошибок, допускаемых при кодировании. Координаторами этой инициативы выступили SANS Institute и спонсируемый из федерального бюджета научно-исследовательский центр MITRE.

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


Недочеты выстроены в списке исходя из частоты упоминания и серьезности последствий для безопасности.

Две верхних строчки в рейтинге занимают недоработки, связанные с неподобающей проверкой вводимых значений и кодировкой вывода. В числе прочих перечислены ошибки в защите SQL-запросов и структуры веб-страниц, приводящие к SQL-инъекциям и уязвимостям межсайтового скриптинга. Упоминается также и об ошибках переполнения буфера и слишком подробных сообщениях о причинах возникновения сбоев. Ознакомиться с рейтингом можно на странице www.sans.org/top25.


Читать дальше »

среда, 17 декабря 2008 г.

MP-BIOS bug 8254 timer not connected to IO-APIC

UbuntuДа, уж. Кто еще раз мне скажет, что linux -- офигенно устойчивая система... И Ubuntu в-частности...
Вчера development-server после ребута намертво лёг с ошибкой MP-BIOS bug 8254 timer not connected to IO-APIC. Никакие пинки ему не помогали.
Сработал следующий трюк: «жесткий» стоп после первой строки сообщения об ошибке.
MP-BIOS bug 8254 timer not connected to IO-APIC

При следующем старте система запустилась. Читать дальше »

пятница, 21 ноября 2008 г.

Ошибка Internet Explorer: Операция прервана

Время от времени, особенно когда web-разработка вам начинает казаться на редкость простым и приятным делом, вы натыкаетесь на это:

Ошибка Microsoft Internet Explorer: Не удалось открыть узел... Операция прервана.
Error: Internet Explorer cannot open the Internet site. Operation aborted
IE Не удалось открыть узел. Операция прервана
В интернете вы скорее всего найдёте только одну причину, вызывающую эту ошибку. Видимо мне исключительно "повезло" -- я знаю целых 3 (три!).

1. Первая -- самая известная. Вы без труда найдёте её описание и решение в любом поисковике (я даже ссылки дам). Это ошибка DOM и JavaScript.

Это вызовет ошибку в IE


<html>
<head>
<script type="text/javascript">
function appendElementToBody() {
var span = document.createElement('span');
document.body.appendChild(span);
}
</script>
</head>
<body>
<table>
<tr>
<td>
<script type="text/javascript">
appendElementToBody();
</script>
</td>
</tr>
</table>
</body>
</html>

a) Дело в том, что вы не можете добавлять в элемент BODY из скрипта (javascript), который не является прямым потомком BODY;
b)Более того: вы не можете изменять родительский элемент из скрипта, являющегося его потомком.

Решение проблемы (фрагмент):


<body>
<table>
<tr>
<td>
...
</td>
</tr>
</table>
<script type="text/javascript">
appendElementToBody();
</script>
</body>

Это был первый случай. Два других не столь распространенныё, но описать их проще.
2. Wrong HTML code при использовании SSL
Причиной служит корявый HTML-код. Чаще всего наблюдается при защищенном соединении (по протоколу https://).
Решение: Перепроверьте, нет ли у вас «пересекающихся» элементов, все ли теги закрыты и т.п.

Третий случай совсем не тривиальный и довольно редкий
3. «Tabs in ERb views»
ХЗ, это уже просто «родной» глюк Ruby on Rails. Только вот один момент: иногда табы в видах .rhtml прокатывают. Их и не замечаешь пока не начнешь тестить страницу в IE. Опять-таки, чаще всего по https:. «Мистика», а бывает :).
Решение: не используйте символы табуляции в .rhtml

А вот и ссылки (только по первому случаю):
BUG: Error message when you visit a Web page or interact with a Web application in Internet Explorer: "Operation aborted"
Error: Internet Explorer cannot open the Internet site Operation aborted
Dealing with IE "Operation Aborted". Or, how to Crash IE


Еще по теме
Определить IE6 с помощью JavaScript 2
IE8 узнайте факты!
IE и параметр white-space:pre

Читать дальше »