вторник, 6 апреля 2010 г.

html select box выделить все опции

Допустим у нас есть multiple select box с большим количеством options, ну скажем 450. Надо выделить все.
Рассмотрим 2 способа.
Решение 1. В лоб
selectAll_method1 = function(selectBoxId, selected) {
    var selectBox = document.getElementById(selectBoxId);
    for (var i=0; i < selectBox.options.length; i++) {
         selectBox.options[i].selected = selected;
    }
}



В IE 8 это происходит очень долго. Мы визуально видим как браузер пробегается по опциям при этом проматывая скролл. Решение 2. Пересоздание опций.
selectAll_method2 = function(selectBoxId, selected) {
    var selectBox = document.getElementById(selectBoxId);
    var optionsCopy = new Array();
    for (var i=0; i < selectBox.options.length; i++) {
        var option = selectBox.options[i];
        optionsCopy[i] = new Option(option.text,option.value,selected,selected);
    }
    selectBox.options.length = 0;
    for (var i=0; i < optionsCopy.length; i++) {
        selectBox.options[i] = optionsCopy[i];
    }
}



Странно, но пересоздание опций работает значительно быстрее. Сравним?
IE 7IE 8FF 3.6Chrome 4.1
Метод 1900160011707
Метод 2270300460450

Очевидно что в IE8 есть досадный баг связаный с выделением. Хром приятно порадовал.
Плюсы метода 2.
1. Почти везде быстрее, кроме хрома
2. Визуально приятнее так как селект бокс не прокручивается вниз.
Минусы метода 2.
1. Пересоздание не копируют свойства опций, например, class. При необходимости метод можна расширить, правда не известно как это отобразится на скорости его выполнения.
2. Пересоздание будет происходить всегда. В случае первого метода, если все опции уже выбраны метод исполняется быстро, так как менять состояние опций не приходится.
3. Снятие выделения методом 1 везде быстрее
4. Это хак.

Итого: для выделения юзаем метод 2, для снятия выделения - метод 1.

среда, 31 марта 2010 г.

Timetracker и iMacros. Борьба с бюрократией

Если надо заполнить тайм трекер для работодателя за месяц. Создаем файл timetracker.csv:

01,08:00,"Manual trip input: Night shifts and client-side validation"
02,08:00,"Manual Trip Input: Button Added: 'Go to Trip Report'"
03,02:00,"Manual Trip Input: Update validation"
03,06:00,"Trip Correction: Fixing bug with paging"
...
31,08:00,"Delevery end: deploy, testing, fixing"
ложим его куда надо
и запускаем iMacros скрипт

'TLW
TAG POS=1 TYPE=SELECT FORM=NAME:mytimeForm ATTR=ID:project CONTENT=%19
'Correction
TAG POS=1 TYPE=SELECT FORM=NAME:mytimeForm ATTR=ID:activity CONTENT=%63

CMDLINE !DATASOURCE timetracker.csv
SET !DATASOURCE_COLUMNS 3
SET !LOOP 1
SET !DATASOURCE_LINE {{!LOOP}}

'Pick day 01
TAG POS=1 TYPE=A ATTR=TXT:{{!COL1}}
'Duration 8
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:mytimeForm ATTR=ID:duration CONTENT={{!COL2}}
'Put text
TAG POS=1 TYPE=TEXTAREA FORM=NAME:mytimeForm ATTR=ID:note CONTENT={{!COL3}}
'Some JS executes about 2 seconds :)
WAIT SECONDS=2
'Submit
TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:mytimeForm ATTR=ID:btmytime

Усьо!

Что мог сделать лучше: подумать как информацию из дискрипшна коммита автоматом постить в тайм трекер

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

Автоматический Upload большого количества файлов с помощью iMacros

Задача: закачать на сайт фотогалерею из 15 папок по 20 фото в каждой.
Проблема: 1) движок не понимает имена файлов содержащие кирилицу
2) Для закачки используется стандартный input type=file который разрешает добавлять только один файл за раз. Для 300 файлов придется сделать около 1000 кликов

Решение проблемы 1: Переименовать все файлы с папке с помощью bat
Имя файла renameTo.bat
cls
@echo
set /a counter = 0
for /r %%i in (*.jpg) do (
    call :rename "%%i" %1

)
goto:eof

:rename
set /a counter += 1
rename %1 %2%counter%.jpg
goto:eof
Теперь достаточно запустить
renameTo.bat birthday
и все *.jpg будуть иметь имена birthday1.jpg, birthday2.jpg и т.д.


Решение проблемы 2: закачка множества файлов с использованием плагина iMacros под FireFox.

Сначала сгенерируем файл источника для iMacros. Это будет опять bat-ник.
Назовем его filesToList.bat
for /r %%i in (*.jpg) do (echo "%%i" >> files.csv)

Запускаем без параметров
filesToList.bat
Он создаст файл со списком всех jpg-ов в папке. Обратите внимение - в кавычках и с полными путями.
Например:
"C:\Documents and Settings\Larry\Рабочий стол\photo\birthday1.jpg"
"C:\Documents and Settings\Larry\Рабочий стол\photo\birthday2.jpg"
"C:\Documents and Settings\Larry\Рабочий стол\photo\birthday3.jpg"
"C:\Documents and Settings\Larry\Рабочий стол\photo\birthday4.jpg"
"C:\Documents and Settings\Larry\Рабочий стол\photo\birthday5.jpg"
"C:\Documents and Settings\Larry\Рабочий стол\photo\birthday6.jpg"
Теперь основное - сам макрос. Во первых он будет использовать наш сгенерированый список файлов files.csv. Этот файл надо поместить в папку Datasources, у меня она здесь C:\Documents and Settings\Larry\Мои документы\iMacros\Datasources. Конфигурируется настройками аддона

Теперь сам макрос. Думаю разберетесь куда его вставить
CMDLINE !DATASOURCE files.csv
SET !DATASOURCE_COLUMNS 1
SET !LOOP 1
SET !DATASOURCE_LINE {{!LOOP}}
TAG POS=1 TYPE=INPUT:FILE ATTR=ID:edit-upload CONTENT={{!COL1}}
TAG POS=1 TYPE=INPUT:SUBMIT ATTR=ID:edit-attach
В моем случае input имеет id=edit-upload, а кнопка submit имеет id=edit-attach.
Скрипт последовательно в цикле читает строчки из файла, вставляет в инпут и нажимает сабмит. Вы ждете и смотрите. Ах да, один мутный момент, почему-то надо задавать количество итераций (то-ли он не умеет определить количество строк в datasource, то ли я) и нажимать Play(Loop).
Надеюсь это кому-то сэкономит время, как сэкономило мне.
Что можно было сделать лучше:
1. В скрипт создания списка файлов добавить copy файл в нужную директорию с rewrite-ом.
2. Разобратся с количеством итераций скрипта - чтоб-не задавать их в ручную
3. Расширить скрипт аплоуда что-б он сам создавал фотогалерею (15 раз) по заданым параметрам с файла.
4. Даный скрипт я запускал 15 раз - в идеале можно создать 1 скрипт, нажать плей и уйти на перекур.
5. Использовать вместо (или вместе с) bat какой-то умный язык программирования, что-б еще и пережать все файлы к веб размеру.
6. Что-то еще

пятница, 26 марта 2010 г.

Еще раз о времени, деньгах, свободе, здоровье и других ресурсах личности, а также о двух ее половинках

 Стянуто с Хабра http://habrahabr.ru/blogs/arbeit/88976/
А также рекомендуемые автором источники мудрости:


Тема весьма обширная. Для затравки могу порекомендовать следующее (список далеко не полный):

1) Аудиоматериалы datnews.ru/infoproduct/ — эти продукты когда-то были платными, но год назад автор проникся принципом information wants to be free и выложил их в открытый доступ. Автор ведет ЖЖ rainbow-lynx.livejournal.com

2) Также нельзя не отметить Дэвида Аллена с его методологией GTD. [Я лично только начинаю в это вкапываться, но знаю людей, успешно это дело внедривших и использующих.] Можно почитать, например, у Колесника: kolesnik.ru/2007/gtd/ или у Бирюкова: sergeybiryukov.ru/2006/04/kak-razobratsya-s-delami-gtd-po-russki/

3) Русскоязычные гуру тайм-менеджмента (гугл: Глеб Архангельский, Вася Кислый етс.)

4) Не всеми еще оцененное наследие Г. С. Альтшуллера: www.altshuller.ru/head.asp (ключевые слова ТРИЗ, ЖСТЛ). Я не знаю еще человека, который бы заявлял, что он это полностью освоил.

5) Фишки, помогающие оптимизировать мышление: Mind Maps (гуглите и обрящете; русское название «диаграммы связей» используются редко). Сам использую Xmind, иногда Freemind.

6) Общелайфхакерские блоги:
lifehack.ru/
selfhacker.ru/
lifehacker.ru/
life.xakep.ru/

7) Психологическая википедия: www.psychologos.ru/

8) Финансовая грамотность: www.kraynov.com/ и его сервис www.4konverta.com/

9) Об образовании 2.0 кое-что пишет metaver.ru/ (ЖЖ: sartac.livejournal.com/). В этой категории больше всего полезного материала почему-то представлено в виде видеороликов. Вообще, ресурсов, посвященных именно выработке грамотной самообразовательной стратегии в 21 веке, мною пока не обнаружено. Здесь все еще непаханое поле.

10) Блогов о здоровье имеется множество, польза от них варьируется. ЖЖ progenes.livejournal.com принадлежит человеку, придерживающемуся научного подхода (в частности, к истерии вокруг ГМО и т. п. х.); в аванпосте содержатся ссылки на других проверенных блогеров, пишущих на сходную тематику. О перспективах увеличения продолжительности жизни пишут m-batin.livejournal.com и (реже) m-konovalenko.livejournal.com.

11) О фрилансе более-менее актуальные «фишки» на английском (http://freelanceswitch.com/ и freelancefolder.com/). Сама по себе эта тема постепенно теряет экзотический имидж и вливается в категорию общих вопросов бизнеса и карьеры. Основная проблема, из-за которой тяжело читать русскоязычные фрилансерские ресурсы — пережевывание одних и тех же азов. Этим грешат и некоторые блогеры-предприниматели, рассказывающие о своей жизни «после офиса» или «вместо вуза». Часто подобные авторы выдыхаются, и я удаляю их из закладок/RSS. Вообще, польза от чтения индивидуальных блогов претендентов на звание «гуру» часто очень сомнительна.

12) Блог о распространенных ошибках мышления — my-tribune.blogspot.com/. В английской википедии имеется целый ряд статей о логических уловках (http://en.wikipedia.org/wiki/Fallacy), по которым информацию на русском найти сложновато. Также гугл. «критическое мышление», «системное мышление». По последней теме еще 2 года назад существовал замечательный ресурс sysmyshlenie.ru, который впоследствии, к сожалению, пропал из онлайна.

13) Самая главная истина искусства саморазвития: здесь нет обязательных программ и готовых алгоритмов. Ищите свое и не ограничивайтесь этим или каким-либо другим списком на 8 листов.

понедельник, 22 февраля 2010 г.

Буковель

Только-что оттуда. Неужели сезон закрыт? Я тут сохраню некоторую статистику - что-б обработать ее потом. Мне интересна моя максимальная и средняя скорость на спусках.

ВитягДата/часСпускЗалишок
Витяг 1R21.02.2010 18:15:0902
Витяг 2R21.02.2010 18:03:3402
Витяг 1R21.02.2010 17:53:2802
Витяг 1R21.02.2010 16:44:2902
Витяг 2R21.02.2010 16:33:3602
Витяг 821.02.2010 16:23:3202
Витяг 1121.02.2010 16:13:0502
Витяг 1121.02.2010 16:02:1002
Витяг 1621.02.2010 15:51:3202
Витяг 1121.02.2010 15:43:0202
Витяг 2221.02.2010 15:32:4702
Витяг 2221.02.2010 15:26:0802
Витяг 2221.02.2010 15:19:1802
Витяг 321.02.2010 15:08:1402
Витяг 1321.02.2010 14:58:1802
Витяг 1421.02.2010 14:40:3002
Витяг 1521.02.2010 14:16:2602
Витяг 1521.02.2010 13:55:0102
Витяг 1521.02.2010 13:40:1202
Витяг 1621.02.2010 13:24:4302
Витяг 1621.02.2010 13:15:4702
Витяг 1221.02.2010 13:01:3802
Витяг 521.02.2010 12:52:3002
Витяг 521.02.2010 12:39:2602
Витяг 1R21.02.2010 12:26:1312
Витяг 2R05.02.2010 18:08:5303
Витяг 2R05.02.2010 17:56:3003
Витяг 1R05.02.2010 17:46:4503
Витяг 1R05.02.2010 17:36:0903
Витяг 2R05.02.2010 17:22:1103
Витяг 2R05.02.2010 17:10:1603
Витяг 1R05.02.2010 16:59:0703
Витяг 1R05.02.2010 15:48:2903
Витяг 1R05.02.2010 15:38:5603
Витяг 1R05.02.2010 15:28:5703
Витяг 1R05.02.2010 15:18:4703
Витяг 2R05.02.2010 15:06:5303
Витяг 805.02.2010 14:57:0603
Витяг 1505.02.2010 14:43:0003
Витяг 1405.02.2010 14:15:0803
Витяг 1505.02.2010 13:56:5603
Витяг 1505.02.2010 13:42:2603
Витяг 1505.02.2010 13:28:2803
Витяг 1505.02.2010 13:16:2803
Витяг 1505.02.2010 13:04:0003
Витяг 1505.02.2010 12:51:4403
Витяг 1105.02.2010 12:40:3103
Витяг 1605.02.2010 12:29:3103
Витяг 1605.02.2010 12:19:5703
Витяг 1605.02.2010 12:09:2303
Витяг 1605.02.2010 12:00:0003
Витяг 1205.02.2010 11:45:5903
Витяг 1205.02.2010 11:32:2903
Витяг 505.02.2010 11:18:5903
Витяг 1R05.02.2010 10:59:3503
Витяг 1R05.02.2010 10:46:1113
Витяг 2R30.01.2010 17:44:2704
Витяг 2R30.01.2010 17:30:5204
Витяг 2R30.01.2010 17:17:4504
Витяг 1R30.01.2010 17:05:2104
Витяг 1R30.01.2010 16:55:1504
Витяг 2R30.01.2010 16:42:2004
Витяг 2R30.01.2010 16:25:5204
Витяг 2R30.01.2010 16:11:1404
Витяг 1530.01.2010 14:56:5404
Витяг 530.01.2010 14:35:4304
Витяг 530.01.2010 14:12:0004
Витяг 1R30.01.2010 13:52:3204
Витяг 1R30.01.2010 13:42:4704
Витяг 1R30.01.2010 13:32:3804
Витяг 2R30.01.2010 13:18:4904
Витяг 1230.01.2010 12:57:3304
Витяг 530.01.2010 12:46:3004
Витяг 830.01.2010 12:31:4404
Витяг 1130.01.2010 12:15:4404
Витяг 1130.01.2010 12:09:3404
Витяг 830.01.2010 11:53:3604
Витяг 2230.01.2010 11:38:1804
Витяг 2230.01.2010 11:28:4204
Витяг 1330.01.2010 11:20:1704
Витяг 1530.01.2010 11:01:5604
Витяг 1430.01.2010 10:47:1714

суббота, 20 февраля 2010 г.

У меня был очень продуктивный день. Сейчас 1:09 но оставить все и просто уснуть - невозможно. Столько всего в оперативке что необходимо это куда-то выгрузить. Ведь завтра будет новый день.

Начну с конца, рефакторить буду потом, екстрактить другие посты и методы.
Мультик Up. У героя все как-то не было времени на осуществление главной мечты, он дождался критической точки - дальше только скука и смерть. Безысходность заставила круто все изменить. Вверх! А если бы он начал раньше .. сколько всего могло-бы произойти. Люблю тему 3D, 4D и т.D. Так вот крутимся мы на планете, 3-х мерные существа по 2-х мерной плоскости и никак не откроем это заветное Вверх. Если предположить что мы 4х мерные существа, а это так и есть, то 4-й уровень для нас открывается вот в такие моменты - тогда и прошлое и будущее сходится в одном моменте - emergency of "now". Надо чаще поднимать голову вверх, туда, к 4-му.

Добавилась еще одна мечта идиота - летать!

И еще одна - удивлять.

Отмотаем обратно. Санек, что за чудесный человек в моей жизни. О чем мы только не говорили сегодня. Запомнилось "что ты уже пробовал? попробуй другое - потом сравни. Ошибайся!". А еще успехи его социализаци не могут не восхищать. А еще ХР, а еще посты эти все, аналогии которые он генерит, вопросы которые он задает, мелочи которые замечает.

Сегодня сформулировались мои цели - этому отдельный пост. Я всегда чего-то жду, какого-то момента. как тот старик с мультика.

Сегодня осилил офигенский таск. 21 test-case каждый из которых есть user-story. Я переоткрываю ТДД. Писал сначала тест, потом код, опять тест, опять код. Офигенный драйв, офигенная продуктивность, как следствие. Сказалось наверно еще то что я немного засиделся на презентейшне. А тут все новое, головоломки, идеи и реализации. Целый мир ХР и я на пороге.
Раньше я бы подходил к этому таску иначе - много бумаги, много случаев в голове, пытался бы все охватить, а потом за раз бы все заимплементил, нашел кучу багов. Ах да, тестировал бы через скрин. Ужас! Думаю ушло бы времени раза в 3 больше. Но! первый код был бы лучше, продуманее чем то что у меня получилось после того как 21 тест загорелся зеленым. Сейчас предстоит порефакторить. Интересный вопрос у меня возник. С помошью ТДД может родится действительно красивое решение, на уровне с класическими - пузырьковой сортировки, или обход дерева или синтаксический анализатор. Кажется что для этого требуется больше науки и дальновидности что-ли. Попробую обязательно.

Так, к слову, кто из бывших мат-факовцев помнит чему равны корни квадратного уравнения? Возьмите листочик и просто запишите ..... ааа стоп, так не чесно ... не вывести а выписать сходу. Как-то я соскучился по науке. Говорят что все большие открытия в математике делают люди в каком-то ограниченом вековом диапазоне - молодежь короче. Ровесники.

Надо написать пост о моих валидационных граматиках, с картинками.

А еще о разных приколах с ИЕ.

Ну все пока, спать!