Windows любой версии ... следует, что командная
это оболочка, встроенная ...
в C# – это ... системе быть со
? Каждый символ в ...
занимает 2 байта ( ...
... рубрика "Одной
Новая рубрика "Одной строкой".
Спортсмен по прыжкам в воду забыл затянуть плавки, поэтому призового места он не занял, но получил приз зрительских симпатий.
Старость - это когда девочки по вызову приезжают к тебе на машине с красным крестом.
Во время праздника Хэллоуин олигархи просят звёзд российской эстрады спеть им без макияжа, без фонограммы и под живую музыку.
Дальше »
... (патчем на 20
исправляется, должно быть ...
В линуксе есть несколько разных программок для учёта времени, самая простая и незамысловатая, и при этом вполне функциональная — это, пожалуй, Hamster. С ней всё понятно: добавляем на панель, вбиваем новое дело всякий раз, когда за него берёмся. Главное, не забывать.
А вот есть программка похитрее: arbtt. Пользоваться ей, правда, легче. Она полностью автоматическая. Достаточно запустить
arbtt-capture
и заниматься своими делами
*.
arbtt-capture
будет записывать когда и какие программы были запущены и какие у окон были заголовки.
* Автор arbtt
рекомендует сразу добавить arbtt-capture
в автоматически запускаемые приложения.
Чтобы увидеть необработанные сырые данные, можно выполнить
arbtt-dump
, но это не очень полезно. Для просмотра статистики удобнее использовать использовать утилитку
arbtt-stats
.
Чтобы
arbtt-stats
могла выдавать осмысленные результаты, нужно вначале задать свою классификацию запущенных программ. Эти правила вписываются в файл
~/.arbtt/categorize.cfg
. Пример и описание формата правил есть в документации. Приведу свой (сокращённый) пример с комментариями по-русски:
-- правила имеют вид:
-- [условие ==>] tag [категория_тега:]тег,
-- в условиях и тегах можно использовать несколько специальных переменных,
-- почти все они встречаются в примерах ниже
-- Не учитывать время простоя
$idle > 60 ==> tag inactive,
-- Все записи за последние 24 часа пометить тегом last-day
$sampleage <= 24:00 ==> tag last-day,
-- Пометить тегом last-hour все записи за последний час
$sampleage <= 1:00 ==> tag last-hour,
-- Все типы окон Firefox учитывать в одном теге program:web (program — это категория тега)
current window $program == "Navigator" ==> tag program:web,
current window $program == "firefox-bin" ==> tag program:web,
current window $program == "gecko" ==> tag program:web,
-- Общий тег для всех видов терминалов (на будущее)
current window $program == "gnome-terminal" ==> tag program:terminal,
-- Пометить все остальные программы пометить тегами вида program:имя_программы
tag program:$current.program,
-- Классифицировать заголовки Firefox с помощью регулярных выражений. Тут у каждого будут свои шаблоны.
-- Присваивать теги категории web.
current window ($program == "Navigator" && $title =~ /^Gmail.*/) ==> tag web:Gmail,
current window ($program == "Navigator" && $title =~ /.*Google Search.*/) ==> tag web:Google,
current window ($program == "Navigator" && $title =~ /^Twitter.*/) ==> tag web:Twitter,
current window ($program == "Navigator" && $title =~ /.* on Twitter - Iceweasel$/) ==> tag web:Twitter,
current window ($program == "Navigator" && $title =~ /^Springer.*/) ==> tag web:Papers,
current window ($program == "Navigator" && $title =~ /^Wiki - Editing.*/) ==> tag web:Papers,
-- ...
--
current window $program == "Navigator" ==> tag web:$current.title,
-- Теги категории time-of-day для классификации по времени суток
$time >= 2:00 && $time < 8:00 ==> tag time-of-day:night,
$time >= 8:00 && $time < 12:00 ==> tag time-of-day:morning,
$time >= 12:00 && $time < 14:00 ==> tag time-of-day:lunchtime,
$time >= 14:00 && $time < 18:00 ==> tag time-of-day:afternoon,
$time >= 18:00 && $time < 22:00 ==> tag time-of-day:evening,
$time >= 22:00 || $time < 2:00 ==> tag time-of-day:late-evening,
-- Помечать над каким проектом работаю судя по заголовку окна.
-- Присваивать теги категории project.
current window $title =~ m!~/work/projectA! ==> tag project:projectA,
current window $title =~ m!~/work/projectB! ==> tag project:projectB,
-- ...
--
-- Помечать, какой тип текста я редактирую судя по заголовку окна.
-- Присваивать теги категории edit.
current window ($title =~ /^[^ ]+\.c .* - G?VIM.*$/) ==> tag edit:c,
current window ($title =~ /^[^ ]+\.py .* - G?VIM.*$/) ==> tag edit:python,
current window ($title =~ /^[^ ]+\.hs .* - G?VIM.*$/) ==> tag edit:haskell,
-- Когда использую suduedit
current window ($title =~ m!.*\(/var/tmp\) - G?VIM.*$!) ==> tag edit:config,
-- Когда редактирую что-то онлайн в Its All Text
current window ($title =~ m!.*/itsalltext\) - G?VIM.*!) ==> tag edit:itsalltext,
Для отчёта по определённой категории:
$ arbtt-stats -c имя_категории
Для просмотра отчётов по всем категориям:
$ arbtt-stats --each-category
Для ограничения выборки только записями с определённым тегом, например,
last-hour
, есть опция
-o
. Всё вместе:
$ arbtt-stats -o last-hour -c program -c edit
Statistics for category program
===============================
_____________Tag_|___Time_|_Percentage_
program:terminal | 29m00s | 48.33
program:gvim | 17m00s | 28.33
program:web | 13m00s | 21.67
program:Pidgin | 1m00s | 1.67
Statistics for category edit
============================
_____________Tag_|___Time_|_Percentage_
edit:itsalltext | 17m00s | 28.33
edit:haskell | 4m00s | 6.67
(unmatched time) | 39m00s | 65.00
В последнем примере я показал примерный вывод программы. Сразу видно, сколько времени за последний час я что-то редактировал и что именно и какие программы использовал. Писал эту заметку, в общем.
Кстати,
arbtt
есть не только в линуксовых репозиториях, но в скором времени (а может и уже) будет доступна и пользователям Windows.
Некоторые замеченные изъяны:
arbtt-stats
при печати портит заголовки окон с уникодом (патчем на 20 строк исправляется, должно быть ОК при сборке новым GHC), пока нельзя классифицировать по дням недели или по месяцам, сообщения о синтаксических ошибках в правилах очень невнятны.
Дополнение: замеченные недостатки, не без моего скромного участия, исправлены во время Хакатона в Цюрихе; используйте GHC 6.12 и устанавливайте новую версию 0.5; там всё ОК.
Приятных всем выходных!
... >Банальность. Удаление пустых
Всё чаще в твиттер
одной строкой пост целый
пишу на память.
Не растекаясь мыслею по древу и без лишних аннотаций, предлагаю вам список коротких советов и ссылок, настоящих жемчужин, накопившихся в моём твиттере, записанных мной самим, тщательно упорядоченных ныне по темам и ранжированных с точки зрения общечеловеческих ценностей.
Приёмы работы
LaTeX и вёрстка
Программирование
Находки (всякие программки)
в .XCompose добавить...
Чтобы использовать новый, сжимающий раза в два лучше, видео-кодировщик Theora 1.1, нужно взять саму новую библиотечку (уже есть в Debian unstable), и, главное, ffmpeg2theora
версии не ниже 0.25. На сайте разработчиков есть и бинарные сборки.Принудительное отключение подсветки ЖК-дисплея: xset dpms force off
. Отсюда.Банальность. Удаление пустых строк sed
-ом: sed '/^\s*$/d'
.Редактируя диаграммы Graphviz в Vim, быстрый просмотр по :make
можно сделать так: :set makeprg=dot\ -Tpng\ %\ \\\|display\ png:- errorformat='' autowrite
. Подставить название используемой программы (dot
, neato
, fdp
, ...).Создание паролей (если нет KeePassX): cat /dev/urandom | tr -d -c 'a-zA-Z0-9' | fold -w 8 | head -1
Поиск и удаление дубликатов файлов: fdupes
в командной строке, fslint
— утилита с графическим интерфейсом.В Debian можно заменить файл пакета, не пересобирая пакет. Поможет dpkg-divert
.
sudo -i
имитирует логин под рутом (даёт #
). Бывает полезно (раньше sudo su -
иногда пользовался).Как создавать картинки предварительного просмотра видеофайлов:
ffmpeg -itsoffset -1 -i видеофайл.avi -vcodec mjpeg -vframes 1 -an -y -f rawvideo -s 320x240 картинка.jpg ; done
Как создавать картинки из PDF:
convert -thumbnail 300x300 документ.pdf[0] -gravity center -extent 300x300 картинка.png
RFC 2346.
Чтобы избежать разрыва страницы в LaTeX, можно поместить фрагмент текста в окружение samepage
. Это частый вопрос.Отступы элементов списка в LaTeX можно настроить, если использовать окружение list
вместо itemize
. Пример.Чтобы добавить межабзацный пробел, \setlength{\parskip}{10pt plus 1pt minus 1pt}
. Особенно полезно в наборе без абзацного отступа. Отсюда.Чтобы выравнять картинку и текст справа от неё по вертикали, по середине, повозившись, сделал себе макрос \sidebyside{}{}
:
\newsavebox{\leftbox}\newlength{\leftboxheight}\newcommand{\sidebyside}[2]{\sbox{\leftbox}{#1}\settoheight{\leftboxheight}{\usebox{\leftbox}}\usebox{\leftbox}\raisebox{0.5\leftboxheight}{#2}}
Смотрите пример использования.Чтобы автоматически закрывать окружения LaTeX, пользователи Vim могут поставить плагин tex_autoclose. Использование: в режиме вставки Ctrl+\, затем c.Разрезать на страницы и «склеивать» PDF-документы можно с помощью pdftk. Объединить два файла в один:pdftk первый.pdf второй.pdf cat output новый.pdf
@vlasovskikh подсказал, что для больших списков izip
будет быстрее (проверили, так).
Занятное и доходчивое объяснение «что такое продолжения» на 11-й минуте видеопрезентации Swarm-dpl.Быстро создавать графический интерфейс для научных программок позволяет библиотечка TraitsUI (Python). Пока не пробовал, но прочитал урок по TraitsUI.
Говорят, Intel готовит Concurrent Collections и для Хаскеля.Я же пока проснулся и прочитал про со-процедуры на Си и устройство Даффа. Впечатлился.Хотите полюбоваться, как можно добавлять побочные вычисления «наследованием» типов? Вот, пожалуйста, в этом примере (на Хаскеле). Хотя это, конечно не Java.Учился использвать монадные трансформеры (бррр!) — оказалось несложно. В результате получился такой пример использования StateT поверх IO. Может кому пригодится.Мелкое копирование словарей в Python — грабли.Atrack — анонимный открытый битторент трекер для Google App Engine. Всего 246 строк кода.
Sweet Home 3D — программа для планирования интерьера. Можно рисовать планы комнат, расставлять мебель, крутить по всякому. Сделана красиво.fuse-zip — файловая система FUSE для монтирования zip-архивов. Быстрая, легко собирается по make
, умеет писать в архив. Использование: fuse-zip архив.zip /точка/монтирования
Есть также avfs, которая монтирует любые архивы, но не пишет и не такая удобная. Её использовать так:
mountavfs ; ls ~/.avfs/полный/путь/к/архиву.zip#/файл/в/архиве
В Debian нужно предварительно добавить пользователя в группу fuse.Python(x,y) — дистрибутив Python для научных работников, для Windows и Ubuntu. Все инструменты и библиотечки «из коробки».В дополнение к своему однострочнику antiodt нашёл ещё хороший конвертер ODT в Markdown odt2txt.py.Дружественный к Гному вариант Xmonad — Bluetile. Раз попробовал, и две недели им пользовался.Попробовал gitit
. Самая простая вики для совместной работы над математическими текстами (вместе с jsMath
из коробки). Хранилище — git или darcs.TxtSushi — утилитки, позволяющие выполнять SQL-запросы по простому текстовому (CSV, TSV) файлу.Ух-ты, а немало получилось.