Установка FreeBSD 10.X и настройка установщика пакетов и портов

👁 59 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Вопрос:
Так, как же установить FreeBSD 10.X  и настроить установщик — pkg команду?
Ответ:
Никак! Снеси это ГОВНО и больше не прикасайся, если хочешь сохранить время и нервы 🙂 !

Замечание. Если вы были обижены этой новостью, то берете веревку, мыло, открываете дверь ванной, завязываете веревку к люстре, смазав мылом, делаете на другом конец ошейник и наслаждаетесь…Так мир избавиться от извращенцев 🙂

Вызов кода C# из JavaScript

👁 211 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

При разработке JavaScript — приложений на платформе .NET очень часто, даже не очень, а требуется использовать JavaScript — функции вызова кода C#. Так как JavaScript не умеет пользоваться файловой системой не может работать с БД, то нам необходим код C#, который подгрузит данные из файла, запишет в файл, почитает и перезапишет данные в БД, обработает методами .NET данные и т.д.
Есть 2 похода того, как это сделать:

  • использовать специальный метод JS window.external, который будет содержать метод, определяемый в классе COM — объекта;
  • использовать ASP.NET страницы или любого другого серверного языка и подгрузить их через Ajax — запросы.

В данном посте рассмотрим первый вариант. Ниже представлен класс, который мы определяем , как видимый COM — объект

 

namespace MyApp
{
    [ComVisible(true)] //Устанавливаем как видимый COM
    public class ScriptClass
    {
        public ScriptClass()
        {
        }
        //Данный метод будем вызывать из JS
        public void readFile()
        {
            MessageBox.Show("File Reading!");
        }
    }
}

Далее нужно установить параметры для браузера, который мы используем в проекте

WebBrowser webBrowser = new WebBrowser(); 
webBrowser.ObjectForScripting = new ScriptClass(); 
webBrowser.Navigate("http://websofter.ru/");

Теперь, чтобы запустить данный код из JS, нам надо написать в обработчике такой код

window.external.readFile();

Использование JavaScript в WebBrowser .NET/C#

👁 503 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 4,00 из 5)
Загрузка...

При использовании JavaScript в .NET объекте WebBrowser нужно учитывать некоторые ньюансы, связанные с загрузкой страницы. Для того, чтобы выполнить какой-то JavaScript — код необходимо проверить загрузку страницы. Простое решение — это использование в C# специального слушателя события — WebBrowser.DocumentCompleted, который вызывается, когда страница полностью загружена.

Пример вызовава JavaScript — кода из C#

Ниже дан пример его использования. Пусть у нас есть HTML сраница index.html со следующим JavaScript — методом, который определен в head

<script>
	function runScript(){
		alert("Hello World!");
	}
</script>

Тогда вызов данного метода через C# будет выглядеть вот так

public MyForm()
{
//...
//Сначала определяем новое событие для браузера и передаем имя обработчика
            string appDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
            webBrowser.Url = new Uri(Path.Combine(appDir, @"pages\index.html"));
  webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(runWebScripts);
}

//Далее, в классе определяем новый обработчик
void runWebScripts(object sender, WebBrowserDocumentCompletedEventArgs e)
{
   webBrowser.Document.InvokeScript("runScript", new object[] { });
}

 Пример создания JavaScript — кода и его запуска из C#

Теперь посмотрим как создать новый элемент в DOM через C# и создать в нем код JavaScript

public MyForm()
{
//...
//Сначала определяем новое событие для браузера и передаем имя обработчика
            string appDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
            webBrowser.Url = new Uri(Path.Combine(appDir, @"pages\index.html"));
  webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(runWebScripts);
}

//Далее, в классе определяем новый обработчик
void runWebScripts(object sender, WebBrowserDocumentCompletedEventArgs e)
{

            HtmlDocument doc = webBrowser.Document;
            HtmlElement head = doc.GetElementsByTagName("head")[0];
            HtmlElement s = doc.CreateElement("script");
            s.SetAttribute("text", "function sayHello() { alert('hello'); }");
            head.AppendChild(s);
            webBrowser.Document.InvokeScript("sayHello");

}

Мы добаляем в тег head новый элемент script и устанавливаем в качестве его атрибута text JavaScript — код и далее вызываем этот код с помощью метода InvokeScript

Подключение jQuery в WebBrowser через C# в виде гиперссылки

Давайте посмотрим, как использовать библиотеку jQuery в своем проекте на C#. Для этого нам необходимо создать новый элемент script и передать в атрибут src значение ссылки, для примера подключим библиотеку из стандартной ссылки Google

public MyForm()
{
//...
//Сначала определяем новое событие для браузера и передаем имя обработчика
            string appDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
            webBrowser.Url = new Uri(Path.Combine(appDir, @"pages\index.html"));
  webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(runWebScripts);
}
//Далее, в классе определяем новый обработчик
void runWebScripts(object sender, WebBrowserDocumentCompletedEventArgs e)
{
            //Получаем доступ к тегу head
            HtmlDocument doc = webBrowser.Document;
            HtmlElement head = doc.GetElementsByTagName("head")[0];

            //Подключаем библиотеку
            HtmlElement jQuery = doc.CreateElement("script");
            jQuery.SetAttribute("src", "http://code.jquery.com/jquery-latest.min.js");
            head.AppendChild(jQuery);
            
            //Далее запускаем код, содержащий jQuery
            HtmlElement script = doc.CreateElement("script");
            script.SetAttribute("text", "function setRedColor() { $('body').css({ 'background-color': 'red' }); }");
            head.AppendChild(script);

            //Вызываем метод, содержащий код jQuery
            webBrowser.Document.InvokeScript("setRedColor");

}

Подобным образом можно подключить не только jQuery библиотеку, но и любой удаленный JavaScript файл.

Подключение jQuery в WebBrowser через C# из локального хранилища

Если нам необходимо подгрузить jQuery или любой JavaScript — файл локально, то тут необходимо учитывать некоторые особенности, связанные с jQuery, так как при локальном подключении у вас может выскочить ошибка такого рода: Object doesn’t support property or method ‘defineProperty’, который означает: Объект не поддерживает свойство или метод ‘defineProperty’. Что непонятно, так это то, что при подключении через удаленную гиперссылку эта ошибка не выводиться и браузер работает нормально. Данная ошибка актуальная для версий IE 10 — 11 и выше, возможно. В IE он поддерживается, а в IE 8 — ограниченно. Решением данной проблемы является использование тегов для переключения браузера в режимы совместимости с ранними версиями. Подробно про это написано в официальной статье Microsoft «Specifying legacy document modes»

Из данной статьи следует, что для совместимости нужно использовать мета — тег

<meta http-equiv="x-ua-compatible" content="IE=edge" />

Запись атрибута content дает указание на то, с какой версией IE следует иметь совместимость. В нашем случае, данная запись эквивалентна использованию типа документа HTML5 и совместимости с другими браузерами. Это заставит Internet Explorer работать в режиме последней поддерживаемой спецификации документа. Значение «IE=edge» является наиболее полезным для регулярного поддерживания веб-сайтов, которые отрабатываются на совместимость между несколькими браузерами, в том числе Internet Explorer.
Данный тег совместимости необходимо в начале тега head в документе.

Итак, теперь, собственно сам код подключения. HTML документ будет таким

 

...
<head>
    <meta http-equiv="x-ua-compatible" content="IE=edge" />
</head>
...

C# — код будет таким

HtmlDocument doc = wbTestEditor.Document;
HtmlElement head = doc.GetElementsByTagName("head")[0];
HtmlElement s = doc.CreateElement("script");
s.SetAttribute("src", Environment.CurrentDirectory + @"\pages\js\jquery-2.1.3.min.js");
head.AppendChild(s);

Свойство Environment.CurrentDirectory содержит корневую папку запускаемой программы, а @ нужен для обработки слэшей в нормальном виде, чтобы не писать как \\. Environment.CurrentDirectory — это тоже самое, если бы мы писали как Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase), но в коротком виде.

Часть 1. Java EE. Интеграция Tomcat 8 и NetBeans 8.2 и создание проекта Hello World

👁 709 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Java EE(Java Platform, Enterprise Edition) — это платформа и набор спецификаций языка Java для серверных проектов на уровне средних и крупных предприятий.

Основное назначение данной платформы — это реализация процессов сетевого обмена информацией через Интернет. Это свободная платформа со свободными программными и инструментальными средствами разработки.

В данной статье будет подробно описано как создать свой первый проект на платформе Java EE.

Что потребуется?

Нам потребуются для этого 3 шага:

  • установить требуемое ПО;
  • интегрировать скачанное ПО;
  • создать проект и развернуть на сервере.

Установка требуемого ПО

Нам потребуется скачать и установить следующий перечень ПО:

  • Tomcat 8 — сервер для запуска проекта Java EE;
  • IDE NetBeans — для создания и развертывания проекта Java EE;
  • Дополнительные модули для NetBeans для поддержки создания проектов JavaME.

tomcay-logo-imgTomcat 8 скачивается с официального сайта Apache. Есть разные варианты установки, это инсталлятор с пошаговой установкой и  архив программы, не требующий инсталляции. Мы скачаем инсталлятор и проследуем подсказкам. После скачивания запускаем инсталлятор, жмем «Next», далее соглашаемся с лицензией и жмем «I Agree» и появится окно

tomcay-inst-next-choose-components

Оставляем все по умолчанию. Если кратко, то «Host Manager» — это менеджер проектов, который помогает развертывать и удалять проекты с сервера Tomcat через браузер. Нам он не нужен, не будем устанавливать, также, и примеры, пример мы сами создадим. Жмем «Next»

tomcay-inst-next-configВ данном окне нам необходимо придумать логин и пароль для нашего сервера, а в пункте «Roles» задать роли для пользователя. По умолчанию там стоит manager-gui и мы добавляем к нему, через запятые, еще две роли: manager-script и manager-admin. Они нам будут необходимы при интеграции с NetBeans, остальное оставляем как есть и жмем «Next» появится окно выбора папки Java -машины, если Tomcat нашел эту папку,  у меня она находится по пути «C:\Program Files\Java\jre1.8.0_45», то оставляем, если нет, то выбираем. Жмем «Next» и выйдет окно выбора папки установки, я оставил по умолчанию «C:\Program Files\Apache Software Foundation\Tomcat 8.0». Жмем «Next» и пойдет процесс установки

tomcay-inst-next-finish

После окончания оставляем галочку «Run Apache Tomcat» для запуска, а с «Show Readme» снимаем, жмем «Finish» и начнется запуск сервера. Мы можем в любой момент остановить и запустить сервер через Monitor Tomcat, который будет доступен трее в процессе запуска

tomcay-inst-next-tree

Если сервер запущен, то на значке будет зеленый треугольник, а если остановлен — красный. Если мы вышли из монитора нажав на пункт Exit, то сможем заново запустить через «Пуск» в категории «Apache Tomcat 8.0 Tomcat8»

tomcat-monitor-app-puskНа данный момент с Tomcat закончили. Переходим к следующей программе.

 

netbeans-logo-img

IDE NetBeans скачиваем с официального сайта NetBeans. При скачивании выбираем PHP — конфигурации с минимальным количеством модулей, остальные мы сам установим

netbeans-download-confПосле скачивания запускаем инсталлятор и следуем подсказкам, оставляя все по умолчанию, если у вас нет других требований.

Все, программы мы установили. Теперь запускаем NetBeans и устанавливаем необходимые модeли для разработки проектов Java EE. Для этого заходим в пункт меню «Tools» > «Plugins»

netbeans-tools-pluginИ в открывшмся диалоговом окне, в раскладке доступных модулей «Available Plugins» выбираем все модули с с категориями Java EE и Java WEB and EE

netbeans-tools-plugins-selectЖмем «Install», соглашаемся со всеми лицензиями и подтверждаем установки. После окончания NetBeans предложит перезагрузиться -соглашаемся и все, мы можем, теперь, через меню создавать стандартные проекты Java EE.

Интеграция Tomcat и Netbeans

В NetBeans, для того, чтобы посмотреть текущие активные серверы, нам необходимо открыть вкладку сервисов. Для этого переходим в пункт меню «Window» > «Services»

service-windowПосле этого откроется новая вкладка сервисов, где в пункте «Servers» мы увидим наш активный сервер Tomcat

nb-active-serversПри при попытке развернуть пункт «Web Applications» выйдет диалоговое окно, которое потребует с нас логин и пароль. Вводим логин и пароль, которые мы устанавливали в процессе установки Tomcat

nb-active-servers-depl-appsи мы увидим все текущие, развернутые, проекты, которые есть у нас на сервере.

На этом все, интеграция закончена. Далее создаем проект Java EE «Hello World».

Создаем проект  развертываем на сервере

Идем в меню «File» > «New Project…»

choose-new-proj-typeВыбираем тип проекта из категории «Java Web» > «Web Application» и жмем «Next»

type-np-tomcat-proj-nameЗадаем имя проекта и жмем «Next»

type-np-tomcat-proj-serverВыбираем наш сервер, версию Java EE и жмем «Finish», так как фреймфорки мы не будем использовать для нашего простого примера.

Структура проекта состоит из нескольких папок

np-tomcat-hw-projВ папке «Web Pages» будут храниться фронтенд — файлы: html, JavaScript, CSS…в папке «META-INF» могут храниться дополнительные библиотеки, в папке «WEB-INF» могут храниться файлы конфигурации. При развертывании проекта сюда, обычно добавляется конфигурационный файл web.xml с дополнительными параметрами обработки запросов. Папке «Source Packages» буде наш Java EE — код, который будет обрабатывать запросы.

Давайте добавим новый пакет «helloworld» с классом «HelloWorld.java» в папке исходников «Source Packages». Кода класса дан ниже

 

package helloworld;
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;
/**
 *
 * @author admin
 */
public class HelloWorld extends HttpServlet {
  public void doGet (HttpServletRequest req,
                     HttpServletResponse res)
    throws ServletException, IOException
  {
    PrintWriter out = res.getWriter();//Создаем поток вывода
    out.println("<html>");
        out.println("<head>");
            out.println("<title>");
                out.println("Hello World Page");//Заголовок страницы
            out.println("</title>");
        out.println("</head>");
    out.println("<body>");
        out.println("<center>");
            out.println("Hello, world!");//Выводим видимую чсть HTML
        out.println("</center>");
    out.println("</body>");
    out.println("</html>");
    out.close();//Закрываем поток вывода
  }
}

В папку «META-INF» добавляем фал конфигурации web.xml со следующим содержимым

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http:/java.sun.com/dtd/web-app_2_3.dtd">
    <welcome-file-list>
        <welcome-file>
            index.html
        </welcome-file>
    </welcome-file-list>
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>helloworld.HelloWorld</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>hello

Данный код сообщит нашему серверу, чтобы при обращении к странице http://localhost:8080/hello/ у нас был выполнен Java — код из класса HelloWorld.java.
Давайте, изменим и код файла index.html для наглядности перепишем его содержимое так

<!DOCTYPE html>
<html>
    <head>
        <title>Hello World!</title>
        <meta charset="UTF-8">
       <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <div>It is the "Hello World" Java EE project!</div>
    </body>
</html>

index.html будет запрошен по умолчанию при обращении к странице через обычный адрес http://localhost:8080/HelloWorld/, так как мы задали это правило через web.xml. В итоге наш проект получится вот таким

nb-tomcat-ready-project
Проект готов, нам осталось его построить, развернуть и запустить. Для этого наводим мышкой на имя проекта и ЛКМ

nb-tomcat-ready-build-depl-runвыбираем сначала пункт «Build», потом «Deploy», что значит «Развернуть», потом «Run» и среда запустит страницу в браузере через адрес http://localhost:8080/HelloWorld/. По умолчанию у нас запуститься index.html, так как мы еще задали еще одну страницу http://localhost:8080/HelloWorld/hello/ через web.xml, который обрабатывает созданный нами класс, то давайте взглянем и на ее результат

nb-tomcat-ready-class-resКак видим, все отлично работает и код Java запускается через наш сервер, выводя HTML — код в виде страницы.

Дистрибутив сервлета «*.war» и развертывание вне среды NetBeans

Выше мы описали как развернуть проект внутри среды IDE NetBeans, это удобно в процессе проектирования, но что, ели нам требует закинуть на сервер Tomcat уже готовый проект? Давайте рассмотрим это поподробнее. Когда мы строим проект через команду «Build», то NetBeans создает конечный файл — дистрибутив, который является законченной реализацией проекта. Данный дистрибутив доступен в 2-х видах в 2-х папках проекта, это:

  • HelloWorld\build\web;
  • HelloWorld\dist.

В папке «HelloWorld\build\web» проект находиться в разархивированном виде. Это уже рабочий сервлет(так называются программы Java EE), который можно уже закинуть на сервер, а в папке «HelloWorld\dist» дистрибутив находиться в виде «HelloWorld.war». Формат «*.war» — это обычный «*.zip» формат и можно открыть архиватором и внутри него будет тоже самое, что и в папке HelloWorld\build\web. Для запуска на сервере можно использовать оба, но в архиве используют когда запускают сервлет на удаленном сервере, так как это удобно, когда весь сайт закачивают одним архивом.

Давайте развернем дистрибутив на наш сервер вне среды и чтобы наш проект был доступен не через адрес http://localhost:8080/HelloWorld/, а через адрес http://localhost/. Для этого переходим в корневую папку Tomcat и в папку готовых сервлетов «C:\Program Files\Apache Software Foundation\Tomcat 8.0\webapps» в данной папке у нас будут подпапки

nb-tomcat-apps-dirДанные папки — это развернутые приложения(сервлеты) по умолчанию. Особо следует выделить папку ROOT. Данная папка содержит приложение, котрое буде запускаться по умолчанию, т.е. по адресу http://localhost:8080/   и мы должны наш дистрибутив закинуть туда, удалив ее содержимое. После того, как мы закинули содержимое дистрибутива нам необходимо указать серверу Tomcat на необходимость обрабатывать запросы через порт 80, а не через 8080. Это даст нам возможность обращаться к хосту по адресу http://localhost/ для этого открываем файл server.xml в папке «C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf»  и заменяем порт 8080 на 80 в

    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

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

nb-tomcat-depl-proj-localhostНа этом запуск примера закончена! 🙂

LangZilla — интерактивный переводчик для сайта

👁 130 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

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

  • можно сделать копию сайта в разных папках www.domen.com/ru и www.domen.com/en и т.д.;
  • можно использовать api переводчика от Google Translate;
  • можно использовать код на JavaScript и определять страну и язык самостоятельно при помощи свойства window.navigator.languages на JavaScript;
  • наконец, можно использовать готовое и быстрое решение — LangZilla.

Описание

LangZilla — это бесплатный JavaScript автопереводчик сайтов, с возможностью расширять языковую базу при помощи языковых файлов.

Что может LangZilla? Вот ее функции:

  • автоматически определять страну клиента и дает ему его перевод;
  • возможность определять любой язык при помощи json — файлов;
  • возможность переводить внутри тегов HTML;
  • возможность переводить слова в атрибутах тегов;
  • возможность перевести часть текста внутри до содержимого в теге;
  • возможность перевести текст после содержимого в теге;
  • возможность запустить пользовательский кода, определив функцию обратного вызова;
  • возможность использовать в переводе теги HTML;
  • возможность определять собственные пути к картам перевода и определять для них иконки.

Использование

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

  • папка loc содержит все файлы перевода, которые вы захотите добавить. Причем, имя файла должно соответствовать коду языка;
  • папка images содержит ресурсы плагина, такие как иконки языков и т.д.;
  • файл langzilla.js — основной файл плагина, его необходимо подключить к нашей странице, где требуется перевод.

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

 


<script src="js/jquery-2.1.4.min.js"></script>
<script src="src/langzilla.js"></script>

Далее нам необходимо создать карты языка в формате .json и переместить их в папке loc, откуда их будет читать наш плагин перевода. Название карты языка должно соответствовать кодовому определению языка в формате, который определен для свойства window.navigator.languages, данный формат языков для браузеров опеределен по стандарту RFC 4646. Примеры валидных языковых кодов включают «en», «EN-US», «FR«, «es-ES», «ru-RU» и т.д. Некоторые можно посмотреть здесь. После того, как языковую карту создали и дали ему валидное имя, соответствующее кодовому названию языка, нам необходимо написать код запуска с регистрированными языковыми картами. Простейший код будет выглядеть вот так:

jQuery(function(){
    $("body").createLang({//определяем тег, в которую добавятся кнокпки
        locals:{
            "en-US":"src/images/en.png",//подключаем и регистрируем для языка иконку кнопки
            "ru-RU":"src/images/ru.png"//подключаем и регистрируем для языка иконку кнопки
        },
        locPath: "src/loc/"//указываем путь к папке языковых карт
    });
});

Теперь нам необходимо заполнить языковые карты. Допустим мы создали языковые карты ru-RU.json для русского языка и en-US.json — для английского языка. Запись в языковых картах поизводиться в формате JSON, ниже представлены примеры заполнения для русского

{
    "lzTitle": "LangZilla|Русский",
    "lzMenuHome": "Главная",
    "lzMenuBlog": "Блог",
    "lzMenuGallery": "Галерея",
    "lzMenuAbout": "О нас",
    "lzMenuContact": "Контакты",
    "lzMenuItem1": "Проектируем для WEB и дизайн",
    "lzMenuItem2": "Проектируем для гаджетов",
    "lzMenuItem3": "Проектируем для ПК",
    "lzMenuItem4": "Проектируем для микроэлектроники",
    "lzTextAboutAppend": "Вы можете использовать и изменять наш плагин для личного и коммерческого использования.[:]append",
    "lzTextAboutPrepend": "Бесплатный плагин перевода от [:]prepend",
    "lzImageEnRU": "images/langzilla-ru.png[:]attr=src",
    "lzHeaderPopularPost": "Популярные посты",
    "lzHeaderCategories": "Категории",
    "lzHeadDef": "Заголовок текста",
    "lzHeadReadMore": "Читать далее",
    "lzHeadNext": "дальше"
    
}

и для английского

{
    "lzTitle": "LangZilla|English",
    "lzMenuHome": "Home",
    "lzMenuBlog": "Blog",
    "lzMenuGallery": "Gallery",
    "lzMenuAbout": "About",
    "lzMenuContact": "Contact",
    "lzMenuItem1": "We develop for WEB and Design",
    "lzMenuItem2": "We develop for Phones",
    "lzMenuItem3": "We develop for PC",
    "lzMenuItem4": "We develop for Microelectronic",
    "lzTextAboutAppend": "You can use and modify the our plugin for both personal and commercial use.[:]append",
    "lzTextAboutPrepend": "Free translate plugin by [:]prepend",
    "lzImageEnRU": "images/langzilla-en.png[:]attr=src",
    "lzHeaderPopularPost": "Popular Post",
    "lzHeaderCategories": "Categories",
    "lzHeadDef": "Text Heading",
    "lzHeadReadMore": "Read more",
    "lzHeadNext": "next"
}

Названия переменных «lzTitle», «lzMenuHome», «lzMenuBlog», … произвольные и они должны быть одинаковы во всех языковых картах, в данном случае, и для ru-RU.json и en-EN.json иначе вы не получите перевод.

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

langzilla-btn-imgДля этого нужно создавать или добавлять классы к тегам, в которых есть содержимое, требующий перевода. Названия глассов соответствуют названиям переменных в языковых картов, например для переменно «lzMenuHome» класс будет написан как class = «lzMenuHome» и т.д. Пример этого показан ниже

<div class="menu">
	<ul>
		<li><a class="lzMenuHome" href="index.html"><!--Home--></a></li>
		<li><a class="lzMenuBlog" href="#"><!--Blog--></a></li>
		<li><a class="lzMenuGallery" href="#"><!--Gallery--></a></li>
		<li><a class="lzMenuAbout" href="#"><!--About--></a></li>
		<li><a class="lzMenuContact" href="#"><!--Contact--></a></li>
	</ul>
</div>

Готовый результат можно посмотреть на странице плагина.

Фильтры действий

Фильтры действий — это дополнительное указание для плагина как обработать данный текст перевода внутри тега. Все фильтры действий записываются после текста перевода через разделитель [:]. На данный момент существует следующий список фильтров действий:

  • [:]prepend — добавляет текст перевода перед содержимым внутри тега;
  • [:]append — добавляет текст перевода  после содержимого тега;
  • [:]html — добавляет текст перевода внутрь тега, удаляя содержимое. Данный фильтр применяется по умолчанию, если не указаны выше описанные фильтры принудительно;
  • [:]attr=attributeName — добавляет текст перевода в качестве значения атрибута;

Как вы заметили, данные фильтры идентичны с методами jQuery и выполняют похожие действия.

Дополнительные параметры LangZilla

LangZilla имеет дополнительные параметры для гибкой настройки. Ниже представлен весь список этих параметров:

  • position — определяет поведение кнопок на странице и соответствует CSS значениям position. По умолчанию кнопки находятся на верхнем правом углу и этот параметр установлен как «absolute»;
  • top — расстояние до кнопок с верхней части страницы в пикселях. По умолчанию равен 0;
  • right — расстояние до кнопок от правой стороны страницы. По умолчанию равен значению 80;
  • locals — параметр для регистрации языковых карт и определения для них кнопок. При использовании данный параметр должен быть определен;
  • locPath — путь к языковым картам относительно страницы, к которому подключен плагин. По умолчанию содержит значение «langzilla/loc/»;
  • callBack — функция обратного вызова. Если требуется использовать пользовательский код, который бы выполнялся при каждой смене языка, то можно смело ею пользоваться.

Это все, описание окончено. Удачного пользования!

 

Особенности использования AVR на практике

👁 73 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

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

Вопросы потребления тока
Ток, потребляемый микроконтроллером AVR, в среднем, варьирует в пределах 5 – 15 мА, без учета внешних устройств, которые запитываются от ножек микроконтроллер. Потребляемый ток, во многом, может зависеть от тактовой частоты генератора, от напряжения питания. Диаграммы зависимостей уже вычислены для всех моделей и можно посмотреть в даташите микроконтроллера. Ниже представлена диаграмма зависмости тока некоторых моделей Mega

avr-mhz-voltage-depend

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

Внешние дополнительные резисторы
Почти каждый вывод микроконтроллера AVR имеет встроенный внутренний Pul App (подтягивающий) резистор, который необходим для реализации кнопок, но иногда, в критических случаях, нужен и внешний резистор 2 – 5 кОм, а если критично еще и к потреблению энергии, то уже нужно увеличить сопротивление до 10 – 20 кОм. Данную процедуру используют, обычно, к выводу RESET и при прошивке микроконтроллера через выводы MISO и MOSI. Если не предпринимать эти меры, то высока вероятность, что будут срабатываться ложные внешние прерывания, возможен самопроизвольный перезапуск микроконтроллера, а при больших помехах возможна порча и самой программы.

Помехозащищенность
Микроконтроллеры AVR хорошо защищены по линии «земли», но плохо переносят помехи на шине питания. Поэтому не будет лишним, если добавить керамический конденсатор, порядка 0.1 – 0.5 мкФ и нужно беспокоиться о стабильном напряжении в блоках сетевых адаптеров, если через них запитывается устройство.

Разновидности в семействе AVR

👁 79 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Подсемейства

Семейство AVR можно подразделить на 5 основных подсемейства:

  • Classic – старые модели семейства, которые уже сняты с производства;
  • Tiny – модель с небольшой памятью и периферией, является заменой последней модели Classic AT90S2313;
  • Mega – модель с максимальными возможностями;
  • XMEGA – модели с повышенным быстродействием низким потреблением электричества;
  • AVR32 – модели для высоконагруженных и высокоскоростных устройств.
    Модели Tiny сохраняют преемственность от моделей Classic, причем, на аппаратном уровне обе модели, Tiny и Mega, могут быть совместимы с семейством Classic при установке специального бита совместимости.

Модели Tiny предназначены для более простых и дешевых устройств, так как имеют диапазон Flash – памяти 1 – 8 Кб и размешаются, в основном, в корпусах с 8 – 20 выводами, кроме модели ATtiny28. Кроме того, подсемейство данной модели имеет модель ATtiny2313, который сохраняет преемственность самой удачной версии модели подсемейства Classic – AT90S2313.
Модели Mega предназначены для более производительных устройств, так как содержат в себе Flash – память объемом 8 – 256 Кб, а корпус может иметь 28 – 100 выводов, также и внутренняя периферия у моделей Mega более богата и все это сказывается на цену моделей данного подсемейства – они дороже, чем Tiny.
Выше перечислены основные семейства, но следует учитывать что в каждом подсемействе есть и специализированные модели:

  • AT90USBxxxx – для специализированной разработки устройств связи с интерфейсом USB;
  • AT90CANxxx — для специализированной разработки устройств связи с интерфейсом CAN;
  • ATMega329 – для специализированной разработки устройств с использованием ЖК – дисплеев;
  • с беспроводным интерфейсом ZigBee для предприятий и сфер торговли;
  • с режимом picoPower, которые работают на сверх малых напряжениях – от 1.8 В. Такие модели маркируются добавлением буквы «P» в конец записи модификации;
  • с режимом выдержки высоких температур – версии Automotive.

Модели XMEGA могут иметь низкое потребление в пределах 1.8 – 3.6 и при тактовой частоте генератора 32 МГц. Данные модели имеют продвинутые возможности, такие как работа в автономном режиме, когда ядро отключается, а остальные части работают, могут иметь продвинутый режим picoPower и встроенные модули криптографии.
Модели AVR32 имеют 32 – х битную архитектуру и предназначены для высоконагруженных и высокоскоростных устройств, которые требуют проигрывание потокового видео или распознавание образов в реальном времени.

Типы корпусов

Корпуса микроконтроллеров могут иметь различные формы в зависимости от внешних характеристик устройств, так как на начинку это не влияет.

img-avr-corpuse-typesПо своей разновидности, корпуса стандартизированы и могут маркироваться как:

  • PDIP – большой корпус с выступающими выводами. На плате монтируется через сверление отверстий для ножек;
  • TQFP – как правило, ножки выступают через все стоны корпуса, а на плате монтируется как SMD – компонент;
  • SOIC – версия PDIP – корпуса, но на плате монтируется как SMD – компонент;
  • QFN – монтируется как SMD –компонент, а ножки не выступают и представляют из себя металлические полоски с нижней стороны корпуса для прямого спаивания на плате к дорожкам.

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

Модификации

Также, семейство может отличаться модификациями:

  • буква L на корпусе может означать о расширенном диапазоне питания в пределах 2.7 – 5.5 В;
  • отсутствие данной буквы означает верхний диапазон 4.5 – 5.5 В.

Микроконтроллеры версии L менее быстродействующие, а верхний диапазон , как правило, ограничен 8 МГц, когда как обычные версии могут работать в диапазона 16 МГц – 20 МГц.

Характеристики семейства AVR

👁 92 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

AVR – это семейство 8 — битных микроконтроллеров от компании Atmel. Популярность данного семейства, в основном, заключается:

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

Пожалуй, это основные параметры, которые определяют успех любого производителя микроконтроллеров, чем ATMEL с семейством AVR и отличается. Конечно, есть конкуренты у данного семейста – PIC от Microchip, которые держат свою нишу малобюджетных дешевых микроконтроллеров на все случаи радио – жизни.
Чем же характеризуются технические возможности микроконтроллеров семейства AVR? Если кратко, то характеристики такие:

  • производительность порядка 1 MIPS(Million of Instruction Per Sets) при тактовой частоте генератора в 1Мгц. Это позволяет выполнять 1 млн операций за 1 такт тактового генератора. Такая производительность обусловлена RISC архитектурой микроконтроллера и тщательно проработанной системой команд ;
  • усовершенствованная архитектура RISC (Reducing Instruction Set Computing – вычисления с сокращенным набором команд) – предполагает набор компактных и быстро исполняющихся команд вычисления;
  • наличие 32-х регистров общего назначения (РОН). РОН нужны для быстрой операции чтения и записи, после операции с данными без обращения к памяти. Так как обращение к памяти занимает больше тактов, чем к РОН, то это дает преимущество в скорости выполнения кода;
  • отдельные шины команд и данных. Данный поход отвечает Гарвардской архитектуре и отличается от классической модели хранения команд и данных в ПК по принципу фон Неймана, когда одна шина для одной памяти, где хранятся и команды и данные. Гарвардская архитектура позволяет ускорить процесс выполнения команд и операции с данными, так как раздельная шина позволяет выполнять все эти действия параллельно, в большинстве случаях, за один такт;
  • Flash – память программы. Дает возможность прямо в готовом изделии перепрограммировать (перепрошить) кристалл через внутрисистемный последовательный канал. Flash – память AVR позволяет выполнять, в пределах, 10 000 циклов стирания/записи;
  • возможность сохранять сторонние данные в энергонезависимой памяти EEPROM. Данная память использует, как дополнительный накопитель для хранения пользовательских данных программы. На уровне готового устройства это могут быть настройки, текст, данные датчиков и т.д. Запись в данную память можно произвести как программно, так и через внешний интерфейс обмена данных SPI. EEPROM в AVR позволяет выполнять, в пределах, 100 000 циклов стирания/записи;
  • сторожевой таймер. Нужен для автоматизации выполнения операций через определенные промежутки времени;
  • периферия для работы с аналоговыми сигналами. К ним можно отнести 10-ти разрядный, многоканальный АЦП и аналоговый компаратор;
  • таймеры – счетчики для подсчитывания как внутренних, так и внешних импульсов. В AVR может быть как минимум быть 16-ти разрядный и один или два 8-ми разрядных таймеров-счетчиков, которые могут работать в режиме 8-ми, 9-ти, 10-ти и 16-ти битовой широтно-импульсной модуляции (PWM);
  • набор модулей последовательной передачи информации , такие как SPI, TWI(I2C), UART(USART);
  • имеет внутренний тактовый генератор, позволяющий работать без внешнего тактового генератора. Пределы использования внешнего тактового генератора : от 0Гц до 16 – 20 МГц
  • встроенный детектор питания, реагирующий на падение напряжения;
  • большое количество режимов энергосбережения с возможностью выхода из спящего режима, как по внешнему прерыванию, так и по сторожевому таймеру.
  • диапазон напряжений от 2.7 до 5.5 В. В критических случаях заработает и при диапазоне 1.6 до 6.0 В;

C/C++ для AVR. Пошаговый курс

👁 150 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Это очередной курс, посвященный изучению программирования микроконтроллеров AVR на языке высокого уровня C/C++. При изучении данного курса будут использовано инструментальное средство программирования IDE Atmel Studio, который содержит в себе редактор исходного кода и отладчик для архитектуры AVR. Помимо этого будет использован симулятор Proteus 8 для анализа работоспособности программы.

Данный курс содержит описание архитектуры, который отвечает требованиям программирования на языке высокого уровня C/C++. Для глубокого понимания можно обратиться к курсу Assembler для AVR. Пошаговый курс

Assembler для AVR. Пошаговый курс

👁 135 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Данный курс материалов пошагово описывает использование микроконтроллеров AVR на низкоуровневом языке программирования AVR. В роли инструментального средства выступает Atmel Studio — родная для AVR IDE, позволяющая программировать и отлаживать код, написанный как на Assembler, так и на C/C++. В роли симулятора будет использованы как родной отладчик Atmel Studio, так и Proteus, но можно использовать и готовую плату — дело по вкусу. Материалы будут пополнятся по мере появления личного времени авторов блога.

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

Шаг 1. Обзор AVR

Шаг 2. Концепция языкового ассемблера в микроконтроллерах

Шаг 3. Программирование и тестирование AVR

Шаг 4. Регистры в AVR

Шаг 5. Порты в AVR

Шаг 6. Память SRAM в AVR

Шаг 7. Переходы и ветвления в программе

Шаг 8. Вычисления в программе

Шаг 9. Планирование проектов на AVR

Шаг 10. Периферия AVR