Google выпустил HTML-редактор для веб-дизайна

Компания Google выложила в свободный доступ программу Google Web Designer: HTML-редактор со встроенным графическим редактором для подготовки баннеров.



Редактор изначально ориентирован на адаптивный дизайн, чтобы сайты хорошо смотрелись на экранах любого размера.

Поддерживается работа и в графическом режиме, и в текстовом редакторе кода. Можно даже создавать графические 3D-эффекты, не набрав ни строчки CSS3.

Создание баннеров — одна из ключевых функций редактора. Поддерживаются шаблоны со всеми стандартными форматами и размерами AdMob и DoubleClick.

В «продвинутом» режиме (Advanced mode) удобно делать более сложные анимированные баннеры, с разными эффектами.

ссылка на оригинал статьи http://habrahabr.ru/post/195880/

Введение в Nashorn

Введение

imageNashorn* — движок JavaScript, разрабатываемый полностью на языке программирования Java компанией Oracle. Основан на Da Vinci Machine (JSR 292) и будет доступен в составе Java 8 (релиз которой ожидается в марте 2014 года). Стоит отметить что выполнение JavaScript (и поддержка сриптинга) была уже в Java 6, но в ней использовался движок Rhino, также написанный на Java, но поддерживаемый Mozilla Foundation.

О списке нововведений в Java 8 уже писали ранее. В данной статье будет приведена пара простых примеров, которая даст вам представление об использовании Nashorn.

Применение

Зачем нужен JavaScript в Java? Например:

Примеры использования

Подготовительный этап

Устанавливаем JDK 8 Early Access. Далее по тексту подразумевается что команды javac и java выполняются для Java 8.

Hello, World!

import javax.script.*;  public class EvalScript {     public static void main(String[] args) throws Exception {         // create a script engine manager         ScriptEngineManager factory = new ScriptEngineManager();         // create a Nashorn script engine         ScriptEngine engine = factory.getEngineByName("nashorn");         // evaluate JavaScript statement         try {             engine.eval("print('Hello, World!');");         } catch (final ScriptException se) { se.printStackTrace(); }     } } 

Компилируем класс:

./javac EvalScript.java 

И выполняем его:

./java EvalScript

Видим вывод:

Hello, World!

JavaScript + Java

Nashorn позволяет использовать классы Java для создания программ. Рассмотрим следующий пример:

MyScript.js

var MyClass = Java.type("EvalScript.MyClass"); var my = new MyClass(); my.printMsg("Hello!"); 

EvalScript.java

import javax.script.*; import java.io.*;  public class EvalScript {      public static void main(String[] args) throws Exception {         // create a script engine manager         ScriptEngineManager factory = new ScriptEngineManager();         // create a Nashorn script engine         ScriptEngine engine = factory.getEngineByName("nashorn");         // evaluate JavaScript statement         try {             BufferedReader br = new BufferedReader(new InputStreamReader(System.in));             engine.eval(br);         } catch (final ScriptException se) { se.printStackTrace(); }     }      public static class MyClass {         public void printMsg(String msg) {             System.out.println("printMsg : "+msg);         }     } } 

Для примера я создал свой внутренний класс (что не является ограничением, я мог бы создать и отдельный класс), и вызвал его из JavaScript кода. Осталось скомпилировать класс и запустить его передав на вход наш js-код:

./java EvalScript < MyScript.js

Видим вывод:

printMsg : Hello!

Вывод

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

Используемые материалы:


* Nashorn — немецкое слово, которое переводится на русский как «носорог», а на английский как «rhinoceros», что перекликается с Rhino, названием движка JavaScript, реализованного в Java и поддерживаемого компанией Mozilla Foundation. Rhino, в свою очередь, получил название в честь животного изображённого на обложке книги о JavaScript, выпущенной издательством O’Reilly Media.

ссылка на оригинал статьи http://habrahabr.ru/post/195870/

Подготовка графиков в MatLab

В написании научных статей немалую часть времени занимает подготовка иллюстраций, графиков и диаграмм. Хочу поделиться некоторыми мыслями и примерами того, как можно ускорить этот процесс. Материал пригодиться тем, кто пользуется системой MatLab.

MatLab предоставляет широкие возможности по отображению графической информации в виде графиков, диаграмм, и т.п. Однако не всегда получаемые по умолчанию иллюстрации удовлетворяют требованиям оформления статей. Для этого в системе MatLab существует множество настроек. И чтобы ускорить подготовку иллюстраций предлагаю воспользоваться несколькими строчками кода, которые помогут помочь настроить отображение графиков.

Прежде всего, необходимо настроить шрифты, которые будут использоваться для вывода значений осей и надписей на графиках, что также помогает в случаях неправильного отображения надписей на русском языке:

set(0,'DefaultAxesFontSize',14,'DefaultAxesFontName','Times New Roman'); set(0,'DefaultTextFontSize',14,'DefaultTextFontName','Times New Roman'); 

Затем необходимо настроить размер графика и его положение на экране, например, с отображением на весь экран:

figure('Units', 'normalized', 'OuterPosition', [0 0 1 1]);

При необходимости вставляем название графика:

title('Название');

Далее можно включить построение нескольких графиков в одном окне, c использованием тех же осей и свойств графика:

hold on;%или hold all;

Строим графики с определенным цветом, стилем и толщиной линии:

plot(X2,Y2,':k','LineWidth',3); plot(X2,Y3,':b','LineWidth',3); plot(X2,Y4,'-.','Color',[.1 .7 .7],'LineWidth',3); plot(X2,Y5,'--','Color',[.1 .4 .1],'LineWidth',3); plot(X2,Y6,'r','LineWidth',3);

Вставляем легенду в график с определенным положением на рисунке, например справа внизу:

legend('исходные данные','полином 3-й степени','полином 4-й степени','полином 5-й степени','полином 7-й степени','полином 9-й степени', 4);

И вот тут начинается самое интересное…

При построении графика в MatLab дробные значения подписей на осях координат отображаются с разделителем в виде точки, тогда как, разделитель дробной и целой части у нас принято отображать запятой.

Чтобы не изменять вручную все значения подписей данных осей через меню графика,

воспользуемся небольшим куском кода:

BX=get(gca,'XTick'); BY=get(gca,'YTick');  xlabel(XL,'Position',[BX(size(BX,2)) BY(1)]) ylabel(YL,'Rotation',0,'Position',[BX(1) BY(size(BY,2))])  XA=get(gca,'XTickLabel');%  for i=1:size(XA,1)      z=rem(i,2);     if z==0;         if XA(i,1)~='0' && XA(i,2)~=0             XA(i,:)=char(0);         end     end      end  XA(size(XA,1),:)=char(0);  set(gca,'XTickLabel',XA);  YA=get(gca,'YTickLabel');%  for i=1:size(YA,1)      z=strfind(YA(i,:),'.');     YA(i,z)=',';     clear z;     z=rem(i,2);     if z~=0;          YA(i,:)=char(0);     end      end  YA(size(YA,1),:)=char(0);  set(gca,'YTickLabel',YA);

Код «прореживает» подписи осей x и y, а также исправляет точки на запятые в подписях на оси y. Для других осей необходимо повторить аналогичные процедуры.

И в заключении отобразим линии координатной сетки:

grid on;

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

Функция subgraphic

function result=subgraphic(X1,X2,Y1,Y2,Y3,Y4,Y5,Y6,Tit,TL,XL,YL,PL)  figure('Units', 'normalized', 'OuterPosition', [0 0 1 1]);  plot(X1,Y1,'o','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor',[.49 1 .63],'MarkerSize',5);  if Tit      title(TL); end  hold on;  plot(X2,Y2,':k','LineWidth',3);  plot(X2,Y3,':b','LineWidth',3);  plot(X2,Y4,'-.','Color',[.1 .7 .7],'LineWidth',3);  plot(X2,Y5,'--','Color',[.1 .4 .1],'LineWidth',3);  plot(X2,Y6,'r','LineWidth',3);  legend('исходные данные','полином 3-й степени','полином 4-й степени','полином 5-й степени','полином 7-й степени','полином 9-й степени', PL);  BX=get(gca,'XTick'); BY=get(gca,'YTick');  xlabel(XL,'Position',[BX(size(BX,2)) BY(1)]) ylabel(YL,'Rotation',0,'Position',[BX(1) BY(size(BY,2))])  XA=get(gca,'XTickLabel');%  for i=1:size(XA,1)      z=rem(i,2);     if z==0;         if XA(i,1)~='0' && XA(i,2)~=0             XA(i,:)=char(0);         end     end      end  XA(size(XA,1),:)=char(0);  set(gca,'XTickLabel',XA);  YA=get(gca,'YTickLabel');%  for i=1:size(YA,1)      z=strfind(YA(i,:),'.');     YA(i,z)=',';     clear z;     z=rem(i,2);     if z~=0;          YA(i,:)=char(0);     end      end  YA(size(YA,1),:)=char(0);  set(gca,'YTickLabel',YA);  grid on;  result=1;

Выполним

subgraphic(B,T,A,Y3,Y4,Y5,Y7,Dva_theta_0_5,Tit,'Название','{\itT}, \circC','{2{\phi}_{0,5}, град.',3); 

с заранее подготовленными данными.

И здесь нас ждет небольшая засада…

В результате получаем вот такой график:

По умолчанию MatLab отображает греческую букву «фи» как в кириллице «ф». Одним из способов отобразить привычную греческую букву «фи» с петлеобразным начертанием, является выбор специального шрифта c греческими буквами. Скачиваем, например, шрифт Greek Normal отсюда и устанавливаем. Просмотрев шрифт Greek в таблице символов, замечаем, что в этом шрифте буква «фи» существует в двух вариантах, причем для кода латинской «f» получим тот же результат что и в MatLab в виде «ф», а для кода латинской «j» должен быть получен требуемый результат.

Выполним

subgraphic(B,T,A,Y3,Y4,Y5,Y7,Dva_theta_0_5,Tit,'Название','{\itT}, \circC','{2\fontname{Greek}j}_{0,5}, град.',3);

И получим вот такой график:

В результате использования приведенного кода для построения графиков с помощью системы MatLab удалось:

  • Решить проблему с некорректным отображением кириллических шрифтов;
  • Автоматически заменить разделитель целой и дробной части числа с точки на запятую в графике;
  • Отобразить греческую букву фи в петлеобразном начертании.


PS Если кто-то знает простой способ отобразить символ греческой буквы «фи» с кодом unicode-03С6 в графиках MatLab, напишите пожалуйста в комментариях.

И несколько полезных ссылок:
Код на Github.com
Некоторые полезные средства настройки графиков (plot) в MATLAB
Заметки про Matlab. Экспорт графиков.
Простейшее приложение с GUI средствами MatLab 6.5

ссылка на оригинал статьи http://habrahabr.ru/post/195842/

MagOS Linux (сентябрьский выпуск)

Из многих Linux дистрибутивов хотелось найти что-то необычное и обязательно разработанное своими софтвэр инжиниирами, оригинальное.
Magos оказался не совсем дистрибутивом в привычном понимании, а новым шагом живых операционных систем.
magos-linux

Если взять Mandriva Linux, добавить скриптов linux-live.org и дополнить модульной архитектурой slax…
А потом, конечно же, немного обработать напильником — получим magos-linux ©

 От стандартных live-image дистров с сохранением, MagOS отличается модульностью, в squashfs помещается не целиком дистрибутив, а для каждой программы выделяется свой mem/loop сегмент, в который из модуля на-лету распаковывается исполняемый код.

Сегодня вышло обновление.

 Одним из преимуществ такого подхода является возможное ускорение производительности на high-end cpu, если процессор будет обрабатывать распаковку модуля из .xzm быстрее, чем просто считывать с носителя, естественно используется вся доступная память и побольше.
Поскольку вся система держится в памяти то fault-tolerance в чём-то возрастает, так как изменить модули можно только при определённых условиях, но появляются и проблемы, ведь при отказе системы память будет очищена, а сохранённого состояния на диске не останется, но также появляются и новые возможности.

Комментарий Михаила (автор, разработчик):
Модули наслаиваются друг на друга, верхний слой выигрывает (если есть 2 разных файла с одним путем, то доступен только с верхнего слоя)

 Сами модули создаются на-лету при установке из центра приложений или можно запустить утилиту и она сконвертирует rpm-пакет в модуль, уже сконвертированные модули можно скачать из хранилища.
На деле — каждый модуль имеет свою «файловую систему» систему и подключается к основной aufs, как живой диск — live-cd, поэтому «установка» проводится также простым копированием или удалением модуля из системы, из-за чего можно достаточно легко собрать постоянный пакет программ.

 Поскольку разработка отнимает достаточно много времени, то было принято решение не заниматься своим дистрибутивом, а сначала обработать другой дистрибутив и проще оказалось работать с rpm, хотя в принципе можно взять любой дистрибутив — вопрос людей и времени доделать скрипты, сейчас это клонирование росы, раньше была магия. Есть репозиторий на github, зеркала на яндексе, однако одной из интересных задач было создание — MagNet, распределённой сети для хранения модулей и общения между пользователями, сейчас концепция претерпевает некоторые изменения. вместе с объявившимися новыми облачными сервисами — появились и новые возможности для реализации.
 Одним из лучших решений стала установка дистрибутива в два клика — распаковать и запустить скрипт для изменений в загрузчике, разметка областей диска не нужна — работает c ntfs, vfat, ext3, всё работает даже на текущей системе, легко ставится на флэшку, хотя потенциал есть и реализация возможна для более серььёзных задач, но это потребует больших усилий разработчиков, а необходимо и тестирование, отладка.
 Сейчас работа сосредоточена над ускорением запуска системы до уровня DE с 90 секунд до 20, а также над разработкой конвертера в модули, исправлением части ошибок.

Михаил:
Насчет «с 90 секунд до 20» — эти цифры разные на разных машинах
И я бы не сказал что мы на этом сосредоточены. У нас не так много разработчиков и каждый занимается тем, что ему интересно. В данном случае Антон начал с этого модуля, в дальнейшем нам придётся заменить скрипты определения оборудования и либо оно войдёт в сборку как наше отличие от росы, либо останется так же как в росе.
Из возможностей?
— загрузка с носителя в память и извлечение носителя
— три (четыре для 2012) среды на выбор пользователя + богатый набор приложений, всё это общим весом около 1Г
— настройка через ini файл без изменения модулей дистрибутива
— compiz эффекты раб. стола встроены и настроены для использования в КДЕ Гноме LXDE, их возможно включить с первого запуска
— собственная модификация загрузчика grub4dos c поддержкой кнопок управления в граф. режиме.
— загрузка по сети.
— возможность превратить систему в сервер с ftp smb nfs dhcpd router freenx(терминальный сервер) pxe(загрузка тонких клиентов) sshd hostapd через правку одного ini файла

мои возможности ограничены тем временем что у меня остаётся
Фактически остаётся чуть больше, чем требуется для поддержания сборки в текущем состоянии, выпуски сборок происходят раз в месяц.
Развитие по-настоящему будет тогда, когда будут разработчики вроде Антона (neobht) и Александра (betсher), готовые взяться за что-то и довести это до рабочего решения.

Как настоящий openSource project здесь всё делается свободно.
С ответственностью за всё хорошее и плохое, как водится — GPL.

 В полном виде дистрибутив занимает гиг ссылка на зеркало или ссылка на бт трэкер поскольку сейчас за основу принят дистрибутив rosa lts (long-term-support) и fresh, то из доступных дэсктопов — gnome. kde. lxde.
если интересно взглянуть на код или посодействовать — заходите на github.com/magos-linux, основное общение происходит на форуме.
Последняя сборка доступна на торрент-трэкере.

в qemu — лучше включить KVM, в virtualbox поддержку PAE.

magos-linux

в параметрах загрузки можно написать
no3ddesktop, xdriver=fbdev
чтобы отключить compiz, если нет его поддержки

magos-linux magos-linux

в зависимости от железа и загружаемых модулей, загрузка отнимает определённое время

magos-linux

это «не-лтс» iso образ сегодняшнего выпуска, я дал 2 гига и 4 ядра виртуалке, загрузился примерно за полторы-две минуты, модуль ускорения, разрабатываемый neobht, ускоряет это время до 20 секунд, betcher выложил сегодняшний релиз на трекер

Happy Linux!

P.S.
ссылки и описание также доступны в вики
github.com/magos-linux/

ссылка на оригинал статьи http://habrahabr.ru/post/195710/

Концептуальная модель индивидуального подхода к преподавателям и студентам при организации и планировании учебного процесса в вузе

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

Развитие средств телекоммуникаций позволяет экспертам прогнозировать появление полноценных возможностей приобретения нужных знаний, навыков и компетенций по индивидуальным траекториям обучения в любом возрасте и в любой точке пространства. Подобная концепция потребует от вузов такого планирования и организации учебного процесса, когда на первом месте будут стоять не планы, а желания студентов и возможности преподавателей. Такой подход имитирует законы рынка – как преподаватели предлагают набор курсов, а студенты изъявляют желание их изучать, так и студенты выставляют запросы на формирование дисциплин с определенными компетенциями и содержательной частью, а преподаватели данные курсы разрабатывают.

Предлагаю на ваш суд концептуальную модель индивидуального подхода к преподавателям и студентам при организации и планировании учебного процесса в высшем учебном заведении.

image

На первом шаге студент должен ознакомиться со своим базовым рабочим учебным планом и, проанализировав его, сформировать список дисциплин, которые он планирует изучать в следующем учебном году. Все студенты должны видеть каков общий поток обучающихся, проявивших желание изучать выбранную дисциплину на текущий момент. Также, студент вправе предложить к изучению дисциплину, которая не ведется в университете. К дисциплине необходимо указать примерное описание, содержание и желаемый набор компетенций. Эту дисциплину, которая официально еще не утверждена и не ведется, студенты могут также выбрать как желаемую к изучению.

На втором шаге уже преподаватель оценивает ожидаемый контингент обучающихся на следующий учебный год, их рабочие планы, а также студенческий список желаемых к изучению дисциплин. На основе этой информации, преподаватель формирует свою учебную нагрузку на следующий учебный год: указывает минимально и максимально возможную учебную нагрузку; формирует примерные потоки с указанием максимальной и минимальной численности студентов; указывает других преподавателей-ассистентов по видам проводимых занятий. В это же время он создает новые учебные курсы.Для каждой дисциплины преподаватель может указать список альтернативных дисциплин, которые ведутся в университете, либо запрашивались студентами как новые. Также, к дисциплинам дается подробная аннотация, формируемые компетенции, пререквизиты, а также материально-технические ресурсы и организационные требования к курсу. Следует отметить, что преподаватель должен формировать учебную нагрузку «с запасом» — для альтернативного выбора студентам. Альтернативная нагрузка должна быть не меньше чем заявляемая минимальная нагрузка на преподавателя.

По результатам формирования примерных потоков преподавателями система генерирует учебные потоки для последующей регистрации на дисциплины студентами. Все недостающие обязательные потоки создаются руководством кафедры. Заведующий кафедрой отслеживает процесс формирования индивидуальных учебных нагрузок и контролирует, чтобы студенты имели возможность выбрать не только дисциплины обязательной и вариативной части, но и альтернативные.

На следующем этапе открывается регистрация студентов на дисциплины. Студент, в соответствии с финансовыми возможностями, с учетом требований по максимальной и минимальной учебной нагрузке, составляет индивидуальный учебный план на следующий учебный год. Студент знакомится с каталогом дисциплин: смотрит описание, формируемые компетенции, историю модификации курса, статистику по обучению и успеваемости, а также отзывы завершивших изучение курса. Выбор дисциплин регулируется согласно расставленным пререквизитам. Обучающийся имеет право изучить дисциплину в обход требований по пререквизитам, если сможет подтвердить набор знаний и/или компетенций, необходимых для изучения выбранного курса. Решение принимается специальной комиссией профильной кафедры. Для составления рационального и оптимального индивидуального учебного плана обучающийся может воспользоваться помощью консультанта.

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

После завершения периода регистрации на дисциплины, запускается процесс проверки учебных потоков на качество, по результатам работы которой, вносятся корректировки в учебную нагрузку, нерентабельные потоки расформировываются (и уничтожаются). Тьютор (наставник) отрабатывает с каждым учащимся, не завершившим удачно процесс регистрации на дисциплины индивидуальную траекторию обучения.

По окончании процесса регистрации (перерегистрации) на дисциплины, формируются, печатаются и подписываются регистрационные формы на каждого обучающегося. На основе регистрационной формы формируется индивидуальный учебный план студента.

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

Индивидуальная траектория обучения вносит корректировки в организацию учебного процесса: теперь не нужно формировать приказ для перевода студента с курса на курс. При формировании индивидуальной траектории обучения, при откладывании изучения некоторых дисциплин на другой срок, студент видит в реальном времени, как меняется его индивидуальный учебный план: изменяется примерный срок обучения, учебная нагрузка на каждый год, а также может управлять финансовым вопросом.

Таким образом, в университете формируется банк дисциплин и слушателей, а также появляется возможность объективной оценки соответствия содержания учебных программ требованиям работодателей.

P.S.: В данной статье намеренно не упоминаются средства реализации, но вполне закономерно прослеживается необходимость применения автоматизированных информационных систем.

ссылка на оригинал статьи http://habrahabr.ru/post/195840/