вторник, 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 листов.