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

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

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

Категории

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

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

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

Пример:


 

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

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

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

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

DataSheet

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

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

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

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

Постоянная ссылка 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).

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

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

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

Постоянная ссылка 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'.
59 комментариев
Постоянная ссылка 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, за что огромное спасибо.

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

13 комментариев
Постоянная ссылка 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. Да, это первый пост, вы ничего не пропустили: здравствуйте.

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