По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Что такое парадигмы программирования? Это не более, чем просто замысловатое название для популярных способов и стилей организации процесса написания программного кода. Я постараюсь разбить эту тему на части и дать простое пояснение по каждой парадигме. Таким образом, вы сможете легко понять, о чем говорят люди, когда произносят такие слова, как «объектно-ориентированный», «функциональный» или «декларативный». Давайте начнем! Что такое парадигма программирования? Парадигмы программирования – это различные способы и стили, которые используются для организации программы или языка программирования. Каждая парадигма состоит из определенных структур, функций и взглядов на то, как следует решать известные задачи программирования. Вопрос о том, почему существует так много различных парадигм программирования, схож с вопросом о том, почему существует так много языков программирования. Определенные парадигмы лучше подходят для определенных типов задач. Именно поэтому имеет смысл использовать разные парадигмы для разных типов проектов. Кроме того, методики, которые составляют каждую парадигму, развивались с течением времени. Благодаря достижениям как в области программного, так и аппаратного обеспечения появились различные подходы к решению задач, которых раньше просто не было. И последняя причина – я думаю, это просто творческое начало в человеке. По своей натуре, нам просто нравится создавать новые вещи, улучшать то, что другие когда-то создали, и адаптировать инструменты под себя и свои предпочтения или просто делать их более эффективными (в нашем понимании). Все это привело к тому, что на сегодняшний день мы имеем огромное количество вариантов, которые могут помочь нам написать и структурировать ту или иную программу. Чем парадигма программирования не является? Парадигмы программирования – это не языки и не инструменты. Вы не сможете ничего «создать» с помощью парадигмы. Они больше похожи на некий набор образцов и руководящих принципов, о которых условились большое количество людей, которым они следовали и которые они подробно изложили. Язык программирования не всегда привязан к определенной парадигме. Есть языки, которые были созданы с учетом определенной парадигмы и имеют функции, которые облегчают программирование в этом контексте больше, чем другие (хороший пример – Haskel и функциональное программирование). Однако существуют и «многопарадигмальные» языки. Это означает, что вы можете адаптировать свой код, чтобы он подходил под какую-то из парадигм (хороший пример – JavaScript и Python). При этом парадигмы программирования не являются взаимоисключающими в том смысле, что вы можете без каких-либо проблем использовать приемы из различных парадигм одновременно. Популярные парадигмы программирования Теперь, когда вы знаете, что такое парадигмы программирования, а что к ним не относится, давайте рассмотрим самые популярные из них, их характеристики и сравним их. Имейте в виду, что этот список не полный. Существуют и другие парадигмы программирования, которые мы здесь рассматривать не будем. Здесь я расскажу вам только о самых популярных и широко используемых. Императивное программирование Императивное программирование – это набор подробных инструкций, которые даются компьютеру, чтобы тот выполнил их в заданном порядке. Этот тип программирования называется «императивным», потому что мы некоторым образом указываем компьютеру (как программисты), что он должен делать. Императивное программирование концентрируется на описании того, как программа работает, шаг за шагом. Допустим, вы хотите испечь торт. Ваша императивная программа для такого рода задачи может выглядеть следующим образом: 1- Pour flour in a bowl 2- Pour a couple eggs in the same bowl 3- Pour some milk in the same bowl 4- Mix the ingredients 5- Pour the mix in a mold 6- Cook for 35 minutes 7- Let chill Воспользуемся конкретным примером и предположим, что мы хотим отфильтровать массив чисел так, чтобы остались только числа, которые больше 5. Наш императивный код тогда будет выглядеть следующим образом: const nums = [1,4,3,6,7,8,9,2] const result = [] for (let i = 0; i < nums.length; i++) { if (nums[i] > 5) result.push(nums[i]) } console.log(result) // Output: [ 6, 7, 8, 9 ] Обратите внимание, что мы указываем программе, что нужно перебрать каждый элемент массива, сравнить каждый из них с 5 и, если элемент больше 5, то поместить его в конечный массив. Наши инструкции предельно детализированы и конкретны, и именно это и является императивным программированием. Процедурное программирование Процедурное программирование – это производное от императивного программирования только с функциями (также известных как «процедуры» или «подпрограммы»). Процедурное программирования предлагает пользователю разделить выполнение программы на функции, чтобы оптимизировать модульный принцип организации. Вернемся к нашему примеру с тортом. Процедурная программа для этого примера будет выглядеть следующим образом: function pourIngredients() { - Pour flour in a bowl - Pour a couple eggs in the same bowl - Pour some milk in the same bowl } function mixAndTransferToMold() { - Mix the ingredients - Pour the mix in a mold } function cookAndLetChill() { - Cook for 35 minutes - Let chill } pourIngredients() mixAndTransferToMold() cookAndLetChill() Как вы можете видеть, благодаря реализации функций, мы можем просто прочитать три вызова функций в конце файла и понять, что делает наша программа. Такое упрощение и абстрактное представление является одним из преимуществ процедурного программирования. Однако внутри функций находится все тот же императивный код. Функциональное программирование Функциональное программирование продвигает концепцию создания функций немного дальше. В функциональном программировании функции рассматриваются как «полноправные граждане». Это означает, что их можно присваивать переменным, передавать в качестве аргумента и возвращать в качестве результата других функций. Еще одна ключевая концепция – это идея чистых функций. Чистая функций – это функция, которая, чтобы получить результат, полагается только на свои входные данные. И при одних и тех же входных данных всегда будет один и тот же результат. Кроме того, эти функции не имеют никаких побочных эффектов (то есть не вносят никаких изменений вне контекста функции). С учетом всех этих концепций, функциональное программирование призывает писать программы с помощью функций. Оно также поддерживает идею о том, что модульность кода и отсутствие побочных эффектов облегчают определение и разделение обязанностей внутри кодовой базы. Таким образом, это облегчает сопровождение кода. Вернемся к примеру с фильтрацией массива. В императивной парадигме мы можем использовать внешнюю переменную для хранения результата функции, что по сути может считаться побочным эффектом. const nums = [1,4,3,6,7,8,9,2] const result = [] // External variable for (let i = 0; i < nums.length; i++) { if (nums[i] > 5) result.push(nums[i]) } console.log(result) // Output: [ 6, 7, 8, 9 ] Для того, чтобы преобразовать это в функциональное программирование, мы можем сделать следующее: const nums = [1,4,3,6,7,8,9,2] function filterNums() { const result = [] // Internal variable for (let i = 0; i < nums.length; i++) { if (nums[i] > 5) result.push(nums[i]) } return result } console.log(filterNums()) // Output: [ 6, 7, 8, 9 ] Это практически тот же самый код, но мы проворачиваем все итерации внутри функции, в которой мы также сохраняем и массив результатов. Таким образом, мы можем гарантировать, что функция не будет ничего менять за своими пределами. Она создает переменную только для обработки своей собственной информации, и после завершения своей работы удаляет ее. Декларативное программирование Декларативное программирование скрывает всю сложность и приближает языки программирования к человеческому языку и мышлению. Это абсолютная противоположность императивному программированию, хотя бы потому что программист дает инструкции не о том, как компьютеру следует решать задачу, а о том, какой требуется результат. Будет намного понятнее, если мы приведем пример. Воспользуемся примером с фильтрацией массива. Декларативный подход здесь будет выглядеть следующим образом: const nums = [1,4,3,6,7,8,9,2] console.log(nums.filter(num => num > 5)) // Output: [ 6, 7, 8, 9 ] Обратите внимание, что, используя функцию фильтрации filter, мы явно не указываем компьютеру перебирать массив или сохранять значения в отдельном массиве. Мы просто говорим о том, что мы хотим («filter») и условие, которое необходимо выполнить («num > 5»). Что хорошего в таком подходе? Его легче читать и понимать, и зачастую он более емкий в записи. Хорошими примерами декларативного кода являются функции filter, map, reduce и sort в JavaScript. Еще один хороший пример – современные фреймворки/библиотеки JS, такие как React. Посмотрите, например, на этот код: <button onClick={() => console.log('You clicked me!')}>Click me</button> Здесь у нас есть кнопка (button) с приемником событий, который запускает функцию console.log при нажатии кнопки. Синтаксис JSX (то, что использует React) совмещает HTML и JS. Это упрощает и ускоряет написание приложений. Но это не то, что браузеры читают и выполняют. Код React позже преобразуются в обычный HTML и JS, а вот это уже то, с чем работают браузеры. JSX является декларативным, поскольку его цель заключается в том, чтобы предоставить разработчикам более удобный и эффективный интерфейс для работы. Здесь также важно отметить, что в декларативном программировании компьютер все равно обрабатывает информацию как императивный код. Если снова вернуться к примеру с массивом, то компьютер по-прежнему выполняет итерацию по массиву, как в цикле for, но нам, как программистам, не нужно писать это напрямую. Декларативное программирование скрывает всю сложность от программиста. Объектно-ориентированное программирование Одной из самых популярных парадигм программирование является объектно-ориентированное программирование (ООП). Основная концепция ООП заключается в разделении понятий на сущности, которые описываются как некие объекты. Каждая сущность группирует заданный набор информации (свойств) и действий (методов), которые может выполнять эта сущность. ООП широко использует классы. Классы - это способ создания новых объектов с помощью макета или шаблона, который задает программист. Объекты, которые были созданы с помощью класса, называются экземплярами. Вернемся к примеру с приготовлением пищи на псевдокоде. Предположим, что в нашей пекарне у нас есть главный повар (по имени Фрэнк) и помощник повара (по имени Энтони). У каждого их них есть определенные обязанности. Если бы мы использовали ООП, то наша программа бы выглядеть следующим образом: // Create the two classes corresponding to each entity class Cook { constructor constructor (name) { this.name = name } mixAndBake() { - Mix the ingredients - Pour the mix in a mold - Cook for 35 minutes } } class AssistantCook { constructor (name) { this.name = name } pourIngredients() { - Pour flour in a bowl - Pour a couple eggs in the same bowl - Pour some milk in the same bowl } chillTheCake() { - Let chill } } // Instantiate an object from each class const Frank = new Cook('Frank') const Anthony = new AssistantCook('Anthony') // Call the corresponding methods from each instance Anthony.pourIngredients() Frank.mixAndBake() Anthony.chillTheCake() Преимущество ООП заключается в том, что оно облегчает понимание программы за счет четкого разделения задач и обязанностей. Итоги Как мы увидели, парадигмы программирования – это различные способы решения задач программирования и организации нашего кода. Одними из самых популярных и широко используемых на сегодняшний день парадигм являются императивная, процедурная, функциональная, декларативная и объектно-ориентированная. Знание о том, что они из себя представляют, полезно для общего развития, а также для лучшего понимания других тем, связанных с программированием.
img
Привет, дорогой читатель! В сегодняшней статье, мы расскажем, как облегчить себе жизнь при работе с виртуальными машинами в среде VirtualBox. Возможно кто-то уже догадался, что речь пойдёт от о Guest Additions. Обзор Guest Additions - это набор системных драйверов и приложений, которые обеспечивают более тесную интеграцию хоста виртуализации и гостевых виртуальных машин, которые развёрнуты на хосте. Эти приложения оптимизируют производительность гостевых виртуальных машин и делают работу с ними более удобной. При этом, что очень важно, дополнительные ресурсы хоста виртуализации выделять не нужно! Стоит отметить, что данный функционал реализован почти во всех популярных средах виртуализации. Например в VmWare, аналогом Guest Additions является VmWare Tools, в в Hyper-V - Integration Services Guest Additions поддерживается для виртуальных машин всех популярных ОС: Windows, Linux, Mac OS X, FreeBSD, OpenBSD, Solaris. Полный список поддерживаемых ОС можно найти на сайте разработчика: https://www.virtualbox.org/manual/ch03.html#guestossupport. Поставляется в виде образа .iso CD/DVD диска, который находится в установочной директории VirtualBox и называется VBoxGuestAdditions.iso. Ну например в Windows 7 образ можно найти в C:Program FilesOracleVirtualBox, если Вы, конечно, не установили сам VirtualBox куда-то ещё. Поэтому нужно просто подмонтировать образ этого диска в виртуальной машине и запустить процесс установки. Функциональные возможности Итак, почему же стоит устанавливать Guest Additions? Сейчас объясню. Guest Additions включает следующий функционал: Интеграция указателя мыши. Больше не надо нажимать дополнительных кнопок чтобы “захватывать” (capture) и “освобождать” курсор на экране виртуальной машины. Общие папки. Позволяет создавать общие папки для быстрого обмена файлами между хостом и гостевой виртуальной машиной. Функция Drag and Drop. Позволяет переносить файлы с хоста на гостевую виртуальную машину и наоборот, захватывая контент курсором мыши. В данном примере, мы перенесли файл text_file.txt с виртуальной машины с ОС Windows 7 на хост под управлением OS Linux Ubuntu при помощи функции Drag and Drop Поддерживается начиная с VirtualBox 5.0. После установки Guest Additions, данный функционал необходимо включить в разделе Devices → Drag and Drop Улучшенная поддержка видео. Становится доступным ресайзинг окна виртуальной машины. Автоматически настраивается разрешение. Включается поддержка 3D и 2D графики и ускоренная производительность видео. Общий буфер обмена. Тут всё просто – теперь можно Copy/Paste как из, так и в виртуальную машину. Включается также в разделе Devices → Clipboard Временная синхронизация. Включает автоматическую синхронизацию времени между хостом виртуализации и виртуальной машиной. Это важно в случае, когда например нужно “приостановить” (pause) работу виртуальной машины на большой промежуток времени. Одновременная работа с окнами разных ОС. Данный функционал лучше всего проиллюстрирует картинка ниже: В данном примере – на хосте с OS Windows 7 в VirtualBox развёрнута виртуальная машина с OS Ubuntu Linux. Как видите, с помощью Guest Additions мы может одновременно работать с окнами этих ОС. На картинке – справа открыт Internet Explorer в Windows, а слева Mozzila Firefox в Ubuntu. Автоматические логины - позволяет настроить автоматический вход в виртуальную машину с помощью специальной подсистемы. Нужно только забить в ней реквизиты для доступа – имя учётной записи, пароль и домен. В общем, если собираетесь работать с виртуальной машиной долго, то устанавливать Guest Additions – нужно! Это значительно облегчит работу. Тем более, что установка не займёт много времени. Кстати об установке. Установка Windows Установка Guest Additions для виртуальных машин с ОС Windows довольно тривиальна. В панели управления виртуальной машиной выбираем Устройства (Devices) → Подключить образ диска Дополнений гостевой ОС (Insert Guest Additions CD image) После этого система определит, что был установлен установочный диск, осталось только нажать Run и следовать стандартной процедуре установки. После установки система должна перезагрузиться, если этого не произошло, то сделайте это вручную. Linux через GNOME Установка на Linux с графическими интерфейсами типа GNOME также всё очень просто. Для этого также выбираем Устройства (Devices) → Подключить образ диска Дополнений гостевой ОС (Insert Guest Additions CD image) в панели управления VirtualBox: После этого система определит установочный диск и останется лишь нажать Run Software. После установки также требуется перезагрузить систему. Linux через консоль Гораздо интереснее дела обстоят с установкой на Linux без графических интерфейсов через консоль. Рассмотрим установку на примере CentOS 6. Начинаем с того, что также вставляем виртуальный диск. После этого переходим в подмонтированный раздел: cd /mnt/cdrom/ И запускаем процесс установки следующей командой: ./VBoxLinuxAdditions.run После этого делаем reboot. Если всё прошло успешно, что появится новый модуль vboxguest. Проверить можно командой: lsmod | grep vboxguest:
img
Big Data (Большие данные) – это термин, обозначающий большое количество информации – структурированной и неструктурированной – наводняющей сферу бизнеса ежедневно. Но обилие этой информации – не самое важное, гораздо важнее то, что организации делают с ней. Большие данные анализируются для принятия решений и построения стратегий развития бизнеса. История Больших данных Термин «большие данные» относится к данным, настолько обильным и сложным, чей быстрый прирост сложно или невозможно обрабатывать при помощи традиционных подходов. Получение и хранение большого количества информации долгое время были камнем преткновения аналитиков, поэтому концепт больших данных набрал обороты в ранних 2000-х годах. Тогда Дуглас Б. Лейни сформулировал «правило трёх V», которое сейчас используется повсеместно, а тогда было основой концепта больших данных: Объем (Volume): Организации получают информацию от множества источников, включая биржу, смарт-девайсы («Интернета Вещей» - IoT), промышленное оборудование, видео, социальные сети и еще ряд ресурсов. В прошлом проблемой было хранение этих данных, но бюджетные хранилища на таких платформах как Hadoop и так называемых «озерах данных» облегчили это бремя. Скорость прироста (Velocity): С развитием Интернета Вещей, потоки информации наводнили бизнес-поле с беспрецедентной скоростью, и обрабатываться они должны своевременно. RFID-метки, сенсоры и интеллектуальные счетчики позволяют иметь дело с потоками данных в режиме почти реального времени. Многообразие (Variety): Данные поступают во всех возможных форматах – от структурированных, числовых данных с традиционных баз, до текстовых документов, электронных писем, видео, аудио файлов и биржевых данных. Нам, представляются релевантными еще два признака, свойственные большим данным: Переменчивость (Variability): Вдобавок к скорости прироста и многообразию, течение потока данных непредсказуемо – оно меняется часто и значительно. Это непросто, но владельцам бизнеса необходимо знать, что находится в трендах социальных сетей и как обуздывать сезонные и тематические пики выгрузки данных. Достоверность (Veracity): Достоверность – это качество данных. Из-за вариативности источников процесс связки, подбора, очищения и трансформации данных в системе затруднен. Бизнесам необходимо выстраивать отношения и коррелировать иерархию многочисленных ссылок на данные в единую систему. В противном случае, их данные быстро выйдут из-под контроля. Почему важны Большие данные? Важно не количество данных, которыми вы обладаете, а то, что вы с ними делаете. Вы можете взять информацию из любого источника и проанализировать ее, чтобы найти ответы на следующие вопросы: Как уменьшить цены? Как сэкономить время? Как оптимизировать предложения и развивать свой продукт? Как принимать мудрые решения? Комбинируя мощные аналитические подходы и большие данные можно достичь выполнения таких бизнес-задач, как: Определение причин провалов, выявление проблем и дефектов производства в практически реальном времени. Генерирование купонов на распродажу в соответствии с привычками и особенностями покупателя. Пересчет всеобщего портфолио рисков за минуты. Предупреждение мошенничества. Кому интересны большие данные? Большие данные представляют собой большой интерес для производителей. Натиск Интернета Вещей и связанных с ним устройств создал мощный всплеск информации, которую организации собирают, структурируют и анализируют. Большие данные – это всегда возможность сделать большие открытия – для любой организации, крупной или нет. Углубленное изучение требует наличия больших данных, потому что они позволяют отделить скрытые схемы от ответов на интересующие Вас вопросы без «подгонки» данных. Чем глубже вы изучаете, тем выше качество данных, тем лучше результаты. Мотивированные данными инновации Сегодня эксабайты больших данных открывают бесчисленные возможности улучить производство. От более точных прогнозов до повышения оперативной эффективности и улучшения впечатления покупателя – всё возможно, если использовать большие данные с умом. Аналитика – двигатель перемен, затрагивающих весь мир. Это ключ к улучшению условий жизни, исцелению болезней, защиты уязвимых слоев населения и сохранению ресурсов. Как работать с Большими данными? Прежде, чем большие данные начнут работать на бизнес, необходимо осознать, какой путь - источники, системы, обладателей и пользователей – проходят большие данные. Ниже приведены пять ключевых шагов к тому, чтобы стать Большим Боссом Больших Данных – структурированных, неструктурированных и полуструктурированных. Шаг 1. Постройте стратегию больших данных В идеале, стратегия больших данных – это план, выработанный для того, что бы Вы могли видеть все доступные пути для принятия, хранения, обработки, распределения и использования данных внутри компании и за ее пределами. Стратегия больших данных устанавливает планку для успеха бизнеса на фоне обилия информации. Разрабатывая стратегию, важно учесть существование – и будущее развитие – бизнеса, его технологий, целей и инициатив. Это призывает к тому, чтобы с большими данными обращались, как и с любым другим ценным активом, а не как с второсортным приложением. Шаг 2. Узнайте об источниках данных Потоки данных поступают из Интернета Вещей и сопряженных с ним устройств, вливающихся в информационные системы из умной одежды, машин, медицинских устройств, промышленного оборудования и прочего. Эту информацию можно анализировать прямо в момент поступления, решая, что из нее нужно оставить, от чего – избавиться, и что подлежит дальнейшему анализу. Данные социальных сетей поступают из таких источников, как Facebook, YouTube, Instagram, так далее. Эта категория включает в себя огромное количество изображений, видео, голосовых, текстовых и аудио данных, пригодных для маркетинга, распродаж и поддерживающих функций. Эти данные зачастую неструктурированы или полу-структурированы, поэтому их анализ и обработка представляют собой неповторимое испытание. Публично доступные данные поступают из массивов открытых источников, например, data.gov, которым руководит правительство США, или Всемирная книга фактов ЦРУ и Портал открытых данных ЕС. Другие источники больших данных – такие, как «озера», облака поставщиков и покупателей. Шаг 3. Получите доступ к большим данным, обрабатывайте их и храните Современные компьютерные системы способны обеспечить необходимую для обработки массивов данных скорость, мощность и гибкость. Помимо надежного доступа, компании нуждаются в методиках сбора данных, проверки их качества и обеспечения управления данными, а так же их хранения и подготовки к аналитике. Некоторые данные могут храниться в локальной системе традиционных хранилищ, но существуют так же и доступные, недорогие способы хранения данных в облаках, «озерах» и Hadoop. Шаг 4. Анализируйте С помощью высокопроизводительных технологий, таких как грид-вычисления или in-memory аналитика, организации могут использовать все свои большие данные для анализа. Другой подход заключается в предварительном определении актуальности данных. В обоих случаях, аналитика больших данных – это ценный опыт для любой компании. Большие объемы данных все чаще используются в современных аналитических разработках, таких как искусственный интеллект. Шаг 5. Принимайте умные, мотивированные информацией решения Хорошо обработанные данные, которым можно доверять, позволят проводить качественный анализ, на основе которого можно принимать надежные решения. Любому бизнесу необходимо использовать большие данные и действовать, основываясь на информации, которую они предоставляют, чтобы оставаться конкурентоспособными. Принимать решения, продиктованные аналитическими результатами, а не интуицией. Преимущества таких решений очевидны. Организации, управляемые данными, работают лучше, являются более развитыми и более прибыльными. Дальнейшие шаги Большие данные требуют чуткого управления и поддержки продвинутых аналитических технологий. Чтобы подготовить большие данные, меняющиеся ежесекундно, для аналитической обработки, Вам необходимо получить доступ, оформить профиль, очистить данные и преобразовать их. При наличии большого количества источников, объемов и скорости прироста, подготовка данных может занимать огромное количество времени, и тут не обойтись без профессиональной помощи.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59