По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Если вы относительно новичок в программировании, то у вас наверняка могут возникнуть вопросы – с чего лучше начать, что следует изучить в первую очередь, что на самом деле означает «front-end разработка» и так далее? В этой статье я поделился семью вопросами, которые возникли у меня при первых попытках программировать примерно. И я постарался ответить на них как можно более подробно, чтобы помочь вам начать свое путешествие в мир программирования. Какой язык программирования я должен изучить в первую очередь? Как мне кажется, это не имеет такого большого значения! Конечно, есть языки, которые новичкам будет освоить легче, например, Python, Ruby или JavaScript. Но большинство языков программирования очень схожи, и их основные концепции очень похожи. В большинстве случаев синтаксис (ключевые слова, структура и семантика) языков различаются гораздо больше, чем основные понятия. Как только вы познакомитесь с основами любого языка программирования, вам будет намного проще освоить другой язык. Также очень вероятно, что язык, который вы изучите первым, не станет тем, который вы будете использовать в конечном итоге в работе. Например, я когда-то начинал с Python, баловался JavaScript и PHP, но сейчас для работы я использую Java. Конечно, вряд ли вы захотите начать с изучения какого-то непонятного и сложного языка, который мало где используется. Однако вы не ошибетесь, если начнете с популярного современного языка, такого как Python, Java, Ruby и JavaScript. Самое главное не в том, какой язык вы будете изучать первым, а в том, что вы собственно начинаете и постепенно улучшаете свои навыки со временем. Если вкратце, то сосредоточьтесь на освоении основных концепций программирования, а не на синтаксисе конкретного языка. Как классифицируются языки программирования? Хотя большинство языков программирования имеют много общего, существует множество способов их организации по различным категориям. Эти категории используются для группировки языков с определенной функцией или характерной чертой, несмотря на то, что два таких языка могут очень сильно отличаться друг от друга. Вот 5 самых полезных категорий языков программирования, о которых следует знать новичкам: компилируемые языки программирования; интерпретируемые языки программирования; языки программирования со статической типизацией; языки программирования с динамической типизацией; объектно-ориентированные языки программирования. Ниже приведено краткое описание каждой категории, а также краткий список языков для них. Компилируемые языки программирования Компилируемый язык – это язык, который использует компилятор для преобразования исходного кода (кода, который пишете вы сами) в форму, которую может понять компьютер (часто такую форму называют машинным кодом). Как правило, вывод компилятора сохраняется в одном или нескольких файлах, которые называют исполняемыми файлами. Исполняемые файлы могут быть упакованы для продажи или распространения в стандартных форматах, которые упрощают пользователям загрузку, установку или запуск программы. Важной характеристикой процесса компиляции является тот факт, что исходный код компилируется до того, как программа будет выполнена конечным пользователем. Иными словами, компиляция кода обычно происходит отдельно от выполнения программы. Популярные компилируемые языки: C C++ Java Rust Go Интерпретируемые языки программирования Интерпретируемый язык – это тот язык, который использует интерпретатор для преобразования исходного кода (кода, который пишете вы сами) в форму, которую может понять компьютер. Интерпретатор – это программа, которая берет какую-то часть исходного кода, написанного на определенном языке программирования, преобразует его в форму, понятную компьютеру, и сразу же выполняет его в режиме реального времени. Основное различие между компиляцией и интерпретацией состоит в том, что при интерпретации нет промежутка между преобразованием и выполнением кода – оба эти процесса происходят непосредственно во время выполнения программы, то есть «на лету». А при компиляции преобразование кода происходит до (иногда задолго до) выполнения программы. Популярные интерпретируемые языки: Python JavaScript Ruby Подробнее про компиляцию и интерпретацию можно прочесть в этой статье. Языки программирования со статической типизацией Статическая типизация означает, что типы данных переменных в языке программирования известны и устанавливаются во время компиляции программы. Кроме того, тип данных переменной во время компиляции или выполнения программы меняться не может. Например, каждый раз при создании переменной на языке со статической типизацией вам нужно явно указать тип данных этой переменной. Это может быть целое число, строка, логическая переменная и т.д. Этот процесс называется объявлением переменной. Как только вы объявляете тип данных переменной, она может хранить только этот тип данных на протяжении всего выполнения программы. Популярные языки со статической типизацией: C C++ Java Языки программирования с динамической типизацией Динамическая типизация означает, что типы данных переменных устанавливаются непосредственно во время выполнения программы, или времени выполнения. Типы данных переменных явно не указываются в исходном коде, и переменные могут быть на лету переопределены для хранения значений любого типа данных. Популярные языки с динамической типизацией: Python JavaScript Ruby Объектно-ориентированные языки программирования Объектно-ориентированное программирование (ООП) – это подход программирования, который позволяет программистам создавать некоторые «объекты» и в дальнейшем работать с ними. Объект здесь – это представление или модель чего-либо, что программист должен описать при помощи кода. Это, вероятно, звучит немного абстрактно, а все потому, что это так и есть. Практически все здесь можно смоделировать как «объект» в коде. Объекты часто представляют собой реальные вещи, такие как товары для продажи в магазине или покупатели, покупающие эти товары. Объекты также могут представлять и цифровые объекты, такие как веб-формы, и даже более абстрактные вещи, такие как конечные точки URL-адреса, сетевые сокеты и т.д. Объектно-ориентированно программирование обычно реализуется на языке с использованием классов. Вы можете представлять себе класс как шаблон (или модель) для типа создаваемого объекта. Класс содержит набор атрибутов (свойств и характеристик), определяющих каждый объект класса. Классы также содержат набор методов (функций), позволяющих выполнять какие-либо действия над конкретными объектами класса. Например, класс «Товар» может иметь следующие атрибуты: Артикул товара (уникальный идентификатор каждого товара) Наименование товара (описательное название для каждого товара) Тип товара Цена товара Скидка на товар Как уже было сказано, класс – это всего лишь шаблон для создания объектов. Процесс создания объекта с использованием класса в качестве шаблона называется созданием экземпляра. Вы можете создать сколько угодно объектов из одного и того же класса, и каждый созданный объект будет известен как экземпляр этого класса. Экземпляр обычно хранится в коде как обычная переменная, которую вы можете использовать по мере необходимости, взаимодействуя с его атрибутами и методами. Продолжая наш пример, вы можете создать несколько объектов типа «Товар» при помощи класса «Товар». Каждый товар будет иметь свой собственный набор значений атрибутов, таких как артикул, наименование, тип, цена и скидка. Представление структурированных наборов данных таким объектно-ориентированным способом, как правило, является интуитивно понятным способом для программистов при написании и организации своего кода. Скорее всего, это связано с тем, что люди обычно хорошо мыслят с точки зрения идентифицируемых сущностей, существующих в реальном мире. В чем разница между front-end, back-end и full-stack разработкой? Как разработчик-новичок, вы, наверняка, просматривали вакансии в сфере технологий и замечали, что очень часто употребляются термины «front-end», «back-end» и «full-stack». Эти термины обычно относятся к той части приложения, над который вы будете работать. Более того, они также подразумевают то, что вы будете работать над программным приложением, чаще всего мобильном или веб-приложением. «Front-end», или клиентская часть приложения, относится к тем частям приложении, с которыми пользователи (также известные как «клиенты») взаимодействуют напрямую. Для веб-приложения front-end – это набор веб-страниц (и функций), которые отображаются в браузере пользователя. Для мобильного приложения front-end - это набор экранов, с которыми пользователь взаимодействует через свое мобильное устройство. Задачи front-end разработки включают в себя проектирование взаимодействия с пользователем, создание пользовательского интерфейса, сетевое взаимодействие на стороне клиента, интеграцию и использование библиотек на стороне клиента, а также сбор/проверку/отправку пользовательского ввода. Как front-end разработчик, вы будете выполнять именно эти задачи, в основном, используя HTML для описания структуры веб-страницы, CSS для добавления стилей и JavaScript для добавления интерактивности. Серверная часть относится к тем частям приложения, которые работают, что называется за кадром, и не доступны непосредственно пользователю/клиенту. «Back-end», или серверная часть, обычно включает в себя веб-сервер, который обрабатывает HTTP-соединения, полученные от внешнего клиента (как правило, веб-браузера). Веб-сервер обрабатывает эти подключения и направляет их к внутреннему коду, который отвечает за логику, которая нужна для того, чтобы ответить клиенту. Эта часть серверной части называется маршрутизацией или API (интерфейс программирования приложений). Сам внутренний код представляет собой самостоятельную цельную базу кода, которая используется как единое целое. Однако в зависимости от архитектуры приложения этот код может работать как набор функций без сервера, работающих в облачном сервисе, а не как самостоятельная кодовая база. Внутренний код проверяет пользовательский ввод, применяет бизнес-логику, взаимодействует с хранилищем данных, таким как база данных, и формирует ответ, который отправляется обратно внешнему клиенту. Теперь, когда мы выяснили, что такое front-end и back-end, то понять, что такое full-stack, или полностековая, разработка будет намного легче! Full-stack просто-напросто включает в себя как front-end, так и back-end. Понятие «full-stack» (полный стек) происходит от понятия «stack» (стек), который является сокращенной формой «software stack» (программный стек). Программный стек – это набор инструментов, сред, языков программирования и операционных систем, которые используются для поддержки приложения. Какие программные стеки самые популярные? Теперь, когда мы выяснили, что такое программный стек, мы можем кратко обсудить некоторые популярные варианты, из которых вы потом можете выбрать. LAMP-стек (Linux, Apache, MySQL, PHP) LAMP-стек - это проверенный временем стек, который является отраслевым стандартом back-end стека, в основе которого лежит операционная система Linux. Кроме того, используется веб-сервер Apache для обработки веб-запросов и направления их в кодовую базу PHP. Данные хранятся в базе данных MySQL – бесплатной реляционной базе данных с открытым исходным кодом. Этот стек хорошо подходит для относительно стандартизированных веб-сайтов, содержащих контент, таких как блоги. Вы могли заметить, что я не упомянул интерфейсные инструменты в качестве части данного стека. Это означает лишь то, что LAMP-стек – это back-end стек. MEAN-стек (MongoDB, Express.js, Angular.js, Node.js) MEAN-стек – это более современный стек, который использует для хранения данных неструктурированную базу данных MongoDB. Используется Express.js в качестве back-end каркаса веб-приложения и Angular.js для front-end. И наконец, Node.js используется для запуска JavaScript на серверной части. Основное преимущество MEAN-стека – это то, что все компоненты изначально предназначены для работы с языком программирования JavaScript через JSON (нотация объектов JavaScript). Обратите внимание, что компоненты данного стека ориентированы как на front-end (Angular.js), так и на back-end (MongoDB, Express.js, Node.js), поэтому MEAN-стек можно считать полным стеком. MERN-стек (MongoDB, Express.js, React.js, Node.js) Как вы можете заметить, MERN-стек очень похож на MEAN-стек. Отличие только в том, что он использует библиотеку React.js в качестве front-end, вместо Angular.js. Этот стек хорошо подходит для разработчиков, которым нравится React за его гибкий и интуитивно понятный стиль создания пользовательских интерфейсов. Известные фреймворки Я хотел бы воспользоваться моментом и рассказать вам о двух популярных back-end фреймворках (не стеках), которые вы могли бы включить или заменить для определенных компонентов стеков, описанных выше. SpringBoot – это java-феймворк (с технической точки зрения это частный случай более широкой среды Spring), который отлично подходит для back-end разработки Java-кода для мобильных и веб-приложений. Если вы новичок в Java, то я настоятельно рекомендую вам с ним ознакомиться. Django – это Python-фреймворк, специально созданный для использования с языком программирования Pyhton. Если вы любите создавать приложения именно на Pyhton, то вам определенно стоит обратить на него внимание. Как разработчики вместе работают над одним кодом, не находясь в разных местах? Когда я только начал программировать, я открыл текстовый редактор Python на своем локальном компьютере и создал один файл, в которой вместил весь код своего проекта. Однако, я быстро понял, что такой файл плохо управляем, поэтому я разделил его на несколько файлов Pyhton .py (или, как их называют, модулей). Когда я программировал вместе с коллегами, то они обычно сидели позади меня, пока я писал код, или я сидел позади них. А если нам нужно было обменяться фрагментами кода или файлами, то мы просто отправляли их друг другу по электронной почте. Прошли годы, прежде чем я узнал, что разработчики успешно могут сотрудничать, а часто это происходит и вовсе удаленно. Ключом к успешной совместной работе над программным кодом является использование системы контроля версий (VCS – Version Control System). VCS – это инструмент, отслеживающий изменения, которые несколько разработчиков постепенно вносят в файл кода, и позволяющий разработчикам эффективно работать вместе над одним и тем же набором файлов. Системы контроля версий создают репозиторий, в котором хранятся данные, необходимые для воссоздания любой версии файлов кода в том виде, в каком они находились в определенные моменты времени. Это и называется контролем версий. Системы контроля версий – это универсальные инструменты, поскольку они выполняют несколько полезных функций, помогающих командам разработчиков: отслеживание внесенных в файл кода изменений; возможность легко делиться изменениями с другими разработчиками и получать доступ к изменениям, внесенным другими; простые способы объединения изменений кода, внесенных несколькими разработчиками или командами; полное резервное копирование кода проекта по мере его развития с течением времени, а также эффективное восстановление любой предыдущей версии кода; легкое управление конфликтными обращениями к коду, возникающими в одних и тех же строках одних и тех же файлов; различные другие инструменты для улучшения совместной работы и эффективности команды. Есть множество вариантов систем контроля версий. Вы, наверняка слышали об одной из них – GitHub. На самом деле сам по себе GitHub – это не система контроля версий. GitHub – это компания, которая предоставляет онлайн-хостинг для проектов, использующих систему контроля версий. GitHub получил свое название от конкретной системы контроля версий, которую он использует – Git. Первая версия Git появилась в 2005 году и со временем превратилась в самую известную и популярную систему контроля версий в мире. На сегодняшний день Git используется подавляющим большинством команд разработчиков. Это важный инструмент, который стоит изучить, если вы планируете занимать программированием на профессиональном уровне. Имеет ли значение, какую операционную систему я использую? Когда дело доходит до обучения программированию новичка, то я бы ответил на этот вопрос также, как и на первый. Я считаю, что не так важно какая у вас операционная система, важнее то, что вы можете начать учиться уже сейчас с тем, что вы имеете. Но при этом я ощущаю, что мой ответ будет интерпретирован как отговорка, если я на этом остановлюсь. Давайте предположим, что вы пытаетесь принять решение о том, какую ОС вам лучше выбрать для программирования. Принимая во внимание тот факт, что есть множество субъективных причин, по которым люди выбирают ту или иную ОС, на мой взгляд, очень полезной может оказаться операционная система, которая может обеспечить доступ к качественному терминалу командной строки. Именно по этой причине я предпочитаю по возможности для разработки использовать Unix-подобные операционные системы, такие как Linux или MacOS. Полное раскрытие, например, я разрабатываю в основном на MacOS. Я обосную это тем, что важным навыком программирования является рабата с командной строкой (во многом похожа на использование Git). Полнофункциональная и интуитивно понятная командная строка является основной частью разработки программного обеспечения. На мой взгляд, в Linux и MacOS встроены лучшие современные командные строки, нежели в Windows. Какой текстовый редактор или IDE следует использовать? Текстовые редакторы и IDE (интегрированные схемы разработки) сильно изменились за последние годы, и разработчики выявляют фаворитов по многим причинам. Одна из причин – определенный редактор или среда разработки были созданы специально под какой-то язык программирования или какую-то инфраструктуру. Другая причина – ваша компания использует определенный редактор, и это будет именно тот, который вы выучили и используете. Лично я понял, что я выбирал, отталкиваясь именно от последней причины. Если вы в основном работаете с интерпретируемыми языками с динамической типизацией, такими как Python, JavaScript, Ruby или PHP, то я рекомендую вам начать с такого графического редактора, как Sublime Text или Visual Studio Code. Это два самых популярных текстовых редактора. Они предоставляют множество функций и настроек, которые облегчат вашу жизнь как разработчика. Если вы работаете с Java, то я рекомендую вам Eclipse или IntelliJ IDEA. Они предлагают множество функций, которые были созданы специально для работы с Java. И наконец, независимо от того, какой редактор вы выберите для своей основной работы, я рекомендую немного изучить Vim. Vim – это текстовый редактор, предназначенный для использования непосредственно в терминале командной строки. Конечно, в данном случае нужно чуть больше времени для того, чтобы к нему привыкнуть, потому что там нужно использовать команды клавиатуры Vim для взаимодействия с вашими файлами вместо того, чтобы наводить и щелкать мышкой. Но, по моему опыту, оно определенно того стоит. Даже если вы изучите только основные команды, они вам все равно очень помогут, если вдруг получится так, что вы просматриваете терминал без графического интерфейса, а вам нужно проверить или изменить некоторые файлы. Я настоятельно рекомендую встроенную программу Vimtutor, которая загружается автоматически при установке Vim. Он перебирает основные команды непосредственно в вашем терминале командной строки. Заключение В этой статье мы рассмотрели семь вопросов, которые обычно задают начинающие программисты. Мы охватили довольно много тем, начиная с вопросов о выборе языка программирования, о стеках разработки программного обеспечения и заканчивая вопросами об операционных системах и текстовых редакторах.
img
Как системный администратор, вполне вероятно, что вы написали несколько сценариев Bash для автоматизации вашей работы. Например, вы можете запускать сценарии Bash для резервного копирования вашей работы или для регистрации некоторых событий, происходящих на вашем сервере. Скрипты Bash, как и скрипты, написанные на других языках программирования, могут запускаться различными способами. В этой статье мы расскажем о всех способах запуска скрипта Bash в Linux. Подготовка Прежде чем вы сможете запустить ваш скрипт, вам нужно, чтобы ваш скрипт был исполняемым. Чтобы сделать исполняемый скрипт в Linux, используйте команду chmod и присвойте файлу права execute. Вы можете использовать двоичную или символическую запись, чтобы сделать ее исполняемой. $ chmod u+x script $ chmod 744 script Если вы не являетесь владельцем файла, вам необходимо убедиться, что вы принадлежите к правильной группе или что права доступа предоставлены «другой» группе в вашей системе. В некоторых дистрибутивах ваш файл будет выделен другим цветом, когда он исполняемый. Теперь, когда ваш файл исполняемый, давайте посмотрим, как можно легко запустить скрипт Bash. Запустить Bash скрипт из пути к скрипту Чтобы запустить Bash скрипт в Linux, просто укажите полный путь к скрипту и укажите аргументы, которые могут потребоваться для запуска Bash скрипта. $ /path/to/script <arg1> <arg2> ... <argn> В качестве примера, скажем, у вас есть Bash-скрипт, расположенный в вашем домашнем каталоге. Чтобы выполнить этот скрипт, вы можете указать полный путь к скрипту, который вы хотите запустить. # Абсолютный путь $ /home/user/script # Абсолютный путь с аргументами $ /home/user/script "john" "jack" "jim" Кроме того, вы можете указать относительный путь к скрипту Bash, который вы хотите запустить. # Относительный путь $ ./script # Относительный путь с аргументами $ ./script "john" "jack" "jim" Таким образом вы узнали, как легко запустить Bash-скрипт в своей системе. Запустить Bash скрипт, используя bash Чтобы запустить скрипт Bash в вашей системе, вы должны использовать команду bash и указать имя скрипта, который вы хотите выполнить, с необязательными аргументами. $ bash <script> Кроме того, вы можете использовать sh, если в вашем дистрибутиве установлена утилита sh. В качестве примера, скажем, вы хотите запустить скрипт Bash с именем script. Чтобы выполнить его с помощью утилиты bash, вы должны выполнить следующую команду $ bash script This is the output from your script! Выполнить скрипт Bash, используя sh, zsh, dash В зависимости от вашего дистрибутива, в вашей системе могут быть установлены другие утилиты оболочки. Bash - интерпретатор оболочки, установленный по умолчанию, но вы можете захотеть выполнить ваш скрипт с использованием других интерпретаторов. Чтобы проверить, установлен ли интерпретатор оболочки в вашей системе, используйте команду which и укажите нужный интерпретатор. $ which sh /usr/bin/sh $ which dash /usr/bin/dash Когда вы определили интерпретатор оболочки, который хотите использовать, просто вызовите его, чтобы легко запустить скрипт. Запуск скрипта Bash из любого места В некоторых случаях вы можете запускать скрипты Bash, где бы вы ни находились в вашей системе. Чтобы запустить скрипт Bash из любой точки вашей системы, вам нужно добавить свой скрипт в переменную среды PATH. $ export PATH="<path_to_script>:$PATH" Благодаря тому, что путь к скрипту добавлен в PATH, вы можете вызывать его там, где хотите в своей системе. $ script This is the output from script! Кроме того, вы можете изменить переменную среды PATH в вашем файле .bashrc и использовать команду source для обновления вашей текущей среды Bash. $ sudo nano ~/.bashrc export PATH="<path_to_script>:$PATH" Выйдите из файла и используйте команду source для файла bashrc для внесения изменений. $ source ~/.bashrc $ echo $PATH /home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games Отлично! Теперь ваш скрипт может быть запущен из любой точки вашей системы. Запуск Bash скриптов из графического интерфейса Последний способ выполнения Bash скриптов - это использование графического интерфейса, в данном случае интерфейса GNOME. Чтобы запустить ваши скрипты с использованием GNOME, вы должны установить в проводнике Ask what to do для исполняемых файлов. Закройте это окно и дважды щелкните файл скрипта, который вы хотите выполнить. При двойном щелчке вам предлагаются различные варианты: вы можете выбрать запуск скрипта (в терминале или нет) или просто отобразить содержимое файла. В этом случае мы заинтересованы в запуске этого скрипта в терминале, поэтому нажмите на эту опцию. Успех! Ваш скрипт был успешно выполнен Заключение Из этого руководства вы узнали, как легко запускать Bash скрипты в своей системе, указав путь к скрипту или интерпретаторы, доступные на вашем хосте. Вы узнали, что можете сделать это еще проще, добавив путь к скрипту в переменную среды PATH или используя существующие функции в пользовательском интерфейсе GNOME.
img
Всем привет! Сегодня в статье мы хотим вам рассказать про то как зарегистрировать телефоны Cisco серии 78хх на IP-АТС Asterisk. Рассматривать настройку мы будем на примере телефона Cisco 7811, самого простого из этой серии, отличающегося от других тем что, имеет только одну линию. Если вам интересно как настроить телефон для работы с оригинальными АТС от Cisco, то тут вы можете прочитать про CUCM, а тут про CME. Процесс загрузки телефона Телефоны Cisco 78хх поддерживают протокол SIP, в отличие от старых моделей, которые работали по проприетарному протоколу SCCP, и это облегчит нам настройку. Когда телефон Cisco загружается он выполняет следующие действия: Телефон получает питание c помощью блока питания или при помощи PoE; Телефон загружает ПО, которое хранится локально в его памяти; Телефон узнает голосовой VLAN ID при помощи CDP; Телефон использует DHCP чтобы узнать свой IP адрес, маску подсети, шлюз и адрес TFTP сервера; Телефон связывается с TFTP сервером и запрашивает конфигурационный файл. (У каждого телефона есть конфигурационный файл, который имеет вид SEP<мак_адрес>.cnf.xml); Телефон регистрируется на АТС CUCM, который указан в конфигурационном файле; А нам, поскольку у нас Asterisk вместо CUCM, нужно изменить конфигурационный файл, который находится на TFTP и в нем указать адрес нашей АТС, его номер и прочие параметры. Начнем по порядку. Настройка DHCP и TFTP Прежде всего нам нужно настроить DHCP сервер который будет выдавать адрес телефона и сообщать ему о TFTP сервере, а также соответственно сам TFTP сервер, на котором будут лежать все необходимые файлы. Если вы используете в качестве DHCP сервера оборудование Cisco то прочитать про то как создать на нем DHCP сервер можно здесь, а если вы используете оборудование Mikrotik то здесь. Основной момент – телефоны Cisco получают информацию о TFTP сервере при помощи параметра Option 150, и именно его нужно настроить и в нем указать адрес TFTP сервера, с которым должен связаться телефон чтобы забрать необходимые файлы. Для Cisco нужно использовать следующую команду в настройках DHCP: option 150 ip 192.168.1.20 Для Mikrotik нужно в WinBox перейти в меню IP - DHCP Server – Options и нажать “+”. Тут необходимо указать в поле Code значение 150, а в поле Value – адрес сервера. А затем в разделе Networks в поле DHCP Options указать созданную нами опцию. В нашем примере мы будем использовать бесплатную программу Tftpd64, которая может выступать в качестве DHCP и TFTP сервера, а также может показывать логи, что очень удобно для траблшутинга. В меню настроек во вкладке DHCP можно настроить все нужные параметры, в том числе и необходимую нам опцию 150. Во вкладке TFTP указываем необходимые параметры, такие как адрес директории где будут находится файлы. Если ваше оборудование не поддерживает Option 150 или вы не хотите заморачиваться с этим, то адрес TFTP сервера можно прописать на самом телефоне в разделе Настройки – Параметры администратора – Настройка сети – Настройка IPv4 и тут в пункте Дополнительный TFTP сервер установить значение “Да”, а ниже в поле TFTP-сервер вручную прописать нужный адрес. Создание экстеншена на Asterisk Создадим новый номер на нашей АТС при помощи графического интерфейса FreePBX. Для этого переходим в меню Applications – Extensions, нажимаем Add Extension и выбираем Add New PJSIP Extension. Да мы будем использовать PJSIP, поскольку телефон будет слать пакеты на стандартный порт 5060, который в Asterisk использует PJSIP. Этого будет достаточно, сохраняем и применяем конфиг. Создание необходимых файлов При загрузке телефона он будет пытаться скачать файл конфигурации и обновить свою прошивку. После того как мы подняли наш TFTP сервер нам нужно залить на него все файлы, которые будут необходимы телефону. Для начала нужно скачать файл прошивки для нашего телефона, потому что телефон будет всегда запрашивать его при загрузке. Скачать его можно с официального сайта Cisco, предварительно зарегистрировавшись там. Оттуда же нам нужно скачать файл с локалью. Далее идет самое важное – файл конфигурации телефона. Нам нужно создать XML файл, который должен называться SEP<mac_адрес_телефона>.cnf.xml. Например, SEPA1B2C3D4E5F6.cnf.xml Для создания этого файла лучше всего использовать специальный XML-редактор (например, EditiX), чтобы не было проблем с валидацией. Его содержание должно быть таким: <?xml version="1.0" encoding="UTF-8" <device> <versionStamp>{7821 Aug 28 2015 12:40:48}</versionStamp> <devicePool> <dateTimeSetting> <dateTemplate>D.M.Y</dateTemplate> <timeZone>E. Europe Standard/Daylight Time</timeZone> <ntps> <ntp> <name>time.windows.com</name> <ntpMode>Unicast</ntpMode> </ntp> </ntps> </dateTimeSetting> <callManagerGroup> <members> <member priority="0"> <callManager> <ports> <ethernetPhonePort>2000</ethernetPhonePort> </ports> <processNodeName>192.168.1.17</processNodeName> </callManager> </member> </members> </callManagerGroup> </devicePool> <commonProfile> <callLogBlfEnabled>3</callLogBlfEnabled> </commonProfile> <loadInformation>sip78xx.12-5-1-16</loadInformation> <userLocale> <name>Russian_Russia</name> <uid/> <langCode>ru_RU</langCode> <version/> <winCharSet>utf-8</winCharSet> </userLocale> <networkLocale>United_States</networkLocale> <networkLocaleInfo> <name>Russian_Russia</name> </networkLocaleInfo> <idleTimeout>0</idleTimeout> <authenticationURL/> <directoryURL/> <idleURL/> <informationURL/> <messagesURL/> <proxyServerURL/> <servicesURL/> <capfAuthMode>0</capfAuthMode> <capfList> <capf> <phonePort>5060</phonePort> <processNodeName/> </capf> </capfList> <deviceSecurityMode>1</deviceSecurityMode> <sipProfile> <sipCallFeatures> <cnfJoinEnabled>true</cnfJoinEnabled> <callForwardURI>x--serviceuri-cfwdall</callForwardURI> <callPickupURI>x-cisco-serviceuri-pickup</callPickupURI> <callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI> <callPickupGroupURI>x-cisco-serviceuri-gpickup</callPickupGroupURI> <meetMeServiceURI>x-cisco-serviceuri-meetme</meetMeServiceURI> <abbreviatedDialURI>x-cisco-serviceuri-abbrdial</abbreviatedDialURI> <rfc2543Hold>true</rfc2543Hold> <callHoldRingback>2</callHoldRingback> <localCfwdEnable>true</localCfwdEnable> <semiAttendedTransfer>true</semiAttendedTransfer> <anonymousCallBlock>2</anonymousCallBlock> <callerIdBlocking>0</callerIdBlocking> <dndControl>0</dndControl> <remoteCcEnable>true</remoteCcEnable> </sipCallFeatures> <sipStack> <sipInviteRetx>6</sipInviteRetx> <sipRetx>10</sipRetx> <timerInviteExpires>180</timerInviteExpires> <timerRegisterExpires>120</timerRegisterExpires> <timerRegisterDelta>5</timerRegisterDelta> <timerKeepAliveExpires>120</timerKeepAliveExpires> <timerSubscribeExpires>120</timerSubscribeExpires> <timerSubscribeDelta>5</timerSubscribeDelta> <timerT1>500</timerT1> <timerT2>4000</timerT2> <maxRedirects>70</maxRedirects> <remotePartyID>false</remotePartyID> <userInfo>None</userInfo> </sipStack> <autoAnswerTimer>1</autoAnswerTimer> <autoAnswerAltBehavior>false</autoAnswerAltBehavior> <autoAnswerOverride>true</autoAnswerOverride> <transferOnhookEnabled>true</transferOnhookEnabled> <enableVad>false</enableVad> <preferredCodec>g729</preferredCodec> <dtmfAvtPayload>101</dtmfAvtPayload> <dtmfDbLevel>3</dtmfDbLevel> <dtmfOutofBand>avt</dtmfOutofBand> <alwaysUsePrimeLine>false</alwaysUsePrimeLine> <alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail> <kpml>3</kpml> <stutterMsgWaiting>1</stutterMsgWaiting> <callStats>false</callStats> <silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts> <disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig> <startMediaPort>16384</startMediaPort> <stopMediaPort>16399</stopMediaPort> <voipControlPort>5069</voipControlPort> <dscpForAudio>184</dscpForAudio> <ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy> <dialTemplate>dialplan.xml</dialTemplate> <phoneLabel>Office</phoneLabel> <sipLines> <line button="1"> <featureID>9</featureID> <featureLabel>Merion Networks</featureLabel> <name>200</name> <displayName>Cisco</displayName> <contact>200</contact> <proxy>192.168.1.17</proxy> <port>5060</port> <autoAnswer> <autoAnswerEnabled>2</autoAnswerEnabled> </autoAnswer> <callWaiting>3</callWaiting> <authName>200</authName> <authPassword>qwe123</authPassword> <sharedLine>false</sharedLine> <messageWaitingLampPolicy>1</messageWaitingLampPolicy> <messagesNumber>121</messagesNumber> <ringSettingIdle>4</ringSettingIdle> <ringSettingActive>5</ringSettingActive> <forwardCallInfoDisplay> <callerName>true</callerName> <callerNumber>false</callerNumber> <redirectedNumber>false</redirectedNumber> <dialedNumber>true</dialedNumber> </forwardCallInfoDisplay> </line> </sipLines> </sipProfile> </device> Что нас здесь интересует и что нужно изменить: <timeZone> - E. Europe Standard/Daylight Time - в нашем примере мы используем временную зону, которая подходит для Москвы UTC+3. <processNodeName> – адрес нашего Asterisk <loadInformation> – имя файла прошивки (который с расширением .loads) <userLocale><name> и <networkLocaleInfo> - Russian_Russia – папка с локалью <phonePort> - 5060 – номер SIP порта <voipControlPort> - номер порта телефона И рассмотрим блок <line button="1"> с настройкой линии. Здесь нужно изменить в соответствии с нашими данными: <featureLabel>Merion Networks</featureLabel> - Имя на телефона <name>200</name> - Номер экстеншена <displayName>Cisco</displayName> - Имя экстеншена <contact>200</contact> - Снова номер экстеншена <proxy>192.168.1.17</proxy> - Адрес Asterisk <port>5060</port> - номер SIP порта <authName>200</authName> - Еще раз номер экстеншена <authPassword>qwe123</authPassword> - Пароль экстеншена Помимо этого, создаем файл диалпана dialplan.xml, без которого телефон не загрузится: <DIALTEMPLATE> <TEMPLATE MATCH="8,800......." Timeout="1"/> <TEMPLATE MATCH="8,.........." Timeout="1"/> <TEMPLATE MATCH="0.." Timeout="1"/> <TEMPLATE MATCH="1..." Timeout="1"/> <TEMPLATE MATCH="2..." Timeout="1"/> <TEMPLATE MATCH="3..." Timeout="1"/> <TEMPLATE MATCH="4..." Timeout="1"/> <TEMPLATE MATCH="[5-7]..." Timeout="1"/> <TEMPLATE MATCH="**...." Timeout="0"/> <TEMPLATE MATCH="*" Timeout="3"/> </DIALTEMPLATE> Далее создаем файл g3-tones.xml со следующим содержанием: <tones> <trkLocaleName>Russian_Federation</trkLocaleName> <trkBaseClearcaseVersion>/main/3.3.release/1</trkBaseClearcaseVersion> <trkTranslationVersion>0</trkTranslationVersion> <tone c1="30959" i1="-1879" d="1" t="ringing"> <part m="on" t="800"/> <part m="off" t="3200"/> <repeat c="65535"/> </tone> <tone c1="30959" i1="-1879" d="1" t="reorder"> <part m="on" t="200"/> <part m="off" t="200"/> <repeat c="65535"/> </tone> <tone c1="30959" i1="-1879" d="1" t="busy"> <part m="on" t="400"/> <part m="off" t="400"/> <repeat c="65535"/> </tone> <tone c1="30959" i1="-1879" d="1" t="odial"> <part m="on" t="65535"/> <repeat c="65535"/> </tone> <tone c1="30959" i1="-1879" d="1" t="idial"> <part m="on" t="65535"/> <repeat c="65535"/> </tone> <tone c1="14876" i1="-5346" d="1" t="recording"> <part m="on" t="400"/> <part m="off" t="15000"/> <repeat c="65535"/> </tone> <tone c1="30743" i1="-1384" c2="29780" i2="-1252" c3="30743" i3="-1384" c4="29780" i4="-1252" d="34" t="amwi"> <part m="on" t="100" /> <part m="off" t="100" /> <part m="on" t="65535" /> <repeat c="65535" pc1="10" pc2="65535"/> </tone> <tone c1="30831" i1="-2032" d="17" t="monitoring"> <part m="on" t="1500"/> <part m="off" t="8000"/> <part m="on" t="500"/> <part m="off" t="8000"/> <repeat c="65535"/> </tone> </tones> После этого создаем в директории TFTP папку Russian_Russia (или ту которую указали в <userLocale><name> и <networkLocaleInfo><name>) и переносим туда файл g3-tones.xml. Также туда необходимо перенести файл локали sp-sip.jar. И наконец нам нужно создать три пустых файла: CTLSEPSEP<mac_адрес_телефона>.tlv ITLSSEPSEP<mac_адрес_телефона>.tlv ITLFile.tlv Эти файлы нужны чтобы у нас не было ошибки “No Trust List Installed”. На этом все. По итогу в директории нашего TFTP сервера должны быть следующие файлы: SEP<mac_адрес_телефона>.cnf.xml dialplan.xml sip78xx.12-5-1-16.loads CTLSEP<mac_адрес_телефона>.tlv ITLSSEP<mac_адрес_телефона>.tlv ITLFile.tlv Папка Russian_Russia с файлами: g3-tones.xml и sp-sip.jar Загрузка телефона На этом наша подготовка закончена, и мы теперь можем включить телефон. Он начнет загружаться, получит IP адрес и пойдет на TFTP чтобы скачать все необходимые файлы. При помощи Tftfd64 можно смотреть за происходящем через вкладку Log Viewer, где можно увидеть какие файлы скачивает, и каких ему не хватает, в случае ошибки. Если все нормально, то телефон скачает файл конфигурации, затем установит новую версию прошивки с TFTP и выбранную локаль, после чего перезагрузится. После прошивки он начнет связываться с нашей IP-АТС Asterisk и начнется процесс регистрации в результате, которого мы получим телефон Cisco, работающий с Asterisk по протоколу SIP. Успех! Теперь можем проверять телефон и делать звонки!
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59