На этой странице показаны все сообщения, самые новые сверху.

95 месяцев назад

Постоянная ссылка Vanav

Категории

Счётчик оставшихся символов для формы

Задача: сделать счётчики оставшихся символов для полей формы ограниченной длины, в частности <input type="text"> и TinyMCE.

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

Пример:


 

Итак, главная проблема такого рода скриптов — поймать событие изменения формы…

Читать дальше и 32 комментария

98 месяцев назад

Постоянная ссылка Vanav

DataSheet

При приходе вдохновления, я здесь подробнее о целях, миссии и видении блога. Пока хочу заметить, что это один из тематических блогов, главным является сайт vanav.com.ua.

Здесь я буду писать про IT, идеи, сравнения, анализ. Частично для себя, частично для тех, кому интересно.

54 комментария

103 месяца назад

Постоянная ссылка Vanav

Файлы

Сравнение скорости PDO, ADOdb, MDB2, Zend_Db, ADOdb Lite и DbSimple

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

  • PDO (часть PHP 5);
  • ADOdb 5 5.04a (25.03.2008);
  • MDB2 (часть PEAR, наследник и объединение PEAR DB и Metabase) 2.5.0b1 (15.03.2008);
  • Zend_Db 1.5.2 (15.05.2008);
  • ADOdb Lite 1.4.2 (12.01.2007);
  • DbSimple v2 R226 SVN (17.09.2007).

Версии — последние на текущий момент. Приступим.

Читать дальше и 538 комментариев

126 месяцев назад

Постоянная ссылка Vanav

Категории

MS SQL и ограничение длины строк

На собственном опыте обнаружил странное поведение своего MS SQL сервера. Если в таблицу добавляется значение типа (N)VARCHAR или (N)CHAR, и это значение длиннее ограничения, то текст не обрезался, транзакция не проходила, и IIS вываливался с ошибкой 500, чем вгонял в недоумение админов.

Server: Msg 8152, Level 16, State 9, Line 1
String or binary data would be truncated.
The statement has been terminated.

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

Если её выключить, то строки будут сами обрезаться, и запросы будут успешно исполняться.

Есть два способа отключения:

  1. Выполнить в начале запрос: SET ANSI_WARNINGS OFF
  2. Для всех соединений одновременно, используя хранимую процедуру: sp_dboption 'DatabaseName', 'ANSI warnings', 'FALSE'.
31 комментарий
Постоянная ссылка Vanav

Простейший AJAX с большой совместимостью

Итак, мы хотим послать небольшую строчку на сервер, получить от сервера ответ и показать пользователю. Что-то похожее на AJAX, но как можно проще, без килобайтных библиотек, вопросов совместимости и изучения XML-парсеров разных браузеров. Более того, хотелось бы чтобы способ был совместим с как можно большим числом браузеров, и занял не больше 10 минут на написание с нуля. Наше решение будет совместимо с IE5.0+, Mozilla 1.7+, FireFox 1.0+ и Opera 7.3+.

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

Итак, начнём с кода.

Страница, с которой происходит запрос. Здесь расположена форма, которую заполняет пользователь:

default.asp:

<script type="text/javascript">
  function test(email) {
    href = 'tester.asp?email=' + encodeURI(document.getElementById('in_email').value);
    span = document.body.appendChild(document.createElement("SPAN"));
    span.style.display = 'none';
    span.innerHTML = 'text<s'+'cript></'+'script>';
    setTimeout(function() {
      var s = span.getElementsByTagName("script")[0];
      s.language = "JavaScript";
      if (s.setAttribute)
        s.setAttribute('src', href); else
        s.src = href;
    }, 10);
  }
</script>

<input type="text" id="in_email" value="test@example.com" />

<a href="javascript:test()">Тест</a>
<div id="result"></div>

Скрипт, который получает своим аргументом проверяемый адрес, и отвечает посредством создания JavaScript кода:

tester.asp:

<%@LANGUAGE = JScript %>
<%
  var email = decodeURI(Request.QueryString("email"));
  // Здесь можно добавить проверку на уникальность адреса в базе пользователей
  var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  if (filter.test(email))
    msg = "Правильный адрес.";
  else
    msg = "Неправильный адрес!";
  Response.Write('document.getElementById("result").innerHTML = "' + msg + '"');
%>

Обратим внимание, что первый скрипт может быть простым HTML, без ASP или PHP. Второй же скрипт может быть на любом серверном языке ASP или PHP, но возвращать в браузер должен синтаксически правильный JavaScript. Собственно, послеполучения ответа браузер этот JavaScript и будет исполнять.

В нашем примере после нажатия кнопки создаётся новый невидимый элемент span в конце документа, в него добавляется script и источником JS-скрипта ставится ASP или PHP скрипт на сервере. Этому скрипту на сервере передаётся интересующий нас аргумент, он его проверяет, и выдаёт ответ в виде правильного JavaScript. Браузер не замечает, что работал скрипт на сервере, и получает сразу правильный JavaScript, который тут же и исполняет.

Итак, применять это можно в тех случаях, когда нужен простой и быстрый AJAX, в то же время максимально совместимый. Собственно, простота и совместимость — его главное преимущество перед XMLRequest.

Начальная идея — dklab, за что огромное спасибо.

5 комментариев

129 месяцев назад

Постоянная ссылка Vanav

Подтверждение действий

Пользователь любит кликать. Если сделать кнопку с большой надписью "Не нажимать!", она будет нажата первой.

Поэтому на критические действия вроде удаления файлов нужно ставить подтверждения. Рассмотрим, как это можно проще всего сделать на JavaScript:


<a href="/post63/delete"
  onclick="return confirm('Сообщение &laquo;HelloWorld&raquo; будет удалено. Удалить?')">
  Удалить</a>

confirm() выведет стандартное диалоговое окно Windows, на котором на будет две кнопки: OK и Отмена (язык надписей соответствует языку Windows).

В сообщении чётко указывается два момента:

  1. что именно будет удалено. Пользователь должен проверить, то ли он на самом деле удаляет;
  2. чёткий короткий вопрос, который подразумевает однозначный ответ.

Если JavaScript будет отключён у пользователя, ссылка всё-равно будет работать, правда без подтверждения. Но поскольку процент таких пользователей мал, это допустимо.

11 комментариев
Постоянная ссылка Vanav

Windows Mobile Edition 2005 и борьба с ней

С такой же радостью откатился обратно.

Во-первых, заметно увеличелись тормоза и (по отзывам) уменьшилось время работы от аккумулятора, а во-вторых оно умудрялось спонтанно зависать и не включаться без софт-ресета. Возможно не подружилось с единственной установленной программой (Pocket Player), но даже одного из этих условий достаточно, чтобы считать эксперимент удавшимся, но не более чем экспериментом.

Вывод: ждём исправления ошибок и улучшения совместимости, а также, возможно, более мощной машинки. Хотя какой бы мощность не была, уменьшать скорость одной только новой версией ОС — это занятие на мазохиста апгрейдинговых технологий. Так что пока явных плюсов WM5 не показала. Вот когда появится софт только под WM5, придётся задуматься...

4 комментария
Постоянная ссылка Vanav

Windows Mobile Edition 2005 и борьба с ней

Наконец-то созрел для обновления своей машинки. Всё прошло за 10 минут, гладко и безболезненно. Но были некоторые проблемы:

  1. ActiveSync вообще отказался видеть устройство. Решение было в том, что отныне PocketPC использует DHCP для получения своего IP, и поэтому нужно проверить, получило устройство IP или нет (ipconfig /all), и если нет — включить сервис DHCP (который был у меня отключён как до сих пор неиспользуемый).
  2. ActiveSync настолькой системы магическим образом переключился в настоящий режим 4.1 (до этого он использовал устаревший код 3.8), при этом у него исчезли настройки периода синхронизации, и он начал синхронизировать устройства каждые 5 минут.

Пока приличного решения не существует, но есть удобные сторонние программки для отключения ActiveSync. В частности рекомендую ActiveSyncToggle, которая умеет работать с коммандной строкой и грамотно отключает все ипостасии ActiveSync.

В общем впечатления от ОС пока положительные: давно мечтал управлять всем при помощи кнопок, а две совтовые клавиши, отображаемые в WM5, этому очень способствуют.

PS. Да, это первый пост, вы ничего не пропустили: здравствуйте.

6 комментариев