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

суббота, 9 апреля 2011 г.

Интерпретация и компиляция Java-кода в Java-программе

Давайте представим, что вам понадобилось в своей Java-программе выполнять некоторый код, порождаемый пользователем, в некотором выстроенном контексте. Причем, хотелось бы, чтобы из пользовательского кода были доступны некоторые классы и объекты, определенные в исходном приложении.
В 6-ой версии платформы Java появилась технология Java Scripting, которая реализована в пакете javax.script. Используя её и какой-либо из реализованных движков (а может быть вы напишите свой движок), можно получить то что мы хотим - Java-программу, исполняющую некоторый код пользователя, который становится известен лишь в runtime. Типично, используют Java Scripting и движок JavaScript (ссылка), более того JavaScript движок Rhino от Mozilla входит в JDK 6. Нас же будет интересовать Java-движок.

понедельник, 7 марта 2011 г.

Повторяемые задания

Встретился с интересной задачкой.
Есть список некоторых заданий. Что это за задания нам не интересно, главное что они как-то распределены во времени.
Существуют два типа заданий:
  • разовые;
  • повторяемые.
Каждое из них, думаю, допустимо описать парой: (дата окончания, паттерн повторяемости), где:
  • дата окончания - дата, до которой данное задание должно быть выполнено, включительно;
  • паттерн повторяемости - шаблон по которому создаются новые задания. Задание разовое - пуст, повторяемое - имеет свою структуру:
    • тип повторяемости - один из вариантов: 'ежедневно', 'еженедельно', 'ежемесячно', 'ежегодно';
    • повторять через - число дней/недель/месяцев/годов;
    • длительность задания - d-дней, m-месяцев, y-лет.
Думаю с разовыми заданиями все очевидно, задание необходимо выполнить до указанной даты окончания,  больше оно нас не будет тревожить. Что же касается повторяемых заданий, то тут есть проблемы.
На самом деле, повторяемое задание - это одно разовое задание, которое нужно выполнить до указанной даты окончания и шаблон по которому будут созданы новые разовые задания. Вопросы, связанные с повторяемыми заданиями, которые нас будут интересовать:
  1. Как определить, необходимо ли сегодня (DD.MM.YY) создавать новое разовое задание для некоторого повторяемого ? Будем считать, что задание может быть создано за 1 день до официального начала.
  2. Как назначить дату окончания нового разового задания ?

пятница, 20 августа 2010 г.

Sikuli играет в игру LPairs

Sikuli - инструмент для автоматизации работы с элементами GUI, играет в LPairs (простую игру для укрепления памяти).

Скрипт

четверг, 5 августа 2010 г.

Параллельное выполнение команд: GNU Parallel

Проект GNU Parallel развивается с 2007 года и представляет собой утилиту для выполнения задач в shell параллельно в текущей и/или удаленных системах. Задачи формируются из скриптов и команд операционной системы, и параметров (или частей команд) из стандартного ввода. В этом GNU Parallel похож на xargs, в задачи которого входит формирование команд из данных со стандартного ввода, по заявлению разработчика, GNU Parallel даже имеет схожие с xargs опции.
Схожесть с xargs позволяет использовать GNU Parallel в ранее созданных скриптах, в сложных конвейерах, используя все предоставленные ресурсы имеющихся систем (ядра/процессоры текущей или удаленных многоядерных/многопроцессорных систем).

среда, 7 июля 2010 г.

Утилиты для аудита исходных кодов: Graudit, RATS

Бесспорно полезно проводить аудит исходных кодов с целью выявления потенциально проблемных и опасных участков кода. В случае, если эта операция автоматизирована при помощи какой-то утилиты, то также это не отнимет много времени.
Пробовал я утилиты для автоматизированного аудита исходных кодов на задачах 1-го курса университета (ЯП c), расположенных в ~/1-course.

суббота, 24 апреля 2010 г.

Стул в Blender из скрипта на python

Задача
Нарисовать стул в Blender из скрипта на python.
Решение
from Blender import *

# Clean scene
def newactivescene():
    sc = Scene.New()
    oldsc = Scene.GetCurrent()
    sc.makeCurrent()
    Scene.Unlink(oldsc)
    return sc

sc = newactivescene()

# Camera
camera = Camera.New()
camob = Object.New('Camera')
camob.link(camera)
sc.link(camob)
camob.setLocation(3.5,-5,5.8)
camob.setEuler(60*2*3.14/360,0,30*2*3.14/360)
sc.setCurrentCamera(camob)

# Lamp
lamp = Lamp.New('Sun')
lampob = Object.New('Lamp')
lampob.link(lamp)
sc.link(lampob)
lampob.setLocation(2,-2.5,7)
lampob.setEuler(60*2*3.14/360,0,30*2*3.14/360)

# Legs height, weight
height = 1.9
weight = 1.8
# Legs
sc.objects.new(Mesh.Primitives.Cylinder(100,0.5,height)).\
setLocation(-weight/2,weight/2,height/2)
sc.objects.new(Mesh.Primitives.Cylinder(100,0.5,height)).\
setLocation(weight/2,weight/2,height/2)
sc.objects.new(Mesh.Primitives.Cylinder(100,0.5,height)).\
setLocation(weight/2,-weight/2,height/2)
sc.objects.new(Mesh.Primitives.Cylinder(100,0.5,height)).\
setLocation(-weight/2,-weight/2,height/2)
# Seat
sc.objects.new(Mesh.Primitives.Plane(weight+0.5)).\
setLocation(0,0,height)
# The back of
ob = sc.objects.new(Mesh.Primitives.Plane(weight+0.5))
ob.setLocation(0,(weight+0.5)/2,height+(weight+0.5)/2)
ob.setEuler(90*2*3.14/360,0,0)

Window.RedrawAll()

воскресенье, 11 апреля 2010 г.

Удаление содержимого html по маркеру в тегах на языке python

Задача
Оставить в строке, содержащей html код, всё кроме содержимого тегов (и самих тегов) помеченных определенным маркером ("ignoremarker").

четверг, 4 февраля 2010 г.

Stunnel выручил

Преамбула
Обслуживая один удаленный веб-сервис с доступом only HTTP, решил изменить (не без оснований) настройки cookies. В частности, переключил настройку cookies с cookies over HTTP на only secure cookies (over HTTPS).

воскресенье, 31 января 2010 г.

Subversion 1.6.9 - svn:externals

$ svn propset svn:externals 'object svn://svnserver/externalrepos/object' .
Теперь object внешняя по отношению к данному репозиторию с содержимым из svn://svnserver/externalrepos/object.
Надеюсь в следующих версиях синтаксис изменится.

пятница, 21 августа 2009 г.

Полное копирование таблиц Lua

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

пятница, 3 июля 2009 г.

Смена имени пользователя и домашней директории в Linux

Исходные данные
Имя пользователя : suser
Домашняя директория : /home/suser

Задача
Сменить suser -> duser
Сменить /home/suser -> /home/duser