HTML5 data-* attributes and jQuery.data() in examples

HTML5 data-* attributes and jQuery.data() в примерах:
1) загруженная страница содержит

<input id="test" type="text" data-data1="qwer" data-data2-test="asdf" value="test">


2) на Vanilla JS
document.getElementById("test").dataset.data1
"qwer"
document.getElementById("test").dataset.data2-test
NaN
document.getElementById("test").dataset.data2Test
"asdf"

-- для IE 10- dataset не доступен

>> document.getElementById("test").dataset.data1 
"Не удалось получить свойство "data1" ссылки, значение которой не определено или является NULL" 
>> document.getElementById("test").getAttribute("data-data1") 
"qwer" 
>> document.getElementById("test").getAttribute("data-data2-test") 
"asdf" 
используем jQuery для чтения, все универсально, и главное, в IE тоже работает как надо
$('#test').data('data1')
"qwer"
$('#test').data('data2-test')
"asdf"
$('#test').data('data2Test')
"asdf"
а сейчас попробуем сохранить данные используя jQuery.data(), и более того сохраним объект содержащий функцию
видим результат, с помощью jQuery можем легко воспользоваться сохраненным объектом
но эти данные не появляются в dataset, они сохраняются в кэше jQuery, при первой же попытке получить значение data элемента, jQuery создаст свойство в DOM структуре этого элемента «jQuery + $.now()» и присвоит ему уникальный идентификатор (или ранее), который и будет использоваться как ключ для доступа к кэшу, а так же, скопирует атрибуты data в свой кэш.
$('#test').data('data3', {tt: 10, fn1: function(n){ return this.tt * n + n } })

$('#test').data('data3').fn1(5)
55
document.getElementById("test").dataset.data3
undefined
jQuery1113024019371896630481: 63

jQuery.cache[63]
Object {data: Object, parsedAttrs: true}
jQuery.cache[63].data
Object {data2Test: "asdf", data1: "qwer", data3: Object}
$('#test').data()
Object {data2Test: "asdf", data1: "qwer"}
$.cache[63].data
Object {data2Test: "asdf", data1: "qwer"}
$('#test').attr('data-data1', 'qazwsx')
[<input id=​"test" type=​"text" data-data1=​"qazwsx" data-data2-test=​"asdf" value=​"test">​]
$('#test').data()
Object {data2Test: "asdf", data1: "qwer"}
$('#test')[0].dataset
DOMStringMap {data1: "qazwsx", data2Test: "asdf"}
$('#test').attr('data-data3', 'qazwsx')
[<input id=​"test" type=​"text" data-data1=​"qazwsx" data-data2-test=​"asdf" value=​"test" data-data3=​"qazwsx">​]
$('#test')[0].dataset
DOMStringMap {data1: "qazwsx", data2Test: "asdf", data3: "qazwsx"}
$('#test').data()
Object {data2Test: "asdf", data1: "qwer"}
$('#test').data('data1', 123)
[<input id=​"test" type=​"text" data-data1=​"qazwsx" data-data2-test=​"asdf" value=​"test" data-data3=​"qazwsx">​]
$('#test').data()
Object {data2Test: "asdf", data1: 123}
$('#test')[0].dataset
DOMStringMap {data1: "qazwsx", data2Test: "asdf", data3: "qazwsx"}
$('#test')[0].dataset.data1 = 777
777
$('#test')[0].dataset
DOMStringMap {data1: "777", data2Test: "asdf", data3: "qazwsx"}
$('#test').data()
Object {data2Test: "asdf", data1: 123}
Итоги:
  1. data атрибуты загружаются в свойство attributes элемента
  2. если браузер поддерживает DOMStringMap, то в свойство dataset дублируются все атрибуты data? имена приводятся в верблюжью нотацию, если в имени присутствуют «-«
  3. jQuery сохраняет копию data атрибутов и более их не обновляет, ни в одну из сторон, jQuery использует javascript для хранения данных, а не DOM, вот тут то плагины jQuery и хранят свои экземпляры

Visual C++ 2003 (7.1) Redistributable Package (x86)

Распространяемого пакета для Visual C++ 2003 (7.1) не существует, и периодически приходится искать msvcp71.dll, msvcr71.dll и тд Например при использовании старого Oracle Client instantclient-basic-win32
Где взять, качаем тут Microsoft® Visual Studio® .NET™ 2003 Service Pack 1 или тут Если ХаЦкЕрОв не боязно
конвертация VS7.1sp1-KB918007-X86.exe /Xp:VS71.msi
заходим архиватором VS71.msi, в корне есть файл PCW_CAB_VS в него тоже архиватором и добираемся до
FL_msvcp71_dll_____X86.3643236F_FC70_11D3_A536_0090278A1BB8
FL_msvcr71_dll_____X86.3643236F_FC70_11D3_A536_0090278A1BB8
переименовываем, перемещаем в папку со старым приложением

Excel, бага, не фича

Давеча обратился ко мне пользователь екселя, я же программист должен разобраться.
Пользователь задала фильтр в одном из столбцов с датами, формат всех ячеек в столбце — дата, но вот большая часть дат в фильтре группируются по годам и месяцам, но не все, есть исключения.
Этот файл «ходил по рукам» как и в какой момент такое получается не знаю, в скринах-солюшенах воспроизвел копируя данные из тех самых файлов.
excel1 excel2 excel3 excel4
Решение такое, копируем пустую ячейку в буфер обмена, выделяем диапазон с ячейками дат и делаем специальную вставку, только значения со сложением, и вуаля, фильтр сгруппировался.

Частичный дамп

После импорта дампа выполненного в режиме экспорта схемы, нескольких схем и с взаимодействием между ними, приходится прибегать к массовой раздаче раздать привилегии, бездумно и как-то так
select 'GRANT EXECUTE ON '||owner||'.'||object_name||' TO TTX_EPP;'
from all_objects
where owner = 'NCI'
and object_type='FUNCTION';

select 'GRANT SELECT ON '||owner||'.'||object_name||' TO TTX_EPPW;'
from all_objects
where owner = 'TTX_EPP'
and object_type in ('TABLE', 'VIEW');

ORA-01652: unable to extend temp segment by 128 in tablespace TEMP

Достался старый сервер Oracle 9, с такой проблемой «ORA-01652: unable to extend temp segment by 128 in tablespace TEMP» Для изменения параметров табличного пространства пересоздал его, в момент пересоздания пользователей использующих его не должно быть, иначе получим «ORA-25152: TEMPFILE cannot be dropped at this time»
SELECT tablespace_name, file_name, bytes FROM dba_temp_files WHERE tablespace_name = 'TEMP';
ALTER DATABASE TEMPFILE '/u02/oradata/orcl/temp01.dbf' DROP INCLUDING DATAFILES;
ALTER TABLESPACE temp ADD TEMPFILE '/u02/oradata/orcl/temp01.dbf' SIZE 128m AUTOEXTEND ON NEXT 64m MAXSIZE UNLIMITED;
Можно было просто добавить второй файл к пространству.