Как суммировать найденные значения в таблицах Google?

В Google Calc (и в MS Excel) есть функция VLOOKUP, позволяющая искать нужную строку и выводить соответствующий ей параметр:

=VLOOKUP("Строка поиска";диапазон;номер_столбца;сортировка)

Справку по функции можно найти здесь.

Пример:

=VLOOKUP("Трава";A1:B5;2;FALSE)


Эта формула позволяет найти в таблице покупок нужный товар в первом столбце диапазона и вывести его цену из второго столбца диапазона.

Но что делать, если мы больше одного раза покупали один товар, и хотим вывести сумму всех покупок этого товара? Функция VLOOKUP в паре с функцией SUM будет выводит первое найденное значение:

=SUM(VLOOKUP("Трава";A1:B5;2;FALSE))


Вместо этого нужно пользоваться такой конструкцией:

=SUM(IFERROR(FILTER(B1:B6; SEARCH("Трава";A1:A6));0))


Здесь мы:

  • ищем (SEARCH) товар в первом диапазоне;
  • отфильтровываем (FILTER) из второго диапазона те значения, которые соответствуют найденным значениям;
  • игнорируем ошибочные значения (IFERROR(…; 0));
  • складываем (SUM) полученные значения.

Без использования SUM выводятся все значения цены в виде списка.

Склейка VOB файлов в один

Зачем перекодировать DVD в какие-то другие форматы, если можно просто склеить видеофайлы в один?
В командной строке Windows это делается так:

:: Назначаем выходной файл
SET OUT=output.VOB
:: Создаём пустой выходной файл
copy nul %OUT%
:: Ключ /B означает бинарный режим, без него не заработает
FOR %I IN (*.VOB) DO copy /B %OUT% + %I %OUT%

Вместо * могут быть другие подстановочные символы, формирующие ваше условие.

В Linux это делается так:

for a in *.VOB
do
cat "$a" >> output.VOB
done

WordPress: искажение кода в блоке с подсветкой синтаксиса

Столкнулся с неприятной ситуацией, настраивая WordPress. Блоки, в которых выводится исходный код, отображались по-разному в самом посте и на главной странице. Причём отображение касалось не только внешнего вида. Искажался сам код. А это уже серьёзнее, т.к. могло ввести в заблуждение читателей. Сразу скажу: галочка «Параметры → Написание → WordPress должен исправлять некорректный XHTML-код автоматически» у меня снята. Читать далее WordPress: искажение кода в блоке с подсветкой синтаксиса

Google Docs: текущий курс валюты

Текущий курс валюты (в примере — курс доллара ЦБ РФ) можно получить с помощью следующей функции:

=IMPORTXML("http://www.cbr.ru/scripts/XML_daily.asp"; "//ValCurs/Valute[CharCode=""USD""]/Value")

То же самое на любую дату:

=IMPORTXML("http://www.cbr.ru/scripts/XML_daily.asp?date_req=01/01/2011"; "//ValCurs/Valute[CharCode=""USD""]/Value")

Дополнение от 7 янв. 2015:
Спасибо Илье Кочеткову за упрощение формулы. Старый вариант под катом. Возможно, кому-то пригодятся и решения из него. А можно даже ещё проще, т.к. буквенный код валюты уникален:
=IMPORTXML("http://www.cbr.ru/scripts/XML_daily.asp"; "//*[*=""USD""]/Value")
Спасибо Михаилу.
Читать далее Google Docs: текущий курс валюты

Монтирование NTFS во FreeBSD

В режиме чтения и записи, без проблем с кодировкой:

ntfs-3g -o rw,locale=ru_RU.UTF-8 /dev/ad10s1 /mnt/ntfs/

Для этого нужно сначала установить fusefs-ntfs.
После установки прописываем в rc.conf строку:

fusefs_enable="YES"

Без перезагрузки можно запустить командой:

/usr/local/etc/rc.d/fusefs start

Проверяем, загружен ли модуль:

kldstat | grep fuse.ko

По материалам раз и два. Если что-то не работает — ищем там.

Пароль mysql в командной строке

Чтобы безопасно не интерактивно передавать пароль (а попутно и другие данные) в mysql, нужно поступить так.

  1. Создаём файл в недоступной по http директории; в примере назовём его def.cnf
  2. Добавляем в него такие строки:
    [client]
    user = имя_пользователя
    password = пароль
    host = хост_бд
    [mysql]
    database = имя_бд

    (Можно дополнить файл и другими директивами.)

  3. Даём файлу минимальные права, например 400 или 600.
  4. Используем вместо такой записи
    mysql --host=хост_бд \
    --user=имя_пользователя \
    --password=пароль имя_бд \
    --execute="SELECT NOW();"

    такую:

    mysql --defaults-extra-file="/path/def.cnf" \
    --execute="SELECT NOW();"

    Важно: --defaults-extra-file должен быть первым ключом.

  5. Хинт. Добавляем путь к файлу def.cnf в переменную окружения, и нам больше не нужно вводить его при наборе команды, например:
    mysql --defaults-extra-file=$DEF \
    --execute="SELECT NOW();"

По материалам man mysqld_safe и http://www.opennet.ru/tips/info/1313.shtml

Считывание переменных из файла в Bash

Вместо

for var in $(cat file.txt) # или for var in `cat file.txt`
do

done

можно (и часто удобнее) использовать

cat file.txt | while read var
do

done

Особенности:

1. Во втором варианте применение пайпа изменяет область видимости переменных. В приведённом примере за пределами цикла while переменная var не будет видна, т.к. она выполняется в новом процессе.

2. При использовании варианта с пайпом (вариант 2) в переменную будет писаться вся строка, даже если в ней есть пробельные символы. Такое же поведение в варианте 1 можно спровоцировать, установив переменную окружения IFS=" " (равной пробелу; хотя на своём опыте я убедился, что использование в качестве разделителя пробельных символов может повлечь за собой массу неудобств).

Android: как установить два одинаковых приложения на один телефон

Стол заказов — в конце статьи.

Для установки двух (или больше) одинаковых приложений на один телефон нужно сменить значение package в файле AndroidManifest.xml, находящемся внутри apk-билда.
Например, имеем:

<manifest
android:versioncode="20110420"
android:versionname="1.8.0"
package="ru.e_num"
xmlns:android="http://schemas.android.com/apk/res/android">

Для того, чтобы установить это приложение ещё раз, нужно сделать примерно следующее:

<manifest
android:versioncode="20110420"
android:versionname="1.8.0"
package="ru.e_num.test"
xmlns:android="http://schemas.android.com/apk/res/android">

После такого изменения заново собранный apk-файл придётся подписать сертификатом. Информацию о том, как распаковывать, запаковывать и подписывать apk-файлы, можно найти в любом поисковике по запросу SmartApkTool. Вот ссылка на приложение: v.2.2 (распакуйте содержимое архива в пустую директорию). А вот более правильный способ работы с apk-файлами: Использование apktool.

Совет. Устанавливайте одну из копий неизменённой, чтобы знать об обновлениях в Маркете.

Под катом описаны некоторые встречающиеся проблемы, а также находится Стол Заказов. Читать далее Android: как установить два одинаковых приложения на один телефон