Начальная

Windows Commander

Far
WinNavigator
Frigate
Norton Commander
WinNC
Dos Navigator
Servant Salamander
Turbo Browser

Winamp, Skins, Plugins
Необходимые Утилиты
Текстовые редакторы
Юмор

File managers and best utilites

ТОП вопросов о Linux «В чем разница». Различие между эмулятором и заглушкой


testing - Какая разница между макетами и заглушками?

Я использовал примеры python в своем ответе, чтобы проиллюстрировать различия.

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

class Foo(object): def bar1(self): pass def bar2(self): #or ... raise NotImplementedError def bar3(self): #or return dummy data return "Dummy Data" Объекты

Mock используются в тестовых примерах проверки, они проверяют, что на эти объекты вызывают определенные методы. Макетные объекты - это моделируемые объекты, которые управляют действиями реальных объектов. Обычно вы создаете макет объекта для проверки поведения какого-либо другого объекта. Mocks позволяет моделировать ресурсы, которые либо недоступны, либо слишком громоздки для модульного тестирования.

mymodule.py:

import os import os.path def rm(filename): if os.path.isfile(filename): os.remove(filename)

test.py:

from mymodule import rm import mock import unittest class RmTestCase(unittest.TestCase): @mock.patch('mymodule.os') def test_rm(self, mock_os): rm("any path") # test that rm called os.remove with the right parameters mock_os.remove.assert_called_with("any path") if __name__ == '__main__': unittest.main()

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

Подробнее о unittest.mock, заметьте в python 2.x mock не включен в unittest, а является загружаемым модулем, который можно загрузить через pip (pp install mock).

Я также читал "The Art of Unit Testing" Роя Ошерове, и я думаю, было бы здорово, если бы подобная книга была написана с использованием примеров Python и Python. Если кто-нибудь знает такую ​​книгу, пожалуйста, разделите. Приветствия:)

qaru.site

Сравнение OpenGL и Direct3D / Хабр

Очень часто встречаются различные заблуждения по поводу этих двух API.

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

Так как тема очень холиварная, я старался придерживаться максимально нейтрального тона.

Взгляд с высоты птичьего полёта
Оба API предоставляют доступ к функциям аппаратного ускорения 3D-графики.

Direct3D — проприетарная разработка Microsoft, созданная специально для Windows. В настоящее время используется так же и на Microsoft Xbox. На других платформах недоступен (если не брать в учёт эмуляцию API, предоставляемую Wine, а также виртуализацию).

OpenGL — открытый стандарт, разрабатываемый некоммерческой организацией Khronos Group при участии сообщества. Все крупные производители GPU (nVidia, AMD, Intel), так или иначе, влияли на OpenGL. В отличие от Direct3D, доступен на очень большом количестве платформ. В частности, OpenGL является основным API для взаимодействия с GPU в Linux и Mac OS.

«Внешние» технические различия API
Direct3D основан на технологии COM. COM — это, по сути, стандарт бинарного представления компонентов. Как известно, классы на чистом C++ не могут быть использованы из других языков программирования, так как они не имеют стандартизованного бинарного представления. В частности, каждый компилятор использует свой собственный метод декорирования имён. COM же позволяет работать с объектно-ориентированной концепцией из любого языка, его поддерживающего. COM — это тоже Windows-specific технология (использует такие специфичные для Windows вещи, как реестр).

В приложении на Direct3D используются указатели на интерфейсы объектов. Работа с объектом осуществляется путём вызова методов его интерфейса. Например, интерфейс так называемого device-а (device в Direct3D — это контекст выполнения для конкретного окна), имеет название (примеры для Direct3D 9) IDirect3DDevice9, для объекта текстуры — IDirect3DTexture9, и т.д. Создание объектов происходит как вызовы методов интерфейса IDirect3DDevice9, например, для текстуры это будет IDirect3DDevice9::CreateTexture.

В Direct3D 10 произошло значительное количество изменений. Direct3D 10 не является обратно совместимым с Direct3D 9. Т.е. чтобы перенести программу на новый API потребуется переписать весь код, относящийся к рендерингу. Подробнее о Direct3D 10 ниже.

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

В OpenGL используется так называемая машина состояний (конечный автомат). Результат вызовов функций OpenGL зависит от внутреннего состояния, и может изменять его. В OpenGL, чтобы получить доступ к конкретному объекту (например, текстуре), нужно сначала выбрать его в качестве текущего функцией glBindTexture, а затем уже можно влиять на объект, например, задание содержимого текстуры осуществляется вызовом glTexImage2D.

Аналогом концепции device-а в Direct3D здесь является контекст. Контекст OpenGL привязан к конкретному окну, так же, как и device в Direct3D.

Общим для двух API является то, что обе не предоставляют чего либо за пределами работы с графикой. А именно, нет функций ни для создания окна, ни для работы с вводом с клавиатуры/мыши, ни для работы со звуком (здесь я не затрагиваю другие части DirectX, такие как DirectInput и DirectSound). Т.е. они не являются библиотеками высокого уровня.

В самой упрощённой форме можно сказать так: OpenGL и Direct3D позволяют рисовать треугольники. И всё. Суть в том, что треугольники можно рисовать очень по-разному (текстуры, освещение, преобразования, и т.д.).

Самое важное различие
Имя ему — расширения (extensions).

Direct3D по сути фиксирован в пределах одной мажорной версии. Какие-либо изменения/дополнения происходят только при выпуске следующей версии.

В OpenGL реально доступное API определяется производителем GPU. Реализация OpenGL позволяет определять расширения к основной спецификации. Приложение может получить список поддерживаемых расширений во время выполнения, и проверить на доступность те, которые оно желает использовать.

На самом деле практически весь функционал OpenGL — это расширения. Развитие OpenGL идёт так: появляется новая фишка, производитель реализовывает её в своём драйвере и документирует доступное расширение. Приложения могут использовать новые функции прямо сейчас, не дожидаясь включения в официальную спецификацию. Если это расширение специфично для конкретного производителя, то в названии оно несёт его имя (например, вот так: GL_NV_point_sprite, где NV — значит nVidia). Если расширение реализовано многими вендорами, то в названии используется EXT (например, GL_EXT_draw_range_elements).

Со временем, если расширение широко используется, оно стандартизируется в ARB, и после этого содержит в имени ARB (например, GL_ARB_vertex_buffer_object). Такое расширение имеет официальный статус.

Самые важные расширения со временем становятся частью основной спецификации. Каждая новая версия OpenGL — это по сути старая версия+несколько новых интегрированных расширений. При этом новые функции продолжают быть доступными как расширения. Т.е. на самом деле с точки зрения программы может быть вообще всё равно, какая версия OpenGL. Главное — какие доступны расширения. Версия OpenGL — это просто способ указать, какой набор расширений гарантированно поддерживается.

Что нового в Direct3D 10/11 и OpenGL 3.x
Microsoft сделали радикальную переработку API в Direct3D 10. Сейчас оно имеет более унифицированный и современный вид. Были выброшены некоторые устаревшие вещи, такие как fixed function rendering (без использования шейдеров). Ещё был выполнен переход к новой модели работы драйвера. В частности, реализация Direct3D теперь может иметь не только kernel-space часть, а и user-space. Это позволяет экономить время на переключения user-space/kernel-space. Однако, из-за новой модели драйвера, Direct3D 10 и выше недоступен на Windows XP. Учитывая всё ещё большую популярность Windows XP, это довольно грустно.

Реализация OpenGL изначально была разделена на user-space и kernel-space части, так что там такой проблемы и не было. Ещё различие в том, что до сих пор не вносилось изменений в OpenGL API, которые не были бы обратно совместимы. Каждое нововведение — это расширение.

Функционал, появившийся в Direct3D 10, например, геометрические шейдеры, доступен в OpenGL на любой платформе через расширение, или, начиная с OpenGL 3.2, как часть основной спецификации. Стоит особо подчеркнуть, это важно, функционал Direct3D 10/11 доступен в OpenGL на любой платформе, в том числе и Windows XP. Таким образом у многих сложилось впечатление, что Direct3D 10 не доступен на Windows XP исключительно по политическим причинам, а не из-за каких-то реальных технических проблем. Впрочем, я не могу судить здесь, сохраняя нейтральный тон, о том, были ли действительно такие проблемы при введении новой модели видео-драйверов.

Теперь о нововведениях в OpenGL 3.x. Начиная с OpenGL 3.0 появилась так называемая deprecation model. Часть старой функциональности, относящаяся к fixed function rendering, а также к рендерингу, основанному на glBegin/glEnd, и многие другие устаревшие и неактуальные вещи, были объявлены как deprecated, и были впоследствии удалены из основной спецификации OpenGL 3.1. Это позволяет сохранять основную спецификацию в актуальной и современной форме.

Казалось бы, это должно сломать совместимость со старыми программами. Ведь раньше, когда программа создавала контекст OpenGL, она просто получала контекст версии максимально доступной. Это было ОК, т.к. новые версии всегда являлись надстройками над предыдущими. Чтобы избежать нарушений совместимости, программы, которые хотят получить контект OpenGL 3.x должны использовать новый метод создания контекста, который позволяет указать, какую именно версию OpenGL нужно получить.

Но, как следует из того, что уже было написано раньше про расширения, и это важно, функционал OpenGL 3.x можно получить через расширения, не создавая контекст новым методом. Т.е. OpenGL 1.1 + расширения = OpenGL 3.2! Таким образом, сохраняется полная обратная совместимость. Например, геометрические шейдеры — это расширение GL_ARB_geometry_shader4.

Распространённые заблуждения
OpenGL отстаёт от Direct3D, и вообще, судя по таким вялым изменениям в спецификации, наверное уже совсем мёртв.

Собственно, причина такого заблуждения — это незнание о расширениях. Вообще говоря, OpenGL может и часто опережает (!) Direct3D в плане инноваций, т.к. производитель может добавить расширение к OpenGL, не дожидаясь никого, в то время как в Direct3D изменения может внести только Microsoft.

OpenGL — это для программ профессиональной графики, а Direct3D — это для игр.

Это заблуждение имеет историческую причину. OpenGL исходно разрабатывался как библиотека 3D графики, которая МОЖЕТ, но НЕ ОБЯЗАНА ускоряться аппаратно. Это также объясняет наличие некоторых функций, например рендеринг стерео-изображений, которые не нужны играм. Direct3D же разрабатывался гораздо позже, сразу с расчётом на ускорение на GPU. В момент появления многих пакетов профессиональной работы с графикой Direct3D просто не было.

Интересные нюансы
Microsoft поставляет вместе с Windows драйверы без поддержки OpenGL. OpenGL будет рендерить без ускорения, или эмулироваться через DirectX. Так что, если нужна поддержка OpenGL под Windows, нужно ставить драйвер с сайта производителя. Причины для такого неприятия OpenGL, скорее всего, опять чисто политические.
Так что же делать, как жить?
Примечание: А вот эта часть носит весьма субъективный характер.

Если Вы — разработчик, и решаете, какое API использовать, то задумайтесь над следующим: За OpenGL — массовая кроссплатформенность, в частности, доступность всех новых функций и на Windows XP, где Direct3D 10/11 нет, и никогда не будет. Против OpenGL — драйвера в Windows из коробки не имеют поддержки OpenGL, так что ставить их нужно с сайта производителя.

Если Вы — новичок в разработке 3D-приложений, и желаете освоить эту область, то я бы рекомендовал сделать так: сначала разобраться с Direct3D (причина тому проста — Microsoft предоставляет очень качественный SDK), а затем разобраться с OpenGL (это будет очень просто после Direct3D). К сожалению, такой вещи, как SDK, для OpenGL нет. Поэтому осваивать с нуля будет сложнее.

Вот вроде и всё. Успехов в разработке!

habr.com

Основные понятия и определения

Транслятор - обслуживающая программа, преобразующая исходную программу, предоставленную на входном языке программирования, в рабочую программу, представленную на объектном языке.

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

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

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

Компилятор - это обслуживающая программа, выполняющая трансляцию на машинный язык программы, записанной на исходном языке программирования. Также как и ассемблер, компилятор обеспечивает преобразование программы с одного языка на другой (чаще всего, в язык конкретного компьютера). Вместе с тем, команды исходного языка значительно отличаются по организации и мощности от команд машинного языка. Существуют языки, в которых одна команда исходного языка транслируется в 7-10 машинных команд. Однако есть и такие языки, в которых каждой команде может соответствовать 100 и более машинных команд (например, Пролог). Кроме того, в исходных языках достаточно часто используется строгая типизация данных, осуществляемая через их предварительное описание. Программирование может опираться не на кодирование алгоритма, а на тщательное обдумывание структур данных или классов. Процесс трансляции с таких языков обычно называется компиляцией, а исходные языки обычно относятся к языкам программирования высокого уровня (или высокоуровневым языкам). Абстрагирование языка программирования от системы команд компьютера привело к независимому созданию самых разнообразных языков, ориентированных на решение конкретных задач. Появились языки для научных расчетов, экономических расчетов, доступа к базам данных и другие.

Интерпретатор - программа или устройство, осуществляющее пооператорную трансляцию и выполнение исходной программы. В отличие от компилятора, интерпретатор не порождает на выходе программу на машинном языке. Распознав команду исходного языка, он тут же выполняет ее. Как в компиляторах, так и в интерпретаторах используются одинаковые методы анализа исходного текста программы. Но интерпретатор позволяет начать обработку данных после написания даже одной команды. Это делает процесс разработки и отладки программ более гибким. Кроме того, отсутствие выходного машинного кода позволяет не "захламлять" внешние устройства дополнительными файлами, а сам интерпретатор можно достаточно легко адаптировать к любым машинным архитектурам, разработав его только один раз на широко распространенном языке программирования. Поэтому, интерпретируемые языки, типа Java Script, VB Script, получили широкое распространение. Недостатком интерпретаторов является низкая скорость выполнения программ. Обычно интерпретируемые программы выполняются в 50-100 раз медленнее программ, написанных в машинных кодах.

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

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

Очень часто эмулятор используется для выполнения старых программ на новых вычислительных машинах. Обычно новые компьютеры обладают более высоким быстродействием и имеют более качественное периферийное оборудование. Это позволяет эмулировать старые программы более эффективно по сравнению с их выполнением на старых компьютерах. Примером такого подхода является разработка эмуляторов домашнего компьютера ZX Spectrum с микропроцессором Z80. До сих пор находятся любители поиграть на эмуляторе в устаревшие, но все еще не утратившие былой привлекательности, игровые программы. Эмулятор может также использоваться как более дешевый аналог современных компьютерных систем, обеспечивая при этом приемлемую производительность, эквивалентную младшим моделям некоторого семейства архитектур. В качестве примера можно привести эмуляторы IBM PC совместимых компьютеров, реализованные на более мощных компьютерах фирмы Apple. Ряд эмуляторов, написанных для IBM PC, с успехом заменяют различные игровые приставки.

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

Перекодировщик - программа или программное устройство, переводящие программы, написанные на машинном языке одной ЭВМ в программы на машинном языке другой ЭВМ. Если эмулятор является менее интеллектуальным аналогом интерпретатора, то перекодировщик выступает в том же качестве по отношению к компилятору. Точно также исходный (и обычно двоичный) машинный код или промежуточное представление преобразуются в другой аналогичный код по одной команде и без какого-либо общего анализа структуры исходной программы. Перекодировщики бывают полезны при переносе программ с одних компьютерных архитектур на другие. Они могут также использоваться для восстановления текста программы на языке высокого уровня по имеющемуся двоичному коду.

Макропроцессор - программа, обеспечивающая замену одной последовательности символов другой [Браун]. Это разновидность компилятора. Он осуществляет генерацию выходного текста путем обработки специальных вставок, располагаемых в исходном тексте. Эти вставки оформляются специальным образом и принадлежат конструкциям языка, называемого макроязыком. Макропроцессоры часто используются как надстройки над языками программирования, увеличивая функциональные возможности систем программирования. Практически любой ассемблер содержит макропроцессор, что повышает эффективность разработки машинных программ. Такие системы программирования обычно называются макроассемблерами.

Макропроцессоры используются и с языками высокого уровня. Они увеличивают функциональные возможности таких языков как PL/1, C, C++. Особенно широко макропроцессоры применяются в C и C++, позволяя упростить написание программ. Примером широкого использования макропроцессоров является библиотека классов Microsoft Foundation Classes (MFC). Через макровставки в ней реализованы карты сообщений и другие программные объекты. При этом, макропроцессоры повышают эффективность программирования без изменения синтаксиса и семантики языка.

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

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

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

studfiles.net

ТОП вопросов о Linux "В чем разница"

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

Мы собрали лучшие вопросы из серии «в чем разница», размещенные на сервисе askubuntu. Вопросы отсортированы по количеству голосов.

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

Содержание статьи:

  • 1. В чем разница между символической и жесткой ссылкой
  • 2. В чем разница между adduser и useradd
  • 3. В чем разница между /etc/init и /etc/init.d
  • 4. В чем разница между /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
  • 5. В чем разница между sudo su, sudo -i, sudo /bin/bash
  • 6. В чем разница между терминами консоль, терминал, командная строка
  • 7. В чем разница между dpkg и apt-get
  • 8. В чем разница между service и /etc/init.d
  • 9. В чем разница между #!/bin/bash и #!/bin/sh
  • 10. В чем разница между пакетами i386 и amd64
  • 11. В чем разница между killall и pkill
  • 12. В чем разница между PGP и GPG
  • 13. В чем разница между режимом сна и гибернации
  • 14 В чем разница между Ctrl+C, Ctrl+Z, Ctrl+D
  • 15. В чем разница между gksu и pkexec
  • Выводы

1. В чем разница между символической и жесткой ссылкой

Как вы знаете команда ln позволяет создавать ссылки в Linux. Она может создавать два типа ссылок — обычные (жесткие) и символические если передать опцию -s. Обе они указывают на файл. Разница лишь в виде этого указателя.

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

Жесткая ссылка основана на файловой системе. Она указывает на место, на диске, где расположены данные файла (номер иноды). Вы можете полностью изменять файл, включая его имя. Посути во время создания файла создается одна ссылка не него, если вы создаете жесткую ссылку с помощью ln, то их становится уже две. И даже если вы удалите первую, вторая все равно будет указывать на тот же файл, потому что эти ссылки равноправны и место на диске может быть очищено, только если ссылок не осталось вовсе.

2. В чем разница между adduser и useradd

Обе команды создают нового пользователя в системе. Но они очень сильно отличаются.

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

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

Рекомендуется использовать adduser.

3. В чем разница между /etc/init и /etc/init.d

Папка /etc/init.d содержит скрипты, используемые системой инициализации SysVinit. Это стандартная система инициализации для многих дистрибутивов Linux. Обычно, это сценарии оболочки, используемые для запуска, остановки и перезапуска сервисов.

Папка /etc/init содержит файлы конфигурации системы инициализации Upstart используемой в ubuntu. Поскольку Ubuntu постепенно переходит на Upstart, в системе есть и те и другие скрипты, многие /etc/init.d скрипты выполняются как слой совместимости с Upstart

4. В чем разница между /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin

/bin — каталог для бинарных файлов, которые используются системой еще до того, как cмонтирован раздел /usr на самом раннем этапе загрузки. Также здесь содержаться те команды, которые вы используете при запуске в одно-пользовательском режиме и режиме восстановления.

/sbin — то же самое, только для бинарных файлов, для выполнения которых требуются права суперпользователя.

/usr/bin — для общесистемных бинарных файлов

/usr/bin — то же самое, только для запуска которых нужны права суперпользователя.

/usr/local/bin и /usr/local/sbin — аналогично двум предыдущим, только для ваших собственных сценариев и программ, которые не устанавливаются с помощью менеджера пакетов.

5. В чем разница между sudo su, sudo -i, sudo /bin/bash

Команда su позволяет изменить текущего пользователя терминала на другого. Команда sudo выполняет команду от имени root пользователя. Теперь разберем сам вопрос.

sudo su — выполняет команду su от имени суперпользователя. Таким образом, сначала используется sudo чтобы получить права суперпользователя, а затем пользователь меняется на root с помощью su. При этом вы останетесь в той же директории потому, что выполняется ваш .bashrc. А также .profile пользователя root поэтому вы окажетесь в окружении root.

sudo -i — похожая команда, опция -i указывает утилите что нужно переключиться в консоль от имени суперпользователя. На этот раз вы уже окажетесь в домашней папке root, и будет выполнен его .bashrc и .profile.

sudo /bin/bash — запускает еще одну оболочку bash от имени суперпользователя. Файлы конфигурации не читаются, но выполняется только .bashrc вашего пользователя. Вы не окажетесь в окружении root, а просто останетесь в своем окружении с правами суперпользователя.

6. В чем разница между терминами консоль, терминал, командная строка

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

В терминологии UNIX, терминал — это любой файл устройства, который реализует ряд специальных команд для чтения и записи. Под эмуляторами терминалов подразумеваются программы, обеспечивающие доступ к этим Unix терминалам через некоторую прослойку ядра. Это могут быть такие программы как Xterm, Terminator, программы, обеспечивающие изоляцию между приложениями — screen, tmux, программы удаленного доступа — ssh и т д.

Консоль — это, как правило, терминал в физическом смысле. Главный терминал, реализуемый ядром, находящийся непосредственно на машине. В Linux консолью называют несколько терминалов TTY, между которыми можно переключаться с помощью сочетаний клавиш Ctrl+Alt+F(n)

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

7. В чем разница между dpkg и apt-get

dpkg — это утилита для установки deb пакетов. То есть при выполнении команды dpkg -i file.deb, этот пакет будет установлен, если ему нужны какие-либо зависимости, утилита уведомит вас об этом. Но сами зависимости установлены не будут и пакет не будет установлен если зависимости не разрешены.

apt-get — это система управления пакетами, для дистрибутивов на базе Debian. Вы можете очень просто устанавливать, обновлять и удалять пакеты.

Здесь есть еще один инструмент — gdebi, это как бы среднее звено между dpkg и apt-get. Во время установки deb пакета утилита может разрешать и сама устанавливать зависимости.

8. В чем разница между service и /etc/init.d

Как мы уже говорили, /etc/init.d — содержит скрипты инициализации SysVinit. Это старый способ запускать сервисы. Эти сервисы запускаются в определенной последовательности и не могут быть настроены более сложные зависимости.

Upstart была разработана с целью заменить все /etc/init.d скрипты на более совершенные конфигурационные файлы /etc/init.

service позволяет плавно перейти от скриптов /etc/init.d к конфигурационным файлам upstart. Эта утилита позволяет работать с обоими типами сервисов.

9. В чем разница между #!/bin/bash и #!/bin/sh

bash и sh это две разные оболочки. Bash — более новая и функциональная, с расширенными возможностями синтаксиса. Большинство команд работают одинаково, но они разные.

В современных системах чаще всего /bin/sh, это всего лишь ссылка на /bin/bash.

10. В чем разница между пакетами i386 и amd64

Эти пакеты собраны для разных архитектур. i386 — для 32 битной версии, а amd64 (x86_64) — для 64 разрядной версии процессора Intel или AMD

Intel 80386, еще известный как i386, это 32 битный процессор, выпущенный компанией Intel в 1985 году. Эта архитектура еще называется x86, IA-32 или просто i386.

x86-64 — расширение набора инструкций для x86. Здесь поддерживаются гораздо большее адресное пространство, чем в x86, что позволяет программистам намного легче работать с большим количеством данных.

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

11. В чем разница между killall и pkill

Обе эти утилиты делают почти то же самое — уничтожают процессы, но по-разному.

pkill находит процесс по разным параметрам, например, pid, ppid, cmd, uid, и посылает ему сигнал завершения.

killall находит процесс по имени и завершает все совпавшие процессы, есть режим регулярных выражений и интерактивный режим, которых нет в pkill.

12. В чем разница между PGP и GPG

PGP — формат ключей и зашифрованных сообщений, оформленный и стандартизированный как OpenPGP. А также программное обеспечение Pretty Good Privacy, для шифрования, написанное Филом Зумерманом и сейчас принадлежащее компании Symantec.

GPG- независимая программная реализация стандарта OpenPGP, вы можете использовать ее для обмена сообщениями с людьми, даже теми, кто использует ПО от Symantec.

13. В чем разница между режимом сна и гибернации

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

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

14 В чем разница между Ctrl+C, Ctrl+Z, Ctrl+D

Сочетание клавиш Ctrl+C (intr) отправляет сигнал SIGINT приложению. Обычно после этого приложение завершает свою деятельность и закрывается.

Ctrl+Z или susp, отправляет сигнал SIGSTP, приложение приостанавливает свою деятельность и сворачивается в фоновый режим. Потом его можно восстановить с помощью команды fg. Посмотреть свернутые процессы можно командой jobs.

Ctrl+D — полностью завершает сеанс терминала.

15. В чем разница между gksu и pkexec

Обе программы позволяют выполнять графические приложения от имени суперпользователя.

Pkexec работает на основе PolicyKit. PolicyKit более настраиваемая, показывает полный путь к программе, и позволяет использовать политики для настройки поведения программы, например, настройки запроса пароля и т д.

Выводы

В этой статье мы рассмотрели 15 самых популярных вопросов В чем разница Linux. Многие из них касались только Ubuntu, но тем не менее они актуальны и для других дистрибутивов Linux.

Оцените статью:

Загрузка...

losst.ru

Разница между компилятором и интерпретатором

Разница между компилятором и интерпретатором

Иконка компилятор

Как Компилятор так и Интерпретатор имеют одно предназначение — конвертировать инструкции языка высокого уровня (как C или Java) в бинарную форму, понятную компьютеру. Это программное обеспечение, используемое для запуска высокоуровневых программ и кодов выполняемых различные задачи. Для разных высокоуровневых языков разработаны специфичные компиляторы/интерпретаторы. Не смотря на то что как компилятор так и интерпретатор преследуют одну и ту же цель, они отличаются способом выполнения своей задачи, то есть конвертирования высокоуровневого языка в машинные инструкции. В этой статье мы поговорим о базовой работе обоих и выделим главные отличия между компилятором и интерпретатором.

Компилятор

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

Процесс компиляции Разница между компилятором и интерпретатором

На картинке показано базовое очертание процесса компиляции. Тут программа написанная на языке высокого уровня показана как «Исходный код», а сконвертированный называется «Исполняемый код».

Интерпретатор

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

Процесс интерпретации Разница между компилятором и интерпретатором

Очертание процесса интерпретации на картинке выше показывает, что сначала исходный код конвертируется в промежуточную форму, а затем выполняется интерпретатором.

Ниже перечислены главные отличия между компилятором и интерпретатором:

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

Источник тут.

devnuances.com

Рассылка "Английский без проблем", выпуск 122

Особенности употребления лексики (different, various, diverse)

Прилагательные different, various, diverse переводятся как 'различный', 'разнообразный'. Они различаются по дополнительной характеристике выражаемого ими понятия и по своей стилистической окраске.

Прилагательное different имеет смысловой оттенок 'другой', 'не похожий на (что-либо)', 'отличный от чего-либо', 'разный'. Антонимами к этому слову служат слова alike (схожий, одинаковый), similar (похожий, аналогичный):

Different tastes - разные вкусы Different opinions - различные мнения

We both enjoyed the same things but in different ways. Нам обоим нравились одни и те же вещи, но по-разному.

They approached the subject from different points of view. У них был разный подход к одному и тому же предмету.

Прилагательное various имеет смысловые оттенки 'разнообразный', 'имеющий отличные от других объектов характеристики'; оно 'подчёркивает индивидуальность объекта':

Various professions - различные профессии Various accounts - разнообразные отчёты

This can be applied to various fields of science. Это может быть применимым в различных областях науки.

Mr. Crawly is a manager in a big company and he has various duties. Мистер Кроули менеджер в большой компании и у него самые разные обязанности.

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

Diverse interests - разнообразные интересы Diverse methods - различные методы

The remedies suggested are very diverse. Предлагаемые средства очень разнообразны.

He kept the conversation flowing easily on diverse topics. Он легко поддерживал разговор на различные темы.

Для проверки полученных знаний по употреблению прилагательных different, various, diverse предлагаем Вам пройти тест на нашем сайте:Lexical Test (different, various, diverse).

www.native-english.ru

Версии Bluetooth и их отличия

Технология Bluetooth предназначена для передачи данных на небольших (не более 100м для последних версий) расстояниях. Объясняется это принципом действия, основанном на радиосвязи в ISM-диапазоне.

Скорость работы Bluetooth ощутимо ниже, чем у Wi-Fi, но при этом она потребляет меньше энергии батареи и позволяет устройствам быстрее соединятся друг с другом. Кроме того, Bluetooth-соединения устойчивы к разного рода широкополосным помехам, а оборудование для их реализации стоит вполне недорого.

Версия 1.0

Вышла в свет в 1998г. и позволяла передавать данные на расстоянии нескольких метров. Для нее были характерны плохая совместимость между изделиями разных производителей и невозможность реализации анонимного соединения на протокольном уровне. Эта версия уже давно не используется.

Версии 1.1 и 1.2

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

Версии 2.0 и 2.1

Обновление 2.0 вышло в 2004г., 2.1 – в 2007г. Разница между ними заключается в большей энергоэкономичности последней версии. Главная особенность Bluetooth 2.0 – внедрение технологии EDR, повышавшей скорость до теоретических 3Мбит/с (на практике чаще всего получалось 1,5-2Мбит/с. Сегодня можно купить недорогой смартфон, поддерживающий эту технологию.

Версия 2.1 – самое популярное обновление Bluetooth. Она совместима фактически со всеми устройствами, представленными на мобильном рынке. Причем если в смартфонах/планшетах используется Bluetooth более свежих обновлений, то в беспроводных мышах, клавиатурах, гарнитурах и т.д. нередко реализован именно стандарт 2.1+EDR.

Энергопотребление в версии 2.1 снизилось почти в 10 раз, появилась дополнительная полоса пропускания, что облегчило использование нескольких подключений одновременно. Реализовано подключение нажатием одной кнопки.

Версия 3.0

Вышла в 2009г и впервые использовала высокоскоростную (HS) трансляцию данных. Скорость возросла до 24Мбит/с. Реализовано это было за счет установки двух модулей (Bluetooth3.1+EDR и модуля, функционирующего по протоколу 802.11, как и Wi-Fi). Именно второй модуль и «выдает» скачок скорости, но не дает Wi-Fi-совместимость. Файлы небольшого объема передаются при помощи модуля 2.1+EDR, объемные – по протоколу 802.11.

Недостатком такого решения стало возросшее энергопотребление. Эту версию поддерживают практически все смартфоны, включая аппараты Highscreen.

Версии 4.0 и 4.1

Обновление 4.0 вышло в 2010г. В нем был исправлен основной недостаток HS – чрезмерное потребление энергии. Спецификация 4.0 включала в себя «традиционный» модуль Bluetooth и высокоскоростную передачу (основанную на Wi-Fi). Также был добавлен Bluetooth-протокол с минимальным энергопотреблением. Они используется главным образом в электронных датчиках, мини-сенсорах (в том числе и медицинских) и т.д.

Время установления соединения снизилось до 5мс, расстояние передачи возросло до 100м. Введено AES-шифрование для защиты данных. Эта версия реализована в свежих моделях крупных производителей и установлена на флагманских смартфонах Хайскрин.

Обновление 4.1 представлено в 2013г. Главные доработки касаются совместного функционирования Bluetooth и LTE-стандарта. Пакеты данных автоматически координируются для взаимной помехозащиты.

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

АКТУАЛЬНЫЙ КАТАЛОГ СМАРТФОНОВ ХАЙСКРИН 2018

Каталог смартфонов

shop.highscreen.ru


 

..:::Новинки:::..

Windows Commander 5.11 Свежая версия.

Новая версия
IrfanView 3.75 (рус)

Обновление текстового редактора TextEd, уже 1.75a

System mechanic 3.7f
Новая версия

Обновление плагинов для WC, смотрим :-)

Весь Winamp
Посетите новый сайт.

WinRaR 3.00
Релиз уже здесь

PowerDesk 4.0 free
Просто - напросто сильный upgrade проводника.

..:::Счетчики:::..