Бухгалтерия онлайн

На седьмом году в качестве ИП решил всё-таки воспользоваться услугами сервиса онлайн-бухгалтерии. Лень стало ковыряться в бумажках типа КУДиР, заниматься отчётностью, отслеживать уже традиционные смены КБК… Каждый год что-то меняется. В самый последний момент, под Новый год. Надоело. Читать далее Бухгалтерия онлайн

5-летний опыт эксплуатации робота-пылесоса

Полностью не согласен с постом Тёмы о роботе-пылесосе: http://tema.livejournal.com/1743932.html

Этой вещью пользуюсь уже около 5 лет. После робота покупал и традиционный моющий пылесос (каприз жены), но он так и не прижился у нас. Именно обычный пылесос стоит в тёмном чулане и пылится, а робот запускаем несколько раз в неделю.

Однако и у него есть минусы, о которых я хочу рассказать. Возможно, для кого-то они перевесят плюсы. Думайте, выбирайте, решайте. Читать далее 5-летний опыт эксплуатации робота-пылесоса

Как переназначить кнопки dpi в Linux (на примере мыши MX1100)

Давно пользуюсь многокнопочной мышью Logitech MX1100. В Windows на отдельные её кнопки настроены различные сочетания клавиш, это позволяет сделать стандартное ПО SetPoint. К сожалению, Logitech не выпускает этой программы под Linux. Читать далее Как переназначить кнопки dpi в Linux (на примере мыши MX1100)

Сохранение истории bash после перезагрузки

Чтобы файл ~/.bash_history не был пустым после перезагрузки, нужно всего лишь изменить его права:

$ sudo chmod 777 ~/.bash_history

Или ещё лучше так:

$ sudo chown username:root ~/.bash_history

где username — имя вашего пользователя.

Рассылка email из таблиц Google одним кликом

По работе понадобилось рассылать сотрудникам письма исходя из данных таблицы. Как это произвести в один клик, хоть массово, хоть адресно? С помощью скрипта Google по такой схеме:

  1. Имеем таблицу с email-адресами и данными для отправки.
  2. Создаём скрипт Google, рассылающий письма на адреса из выделенных ячеек.
  3. Ставим в документ кнопку, при нажатии на которую этот скрипт срабатывает.

Более подробно по пунктам

Gesundheit! (Будь здоров!) Игра для iOS и Android

«Gesundheit!» (гезундхайт, «Будь здоров!» по-немецки) поразила меня великолепным оформлением, отличным звуковым сопровождением и сочетанием нескольких игровых жанров. Читать далее Gesundheit! (Будь здоров!) Игра для iOS и Android

Более точный sleep через read

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

$ time for ((i=0; i<10000; i++)); do /bin/sleep 0.0001; done

real 0m43.498s
user 0m2.904s
sys 0m10.809s

$ time for ((i=0; i<10000; i++)); do read -t 0.0001; done

real 0m9.148s
user 0m0.392s
sys 0m2.808s

PS. Конечно, есть и builtin sleep, но редко бывает разрешён по умолчанию. Да и работает, согласно источнику, всё равно медленнее (хоть и не намного).

Использование apktool

В статье про изготовление копий приложений для Android я упоминал о приложении SmartAPKTool. Оно может распаковывать, запаковывать и подписывать изменённые apk-файлы. Её достоинством является наличие графического интерфейса. Однако есть и серьёзный недостаток. SmartAPKTool давно не обновлялся, и программа некорректно распаковывает и запаковывает приложения для свежих версий Android. Поэтому здесь я попытаюсь объяснить, как пользоваться для этих целей приложением apktool. Читать далее Использование apktool

Очистка поля типа file на javascript

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

Нужное мне решение было найдено здесь. В общем случае можно очищать любые поля формы.

<script lang="javascript" type="text/javascript">
function clearFileUpload(id) {
// Получаем элемент по id
fileField = document.getElementById(id);
// Получаем родительский элемент
parentNod = fileField.parentNode;
// Создаём новый элемент
tmpForm = document.createElement("form");
parentNod.replaceChild(tmpForm,fileField);
tmpForm.appendChild(fileField);
tmpForm.reset();
parentNod.replaceChild(fileField,tmpForm);
}
</script>
[…]
<!-- Эта кнопка очищает два поля с указанными id -->
<input onclick="clearFileUpload('field1_id'); clearFileUpload('field2_id');" value="X" type="button">
[…]

Проверено в Chrome 30 и старой версии Opera 12.16