Показаны сообщения с ярлыком Программирование. Показать все сообщения
Показаны сообщения с ярлыком Программирование. Показать все сообщения

среда, 27 мая 2015 г.

Автозапуск Guard под Emacs

Настраивал тут Guard по статье на Хабре

Вспомнил, что когда-то настраивал нотификацию, в которой вроде бы ничего сложного нет (у Emacs она работает, кажется, из коробки).

Недостаток такой нотификации в том, что если появилась ошибка, в Emacs только перекрашивается mode-line в красный цвет (если всё Ок, то зелёный), а на ошибку надо смотреть в терминал, где запущен Guard. Да и предварительно необходимо его там ещё запустить.

А что если запускать guard прямо в Emacs при начале работы с проектом?

Для запуска Guard из Emacs нашёл готовую библиотеку  ruby-guard. и положил её в ~/emacs/ruby-guard/

Обычно при начале работы с проектом я сначала открываю корневой каталог проекта в dired. Значит, цепляемся к Dired! Добавим это в ~/.emacs:


(add-hook 'dired-mode-hook ;; При открытии каталога в Dired
  (lambda ()
    ;; Если найден Guardfile, запускаем Guard:
    (if (file-exists-p (concat default-directory "Guardfile"))
      (progn
        (load-library "~/emacs/ruby-guard/ruby-guard.elc")
        (ruby-guard)))
      ;; подкрашивать строку в dired:
      (hl-line-mode)))

Теперь при открытии каталога, содержащего Guard-файл, у нас будет появляться окно с выполняющимся Guard и, как только у нас будут появляться ошибки проверки, мы сможем переходить на точку ошибки в файле, если добавим в ~/.emacs строку:

(add-hook 'shell-mode-hook 'compilation-shell-minor-mode)

Теперь, когда в guard-буффере появляется ошибка, мы можем перейти в нужный файл на строку с ошибкой просто кликом мышки на ошибке или клавишей Enter.

четверг, 23 декабря 2010 г.

Подводные камни дробных чисел

В PHP такой код выдаёт странный, на первый взгляд, результат:
$x = (0.1+0.7)*10;
echo $x, "\n";
printf("%d\n", $x);
echo (int)$x, "\n";
printf("%0.10f\n", $x);
Казалось бы, должна быть всегда восьмёрка. Но этот код выдаст:
8
7
7
8.0000000000
Всё становится ясно, если в код добавить такую строку:
printf("%0.20f\n", $x);
Получим число 7.99999999999999911182
Т.е. в памяти была далеко не восьмёрка, а приведение типа просто отбрасывает дробную часть. Если округлить результат, то точность повысится:
$x = round((0.1+0.7)*10);
echo $x, "\n";
printf("%d\n", $x);
echo $x, "\n";
printf("%0.10f\n", $x);
printf("%0.20f\n", $x);
Выдаст:
8
8
8
8.0000000000
8.00000000000000000000
Поэтому стоит избегать использовать числа с плавающей точкой там, где требуется целочисленный результат.

четверг, 18 ноября 2010 г.

Язык Си для скриптов

Читая статью Загрузка Linux без ядра за 25 секунд решил проверить, заработает ли такой код на языке Си:


Далее делаем программу запускаемой (chmod +x test.c) и можно запускать командой ./test.c

Действительно, работает!

Смысл такого подхода: иногда не хватает либо доступных средств скриптового языка, либо производительности. Но держать компилируемую программу там, где по сути нужен скрипт, неудобно.

А здесь в одном флаконе и мощь языка Си, и скорость запуска, и скриптовый подход "подправил-запустил", и компиляция в машинный код.

Осталось только попытаться применить это на практике.