вторник, 23 апреля 2013 г.

Webclojure project

Решил для себя сделать веб-редактор с repl, так как с планшета нет возможности работать с clojure. Со стороны сервера использую noir framework, со стороны клиента использую javascript. Пока сделан прототип поддерживающий следующие функции:
  • Eval функций из редактора с возможностью вызова их из repl
  • Обработка и отображение ошибок
  • Полноценный repl пока без возможности изменения ns(использую sandbox)
  • Сохранение исходного кода на сервере
  • Загрузка файла с кодом с сервера
На планшете тестировал работу проекта в chrome. Так как у меня это первый проект в web, то как только закончу с рефакторингом javascript выложу проект в свободный доступ. Так же планирую добавить подсветку синтаксиса, табулирование кода и подобие автодополнения кода, так как на планшете все таки не так удобно писать, в отличии от обычной клавиатуры. В планах есть написание статей по использованию noir framework на небольших примерах.

понедельник, 15 апреля 2013 г.

clojure-compile-project.el

При разрастании проекта с использованием clojure надоедает постоянно перекомпилировать весь проект по модулю. Поэтому написал небольшой модуль расширения для emacs, взяв несколько готовых функция с Elisp Cookbook. Работа модуля заключается в следующем: передается отправная точка для рекурсивного обхода директорий и к каждому найденному clojure-файлу применяется функция slime-load-file. До запуска данной функции необходимо выполнить команду clojure-jack-in для запуска repl. Если проект создавался с помощью утилиты lein, то необходимо передавать src директорию.Таким образом, можно без всяких усилий пересобрать проект. Исходный код модуля привожу ниже:

(defun walk-path (dir action)
       "walk DIR executing ACTION with (dir file)"
       (cond ((file-directory-p dir)
              (or (char-equal ?/ (aref dir(1- (length dir))))
                  (setq dir (file-name-as-directory dir)))
              (let ((lst (directory-files dir nil nil t))
                     fullname file)
                (while lst
                  (setq file (car lst))
                  (setq lst (cdr lst))
                  (cond ((member file '("." "..")))
                        (t
                         (and (funcall action dir file)
                              (setq fullname (concat dir file))
                              (file-directory-p fullname)
                              (walk-path fullname action)))))))
             (t
              (funcall action
                       (file-name-directory dir)
                       (file-name-nondirectory dir)))))

(defun walk-path-visitor (dir file)
       "Called by walk-path for each file found"
       (if (string-match "\\.clj\\'" file)
    (slime-load-file (concat  dir file)))
       (concat dir file))


(defvar start-path nil)

(defun compile-project (start-path) 
  (interactive "D" (list (read-from-minibuffer "Start path:"  start-path)))
  (walk-path start-path 'walk-path-visitor))
Конечно, возможно есть более красивое решение, но похоже я слишком плохо искал.

пятница, 12 апреля 2013 г.

Samsung-tools в Ubuntu

Приобрел себе нового коня, хоть и все функ клавиши работают, но на всяк случай сохраню способ установки samsung-tools в ubuntu:

sudo apt-add-repository ppa:voria
sudo apt-get update
sudo apt-get install samsung-tools samsung-backlight